Subversion Repositories ALCASAR

Compare Revisions

No changes between revisions

Ignore whitespace Rev 324 → Rev 325

/web/acc/phpsysinfo/images/Arch.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/web/acc/phpsysinfo/images/unknown.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/web/acc/phpsysinfo/images/PLD.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/web/acc/phpsysinfo/images/Fedora.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/web/acc/phpsysinfo/images/Ubuntu.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/web/acc/phpsysinfo/images/Trustix.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/web/acc/phpsysinfo/images/Cobalt.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/web/acc/phpsysinfo/images/free-eos.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/web/acc/phpsysinfo/images/Redhat.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/web/acc/phpsysinfo/images/SunOS.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/web/acc/phpsysinfo/images/xp.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/web/acc/phpsysinfo/images/FreeBSD.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/web/acc/phpsysinfo/images/Slackware.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/web/acc/phpsysinfo/images/Suse.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/web/acc/phpsysinfo/images/NetBSD.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/web/acc/phpsysinfo/images/Mandrake.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/web/acc/phpsysinfo/images/Debian.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/web/acc/phpsysinfo/images/Darwin.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/web/acc/phpsysinfo/images/lfs.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/web/acc/phpsysinfo/images/index.html
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/images/Rubix.png
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/web/acc/phpsysinfo/images/OpenBSD.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/web/acc/phpsysinfo/images/CentOS.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/web/acc/phpsysinfo/images/Gentoo.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/web/acc/phpsysinfo/includes/xml/network.php
0,0 → 1,95
<?php
/***************************************************************************
* Copyright (C) 2006 by phpSysInfo - A PHP System Information Script *
* http://phpsysinfo.sourceforge.net/ *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the *
* Free Software Foundation, Inc., *
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
***************************************************************************/
 
// $Id: network.php,v 1.15 2007/02/08 20:16:25 bigmichi1 Exp $
 
//
// xml_network()
//
function xml_network () {
global $sysinfo;
$arrNet = $sysinfo->network();
$_text = " <Network>\n";
foreach( $arrNet as $strDev => $arrStats ) {
$_text .= " <NetDevice>\n"
. " <Name>" . htmlspecialchars( trim( $strDev ), ENT_QUOTES ) . "</Name>\n"
. " <RxBytes>" . htmlspecialchars( $arrStats['rx_bytes'], ENT_QUOTES ) . "</RxBytes>\n"
. " <TxBytes>" . htmlspecialchars( $arrStats['tx_bytes'], ENT_QUOTES ) . "</TxBytes>\n"
. " <Errors>" . htmlspecialchars( $arrStats['errs'], ENT_QUOTES ) . "</Errors>\n"
. " <Drops>" . htmlspecialchars( $arrStats['drop'], ENT_QUOTES ) . "</Drops>\n"
. " </NetDevice>\n";
}
$_text .= " </Network>\n";
return $_text;
}
 
//
// html_network()
//
function html_network () {
global $XPath;
global $text;
$textdir = direction();
$_text = "<table border=\"0\" width=\"100%\" align=\"center\">\n"
. " <tr>\n"
. " <td align=\"" . $textdir['left'] . "\" valign=\"top\"><font size=\"-1\"><b>" . $text['device'] . "</b></font></td>\n"
. " <td align=\"" . $textdir['right'] . "\" valign=\"top\"><font size=\"-1\"><b>" . $text['received'] . "</b></font></td>\n"
. " <td align=\"" . $textdir['right'] . "\" valign=\"top\"><font size=\"-1\"><b>" . $text['sent'] . "</b></font></td>\n"
. " <td align=\"" . $textdir['right'] . "\" valign=\"top\"><font size=\"-1\"><b>" . $text['errors'] . "</b></font></td>\n"
. " </tr>\n";
for( $i = 1, $max = sizeof( $XPath->getDataParts( "/phpsysinfo/Network" ) ); $i < $max; $i++ ) {
if( $XPath->match( "/phpsysinfo/Network/NetDevice[" . $i . "]/Name" ) ) {
$_text .= " <tr>\n";
$_text .= " <td align=\"" . $textdir['left'] . "\" valign=\"top\"><font size=\"-1\">" . $XPath->getData( "/phpsysinfo/Network/NetDevice[" . $i . "]/Name" ) . "</font></td>\n";
$_text .= " <td align=\"" . $textdir['right'] . "\" valign=\"top\"><font size=\"-1\">" . format_bytesize( $XPath->getData( "/phpsysinfo/Network/NetDevice[" . $i . "]/RxBytes" ) / 1024 ) . "</font></td>\n";
$_text .= " <td align=\"" . $textdir['right'] . "\" valign=\"top\"><font size=\"-1\">" . format_bytesize( $XPath->getData( "/phpsysinfo/Network/NetDevice[" . $i . "]/TxBytes" ) / 1024 ) . "</font></td>\n";
$_text .= " <td align=\"" . $textdir['right'] . "\" valign=\"top\"><font size=\"-1\">" . $XPath->getData( "/phpsysinfo/Network/NetDevice[" . $i . "]/Errors" ) . '/' . $XPath->getData( "/phpsysinfo/Network/NetDevice[" . $i . "]/Drops" ) . "</font></td>\n";
$_text .= " </tr>\n";
}
}
$_text .= "</table>";
return $_text;
}
 
function wml_network() {
global $XPath;
global $text;
$_text = "<card id=\"network\" title=\"" . $text['netusage'] . "\">\n";
for( $i = 1, $max = sizeof( $XPath->getDataParts( "/phpsysinfo/Network" ) ); $i < $max; $i++ ) {
if( $XPath->match( "/phpsysinfo/Network/NetDevice[" . $i . "]/Name" ) ) {
$_text .= "<p>" . $text['device'] . ": " . $XPath->getData( "/phpsysinfo/Network/NetDevice[" . $i . "]/Name" ) . "<br/>\n"
. "- U: " . format_bytesize( $XPath->getData("/phpsysinfo/Network/NetDevice[" . $i . "]/TxBytes" ) / 1024 ) . "<br/>\n"
. "- D: " . format_bytesize( $XPath->getData("/phpsysinfo/Network/NetDevice[" . $i . "]/RxBytes" ) / 1024 ) . "<br/>\n"
. "- E: " . $XPath->getData( "/phpsysinfo/Network/NetDevice[" . $i . "]/Errors" ) . '/' . $XPath->getData( "/phpsysinfo/Network/NetDevice[" . $i . "]/Drops" ) . "</p>\n";
}
}
$_text .= "</card>\n";
return $_text;
}
?>
/web/acc/phpsysinfo/includes/xml/utilisateur.php.2
0,0 → 1,87
<?php
/***************************************************************************
* Copyright (C) 2006 by phpSysInfo - A PHP System Information Script *
* http://phpsysinfo.sourceforge.net/ *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the *
* Free Software Foundation, Inc., *
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
***************************************************************************/
 
// $Id: vitals.php,v 1.32 2007/02/18 18:59:54 bigmichi1 Exp $
 
// xml_vitals()
 
function xml_utilisateur () {
global $sysinfo;
global $loadbar;
global $show_vhostname;
$strLoadavg = "";
$arrBuf = ( $loadbar ? $sysinfo->loadavg( $loadbar ) : $sysinfo->loadavg() );
foreach( $arrBuf['avg'] as $strValue) {
$strLoadavg .= $strValue . ' ';
}
$_text = " <Portail>\n"
. " <Utilisateur>" . htmlspecialchars( $show_vhostname ? $sysinfo->vhostname() : $sysinfo->chostname(), ENT_QUOTES ) . "</Utilisateur>\n"
. " <Groupe>" . htmlspecialchars( $show_vhostname ? $sysinfo->vip_addr() : $sysinfo->ip_addr(), ENT_QUOTES ) . "</Groupe>\n";
$_text .= " </Portail>\n";
return $_text;
}
 
// html_vitals()
function html_utilisateur () {
global $webpath;
global $XPath;
global $text;
$textdir = direction();
$scale_factor = 2;
$strLoadbar = "";
$uptime = "";
if( $XPath->match( "/phpsysinfo/Portail/User" ) )
$strLoadbar = "<br>" . create_bargraph( $XPath->getData( "/phpsysinfo/Vitals/CPULoad" ), 100, $scale_factor ) . "&nbsp;" . $XPath->getData( "/phpsysinfo/Portail/User" ) . "%";
$_text = "<table border=\"0\" width=\"100%\" align=\"center\">\n"
. " <tr>\n"
. " <td valign=\"top\"><font size=\"-1\">" . $text['utilisateur'] . "</font></td>\n"
. " <td><font size=\"-1\">" . $XPath->getData( "/phpsysinfo/Portail/Utilisateur" ) . "</font></td>\n"
. " </tr>\n"
. " <tr>\n"
. " <td valign=\"top\"><font size=\"-1\">" . $text['groupe'] . "</font></td>\n"
. " <td><font size=\"-1\">" . $XPath->getData( "/phpsysinfo/Portail/Groupe" ) . "</font></td>\n"
. " </tr>\n"
. "</table>\n";
return $_text;
}
 
function wml_utilisateur () {
global $XPath;
global $text;
$_text = "<card id=\"vitals\" title=\"" . $text['vitals'] . "\">\n"
. "<p>" . $text['hostname'] . ":<br/>\n"
. "-&nbsp;" . $XPath->getData( "/phpsysinfo/Vitals/Hostname" ) . "</p>\n"
. "<p>" . $text['ip'] . ":<br/>\n"
. "-&nbsp;" . $XPath->getData( "/phpsysinfo/Vitals/IPAddr" ) . "</p>\n"
. "</card>\n";
return $_text;
}
?>
/web/acc/phpsysinfo/includes/xml/mbinfo.php
0,0 → 1,208
<?php
/***************************************************************************
* Copyright (C) 2006 by phpSysInfo - A PHP System Information Script *
* http://phpsysinfo.sourceforge.net/ *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the *
* Free Software Foundation, Inc., *
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
***************************************************************************/
 
// $Id: mbinfo.php,v 1.20 2007/02/18 19:11:31 bigmichi1 Exp $
 
function xml_mbinfo() {
global $text;
global $mbinfo;
$_text = "";
$arrBuff = $mbinfo->temperature();
$_text = " <MBinfo>\n";
if( sizeof($arrBuff ) > 0 ) {
$_text .= " <Temperature>\n";
foreach( $arrBuff as $arrValue ) {
$_text .= " <Item>\n";
$_text .= " <Label>" . htmlspecialchars( $arrValue['label'], ENT_QUOTES ) . "</Label>\n";
$_text .= " <Value>" . htmlspecialchars( $arrValue['value'], ENT_QUOTES ) . "</Value>\n";
$_text .= " <Limit>" . htmlspecialchars( $arrValue['limit'], ENT_QUOTES ) . "</Limit>\n";
$_text .= " </Item>\n";
}
$_text .= " </Temperature>\n";
}
$arrBuff = $mbinfo->fans();
if( sizeof( $arrBuff ) > 0 ) {
$_text .= " <Fans>\n";
foreach( $arrBuff as $arrValue ) {
$_text .= " <Item>\n";
$_text .= " <Label>" . htmlspecialchars( $arrValue['label'], ENT_QUOTES ) . "</Label>\n";
$_text .= " <Value>" . htmlspecialchars( $arrValue['value'], ENT_QUOTES ) . "</Value>\n";
$_text .= " <Min>" . htmlspecialchars( $arrValue['min'], ENT_QUOTES ) . "</Min>\n";
$_text .= " </Item>\n";
}
$_text .= " </Fans>\n";
}
$arrBuff = $mbinfo->voltage();
if( sizeof( $arrBuff ) > 0 ) {
$_text .= " <Voltage>\n";
foreach( $arrBuff as $arrValue ) {
$_text .= " <Item>\n";
$_text .= " <Label>" . htmlspecialchars( $arrValue['label'], ENT_QUOTES ) . "</Label>\n";
$_text .= " <Value>" . htmlspecialchars( $arrValue['value'], ENT_QUOTES ) . "</Value>\n";
$_text .= " <Min>" . htmlspecialchars( $arrValue['min'], ENT_QUOTES ) . "</Min>\n";
$_text .= " <Max>" . htmlspecialchars( $arrValue['max'], ENT_QUOTES ) . "</Max>\n";
$_text .= " </Item>\n";
}
$_text .= " </Voltage>\n";
}
$_text .= " </MBinfo>\n";
return $_text;
}
 
function html_mbtemp() {
global $text;
global $XPath;
$textdir = direction();
$scale_factor = 2;
$_text = " <tr>\n"
. " <td><font size=\"-1\"><b>" . $text['s_label'] . "</b></font></td>\n"
. " <td><font size=\"-1\"><b>" . $text['s_value'] . "</b></font></td>\n"
. " <td align=\"" . $textdir['right'] . "\" valign=\"top\"><font size=\"-1\"><b>" . $text['s_limit'] . "</b></font></td>\n"
. " </tr>\n";
for( $i = 1, $max = sizeof( $XPath->getDataParts( "/phpsysinfo/MBinfo/Temperature" ) ); $i < $max; $i++ ) {
$_text .= " <tr>\n"
. " <td align=\"" . $textdir['left'] . "\" valign=\"top\"><font size=\"-1\">" . $XPath->getData( "/phpsysinfo/MBinfo/Temperature/Item[" . $i . "]/Label" ) . "</font></td>\n"
. " <td align=\"" . $textdir['left'] . "\" valign=\"top\"><font size=\"-1\">";
if( $XPath->getData( "/phpsysinfo/MBinfo/Temperature/Item[" . $i . "]/Value" ) == 0) {
$_text .= "Unknown - Not connected?";
} else {
$_text .= create_bargraph( $XPath->getData( "/phpsysinfo/MBinfo/Temperature/Item[" . $i . "]/Value" ), $XPath->getData( "/phpsysinfo/MBinfo/Temperature/Item[" . $i . "]/Limit" ), $scale_factor );
}
$_text .= temperature( $XPath->getData( "/phpsysinfo/MBinfo/Temperature/Item[" . $i . "]/Value" ) ) . "</font></td>\n"
. " <td align=\"" . $textdir['right'] . "\" valign=\"top\"><font size=\"-1\">" . temperature( $XPath->getData( "/phpsysinfo/MBinfo/Temperature/Item[" . $i . "]/Limit" ) ) . "</font></td>\n"
. " </tr>\n";
}
return $_text;
}
 
function html_mbfans() {
global $text;
global $XPath;
$textdir = direction();
$booShowfans = false;
$_text ="<table width=\"100%\">\n";
$_text .= " <tr>\n"
. " <td><font size=\"-1\"><b>" . $text['s_label'] . "</b></font></td>\n"
. " <td align=\"" . $textdir['right'] . "\"><font size=\"-1\"><b>" . $text['s_value'] . "</b></font></td>\n"
. " <td align=\"" . $textdir['right'] . "\"><font size=\"-1\"><b>" . $text['s_min'] . "</b></font></td>\n"
. " </tr>\n";
for( $i = 1, $max = sizeof( $XPath->getDataParts( "/phpsysinfo/MBinfo/Fans" ) ); $i < $max; $i++ ) {
$_text .= " <tr>\n"
. " <td align=\"" . $textdir['left'] . "\" valign=\"top\"><font size=\"-1\">" . $XPath->getData( "/phpsysinfo/MBinfo/Fans/Item[" . $i . "]/Label" ) . "</font></td>\n"
. " <td align=\"" . $textdir['right'] . "\" valign=\"top\"><font size=\"-1\">" . round( $XPath->getData( "/phpsysinfo/MBinfo/Fans/Item[" . $i . "]/Value" ) ) . " " . $text['rpm_mark'] . "</font></td>\n"
. " <td align=\"" . $textdir['right'] . "\" valign=\"top\"><font size=\"-1\">" . $XPath->getData( "/phpsysinfo/MBinfo/Fans/Item[" . $i . "]/Min" ) . " " . $text['rpm_mark'] . "</font></td>\n"
. " </tr>\n";
if( round( $XPath->getData( "/phpsysinfo/MBinfo/Fans/Item[" . $i . "]/Value" ) ) > 0 ) {
$booShowfans = true;
}
}
$_text .= "</table>\n";
if( ! $booShowfans ) {
$_text = "";
}
return $_text;
}
 
function html_mbvoltage() {
global $text;
global $XPath;
$textdir = direction();
$_text = "<table width=\"100%\">\n";
$_text .= " <tr>\n"
. " <td><font size=\"-1\"><b>" . $text['s_label'] . "</b></font></td>\n"
. " <td align=\"" . $textdir['right'] . "\"><font size=\"-1\"><b>" . $text['s_value'] . "</b></font></td>\n"
. " <td align=\"" . $textdir['right'] . "\"><font size=\"-1\"><b>" . $text['s_min'] . "</b></font></td>\n"
. " <td align=\"" . $textdir['right'] . "\"><font size=\"-1\"><b>" . $text['s_max'] . "</b></font></td>\n"
. " </tr>\n";
for( $i = 1, $max = sizeof( $XPath->getDataParts( "/phpsysinfo/MBinfo/Voltage" ) ); $i < $max; $i++ ) {
$_text .= " <tr>\n"
. " <td align=\"" . $textdir['left'] . "\" valign=\"top\"><font size=\"-1\">" . $XPath->getData( "/phpsysinfo/MBinfo/Voltage/Item[" . $i . "]/Label" ) . "</font></td>\n"
. " <td align=\"" . $textdir['right'] . "\" valign=\"top\"><font size=\"-1\">" . $XPath->getData( "/phpsysinfo/MBinfo/Voltage/Item[" . $i . "]/Value" ) . " " . $text['voltage_mark'] . "</font></td>\n"
. " <td align=\"" . $textdir['right'] . "\" valign=\"top\"><font size=\"-1\">" . $XPath->getData( "/phpsysinfo/MBinfo/Voltage/Item[" . $i . "]/Min" ) . " " . $text['voltage_mark'] . "</font></td>\n"
. " <td align=\"" . $textdir['right'] . "\" valign=\"top\"><font size=\"-1\">" . $XPath->getData( "/phpsysinfo/MBinfo/Voltage/Item[" . $i . "]/Max" ) . " " . $text['voltage_mark'] . "</font></td>\n"
. " </tr>\n";
}
$_text .= "</table>\n";
return $_text;
}
 
function wml_mbtemp() {
global $XPath;
$_text = "";
for( $i = 1, $max = sizeof( $XPath->getDataParts( "/phpsysinfo/MBinfo/Temperature" ) ); $i < $max; $i++ ) {
$_text .= "<p>" . $XPath->getData( "/phpsysinfo/MBinfo/Temperature/Item[" . $i . "]/Label" ) . ": ";
if( $XPath->getData( "/phpsysinfo/MBinfo/Temperature/Item[" . $i . "]/Value" ) == 0 ) {
$_text .= "Unknown - Not connected?</p>";
} else {
$_text .= "&nbsp;" . str_replace( "&deg;", "", temperature( $XPath->getData( "/phpsysinfo/MBinfo/Temperature/Item[" . $i . "]/Value" ) ) ) . "</p>\n";
}
}
return $_text;
}
 
function wml_mbfans() {
global $text;
global $XPath;
$_text = "<card id=\"fans\" title=\"" . $text['fans'] . "\">\n";
for( $i = 1, $max = sizeof( $XPath->getDataParts( "/phpsysinfo/MBinfo/Fans" ) ); $i < $max; $i++ ) {
$_text .= "<p>" . $XPath->getData( "/phpsysinfo/MBinfo/Fans/Item[" . $i . "]/Label" ) . ": " . round( $XPath->getData( "/phpsysinfo/MBinfo/Temperature/Item[" . $i . "]/Value" ) ) . "&nbsp;" . $text['rpm_mark'] . "</p>\n";
}
$_text .= "</card>\n";
return $_text;
}
 
function wml_mbvoltage() {
global $text;
global $XPath;
$_text = "<card id=\"volt\" title=\"" . $text['voltage'] . "\">\n";
for( $i = 1, $max = sizeof( $XPath->getDataParts( "/phpsysinfo/MBinfo/Voltage" ) ); $i < $max; $i++ ) {
$_text .= "<p>" . $XPath->getData( "/phpsysinfo/MBinfo/Voltage/Item[" . $i . "]/Label" ) . ": " . $XPath->getData( "/phpsysinfo/MBinfo/Voltage/Item[" . $i . "]/Value" ) . "&nbsp;" . $text['voltage_mark'] . "</p>\n";
}
$_text .= "</card>\n";
return $_text;
}
?>
/web/acc/phpsysinfo/includes/xml/portail.php
0,0 → 1,183
<?php
/***************************************************************************
* Copyright (C) 2006 by phpSysInfo - A PHP System Information Script *
* http://phpsysinfo.sourceforge.net/ *
* addons by 3abtux & Rexy for ALCASAR *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the *
* Free Software Foundation, Inc., *
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
***************************************************************************/
 
// $Id: vitals.php,v 1.32 2007/02/18 18:59:54 bigmichi1 Exp $
 
// xml_utilisateur()
 
function request ($texte) {
$strResult = 0;
// Déclaration des paramètres de connexion
$host = "localhost";
$DB_USER = "radius";
$DB_RADIUS = "radius";
$radiuspwd = "X01WDItQ";
// Connexion au serveur
mysql_connect($host, $DB_USER,$radiuspwd) or die("erreur de connexion au serveur");
mysql_select_db($DB_RADIUS) or die("erreur de connexion a la base de donnees");
// Creation et envoi de la requete
if ($texte == 'user') {$query = "SELECT UserName FROM userinfo";}
else { $query = "SELECT GroupName FROM radusergroup GROUP BY GroupName";}
$result = mysql_query($query);
// Recuperation des resultats
$strResult = mysql_num_rows($result);
// Deconnexion de la base de donnees
mysql_close();
return $strResult;
}
function xml_portail () {
global $sysinfo;
$_text = " <Portail>\n"
// . " <Utilisateur>" . htmlspecialchars( request('user'), ENT_QUOTES ) . "</Utilisateur>\n"
. " <Utilisateur>" . "</Utilisateur>\n"
. " <Groupe>" . "</Groupe>\n";
// . " <Groupe>" . htmlspecialchars( trim( request('group') ), ENT_QUOTES ) . "</Groupe>\n";
$_text .= " </Portail>\n";
return $_text;
}
// Fonction de test de connectivité internet
function internetTest(){
$host = "www.google.fr";
$port = "80";
//var $num; //non utilisé
//var $error; //non utilisé
if (! $sock = @fsockopen($host, $port, $num, $error, 5)) {
return false;
} else {
fclose($sock);
return true;
}
}
// Fonction de test du filtrage
function filtrageTest($file, $search_regex){
$pointeur = fopen($file,"r");
$result = false;
if ($pointeur)
{
while (!feof($pointeur))
{
$ligne = fgets($pointeur);
if (preg_match($search_regex, $ligne, $r))
{
$result = true;
break;
}
}
}
fclose($pointeur);
return $result;
}
// html_portail()
function html_portail () {
global $webpath;
global $XPath;
global $text;
 
$file_version = "/var/www/html/VERSION";
$handle = fopen ($file_version, "r");
$INSTALLEDVERSION = fread ($handle, filesize ($file_version));
fclose ($handle);
$file_bl = "/var/www/html/VERSION-BL";
$handle = fopen ($file_bl, "r");
$VERSIONBL = fread ($handle, filesize ($file_bl));
fclose ($handle);
$nbr_user = request ('user');
$nbr_grp = request ('group');
$nbr_user_online = exec ("sudo /usr/sbin/chilli_query list | cut -d\" \" -f5 | grep \"1\" | wc -l");
if (filtrageTest("/usr/local/bin/alcasar-iptables.sh", "/^FILTERING=\"yes\"/")){
$network_filter_status = $text['enable'];}
else { $network_filter_status = $text['disable'];}
if (filtrageTest("/etc/dansguardian/dansguardian.conf","/^reportinglevel = 3/")){
$web_filter_status = $text['enable'];}
else { $web_filter_status = $text['disable'];}
if (filtrageTest("/etc/dansguardian/dansguardian.conf","/^proxyport = 8090/")){
$web_antivir_status = $text['enable'];}
else { $web_antivir_status = $text['disable'];}
if (InternetTest()){
$internet_status = "<img src='/images/state_ok.gif'>".$text['enable'];
$version = dns_get_record("version.alcasar.info",DNS_TXT);
$AVAILABLEDVERSION = $version[0]['txt'];
} else {
$internet_status = "<img src='/images/state_error.gif'>".$text['disable'];
$AVAILABLEDVERSION = "-";
}
$_text = "<table border=\"0\" width=\"100%\" align=\"center\">\n"
. " <tr>\n"
. " <td valign=\"top\"><font size=\"-1\">" . $text['portail-version'] . "</font></td>\n"
. " <td><font size=\"-1\">" . $INSTALLEDVERSION . "</font></td>\n"
. " </tr>\n"
. " <tr>\n"
. " <td valign=\"top\"><font size=\"-1\">" . $text['portail-disp'] . "</font></td>\n"
. " <td><font size=\"-1\">" . $AVAILABLEDVERSION . "</font></td>\n"
. " </tr>\n"
. " <tr>\n"
. " <td valign=\"top\"><font size=\"-1\">" . $text['utilisateur'] . "</font></td>\n"
. " <td><font size=\"-1\">" . $nbr_user_online . " / " . $nbr_user . "</font></td>\n"
. " </tr>\n"
. " <tr>\n"
. " <td valign=\"top\"><font size=\"-1\">" . $text['groupe'] . "</font></td>\n"
. " <td><font size=\"-1\">" . $nbr_grp . "</font></td>\n"
. " </tr>\n"
. " <tr>\n"
. " <td valign=\"top\"><font size=\"-1\">" . $text['net_filter'] . "</font></td>\n"
. " <td><font size=\"-1\">" . $network_filter_status . "</font></td>\n"
. " </tr>\n"
. " <tr>\n"
. " <td valign=\"top\"><font size=\"-1\">" . $text['web_filter'] . "</font></td>\n"
. " <td><font size=\"-1\">antivirus : " . $web_antivir_status . ", domain/url : " . $web_filter_status . "</font></td>\n"
. " </tr>\n"
. " <tr>\n"
. " <td valign=\"top\"><font size=\"-1\">" . $text['bl-version'] . "</font></td>\n"
. " <td><font size=\"-1\">" . $VERSIONBL . "</font></td>\n"
. " </tr>\n"
. " <tr>\n"
. " <td valign=\"top\"><font size=\"-1\">" . $text['internet_link'] . "</font></td>\n"
. " <td><font size=\"-1\">" . $internet_status . "</font></td>\n"
. " </tr>\n"
. "</table>\n";
return $_text;
}
 
function wml_portail () {
global $XPath;
global $text;
$_text = "<card id=\"vitals\" title=\"" . $text['vitals'] . "\">\n"
. "<p>" . $text['hostname'] . ":<br/>\n"
. "-&nbsp;" . $XPath->getData( "/phpsysinfo/Vitals/Hostname" ) . "</p>\n"
. "<p>" . $text['ip'] . ":<br/>\n"
. "-&nbsp;" . $XPath->getData( "/phpsysinfo/Vitals/IPAddr" ) . "</p>\n"
. "<p>" . $text['kversion'] . ":<br/>\n"
. "-&nbsp;" . $XPath->getData( "/phpsysinfo/Vitals/Kernel" ) . "</p>\n"
. "<p>" . $text['uptime'] . ":<br/>\n"
. "-&nbsp;" . uptime( $XPath->getData( "/phpsysinfo/Vitals/Uptime" ) ) . "</p>\n"
. "<p>" . $text['users'] . ":<br/>"
. "-&nbsp;" . $XPath->getData( "/phpsysinfo/Vitals/Users" ) . "</p>\n"
. "<p>" . $text['loadavg'] . ":<br/>"
. "-&nbsp;" . $XPath->getData( "/phpsysinfo/Vitals/LoadAvg" ) . "</p>\n"
. "</card>\n";
return $_text;
}
?>
/web/acc/phpsysinfo/includes/xml/hardware.php
0,0 → 1,224
<?php
/***************************************************************************
* Copyright (C) 2006 by phpSysInfo - A PHP System Information Script *
* http://phpsysinfo.sourceforge.net/ *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the *
* Free Software Foundation, Inc., *
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
***************************************************************************/
 
// $Id: hardware.php,v 1.36 2007/01/21 11:13:51 bigmichi1 Exp $
 
function xml_hardware() {
global $sysinfo;
global $text;
$strPcidevices = ""; $strIdedevices = ""; $strUsbdevices = ""; $strScsidevices = "";
$arrSys = $sysinfo->cpu_info();
$arrBuf = finddups( $sysinfo->pci() );
if( count( $arrBuf ) ) {
for( $i = 0, $max = sizeof($arrBuf); $i < $max; $i++ ) {
if( $arrBuf[$i] ) {
$strPcidevices .= " <Device><Name>" . htmlspecialchars( chop( $arrBuf[$i] ), ENT_QUOTES ) . "</Name></Device>\n";
}
}
}
$arrBuf = $sysinfo->ide();
if( count( $arrBuf ) ) {
foreach( $arrBuf as $strKey => $arrValue ) {
$strIdedevices .= " <Device>\n<Name>" . htmlspecialchars( $strKey . ': ' . $arrValue['model'], ENT_QUOTES ) . "</Name>\n";
if( isset( $arrValue['capacity'] ) ) {
$strIdedevices .= '<Capacity>' . htmlspecialchars( $arrValue['capacity'], ENT_QUOTES ) . '</Capacity>';
}
$strIdedevices .= "</Device>\n";
}
}
$arrBuf = $sysinfo->scsi();
if( count( $arrBuf ) ) {
foreach( $arrBuf as $strKey => $arrValue ) {
$strScsidevices .= "<Device>\n";
if( $strKey >= '0' && $strKey <= '9' ) {
$strScsidevices .= " <Name>" . htmlspecialchars( $arrValue['model'], ENT_QUOTES ) . "</Name>\n";
} else {
$strScsidevices .= " <Name>" . htmlspecialchars( $strKey . ': ' . $arrValue['model'], ENT_QUOTES ) . "</Name>\n";
}
if( isset( $arrrValue['capacity'])) {
$strScsidevices .= '<Capacity>' . htmlspecialchars( $arrValue['capacity'], ENT_QUOTES ) . '</Capacity>';
}
$strScsidevices .= "</Device>\n";
}
}
$arrBuf = finddups( $sysinfo->usb() );
if( count( $arrBuf ) ) {
for( $i = 0, $max = sizeof( $arrBuf ); $i < $max; $i++ ) {
if( $arrBuf[$i] ) {
$strUsbdevices .= " <Device><Name>" . htmlspecialchars( chop( $arrBuf[$i] ), ENT_QUOTES ) . "</Name></Device>\n";
}
}
}
$_text = " <Hardware>\n";
$_text .= " <CPU>\n";
if( isset( $arrSys['cpus'] ) ) {
$_text .= " <Number>" . htmlspecialchars( $arrSys['cpus'], ENT_QUOTES ) . "</Number>\n";
}
if( isset( $arrSys['model'] ) ) {
$_text .= " <Model>" . htmlspecialchars( $arrSys['model'], ENT_QUOTES ) . "</Model>\n";
}
if( isset( $arrSys['temp'] ) ) {
$_text .= " <Cputemp>" . htmlspecialchars( $arrSys['temp'], ENT_QUOTES ) . "</Cputemp>\n";
}
if( isset( $arrSys['cpuspeed'] ) ) {
$_text .= " <Cpuspeed>" . htmlspecialchars( $arrSys['cpuspeed'], ENT_QUOTES ) . "</Cpuspeed>\n";
}
if( isset( $arrSys['busspeed'] ) ) {
$_text .= " <Busspeed>" . htmlspecialchars( $arrSys['busspeed'], ENT_QUOTES ) . "</Busspeed>\n";
}
if( isset( $arrSys['cache'] ) ) {
$_text .= " <Cache>" . htmlspecialchars( $arrSys['cache'], ENT_QUOTES ) . "</Cache>\n";
}
if( isset( $arrSys['bogomips'] ) ) {
$_text .= " <Bogomips>" . htmlspecialchars( $arrSys['bogomips'], ENT_QUOTES ) . "</Bogomips>\n";
}
$_text .= " </CPU>\n";
$_text .= " <PCI>\n";
if( $strPcidevices) {
$_text .= $strPcidevices;
}
$_text .= " </PCI>\n";
$_text .= " <IDE>\n";
if( $strIdedevices) {
$_text .= $strIdedevices;
}
$_text .= " </IDE>\n";
$_text .= " <SCSI>\n";
if( $strScsidevices) {
$_text .= $strScsidevices;
}
$_text .= " </SCSI>\n";
$_text .= " <USB>\n";
if($strUsbdevices) {
$_text .= $strUsbdevices;
}
$_text .= " </USB>\n";
$_text .= " </Hardware>\n";
 
return $_text;
}
 
function html_hardware () {
global $XPath;
global $text;
$strPcidevices = ""; $strIdedevices = ""; $strUsbdevices = ""; $strScsidevices = "";
$textdir = direction();
for( $i = 1, $max = sizeof( $XPath->getDataParts( "/phpsysinfo/Hardware/PCI" ) ); $i < $max; $i++ ) {
if( $XPath->match( "/phpsysinfo/Hardware/PCI/Device[" . $i . "]/Name" ) ) {
$strPcidevices .= "<tr><td valign=\"top\"><font size=\"-1\">-</font></td><td><font size=\"-1\">" . $XPath->getData( "/phpsysinfo/Hardware/PCI/Device[" . $i . "]/Name" ) . "</font></td></tr>";
}
}
for( $i = 1, $max = sizeof( $XPath->getDataParts( "/phpsysinfo/Hardware/IDE" ) ); $i < $max; $i++ ) {
if( $XPath->match( "/phpsysinfo/Hardware/IDE/Device[" . $i . "]" ) ) {
$strIdedevices .= "<tr><td valign=\"top\"><font size=\"-1\">-</font></td><td><font size=\"-1\">" . $XPath->getData( "/phpsysinfo/Hardware/IDE/Device[" . $i . "]/Name" );
if( $XPath->match( "/phpsysinfo/Hardware/IDE/Device[" . $i . "]/Capacity" ) ) {
$strIdedevices .= " (" . $text['capacity'] . ": " . format_bytesize( $XPath->getData( "/phpsysinfo/Hardware/IDE/Device[" . $i . "]/Capacity" ) / 2 ) . ")";
}
$strIdedevices .= "</font></td></tr>";
}
}
for( $i = 1, $max = sizeof( $XPath->getDataParts( "/phpsysinfo/Hardware/SCSI" ) ); $i < $max; $i++ ) {
if( $XPath->match( "/phpsysinfo/Hardware/SCSI/Device[" . $i . "]" ) ) {
$strScsidevices .= "<tr><td valign=\"top\"><font size=\"-1\">-</font></td><td><font size=\"-1\">" . $XPath->getData( "/phpsysinfo/Hardware/SCSI/Device[" . $i . "]/Name" );
if( $XPath->match( "/phpsysinfo/Hardware/SCSI/Device[" . $i . "]/Capacity" ) ) {
$strScsidevices .= " (" . $text['capacity'] . ": " . format_bytesize( $XPath->getData( "/phpsysinfo/Hardware/SCSI/Device[" . $i . "]/Capacity" ) / 2 ) . ")";
}
$strScsidevices .= "</font></td></tr>";
}
}
for( $i = 1, $max = sizeof( $XPath->getDataParts( "/phpsysinfo/Hardware/USB" ) ); $i < $max; $i++ ) {
if( $XPath->match( "/phpsysinfo/Hardware/USB/Device[" . $i . "]/Name" )) {
$strUsbdevices .= "<tr><td valign=\"top\"><font size=\"-1\">-</font></td><td><font size=\"-1\">" . $XPath->getData( "/phpsysinfo/Hardware/USB/Device[" . $i . "]/Name" ) . "</font></td></tr>";
}
}
$_text = "<table border=\"0\" width=\"100%\" align=\"center\">\n";
if( $XPath->match( "/phpsysinfo/Hardware/CPU/Number" ) ) {
$_text .= " <tr>\n <td valign=\"top\"><font size=\"-1\">" . $text['numcpu'] . "</font></td>\n <td><font size=\"-1\">" . $XPath->getData( "/phpsysinfo/Hardware/CPU/Number" ) . "</font></td>\n </tr>\n";
}
if( $XPath->match( "/phpsysinfo/Hardware/CPU/Model" ) ) {
$_text .= " <tr>\n <td valign=\"top\"><font size=\"-1\">" . $text['cpumodel'] . "</font></td>\n <td><font size=\"-1\">" . $XPath->getData( "/phpsysinfo/Hardware/CPU/Model" );
if( $XPath->match( "/phpsysinfo/Hardware/CPU/Cputemp" ) ) {
$_text .= "&nbsp;@&nbsp;" . temperature( $XPath->getData( "/phpsysinfo/Hardware/CPU/Cputemp" ) );
}
$_text .= "</font></td>\n </tr>\n";
}
if( $XPath->match( "/phpsysinfo/Hardware/CPU/Cpuspeed" ) ) {
$_text .= " <tr>\n <td valign=\"top\"><font size=\"-1\">" . $text['cpuspeed'] . "</font></td>\n <td><font size=\"-1\">" . format_speed( $XPath->getData( "/phpsysinfo/Hardware/CPU/Cpuspeed" ) ) . "</font></td>\n </tr>\n";
}
if( $XPath->match( "/phpsysinfo/Hardware/CPU/Busspeed" ) ) {
$_text .= " <tr>\n <td valign=\"top\"><font size=\"-1\">" . $text['busspeed'] . "</font></td>\n <td><font size=\"-1\">" . format_speed( $XPath->getData( "/phpsysinfo/Hardware/CPU/Busspeed" ) ) . "</font></td>\n </tr>\n";
}
if( $XPath->match("/phpsysinfo/Hardware/CPU/Cache" ) ) {
$_text .= " <tr>\n <td valign=\"top\"><font size=\"-1\">" . $text['cache'] . "</font></td>\n <td><font size=\"-1\">" . format_bytesize( $XPath->getData( "/phpsysinfo/Hardware/CPU/Cache" ) ) . "</font></td>\n </tr>\n";
}
if( $XPath->match( "/phpsysinfo/Hardware/CPU/Bogomips" ) ) {
$_text .= " <tr>\n <td valign=\"top\"><font size=\"-1\">" . $text['bogomips'] . "</font></td>\n <td><font size=\"-1\">" . $XPath->getData( "/phpsysinfo/Hardware/CPU/Bogomips" ) . "</font></td>\n </tr>\n";
}
$_text .= " <tr>\n <td valign=\"top\"><font size=\"-1\">" . $text['pci'] . "</font></td>\n <td>";
if( $strPcidevices) {
$_text .= "<table>" . $strPcidevices . "</table>";
} else {
$_text .= "<font size=\"-1\"><i>" . $text['none'] . "</i></font>";
}
$_text .= "</td>\n </tr>\n";
$_text .= " <tr>\n <td valign=\"top\"><font size=\"-1\">" . $text['ide'] . "</font></td>\n <td>";
if( $strIdedevices ) {
$_text .= "<table>" . $strIdedevices . "</table>";
} else {
$_text .= "<font size=\"-1\"><i>" . $text['none'] . "</i></font>";
}
$_text .= "</td>\n </tr>\n";
$_text .= " <tr>\n <td valign=\"top\"><font size=\"-1\">" . $text['scsi'] . "</font></td>\n <td>";
if( $strScsidevices ) {
$_text .= "<table>" . $strScsidevices . "</table></td>\n </tr>";
} else {
$_text .= "<font size=\"-1\"><i>" . $text['none'] . "</i></font>";
}
$_text .= " <tr>\n <td valign=\"top\"><font size=\"-1\">" . $text['usb'] . "</font></td>\n <td>";
if( $strUsbdevices) {
$_text .= "<table>" . $strUsbdevices . "</table></td>\n </tr>";
} else {
$_text .= "<font size=\"-1\"><i>" . $text['none'] . "</i></font>";
}
$_text .= "</table>";
return $_text;
}
?>
/web/acc/phpsysinfo/includes/xml/vitals.php
0,0 → 1,124
<?php
/***************************************************************************
* Copyright (C) 2006 by phpSysInfo - A PHP System Information Script *
* http://phpsysinfo.sourceforge.net/ *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the *
* Free Software Foundation, Inc., *
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
***************************************************************************/
 
// $Id: vitals.php,v 1.32 2007/02/18 18:59:54 bigmichi1 Exp $
 
// xml_vitals()
 
function xml_vitals () {
global $sysinfo;
global $loadbar;
global $show_vhostname;
$strLoadavg = "";
$arrBuf = ( $loadbar ? $sysinfo->loadavg( $loadbar ) : $sysinfo->loadavg() );
foreach( $arrBuf['avg'] as $strValue) {
$strLoadavg .= $strValue . ' ';
}
$_text = " <Vitals>\n"
. " <Hostname>" . htmlspecialchars( $show_vhostname ? $sysinfo->vhostname() : $sysinfo->chostname(), ENT_QUOTES ) . "</Hostname>\n"
. " <IPAddr>" . htmlspecialchars( $show_vhostname ? $sysinfo->vip_addr() : $sysinfo->ip_addr(), ENT_QUOTES ) . "</IPAddr>\n"
. " <Kernel>" . htmlspecialchars( $sysinfo->kernel(), ENT_QUOTES ) . "</Kernel>\n"
. " <Distro>" . htmlspecialchars( $sysinfo->distro(), ENT_QUOTES ) . "</Distro>\n"
. " <Distroicon>" . htmlspecialchars( $sysinfo->distroicon(), ENT_QUOTES ) . "</Distroicon>\n"
. " <Uptime>" . htmlspecialchars( $sysinfo->uptime(), ENT_QUOTES ) . "</Uptime>\n"
. " <Users>" . htmlspecialchars( $sysinfo->users(), ENT_QUOTES ) . "</Users>\n"
. " <LoadAvg>" . htmlspecialchars( trim( $strLoadavg ), ENT_QUOTES ) . "</LoadAvg>\n";
if( isset( $arrBuf['cpupercent'] ) ) {
$_text .= " <CPULoad>" . htmlspecialchars( round( $arrBuf['cpupercent'], 2 ), ENT_QUOTES ) . "</CPULoad>";
}
$_text .= " </Vitals>\n";
return $_text;
}
 
// html_vitals()
function html_vitals () {
global $webpath;
global $XPath;
global $text;
$textdir = direction();
$scale_factor = 2;
$strLoadbar = "";
$uptime = "";
if( $XPath->match( "/phpsysinfo/Vitals/CPULoad" ) )
$strLoadbar = "<br>" . create_bargraph( $XPath->getData( "/phpsysinfo/Vitals/CPULoad" ), 100, $scale_factor ) . "&nbsp;" . $XPath->getData( "/phpsysinfo/Vitals/CPULoad" ) . "%";
$_text = "<table border=\"0\" width=\"100%\" align=\"center\">\n"
. " <tr>\n"
. " <td valign=\"top\"><font size=\"-1\">" . $text['hostname'] . "</font></td>\n"
. " <td><font size=\"-1\">" . $XPath->getData( "/phpsysinfo/Vitals/Hostname" ) . "</font></td>\n"
. " </tr>\n"
// . " <tr>\n"
// . " <td valign=\"top\"><font size=\"-1\">" . $text['ip'] . "</font></td>\n"
// . " <td><font size=\"-1\">" . $XPath->getData( "/phpsysinfo/Vitals/IPAddr" ) . "</font></td>\n"
// . " </tr>\n"
. " <tr>\n"
. " <td valign=\"top\"><font size=\"-1\">" . $text['kversion'] . "</font></td>\n"
. " <td><font size=\"-1\">" . $XPath->getData( "/phpsysinfo/Vitals/Kernel" ) . "</font></td>\n"
. " </tr>\n"
. " <tr>\n"
. " <td valign=\"top\"><font size=\"-1\">" . $text['dversion'] . "</font></td>\n"
. " <td><img width=\"16\" height=\"16\" alt=\"\" src=\"" . $webpath . "images/" . $XPath->getData( "/phpsysinfo/Vitals/Distroicon" ) . "\">&nbsp;<font size=\"-1\">" . $XPath->getData("/phpsysinfo/Vitals/Distro") . "</font></td>\n"
. " </tr>\n"
. " <tr>\n"
. " <td valign=\"top\"><font size=\"-1\">" . $text['uptime'] . "</font></td>\n"
. " <td><font size=\"-1\">" . uptime( $XPath->getData( "/phpsysinfo/Vitals/Uptime" ) ) . "</font></td>\n"
. " </tr>\n"
. " <tr>\n"
. " <td valign=\"top\"><font size=\"-1\">" . $text['users'] . "</font></td>\n"
. " <td><font size=\"-1\">" . $XPath->getData( "/phpsysinfo/Vitals/Users" ) . "</font></td>\n"
. " </tr>\n"
. " <tr>\n"
. " <td valign=\"top\"><font size=\"-1\">" . $text['loadavg'] . "</font></td>\n"
. " <td><font size=\"-1\">" . $XPath->getData( "/phpsysinfo/Vitals/LoadAvg" ) . $strLoadbar . "</font></td>\n"
. " </tr>\n"
. "</table>\n";
return $_text;
}
 
function wml_vitals () {
global $XPath;
global $text;
$_text = "<card id=\"vitals\" title=\"" . $text['vitals'] . "\">\n"
. "<p>" . $text['hostname'] . ":<br/>\n"
. "-&nbsp;" . $XPath->getData( "/phpsysinfo/Vitals/Hostname" ) . "</p>\n"
. "<p>" . $text['ip'] . ":<br/>\n"
. "-&nbsp;" . $XPath->getData( "/phpsysinfo/Vitals/IPAddr" ) . "</p>\n"
. "<p>" . $text['kversion'] . ":<br/>\n"
. "-&nbsp;" . $XPath->getData( "/phpsysinfo/Vitals/Kernel" ) . "</p>\n"
. "<p>" . $text['uptime'] . ":<br/>\n"
. "-&nbsp;" . uptime( $XPath->getData( "/phpsysinfo/Vitals/Uptime" ) ) . "</p>\n"
. "<p>" . $text['users'] . ":<br/>"
. "-&nbsp;" . $XPath->getData( "/phpsysinfo/Vitals/Users" ) . "</p>\n"
. "<p>" . $text['loadavg'] . ":<br/>"
. "-&nbsp;" . $XPath->getData( "/phpsysinfo/Vitals/LoadAvg" ) . "</p>\n"
. "</card>\n";
return $_text;
}
?>
/web/acc/phpsysinfo/includes/xml/index.html
--- includes/xml/hddtemp.php (nonexistent)
+++ includes/xml/hddtemp.php (revision 325)
@@ -0,0 +1,90 @@
+<?php
+/***************************************************************************
+ * Copyright (C) 2006 by phpSysInfo - A PHP System Information Script *
+ * http://phpsysinfo.sourceforge.net/ *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
+ ***************************************************************************/
+
+// $Id: hddtemp.php,v 1.13 2007/02/08 20:16:25 bigmichi1 Exp $
+
+function xml_hddtemp() {
+ global $hddtemp_avail, $hddtemp;
+ $arrBuf = $hddtemp->temperature( $hddtemp_avail );
+
+ $_text = " <HDDTemp>\n";
+ for( $i = 0, $max = sizeof( $arrBuf ); $i < $max; $i++ ) {
+ $_text .= " <Item>\n";
+ $_text .= " <Label>" . htmlspecialchars( $arrBuf[$i]['label'], ENT_QUOTES ) . "</Label>\n";
+ $_text .= " <Value>" . htmlspecialchars( $arrBuf[$i]['value'], ENT_QUOTES ) . "</Value>\n";
+ $_text .= " <Model>" . htmlspecialchars( $arrBuf[$i]['model'], ENT_QUOTES ) . "</Model>\n";
+ $_text .= " </Item>\n";
+ }
+ $_text .= " </HDDTemp>\n";
+
+ return $_text;
+}
+
+function html_hddtemp() {
+ global $XPath;
+ global $text;
+ global $sensor_program;
+
+ $textdir = direction();
+ $scale_factor = 2;
+ $_text = "";
+ $maxvalue = "+60";
+
+ if( $XPath->match( "/phpsysinfo/HDDTemp" ) ) {
+ for( $i = 1, $max = sizeof( $XPath->getDataParts( "/phpsysinfo/HDDTemp" ) ); $i < $max; $i++ ) {
+ if( $XPath->getData( "/phpsysinfo/HDDTemp/Item[" . $i . "]/Value" ) != 0 ) {
+ $_text .= " <tr>\n";
+ $_text .= " <td align=\"" . $textdir['left'] . "\" valign=\"top\"><font size=\"-1\">". $XPath->getData( "/phpsysinfo/HDDTemp/Item[" . $i . "]/Model" ) . "</font></td>\n";
+ $_text .= " <td align=\"" . $textdir['left'] . "\" valign=\"top\" nowrap><font size=\"-1\">";
+ $_text .= create_bargraph( $XPath->getData( "/phpsysinfo/HDDTemp/Item[" . $i . "]/Value" ), $maxvalue, $scale_factor );
+ $_text .= temperature( $XPath->getData( "/phpsysinfo/HDDTemp/Item[" . $i . "]/Value" ) ) . "</font></td>\n";
+ $_text .= " <td align=\"" . $textdir['right'] . "\" valign=\"top\"><font size=\"-1\">" . temperature( $maxvalue ) . "</font></td></tr>\n";
+ }
+ }
+ }
+ if( strlen( $_text ) > 0 && empty( $sensor_program ) ) {
+ $_text = " <tr>\n"
+ . " <td align=\"" . $textdir['right'] . "\" valign=\"top\"><font size=\"-1\"><b>" . $text['s_label'] . "</b></font></td>\n"
+ . " <td align=\"" . $textdir['right'] . "\" valign=\"top\"><font size=\"-1\"><b>" . $text['s_value'] . "</b></font></td>\n"
+ . " <td align=\"" . $textdir['right'] . "\" valign=\"top\"><font size=\"-1\"><b>" . $text['s_limit'] . "</b></font></td>\n"
+ . " </tr>" . $_text;
+ }
+
+ return $_text;
+}
+
+function wml_hddtemp() {
+ global $XPath;
+ global $text;
+
+ $_text = "";
+
+ if( $XPath->match( "/phpsysinfo/HDDTemp" ) ) {
+ for( $i = 1; $i < sizeof( $XPath->getDataParts( "/phpsysinfo/HDDTemp" ) ); $i++ ) {
+ if( $XPath->getData( "/phpsysinfo/HDDTemp/Item[" . $i . "]/Value") != 0 ) {
+ $_text .= "<p>" . $XPath->getData( "/phpsysinfo/HDDTemp/Item[" . $i . "]/Model" ) . ": " . str_replace( "&deg;", "", temperature( $XPath->getData( "/phpsysinfo/HDDTemp/Item[" . $i . "]/Value" ) ) ) . "</p>\n";
+ }
+ }
+ }
+
+ return $_text;
+}
+?>
/web/acc/phpsysinfo/includes/xml/filesystems.php
0,0 → 1,164
<?php
/***************************************************************************
* Copyright (C) 2006 by phpSysInfo - A PHP System Information Script *
* http://phpsysinfo.sourceforge.net/ *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the *
* Free Software Foundation, Inc., *
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
***************************************************************************/
 
// $Id: filesystems.php,v 1.31 2007/02/08 20:16:25 bigmichi1 Exp $
 
//
// xml_filesystems()
//
function xml_filesystems () {
global $sysinfo;
global $show_mount_point;
$arrFs = $sysinfo->filesystems();
$_text = " <FileSystem>\n";
for ( $i = 0, $max = sizeof( $arrFs ); $i < $max; $i++ ) {
$_text .= " <Mount>\n";
$_text .= " <MountPointID>" . htmlspecialchars( $i, ENT_QUOTES ) . "</MountPointID>\n";
if( $show_mount_point ) {
$_text .= " <MountPoint>" . htmlspecialchars( $arrFs[$i]['mount'], ENT_QUOTES ) . "</MountPoint>\n";
}
$_text .= " <Type>" . htmlspecialchars( $arrFs[$i]['fstype'], ENT_QUOTES ) . "</Type>\n"
. " <Device><Name>" . htmlspecialchars( $arrFs[$i]['disk'], ENT_QUOTES ) . "</Name></Device>\n"
. " <Percent>" . htmlspecialchars( $arrFs[$i]['percent'], ENT_QUOTES ) . "</Percent>\n"
. " <Free>" . htmlspecialchars( $arrFs[$i]['free'], ENT_QUOTES ) . "</Free>\n"
. " <Used>" . htmlspecialchars( $arrFs[$i]['used'], ENT_QUOTES ) . "</Used>\n"
. " <Size>" . htmlspecialchars( $arrFs[$i]['size'], ENT_QUOTES ) . "</Size>\n";
if( isset( $arrFs[$i]['options'] ) ) {
$_text .= " <Options>" . htmlspecialchars( $arrFs[$i]['options'], ENT_QUOTES ) . "</Options>\n";
}
if( isset( $arrFs[$i]['inodes'] ) ) {
$_text .= " <Inodes>" . htmlspecialchars( $arrFs[$i]['inodes'], ENT_QUOTES ) . "</Inodes>\n";
}
$_text .= " </Mount>\n";
}
$_text .= " </FileSystem>\n";
return $_text;
}
 
//
// html_filesystems()
//
function html_filesystems () {
global $XPath;
global $text;
global $show_mount_point;
$textdir = direction();
$arrSum = array("size" => 0, "used" => 0, "free" => 0);
$arrCounteddevlist = array();
$intScalefactor = 2;
$_text = "<table border=\"0\" width=\"100%\" align=\"center\">\n";
$_text .= " <tr>\n";
if ($show_mount_point) {
$_text .= " <td align=\"" . $textdir['left'] . "\" valign=\"top\"><font size=\"-1\"><b>" . $text['mount'] . "</b></font></td>\n";
}
$_text .= " <td align=\"" . $textdir['left'] . "\" valign=\"top\"><font size=\"-1\"><b>" . $text['type'] . "</b></font></td>\n"
. " <td align=\"" . $textdir['left'] . "\" valign=\"top\"><font size=\"-1\"><b>" . $text['partition'] . "</b></font></td>\n"
. " <td align=\"" . $textdir['left'] . "\" valign=\"top\"><font size=\"-1\"><b>" . $text['percent'] . "</b></font></td>\n"
. " <td align=\"" . $textdir['right'] . "\" valign=\"top\"><font size=\"-1\"><b>" . $text['free'] . "</b></font></td>\n"
. " <td align=\"" . $textdir['right'] . "\" valign=\"top\"><font size=\"-1\"><b>" . $text['used'] . "</b></font></td>\n"
. " <td align=\"" . $textdir['right'] . "\" valign=\"top\"><font size=\"-1\"><b>" . $text['size'] . "</b></font></td>\n </tr>\n";
for( $i = 1, $max = sizeof( $XPath->getDataParts( "/phpsysinfo/FileSystem" ) ); $i < $max; $i++ ) {
if( $XPath->match( "/phpsysinfo/FileSystem/Mount[" . $i . "]/MountPointID" ) ) {
if( ! $XPath->match( "/phpsysinfo/FileSystem/Mount[" . $i . "]/Options" ) || ! stristr( $XPath->getData( "/phpsysinfo/FileSystem/Mount[" . $i . "]/Options" ), "bind" ) ) {
if( ! in_array( $XPath->getData( "/phpsysinfo/FileSystem/Mount[" . $i . "]/Device/Name" ), $arrCounteddevlist ) ) {
$arrSum['size'] += $XPath->getData( "/phpsysinfo/FileSystem/Mount[" . $i . "]/Size" );
$arrSum['used'] += $XPath->getData( "/phpsysinfo/FileSystem/Mount[" . $i . "]/Used" );
$arrSum['free'] += $XPath->getData( "/phpsysinfo/FileSystem/Mount[" . $i . "]/Free" );
if( PHP_OS != "WINNT" ) {
$arrCounteddevlist[] = $XPath->getData( "/phpsysinfo/FileSystem/Mount[" . $i . "]/Device/Name" );
}
}
}
$_text .= " <tr>\n";
if( $show_mount_point ) {
$_text .= " <td align=\"" . $textdir['left'] . "\" valign=\"top\"><font size=\"-1\">" . $XPath->getData( "/phpsysinfo/FileSystem/Mount[" . $i . "]/MountPoint" ) . "</font></td>\n";
}
$_text .= " <td align=\"" . $textdir['left'] . "\" valign=\"top\"><font size=\"-1\">" . $XPath->getData( "/phpsysinfo/FileSystem/Mount[" . $i . "]/Type" ) . "</font></td>\n"
. " <td align=\"" . $textdir['left'] . "\" valign=\"top\"><font size=\"-1\">" . $XPath->getData( "/phpsysinfo/FileSystem/Mount[" . $i . "]/Device/Name" ) . "</font></td>\n"
. " <td align=\"" . $textdir['left'] . "\" valign=\"top\"><font size=\"-1\">"
. create_bargraph( $XPath->getData( "/phpsysinfo/FileSystem/Mount[" . $i . "]/Used" ), $XPath->getData( "/phpsysinfo/FileSystem/Mount[" . $i . "]/Size" ), $intScalefactor, $XPath->getData( "/phpsysinfo/FileSystem/Mount[" . $i . "]/Type" ) )
. "&nbsp;" . $XPath->getData( "/phpsysinfo/FileSystem/Mount[" . $i . "]/Percent" ) . "%";
if( $XPath->match( "/phpsysinfo/FileSystem/Mount[" . $i . "]/Inodes" ) ) {
$_text .= " (" . $XPath->getData( "/phpsysinfo/FileSystem/Mount[" . $i . "]/Inodes" ) . "%)";
}
$_text .= "</font></td>\n"
. " <td align=\"" . $textdir['right'] . "\" valign=\"top\"><font size=\"-1\">" . format_bytesize( $XPath->getData( "/phpsysinfo/FileSystem/Mount[" . $i . "]/Free" ) ) . "</font></td>\n"
. " <td align=\"" . $textdir['right'] . "\" valign=\"top\"><font size=\"-1\">" . format_bytesize( $XPath->getData( "/phpsysinfo/FileSystem/Mount[" . $i . "]/Used" ) ) . "</font></td>\n"
. " <td align=\"" . $textdir['right'] . "\" valign=\"top\"><font size=\"-1\">" . format_bytesize( $XPath->getData( "/phpsysinfo/FileSystem/Mount[" . $i . "]/Size" ) ) . "</font></td>\n"
. " </tr>\n";
}
}
$_text .= " <tr>\n";
if( $show_mount_point ) {
$_text .= " <td colspan=\"3\" align=\"" . $textdir['right'] . "\" valign=\"top\"><font size=\"-1\"><i>" . $text['totals'] . " :&nbsp;&nbsp;</i></font></td>\n";
} else {
$_text .= " <td colspan=\"2\" align=\"" . $textdir['right'] . "\" valign=\"top\"><font size=\"-1\"><i>" . $text['totals'] . " :&nbsp;&nbsp;</i></font></td>\n";
}
$_text .= " <td align=\"" . $textdir['left'] . "\" valign=\"top\"><font size=\"-1\">"
. create_bargraph( $arrSum['used'], $arrSum['size'], $intScalefactor )
. "&nbsp;";
if( $arrSum['size'] == 0 ) {
$_text .= "0";
} else {
$_text .= round( 100 / $arrSum['size'] * $arrSum['used'] );
}
$_text .= "%" . "</font></td>\n"
. " <td align=\"" . $textdir['right'] . "\" valign=\"top\"><font size=\"-1\">" . format_bytesize( $arrSum['free'] ) . "</font></td>\n"
. " <td align=\"" . $textdir['right'] . "\" valign=\"top\"><font size=\"-1\">" . format_bytesize( $arrSum['used'] ) . "</font></td>\n"
. " <td align=\"" . $textdir['right'] . "\" valign=\"top\"><font size=\"-1\">" . format_bytesize( $arrSum['size'] ) . "</font></td>\n </tr>\n"
. "</table>\n";
return $_text;
}
 
function wml_filesystem() {
global $XPath;
global $text;
global $show_mount_point;
$_text = "<card id=\"filesystem\" title=\"" . $text['fs'] . "\">\n";
for( $i = 1; $i < sizeof( $XPath->getDataParts( "/phpsysinfo/FileSystem" ) ); $i++ ) {
if( $XPath->match( "/phpsysinfo/FileSystem/Mount[" . $i . "]/MountPointID" ) ) {
$_text .= "<p>";
if( $show_mount_point ) {
$_text .= $XPath->getData( "/phpsysinfo/FileSystem/Mount[" . $i . "]/MountPoint" ) . "<br/>\n";
} else {
$_text .= $XPath->getData( "/phpsysinfo/FileSystem/Mount[" . $i . "]/Device/Name" ) . "<br/>\n";
}
$_text .= "- " . $text['free'] . ": " . format_bytesize( $XPath->getData("/phpsysinfo/FileSystem/Mount[" . $i . "]/Free" ) ) . "<br/>\n"
. "- " . $text['used'] . ": " . format_bytesize( $XPath->getData("/phpsysinfo/FileSystem/Mount[" . $i . "]/Used" ) ) . "<br/>\n"
. "- " . $text['size'] . ": " . format_bytesize( $XPath->getData("/phpsysinfo/FileSystem/Mount[" . $i . "]/Size" ) ) . "<br/>\n"
. "</p>\n";
}
}
$_text .= "</card>\n";
 
return $_text;
}
?>
/web/acc/phpsysinfo/includes/xml/memory.php
0,0 → 1,211
<?php
/***************************************************************************
* Copyright (C) 2006 by phpSysInfo - A PHP System Information Script *
* http://phpsysinfo.sourceforge.net/ *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the *
* Free Software Foundation, Inc., *
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
***************************************************************************/
 
// $Id: memory.php,v 1.18 2007/02/08 20:16:25 bigmichi1 Exp $
 
//
// xml_memory()
//
function xml_memory () {
global $sysinfo;
$arrMem = $sysinfo->memory();
$i = 0;
$_text = " <Memory>\n"
. " <Free>" . htmlspecialchars( $arrMem['ram']['free'], ENT_QUOTES ) . "</Free>\n"
. " <Used>" . htmlspecialchars( $arrMem['ram']['used'], ENT_QUOTES ) . "</Used>\n"
. " <Total>" . htmlspecialchars( $arrMem['ram']['total'], ENT_QUOTES ) . "</Total>\n"
. " <Percent>" . htmlspecialchars( $arrMem['ram']['percent'], ENT_QUOTES ) . "</Percent>\n";
if( isset( $arrMem['ram']['app_percent'] ) ) {
$_text .= " <App>" . htmlspecialchars( $arrMem['ram']['app'], ENT_QUOTES ) . "</App>\n <AppPercent>" . htmlspecialchars( $arrMem['ram']['app_percent'], ENT_QUOTES ) . "</AppPercent>\n";
}
if( isset( $arrMem['ram']['buffers_percent'] ) ) {
$_text .= " <Buffers>" . htmlspecialchars( $arrMem['ram']['buffers'], ENT_QUOTES ) . "</Buffers>\n <BuffersPercent>" . htmlspecialchars( $arrMem['ram']['buffers_percent'], ENT_QUOTES ) . "</BuffersPercent>\n";
}
if( isset( $arrMem['ram']['cached_percent'] ) ) {
$_text .= " <Cached>" . htmlspecialchars( $arrMem['ram']['cached'], ENT_QUOTES ) . "</Cached>\n <CachedPercent>" . htmlspecialchars( $arrMem['ram']['cached_percent'], ENT_QUOTES ) . "</CachedPercent>\n";
}
$_text .= " </Memory>\n";
$_text .= " <Swap>\n";
if( isset( $arrMem['swap']['total'] ) && $arrMem['swap']['total'] > 0 ) {
$_text .= " <Free>" . htmlspecialchars( $arrMem['swap']['free'], ENT_QUOTES ) . "</Free>\n"
. " <Used>" . htmlspecialchars( $arrMem['swap']['used'], ENT_QUOTES ) . "</Used>\n"
. " <Total>" . htmlspecialchars( $arrMem['swap']['total'], ENT_QUOTES ) . "</Total>\n"
. " <Percent>" . htmlspecialchars( $arrMem['swap']['percent'], ENT_QUOTES ) . "</Percent>\n";
}
$_text .= " </Swap>\n";
$_text .= " <Swapdevices>\n";
foreach( $arrMem['devswap'] as $arrDevice) {
$_text .=" <Mount>\n"
. " <MountPointID>" . htmlspecialchars( $i++, ENT_QUOTES ) . "</MountPointID>\n"
. " <Type>Swap</Type>"
. " <Device><Name>" . htmlspecialchars( $arrDevice['dev'], ENT_QUOTES ) . "</Name></Device>\n"
. " <Percent>" . htmlspecialchars( $arrDevice['percent'], ENT_QUOTES ) . "</Percent>\n"
. " <Free>" . htmlspecialchars( $arrDevice['free'], ENT_QUOTES ) . "</Free>\n"
. " <Used>" . htmlspecialchars( $arrDevice['used'], ENT_QUOTES ) . "</Used>\n"
. " <Size>" . htmlspecialchars( $arrDevice['total'], ENT_QUOTES ) . "</Size>\n"
. " </Mount>\n";
}
$_text .= " </Swapdevices>\n";
return $_text;
}
 
//
// html_memory()
//
function html_memory () {
global $XPath;
global $text;
$textdir = direction();
$scale_factor = 2;
$strRam = create_bargraph( $XPath->getData( "/phpsysinfo/Memory/Used" ), $XPath->getData( "/phpsysinfo/Memory/Total" ), $scale_factor );
$strRam .= "&nbsp;&nbsp;" . $XPath->getData( "/phpsysinfo/Memory/Percent" ) . "% ";
if( $XPath->match( "/phpsysinfo/Swap/Total" ) ) {
$strSwap = create_bargraph( $XPath->getData( "/phpsysinfo/Swap/Used" ), $XPath->getData( "/phpsysinfo/Swap/Total" ), $scale_factor );
$strSwap .= "&nbsp;&nbsp;" . $XPath->getData( "/phpsysinfo/Swap/Percent" ) . "% ";
}
if( $XPath->match( "/phpsysinfo/Memory/AppPercent" ) ) {
$strApp = create_bargraph( $XPath->getData( "/phpsysinfo/Memory/App" ), $XPath->getData( "/phpsysinfo/Memory/Total" ), $scale_factor );
$strApp .= "&nbsp;&nbsp;" . $XPath->getData( "/phpsysinfo/Memory/AppPercent" ) . "% ";
}
if( $XPath->match( "/phpsysinfo/Memory/BuffersPercent" ) ) {
$strBuffers = create_bargraph( $XPath->getData( "/phpsysinfo/Memory/Buffers" ), $XPath->getData( "/phpsysinfo/Memory/Total" ), $scale_factor);
$strBuffers .= "&nbsp;&nbsp;" . $XPath->getData( "/phpsysinfo/Memory/BuffersPercent" ) . "% ";
}
if( $XPath->match( "/phpsysinfo/Memory/CachedPercent" ) ) {
$strCached = create_bargraph( $XPath->getData( "/phpsysinfo/Memory/Cached" ), $XPath->getData( "/phpsysinfo/Memory/Total" ), $scale_factor);
$strCached .= "&nbsp;&nbsp;" . $XPath->getData( "/phpsysinfo/Memory/CachedPercent" ) . "% ";
}
$_text = "<table border=\"0\" width=\"100%\" align=\"center\">\n"
. " <tr>\n"
. " <td align=\"" . $textdir['left'] . "\" valign=\"top\"><font size=\"-1\"><b>" . $text['type'] . "</b></font></td>\n"
. " <td align=\"" . $textdir['left'] . "\" valign=\"top\"><font size=\"-1\"><b>" . $text['percent'] . "</b></font></td>\n"
. " <td align=\"" . $textdir['right'] . "\" valign=\"top\"><font size=\"-1\"><b>" . $text['free'] . "</b></font></td>\n"
. " <td align=\"" . $textdir['right'] . "\" valign=\"top\"><font size=\"-1\"><b>" . $text['used'] . "</b></font></td>\n"
. " <td align=\"" . $textdir['right'] . "\" valign=\"top\"><font size=\"-1\"><b>" . $text['size'] . "</b></font></td>\n"
. " </tr>\n"
. " <tr>\n"
. " <td align=\"" . $textdir['left'] . "\" valign=\"top\"><font size=\"-1\">" . $text['phymem'] . "</font></td>\n"
. " <td align=\"" . $textdir['left'] . "\" valign=\"top\"><font size=\"-1\">" . $strRam . "</font></td>\n"
. " <td align=\"" . $textdir['right'] . "\" valign=\"top\"><font size=\"-1\">" . format_bytesize( $XPath->getData( "/phpsysinfo/Memory/Free" ) ) . "</font></td>\n"
. " <td align=\"" . $textdir['right'] . "\" valign=\"top\"><font size=\"-1\">" . format_bytesize( $XPath->getData( "/phpsysinfo/Memory/Used" ) ) . "</font></td>\n"
. " <td align=\"" . $textdir['right'] . "\" valign=\"top\"><font size=\"-1\">" . format_bytesize( $XPath->getData( "/phpsysinfo/Memory/Total" ) ) . "</font></td>\n"
. " </tr>\n";
if( isset( $strApp ) ) {
$_text .= " <tr>\n"
. " <td align=\"" . $textdir['left'] . "\" valign=\"top\"><font size=\"-1\">- " . $text['app'] . "</font></td>\n"
. " <td align=\"" . $textdir['left'] . "\" valign=\"top\"><font size=\"-1\">" . $strApp . "</font></td>\n"
. " <td align=\"" . $textdir['right'] . "\" valign=\"top\"><font size=\"-1\">&nbsp;</font></td>\n"
. " <td align=\"" . $textdir['right'] . "\" valign=\"top\"><font size=\"-1\">" . format_bytesize( $XPath->getData( "/phpsysinfo/Memory/App" ) ) . "</font></td>\n"
. " <td align=\"" . $textdir['right'] . "\" valign=\"top\"><font size=\"-1\">&nbsp;</font></td>\n"
. " </tr>\n";
}
if( isset( $strBuffers ) ) {
$_text .= " <tr>\n"
. " <td align=\"" . $textdir['left'] . "\" valign=\"top\"><font size=\"-1\">- " . $text['buffers'] . "</font></td>\n"
. " <td align=\"" . $textdir['left'] . "\" valign=\"top\"><font size=\"-1\">" . $strBuffers . "</font></td>\n"
. " <td align=\"" . $textdir['right'] . "\" valign=\"top\"><font size=\"-1\">&nbsp;</font></td>\n"
. " <td align=\"" . $textdir['right'] . "\" valign=\"top\"><font size=\"-1\">" . format_bytesize( $XPath->getData( "/phpsysinfo/Memory/Buffers" ) ) . "</font></td>\n"
. " <td align=\"" . $textdir['right'] . "\" valign=\"top\"><font size=\"-1\">&nbsp;</font></td>\n"
. " </tr>\n";
}
if( isset( $strCached ) ) {
$_text .= " <tr>\n"
. " <td align=\"" . $textdir['left'] . "\" valign=\"top\"><font size=\"-1\">- " . $text['cached'] . "</font></td>\n"
. " <td align=\"" . $textdir['left'] . "\" valign=\"top\"><font size=\"-1\">" . $strCached . "</font></td>\n"
. " <td align=\"" . $textdir['right'] . "\" valign=\"top\"><font size=\"-1\">&nbsp;</font></td>\n"
. " <td align=\"" . $textdir['right'] . "\" valign=\"top\"><font size=\"-1\">" . format_bytesize( $XPath->getData( "/phpsysinfo/Memory/Cached" ) ) . "</font></td>\n"
. " <td align=\"" . $textdir['right'] . "\" valign=\"top\"><font size=\"-1\">&nbsp;</font></td>\n"
. " </tr>\n";
}
if( isset( $strSwap ) ) {
$_text .= " <tr>\n"
. " <td align=\"" . $textdir['left'] . "\" valign=\"top\"><font size=\"-1\">" . $text['swap'] . "</font></td>\n"
. " <td align=\"" . $textdir['left'] . "\" valign=\"top\"><font size=\"-1\">" . $strSwap . "</font></td>\n"
. " <td align=\"" . $textdir['right'] . "\" valign=\"top\"><font size=\"-1\">" . format_bytesize( $XPath->getData( "/phpsysinfo/Swap/Free" ) ) . "</font></td>\n"
. " <td align=\"" . $textdir['right'] . "\" valign=\"top\"><font size=\"-1\">" . format_bytesize( $XPath->getData( "/phpsysinfo/Swap/Used" ) ) . "</font></td>\n"
. " <td align=\"" . $textdir['right'] . "\" valign=\"top\"><font size=\"-1\">" . format_bytesize( $XPath->getData( "/phpsysinfo/Swap/Total" ) ) . "</font></td>\n"
. " </tr>\n";
}
if( ($max = sizeof( $XPath->getDataParts( "/phpsysinfo/Swapdevices" ) ) ) > 2 ) {
for( $i = 1; $i < $max; $i++ ) {
$strSwapdev = create_bargraph( $XPath->getData( "/phpsysinfo/Swapdevices/Mount[" . $i . "]/Used" ), $XPath->getData( "/phpsysinfo/Swapdevices/Mount[" . $i . "]/Size" ), $scale_factor );
$strSwapdev .= "&nbsp;&nbsp;" . $XPath->getData( "/phpsysinfo/Swapdevices/Mount[" . $i . "]/Percent" ) . "% ";
$_text .= " <tr>\n"
. " <td align=\"" . $textdir['left'] . "\" valign=\"top\"><font size=\"-1\"> - " . $XPath->getData( "/phpsysinfo/Swapdevices/Mount[" . $i . "]/Device/Name" ) . "</font></td>\n"
. " <td align=\"" . $textdir['left'] . "\" valign=\"top\"><font size=\"-1\">" . $strSwapdev . "</font></td>\n"
. " <td align=\"" . $textdir['right'] . "\" valign=\"top\"><font size=\"-1\">" . format_bytesize( $XPath->getData("/phpsysinfo/Swapdevices/Mount[" . $i . "]/Free" ) ) . "</font></td>\n"
. " <td align=\"" . $textdir['right'] . "\" valign=\"top\"><font size=\"-1\">" . format_bytesize( $XPath->getData("/phpsysinfo/Swapdevices/Mount[" . $i . "]/Used" ) ) . "</font></td>\n"
. " <td align=\"" . $textdir['right'] . "\" valign=\"top\"><font size=\"-1\">" . format_bytesize( $XPath->getData("/phpsysinfo/Swapdevices/Mount[" . $i . "]/Size" ) ) . "</font></td>\n"
. " </tr>\n";
}
}
$_text .= "</table>";
return $_text;
}
 
function wml_memory() {
global $XPath;
global $text;
$_text = "<card id=\"memory\" title=\"" . $text['memusage'] . "\">\n"
. "<p>" . $text['phymem'] . ":<br/>\n"
. "- " . $text['free'] . ": " . format_bytesize( $XPath->getData( "/phpsysinfo/Memory/Free" ) ) . "<br/>\n"
. "- " . $text['used'] . ": " . format_bytesize( $XPath->getData( "/phpsysinfo/Memory/Used" ) ) . "<br/>\n"
. "- " . $text['size'] . ": " . format_bytesize( $XPath->getData( "/phpsysinfo/Memory/Total" ) ) . "</p>\n";
if( $XPath->match( "/phpsysinfo/Memory/App" ) ) {
$_text .= "<p>" . $text['app'] . ":<br/>\n"
. "- " . $text['used'] . ": " . format_bytesize( $XPath->getData( "/phpsysinfo/Memory/App" ) ) . "</p>\n";
}
if( $XPath->match( "/phpsysinfo/Memory/Cached" ) ) {
$_text .= "<p>" . $text['cached'] . ":<br/>\n"
. "- " . $text['used'] . ": " . format_bytesize( $XPath->getData( "/phpsysinfo/Memory/Cached" ) ) . "</p>\n";
}
if( $XPath->match( "/phpsysinfo/Memory/Buffers" ) ) {
$_text .= "<p>" . $text['buffers'] . ":<br/>\n"
. "- " . $text['used'] . ": " . format_bytesize( $XPath->getData( "/phpsysinfo/Memory/Buffers" ) ) . "</p>\n";
}
if( $XPath->match( "/phpsysinfo/Swap/Total" ) ) {
$_text .= "<p>" . $text['swap'] . ":<br/>\n"
. "- " . $text['free'] . ": " . format_bytesize( $XPath->getData( "/phpsysinfo/Swap/Free" ) ) . "<br/>\n"
. "- " . $text['used'] . ": " . format_bytesize( $XPath->getData( "/phpsysinfo/Swap/Used" ) ) . "<br/>\n"
. "- " . $text['size'] . ": " . format_bytesize( $XPath->getData( "/phpsysinfo/Swap/Total" ) ) . "</p>\n";
}
$_text .= "</card>\n";
return $_text;
}
?>
/web/acc/phpsysinfo/includes/lang/ja.php
0,0 → 1,3
<?php
require 'jp.php';
?>
/web/acc/phpsysinfo/includes/lang/he.php
0,0 → 1,107
<?php
//
// phpSysInfo - A PHP System Information Script
// http://phpsysinfo.sourceforge.net/
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//
// $Id: he.php,v 1.16 2007/02/18 19:11:31 bigmichi1 Exp $
$charset = 'windows-1255';
$text_dir = 'rtl';
$text['title'] = 'îéãò òì äîòøëú';
 
$text['vitals'] = 'çéåðéåú îòøëú';
$text['hostname'] = 'ùí úçðä';
$text['ip'] = 'ëúåáú IP';
$text['kversion'] = 'âøñú ÷øðì';
$text['dversion'] = 'Distro Name';
$text['uptime'] = 'æîï ùäîòøëú ìîòìä';
$text['users'] = 'îùúùéí ðåëçééí';
$text['loadavg'] = 'îîåöò òåîñéí';
 
$text['hardware'] = 'îéãò çåîøä';
$text['numcpu'] = 'îòáãéí';
$text['cpumodel'] = 'ñåâ';
$text['cpuspeed'] = 'îäéøåú áMHz';
$text['busspeed'] = 'BUS Speed';
$text['cache'] = 'âåãì æëøåï îèîåï';
$text['bogomips'] = 'îäéøåú ábogomips';
 
$text['pci'] = 'äú÷ðé PCI';
$text['ide'] = 'äú÷ðé IDE';
$text['scsi'] = 'äú÷ðé SCSI';
$text['usb'] = 'äú÷ðé USB';
 
$text['netusage'] = 'øùú';
$text['device'] = 'äú÷ï';
$text['received'] = '÷éáì';
$text['sent'] = 'ùìç';
$text['errors'] = 'ú÷ìåú/æøé÷åú';
 
$text['connections'] = 'òøåöé ú÷ùåøú ôúåçéí';
 
$text['memusage'] = 'ðéöåìú æëøåï';
$text['phymem'] = 'æëøåï ôéæé';
$text['swap'] = 'æëøåï swap';
 
$text['fs'] = 'îòøëåú ÷áöéí îçåáøåú';
$text['mount'] = 'îçåáø';
$text['partition'] = 'îçéöä';
 
$text['percent'] = 'úëåìä áàçæåéí';
$text['type'] = 'ñåâ';
$text['free'] = 'çåôùé';
$text['used'] = 'áùéîåù';
$text['size'] = 'âåãì';
$text['totals'] = 'ñä"ë';
 
$text['kb'] = '÷éìå áúéí';
$text['mb'] = 'îâä';
$text['gb'] = 'âéâä';
 
$text['none'] = 'ììà';
 
$text['capacity'] = 'úëåìä';
 
$text['template'] = 'úáðéú';
$text['language'] = 'ùôä';
$text['submit'] = 'äâù';
$text['created'] = 'ðåöø ò"é';
$text['locale'] = 'en_US';
$text['gen_time'] = 'on %b %d, %Y at %I:%M %p';
 
$text['days'] = 'éîéí';
$text['hours'] = 'ùòåú';
$text['minutes'] = 'ã÷åú';
$text['temperature'] = 'Temperature';
$text['voltage'] = 'Voltage';
$text['fans'] = 'Fans';
$text['s_value'] = 'Value';
$text['s_min'] = 'Min';
$text['s_max'] = 'Max';
$text['hysteresis'] = 'Hysteresis';
$text['s_limit'] = 'Limit';
$text['s_label'] = 'Label';
$text['degreeC'] = '&deg;C';
$text['degreeF'] = '&deg;F';
$text['voltage_mark'] = 'V';
$text['rpm_mark'] = 'RPM';
 
$text['app'] = 'Kernel + applications';
$text['buffers'] = 'Buffers';
$text['cached'] = 'Cached';
 
?>
/web/acc/phpsysinfo/includes/lang/fi.php
0,0 → 1,107
<?php
//
// phpSysInfo - A PHP System Information Script
// http://phpsysinfo.sourceforge.net/
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//
// $Id: fi.php,v 1.17 2007/02/18 19:11:31 bigmichi1 Exp $
 
// Finnish language file by Jani 'Japala' Ponkko
 
$text['title'] = 'Tietoa j&auml;rjestelm&auml;st&auml;';
 
$text['vitals'] = 'Perustiedot';
$text['hostname'] = 'Kanoninen nimi';
$text['ip'] = 'K&auml;ytett&auml;v&auml; IP';
$text['kversion'] = 'Kernelin versio';
$text['dversion'] = 'Distro Name';
$text['uptime'] = 'Toiminta-aika';
$text['users'] = 'K&auml;ytt&auml;ji&auml;';
$text['loadavg'] = 'Keskikuormat';
 
$text['hardware'] = 'Laitteisto';
$text['numcpu'] = 'Prosessoreita';
$text['cpumodel'] = 'Malli';
$text['cpuspeed'] = 'Piirin MHz';
$text['busspeed'] = 'BUS Speed';
$text['cache'] = 'V&auml;limuistin koko';
$text['bogomips'] = 'J&auml;rjestelm&auml;n Bogomipsit';
 
$text['pci'] = 'PCI Laitteet';
$text['ide'] = 'IDE Laitteet';
$text['scsi'] = 'SCSI Laitteet';
$text['usb'] = 'USB Laitteet';
 
$text['netusage'] = 'Verkon k&auml;ytt&ouml;';
$text['device'] = 'Laite';
$text['received'] = 'Vastaanotettu';
$text['sent'] = 'L&auml;hetetty';
$text['errors'] = 'Virheet/Pudotetut';
 
$text['memusage'] = 'Muistin kuormitus';
$text['phymem'] = 'Fyysinen muisti';
$text['swap'] = 'Virtuaalimuisti';
 
$text['fs'] = 'Liitetyt tiedostoj&auml;rjestelm&auml;t';
$text['mount'] = 'Liitoskohta';
$text['partition'] = 'Osio';
 
$text['percent'] = 'Prosenttia kapasiteetista';
$text['type'] = 'Tyyppi';
$text['free'] = 'Vapaana';
$text['used'] = 'K&auml;yt&ouml;ss&auml;';
$text['size'] = 'Koko';
$text['totals'] = 'Yhteens&auml;';
 
$text['kb'] = 'KB';
$text['mb'] = 'MB';
$text['gb'] = 'GB';
 
$text['none'] = 'Ei yht&auml;&auml;n';
 
$text['capacity'] = 'Kapasiteetti';
 
$text['template'] = 'Malli';
$text['language'] = 'Kieli';
$text['submit'] = 'Valitse';
$text['created'] = 'Luonut';
$text['locale'] = 'en_US';
$text['gen_time'] = 'on %b %d, %Y at %I:%M %p';
 
$text['days'] = 'p&auml;iv&auml;&auml;';
$text['hours'] = 'tuntia';
$text['minutes'] = 'minuuttia';
$text['temperature'] = 'Temperature';
$text['voltage'] = 'Voltage';
$text['fans'] = 'Fans';
$text['s_value'] = 'Value';
$text['s_min'] = 'Min';
$text['s_max'] = 'Max';
$text['hysteresis'] = 'Hysteresis';
$text['s_limit'] = 'Limit';
$text['s_label'] = 'Label';
$text['degreeC'] = '&deg;C';
$text['degreeF'] = '&deg;F';
$text['voltage_mark'] = 'V';
$text['rpm_mark'] = 'RPM';
 
$text['app'] = 'Kernel + applications';
$text['buffers'] = 'Buffers';
$text['cached'] = 'Cached';
 
$text['connections'] = 'Established Network Connections';
?>
/web/acc/phpsysinfo/includes/lang/br.php
0,0 → 1,106
<?php
//
// phpSysInfo - A PHP System Information Script
// http://phpsysinfo.sourceforge.net/
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//
// $Id: br.php,v 1.19 2007/02/18 19:11:31 bigmichi1 Exp $
// Translated by Álvaro Reguly - alvaro at reguly dot net
//
$text['title'] = 'Informações do Sistema';
 
$text['vitals'] = 'Sistema';
$text['hostname'] = 'Nome Canônico';
$text['ip'] = 'Números IP';
$text['kversion'] = 'Versão do Kernel';
$text['dversion'] = 'Distro Name';
$text['uptime'] = 'Uptime';
$text['users'] = 'Usuários Conectados';
$text['loadavg'] = 'Carga do Sistema';
 
$text['hardware'] = 'Informações do Hardware';
$text['numcpu'] = 'Processadores';
$text['cpumodel'] = 'Modelo';
$text['cpuspeed'] = 'CPU Speed';
$text['busspeed'] = 'BUS Speed';
$text['cache'] = 'Tamanho Cache';
$text['bogomips'] = 'Bogomips';
 
$text['pci'] = 'Dispositivos PCI';
$text['ide'] = 'Dispositivos IDE';
$text['scsi'] = 'Dispositivos SCSI';
$text['usb'] = 'Dispositivos USB';
 
$text['netusage'] = 'Utilização da Rede';
$text['device'] = 'Dispositivo';
$text['received'] = 'Recebidos';
$text['sent'] = 'Enviados';
$text['errors'] = 'Erros/Drop';
 
$text['memusage'] = 'Utilização da Memória';
$text['phymem'] = 'Memória Física';
$text['swap'] = 'Swap';
 
$text['fs'] = 'Sistemas de Arquivo Montados';
$text['mount'] = 'Mount';
$text['partition'] = 'Partição';
 
$text['percent'] = 'Porcentual da Capacidade';
$text['type'] = 'Tipo';
$text['free'] = 'Livres';
$text['used'] = 'Utilizados';
$text['size'] = 'Tamanho';
$text['totals'] = 'Totais';
 
$text['kb'] = 'KB';
$text['mb'] = 'MB';
$text['gb'] = 'GB';
 
$text['none'] = 'nenhum';
 
$text['capacity'] = 'Capacidade';
 
$text['template'] = 'Molde';
$text['language'] = 'Língua';
$text['submit'] = 'Enviar';
$text['created'] = 'Criado por';
$text['locale'] = 'en_US';
$text['gen_time'] = 'on %b %d, %Y at %I:%M %p';
 
$text['days'] = 'dias';
$text['hours'] = 'horas';
$text['minutes'] = 'minutos';
 
$text['temperature'] = 'Temperature';
$text['voltage'] = 'Voltage';
$text['fans'] = 'Fans';
$text['s_value'] = 'Value';
$text['s_min'] = 'Min';
$text['s_max'] = 'Max';
$text['hysteresis'] = 'Hysteresis';
$text['s_limit'] = 'Limit';
$text['s_label'] = 'Label';
$text['degreeC'] = '&deg;C';
$text['degreeF'] = '&deg;F';
$text['voltage_mark'] = 'V';
$text['rpm_mark'] = 'RPM';
 
$text['app'] = 'Kernel + applications';
$text['buffers'] = 'Buffers';
$text['cached'] = 'Cached';
 
$text['connections'] = 'Established Network Connections';
?>
/web/acc/phpsysinfo/includes/lang/fr.php
0,0 → 1,118
<?php
//
// phpSysInfo - A PHP System Information Script
// http://phpsysinfo.sourceforge.net/
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//
// $Id: fr.php,v 1.27 2007/03/15 08:22:31 bigmichi1 Exp $
 
$text['title'] = 'Informations Syst&egrave;me ';
 
$text['vitals'] = 'Syst&egrave;me';
$text['hostname'] = 'Nom d\'h&ocirc;te cannonique';
$text['ip'] = 'IP';
$text['kversion'] = 'Version du noyau';
$text['dversion'] = 'Distribution';
$text['uptime'] = 'Uptime';
$text['users'] = 'Utilisateurs';
$text['loadavg'] = 'Charge syst&egrave;me';
 
$text['hardware'] = 'Informations Mat&eacute;riel';
$text['numcpu'] = 'Processeurs';
$text['cpumodel'] = 'Mod&egrave;le';
$text['cpuspeed'] = 'Vitesse CPU';
$text['busspeed'] = 'Vitesse BUS';
$text['cache'] = 'Taille Cache';
$text['bogomips'] = 'Bogomips';
$text['usb'] = 'P&eacute;riph. USB';
$text['pci'] = 'P&eacute;riph. PCI';
$text['ide'] = 'P&eacute;riph. IDE';
$text['scsi'] = 'P&eacute;riph. SCSI';
 
//
$text['portail'] = 'Informations g&eacute;n&eacute;rales du portail ALCASAR';
$text['portail-version']= 'Version install&eacute;e';
$text['portail-disp'] = 'Versions disponibles';
$text['utilisateur'] = 'Usagers connect&eacute;s / inscrits';
$text['groupe'] = 'Nombre de groupe(s)';
$text['bl-version'] = 'Liste noire';
$text['internet_link'] = "Lien Internet";
$text['enable'] = "actif";
$text['disable'] = "inactif";
$text['web_filter'] = "Filtrage WEB";
$text['net_filter'] = "Filtrage protocoles r&eacute;seau";
//
 
$text['netusage'] = 'R&eacute;seau';
$text['device'] = 'P&eacute;riph&eacute;rique';
$text['received'] = 'R&eacute;ception';
$text['sent'] = 'Envoi';
$text['errors'] = 'Err/Drop';
 
$text['memusage'] = 'Utilisation m&eacute;moire';
$text['phymem'] = 'M&eacute;moire Physique';
$text['swap'] = 'Swap disque';
 
$text['fs'] = 'Syst&egrave;mes de fichiers mont&eacute;s';
$text['mount'] = 'Point';
$text['partition'] = 'Partition';
 
$text['percent'] = 'Utilisation';
$text['type'] = 'Type';
$text['free'] = 'Libre';
$text['used'] = 'Occup&eacute;';
$text['size'] = 'Taille';
$text['totals'] = 'Totaux';
 
$text['kb'] = 'Ko';
$text['mb'] = 'Mo';
$text['gb'] = 'Go';
 
$text['none'] = 'aucun';
 
$text['capacity'] = 'Capacit&eacute;';
$text['template'] = 'Mod&egrave;le ';
$text['language'] = 'Langue ';
$text['submit'] = 'Valider';
$text['created'] = 'Cr&eacute;&eacute; par';
$text['locale'] = 'fr_FR';
$text['gen_time'] = 'le %d %B %Y &agrave; %I:%M %p';
 
$text['days'] = 'jours';
$text['hours'] = 'heures';
$text['minutes'] = 'minutes';
 
$text['temperature'] = 'Temp&eacute;rature';
$text['voltage'] = 'Voltage';
$text['fans'] = 'Ventilateurs';
$text['s_value'] = 'valeur';
$text['s_min'] = 'Min';
$text['s_max'] = 'Max';
$text['hysteresis'] = 'Hyst&eacute;r&eacute;sis';
$text['s_limit'] = 'Limite';
$text['s_label'] = 'Label';
$text['degreeC'] = '&deg;C';
$text['degreeF'] = '&deg;F';
$text['voltage_mark'] = 'V';
$text['rpm_mark'] = 'RPM';
 
$text['app'] = 'Kernel + applications';
$text['buffers'] = 'Buffers';
$text['cached'] = 'Cached';
 
$text['connections'] = 'Established Network Connections';
?>
/web/acc/phpsysinfo/includes/lang/ar_utf8.php
0,0 → 1,110
<?php
//
// phpSysInfo - A PHP System Information Script
// http://phpsysinfo.sourceforge.net/
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//
// $Id: ar_utf8.php,v 1.15 2007/02/18 19:11:30 bigmichi1 Exp $
//
//Translated to arabic by: Nizar Abed - nizar@srcget.com - Adios
 
$charset = 'utf-8';
 
$text['title'] = 'معلومات عن ألنظام';
 
$text['vitals'] = 'حيويه';
$text['hostname'] = ' ألمحطه';
$text['ip'] = 'IP عنوان أل';
$text['kversion'] = 'إصدار رقم';
$text['dversion'] = 'Distro Name';
$text['uptime'] = 'مدة ألتشغيل';
$text['users'] = 'مستخدمون';
$text['loadavg'] = 'معدل ألتشغيل';
 
$text['hardware'] = 'معلومات ألمعدات';
$text['numcpu'] = 'وحدات ألمعالجه';
$text['cpumodel'] = 'نوع';
$text['cpuspeed'] = 'سرعه في';
$text['busspeed'] = 'BUS Speed';
$text['cache'] = ' cache سعة ذاكرة';
$text['bogomips'] = 'Bogomips سرعه في';
 
$text['pci'] = 'PCI معدات ';
$text['ide'] = 'IDE معدات';
$text['scsi'] = 'SCSI معدات';
$text['usb'] = 'USB معدات';
 
$text['netusage'] = 'إستعمال ألشبكه';
$text['device'] = 'معدات';
$text['received'] = 'إستقبل حتى ألآن';
$text['sent'] = 'أرسل';
$text['errors'] = 'أخطاء';
 
$text['connections'] = 'إتصالات شبكه منفذه';
 
$text['memusage'] = 'ذاكره مستعمله';
$text['phymem'] = 'ذاكره جسديه';
$text['swap'] = 'Swap ذاكرة';
 
$text['fs'] = 'أنظمة ملفات مخططه';
$text['mount'] = 'مخطط';
$text['partition'] = 'تقطيع';
 
$text['percent'] = 'سعه بألنسبه ألمؤيه';
$text['type'] = 'نوع';
$text['free'] = 'حر';
$text['used'] = 'مستعمل';
$text['size'] = 'حجم';
$text['totals'] = 'مجموع';
 
$text['kb'] = ' كيلو بايت KB';
$text['mb'] = 'ميغا بايت MB';
$text['gb'] = 'جيغا بايت GB';
 
$text['none'] = 'بدون';
 
$text['capacity'] = 'سعه';
 
$text['template'] = 'بنيه';
$text['language'] = 'لغه';
$text['submit'] = 'أدخل';
$text['created'] = 'إصدر بواسطة';
 
$text['days'] = 'أيام';
$text['hours'] = 'ساعات';
$text['minutes'] = 'دفائق';
 
$text['temperature'] = 'Temperature';
$text['voltage'] = 'Voltage';
$text['fans'] = 'Fans';
$text['s_value'] = 'Value';
$text['s_min'] = 'Min';
$text['s_max'] = 'Max';
$text['hysteresis'] = 'Hysteresis';
$text['s_limit'] = 'Limit';
$text['s_label'] = 'Label';
$text['degreeC'] = '&deg;C';
$text['degreeF'] = '&deg;F';
$text['voltage_mark'] = 'V';
$text['rpm_mark'] = 'RPM';
 
$text['app'] = 'Kernel + applications';
$text['buffers'] = 'Buffers';
$text['cached'] = 'Cached';
 
$text['locale'] = 'en_US';
$text['gen_time'] = 'on %b %d, %Y at %I:%M %p';
?>
/web/acc/phpsysinfo/includes/lang/jp.php
0,0 → 1,108
<?php
//
// phpSysInfo - A PHP System Information Script
// http://phpsysinfo.sourceforge.net/
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//
// $Id: jp.php,v 1.13 2007/02/18 19:11:31 bigmichi1 Exp $
 
$charset = 'euc-jp';
$text['title'] = '¥·¥¹¥Æ¥à¾ðÊó';
 
$text['vitals'] = '¥·¥¹¥Æ¥àÆ°ºî¾õ¶·';
$text['hostname'] = '¥Û¥¹¥È̾';
$text['ip'] = 'IP¥¢¥É¥ì¥¹';
$text['kversion'] = '¥«¡¼¥Í¥ë¥Ð¡¼¥¸¥ç¥ó(uname)';
$text['dversion'] = 'Distro Name';
$text['uptime'] = 'Ϣ³²ÔƯ»þ´Ö(uptime)';
$text['users'] = '¥í¥°¥¤¥ó¥æ¡¼¥¶¿ô';
$text['loadavg'] = '¥í¡¼¥É¥¢¥Ù¥ì¡¼¥¸';
 
$text['hardware'] = '¥Ï¡¼¥É¥¦¥§¥¢¾ðÊó';
$text['numcpu'] = 'CPU¿ô';
$text['cpumodel'] = 'CPU¥â¥Ç¥ë';
$text['cpuspeed'] = '¥¯¥í¥Ã¥¯Â®ÅÙ(MHz)';
$text['busspeed'] = 'BUS Speed';
$text['cache'] = '¥­¥ã¥Ã¥·¥å¥µ¥¤¥º';
$text['bogomips'] = 'System Bogomips';
 
$text['pci'] = 'PCI¥Ç¥Ð¥¤¥¹°ìÍ÷';
$text['ide'] = 'IDE¥Ç¥Ð¥¤¥¹°ìÍ÷';
$text['scsi'] = 'SCSI¥Ç¥Ð¥¤¥¹°ìÍ÷';
$text['usb'] = 'USB¥Ç¥Ð¥¤¥¹°ìÍ÷';
 
$text['netusage'] = '¥Í¥Ã¥È¥ï¡¼¥¯ÍøÍѾõ¶·';
$text['device'] = '¥¤¥ó¥¿¥Õ¥§¥¤¥¹Ì¾';
$text['received'] = '¼õ¿®¥µ¥¤¥º';
$text['sent'] = 'Á÷¿®¥µ¥¤¥º';
$text['errors'] = '¥¨¥é¡¼/¼õ¿®ÉÔǽ';
 
$text['connections'] = '¸½ºßÀܳ¤·¤Æ¤¤¤ë¥Í¥Ã¥È¥ï¡¼¥¯Àܳ°ìÍ÷';
 
$text['memusage'] = '¥á¥â¥ê»ÈÍѾõ¶·';
$text['phymem'] = 'ʪÍý¥á¥â¥êÎÌ';
$text['swap'] = '¥Ç¥£¥¹¥¯¥¹¥ï¥Ã¥×';
 
$text['fs'] = '¥Þ¥¦¥ó¥ÈºÑ¤ß¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à°ìÍ÷';
$text['mount'] = '¥Þ¥¦¥ó¥È¥Ý¥¤¥ó¥È';
$text['partition'] = '¥Ç¥£¥¹¥¯¥Ñ¡¼¥Æ¥£¥·¥ç¥ó';
 
$text['percent'] = 'ÍøÍѳä¹ç';
$text['type'] = '¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¼ïÊÌ';
$text['free'] = '¶õ¤­';
$text['used'] = 'ÍøÍÑ';
$text['size'] = 'Á´ÂÎ';
$text['totals'] = '¹ç·×';
 
$text['kb'] = 'KB';
$text['mb'] = 'MB';
$text['gb'] = 'GB';
 
$text['none'] = '¤¢¤ê¤Þ¤»¤ó';
 
$text['capacity'] = 'ÍÆÎÌ';
 
$text['template'] = '¥Ç¥¶¥¤¥óÁªÂò';
$text['language'] = '¸À¸ì';
$text['submit'] = 'Á÷¿®';
$text['created'] = 'Created by';
 
$text['days'] = 'Æü';
$text['hours'] = '»þ´Ö';
$text['minutes'] = 'ʬ';
 
$text['temperature'] = 'Temperature';
$text['voltage'] = 'Voltage';
$text['fans'] = 'Fans';
$text['s_value'] = 'Value';
$text['s_min'] = 'Min';
$text['s_max'] = 'Max';
$text['hysteresis'] = 'Hysteresis';
$text['s_limit'] = 'Limit';
$text['s_label'] = 'Label';
$text['degreeC'] = '&deg;C';
$text['degreeF'] = '&deg;F';
$text['voltage_mark'] = 'V';
$text['rpm_mark'] = 'RPM';
 
$text['app'] = 'Kernel + applications';
$text['buffers'] = 'Buffers';
$text['cached'] = 'Cached';
 
$text['locale'] = 'en_US';
$text['gen_time'] = 'on %b %d, %Y at %I:%M %p';
 
?>
/web/acc/phpsysinfo/includes/lang/nl.php
0,0 → 1,111
<?php
//
// phpSysInfo - A PHP System Information Script
// http://phpsysinfo.sourceforge.net/
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//
// $Id: nl.php,v 1.23 2007/02/18 19:11:31 bigmichi1 Exp $
 
if (PHP_OS == 'WINNT') {
$text['locale'] = 'dutch'; // (windows)
}
else {
$text['locale'] = 'nl-NL'; // (Linux and friends(?))
}
 
$text['title'] = 'Systeem Informatie';
 
$text['vitals'] = 'Systeem overzicht';
$text['hostname'] = 'Toegewezen naam';
$text['ip'] = 'IP-adres';
$text['kversion'] = 'Kernelversie';
$text['dversion'] = 'Distributie';
$text['uptime'] = 'Uptime';
$text['users'] = 'Huidige gebruikers';
$text['loadavg'] = 'Gemiddelde belasting';
 
$text['hardware'] = 'Hardware overzicht';
$text['numcpu'] = 'Processors';
$text['cpumodel'] = 'Model';
$text['cpuspeed'] = 'CPU snelheid';
$text['busspeed'] = 'BUS snelheid';
$text['cache'] = 'Cache grootte';
$text['bogomips'] = 'Systeem Bogomips';
 
$text['pci'] = 'PCI Apparaten';
$text['ide'] = 'IDE Apparaten';
$text['scsi'] = 'SCSI Apparaten';
$text['usb'] = 'USB Apparaten';
 
$text['netusage'] = 'Netwerkgebruik';
$text['device'] = 'Apparaat';
$text['received'] = 'Ontvangen';
$text['sent'] = 'Verzonden';
$text['errors'] = 'Err/Drop';
 
$text['memusage'] = 'Geheugengebruik';
$text['phymem'] = 'Fysiek geheugen';
$text['swap'] = 'Swap geheugen';
 
$text['fs'] = 'Aangesloten bestandssystemen';
$text['mount'] = 'Mount';
$text['partition'] = 'Partitie';
 
$text['percent'] = 'Percentage gebruikt';
$text['type'] = 'Type';
$text['free'] = 'Vrij';
$text['used'] = 'Gebruikt';
$text['size'] = 'Grootte';
$text['totals'] = 'Totaal';
 
$text['kb'] = 'KB';
$text['mb'] = 'MB';
$text['gb'] = 'GB';
 
$text['none'] = 'geen';
 
$text['capacity'] = 'Capaciteit';
$text['template'] = 'Opmaak-model';
$text['language'] = 'Taal';
$text['submit'] = 'Toepassen';
$text['created'] = 'Gegenereerd door';
$text['gen_time'] = 'op %d %B %Y, om %H:%M';
 
$text['days'] = 'dagen';
$text['hours'] = 'uren';
$text['minutes'] = 'minuten';
$text['temperature'] = 'Temperatuur';
$text['voltage'] = 'Voltage';
$text['fans'] = 'Fans';
$text['s_value'] = 'Waarde';
$text['s_min'] = 'Min';
$text['s_max'] = 'Max';
$text['hysteresis'] = 'Hysterie';
$text['s_limit'] = 'Limiet';
$text['s_label'] = 'Omschrijving';
$text['degreeC'] = '&deg;C';
$text['degreeF'] = '&deg;F';
$text['voltage_mark'] = 'V';
$text['rpm_mark'] = 'RPM';
 
$text['app'] = 'Kernel + applications';
$text['buffers'] = 'Buffers';
$text['cached'] = 'Cached';
 
$text['connections'] = 'Established Network Connections';
?>
/web/acc/phpsysinfo/includes/lang/pl.php
0,0 → 1,107
<?php
//
// phpSysInfo - A PHP System Information Script
// http://phpsysinfo.sourceforge.net/
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//
// $Id: pl.php,v 1.16 2007/02/18 19:11:31 bigmichi1 Exp $
 
$charset = 'iso-8859-2';
 
$text['title'] = 'Informacja o systemie';
 
$text['vitals'] = 'Stan systemu';
$text['hostname'] = 'Nazwa kanoniczna hosta';
$text['ip'] = 'IP nas³uchuj±cy';
$text['kversion'] = 'Wersja j±dra';
$text['dversion'] = 'Distro Name';
$text['uptime'] = 'Uptime';
$text['users'] = 'Obecnych u¿ytkownków';
$text['loadavg'] = 'Obci±¿enia ¶rednie';
 
$text['hardware'] = 'Informacja o sprzêcie';
$text['numcpu'] = 'Procesory';
$text['cpumodel'] = 'Model';
$text['cpuspeed'] = 'Cz&#281;stotliwo&#347;&#263;';
$text['busspeed'] = 'BUS Speed';
$text['cache'] = 'Cache Size';
$text['bogomips'] = 'System Bogomips';
 
$text['pci'] = 'Urz±dzenia PCI';
$text['ide'] = 'Urz±dzenia IDE';
$text['scsi'] = 'Urz±dzenia SCSI';
$text['usb'] = 'Urz±dzenia USB';
 
$text['netusage'] = 'Sieæ';
$text['device'] = 'Urz±dzenie';
$text['received'] = 'Odebrano';
$text['sent'] = 'Wys³ano';
$text['errors'] = 'B³êdow/Porzuconych';
 
$text['memusage'] = 'Obci±¿enie pamiêci';
$text['phymem'] = 'Pamiêæ fizyczna';
$text['swap'] = 'Pamiêæ Swap';
 
$text['fs'] = 'Zamontowane systemy plików';
$text['mount'] = 'Punkt montowania';
$text['partition'] = 'Partycja';
 
$text['percent'] = 'Procentowo zajête';
$text['type'] = 'Typ';
$text['free'] = 'Wolne';
$text['used'] = 'Zajête';
$text['size'] = 'Rozmiar';
$text['totals'] = 'Ca³kowite';
 
$text['kb'] = 'KB';
$text['mb'] = 'MB';
$text['gb'] = 'GB';
 
$text['none'] = 'brak';
 
$text['capacity'] = 'Rozmiar';
 
$text['template'] = 'Szablon';
$text['language'] = 'Jêzyk';
$text['submit'] = 'Wy¶lij';
$text['created'] = 'Utworzone przez';
$text['locale'] = 'pl_PL';
$text['gen_time'] = " %e %b %Y o godzinie %T";
 
$text['days'] = 'dni';
$text['hours'] = 'godzin';
$text['minutes'] = 'minut';
 
$text['temperature'] = 'Temperatura';
$text['voltage'] = 'Napiêcia';
$text['fans'] = 'Wiatraczki';
$text['s_value'] = 'Warto¶æ';
$text['s_min'] = 'Min';
$text['s_max'] = 'Max';
$text['hysteresis'] = 'Hystereza';
$text['s_limit'] = 'Limit';
$text['s_label'] = 'Nazwa';
$text['degreeC'] = '&deg;C';
$text['degreeF'] = '&deg;F';
$text['voltage_mark'] = 'V';
$text['rpm_mark'] = 'RPM';
 
$text['app'] = 'Kernel + applications';
$text['buffers'] = 'Buffers';
$text['cached'] = 'Cached';
 
$text['connections'] = 'Established Network Connections';
?>
/web/acc/phpsysinfo/includes/lang/hu.php
0,0 → 1,108
<?php
//
// phpSysInfo - A PHP System Information Script
// http://phpsysinfo.sourceforge.net/
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
// Translated by Zsozso - zsozso@internews.hu
// $Id: hu.php,v 1.19 2007/02/18 19:11:31 bigmichi1 Exp $
 
$charset = 'iso-8859-2';
 
$text['title'] = 'Rendszer Információ';
 
$text['vitals'] = 'A Rendszer Alapvetõ Információi';
$text['hostname'] = 'Hostnév';
$text['ip'] = 'Figyelt IP';
$text['kversion'] = 'Kernel Verzió';
$text['dversion'] = 'Distro Name';
$text['uptime'] = 'Uptime';
$text['users'] = 'Pillanatnyi felhasználók';
$text['loadavg'] = 'Terhelési Átlag';
 
$text['hardware'] = 'Hardware Információ';
$text['numcpu'] = 'Processzor';
$text['cpumodel'] = 'Modell';
$text['cpuspeed'] = 'Chip MHz';
$text['busspeed'] = 'BUS Speed';
$text['cache'] = 'Cache Méret';
$text['bogomips'] = 'Rendszer Bogomips';
 
$text['pci'] = 'PCI Eszközök';
$text['ide'] = 'IDE Eszközök';
$text['scsi'] = 'SCSI Eszközök';
$text['usb'] = 'USB Eszközök';
 
$text['netusage'] = 'Háló Használat';
$text['device'] = 'Eszköz';
$text['received'] = 'Fogadott';
$text['sent'] = 'Küldött';
$text['errors'] = 'Err/Drop';
 
$text['connections'] = 'Létesített Hálózati Kapcsolatok';
 
$text['memusage'] = 'Memória Használat';
$text['phymem'] = 'Fizikai Memória';
$text['swap'] = 'Lemez Swap';
 
$text['fs'] = 'Csatlakoztatott File Rendszerek';
$text['mount'] = 'Mount';
$text['partition'] = 'Partíciók';
 
$text['percent'] = 'Százalékos Használat';
$text['type'] = 'Típus';
$text['free'] = 'Szabad';
$text['used'] = 'Használt';
$text['size'] = 'Méret';
$text['totals'] = 'Összesen';
 
$text['kb'] = 'KB';
$text['mb'] = 'MB';
$text['gb'] = 'GB';
 
$text['none'] = 'nincs';
 
$text['capacity'] = 'Kapacítás';
 
$text['template'] = 'Sablon';
$text['language'] = 'Nyelv';
$text['submit'] = 'Mehet';
$text['created'] = 'Készült:';
$text['locale'] = 'en_US';
$text['gen_time'] = 'on %b %d, %Y at %I:%M %p';
 
$text['days'] = 'nap';
$text['hours'] = 'óra';
$text['minutes'] = 'perc';
$text['temperature'] = 'Temperature';
$text['voltage'] = 'Voltage';
$text['fans'] = 'Fans';
$text['s_value'] = 'Value';
$text['s_min'] = 'Min';
$text['s_max'] = 'Max';
$text['hysteresis'] = 'Hysteresis';
$text['s_limit'] = 'Limit';
$text['s_label'] = 'Label';
$text['degreeC'] = '&deg;C';
$text['degreeF'] = '&deg;F';
$text['voltage_mark'] = 'V';
$text['rpm_mark'] = 'RPM';
 
$text['app'] = 'Kernel + applications';
$text['buffers'] = 'Buffers';
$text['cached'] = 'Cached';
 
?>
/web/acc/phpsysinfo/includes/lang/no.php
0,0 → 1,105
<?php
//
// phpSysInfo - A PHP System Information Script
// http://phpsysinfo.sourceforge.net/
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//
// $Id: no.php,v 1.19 2007/02/18 19:11:31 bigmichi1 Exp $
 
$text['title'] = 'Systeminformasjon';
 
$text['vitals'] = 'Vital Informasjon';
$text['hostname'] = 'Egentlige Tjenernavn';
$text['ip'] = 'IP-Adresse';
$text['kversion'] = 'Kernel Versjon';
$text['dversion'] = 'Distro Name';
$text['uptime'] = 'Oppetid';
$text['users'] = 'Antall Brukere';
$text['loadavg'] = 'Gj.Snitt Belastning';
 
$text['hardware'] = 'Maskinvareinformasjon';
$text['numcpu'] = 'Prosessorer';
$text['cpumodel'] = 'Modell';
$text['cpuspeed'] = 'Brikke MHz';
$text['busspeed'] = 'BUS Speed';
$text['cache'] = 'Cache St&oslash;rrelse';
$text['bogomips'] = 'System Bogomips';
 
$text['pci'] = 'PCI Enheter';
$text['ide'] = 'IDE Enheter';
$text['scsi'] = 'SCSI Enheter';
$text['usb'] = 'USB Enheter';
 
$text['netusage'] = 'Nettverksbruk';
$text['device'] = 'Enhet';
$text['received'] = 'Mottatt';
$text['sent'] = 'Sendt';
$text['errors'] = 'Feil/Dropp';
 
$text['memusage'] = 'Minnebruk';
$text['phymem'] = 'Fysisk Minne';
$text['swap'] = 'Disk Swap';
 
$text['fs'] = 'Monterte Filsystemer';
$text['mount'] = 'Punkt';
$text['partition'] = 'Partisjon';
 
$text['percent'] = 'Brukt Kapasitet i Prosent';
$text['type'] = 'Type';
$text['free'] = 'Ledig';
$text['used'] = 'Brukt';
$text['size'] = 'St&oslash;rrelse';
$text['totals'] = 'Totalt';
 
$text['kb'] = 'KB';
$text['mb'] = 'MB';
$text['gb'] = 'GB';
 
$text['none'] = 'Ingen';
 
$text['capacity'] = 'Kapasitet';
$text['template'] = 'Mal';
$text['language'] = 'Spr&aring;k';
$text['submit'] = 'Endre';
$text['created'] = 'Generert av';
$text['locale'] = 'en_US';
$text['gen_time'] = 'on %b %d, %Y at %I:%M %p';
 
$text['days'] = 'dager';
$text['hours'] = 'timer';
$text['minutes'] = 'minutter';
$text['temperature'] = 'Temperature';
$text['voltage'] = 'Voltage';
$text['fans'] = 'Fans';
$text['s_value'] = 'Value';
$text['s_min'] = 'Min';
$text['s_max'] = 'Max';
$text['hysteresis'] = 'Hysteresis';
$text['s_limit'] = 'Limit';
$text['s_label'] = 'Label';
$text['degreeC'] = '&deg;C';
$text['degreeF'] = '&deg;F';
$text['voltage_mark'] = 'V';
$text['rpm_mark'] = 'RPM';
 
$text['app'] = 'Kernel + applications';
$text['buffers'] = 'Buffers';
$text['cached'] = 'Cached';
 
$text['connections'] = 'Established Network Connections';
?>
/web/acc/phpsysinfo/includes/lang/lt.php
0,0 → 1,110
<?php
//
// phpSysInfo - A PHP System Information Script
// http://phpsysinfo.sourceforge.net/
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//
// $Id: lt.php,v 1.20 2007/02/18 19:11:31 bigmichi1 Exp $
 
$charset = 'utf-8';
 
$text['title'] = 'Informacija apie sistemą';
 
$text['vitals'] = 'Sistema';
$text['hostname'] = 'Kompiuterio vardas';
$text['ip'] = 'IP adresas';
$text['kversion'] = 'Branduolio versija';
$text['dversion'] = 'Distribucija';
$text['uptime'] = 'Veikimo laikas';
$text['users'] = 'Vartotojai';
$text['loadavg'] = 'Apkrovos vidurkiai';
 
$text['hardware'] = 'Aparatūra';
$text['numcpu'] = 'Procesorių kiekis';
$text['cpumodel'] = 'Modelis';
$text['cpuspeed'] = 'Procesoriaus dažnis';
$text['busspeed'] = 'Magistralės dažnis';
$text['cache'] = 'Spartinančioji atmintinė';
$text['bogomips'] = 'Sistemos „bogomips“';
 
$text['pci'] = 'PCI įrenginiai';
$text['ide'] = 'IDE įrenginiai';
$text['scsi'] = 'SCSI įrenginiai';
$text['usb'] = 'USB įrenginiai';
 
$text['netusage'] = 'Tinklas';
$text['device'] = 'Įrenginys';
$text['received'] = 'Gauta';
$text['sent'] = 'Išsiųsta';
$text['errors'] = 'Klaidos/pamesti paketai';
 
$text['memusage'] = 'Atmintis';
$text['phymem'] = 'Operatyvioji atmintis';
$text['swap'] = 'Disko swap skirsnis';
 
$text['fs'] = 'Bylų sistema';
$text['mount'] = 'Prijungimo vieta';
$text['partition'] = 'Skirsnis';
 
$text['percent'] = 'Apkrova procentais';
$text['type'] = 'Tipas';
$text['free'] = 'Laisva';
$text['used'] = 'Apkrauta';
$text['size'] = 'Dydis';
$text['totals'] = 'Iš viso';
 
$text['kb'] = 'KB';
$text['mb'] = 'MB';
$text['gb'] = 'GB';
 
$text['none'] = 'nėra';
 
$text['capacity'] = 'Talpa';
$text['template'] = 'Šablonas';
$text['language'] = 'Kalba';
$text['submit'] = 'Atnaujinti';
$text['created'] = 'Naudojamas';
 
$text['days'] = 'd.';
$text['hours'] = 'val.';
$text['minutes'] = 'min.';
 
$text['temperature'] = 'Temperatūra';
$text['voltage'] = 'Įtampa';
$text['fans'] = 'Aušintuvai';
$text['s_value'] = 'Reikšmė';
$text['s_min'] = 'Min';
$text['s_max'] = 'Maks';
 
$text['hysteresis'] = 'Signalizuojama ties';
$text['s_limit'] = 'Riba';
$text['s_label'] = 'Pavadinimas';
$text['degreeC'] = '&deg;C';
$text['degreeF'] = '&deg;F';
$text['voltage_mark'] = 'V';
$text['rpm_mark'] = 'aps./min';
 
$text['app'] = 'Kernel + applications';
$text['buffers'] = 'Buffers';
$text['cached'] = 'Cached';
 
$text['connections'] = 'Established Network Connections';
 
$text['locale'] = 'en_US';
$text['gen_time'] = 'on %b %d, %Y at %I:%M %p';
 
?>
/web/acc/phpsysinfo/includes/lang/ro.php
0,0 → 1,106
<?php
//
// phpSysInfo - A PHP System Information Script
// http://phpsysinfo.sourceforge.net/
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//
// $Id: ro.php,v 1.0 6/9/01 12:41PM
// Translated by Silviu Simen - ssimen@sympatico.ca
 
$text['title'] = 'Informatii despre sistem';
 
$text['vitals'] = 'Informatii vitale';
$text['hostname'] = 'Numele canonic';
$text['ip'] = 'Adresa IP';
$text['kversion'] = 'Versiune nucleu';
$text['dversion'] = 'Distro Name';
$text['uptime'] = 'Timp de viata';
$text['users'] = 'Utilizatori curenti';
$text['loadavg'] = 'Incarcarea sistemului';
 
$text['hardware'] = 'Informatii hardware';
$text['numcpu'] = 'Procesoare';
$text['cpumodel'] = 'Model';
$text['cpuspeed'] = 'CPU Speed';
$text['busspeed'] = 'BUS Speed';
$text['cache'] = 'Marime Cache';
$text['bogomips'] = 'Bogomips';
 
$text['pci'] = 'Dispozitive PCI';
$text['ide'] = 'Dispozitive IDE';
$text['scsi'] = 'Dispozitive SCSI';
$text['usb'] = 'Dispozitive USB';
 
$text['netusage'] = 'Utilizarea retelei';
$text['device'] = 'Dispozitiv';
$text['received'] = 'Primit';
$text['sent'] = 'Trimis';
$text['errors'] = 'Erori';
 
$text['memusage'] = 'Utilizarea memoriei';
$text['phymem'] = 'Memorie fizica';
$text['swap'] = 'Disk Swap';
 
$text['fs'] = 'Sisteme de fisiere montate';
$text['mount'] = 'Punct montare';
$text['partition'] = 'Partitie';
 
$text['percent'] = 'Procent capacitate';
$text['type'] = 'Tip';
$text['free'] = 'Liber';
$text['used'] = 'Utilizat';
$text['size'] = 'Marime';
$text['totals'] = 'Total';
 
$text['kb'] = 'KB';
$text['mb'] = 'MB';
$text['gb'] = 'GB';
 
$text['none'] = 'nici unul';
 
$text['capacity'] = 'Capacitate';
 
$text['template'] = 'Model';
$text['language'] = 'Limba';
$text['submit'] = 'Actualizeaza';
$text['created'] = 'Creat de';
$text['locale'] = 'en_US';
$text['gen_time'] = 'on %b %d, %Y at %I:%M %p';
 
$text['days'] = 'zile';
$text['hours'] = 'ore';
$text['minutes'] = 'minute';
$text['temperature'] = 'Temperature';
$text['voltage'] = 'Voltage';
$text['fans'] = 'Fans';
$text['s_value'] = 'Value';
$text['s_min'] = 'Min';
$text['s_max'] = 'Max';
$text['hysteresis'] = 'Hysteresis';
$text['s_limit'] = 'Limit';
$text['s_label'] = 'Label';
$text['degreeC'] = '&deg;C';
$text['degreeF'] = '&deg;F';
$text['voltage_mark'] = 'V';
$text['rpm_mark'] = 'RPM';
 
$text['app'] = 'Kernel + applications';
$text['buffers'] = 'Buffers';
$text['cached'] = 'Cached';
 
$text['connections'] = 'Established Network Connections';
?>
/web/acc/phpsysinfo/includes/lang/lv.php
0,0 → 1,106
<?php
//
// phpSysInfo - A PHP System Information Script
// http://phpsysinfo.sourceforge.net/
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//
// $Id: lv.php,v 1.12 2007/02/18 19:11:31 bigmichi1 Exp $
 
$text['title'] = 'Sistçmas informâcija';
 
$text['vitals'] = 'Galvenie râdîtâji';
$text['hostname'] = 'Hosta vârds';
$text['ip'] = 'IP Adrese';
$text['kversion'] = 'Kerneïa versija';
$text['dversion'] = 'Distro Name';
$text['uptime'] = 'Nepârtrauktais darba laiks';
$text['users'] = 'Lietotâji';
$text['loadavg'] = 'Vidçjie ielâdes râdîtâji';
 
$text['hardware'] = 'Aparatûra';
$text['numcpu'] = 'Procesors';
$text['cpumodel'] = 'Modelis';
$text['cpuspeed'] = 'Èipa MHz';
$text['busspeed'] = 'BUS Speed';
$text['cache'] = 'Keð atmiòa';
$text['bogomips'] = 'Sistçmas "Bogomips"';
 
$text['pci'] = 'PCI ierîces';
$text['ide'] = 'IDE ierîces';
$text['scsi'] = 'SCSI ierîces';
$text['usb'] = 'USB ierîces';
 
$text['netusage'] = 'Tîkla informâcija';
$text['device'] = 'Ierîce';
$text['received'] = 'Saòemts';
$text['sent'] = 'Aizsûtîts';
$text['errors'] = 'Kïûdas/Zaudçtâs paketes';
 
$text['connections'] = 'Established Network Connections';
 
$text['memusage'] = 'Atmiòas lietojums';
$text['phymem'] = 'Operatîvâ atmiòa';
$text['swap'] = 'Swap atmiòa';
 
$text['fs'] = 'Cietie diski';
$text['mount'] = 'Mounta vieta';
$text['partition'] = 'Partîcija';
 
$text['percent'] = 'Aizòemts procentos';
$text['type'] = 'Tips';
$text['free'] = 'Brîvs';
$text['used'] = 'Aizòemts';
$text['size'] = 'Ietilpîba';
$text['totals'] = 'Kopâ';
 
$text['kb'] = 'KB';
$text['mb'] = 'MB';
$text['gb'] = 'GB';
 
$text['none'] = 'nav';
 
$text['capacity'] = 'Ietilpîba';
 
$text['template'] = 'Sagatave';
$text['language'] = 'Valoda';
$text['submit'] = 'Apstiprinât';
$text['created'] = 'Autors';
$text['locale'] = 'en_US';
$text['gen_time'] = 'on %b %d, %Y at %I:%M %p';
 
$text['days'] = 'dienas';
$text['hours'] = 'stundas';
$text['minutes'] = 'minûtes';
 
$text['temperature'] = 'Temperature';
$text['voltage'] = 'Voltage';
$text['fans'] = 'Fans';
$text['s_value'] = 'Value';
$text['s_min'] = 'Min';
$text['s_max'] = 'Max';
$text['hysteresis'] = 'Hysteresis';
$text['s_limit'] = 'Limit';
$text['s_label'] = 'Label';
$text['degreeC'] = '&deg;C';
$text['degreeF'] = '&deg;F';
$text['voltage_mark'] = 'V';
$text['rpm_mark'] = 'RPM';
 
$text['app'] = 'Kernel + applications';
$text['buffers'] = 'Buffers';
$text['cached'] = 'Cached';
 
?>
/web/acc/phpsysinfo/includes/lang/ca.php
0,0 → 1,108
<?php
//
// phpSysInfo -A PHP System Information Script
// http://phpsysinfo.sourceforge.net/
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//
// $Id: ca.php,v 1.17 2007/02/18 19:11:31 bigmichi1 Exp $
//
// Traductor: Miquel Guillamet Montalat
// E-mail: mikelet15@netscape.com Web: http://gitx.dhs.org
//
$text['title'] = 'Informació del Sistema';
 
$text['vitals'] = 'Vital';
$text['hostname'] = 'Nom del Sistema';
$text['ip'] = 'Direcció IP';
$text['kversion'] = 'Versió del Kernel';
$text['dversion'] = 'Distro Name';
$text['uptime'] = 'Uptime';
$text['users'] = 'Usuaris actuals';
$text['loadavg'] = 'Carrega del Servidor';
 
$text['hardware'] = 'Informació del Hardware';
$text['numcpu'] = 'Processadors';
$text['cpumodel'] = 'Model';
$text['cpuspeed'] = 'Frequència en MHz';
$text['busspeed'] = 'BUS Speed';
$text['cache'] = 'RAM';
$text['bogomips'] = 'Bogomips';
 
$text['pci'] = 'Dispositius PCI';
$text['ide'] = 'Dispositius IDE';
$text['scsi'] = 'Dispositius SCSI';
$text['usb'] = 'Dispisitius USB';
 
$text['netusage'] = 'Utilització de la XARXA';
$text['device'] = 'Dispositiu';
$text['received'] = 'Rebut';
$text['sent'] = 'Enviat';
$text['errors'] = 'Errors/Perduts';
 
$text['memusage'] = 'Utilització de la RAM';
$text['phymem'] = 'Memoria Fisica';
$text['swap'] = 'Swap';
 
$text['fs'] = 'Particions Montades';
$text['mount'] = 'Montat a';
$text['partition'] = 'Partició';
 
$text['percent'] = 'Capacitat';
$text['type'] = 'Tipus';
$text['free'] = 'Lliure';
$text['used'] = 'Usat';
$text['size'] = 'Tamany';
$text['totals'] = 'Totals';
 
$text['kb'] = 'KB';
$text['mb'] = 'MB';
$text['gb'] = 'GB';
 
$text['none'] = 'ningun';
 
$text['capacity'] = 'Capacitat';
 
$text['template'] = 'Themes';
$text['language'] = 'Llenguatge';
$text['submit'] = 'Enviar';
$text['created'] = 'Creat per';
$text['locale'] = 'en_US';
$text['gen_time'] = 'on %b %d, %Y at %I:%M %p';
 
$text['days'] = 'dies';
$text['hours'] = 'hores';
$text['minutes'] = 'minuts';
$text['temperature'] = 'Temperature';
$text['voltage'] = 'Voltage';
$text['fans'] = 'Fans';
$text['s_value'] = 'Value';
$text['s_min'] = 'Min';
$text['s_max'] = 'Max';
$text['hysteresis'] = 'Hysteresis';
$text['s_limit'] = 'Limit';
$text['s_label'] = 'Label';
$text['degreeC'] = '&deg;C';
$text['degreeF'] = '&deg;F';
$text['voltage_mark'] = 'V';
$text['rpm_mark'] = 'RPM';
 
$text['app'] = 'Kernel + applications';
$text['buffers'] = 'Buffers';
$text['cached'] = 'Cached';
 
$text['connections'] = 'Established Network Connections';
?>
/web/acc/phpsysinfo/includes/lang/pt.php
0,0 → 1,106
<?php
//
// phpSysInfo - A PHP System Information Script
// http://phpsysinfo.sourceforge.net/
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//
// $Id: pt.php,v 1.15 2007/02/18 19:11:31 bigmichi1 Exp $
 
$text['title'] = 'Informações do Sistema';
 
$text['vitals'] = 'Informações Vitais';
$text['hostname'] = 'Hostname Canónico';
$text['ip'] = 'IP';
$text['kversion'] = 'Versão do Kernel';
$text['dversion'] = 'Distro Name';
$text['uptime'] = 'Uptime';
$text['users'] = 'Utilizadores Ligados';
$text['loadavg'] = 'Carga Média';
 
$text['hardware'] = 'Informações do Hardware';
$text['numcpu'] = 'Processadores';
$text['cpumodel'] = 'Modelo';
$text['cpuspeed'] = 'CPU Speed';
$text['busspeed'] = 'BUS Speed';
$text['cache'] = 'Tamanho da Cache';
$text['bogomips'] = 'Bogomips do Sistema';
 
$text['pci'] = 'Hardware PCI';
$text['ide'] = 'Hardware IDE';
$text['scsi'] = 'Hardware SCSI';
$text['usb'] = 'Hardware USB';
 
$text['netusage'] = 'Utilização da Rede';
$text['device'] = 'Dispositivo';
$text['received'] = 'Recebidos';
$text['sent'] = 'Enviados';
$text['errors'] = 'Erro/Rejeitados';
 
$text['connections'] = 'Ligações Estabelecidas';
 
$text['memusage'] = 'Utilização da Memória';
$text['phymem'] = 'Memória Física';
$text['swap'] = 'Swap';
 
$text['fs'] = 'Sistema de Ficheiros (Mounted)';
$text['mount'] = 'Mount';
$text['partition'] = 'Partições';
 
$text['percent'] = 'Capacidade em Percentagem';
$text['type'] = 'Tipo';
$text['free'] = 'Livre';
$text['used'] = 'Utilizada';
$text['size'] = 'Tamanho';
$text['totals'] = 'Totais';
 
$text['kb'] = 'KB';
$text['mb'] = 'MB';
$text['gb'] = 'GB';
 
$text['none'] = 'indisponível';
 
$text['capacity'] = 'Capacidade';
 
$text['template'] = 'Template';
$text['language'] = 'Idioma';
$text['submit'] = 'Enviar';
$text['created'] = 'Produzido por';
$text['locale'] = 'en_US';
$text['gen_time'] = 'on %b %d, %Y at %I:%M %p';
 
$text['days'] = 'dias';
$text['hours'] = 'horas';
$text['minutes'] = 'minutos';
$text['temperature'] = 'Temperature';
$text['voltage'] = 'Voltage';
$text['fans'] = 'Fans';
$text['s_value'] = 'Value';
$text['s_min'] = 'Min';
$text['s_max'] = 'Max';
$text['hysteresis'] = 'Hysteresis';
$text['s_limit'] = 'Limit';
$text['s_label'] = 'Label';
$text['degreeC'] = '&deg;C';
$text['degreeF'] = '&deg;F';
$text['voltage_mark'] = 'V';
$text['rpm_mark'] = 'RPM';
 
$text['app'] = 'Kernel + applications';
$text['buffers'] = 'Buffers';
$text['cached'] = 'Cached';
 
?>
/web/acc/phpsysinfo/includes/lang/pt-br.php
0,0 → 1,110
<?php
//
// phpSysInfo - A PHP System Information Script
// http://phpsysinfo.sourceforge.net/
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//
// $Id: pt-br.php,v 1.12 2007/02/18 19:11:31 bigmichi1 Exp $
//
// Tradutor: Marcílio Cunha Marinho Maia, 29/03/2003 às 04:34 (Goiânia-GO,Brasil)
// E-mail: marcilio@nextsolution.com.br Web: http://www.nextsolution.com.br
// Icq: 22493131
 
$text['title'] = 'Informação Sobre o Sistema';
 
$text['vitals'] = 'Informações Vitais do Sistema';
$text['hostname'] = 'Nome do Servidor';
$text['ip'] = 'Número IP';
$text['kversion'] = 'Versão do Kernel';
$text['dversion'] = 'Distro Name';
$text['uptime'] = 'Tempo Ativo do Sistema';
$text['users'] = 'Usuarios Ativos';
$text['loadavg'] = 'Carga do Sistema';
 
$text['hardware'] = 'Informações sobre o Hardware';
$text['numcpu'] = 'Processadores';
$text['cpumodel'] = 'Modelo';
$text['cpuspeed'] = 'Velocidade em MHz';
$text['busspeed'] = 'BUS Speed';
$text['cache'] = 'Tamanho do Cache';
$text['bogomips'] = 'Velocidade em Bogomips';
 
$text['pci'] = 'Dispositivos PCI';
$text['ide'] = 'Dispositivos IDE';
$text['scsi'] = 'Dispositivos SCSI';
$text['usb'] = 'Dispositivos USB';
 
$text['netusage'] = 'Uso da Rede';
$text['device'] = 'Dispositivo';
$text['received'] = 'Recebido';
$text['sent'] = 'Enviado';
$text['errors'] = 'Perdido';
 
$text['connections'] = 'Conexões Estabelecidas';
 
$text['memusage'] = 'Utilização Memória';
$text['phymem'] = 'Memória Física';
$text['swap'] = 'Memória Virtual (SWAP)';
 
$text['fs'] = 'Sistemas de Arquivos';
$text['mount'] = 'Ponto de montagem';
$text['partition'] = 'Partição';
 
$text['percent'] = 'Capacidade Utilizada';
$text['type'] = 'Tipo';
$text['free'] = 'Livre';
$text['used'] = 'Utilizado';
$text['size'] = 'Tamanho';
$text['totals'] = 'Totais';
 
$text['kb'] = 'KB';
$text['mb'] = 'MB';
$text['gb'] = 'GB';
 
$text['none'] = 'N/A';
 
$text['capacity'] = 'Capacidade';
 
$text['template'] = 'Exemplos';
$text['language'] = 'Língua';
$text['submit'] = 'Entrar';
$text['created'] = 'Criado por';
$text['locale'] = 'en_US';
$text['gen_time'] = 'on %b %d, %Y at %I:%M %p';
 
$text['days'] = 'Dias';
$text['hours'] = 'Horas';
$text['minutes'] = 'Minutos';
 
$text['temperature'] = 'Temperature';
$text['voltage'] = 'Voltage';
$text['fans'] = 'Fans';
$text['s_value'] = 'Value';
$text['s_min'] = 'Min';
$text['s_max'] = 'Max';
$text['hysteresis'] = 'Hysteresis';
$text['s_limit'] = 'Limit';
$text['s_label'] = 'Label';
$text['degreeC'] = '&deg;C';
$text['degreeF'] = '&deg;F';
$text['voltage_mark'] = 'V';
$text['rpm_mark'] = 'RPM';
 
$text['app'] = 'Kernel + applications';
$text['buffers'] = 'Buffers';
$text['cached'] = 'Cached';
 
?>
/web/acc/phpsysinfo/includes/lang/tr.php
0,0 → 1,106
<?php
//
// phpSysInfo - A PHP System Information Script
// http://phpsysinfo.sourceforge.net/
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//
// $Id: tr.php,v 1.16 2007/02/18 19:11:31 bigmichi1 Exp $
 
$text['title'] = 'Sistem Bilgisi';
 
$text['vitals'] = 'Sistem Temel';
$text['hostname'] = 'Cannonical Host Adresi';
$text['ip'] = 'IP Adresi';
$text['kversion'] = 'Kernel Versiyonu';
$text['dversion'] = 'Distro Name';
$text['uptime'] = 'Açýk Kaldýðý Süre';
$text['users'] = 'Þu Andaki Kullanýcýlar';
$text['loadavg'] = 'Yükleme Ortalamasý';
 
$text['hardware'] = 'Hardware Bilgisi';
$text['numcpu'] = 'CPU Sayýsý';
$text['cpumodel'] = 'Model';
$text['cpuspeed'] = 'CPU Hýzý( Mhz)';
$text['busspeed'] = 'BUS Speed';
$text['cache'] = 'Cache Büyüklüðü';
$text['bogomips'] = 'Sistem Bogomips';
 
$text['pci'] = 'PCI Araçlar';
$text['ide'] = 'IDE Araçlar';
$text['scsi'] = 'SCSI Araçlar';
$text['usb'] = 'USB Araçlar';
 
$text['netusage'] = 'Network Kullanýmý';
$text['device'] = 'Arayüz';
$text['received'] = 'Alýnan';
$text['sent'] = 'Gönderilen';
$text['errors'] = 'Hata/Düþürülen';
 
$text['connections'] = 'Kurulmuþ Network Baðlantýlarý';
 
$text['memusage'] = 'Hafýza Kullanýmý';
$text['phymem'] = 'Fiziksel Hafýza';
$text['swap'] = 'Disk Swap';
 
$text['fs'] = 'Mount Edilmiþ Sistemler';
$text['mount'] = 'Mount';
$text['partition'] = 'Kýsým';
 
$text['percent'] = 'Yüzde Kapasite';
$text['type'] = 'Tür';
$text['free'] = 'Boþ Alan';
$text['used'] = 'Kullanýlan';
$text['size'] = 'Büyüklük';
$text['totals'] = 'Toplam';
 
$text['kb'] = 'KB';
$text['mb'] = 'MB';
$text['gb'] = 'GB';
 
$text['none'] = 'Hiçbiri';
 
$text['capacity'] = 'Kapasite';
 
$text['template'] = 'Arayüz';
$text['language'] = 'Dil';
$text['submit'] = 'Gönder';
$text['created'] = 'Yaratan';
$text['locale'] = 'en_US';
$text['gen_time'] = 'on %b %d, %Y at %I:%M %p';
 
$text['days'] = 'gün';
$text['hours'] = 'saat';
$text['minutes'] = 'dakika';
$text['temperature'] = 'Temperature';
$text['voltage'] = 'Voltage';
$text['fans'] = 'Fans';
$text['s_value'] = 'Value';
$text['s_min'] = 'Min';
$text['s_max'] = 'Max';
$text['hysteresis'] = 'Hysteresis';
$text['s_limit'] = 'Limit';
$text['s_label'] = 'Label';
$text['degreeC'] = '&deg;C';
$text['degreeF'] = '&deg;F';
$text['voltage_mark'] = 'V';
$text['rpm_mark'] = 'RPM';
 
$text['app'] = 'Kernel + applications';
$text['buffers'] = 'Buffers';
$text['cached'] = 'Cached';
 
?>
/web/acc/phpsysinfo/includes/lang/ru.php
0,0 → 1,108
<?php
//
// phpSysInfo - A PHP System Information Script
// http://phpsysinfo.sourceforge.net/
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//
// $Id: ru.php,v 1.0 2002/06/26 11:05:32
// Translated by Voldar (voldar@quality.s2.ru)
 
$charset = 'cp1251';
$text['title'] = 'Ñèñòåìíàÿ èíôîðìàöèÿ';
 
$text['vitals'] = 'Îñíîâíûå äàííûå';
$text['hostname'] = 'Èìÿ õîñòà';
$text['ip'] = 'Ïðîñëóøèâàåìûé IP';
$text['kversion'] = 'Âåðñèÿ ÿäðà';
$text['dversion'] = 'Distro Name';
$text['uptime'] = 'Âðåìÿ ðàáîòû';
$text['users'] = 'Ïîëüçîâàòåëåé â ñèñòåìå';
$text['loadavg'] = 'Ñðåäíÿÿ çàãðóçêà';
 
$text['hardware'] = 'Àïïàðàòíîå îáåñïå÷åíèå';
$text['numcpu'] = 'Ïðîöåññîðû';
$text['cpumodel'] = 'Ìîäåëü';
$text['cpuspeed'] = 'Ñêîðîñòü ïðîöåññîðà MHz';
$text['busspeed'] = 'BUS Speed';
$text['cache'] = 'Ðàçìåð êåøà';
$text['bogomips'] = 'System Bogomips';
 
$text['pci'] = 'Óñòðîéñòâà PCI';
$text['ide'] = 'Óñòðîéñòâà IDE';
$text['scsi'] = 'Óñòðîéñòâà SCSI';
$text['usb'] = 'Óñòðîéñòâà USB';
 
$text['netusage'] = 'Èñïîëüçîâàíèå ñåòè';
$text['device'] = 'Óñòðîéñòâî';
$text['received'] = 'Ïîëó÷åíî';
$text['sent'] = 'Îòïðàâëåíî';
$text['errors'] = 'Îøèáîê';
 
$text['connections'] = 'Óñòàíîâëåííûå ñåòåâûå ñîåäèíåíèÿ';
 
$text['memusage'] = 'Èñïîëüçîâàíèå ïàìÿòè';
$text['phymem'] = 'Ôèçè÷åñêàÿ ïàìÿòü';
$text['swap'] = 'Ôàéë ïîäêà÷êè';
 
$text['fs'] = 'Ñìîíòèðîâàííûå ôàéëîâûå ñèñòåìû';
$text['mount'] = 'Òî÷êà ìîíòèðîâàíèÿ';
$text['partition'] = 'Ðàçäåë';
 
$text['percent'] = 'Ïðîöåíò èñïîëüçîâàíèÿ';
$text['type'] = 'Òèï';
$text['free'] = 'Ñâîáîäíî';
$text['used'] = 'Çàíÿòî';
$text['size'] = 'Ðàçìåð';
$text['totals'] = 'Âñåãî';
 
$text['kb'] = 'KB';
$text['mb'] = 'MB';
$text['gb'] = 'GB';
 
$text['none'] = 'îòñóòñòâóåò';
 
$text['capacity'] = 'Ðàçìåð';
 
$text['template'] = 'Øàáëîí';
$text['language'] = 'ßçûê';
$text['submit'] = 'Ïðèìåíèòü';
$text['created'] = 'Ñîçäàíî';
$text['locale'] = 'en_US';
$text['gen_time'] = 'on %b %d, %Y at %I:%M %p';
 
$text['days'] = 'äíåé';
$text['hours'] = 'hours';
$text['minutes'] = 'minutes';
 
$text['temperature'] = 'Temperature';
$text['voltage'] = 'Voltage';
$text['fans'] = 'Fans';
$text['s_value'] = 'Value';
$text['s_min'] = 'Min';
$text['s_max'] = 'Max';
$text['hysteresis'] = 'Hysteresis';
$text['s_limit'] = 'Limit';
$text['s_label'] = 'Label';
$text['degreeC'] = '&deg;C';
$text['degreeF'] = '&deg;F';
$text['voltage_mark'] = 'V';
$text['rpm_mark'] = 'RPM';
 
$text['app'] = 'Kernel + applications';
$text['buffers'] = 'Buffers';
$text['cached'] = 'Cached';
 
?>
/web/acc/phpsysinfo/includes/lang/tw.php
0,0 → 1,107
<?php
//
// phpSysInfo - A PHP System Information Script
// http://phpsysinfo.sourceforge.net/
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//
// $Id: tw.php,v 1.18 2007/02/18 19:11:31 bigmichi1 Exp $
 
$charset = 'big5';
 
$text['title'] = '¨t²Î¸ê°T';
 
$text['vitals'] = '¨t²Î¥D­n°T®§';
$text['hostname'] = '¥D¾÷¦WºÙ';
$text['ip'] = '¥D¾÷¹ï¥~ IP';
$text['kversion'] = '®Ö¤ßª©¥»';
$text['dversion'] = 'Distro Name';
$text['uptime'] = '¶}¾÷®É¶¡';
$text['users'] = '½u¤W¨Ï¥ÎªÌ';
$text['loadavg'] = '¥­§¡­t¸ü';
 
$text['hardware'] = 'µwÅé¸ê°T';
$text['numcpu'] = '³B²z¾¹¼Æ¶q';
$text['cpumodel'] = 'CPU«¬¸¹';
$text['cpuspeed'] = '´¹¤ù³t«×';
$text['busspeed'] = 'BUS Speed';
$text['cache'] = '§Ö¨ú¤j¤p';
$text['bogomips'] = '¨t²Î Bogomips';
 
$text['pci'] = 'PCI ³]³Æ';
$text['ide'] = 'IDE ³]³Æ';
$text['scsi'] = 'SCSI ³]³Æ';
$text['usb'] = 'USB ³]³Æ';
 
$text['netusage'] = 'ºô¸ô¨Ï¥Î¶q';
$text['device'] = 'ºô¸ô³]³Æ';
$text['received'] = '±µ¦¬';
$text['sent'] = '°e¥X';
$text['errors'] = '¿ù»~/¤¤Â_';
 
$text['memusage'] = '°O¾ÐÅé¨Ï¥Î¶q';
$text['phymem'] = '¹êÅé°O¾ÐÅé';
$text['swap'] = 'µêÀÀ°O¾ÐÅé(ºÏºÐ¸m´«)';
 
$text['fs'] = '¤w±¾¸üÀɮרt²Î';
$text['mount'] = '±¾¸ü¸ô®|';
$text['partition'] = '¤À³ÎºÏ°Ï';
 
$text['percent'] = '¨Ï¥Î¶q¦Ê¤À¤ñ';
$text['type'] = '«¬ºA';
$text['free'] = '³Ñ¾lªÅ¶¡';
$text['used'] = '¤w¨Ï¥Î';
$text['size'] = 'Á`®e¶q';
$text['totals'] = 'Á`¨Ï¥Î¶q';
 
$text['kb'] = 'KB';
$text['mb'] = 'MB';
$text['gb'] = 'GB';
 
$text['none'] = 'µL';
 
$text['capacity'] = '®e¶q';
 
$text['template'] = '½d¥»';
$text['language'] = '»y¨¥';
$text['submit'] = '°e¥X';
$text['created'] = '²£¥Í¥Ñ';
$text['locale'] = 'zh_TW.Big5';
$text['gen_time'] = 'on %b %d, %Y at %I:%M %p';
 
$text['days'] = '¤Ñ';
$text['hours'] = '¤p®É';
$text['minutes'] = '¤ÀÄÁ';
$text['temperature'] = 'Temperature';
$text['voltage'] = 'Voltage';
$text['fans'] = 'Fans';
$text['s_value'] = 'Value';
$text['s_min'] = 'Min';
$text['s_max'] = 'Max';
$text['hysteresis'] = 'Hysteresis';
$text['s_limit'] = 'Limit';
$text['s_label'] = 'Label';
$text['degreeC'] = '&deg;C';
$text['degreeF'] = '&deg;F';
$text['voltage_mark'] = 'V';
$text['rpm_mark'] = 'RPM';
 
$text['app'] = 'Kernel + applications';
$text['buffers'] = 'Buffers';
$text['cached'] = 'Cached';
 
$text['connections'] = 'Established Network Connections';
?>
/web/acc/phpsysinfo/includes/lang/id.php
0,0 → 1,107
<?php
//
// phpSysInfo - A PHP System Information Script
// http://phpsysinfo.sourceforge.net/
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//
// $Id: id.php,v 1.18 2007/02/18 19:11:31 bigmichi1 Exp $
// Translated by: Firman Pribadi <http://ragiel.dhs.org>
 
$text['title'] = 'Informasi Sistem';
 
$text['vitals'] = 'Informasi Utama';
$text['hostname'] = 'Hostname Resmi';
$text['ip'] = 'IP Penerima';
$text['kversion'] = 'Versi Kernel';
$text['dversion'] = 'Distro Name';
$text['uptime'] = 'Aktif Selama';
$text['users'] = 'Pengguna Saat Ini';
$text['loadavg'] = 'Beban Rata-rata';
 
$text['hardware'] = 'Informasi Perangkat Keras';
$text['numcpu'] = 'Prosesor';
$text['cpumodel'] = 'Model';
$text['cpuspeed'] = 'CPU Speed';
$text['busspeed'] = 'BUS Speed';
$text['cache'] = 'Ukuran Cache';
$text['bogomips'] = 'Sistem Bogomips';
 
$text['pci'] = 'Perangkat PCI';
$text['ide'] = 'Perangkat IDE';
$text['scsi'] = 'Perangkat SCSI';
$text['usb'] = 'Perangkat USB';
 
$text['netusage'] = 'Status Penggunaan Jaringan';
$text['device'] = 'Perangkat';
$text['received'] = 'Diterima';
$text['sent'] = 'Dikirim';
$text['errors'] = 'Rusak/Drop';
 
$text['connections'] = 'Koneksi Jaringan Aktif';
 
$text['memusage'] = 'Status Penggunaan Memori';
$text['phymem'] = 'Memori Fisik';
$text['swap'] = 'Swap HardDisk';
 
$text['fs'] = 'Status Penggunaan Media Penyimpanan dan Filesystem';
$text['mount'] = 'Titik Mount';
$text['partition'] = 'Partisi';
 
$text['percent'] = 'Digunakan (Persen)';
$text['type'] = 'Tipe';
$text['free'] = 'Bebas';
$text['used'] = 'Digunakan';
$text['size'] = 'Ukuran';
$text['totals'] = 'Total';
 
$text['kb'] = 'KB';
$text['mb'] = 'MB';
$text['gb'] = 'GB';
 
$text['none'] = 'tidak ditemukan';
 
$text['capacity'] = 'Kapasitas';
 
$text['template'] = 'Template';
$text['language'] = 'Bahasa';
$text['submit'] = 'Gunakan';
$text['created'] = 'Dibangun menggunakan';
$text['locale'] = 'en_US';
$text['gen_time'] = 'on %b %d, %Y at %I:%M %p';
 
$text['days'] = 'hari';
$text['hours'] = 'jam';
$text['minutes'] = 'menit';
$text['temperature'] = 'Temperature';
$text['voltage'] = 'Voltage';
$text['fans'] = 'Fans';
$text['s_value'] = 'Value';
$text['s_min'] = 'Min';
$text['s_max'] = 'Max';
$text['hysteresis'] = 'Hysteresis';
$text['s_limit'] = 'Limit';
$text['s_label'] = 'Label';
$text['degreeC'] = '&deg;C';
$text['degreeF'] = '&deg;F';
$text['voltage_mark'] = 'V';
$text['rpm_mark'] = 'RPM';
 
$text['app'] = 'Kernel + applications';
$text['buffers'] = 'Buffers';
$text['cached'] = 'Cached';
 
?>
/web/acc/phpsysinfo/includes/lang/cn.php
0,0 → 1,106
<?php
//
// phpSysInfo - A PHP System Information Script
// http://phpsysinfo.sourceforge.net/
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//
// $Id: cn.php,v 1.17 2007/02/18 19:11:31 bigmichi1 Exp $
 
$charset = 'gb2312';
 
$text['title'] = 'ϵͳÐÅÏ¢';
$text['vitals'] = 'ϵͳÖ÷ÒªÐÅÏ¢';
$text['hostname'] = 'Ö÷»úÃû³Æ';
$text['ip'] = 'Ö÷»ú¶ÔÍâIP';
$text['kversion'] = 'Äں˰汾';
$text['dversion'] = 'Distro Name';
$text['uptime'] = '¿ª»úʱ¼ä';
$text['users'] = 'ÔÚÏßʹÓÃÕß';
$text['loadavg'] = 'ƽ¾ù¸ºÔØ';
 
$text['hardware'] = 'Ó²¼þÐÅÏ¢';
$text['numcpu'] = '´¦ÀíÆ÷ÊýÁ¿';
$text['cpumodel'] = 'CPUÐͺÅ';
$text['cpuspeed'] = 'оƬËÙ¶È';
$text['busspeed'] = 'BUS Speed';
$text['cache'] = 'Cache´óС';
$text['bogomips'] = 'ϵͳBogomips';
 
$text['pci'] = 'PCIÉ豸';
$text['ide'] = 'IDEÉ豸';
$text['scsi'] = 'SCSIÉ豸';
$text['usb'] = 'USBÉ豸';
 
$text['netusage'] = 'ÍøÂ縺ÔØ';
$text['device'] = 'ÍøÂçÉ豸';
$text['received'] = '½ÓÊÕ';
$text['sent'] = 'Ëͳö';
$text['errors'] = '´íÎó/ÖжÏ';
 
$text['memusage'] = 'ÄÚ´æʹÓÃÁ¿';
$text['phymem'] = 'ÎïÀíÄÚ´æ';
$text['swap'] = 'ÐéÄâÄÚ´æ(½»»»·ÖÇø)';
 
$text['fs'] = 'ÒѹÒÔØ·ÖÇø';
$text['mount'] = '¹ÒÔØ·¾¶';
$text['partition'] = 'ÎïÀí´ÅÅÌ';
 
$text['percent'] = 'ʹÓÃÁ¿°Ù·Ö±È';
$text['type'] = 'ÎļþϵͳÀàÐÍ';
$text['free'] = 'Ê£Óà¿Õ¼ä';
$text['used'] = 'ÒÑÓÿռä';
$text['size'] = '×ÜÈÝÁ¿';
$text['totals'] = '×ÜʹÓÃÁ¿';
 
$text['kb'] = 'KB';
$text['mb'] = 'MB';
$text['gb'] = 'GB';
 
$text['none'] = 'ÎÞ';
 
$text['capacity'] = 'ÈÝÁ¿';
 
$text['template'] = 'Ö÷Ìâ';
$text['language'] = 'ÓïÑÔ';
$text['submit'] = 'È·¶¨';
$text['created'] = 'Éú³É By';
$text['locale'] = 'zh_CN.eucCN';
$text['gen_time'] = 'on %b %d, %Y at %I:%M %p';
 
$text['days'] = 'Ìì';
$text['hours'] = 'Сʱ';
$text['minutes'] = '·ÖÖÓ';
 
$text['temperature'] = 'Temperature';
$text['voltage'] = 'Voltage';
$text['fans'] = 'Fans';
$text['s_value'] = 'Value';
$text['s_min'] = 'Min';
$text['s_max'] = 'Max';
$text['hysteresis'] = 'Hysteresis';
$text['s_limit'] = 'Limit';
$text['s_label'] = 'Label';
$text['degreeC'] = '&deg;C';
$text['degreeF'] = '&deg;F';
$text['voltage_mark'] = 'V';
$text['rpm_mark'] = 'RPM';
 
$text['app'] = 'Kernel + applications';
$text['buffers'] = 'Buffers';
$text['cached'] = 'Cached';
 
$text['connections'] = 'Established Network Connections';
?>
/web/acc/phpsysinfo/includes/lang/en.php
0,0 → 1,118
<?php
//
// phpSysInfo - A PHP System Information Script
// http://phpsysinfo.sourceforge.net/
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//
// $Id: en.php,v 1.21 2007/02/18 19:11:31 bigmichi1 Exp $
 
$text['title'] = 'System Information';
 
$text['vitals'] = 'System Vital';
$text['hostname'] = 'Canonical Hostname';
$text['ip'] = 'Listening IP';
$text['kversion'] = 'Kernel Version';
$text['dversion'] = 'Distro Name';
$text['uptime'] = 'Uptime';
$text['users'] = 'Current Users';
$text['loadavg'] = 'Load Averages';
 
$text['hardware'] = 'Hardware Information';
$text['numcpu'] = 'Processors';
$text['cpumodel'] = 'Model';
$text['cpuspeed'] = 'CPU Speed';
$text['busspeed'] = 'BUS Speed';
$text['cache'] = 'Cache Size';
$text['bogomips'] = 'System Bogomips';
$text['usb'] = 'USB Devices';
$text['pci'] = 'PCI Devices';
$text['ide'] = 'IDE Devices';
$text['scsi'] = 'SCSI Devices';
 
//
$text['portail'] = 'General Informations about ALCASAR portal';
$text['portail-version']= 'Installed version';
$text['portail-disp'] = 'Available versions';
$text['utilisateur'] = 'logged user(s) / tot.';
$text['groupe'] = 'Number of group(s)';
$text['bl-version'] = 'Updated \'Blacklist\'';
$text['internet_link'] = "Internet connexion";
$text['enable'] = "enable";
$text['disable'] = "disable";
$text['web_filter'] = "WEB filtering";
$text['net_filter'] = "Network protocols filtering";
//
 
$text['netusage'] = 'Network Usage';
$text['device'] = 'Device';
$text['received'] = 'Received';
$text['sent'] = 'Sent';
$text['errors'] = 'Err/Drop';
 
$text['memusage'] = 'Memory Usage';
$text['phymem'] = 'Physical Memory';
$text['swap'] = 'Disk Swap';
 
$text['fs'] = 'Mounted Filesystems';
$text['mount'] = 'Mount';
$text['partition'] = 'Partition';
 
$text['percent'] = 'Percent Capacity';
$text['type'] = 'Type';
$text['free'] = 'Free';
$text['used'] = 'Used';
$text['size'] = 'Size';
$text['totals'] = 'Totals';
 
$text['kb'] = 'KB';
$text['mb'] = 'MB';
$text['gb'] = 'GB';
 
$text['none'] = 'none';
 
$text['capacity'] = 'Capacity';
 
$text['template'] = 'Template';
$text['language'] = 'Language';
$text['submit'] = 'Submit';
$text['created'] = 'Created by';
$text['locale'] = 'en_US';
$text['gen_time'] = 'on %b %d, %Y at %I:%M %p';
 
$text['days'] = 'days';
$text['hours'] = 'hours';
$text['minutes'] = 'minutes';
 
$text['temperature'] = 'Temperature';
$text['voltage'] = 'Voltage';
$text['fans'] = 'Fans';
$text['s_value'] = 'Value';
$text['s_min'] = 'Min';
$text['s_max'] = 'Max';
$text['hysteresis'] = 'Hysteresis';
$text['s_limit'] = 'Limit';
$text['s_label'] = 'Label';
$text['degreeC'] = '&deg;C';
$text['degreeF'] = '&deg;F';
$text['voltage_mark'] = 'V';
$text['rpm_mark'] = 'RPM';
 
$text['app'] = 'Kernel + applications';
$text['buffers'] = 'Buffers';
$text['cached'] = 'Cached';
 
$text['connections'] = 'Established Network Connections';
?>
/web/acc/phpsysinfo/includes/lang/cs.php
0,0 → 1,107
<?php
//
// phpSysInfo - A PHP System Information Script
// http://phpsysinfo.sourceforge.net/
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//
// $Id: cs.php,v 1.18 2007/02/18 19:11:31 bigmichi1 Exp $
 
$charset = 'iso-8859-2';
 
$text['title'] = 'Informace o systému';
 
$text['vitals'] = 'Základní informace';
$text['hostname'] = 'Jméno poèítaèe';
$text['ip'] = 'IP adresa';
$text['kversion'] = 'Verze jádra';
$text['dversion'] = 'Distro Name';
$text['uptime'] = 'Uptime';
$text['users'] = 'Pøihlá¹ených u¾ivatelù';
$text['loadavg'] = 'Prùmìrná zátì¾';
 
$text['hardware'] = 'Hardwarové informace';
$text['numcpu'] = 'Procesory';
$text['cpumodel'] = 'Model';
$text['cpuspeed'] = 'Frekvence';
$text['busspeed'] = 'BUS Speed';
$text['cache'] = 'Velikost cache';
$text['bogomips'] = 'Bogomipsy';
 
$text['pci'] = 'PCI zaøízení';
$text['ide'] = 'IDE zaøízení';
$text['scsi'] = 'SCSI zaøízení';
$text['usb'] = 'USB zaøízení';
 
$text['netusage'] = 'Pou¾ívání sítì';
$text['device'] = 'Zaøízení';
$text['received'] = 'Pøijato';
$text['sent'] = 'Odesláno';
$text['errors'] = 'Chyby/Vypu¹tìno';
 
$text['memusage'] = 'Obsazení pamìti';
$text['phymem'] = 'Fyzická pamì»';
$text['swap'] = 'Swap';
 
$text['fs'] = 'Pøipojené souborové systémy';
$text['mount'] = 'Adresáø';
$text['partition'] = 'Oddíl';
 
$text['percent'] = 'Obsazeno';
$text['type'] = 'Typ';
$text['free'] = 'Volno';
$text['used'] = 'Pou¾ito';
$text['size'] = 'Velikost';
$text['totals'] = 'Celkem';
 
$text['kb'] = 'KB';
$text['mb'] = 'MB';
$text['gb'] = 'GB';
 
$text['none'] = '¾ádná';
 
$text['capacity'] = 'Kapacita';
 
$text['template'] = '©ablona';
$text['language'] = 'Jazyk';
$text['submit'] = 'Odeslat';
$text['created'] = 'Vytvoøeno pomocí';
$text['locale'] = 'en_US';
$text['gen_time'] = 'on %b %d, %Y at %I:%M %p';
 
$text['days'] = 'dnù';
$text['hours'] = 'hodin';
$text['minutes'] = 'minut';
$text['temperature'] = 'Temperature';
$text['voltage'] = 'Voltage';
$text['fans'] = 'Fans';
$text['s_value'] = 'Value';
$text['s_min'] = 'Min';
$text['s_max'] = 'Max';
$text['hysteresis'] = 'Hysteresis';
$text['s_limit'] = 'Limit';
$text['s_label'] = 'Label';
$text['degreeC'] = '&deg;C';
$text['degreeF'] = '&deg;F';
$text['voltage_mark'] = 'V';
$text['rpm_mark'] = 'RPM';
 
$text['app'] = 'Kernel + applications';
$text['buffers'] = 'Buffers';
$text['cached'] = 'Cached';
 
$text['connections'] = 'Established Network Connections';
?>
/web/acc/phpsysinfo/includes/lang/pa_utf8.php
0,0 → 1,108
<?php
//
// phpSysInfo - A PHP System Information Script
// http://phpsysinfo.sourceforge.net/
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//
// $Id: pa_utf8.php,v 1.6 2007/02/18 19:11:31 bigmichi1 Exp $
 
$charset = 'utf-8';
 
$text['title'] = 'ਸਿਸਟਮ ਜਾਣਕਾਰੀ';
 
$text['vitals'] = 'ਸਿਸਟਮ ਮਾਰਕਮ';
$text['hostname'] = 'ਮੇਜ਼ਬਾਨ ਨਾਂ';
$text['ip'] = 'ਸੁਣਨ IP';
$text['kversion'] = 'ਕਰਨਲ ਵਰਜਨ';
$text['dversion'] = 'ਵੰਡ ਨਾਂ';
$text['uptime'] = 'ਚੱਲਣ ਸਮਾਂ';
$text['users'] = 'ਕੁੱਲ ਉਪਭੋਗੀ';
$text['loadavg'] = 'ਔਸਤ ਲੋਡ';
 
$text['hardware'] = 'ਜੰਤਰ ਜਾਣਕਾਰੀ';
$text['numcpu'] = 'ਪਰੋਸੈਸਰ';
$text['cpumodel'] = 'ਮਾਡਲ';
$text['cpuspeed'] = 'CPU ਗਤੀ';
$text['busspeed'] = 'ਬਸ ਗਤੀ';
$text['cache'] = 'ਕੈਂਚੇ ਅਕਾਰ';
$text['bogomips'] = 'ਸਿਸਟਮ Bogomips';
 
$text['pci'] = 'PCI ਜੰਤਰ';
$text['ide'] = 'IDE ਜੰਤਰ';
$text['scsi'] = 'SCSI ਜੰਤਰ';
$text['usb'] = 'USB ਜੰਤਰ';
 
$text['netusage'] = 'ਨੈੱਟਵਰਕ ਵਰਤੋਂ';
$text['device'] = 'ਜੰਤਰ';
$text['received'] = 'ਪਰਾਪਤ ਹੋਇਆ';
$text['sent'] = 'ਭੇਜਿਆ';
$text['errors'] = 'ਗਲਤੀ/ਸੁੱਟੇ';
 
$text['connections'] = 'ਸਥਾਪਤ ਨੈੱਟਵਰਕ ਕੁਨੈਕਸ਼ਨ';
 
$text['memusage'] = 'ਮੈਮੋਰੀ ਵਰਤੋਂ';
$text['phymem'] = 'ਭੌਤਿਕ ਮੈਮੋਰੀ';
$text['swap'] = 'ਡਿਸਕ ਸਵੈਪ';
 
$text['fs'] = 'ਮਾਊਂਟ ਕੀਤੇ ਫਾਇਲ ਸਿਸਟਮ';
$text['mount'] = 'ਮਾਊਂਟ';
$text['partition'] = 'ਭਾਗ';
 
$text['percent'] = 'ਫ਼ੀ-ਸਦੀ ਸਮੱਰਥਾ';
$text['type'] = 'ਕਿਸਮ';
$text['free'] = 'ਮੁਕਤ (ਖਾਲੀ)';
$text['used'] = 'ਵਰਤੀ';
$text['size'] = 'ਅਕਾਰ';
$text['totals'] = 'ਕੁੱਲ';
 
$text['kb'] = 'ਕਿਬਾ';
$text['mb'] = 'ਮੈਬਾ';
$text['gb'] = 'ਗੈਬਾ';
 
$text['none'] = 'ਕੋਈ ਨਹੀਂ';
 
$text['capacity'] = 'ਸਮੱਰਥਾ';
 
$text['template'] = 'ਨਮੂਨਾ';
$text['language'] = 'ਭਾਸ਼ਾ';
$text['submit'] = 'ਪੇਸ਼ ਕਰੋੇ';
$text['created'] = 'ਬਣਾਇਆ';
$text['locale'] = 'pa';
$text['gen_time'] = '%b %d, %Y ਨੂੰ %I:%M %p ਵਜੇ';
 
$text['days'] = 'ਦਿਨ';
$text['hours'] = 'ਘੰਟੇ';
$text['minutes'] = 'ਮਿੰਟ';
 
$text['temperature'] = 'ਤਾਪਮਾਨ';
$text['voltage'] = 'ਵੋਲਟੇਜ਼';
$text['fans'] = 'ਪੱਖੇ';
$text['s_value'] = 'ਮੁੱਲ';
$text['s_min'] = 'ਘੱਟੋ-ਘੱਟ';
$text['s_max'] = 'ਵੱਧੋ-ਵੱਧ';
$text['hysteresis'] = 'Hysteresis';
$text['s_limit'] = 'ਸੀਮਾ';
$text['s_label'] = 'ਲੇਬਲ';
$text['degreeC'] = '&deg;C';
$text['degreeF'] = '&deg;F';
$text['voltage_mark'] = 'V';
$text['rpm_mark'] = 'RPM';
 
$text['app'] = 'Kernel + applications';
$text['buffers'] = 'Buffers';
$text['cached'] = 'Cached';
 
?>
/web/acc/phpsysinfo/includes/lang/ct.php
0,0 → 1,104
<?php
//
// phpSysInfo - A PHP System Information Script
// http://phpsysinfo.sourceforge.net/
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//
// $Id: ct.php,v 1.17 2007/02/18 19:11:31 bigmichi1 Exp $
 
$text['title'] = 'Informaci&oacute; del Sistema';
 
$text['vitals'] = 'Vitals del Sistema';
$text['hostname'] = 'Nom Canònic';
$text['ip'] = 'Adreça IP';
$text['kversion'] = 'Versi&oacute; del Kernel';
$text['dversion'] = 'Distro Name';
$text['uptime'] = 'Temps Aixecat';
$text['users'] = 'Usuaris Actuals';
$text['loadavg'] = 'Càrrega Promitg';
 
$text['hardware'] = 'Informaci&oacute; del Maquinari';
$text['numcpu'] = 'Processadors';
$text['cpumodel'] = 'Model';
$text['cpuspeed'] = 'Xip MHz';
$text['busspeed'] = 'BUS Speed';
$text['cache'] = 'Tamany Memòria Cau';
$text['bogomips'] = 'Bogomips';
 
$text['pci'] = 'Dispositius PCI';
$text['ide'] = 'Dispositius IDE';
$text['scsi'] = 'Dispositius SCSI';
$text['usb'] = 'Dispositius USB';
 
$text['netusage'] = 'Ús de la Xarxa';
$text['device'] = 'Dispositiu';
$text['received'] = 'Rebuts';
$text['sent'] = 'Enviats';
$text['errors'] = 'Errors/Perduts';
 
$text['memusage'] = 'Ús de la Memòria';
$text['phymem'] = 'Memòria F&iacute;sica';
$text['swap'] = 'Disc d\'Swap';
 
$text['fs'] = 'Sistemes d\'Arxius Muntats';
$text['mount'] = 'Muntat';
$text['partition'] = 'Partició';
$text['percent'] = 'Percentatge de Capacitat';
$text['type'] = 'Tipus';
$text['free'] = 'Lliure';
$text['used'] = 'Emprat';
$text['size'] = 'Tamany';
$text['totals'] = 'Totals';
 
$text['kb'] = 'KB';
$text['mb'] = 'MB';
$text['gb'] = 'GB';
 
$text['none'] = 'cap';
 
$text['capacity'] = 'Capacitat';
$text['template'] = 'Plantilla';
$text['language'] = 'Llengüa';
$text['submit'] = 'Enviar';
$text['created'] = 'Creat per';
$text['locale'] = 'en_US';
$text['gen_time'] = 'on %b %d, %Y at %I:%M %p';
 
$text['days'] = 'dies';
$text['hours'] = 'hores';
$text['minutes'] = 'minuts';
$text['temperature'] = 'Temperature';
$text['voltage'] = 'Voltage';
$text['fans'] = 'Fans';
$text['s_value'] = 'Value';
$text['s_min'] = 'Min';
$text['s_max'] = 'Max';
$text['hysteresis'] = 'Hysteresis';
$text['s_limit'] = 'Limit';
$text['s_label'] = 'Label';
$text['degreeC'] = '&deg;C';
$text['degreeF'] = '&deg;F';
$text['voltage_mark'] = 'V';
$text['rpm_mark'] = 'RPM';
 
$text['app'] = 'Kernel + applications';
$text['buffers'] = 'Buffers';
$text['cached'] = 'Cached';
 
$text['connections'] = 'Established Network Connections';
?>
/web/acc/phpsysinfo/includes/lang/es.php
0,0 → 1,105
<?php
//
// phpSysInfo - A PHP System Information Script
// http://phpsysinfo.sourceforge.net/
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//
// $Id: es.php,v 1.20 2007/02/18 19:11:31 bigmichi1 Exp $
 
$text['title'] = 'Informaci&oacute;n Del Sistema';
 
$text['vitals'] = 'Vitales';
$text['hostname'] = 'Nombre Del Sistema';
$text['ip'] = 'Direcci&oacute;n IP';
$text['kversion'] = 'Versi&oacute;n Del N&uacute;cleo';
$text['dversion'] = 'Distro Name';
$text['uptime'] = 'Uptime';
$text['users'] = 'Usuarios Actuales';
$text['loadavg'] = 'Promedio De Uso';
 
$text['hardware'] = 'Informaci&oacute;n Del Hardware';
$text['numcpu'] = 'Procesadores';
$text['cpumodel'] = 'Modelo';
$text['cpuspeed'] = 'Frecuencia';
$text['busspeed'] = 'BUS Speed';
$text['cache'] = 'Tama&ntilde;o Del Cach&eacute;';
$text['bogomips'] = 'Bogomips';
 
$text['pci'] = 'Dispositivos PCI';
$text['ide'] = 'Dispositivos IDE';
$text['scsi'] = 'Dispositivos SCSI';
$text['usb'] = 'Dispositivos USB';
 
$text['netusage'] = 'Utilizaci&oacute;n De La Red';
$text['device'] = 'Dispositivo';
$text['received'] = 'Recibidos';
$text['sent'] = 'Enviados';
$text['errors'] = 'Errores/Perdidos';
 
$text['memusage'] = 'Utilizaci&oacute;n De La Memoria';
$text['phymem'] = 'Memoria F&iacute;sica';
$text['swap'] = 'Memoria De Intercambio';
 
$text['fs'] = 'Sistemas De Archivos';
$text['mount'] = 'Punto De Montaje';
$text['partition'] = 'Partici&oacute;n';
 
$text['percent'] = 'Porcentaje De Uso';
$text['type'] = 'Tipo';
$text['free'] = 'Libre';
$text['used'] = 'Usado';
$text['size'] = 'Tama&ntilde;o';
$text['totals'] = 'Totales';
 
$text['kb'] = 'KB';
$text['mb'] = 'MB';
$text['gb'] = 'GB';
 
$text['none'] = 'Ninguno';
 
$text['capacity'] = 'Capacidad';
 
$text['template'] = 'Plantilla';
$text['language'] = 'Idioma';
$text['submit'] = 'Enviar';
$text['created'] = 'Creado por';
$text['locale'] = 'en_US';
$text['gen_time'] = 'on %b %d, %Y at %I:%M %p';
 
$text['days'] = 'd&iacute;as';
$text['hours'] = 'horas';
$text['minutes'] = 'minutos';
$text['temperature'] = 'Temperature';
$text['voltage'] = 'Voltage';
$text['fans'] = 'Fans';
$text['s_value'] = 'Value';
$text['s_min'] = 'Min';
$text['s_max'] = 'Max';
$text['hysteresis'] = 'Hysteresis';
$text['s_limit'] = 'Limit';
$text['s_label'] = 'Label';
$text['degreeC'] = '&deg;C';
$text['degreeF'] = '&deg;F';
$text['voltage_mark'] = 'V';
$text['rpm_mark'] = 'RPM';
 
$text['app'] = 'Kernel + applications';
$text['buffers'] = 'Buffers';
$text['cached'] = 'Cached';
 
$text['connections'] = 'Established Network Connections';
?>
/web/acc/phpsysinfo/includes/lang/et.php
0,0 → 1,105
<?php
//
// phpSysInfo - A PHP System Information Script
// http://phpsysinfo.sourceforge.net/
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//
// $Id: et.php,v 1.21 2007/02/18 19:11:31 bigmichi1 Exp $
 
$text['title'] = 'S&uuml;steemi informatsioon';
 
$text['vitals'] = 'System Vital';
$text['hostname'] = 'Kanooniline masinanimi';
$text['ip'] = 'Vastav IP';
$text['kversion'] = 'Kerneli versioon';
$text['dversion'] = 'Distro nimi';
$text['uptime'] = 'Masin elus juba';
$text['users'] = 'Hetkel kasutajaid';
$text['loadavg'] = 'Koormuse keskmised';
 
$text['hardware'] = 'Riistvara informatsioon';
$text['numcpu'] = 'Protsessoreid';
$text['cpumodel'] = 'Mudel';
$text['cpuspeed'] = 'Taktsagedus MHz';
$text['busspeed'] = 'Siinikiirus';
$text['cache'] = 'Vahem&auml;lu suurus';
$text['bogomips'] = 'S&uuml;steemi BogoMIPS';
 
$text['pci'] = 'PCI-seadmed';
$text['ide'] = 'IDE-seadmed';
$text['scsi'] = 'SCSI-seadmed';
$text['usb'] = 'USB-seadmed';
 
$text['netusage'] = 'V&otilde;rguteenuse kasutamine';
$text['device'] = 'Seade';
$text['received'] = 'Saadud';
$text['sent'] = 'Saadetud';
$text['errors'] = 'Vigu/H&uuml;ljatud';
 
$text['memusage'] = 'M&auml;lu kasutamine';
$text['phymem'] = 'F&uuml;&uuml;siline m&auml;lu';
$text['swap'] = 'Saalem&auml;lu kettal';
 
$text['fs'] = '&Uuml;hendatud failis&uuml;steemid';
$text['mount'] = '&Uuml;hendus';
$text['partition'] = 'Partitsioon';
 
$text['percent'] = 'Protsendiline h&otilde;ivatus';
$text['type'] = 'T&uuml;&uuml;p';
$text['free'] = 'Vaba';
$text['used'] = 'Kasutusel';
$text['size'] = 'Suurus';
$text['totals'] = 'Kokku';
 
$text['kb'] = 'KB';
$text['mb'] = 'MB';
$text['gb'] = 'GB';
 
$text['none'] = 'puudub';
 
$text['capacity'] = 'H&otilde;ivatus';
$text['template'] = 'Mall';
$text['language'] = 'Keel';
$text['submit'] = 'Kehtesta';
$text['created'] = 'Looja:';
$text['locale'] = 'en_US';
$text['gen_time'] = 'on %b %d, %Y at %I:%M %p';
 
$text['days'] = 'p&auml;eva';
$text['hours'] = 'tundi';
$text['minutes'] = 'minutit';
$text['temperature'] = 'Temperatuur';
$text['voltage'] = 'Pinge';
$text['fans'] = 'Ventilaatorid';
$text['s_value'] = 'V&auml;&auml;rtus';
$text['s_min'] = 'Min';
$text['s_max'] = 'Max';
$text['hysteresis'] = 'H&uuml;sterees';
$text['s_limit'] = 'Limiit';
$text['s_label'] = 'Label';
$text['degreeC'] = '&deg;C';
$text['degreeF'] = '&deg;F';
$text['voltage_mark'] = 'V';
$text['rpm_mark'] = 'RPM';
 
$text['app'] = 'Kernel + rakendused';
$text['buffers'] = 'Puhvrid';
$text['cached'] = 'Vahem&auml;lus';
 
$text['connections'] = 'Established Network Connections';
?>
/web/acc/phpsysinfo/includes/lang/gr.php
0,0 → 1,108
<?php
//
// phpSysInfo - A PHP System Information Script
// http://phpsysinfo.sourceforge.net/
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//
// $Id: gr.php,v 1.15 2007/02/18 19:11:31 bigmichi1 Exp $
 
$charset = "iso-8895-7";
 
$text['title'] = 'Ðëçñïöïñßåò ÓõóôÞìáôïò';
 
$text['vitals'] = '×áñáêôçñéóôéêÜ ÓõóôÞìáôïò';
$text['hostname'] = '¼íïìá ÕðïëïãéóôÞ';
$text['ip'] = 'Äéåõèõíóç ÉÑ';
$text['kversion'] = 'Åêäïóç ÐõñÞíá';
$text['dversion'] = 'Distro Name';
$text['uptime'] = '×ñüíïò Ëåéôïõñãßáò ÓõóôÞìáôïò';
$text['users'] = 'ÓõíäåìÝíïé ×ñÞóôåò';
$text['loadavg'] = 'Load Average';
 
$text['hardware'] = 'Ðëçñïöïñßåò Õëéêïý';
$text['numcpu'] = 'ÅðåîåñãáóôÝò';
$text['cpumodel'] = 'ÌïíôÝëï';
$text['cpuspeed'] = 'Ôá÷ýôçôá MHz';
$text['busspeed'] = 'BUS Speed';
$text['cache'] = 'ÌÝãåèïò ÌíÞìçò Cache';
$text['bogomips'] = 'ÅðåîåñãáóôéêÞ Éó÷ýò óå Bogomips';
 
$text['pci'] = 'ÓõóêåõÝò PCI';
$text['ide'] = 'ÓõóêåõÝò IDE';
$text['scsi'] = 'ÓõóêåõÝò SCSI';
$text['usb'] = 'ÓõóêåõÝò USB';
 
$text['netusage'] = '×ñÞóç Äéêôýïõ';
$text['device'] = 'ÓõóêåõÞ';
$text['received'] = 'Ëáìâáíüìåíá';
$text['sent'] = 'ÁðïóôáëìÝíá';
$text['errors'] = 'ÓöÜëìáôá';
 
$text['connections'] = 'ÅíåñãÝò ÓõíäÝóçò Äéêôýïõ';
 
$text['memusage'] = '×ñÞóç ÌíÞìçò';
$text['phymem'] = 'ÌíÞìç Physical';
$text['swap'] = 'Äßóêïò Swap';
 
$text['fs'] = 'ÐñïóáñôçìÝíá ÓõóôÞìáôá Áñ÷åßùí';
$text['mount'] = 'ÐñïóÜñôçóç';
$text['partition'] = 'ÊáôÜôìçóç';
 
$text['percent'] = '×ùñçôéêüôçôá %';
$text['type'] = 'Ôýðïò';
$text['free'] = 'Åëåýèåñá';
$text['used'] = 'Óå ÷ñÞóç';
$text['size'] = 'ÌÝãåèïò';
$text['totals'] = 'ÓõíïëéêÜ';
 
$text['kb'] = 'KB';
$text['mb'] = 'MB';
$text['gb'] = 'GB';
 
$text['none'] = '-';
 
$text['capacity'] = '×ùñçôéêüôçôá';
 
$text['template'] = 'ÈÝìá';
$text['language'] = 'Ãëþóóá';
$text['submit'] = 'ÕðïâïëÞ';
$text['created'] = 'ÄçìéïõñãÞèçêå áðü ôï';
$text['locale'] = 'en_US';
$text['gen_time'] = 'on %b %d, %Y at %I:%M %p';
 
$text['days'] = 'ìÝñåò';
$text['hours'] = 'þñåò';
$text['minutes'] = 'ëåðôÜ';
$text['temperature'] = 'Temperature';
$text['voltage'] = 'Voltage';
$text['fans'] = 'Fans';
$text['s_value'] = 'Value';
$text['s_min'] = 'Min';
$text['s_max'] = 'Max';
$text['hysteresis'] = 'Hysteresis';
$text['s_limit'] = 'Limit';
$text['s_label'] = 'Label';
$text['degreeC'] = '&deg;C';
$text['degreeF'] = '&deg;F';
$text['voltage_mark'] = 'V';
$text['rpm_mark'] = 'RPM';
 
$text['app'] = 'Kernel + applications';
$text['buffers'] = 'Buffers';
$text['cached'] = 'Cached';
 
?>
/web/acc/phpsysinfo/includes/lang/eu.php
0,0 → 1,106
<?php
//
// phpSysInfo - A PHP System Information Script
// http://phpsysinfo.sourceforge.net/
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//
// $Id: eu.php,v 1.16 2007/02/18 19:11:31 bigmichi1 Exp $
 
$text['title'] = 'Sistemaren Informazioa';
 
$text['vitals'] = 'Sistema';
$text['hostname'] = 'Zerbitzariaren izen Kanonikoa';
$text['ip'] = 'Entzuten duen IP-a';
$text['kversion'] = 'Kernel Bertsioa';
$text['dversion'] = 'Distro Name';
$text['uptime'] = 'Piztutako denbora';
$text['users'] = 'Uneko Erabiltzaileak';
$text['loadavg'] = 'Karga ertainak';
 
$text['hardware'] = 'Hardwarezko Informazioa';
$text['numcpu'] = 'Prozasatzailea';
$text['cpumodel'] = 'Modeloa';
$text['cpuspeed'] = 'Txip MHz';
$text['busspeed'] = 'BUS Speed';
$text['cache'] = 'Cache tamaina';
$text['bogomips'] = 'Sistemare Bogomips-ak';
 
$text['pci'] = 'PCI Dispositiboak';
$text['ide'] = 'IDE Dispositiboak';
$text['scsi'] = 'SCSI Dispositiboak';
$text['usb'] = 'USB Dispositiboak';
 
$text['netusage'] = 'Sarearen Erabilera';
$text['device'] = 'Dispositiboa';
$text['received'] = 'Jasotakoa';
$text['sent'] = 'Bidalitakoa';
$text['errors'] = 'Err/Huts';
 
$text['connections'] = 'Established Network Connections';
 
$text['memusage'] = 'Memoriaren Erabilpena';
$text['phymem'] = 'Memoria Fisikoa';
$text['swap'] = 'Disko Memoria';
 
$text['fs'] = 'Montatutako Fitxategi-sistemak';
$text['mount'] = 'Non montatuta';
$text['partition'] = 'Partizioa';
 
$text['percent'] = 'Ehunekoa';
$text['type'] = 'Mota';
$text['free'] = 'Aske';
$text['used'] = 'Erabilita';
$text['size'] = 'Tamaina';
$text['totals'] = 'Guztira';
 
$text['kb'] = 'KB';
$text['mb'] = 'MB';
$text['gb'] = 'GB';
 
$text['none'] = 'ezer ez';
 
$text['capacity'] = 'Kapazitatea';
 
$text['template'] = 'Txantiloia';
$text['language'] = 'Langoaia';
$text['submit'] = 'Bidali';
$text['created'] = 'Sortzailea: ';
$text['locale'] = 'en_US';
$text['gen_time'] = 'on %b %d, %Y at %I:%M %p';
 
$text['days'] = 'egun';
$text['hours'] = 'ordu';
$text['minutes'] = 'minutu';
$text['temperature'] = 'Temperature';
$text['voltage'] = 'Voltage';
$text['fans'] = 'Fans';
$text['s_value'] = 'Value';
$text['s_min'] = 'Min';
$text['s_max'] = 'Max';
$text['hysteresis'] = 'Hysteresis';
$text['s_limit'] = 'Limit';
$text['s_label'] = 'Label';
$text['degreeC'] = '&deg;C';
$text['degreeF'] = '&deg;F';
$text['voltage_mark'] = 'V';
$text['rpm_mark'] = 'RPM';
 
$text['app'] = 'Kernel + applications';
$text['buffers'] = 'Buffers';
$text['cached'] = 'Cached';
 
?>
/web/acc/phpsysinfo/includes/lang/ko.php
0,0 → 1,108
<?php
//
// phpSysInfo - A PHP System Information Script
// http://phpsysinfo.sourceforge.net/
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//
// $Id: ko.php,v 1.17 2007/02/18 19:11:31 bigmichi1 Exp $
// Translated by Sungkook KIM - ace@aceteam.org
 
$charset = 'euc-kr';
 
$text['title'] = '½Ã½ºÅÛ Á¤º¸';
 
$text['vitals'] = 'ÇöÀç ½Ã½ºÅÛ »óȲ';
$text['hostname'] = '½Ã½ºÅÛÀÇ È£½ºÆ®³×ÀÓ';
$text['ip'] = '½Ã½ºÅÛÀÇ IP ÁÖ¼Ò';
$text['kversion'] = 'Ä¿³Î ¹öÁ¯';
$text['dversion'] = 'Distro Name';
$text['uptime'] = '½ÇÇà ½Ã°£';
$text['users'] = 'ÇöÀç Á¢¼ÓÀÚ ¼ö';
$text['loadavg'] = 'Æò±Õ ·Îµå';
 
$text['hardware'] = 'Çϵå¿þ¾î Á¤º¸';
$text['numcpu'] = 'ÇÁ·Î¼¼¼­ °¹¼ö';
$text['cpumodel'] = 'ÇÁ·Î¼¼¼­ ¸ðµ¨';
$text['cpuspeed'] = 'Ĩ¼Â Ŭ·°';
$text['busspeed'] = 'BUS Speed';
$text['cache'] = 'Äɽ¬ »çÀÌÁî';
$text['bogomips'] = 'ÀÚüÅ×½ºÆ® Ŭ·°';
 
$text['pci'] = 'PCI ÀåÄ¡';
$text['ide'] = 'IDE ÀåÄ¡';
$text['scsi'] = 'SCSI ÀåÄ¡';
$text['usb'] = 'USB ÀåÄ¡';
 
$text['netusage'] = ' ³×Æ®¿öÅ© »ç¿ëÁ¤º¸';
$text['device'] = 'ÀåÄ¡';
$text['received'] = '¹ÞÀº ·®';
$text['sent'] = 'º¸³½ ·®';
$text['errors'] = '¿¡·¯ / ½ÇÆÐ';
 
$text['memusage'] = '¸Þ¸ð¸® »ç¿ë·®';
$text['phymem'] = '¹°¸®Àû ¸Þ¸ð¸®';
$text['swap'] = '½º¿Ò µð½ºÅ©';
 
$text['fs'] = '¸¶¿îÆ® ÇöȲ';
$text['mount'] = '¸¶¿îÆ®';
$text['partition'] = 'ÆÄƼ¼Ç';
 
$text['percent'] = ' ÆÛ¼¾Æ®';
$text['type'] = 'ŸÀÔ';
$text['free'] = '³²Àº·®';
$text['used'] = '»ç¿ë·®';
$text['size'] = 'ÃÑ ¿ë·®';
$text['totals'] = 'ÇÕ°è';
 
$text['kb'] = 'ų·Î¹ÙÀÌÆ®(KB)';
$text['mb'] = '¸Þ°¡¹ÙÀÌÆ®(MB)';
$text['gb'] = '±â°¡¹ÙÀÌÆ®(GB)';
 
$text['none'] = '¾øÀ½';
 
$text['capacity'] = '¿ë·®';
 
$text['template'] = 'ÅÛÇø´';
$text['language'] = '¾ð¾î';
$text['submit'] = 'Àû¿ë';
$text['created'] = '¸¸µçÀÌ';
$text['locale'] = 'en_US';
$text['gen_time'] = 'on %b %d, %Y at %I:%M %p';
 
$text['days'] = 'ÀÏ';
$text['hours'] = '½Ã';
$text['minutes'] = 'ºÐ';
$text['temperature'] = 'Temperature';
$text['voltage'] = 'Voltage';
$text['fans'] = 'Fans';
$text['s_value'] = 'Value';
$text['s_min'] = 'Min';
$text['s_max'] = 'Max';
$text['hysteresis'] = 'Hysteresis';
$text['s_limit'] = 'Limit';
$text['s_label'] = 'Label';
$text['degreeC'] = '&deg;C';
$text['degreeF'] = '&deg;F';
$text['voltage_mark'] = 'V';
$text['rpm_mark'] = 'RPM';
 
$text['app'] = 'Kernel + applications';
$text['buffers'] = 'Buffers';
$text['cached'] = 'Cached';
 
$text['connections'] = 'Established Network Connections';
?>
/web/acc/phpsysinfo/includes/lang/is.php
0,0 → 1,105
<?php
//
// phpSysInfo - A PHP System Information Script
// http://phpsysinfo.sourceforge.net/
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//
// $Id: is.php,v 1.18 2007/02/18 19:11:31 bigmichi1 Exp $
 
$text['title'] = 'Kerfisupplýsingar';
 
$text['vitals'] = 'Helstu upplýsingar';
$text['hostname'] = 'Vélarnafn';
$text['ip'] = 'IP-tala';
$text['kversion'] = 'Útgáfa kjarna';
$text['dversion'] = 'Nafn dreifingar';
$text['uptime'] = 'Uppitími';
$text['users'] = 'Notendur';
$text['loadavg'] = 'Meðalálag';
 
$text['hardware'] = 'Upplýsingar um vélbúnað';
$text['numcpu'] = 'Fjöldi örgjörva';
$text['cpumodel'] = 'Tegund';
$text['cpuspeed'] = 'Hraði';
$text['busspeed'] = 'BUS Speed';
$text['cache'] = 'Stærð flýtiminnis';
$text['bogomips'] = 'Bogomips';
 
$text['pci'] = 'PCI jaðartæki';
$text['ide'] = 'IDE jaðartæki';
$text['scsi'] = 'SCSI jaðartæki';
$text['usb'] = 'USB jaðartæki';
 
$text['netusage'] = 'Netnotkun';
$text['device'] = 'Jaðartæki';
$text['received'] = 'Móttekið';
$text['sent'] = 'Sent';
$text['errors'] = 'Villur/Hent';
 
$text['memusage'] = 'Minnisnotkun';
$text['phymem'] = 'Vinnsluminni';
$text['swap'] = 'Sýndarminni';
 
$text['fs'] = 'Tengd skráarkerfi';
$text['mount'] = 'Tengipunktur';
$text['partition'] = 'Disksneið';
 
$text['percent'] = 'Hlutfall af heildarstærð';
$text['type'] = 'Tegund';
$text['free'] = 'Laust';
$text['used'] = 'Notað';
$text['size'] = 'Stærð';
$text['totals'] = 'Samtals';
 
$text['kb'] = 'KB';
$text['mb'] = 'MB';
$text['gb'] = 'GB';
 
$text['none'] = 'ekkert';
 
$text['capacity'] = 'Heildarstærð';
 
$text['template'] = 'Sniðmát';
$text['language'] = 'Tungumál';
$text['submit'] = 'Senda';
$text['created'] = 'Búið til af';
$text['locale'] = 'is_IS';
$text['gen_time'] = 'þann %d.%m.%Y kl. %H:%M';
 
$text['days'] = 'dagar';
$text['hours'] = 'klukkustundir';
$text['minutes'] = 'mínútur';
$text['temperature'] = 'Hitastig';
$text['voltage'] = 'Volt';
$text['fans'] = 'Viftur';
$text['s_value'] = 'Gildi';
$text['s_min'] = 'Lægst';
$text['s_max'] = 'Hæst';
$text['hysteresis'] = 'Aðvörun lýkur';
$text['s_limit'] = 'Aðvörun byrjar';
$text['s_label'] = 'Nafn mælis';
$text['degreeC'] = '&deg;C';
$text['degreeF'] = '&deg;F';
$text['voltage_mark'] = 'V';
$text['rpm_mark'] = 'RPM';
 
$text['app'] = 'Kernel + applications';
$text['buffers'] = 'Buffers';
$text['cached'] = 'Cached';
 
$text['connections'] = 'Established Network Connections';
?>
/web/acc/phpsysinfo/includes/lang/it.php
0,0 → 1,105
<?php
//
// phpSysInfo - A PHP System Information Script
// http://phpsysinfo.sourceforge.net/
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//
// $Id: it.php,v 1.19 2007/02/18 19:11:31 bigmichi1 Exp $
 
$text['title'] = 'Informazioni sul Sistema';
 
$text['vitals'] = 'Informazioni Vitali';
$text['hostname'] = 'Nome Canonico';
$text['ip'] = 'Indirizzo IP';
$text['kversion'] = 'Versione del Kernel';
$text['dversion'] = 'Distro Name';
$text['uptime'] = 'Tempo di Esercizio';
$text['users'] = 'Utenti Collegati';
$text['loadavg'] = 'Carico Medio';
 
$text['hardware'] = 'Informazioni Hardware';
$text['numcpu'] = 'Processori';
$text['cpumodel'] = 'Modello';
$text['cpuspeed'] = 'MHz del Chip';
$text['busspeed'] = 'BUS Speed';
$text['cache'] = 'Dimensione Cache';
$text['bogomips'] = 'Bogomips del Sistema';
 
$text['pci'] = 'Unità PCI';
$text['ide'] = 'Unità IDE';
$text['scsi'] = 'Unità SCSI';
$text['usb'] = 'Unità USB';
 
$text['netusage'] = 'Utilizzo della Rete';
$text['device'] = 'Device';
$text['received'] = 'Ricevuti';
$text['sent'] = 'Inviati';
$text['errors'] = 'Err/Drop';
 
$text['memusage'] = 'Utilizzo della Memoria';
$text['phymem'] = 'Memoria Fisica';
$text['swap'] = 'Disco di Swap';
 
$text['fs'] = 'Filesystem Montati';
$text['mount'] = 'Punto di Mount';
$text['partition'] = 'Partizione';
 
$text['percent'] = 'Uso Percentuale';
$text['type'] = 'Tipo';
$text['free'] = 'Libero';
$text['used'] = 'Usato';
$text['size'] = 'Dimensione';
$text['totals'] = 'Totali';
 
$text['kb'] = 'KB';
$text['mb'] = 'MB';
$text['gb'] = 'GB';
 
$text['none'] = 'none';
 
$text['capacity'] = 'Capacità';
$text['template'] = 'Template';
$text['language'] = 'Lingua';
$text['submit'] = 'Invia';
$text['created'] = 'Creato da';
$text['locale'] = 'en_US';
$text['gen_time'] = 'on %b %d, %Y at %I:%M %p';
 
$text['days'] = 'giorni';
$text['hours'] = 'ore';
$text['minutes'] = 'minuti';
$text['temperature'] = 'Temperature';
$text['voltage'] = 'Voltage';
$text['fans'] = 'Fans';
$text['s_value'] = 'Value';
$text['s_min'] = 'Min';
$text['s_max'] = 'Max';
$text['hysteresis'] = 'Hysteresis';
$text['s_limit'] = 'Limit';
$text['s_label'] = 'Label';
$text['degreeC'] = '&deg;C';
$text['degreeF'] = '&deg;F';
$text['voltage_mark'] = 'V';
$text['rpm_mark'] = 'RPM';
 
$text['app'] = 'Kernel + applications';
$text['buffers'] = 'Buffers';
$text['cached'] = 'Cached';
 
$text['connections'] = 'Established Network Connections';
?>
/web/acc/phpsysinfo/includes/lang/sk.php
0,0 → 1,107
<?php
//
// phpSysInfo - A PHP System Information Script
// http://phpsysinfo.sourceforge.net/
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//
// $Id: sk.php,v 1.17 2007/02/18 19:11:31 bigmichi1 Exp $
 
$charset = 'iso-8859-2';
 
$text['title'] = 'Informácie o systéme';
 
$text['vitals'] = 'Základné informácie';
$text['hostname'] = 'Meno poèítaèa';
$text['ip'] = 'IP adresa';
$text['kversion'] = 'Verzia jadra';
$text['dversion'] = 'Distro Name';
$text['uptime'] = 'Uptime';
$text['users'] = 'Prihlásených u¾ívateåov';
$text['loadavg'] = 'Priemer loadu';
 
$text['hardware'] = 'Hardwarové informácie';
$text['numcpu'] = 'Procesory';
$text['cpumodel'] = 'Model';
$text['cpuspeed'] = 'Frekvencia';
$text['busspeed'] = 'BUS Speed';
$text['cache'] = 'Veåkos» cache';
$text['bogomips'] = 'Bogomipsov';
 
$text['pci'] = 'PCI zariadenia';
$text['ide'] = 'IDE zariadenia';
$text['scsi'] = 'SCSI zariadenia';
$text['usb'] = 'USB zariadenia';
 
$text['netusage'] = 'Pou¾ívanie siete';
$text['device'] = 'Zariadenia';
$text['received'] = 'Prijatých';
$text['sent'] = 'Odoslaných';
$text['errors'] = 'Chyby/Vypustených';
 
$text['memusage'] = 'Obsadenie pamäti';
$text['phymem'] = 'Fyzická pamä»';
$text['swap'] = 'Swap';
 
$text['fs'] = 'Namountované súborové systémy';
$text['mount'] = 'Adresár';
$text['partition'] = 'Partícia';
 
$text['percent'] = 'Obsadených';
$text['type'] = 'Typ';
$text['free'] = 'Voåných';
$text['used'] = 'Pou¾itých';
$text['size'] = 'Veåkos»';
$text['totals'] = 'Celkom';
 
$text['kb'] = 'KB';
$text['mb'] = 'MB';
$text['gb'] = 'GB';
 
$text['none'] = '¾iadne';
 
$text['capacity'] = 'Kapacita';
 
$text['template'] = '©ablóna';
$text['language'] = 'Jazyk';
$text['submit'] = 'Odosla»';
$text['created'] = 'Vytvorené pomocou';
$text['locale'] = 'en_US';
$text['gen_time'] = 'on %b %d, %Y at %I:%M %p';
 
$text['days'] = 'dní';
$text['hours'] = 'hodín';
$text['minutes'] = 'minút';
$text['temperature'] = 'Temperature';
$text['voltage'] = 'Voltage';
$text['fans'] = 'Fans';
$text['s_value'] = 'Value';
$text['s_min'] = 'Min';
$text['s_max'] = 'Max';
$text['hysteresis'] = 'Hysteresis';
$text['s_limit'] = 'Limit';
$text['s_label'] = 'Label';
$text['degreeC'] = '&deg;C';
$text['degreeF'] = '&deg;F';
$text['voltage_mark'] = 'V';
$text['rpm_mark'] = 'RPM';
 
$text['app'] = 'Kernel + applications';
$text['buffers'] = 'Buffers';
$text['cached'] = 'Cached';
 
$text['connections'] = 'Established Network Connections';
?>
/web/acc/phpsysinfo/includes/lang/index.html
--- includes/lang/da.php (nonexistent)
+++ includes/lang/da.php (revision 325)
@@ -0,0 +1,107 @@
+<?php
+//
+// phpSysInfo - A PHP System Information Script
+// http://phpsysinfo.sourceforge.net/
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+//
+// $Id: da.php,v 1.21 2007/02/18 19:11:31 bigmichi1 Exp $
+
+# Translated by Jonas Koch Bentzen (understroem.dk).
+
+$text['title'] = 'Systeminformation';
+
+$text['vitals'] = 'Systemenheder';
+$text['hostname'] = 'Konisk værtsnavn';
+$text['ip'] = 'IP-adresse, der lyttes på';
+$text['kversion'] = 'Kerne-version';
+$text['dversion'] = 'Distro Name';
+$text['uptime'] = 'Oppetid';
+$text['users'] = 'Antal brugere logget ind lige nu';
+$text['loadavg'] = 'Ressourceforbrug - gennemsnit';
+
+$text['hardware'] = 'Hardwareinformation';
+$text['numcpu'] = 'Processorer';
+$text['cpumodel'] = 'Model';
+$text['cpuspeed'] = 'CPU Speed';
+$text['busspeed'] = 'BUS Speed';
+$text['cache'] = 'Cachestørrelse';
+$text['bogomips'] = 'Bogomips';
+
+$text['pci'] = 'PCI-enheder';
+$text['ide'] = 'IDE-enheder';
+$text['scsi'] = 'SCSI-enheder';
+$text['usb'] = 'USB-enheder';
+
+$text['netusage'] = 'Netværkstrafik';
+$text['device'] = 'Enhed';
+$text['received'] = 'Modtaget';
+$text['sent'] = 'Afsendt';
+$text['errors'] = 'Mislykket/tabt';
+
+$text['memusage'] = 'Hukommelsesforbrug';
+$text['phymem'] = 'Fysisk hukommelse';
+$text['swap'] = 'Swap';
+
+$text['fs'] = 'Monterede filsystemer';
+$text['mount'] = 'Monteret på';
+$text['partition'] = 'Partition';
+
+$text['percent'] = 'Procent af kapaciteten';
+$text['type'] = 'Type';
+$text['free'] = 'Ledig';
+$text['used'] = 'Brugt';
+$text['size'] = 'Størrelse';
+$text['totals'] = 'I alt';
+
+$text['kb'] = 'KB';
+$text['mb'] = 'MB';
+$text['gb'] = 'GB';
+
+$text['none'] = 'ingen';
+
+$text['capacity'] = 'Kapacitet';
+
+$text['template'] = 'Skabelon';
+$text['language'] = 'Sprog';
+$text['submit'] = 'Okay';
+$text['created'] = 'Lavet af';
+$text['locale'] = 'en_US';
+$text['gen_time'] = 'on %b %d, %Y at %I:%M %p';
+
+$text['days'] = 'dage';
+$text['hours'] = 'timer';
+$text['minutes'] = 'minutter';
+
+$text['temperature'] = 'Temperature';
+$text['voltage'] = 'Voltage';
+$text['fans'] = 'Fans';
+$text['s_value'] = 'Value';
+$text['s_min'] = 'Min';
+$text['s_max'] = 'Max';
+$text['hysteresis'] = 'Hysteresis';
+$text['s_limit'] = 'Limit';
+$text['s_label'] = 'Label';
+$text['degreeC'] = '&deg;C';
+$text['degreeF'] = '&deg;F';
+$text['voltage_mark'] = 'V';
+$text['rpm_mark'] = 'RPM';
+
+$text['app'] = 'Kernel + applications';
+$text['buffers'] = 'Buffers';
+$text['cached'] = 'Cached';
+
+$text['connections'] = 'Established Network Connections';
+?>
/web/acc/phpsysinfo/includes/lang/sr.php
0,0 → 1,107
<?php
//
// phpSysInfo - A PHP System Information Script
// http://phpsysinfo.sourceforge.net/
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//
// $Id: sr.php,v 1.8 2007/02/18 19:11:31 bigmichi1 Exp $
 
$charset = 'utf-8';
 
$text['title'] = 'Спецификација Система ';
 
$text['vitals'] = 'Систем';
$text['hostname'] = 'Име домаћина';
$text['ip'] = 'ИП адреса';
$text['kversion'] = 'Верзија кернела';
$text['dversion'] = 'Дицтрибуција';
$text['uptime'] = 'Радно време';
$text['users'] = 'Број корисника';
$text['loadavg'] = 'Просечно оптерећење';
 
$text['hardware'] = 'Хардверске компоненте';
$text['numcpu'] = 'Процесор';
$text['cpumodel'] = 'Moдел';
$text['cpuspeed'] = 'CPU Speed';
$text['busspeed'] = 'BUS Speed';
$text['cache'] = 'Величина предмеморије';
$text['bogomips'] = 'Богомипс';
$text['usb'] = 'УСБ уређаји';
$text['pci'] = 'ПЦИ уређаји';
$text['ide'] = 'ИДЕ уређаји';
$text['scsi'] = 'СЦСИ уређаји';
 
$text['netusage'] = 'Мрежна Употреба';
$text['device'] = 'Уређај';
$text['received'] = 'Примљено';
$text['sent'] = 'Послато';
$text['errors'] = 'Грешке';
 
$text['connections'] = 'Успостављене конекције';
 
$text['memusage'] = 'Употреба меморије';
$text['phymem'] = 'Тврда memorija';
$text['swap'] = 'СВАП меморија';
 
$text['fs'] = 'Монтирани фајл системи';
$text['mount'] = 'Монтирани';
$text['partition'] = 'Партиција';
 
$text['percent'] = 'Проценти';
$text['type'] = 'Врста';
$text['free'] = 'Слободно';
$text['used'] = 'Искоришћено';
$text['size'] = 'Величина';
$text['totals'] = 'Укупно';
 
$text['kb'] = 'KB';
$text['mb'] = 'MB';
$text['gb'] = 'GB';
 
$text['none'] = 'ezer ez';
 
$text['capacity'] = 'Капацитет';
 
$text['template'] = 'Tемплат';
$text['language'] = 'Језик';
$text['submit'] = 'Пошаљи';
$text['created'] = 'Креирано: ';
$text['locale'] = 'ср';
$text['gen_time'] = 'on %b %d, %Y at %I:%M %p';
 
$text['days'] = 'Дани';
$text['hours'] = 'Сати';
$text['minutes'] = 'Минути';
$text['temperature'] = 'Температура';
$text['voltage'] = 'Напајање';
$text['fans'] = 'Вентилатори';
$text['s_value'] = 'Снага';
$text['s_min'] = 'Мин';
$text['s_max'] = 'Mах';
$text['hysteresis'] = 'Аларм';
$text['s_limit'] = 'Лимит';
$text['s_label'] = 'Име';
$text['degreeC'] = '&deg;C';
$text['degreeF'] = '&deg;F';
$text['voltage_mark'] = 'V';
$text['rpm_mark'] = 'RPM';
 
$text['app'] = 'Kernel + applications';
$text['buffers'] = 'Buffers';
$text['cached'] = 'Cached';
 
?>
/web/acc/phpsysinfo/includes/lang/big5.php
0,0 → 1,107
<?php
//
// phpSysInfo - A PHP System Information Script
// http://phpsysinfo.sourceforge.net/
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//
// $Id: big5.php,v 1.19 2007/02/18 19:11:31 bigmichi1 Exp $
//
$charset = 'big5';
$text['title'] = '¨t²Î¸ê°T';
 
$text['vitals'] = '¨t²Î¸ê·½';
$text['hostname'] = '¥D¾÷¦WºÙ';
$text['ip'] = '¥D¾÷¹ï¥~ IP';
$text['kversion'] = '®Ö¤ßª©¥»';
$text['dversion'] = 'Distro Name';
$text['uptime'] = '¤w¶}¾÷®É¶¡';
$text['users'] = 'µn¤J¤H¼Æ';
$text['loadavg'] = '¨t²Î­t¸ü';
 
$text['hardware'] = 'µwÅé¸ê·½';
$text['numcpu'] = '¹Bºâ¤¸';
$text['cpumodel'] = 'CPU«¬¸¹';
$text['cpuspeed'] = '¤u§@ÀW²v';
$text['busspeed'] = 'BUS Speed';
$text['cache'] = '§Ö¨ú¤j¤p';
$text['bogomips'] = 'ÅÞ¿è¹Bºâ¤¸';
 
$text['pci'] = 'PCI ¤¶­±';
$text['ide'] = 'IDE ¤¶­±';
$text['scsi'] = 'SCSI ¤¶­±';
$text['usb'] = 'USB ¤¶­±';
 
$text['netusage'] = 'ºô¸ô«Ê¥]';
$text['device'] = '¤¶­±';
$text['received'] = '±µ¦¬';
$text['sent'] = '¶Ç°e';
$text['errors'] = '¿ù»~/¿ò¥¢';
 
$text['connections'] = 'Established Network Connections';
 
$text['memusage'] = '°O¾ÐÅé¸ê·½';
$text['phymem'] = '¹êÅé°O¾ÐÅé';
$text['swap'] = 'µêÀÀ°O¾ÐÅé(ºÏºÐ¸m´«)';
 
$text['fs'] = '¤w±¾¤JªºÀɮרt²Î';
$text['mount'] = '±¾¤J';
$text['partition'] = 'ºÏ°Ï';
 
$text['percent'] = '¨Ï¥Î¦Ê¤À¤ñ';
$text['type'] = '®æ¦¡';
$text['free'] = 'ªÅ¾l';
$text['used'] = '¤w¥Î';
$text['size'] = '¤j¤p';
$text['totals'] = '¦X­p';
 
$text['kb'] = 'KB';
$text['mb'] = 'MB';
$text['gb'] = 'GB';
 
$text['none'] = 'µL';
 
$text['capacity'] = '®e¶q';
 
$text['template'] = '¼Ë¦¡';
$text['language'] = '»y¨¥';
$text['submit'] = '½T©w';
$text['created'] = '²£¥Í¥Ñ';
$text['locale'] = 'zh_TW.Big5';
$text['gen_time'] = 'on %b %d, %Y at %I:%M %p';
 
$text['days'] = '¤Ñ';
$text['hours'] = '¤p®É';
$text['minutes'] = '¤ÀÄÁ';
 
$text['temperature'] = 'Temperature';
$text['voltage'] = 'Voltage';
$text['fans'] = 'Fans';
$text['s_value'] = 'Value';
$text['s_min'] = 'Min';
$text['s_max'] = 'Max';
$text['hysteresis'] = 'Hysteresis';
$text['s_limit'] = 'Limit';
$text['s_label'] = 'Label';
$text['degreeC'] = '&deg;C';
$text['degreeF'] = '&deg;F';
$text['voltage_mark'] = 'V';
$text['rpm_mark'] = 'RPM';
 
$text['app'] = 'Kernel + applications';
$text['buffers'] = 'Buffers';
$text['cached'] = 'Cached';
 
?>
/web/acc/phpsysinfo/includes/lang/de.php
0,0 → 1,105
<?php
//
// phpSysInfo - A PHP System Information Script
// http://phpsysinfo.sourceforge.net/
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//
// $Id: de.php,v 1.22 2007/02/18 19:11:31 bigmichi1 Exp $
 
$text['title'] = 'System Information';
 
$text['vitals'] = 'System &Uuml;bersicht';
$text['hostname'] = 'Zugewiesener Hostname';
$text['ip'] = '&Uuml;berwachte IP';
$text['kversion'] = 'Kernel Version';
$text['dversion'] = 'Distro Name';
$text['uptime'] = 'Betriebszeit';
$text['users'] = 'Eingeloggte Benutzer';
$text['loadavg'] = 'Auslastung';
 
$text['hardware'] = 'Hardware &Uuml;bersicht';
$text['numcpu'] = 'Prozessoren';
$text['cpumodel'] = 'Modell';
$text['cpuspeed'] = 'Taktfrequenz';
$text['busspeed'] = 'BUS Speed';
$text['cache'] = 'Cachegr&ouml;&szlig;e';
$text['bogomips'] = 'System Bogomips';
 
$text['pci'] = 'PCI Ger&auml;te';
$text['ide'] = 'IDE Ger&auml;te';
$text['scsi'] = 'SCSI Ger&auml;te';
$text['usb'] = 'USB Ger&auml;te';
 
$text['netusage'] = 'Netzwerk-Auslastung';
$text['device'] = 'Schnittstelle';
$text['received'] = 'Empfangen';
$text['sent'] = 'Gesendet';
$text['errors'] = 'Fehler/Verworfen';
 
$text['memusage'] = 'Speicher-Auslastung';
$text['phymem'] = 'Physikalischer Speicher';
$text['swap'] = 'Auslagerungsdatei';
 
$text['fs'] = 'Angemeldete Dateisysteme';
$text['mount'] = 'Mount';
$text['partition'] = 'Partition';
 
$text['percent'] = 'Prozentuale Auslastung';
$text['type'] = 'Typ';
$text['free'] = 'Frei';
$text['used'] = 'Benutzt';
$text['size'] = 'Gr&ouml;&szlig;e';
$text['totals'] = 'Insgesamt';
 
$text['kb'] = 'KB';
$text['mb'] = 'MB';
$text['gb'] = 'GB';
 
$text['none'] = 'keine';
 
$text['capacity'] = 'Kapazit&auml;t';
$text['template'] = 'Vorlage';
$text['language'] = 'Sprache';
$text['submit'] = '&Auml;ndern';
$text['created'] = 'Erstellt von';
$text['locale'] = 'de_DE';
$text['gen_time'] = 'am %d.%b %Y um %H:%M';
 
$text['days'] = 'Tage';
$text['hours'] = 'Stunden';
$text['minutes'] = 'Minuten';
$text['temperature'] = 'Temperatur';
$text['voltage'] = 'Spannungen';
$text['fans'] = 'L&uuml;fter';
$text['s_value'] = 'Wert';
$text['s_min'] = 'Min';
$text['s_max'] = 'Max';
$text['hysteresis'] = 'Hysteresis';
$text['s_limit'] = 'Grenzwert';
$text['s_label'] = 'Bezeichnung';
$text['degreeC'] = '&deg;C';
$text['degreeF'] = '&deg;F';
$text['voltage_mark'] = 'V';
$text['rpm_mark'] = 'Umin';
 
$text['app'] = 'Kernel + Anwendungen';
$text['buffers'] = 'Puffer';
$text['cached'] = 'Cache';
 
$text['connections'] = 'Aktive Netzwerkverbindungen';
?>
/web/acc/phpsysinfo/includes/lang/sv.php
0,0 → 1,108
<?php
//
// phpSysInfo - A PHP System Information Script
// http://phpsysinfo.sourceforge.net/
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//
// $Id: sv.php,v 1.17 2007/02/18 19:11:31 bigmichi1 Exp $
//
// translation by shockzor
// updated/edited by jetthe
 
$text['title'] = 'Systeminformation';
 
$text['vitals'] = 'Allmän information';
$text['hostname'] = 'Värdnamn';
$text['ip'] = 'IP-adress';
$text['kversion'] = 'Kernel-version';
$text['dversion'] = 'Distro Name';
$text['uptime'] = 'Drifttid';
$text['users'] = 'Aktuella användare';
$text['loadavg'] = 'Medelbelastning';
 
$text['hardware'] = 'Hårdvaruinformation';
$text['numcpu'] = 'Processorer';
$text['cpumodel'] = 'Modell';
$text['cpuspeed'] = 'Klockfrekvens';
$text['busspeed'] = 'BUS Speed';
$text['cache'] = 'Cachestorlek';
$text['bogomips'] = 'Bogomips';
 
$text['pci'] = 'PCI-enheter';
$text['ide'] = 'IDE-enheter';
$text['scsi'] = 'SCSI-enheter';
$text['usb'] = 'USB-enheter';
 
$text['netusage'] = 'Nätverksanvändning';
$text['device'] = 'Enheter';
$text['received'] = 'Mottaget';
$text['sent'] = 'Skickat';
$text['errors'] = 'Fel/Förlorat';
 
$text['memusage'] = 'Minnesanvändning';
$text['phymem'] = 'Fysiskt minne';
$text['swap'] = 'Växlingsminne';
 
$text['fs'] = 'Monterade filsystem';
$text['mount'] = 'Monteringspunkt';
$text['partition'] = 'Partition';
 
$text['percent'] = 'Kapacitetsutnyttjande';
$text['type'] = 'Typ';
$text['free'] = 'Ledigt';
$text['used'] = 'Använt';
$text['size'] = 'Storlek';
$text['totals'] = 'Totalt';
 
$text['kb'] = 'kB';
$text['mb'] = 'MB';
$text['gb'] = 'GB';
 
$text['none'] = 'inga';
 
$text['capacity'] = 'Kapacitet';
$text['template'] = 'Mall';
$text['language'] = 'Språk';
$text['submit'] = 'Skicka';
 
$text['days'] = 'dagar';
$text['hours'] = 'timmar';
$text['minutes'] = 'minuter';
$text['created'] = 'Skapat av';
$text['locale'] = 'en_US';
$text['gen_time'] = 'on %b %d, %Y at %I:%M %p';
$text['temperature'] = 'Temperature';
$text['voltage'] = 'Voltage';
$text['fans'] = 'Fans';
$text['s_value'] = 'Value';
$text['s_min'] = 'Min';
$text['s_max'] = 'Max';
$text['hysteresis'] = 'Hysteresis';
$text['s_limit'] = 'Limit';
$text['s_label'] = 'Label';
$text['degreeC'] = '&deg;C';
$text['degreeF'] = '&deg;F';
$text['voltage_mark'] = 'V';
$text['rpm_mark'] = 'RPM';
 
$text['app'] = 'Kernel + applications';
$text['buffers'] = 'Buffers';
$text['cached'] = 'Cached';
 
$text['connections'] = 'Established Network Connections';
?>
/web/acc/phpsysinfo/includes/lang/bg.php
0,0 → 1,108
<?php
//
// phpSysInfo - A PHP System Information Script
// http://phpsysinfo.sourceforge.net/
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//
// $Id: bg.php,v 1.16 2007/02/18 19:11:31 bigmichi1 Exp $
 
$charset = 'cp-1251';
 
$text['title'] = 'Ñèñòåìíà Èíôîðìàöèÿ';
 
$text['vitals'] = 'Æèçíåíà Èíôîðàìöèÿ';
$text['hostname'] = 'Èìå íà õîñòà';
$text['ip'] = 'IP Àäðåñ';
$text['kversion'] = 'Âåðñèÿ íà ÿäðîòî';
$text['dversion'] = 'Distro Name';
$text['uptime'] = 'Ðàáîòè îò';
$text['users'] = 'Âêëþ÷åíè ïîòðåáèòåëè';
$text['loadavg'] = 'Ñðåäíî íàòîâàðâàíå';
 
$text['hardware'] = 'Èíôîðìàöèÿ çà õàðäóåðà';
$text['numcpu'] = 'Áðîé ïðîöåñîðè';
$text['cpumodel'] = 'Ìîäåë íà ïðîöåñîð';
$text['cpuspeed'] = '×åñòîòà';
$text['busspeed'] = 'BUS Speed';
$text['cache'] = 'Ðàçìåð íà êåøa ';
$text['bogomips'] = 'Bogomips èíäåêñ';
 
$text['pci'] = 'PCI óñòðîéñòâà';
$text['ide'] = 'IDE óñòðîéñòâà';
$text['scsi'] = 'SCSI óñòðîéñòâà';
$text['usb'] = 'USB óñòðîéñòâà';
 
$text['netusage'] = 'Ìðåæîâà èíôîðìàöèÿ';
$text['device'] = 'Èíòåðôåéñè';
$text['received'] = 'Ïîëó÷åíè';
$text['sent'] = 'Èçïðàòåíè';
$text['errors'] = 'Ãðåøêè/Èçïóñíàòè';
 
$text['connections'] = 'Óñúùåñòâåíè ìðåæîâè âðúçêè';
 
$text['memusage'] = 'Îïåðàòèâíà ïàìåò';
$text['phymem'] = 'Ôèçè÷åñêà ïàìåò';
$text['swap'] = 'Swap ïàìåò';
 
$text['fs'] = 'Ôàéëîâè ñèñòåìè';
$text['mount'] = 'Ìÿñòî';
$text['partition'] = 'Äÿë';
 
$text['percent'] = 'Ïðîöåíòíî èçïîëçâàíå';
$text['type'] = 'Òèï';
$text['free'] = 'Ñâîáîäíè';
$text['used'] = 'Èçïîëçâàíè';
$text['size'] = 'Îáù îáåì';
$text['totals'] = 'Âñè÷êî';
 
$text['kb'] = 'KB';
$text['mb'] = 'MB';
$text['gb'] = 'GB';
 
$text['none'] = 'íÿìà';
 
$text['capacity'] = 'Êàïàöèòåò';
 
$text['template'] = 'Òåìà';
$text['language'] = 'Åçèê';
$text['submit'] = 'Îïðåñíè';
$text['created'] = 'Ñúçäàäåíî ñ';
$text['locale'] = 'en_US';
$text['gen_time'] = 'on %b %d, %Y at %I:%M %p';
 
$text['days'] = 'äíè';
$text['hours'] = '÷àñà';
$text['minutes'] = 'ìèíóòè';
 
$text['temperature'] = 'Temperature';
$text['voltage'] = 'Voltage';
$text['fans'] = 'Fans';
$text['s_value'] = 'Value';
$text['s_min'] = 'Min';
$text['s_max'] = 'Max';
$text['hysteresis'] = 'Hysteresis';
$text['s_limit'] = 'Limit';
$text['s_label'] = 'Label';
$text['degreeC'] = '&deg;C';
$text['degreeF'] = '&deg;F';
$text['voltage_mark'] = 'V';
$text['rpm_mark'] = 'RPM';
 
$text['app'] = 'Kernel + applications';
$text['buffers'] = 'Buffers';
$text['cached'] = 'Cached';
 
?>
/web/acc/phpsysinfo/includes/os/class.WINNT.inc.php
0,0 → 1,344
<?php
// phpSysInfo - A PHP System Information Script
// http://phpsysinfo.sourceforge.net/
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
// WINNT implementation written by Carl C. Longnecker, longneck@iname.com
// $Id: class.WINNT.inc.php,v 1.25 2007/03/07 20:21:27 bigmichi1 Exp $
 
class sysinfo {
// $wmi holds the COM object that we pull all the WMI data from
var $wmi;
 
// $wmidevices holds all devices, which are in the system
var $wmidevices;
 
// this constructor initialis the $wmi object
function sysinfo ()
{
// don't set this params for local connection, it will not work
$strHostname = '';
$strUser = '';
$strPassword = '';
 
// initialize the wmi object
$objLocator = new COM("WbemScripting.SWbemLocator");
if($strHostname == "") {
$this->wmi = $objLocator->ConnectServer();
} else{
$this->wmi = $objLocator->ConnectServer($strHostname, "rootcimv2", "$strHostname\$strUser", $strPassword);
}
}
 
// private function for getting a list of values in the specified context, optionally filter this list, based on the list from second parameter
function _GetWMI($strClass, $strValue = array() ) {
$objWEBM = $this->wmi->Get($strClass);
 
if( PHP_VERSION < 5 ) {
$objProp = $objWEBM->Properties_;
$arrProp = $objProp->Next($objProp->Count);
$objWEBMCol = $objWEBM->Instances_();
$arrWEBMCol = $objWEBMCol->Next($objWEBMCol->Count);
} else {
$arrProp = $objWEBM->Properties_;
$arrWEBMCol = $objWEBM->Instances_();
}
 
foreach($arrWEBMCol as $objItem)
{
@reset($arrProp);
$arrInstance = array();
foreach($arrProp as $propItem)
{
eval("\$value = \$objItem->" .$propItem->Name .";");
if( empty( $strValue ) ) {
$arrInstance[$propItem->Name] = trim($value);
} else {
if( in_array( $propItem->Name, $strValue ) ) {
$arrInstance[$propItem->Name] = trim($value);
}
}
}
$arrData[] = $arrInstance;
}
return $arrData;
}
 
// private function for getting different device types from the system
function _devicelist ( $strType ) {
if( empty( $this->wmidevices ) ) {
$this->wmidevices = $this->_GetWMI( "Win32_PnPEntity", array( "Name", "PNPDeviceID" ) );
}
 
$list = array();
foreach ( $this->wmidevices as $device ) {
if ( substr( $device["PNPDeviceID"], 0, strpos( $device["PNPDeviceID"], "\\" ) + 1 ) == ( $strType . "\\" ) ) {
$list[] = $device["Name"];
}
}
 
return $list;
}
// get our apache SERVER_NAME or vhost
function vhostname () {
if (! ($result = getenv('SERVER_NAME'))) {
$result = 'N.A.';
}
return $result;
}
 
// get the IP address of our vhost name
function vip_addr () {
return gethostbyname($this->vhostname());
}
 
// get our canonical hostname
function chostname ()
{
$buffer = $this->_GetWMI( "Win32_ComputerSystem", array( "Name" ) );
$result = $buffer[0]["Name"];
return gethostbyaddr(gethostbyname($result));
}
 
// get the IP address of our canonical hostname
function ip_addr ()
{
$buffer = $this->_GetWMI( "Win32_ComputerSystem", array( "Name" ) );
$result = $buffer[0]["Name"];
return gethostbyname($result);
}
 
function kernel ()
{
$buffer = $this->_GetWMI( "Win32_OperatingSystem", array( "Version", "ServicePackMajorVersion" ) );
$result = $buffer[0]["Version"];
if( $buffer[0]["ServicePackMajorVersion"] > 0 ) {
$result .= " SP" . $buffer[0]["ServicePackMajorVersion"];
}
return $result;
}
 
// get the time the system is running
function uptime ()
{
$result = 0;
$buffer = $this->_GetWMI( "Win32_OperatingSystem", array( "LastBootUpTime", "LocalDateTime" ) );
 
$byear = intval(substr($buffer[0]["LastBootUpTime"], 0, 4));
$bmonth = intval(substr($buffer[0]["LastBootUpTime"], 4, 2));
$bday = intval(substr($buffer[0]["LastBootUpTime"], 6, 2));
$bhour = intval(substr($buffer[0]["LastBootUpTime"], 8, 2));
$bminute = intval(substr($buffer[0]["LastBootUpTime"], 10, 2));
$bseconds = intval(substr($buffer[0]["LastBootUpTime"], 12, 2));
 
$lyear = intval(substr($buffer[0]["LocalDateTime"], 0, 4));
$lmonth = intval(substr($buffer[0]["LocalDateTime"], 4, 2));
$lday = intval(substr($buffer[0]["LocalDateTime"], 6, 2));
$lhour = intval(substr($buffer[0]["LocalDateTime"], 8, 2));
$lminute = intval(substr($buffer[0]["LocalDateTime"], 10, 2));
$lseconds = intval(substr($buffer[0]["LocalDateTime"], 12, 2));
 
$boottime = mktime($bhour, $bminute, $bseconds, $bmonth, $bday, $byear);
$localtime = mktime($lhour, $lminute, $lseconds, $lmonth, $lday, $lyear);
 
$result = $localtime - $boottime;
 
return $result;
}
 
// count the users, which are logged in
function users ()
{
if( stristr( $this->kernel(), "2000 P" ) ) return "N.A.";
$buffer = $this->_GetWMI( "Win32_PerfRawData_TermService_TerminalServices", array( "TotalSessions" ) );
return $buffer[0]["TotalSessions"];
}
 
// get the load of the processors
function loadavg ($bar = false)
{
$buffer = $this->_GetWMI( "Win32_Processor", array( "LoadPercentage" ) );
$cpuload = array();
for( $i = 0; $i < count( $buffer ); $i++ ) {
$cpuload['avg'][] = $buffer[$i]["LoadPercentage"];
}
if ($bar) {
$cpuload['cpupercent'] = array_sum( $cpuload['avg'] ) / count( $buffer );
}
return $cpuload;
}
 
// get some informations about the cpu's
function cpu_info ()
{
$buffer = $this->_GetWMI( "Win32_Processor", array( "Name", "L2CacheSize", "CurrentClockSpeed", "ExtClock" ) );
$results["cpus"] = 0;
foreach ($buffer as $cpu) {
$results["cpus"]++;
$results["model"] = $cpu["Name"];
$results["cache"] = $cpu["L2CacheSize"];
$results["cpuspeed"] = $cpu["CurrentClockSpeed"];
$results["busspeed"] = $cpu["ExtClock"];
}
return $results;
}
 
// get the pci devices from the system
function pci ()
{
$pci = $this->_devicelist( "PCI" );
return $pci;
}
 
// get the ide devices from the system
function ide ()
{
$buffer = $this->_devicelist( "IDE" );
$ide = array();
foreach ( $buffer as $device ) {
$ide[]['model'] = $device;
}
return $ide;
}
 
// get the scsi devices from the system
function scsi ()
{
$scsi = $this->_devicelist( "SCSI" );
return $scsi;
}
 
// get the usb devices from the system
function usb ()
{
$usb = $this->_devicelist( "USB" );
return $usb;
}
 
// get the sbus devices from the system - currently not called
function sbus ()
{
$sbus = $this->_devicelist( "SBUS" );
return $sbus;
}
 
// get the netowrk devices and rx/tx bytes
function network () {
$results = array();
$buffer = $this->_GetWMI( "Win32_PerfRawData_Tcpip_NetworkInterface" );
foreach( $buffer as $device ) {
$dev_name = $device["Name"];
// http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wmisdk/wmi/win32_perfrawdata_tcpip_networkinterface.asp
// there is a possible bug in the wmi interfaceabout uint32 and uint64: http://www.ureader.com/message/1244948.aspx, so that
// magative numbers would occour, try to calculate the nagative value from total - positive number
if( $device["BytesSentPersec"] < 0) {
$results[$dev_name]['tx_bytes'] = $device["BytesTotalPersec"] - $device["BytesReceivedPersec"];
} else {
$results[$dev_name]['tx_bytes'] = $device["BytesSentPersec"];
}
if( $device["BytesReceivedPersec"] < 0 ) {
$results[$dev_name]['rx_bytes'] = $device["BytesTotalPersec"] - $device["BytesSentPersec"];
} else {
$results[$dev_name]['rx_bytes'] = $device["BytesReceivedPersec"];
}
$results[$dev_name]['rx_packets'] = $device["PacketsReceivedPersec"];
$results[$dev_name]['tx_packets'] = $device["PacketsSentPersec"];
$results[$dev_name]['rx_errs'] = $device["PacketsReceivedErrors"];
$results[$dev_name]['rx_drop'] = $device["PacketsReceivedDiscarded"];
$results[$dev_name]['errs'] = $device["PacketsReceivedErrors"];
$results[$dev_name]['drop'] = $device["PacketsReceivedDiscarded"];
}
return $results;
}
 
function memory ()
{
$buffer = $this->_GetWMI( "Win32_LogicalMemoryConfiguration", array( "TotalPhysicalMemory" ) );
$results['ram']['total'] = $buffer[0]["TotalPhysicalMemory"];
 
$buffer = $this->_GetWMI( "Win32_PerfRawData_PerfOS_Memory", array( "AvailableKBytes" ) );
$results['ram']['free'] = $buffer[0]["AvailableKBytes"];
 
$results['ram']['used'] = $results['ram']['total'] - $results['ram']['free'];
$results['ram']['percent'] = ceil( ( $results['ram']['used'] * 100 ) / $results['ram']['total'] );
$results['swap']['total'] = 0;
$results['swap']['used'] = 0;
$results['swap']['free'] = 0;
 
$buffer = $this->_GetWMI( "Win32_PageFileUsage" ); // no need to filter, using nearly everything from output
$k = 0;
foreach ($buffer as $swapdevice) {
$results['devswap'][$k]['dev'] = $swapdevice["Name"];
$results['devswap'][$k]['total'] = $swapdevice["AllocatedBaseSize"] * 1024;
$results['devswap'][$k]['used'] = $swapdevice["CurrentUsage"] * 1024;
$results['devswap'][$k]['free'] = ( $swapdevice["AllocatedBaseSize"] - $swapdevice["CurrentUsage"] ) * 1024;
$results['devswap'][$k]['percent'] = ceil( $swapdevice["CurrentUsage"] / $swapdevice["AllocatedBaseSize"] );
 
$results['swap']['total'] += $results['devswap'][$k]['total'];
$results['swap']['used'] += $results['devswap'][$k]['used'];
$results['swap']['free'] += $results['devswap'][$k]['free'];
$k += 1;
}
$results['swap']['percent'] = ceil( $results['swap']['used'] / $results['swap']['total'] * 100 );
return $results;
}
 
// get the filesystem informations
function filesystems ()
{
$typearray = array("Unknown", "No Root Directory", "Removeable Disk",
"Local Disk", "Network Drive", "Compact Disc", "RAM Disk");
$floppyarray = array("Unknown", "5 1/4 in.", "3 1/2 in.", "3 1/2 in.",
"3 1/2 in.", "3 1/2 in.", "5 1/4 in.", "5 1/4 in.", "5 1/4 in.",
"5 1/4 in.", "5 1/4 in.", "Other", "HD", "3 1/2 in.", "3 1/2 in.",
"5 1/4 in.", "5 1/4 in.", "3 1/2 in.", "3 1/2 in.", "5 1/4 in.",
"3 1/2 in.", "3 1/2 in.", "8 in.");
 
$buffer = $this->_GetWMI( "Win32_LogicalDisk" , array( "Name", "Size", "FreeSpace", "FileSystem", "DriveType", "MediaType" ) );
 
$k = 0;
foreach ( $buffer as $filesystem ) {
if ( hide_mount( $filesystem["Name"] ) ) {
continue;
}
$results[$k]['mount'] = $filesystem["Name"];
$results[$k]['size'] = $filesystem["Size"] / 1024;
$results[$k]['used'] = ( $filesystem["Size"] - $filesystem["FreeSpace"] ) / 1024;
$results[$k]['free'] = $filesystem["FreeSpace"] / 1024;
@$results[$k]['percent'] = ceil( $results[$k]['used'] / $results[$k]['size'] * 100 ); // silence this line, nobody is having a floppy in the drive everytime
$results[$k]['fstype'] = $filesystem["FileSystem"];
$results[$k]['disk'] = $typearray[$filesystem["DriveType"]];
if ( $filesystem["MediaType"] != "" && $filesystem["DriveType"] == 2 ) $results[$k]['disk'] .= " (" . $floppyarray[$filesystem["MediaType"]] . ")";
$k += 1;
}
return $results;
}
 
function distro ()
{
$buffer = $this->_GetWMI( "Win32_OperatingSystem", array( "Caption" ) );
return $buffer[0]["Caption"];
}
 
function distroicon ()
{
return 'xp.gif';
}
}
 
?>
/web/acc/phpsysinfo/includes/os/class.NetBSD.inc.php
0,0 → 1,111
<?php
 
// phpSysInfo - A PHP System Information Script
// http://phpsysinfo.sourceforge.net/
 
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
 
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
 
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
// $Id: class.NetBSD.inc.php,v 1.18 2006/04/18 16:57:32 bigmichi1 Exp $
if (!defined('IN_PHPSYSINFO')) {
die("No Hacking");
}
 
require_once(APP_ROOT . '/includes/os/class.BSD.common.inc.php');
 
class sysinfo extends bsd_common {
var $cpu_regexp;
var $scsi_regexp;
// Our contstructor
// this function is run on the initialization of this class
function sysinfo () {
$this->bsd_common();
$this->cpu_regexp = "^cpu(.*)\, (.*) MHz";
$this->scsi_regexp1 = "^(.*) at scsibus.*: <(.*)> .*";
$this->scsi_regexp2 = "^(da[0-9]): (.*)MB ";
$this->cpu_regexp2 = "/user = (.*), nice = (.*), sys = (.*), intr = (.*), idle = (.*)/";
$this->pci_regexp1 = '/(.*) at pci[0-9] dev [0-9]* function [0-9]*: (.*)$/';
$this->pci_regexp2 = '/"(.*)" (.*).* at [.0-9]+ irq/';
}
 
function get_sys_ticks () {
$a = $this->grab_key('kern.boottime');
$sys_ticks = time() - $a;
return $sys_ticks;
}
 
function network () {
$netstat_b = execute_program('netstat', '-nbdi | cut -c1-25,44- | grep "^[a-z]*[0-9][ \t].*Link"');
$netstat_n = execute_program('netstat', '-ndi | cut -c1-25,44- | grep "^[a-z]*[0-9][ \t].*Link"');
$lines_b = explode("\n", $netstat_b);
$lines_n = explode("\n", $netstat_n);
$results = array();
for ($i = 0, $max = sizeof($lines_b); $i < $max; $i++) {
$ar_buf_b = preg_split("/\s+/", $lines_b[$i]);
$ar_buf_n = preg_split("/\s+/", $lines_n[$i]);
if (!empty($ar_buf_b[0]) && !empty($ar_buf_n[3])) {
$results[$ar_buf_b[0]] = array();
 
$results[$ar_buf_b[0]]['rx_bytes'] = $ar_buf_b[3];
$results[$ar_buf_b[0]]['rx_packets'] = $ar_buf_n[3];
$results[$ar_buf_b[0]]['rx_errs'] = $ar_buf_n[4];
$results[$ar_buf_b[0]]['rx_drop'] = $ar_buf_n[8];
 
$results[$ar_buf_b[0]]['tx_bytes'] = $ar_buf_b[4];
$results[$ar_buf_b[0]]['tx_packets'] = $ar_buf_n[5];
$results[$ar_buf_b[0]]['tx_errs'] = $ar_buf_n[6];
$results[$ar_buf_b[0]]['tx_drop'] = $ar_buf_n[8];
 
$results[$ar_buf_b[0]]['errs'] = $ar_buf_n[4] + $ar_buf_n[6];
$results[$ar_buf_b[0]]['drop'] = $ar_buf_n[8];
}
}
return $results;
}
 
// get the ide device information out of dmesg
function ide () {
$results = array();
 
$s = 0;
for ($i = 0, $max = count($this->read_dmesg()); $i < $max; $i++) {
$buf = $this->dmesg[$i];
if (preg_match('/^(.*) at (pciide|wdc|atabus|atapibus)[0-9] (.*): <(.*)>/', $buf, $ar_buf)) {
$s = $ar_buf[1];
$results[$s]['model'] = $ar_buf[4];
$results[$s]['media'] = 'Hard Disk';
// now loop again and find the capacity
for ($j = 0, $max1 = count($this->read_dmesg()); $j < $max1; $j++) {
$buf_n = $this->dmesg[$j];
if (preg_match("/^($s): (.*), (.*), (.*)MB, .*$/", $buf_n, $ar_buf_n)) {
$results[$s]['capacity'] = $ar_buf_n[4] * 2048 * 1.049;
} elseif (preg_match("/^($s): (.*) MB, (.*), (.*), .*$/", $buf_n, $ar_buf_n)) {
$results[$s]['capacity'] = $ar_buf_n[2] * 2048;
}
}
}
}
asort($results);
return $results;
}
 
function distroicon () {
$result = 'NetBSD.png';
return($result);
}
}
 
?>
/web/acc/phpsysinfo/includes/os/class.BSD.common.inc.php
0,0 → 1,300
<?php
 
// phpSysInfo - A PHP System Information Script
// http://phpsysinfo.sourceforge.net/
 
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
 
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
 
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
// $Id: class.BSD.common.inc.php,v 1.52 2006/06/13 18:31:52 bigmichi1 Exp $
 
if (!defined('IN_PHPSYSINFO')) {
die("No Hacking");
}
 
require_once(APP_ROOT . '/includes/os/class.parseProgs.inc.php');
 
class bsd_common {
var $dmesg;
var $parser;
// Our constructor
// this function is run on the initialization of this class
function bsd_common () {
$this->parser = new Parser();
$this->parser->df_param = "";
}
// read /var/run/dmesg.boot, but only if we haven't already.
function read_dmesg () {
if (! $this->dmesg) {
if( PHP_OS == "Darwin" ) {
$this->dmesg = array();
} else {
$parts = explode("rebooting", rfts( '/var/run/dmesg.boot' ) );
$this->dmesg = explode("\n", $parts[count($parts) - 1]);
}
}
return $this->dmesg;
}
// grabs a key from sysctl(8)
function grab_key ($key) {
return execute_program('sysctl', "-n $key");
}
// get our apache SERVER_NAME or vhost
function hostname () {
if (!($result = getenv('SERVER_NAME'))) {
$result = "N.A.";
}
return $result;
}
// get our canonical hostname
function chostname () {
return execute_program('hostname');
}
// get the IP address of our canonical hostname
function ip_addr () {
if (!($result = getenv('SERVER_ADDR'))) {
$result = gethostbyname($this->chostname());
}
return $result;
}
 
function kernel () {
$s = $this->grab_key('kern.version');
$a = explode(':', $s);
return $a[0] . $a[1] . ':' . $a[2];
}
 
function uptime () {
$result = $this->get_sys_ticks();
 
return $result;
}
 
function users () {
return execute_program('who', '| wc -l');
}
 
function loadavg ($bar = false) {
$s = $this->grab_key('vm.loadavg');
$s = ereg_replace('{ ', '', $s);
$s = ereg_replace(' }', '', $s);
$results['avg'] = explode(' ', $s);
 
if ($bar) {
if ($fd = $this->grab_key('kern.cp_time')) {
// Find out the CPU load
// user + sys = load
// total = total
preg_match($this->cpu_regexp2, $fd, $res );
$load = $res[2] + $res[3] + $res[4]; // cpu.user + cpu.sys
$total = $res[2] + $res[3] + $res[4] + $res[5]; // cpu.total
 
// we need a second value, wait 1 second befor getting (< 1 second no good value will occour)
sleep(1);
$fd = $this->grab_key('kern.cp_time');
preg_match($this->cpu_regexp2, $fd, $res );
$load2 = $res[2] + $res[3] + $res[4];
$total2 = $res[2] + $res[3] + $res[4] + $res[5];
$results['cpupercent'] = (100*($load2 - $load)) / ($total2 - $total);
}
}
return $results;
}
 
function cpu_info () {
$results = array();
$ar_buf = array();
 
$results['model'] = $this->grab_key('hw.model');
$results['cpus'] = $this->grab_key('hw.ncpu');
 
for ($i = 0, $max = count($this->read_dmesg()); $i < $max; $i++) {
$buf = $this->dmesg[$i];
if (preg_match("/$this->cpu_regexp/", $buf, $ar_buf)) {
$results['cpuspeed'] = round($ar_buf[2]);
break;
}
}
return $results;
}
// get the scsi device information out of dmesg
function scsi () {
$results = array();
$ar_buf = array();
 
for ($i = 0, $max = count($this->read_dmesg()); $i < $max; $i++) {
$buf = $this->dmesg[$i];
 
if (preg_match("/$this->scsi_regexp1/", $buf, $ar_buf)) {
$s = $ar_buf[1];
$results[$s]['model'] = $ar_buf[2];
$results[$s]['media'] = 'Hard Disk';
} elseif (preg_match("/$this->scsi_regexp2/", $buf, $ar_buf)) {
$s = $ar_buf[1];
$results[$s]['capacity'] = $ar_buf[2] * 2048 * 1.049;
}
}
// return array_values(array_unique($results));
// 1. more useful to have device names
// 2. php 4.1.1 array_unique() deletes non-unique values.
asort($results);
return $results;
}
 
// get the pci device information out of dmesg
function pci () {
$results = array();
 
if( !( is_array($results = $this->parser->parse_lspci()) || is_array($results = $this->parser->parse_pciconf() ))) {
for ($i = 0, $s = 0; $i < count($this->read_dmesg()); $i++) {
$buf = $this->dmesg[$i];
if(!isset($this->pci_regexp1) && !isset($this->pci_regexp2)) {
$this->pci_regexp1 = '/(.*): <(.*)>(.*) pci[0-9]$/';
$this->pci_regexp2 = '/(.*): <(.*)>.* at [.0-9]+ irq/';
}
if (preg_match($this->pci_regexp1, $buf, $ar_buf)) {
$results[$s++] = $ar_buf[1] . ": " . $ar_buf[2];
} elseif (preg_match($this->pci_regexp2, $buf, $ar_buf)) {
$results[$s++] = $ar_buf[1] . ": " . $ar_buf[2];
}
}
asort($results);
}
return $results;
}
 
// get the ide device information out of dmesg
function ide () {
$results = array();
 
$s = 0;
for ($i = 0, $max = count($this->read_dmesg()); $i < $max; $i++) {
$buf = $this->dmesg[$i];
 
if (preg_match('/^(ad[0-9]+): (.*)MB <(.*)> (.*) (.*)/', $buf, $ar_buf)) {
$s = $ar_buf[1];
$results[$s]['model'] = $ar_buf[3];
$results[$s]['media'] = 'Hard Disk';
$results[$s]['capacity'] = $ar_buf[2] * 2048 * 1.049;
} elseif (preg_match('/^(acd[0-9]+): (.*) <(.*)> (.*)/', $buf, $ar_buf)) {
$s = $ar_buf[1];
$results[$s]['model'] = $ar_buf[3];
$results[$s]['media'] = 'CD-ROM';
}
}
// return array_values(array_unique($results));
// 1. more useful to have device names
// 2. php 4.1.1 array_unique() deletes non-unique values.
asort($results);
return $results;
}
 
// place holder function until we add acual usb detection
function usb () {
return array();
}
 
function sbus () {
$results = array();
$_results[0] = "";
// TODO. Nothing here yet. Move along.
$results = $_results;
return $results;
}
 
function memory () {
$s = $this->grab_key('hw.physmem');
 
if (PHP_OS == 'FreeBSD' || PHP_OS == 'OpenBSD') {
// vmstat on fbsd 4.4 or greater outputs kbytes not hw.pagesize
// I should probably add some version checking here, but for now
// we only support fbsd 4.4
$pagesize = 1024;
} else {
$pagesize = $this->grab_key('hw.pagesize');
}
 
$results['ram'] = array();
 
$pstat = execute_program('vmstat');
$lines = explode("\n", $pstat);
for ($i = 0, $max = sizeof($lines); $i < $max; $i++) {
$ar_buf = preg_split("/\s+/", $lines[$i], 19);
if ($i == 2) {
if(PHP_OS == 'NetBSD') {
$results['ram']['free'] = $ar_buf[5];
} else {
$results['ram']['free'] = $ar_buf[5] * $pagesize / 1024;
}
}
}
 
$results['ram']['total'] = $s / 1024;
$results['ram']['shared'] = 0;
$results['ram']['buffers'] = 0;
$results['ram']['used'] = $results['ram']['total'] - $results['ram']['free'];
$results['ram']['cached'] = 0;
 
$results['ram']['percent'] = round(($results['ram']['used'] * 100) / $results['ram']['total']);
 
if (PHP_OS == 'OpenBSD' || PHP_OS == 'NetBSD') {
$pstat = execute_program('swapctl', '-l -k');
} else {
$pstat = execute_program('swapinfo', '-k');
}
 
$lines = explode("\n", $pstat);
 
$results['swap']['total'] = 0;
$results['swap']['used'] = 0;
$results['swap']['free'] = 0;
 
for ($i = 1, $max = sizeof($lines); $i < $max; $i++) {
$ar_buf = preg_split("/\s+/", $lines[$i], 6);
 
if ($ar_buf[0] != 'Total') {
$results['swap']['total'] = $results['swap']['total'] + $ar_buf[1];
$results['swap']['used'] = $results['swap']['used'] + $ar_buf[2];
$results['swap']['free'] = $results['swap']['free'] + $ar_buf[3];
 
$results['devswap'][$i - 1] = array();
$results['devswap'][$i - 1]['dev'] = $ar_buf[0];
$results['devswap'][$i - 1]['total'] = $ar_buf[1];
$results['devswap'][$i - 1]['used'] = $ar_buf[2];
$results['devswap'][$i - 1]['free'] = ($results['devswap'][$i - 1]['total'] - $results['devswap'][$i - 1]['used']);
$results['devswap'][$i - 1]['percent'] = $ar_buf[2] > 0 ? round(($ar_buf[2] * 100) / $ar_buf[1]) : 0;
}
}
$results['swap']['percent'] = round(($results['swap']['used'] * 100) / $results['swap']['total']);
 
if( is_callable( array( 'sysinfo', 'memory_additional' ) ) ) {
$results = $this->memory_additional( $results );
}
return $results;
}
 
function filesystems () {
return $this->parser->parse_filesystems();
}
 
function distro () {
$distro = execute_program('uname', '-s');
$result = $distro;
return($result);
}
}
 
?>
/web/acc/phpsysinfo/includes/os/class.Linux.inc.php
0,0 → 1,552
<?php
// phpSysInfo - A PHP System Information Script
// http://phpsysinfo.sourceforge.net/
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
// $Id: class.Linux.inc.php,v 1.88 2007/02/25 20:50:52 bigmichi1 Exp $
 
if (!defined('IN_PHPSYSINFO')) {
die("No Hacking");
}
 
require_once(APP_ROOT . '/includes/os/class.BSD.common.inc.php');
 
class sysinfo {
var $inifile = "distros.ini";
var $icon = "unknown.png";
var $distro = "unknown";
var $parser;
// get the distro name and icon when create the sysinfo object
function sysinfo() {
$this->parser = new Parser();
$this->parser->df_param = 'P';
$list = @parse_ini_file(APP_ROOT . "/" . $this->inifile, true);
if (!$list) {
return;
}
$distro_info = execute_program('lsb_release','-a 2> /dev/null', false); // We have the '2> /dev/null' because Ubuntu gives an error on this command which causes the distro to be unknown
if ( $distro_info != 'ERROR') {
$distro_tmp = explode("\n",$distro_info);
foreach( $distro_tmp as $info ) {
$info_tmp = explode(':', $info, 2);
$distro[ $info_tmp[0] ] = trim($info_tmp[1]);
}
if( !isset( $list[$distro['Distributor ID']] ) ){
return;
}
$this->icon = isset($list[$distro['Distributor ID']]["Image"]) ? $list[$distro['Distributor ID']]["Image"] : $this->icon;
$this->distro = $distro['Description'];
} else { // Fall back in case 'lsb_release' does not exist ;)
foreach ($list as $section => $distribution) {
if (!isset($distribution["Files"])) {
continue;
} else {
foreach (explode(";", $distribution["Files"]) as $filename) {
if (file_exists($filename)) {
$buf = rfts( $filename );
$this->icon = isset($distribution["Image"]) ? $distribution["Image"] : $this->icon;
$this->distro = isset($distribution["Name"]) ? $distribution["Name"] . " " . trim($buf) : trim($buf);
break 2;
}
}
}
}
}
}
// get our apache SERVER_NAME or vhost
function vhostname () {
if (! ($result = getenv('SERVER_NAME'))) {
$result = 'N.A.';
}
return $result;
}
// get the IP address of our vhost name
function vip_addr () {
return gethostbyname($this->vhostname());
}
// get our canonical hostname
function chostname () {
$result = rfts( '/proc/sys/kernel/hostname', 1 );
if ( $result == "ERROR" ) {
$result = "N.A.";
} else {
$result = gethostbyaddr( gethostbyname( trim( $result ) ) );
}
return $result;
}
// get the IP address of our canonical hostname
function ip_addr () {
if (!($result = getenv('SERVER_ADDR'))) {
$result = gethostbyname($this->chostname());
}
return $result;
}
 
function kernel () {
$buf = rfts( '/proc/version', 1 );
if ( $buf == "ERROR" ) {
$result = "N.A.";
} else {
if (preg_match('/version (.*?) /', $buf, $ar_buf)) {
$result = $ar_buf[1];
 
if (preg_match('/SMP/', $buf)) {
$result .= ' (SMP)';
}
}
}
return $result;
}
function uptime () {
$buf = rfts( '/proc/uptime', 1 );
$ar_buf = explode( ' ', $buf );
$result = trim( $ar_buf[0] );
 
return $result;
}
 
function users () {
$strResult = 0;
$strBuf = execute_program('who', '-q');
if( $strBuf != "ERROR" ) {
$arrWho = explode( '=', $strBuf );
$strResult = $arrWho[1];
}
return $strResult;
}
function loadavg ($bar = false) {
$buf = rfts( '/proc/loadavg' );
if( $buf == "ERROR" ) {
$results['avg'] = array('N.A.', 'N.A.', 'N.A.');
} else {
$results['avg'] = preg_split("/\s/", $buf, 4);
unset($results['avg'][3]); // don't need the extra values, only first three
}
if ($bar) {
$buf = rfts( '/proc/stat', 1 );
if( $buf != "ERROR" ) {
sscanf($buf, "%*s %Ld %Ld %Ld %Ld", $ab, $ac, $ad, $ae);
// Find out the CPU load
// user + sys = load
// total = total
$load = $ab + $ac + $ad; // cpu.user + cpu.sys
$total = $ab + $ac + $ad + $ae; // cpu.total
 
// we need a second value, wait 1 second befor getting (< 1 second no good value will occour)
sleep(1);
$buf = rfts( '/proc/stat', 1 );
sscanf($buf, "%*s %Ld %Ld %Ld %Ld", $ab, $ac, $ad, $ae);
$load2 = $ab + $ac + $ad;
$total2 = $ab + $ac + $ad + $ae;
$results['cpupercent'] = (100*($load2 - $load)) / ($total2 - $total);
}
}
return $results;
}
 
function cpu_info () {
$bufr = rfts( '/proc/cpuinfo' );
$results = array("cpus" => 0);
if ( $bufr != "ERROR" ) {
$bufe = explode("\n", $bufr);
$results = array('cpus' => 0, 'bogomips' => 0);
$ar_buf = array();
foreach( $bufe as $buf ) {
$arrBuff = preg_split('/\s+:\s+/', trim($buf));
if( count( $arrBuff ) == 2 ) {
$key = $arrBuff[0];
$value = $arrBuff[1];
// All of the tags here are highly architecture dependant.
// the only way I could reconstruct them for machines I don't
// have is to browse the kernel source. So if your arch isn't
// supported, tell me you want it written in.
switch ($key) {
case 'model name':
$results['model'] = $value;
break;
case 'cpu MHz':
$results['cpuspeed'] = sprintf('%.2f', $value);
break;
case 'cycle frequency [Hz]': // For Alpha arch - 2.2.x
$results['cpuspeed'] = sprintf('%.2f', $value / 1000000);
break;
case 'clock': // For PPC arch (damn borked POS)
$results['cpuspeed'] = sprintf('%.2f', $value);
break;
case 'cpu': // For PPC arch (damn borked POS)
$results['model'] = $value;
break;
case 'L2 cache': // More for PPC
$results['cache'] = $value;
break;
case 'revision': // For PPC arch (damn borked POS)
$results['model'] .= ' ( rev: ' . $value . ')';
break;
case 'cpu model': // For Alpha arch - 2.2.x
$results['model'] .= ' (' . $value . ')';
break;
case 'cache size':
$results['cache'] = $value;
break;
case 'bogomips':
$results['bogomips'] += $value;
break;
case 'BogoMIPS': // For alpha arch - 2.2.x
$results['bogomips'] += $value;
break;
case 'BogoMips': // For sparc arch
$results['bogomips'] += $value;
break;
case 'cpus detected': // For Alpha arch - 2.2.x
$results['cpus'] += $value;
break;
case 'system type': // Alpha arch - 2.2.x
$results['model'] .= ', ' . $value . ' ';
break;
case 'platform string': // Alpha arch - 2.2.x
$results['model'] .= ' (' . $value . ')';
break;
case 'processor':
$results['cpus'] += 1;
break;
case 'Cpu0ClkTck': // Linux sparc64
$results['cpuspeed'] = sprintf('%.2f', hexdec($value) / 1000000);
break;
case 'Cpu0Bogo': // Linux sparc64 & sparc32
$results['bogomips'] = $value;
break;
case 'ncpus probed': // Linux sparc64 & sparc32
$results['cpus'] = $value;
break;
}
}
}
// sparc64 specific code follows
// This adds the ability to display the cache that a CPU has
// Originally made by Sven Blumenstein <bazik@gentoo.org> in 2004
// Modified by Tom Weustink <freshy98@gmx.net> in 2004
$sparclist = array('SUNW,UltraSPARC@0,0', 'SUNW,UltraSPARC-II@0,0', 'SUNW,UltraSPARC@1c,0', 'SUNW,UltraSPARC-IIi@1c,0', 'SUNW,UltraSPARC-II@1c,0', 'SUNW,UltraSPARC-IIe@0,0');
foreach ($sparclist as $name) {
$buf = rfts( '/proc/openprom/' . $name . '/ecache-size',1 , 32, false );
if( $buf != "ERROR" ) {
$results['cache'] = base_convert($buf, 16, 10)/1024 . ' KB';
}
}
// sparc64 specific code ends
// XScale detection code
if ( $results['cpus'] == 0 ) {
foreach( $bufe as $buf ) {
$fields = preg_split('/\s*:\s*/', trim($buf), 2);
if (sizeof($fields) == 2) {
list($key, $value) = $fields;
switch($key) {
case 'Processor':
$results['cpus'] += 1;
$results['model'] = $value;
break;
case 'BogoMIPS': //BogoMIPS are not BogoMIPS on this CPU, it's the speed, no BogoMIPS available
$results['cpuspeed'] = $value;
break;
case 'I size':
$results['cache'] = $value;
break;
case 'D size':
$results['cache'] += $value;
break;
}
}
}
$results['cache'] = $results['cache'] / 1024 . " KB";
}
}
$keys = array_keys($results);
$keys2be = array('model', 'cpuspeed', 'cache', 'bogomips', 'cpus');
while ($ar_buf = each($keys2be)) {
if (! in_array($ar_buf[1], $keys)) {
$results[$ar_buf[1]] = 'N.A.';
}
}
$buf = rfts( '/proc/acpi/thermal_zone/THRM/temperature', 1, 4096, false );
if ( $buf != "ERROR" ) {
$results['temp'] = substr( $buf, 25, 2 );
}
return $results;
}
 
function pci () {
$arrResults = array();
$booDevice = false;
if( ! $arrResults = $this->parser->parse_lspci() ) {
$strBuf = rfts( '/proc/pci', 0, 4096, false );
if( $strBuf != "ERROR" ) {
$arrBuf = explode( "\n", $strBuf );
foreach( $arrBuf as $strLine ) {
if( preg_match( '/Bus/', $strLine ) ) {
$booDevice = true;
continue;
}
if( $booDevice ) {
list( $strKey, $strValue ) = explode( ': ', $strLine, 2 );
if( ! preg_match( '/bridge/i', $strKey ) && ! preg_match( '/USB/i ', $strKey ) ) {
$arrResults[] = preg_replace( '/\([^\)]+\)\.$/', '', trim( $strValue ) );
}
$booDevice = false;
}
}
asort( $arrResults );
}
}
return $arrResults;
}
 
function ide () {
$results = array();
$bufd = gdc( '/proc/ide', false );
 
foreach( $bufd as $file ) {
if (preg_match('/^hd/', $file)) {
$results[$file] = array();
$buf = rfts("/proc/ide/" . $file . "/media", 1 );
if ( $buf != "ERROR" ) {
$results[$file]['media'] = trim($buf);
if ($results[$file]['media'] == 'disk') {
$results[$file]['media'] = 'Hard Disk';
$buf = rfts( "/proc/ide/" . $file . "/capacity", 1, 4096, false);
if( $buf == "ERROR" ) {
$buf = rfts( "/sys/block/" . $file . "/size", 1, 4096, false);
}
if ( $buf != "ERROR" ) {
$results[$file]['capacity'] = trim( $buf );
}
} elseif ($results[$file]['media'] == 'cdrom') {
$results[$file]['media'] = 'CD-ROM';
unset($results[$file]['capacity']);
}
} else {
unset($results[$file]);
}
 
$buf = rfts( "/proc/ide/" . $file . "/model", 1 );
if ( $buf != "ERROR" ) {
$results[$file]['model'] = trim( $buf );
if (preg_match('/WDC/', $results[$file]['model'])) {
$results[$file]['manufacture'] = 'Western Digital';
} elseif (preg_match('/IBM/', $results[$file]['model'])) {
$results[$file]['manufacture'] = 'IBM';
} elseif (preg_match('/FUJITSU/', $results[$file]['model'])) {
$results[$file]['manufacture'] = 'Fujitsu';
} else {
$results[$file]['manufacture'] = 'Unknown';
}
}
}
}
 
asort($results);
return $results;
}
 
function scsi () {
$results = array();
$dev_vendor = '';
$dev_model = '';
$dev_rev = '';
$dev_type = '';
$s = 1;
$get_type = 0;
 
$bufr = execute_program('lsscsi', '-c', false);
if( $bufr == "ERROR" ) {
$bufr = rfts( '/proc/scsi/scsi', 0, 4096, false);
}
if ( $bufr != "ERROR" ) {
$bufe = explode("\n", $bufr);
foreach( $bufe as $buf ) {
if (preg_match('/Vendor/', $buf)) {
preg_match('/Vendor: (.*) Model: (.*) Rev: (.*)/i', $buf, $dev);
list($key, $value) = explode(': ', $buf, 2);
$dev_str = $value;
$get_type = true;
continue;
}
 
if ($get_type) {
preg_match('/Type:\s+(\S+)/i', $buf, $dev_type);
$results[$s]['model'] = "$dev[1] $dev[2] ($dev_type[1])";
$results[$s]['media'] = "Hard Disk";
$s++;
$get_type = false;
}
}
}
asort($results);
return $results;
}
 
function usb () {
$results = array();
$devnum = -1;
 
$bufr = execute_program('lsusb', '', false);
if( $bufr == "ERROR" ) {
$bufr = rfts( '/proc/bus/usb/devices', 0, 4096, false );
if ( $bufr != "ERROR" ) {
$bufe = explode("\n", $bufr);
foreach( $bufe as $buf ) {
if (preg_match('/^T/', $buf)) {
$devnum += 1;
$results[$devnum] = "";
} elseif (preg_match('/^S:/', $buf)) {
list($key, $value) = explode(': ', $buf, 2);
list($key, $value2) = explode('=', $value, 2);
if (trim($key) != "SerialNumber") {
$results[$devnum] .= " " . trim($value2);
$devstring = 0;
}
}
}
}
} else {
$bufe = explode( "\n", $bufr );
foreach( $bufe as $buf ) {
$device = preg_split("/ /", $buf, 7);
if( isset( $device[6] ) && trim( $device[6] ) != "" ) {
$results[$devnum++] = trim( $device[6] );
}
}
}
return $results;
}
 
function sbus () {
$results = array();
$_results[0] = "";
// TODO. Nothing here yet. Move along.
$results = $_results;
return $results;
}
 
function network () {
$results = array();
 
$bufr = rfts( '/proc/net/dev' );
if ( $bufr != "ERROR" ) {
$bufe = explode("\n", $bufr);
foreach( $bufe as $buf ) {
if (preg_match('/:/', $buf)) {
list($dev_name, $stats_list) = preg_split('/:/', $buf, 2);
$stats = preg_split('/\s+/', trim($stats_list));
$results[$dev_name] = array();
 
$results[$dev_name]['rx_bytes'] = $stats[0];
$results[$dev_name]['rx_packets'] = $stats[1];
$results[$dev_name]['rx_errs'] = $stats[2];
$results[$dev_name]['rx_drop'] = $stats[3];
 
$results[$dev_name]['tx_bytes'] = $stats[8];
$results[$dev_name]['tx_packets'] = $stats[9];
$results[$dev_name]['tx_errs'] = $stats[10];
$results[$dev_name]['tx_drop'] = $stats[11];
 
$results[$dev_name]['errs'] = $stats[2] + $stats[10];
$results[$dev_name]['drop'] = $stats[3] + $stats[11];
}
}
}
return $results;
}
 
function memory () {
$results['ram'] = array('total' => 0, 'free' => 0, 'used' => 0, 'percent' => 0);
$results['swap'] = array('total' => 0, 'free' => 0, 'used' => 0, 'percent' => 0);
$results['devswap'] = array();
 
$bufr = rfts( '/proc/meminfo' );
if ( $bufr != "ERROR" ) {
$bufe = explode("\n", $bufr);
foreach( $bufe as $buf ) {
if (preg_match('/^MemTotal:\s+(.*)\s*kB/i', $buf, $ar_buf)) {
$results['ram']['total'] = $ar_buf[1];
} else if (preg_match('/^MemFree:\s+(.*)\s*kB/i', $buf, $ar_buf)) {
$results['ram']['free'] = $ar_buf[1];
} else if (preg_match('/^Cached:\s+(.*)\s*kB/i', $buf, $ar_buf)) {
$results['ram']['cached'] = $ar_buf[1];
} else if (preg_match('/^Buffers:\s+(.*)\s*kB/i', $buf, $ar_buf)) {
$results['ram']['buffers'] = $ar_buf[1];
}
}
 
$results['ram']['used'] = $results['ram']['total'] - $results['ram']['free'];
$results['ram']['percent'] = round(($results['ram']['used'] * 100) / $results['ram']['total']);
// values for splitting memory usage
if (isset($results['ram']['cached']) && isset($results['ram']['buffers'])) {
$results['ram']['app'] = $results['ram']['used'] - $results['ram']['cached'] - $results['ram']['buffers'];
$results['ram']['app_percent'] = round(($results['ram']['app'] * 100) / $results['ram']['total']);
$results['ram']['buffers_percent'] = round(($results['ram']['buffers'] * 100) / $results['ram']['total']);
$results['ram']['cached_percent'] = round(($results['ram']['cached'] * 100) / $results['ram']['total']);
}
 
$bufr = rfts( '/proc/swaps' );
if ( $bufr != "ERROR" ) {
$swaps = explode("\n", $bufr);
for ($i = 1; $i < (sizeof($swaps)); $i++) {
if( trim( $swaps[$i] ) != "" ) {
$ar_buf = preg_split('/\s+/', $swaps[$i], 6);
$results['devswap'][$i - 1] = array();
$results['devswap'][$i - 1]['dev'] = $ar_buf[0];
$results['devswap'][$i - 1]['total'] = $ar_buf[2];
$results['devswap'][$i - 1]['used'] = $ar_buf[3];
$results['devswap'][$i - 1]['free'] = ($results['devswap'][$i - 1]['total'] - $results['devswap'][$i - 1]['used']);
$results['devswap'][$i - 1]['percent'] = round(($ar_buf[3] * 100) / $ar_buf[2]);
$results['swap']['total'] += $ar_buf[2];
$results['swap']['used'] += $ar_buf[3];
$results['swap']['free'] = $results['swap']['total'] - $results['swap']['used'];
$results['swap']['percent'] = round(($results['swap']['used'] * 100) / $results['swap']['total']);
}
}
}
}
return $results;
}
function filesystems () {
return $this->parser->parse_filesystems();
}
 
function distro () {
return $this->distro;
}
 
function distroicon () {
return $this->icon;
}
 
}
 
?>
/web/acc/phpsysinfo/includes/os/class.HP-UX.inc.php
0,0 → 1,423
<?php
 
// phpSysInfo - A PHP System Information Script
// http://phpsysinfo.sourceforge.net/
 
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
 
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
 
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
// $Id: class.HP-UX.inc.php,v 1.20 2007/02/18 18:59:54 bigmichi1 Exp $
 
class sysinfo {
// get our apache SERVER_NAME or vhost
function vhostname () {
if (! ($result = getenv('SERVER_NAME'))) {
$result = 'N.A.';
}
return $result;
}
// get the IP address of our vhost name
function vip_addr () {
return gethostbyname($this->vhostname());
}
// get our canonical hostname
function chostname () {
return execute_program('hostname');
}
// get the IP address of our canonical hostname
function ip_addr () {
if (!($result = getenv('SERVER_ADDR'))) {
$result = gethostbyname($this->chostname());
}
return $result;
}
 
function kernel () {
return execute_program('uname', '-srvm');
}
 
function uptime () {
$result = 0;
$ar_buf = array();
 
$buf = execute_program('uptime');
if (preg_match("/up (\d+) days,\s*(\d+):(\d+),/", $buf, $ar_buf)) {
$min = $ar_buf[3];
$hours = $ar_buf[2];
$days = $ar_buf[1];
$result = $days * 86400 + $hours * 3600 + $min * 60;
}
 
return $result;
}
 
function users () {
$who = explode('=', execute_program('who', '-q'));
$result = $who[1];
return $result;
}
 
function loadavg ($bar = false) {
$ar_buf = array();
 
$buf = execute_program('uptime');
 
if (preg_match("/average: (.*), (.*), (.*)$/", $buf, $ar_buf)) {
$results['avg'] = array($ar_buf[1], $ar_buf[2], $ar_buf[3]);
} else {
$results['avg'] = array('N.A.', 'N.A.', 'N.A.');
}
return $results;
}
 
function cpu_info () {
$results = array();
$ar_buf = array();
 
$bufr = rfts( '/proc/cpuinfo' );
if( $bufr != "ERROR" ) {
$bufe = explode( "\n", $bufr );
foreach( $bufe as $buf ) {
list($key, $value) = preg_split('/\s+:\s+/', trim($buf), 2);
// All of the tags here are highly architecture dependant.
// the only way I could reconstruct them for machines I don't
// have is to browse the kernel source. So if your arch isn't
// supported, tell me you want it written in.
switch ($key) {
case 'model name':
$results['model'] = $value;
break;
case 'cpu MHz':
$results['cpuspeed'] = sprintf('%.2f', $value);
break;
case 'cycle frequency [Hz]': // For Alpha arch - 2.2.x
$results['cpuspeed'] = sprintf('%.2f', $value / 1000000);
break;
case 'clock': // For PPC arch (damn borked POS)
$results['cpuspeed'] = sprintf('%.2f', $value);
break;
case 'cpu': // For PPC arch (damn borked POS)
$results['model'] = $value;
break;
case 'revision': // For PPC arch (damn borked POS)
$results['model'] .= ' ( rev: ' . $value . ')';
break;
case 'cpu model': // For Alpha arch - 2.2.x
$results['model'] .= ' (' . $value . ')';
break;
case 'cache size':
$results['cache'] = $value;
break;
case 'bogomips':
$results['bogomips'] += $value;
break;
case 'BogoMIPS': // For alpha arch - 2.2.x
$results['bogomips'] += $value;
break;
case 'BogoMips': // For sparc arch
$results['bogomips'] += $value;
break;
case 'cpus detected': // For Alpha arch - 2.2.x
$results['cpus'] += $value;
break;
case 'system type': // Alpha arch - 2.2.x
$results['model'] .= ', ' . $value . ' ';
break;
case 'platform string': // Alpha arch - 2.2.x
$results['model'] .= ' (' . $value . ')';
break;
case 'processor':
$results['cpus'] += 1;
break;
}
}
fclose($fd);
}
 
$keys = array_keys($results);
$keys2be = array('model', 'cpuspeed', 'cache', 'bogomips', 'cpus');
 
while ($ar_buf = each($keys2be)) {
if (! in_array($ar_buf[1], $keys)) {
$results[$ar_buf[1]] = 'N.A.';
}
}
return $results;
}
 
function pci () {
$results = array();
 
$bufr = rfts( '/proc/pci' );
if( $bufr != "ERROR" ) {
$bufe = explode( "\n", $bufr );
foreach( $bufe as $buf ) {
if (preg_match('/Bus/', $buf)) {
$device = true;
continue;
}
 
if ($device) {
list($key, $value) = explode(': ', $buf, 2);
 
if (!preg_match('/bridge/i', $key) && !preg_match('/USB/i', $key)) {
$results[] = preg_replace('/\([^\)]+\)\.$/', '', trim($value));
}
$device = false;
}
}
}
asort($results);
return $results;
}
 
function ide () {
$results = array();
 
$bufd = gdc( '/proc/ide' );
 
foreach( $bufd as $file ) {
if (preg_match('/^hd/', $file)) {
$results[$file] = array();
// Check if device is CD-ROM (CD-ROM capacity shows as 1024 GB)
$buf = rfts( "/proc/ide/" . $file . "/media", 1 );
if( $buf != "ERROR" ) {
$results[$file]['media'] = trim( $buf );
if ($results[$file]['media'] == 'disk') {
$results[$file]['media'] = 'Hard Disk';
}
if ($results[$file]['media'] == 'cdrom') {
$results[$file]['media'] = 'CD-ROM';
}
}
 
$buf = rfts( "/proc/ide/" . $file . "/model", 1 );
if( $buf != "ERROR" ) {
$results[$file]['model'] = trim( $buf );
if (preg_match('/WDC/', $results[$file]['model'])) {
$results[$file]['manufacture'] = 'Western Digital';
} elseif (preg_match('/IBM/', $results[$file]['model'])) {
$results[$file]['manufacture'] = 'IBM';
} elseif (preg_match('/FUJITSU/', $results[$file]['model'])) {
$results[$file]['manufacture'] = 'Fujitsu';
} else {
$results[$file]['manufacture'] = 'Unknown';
}
}
 
$buf = rfts( "/proc/ide/" . $file . "/capacity", 1 );
if( $buf != "ERROR" ) {
$results[$file]['capacity'] = trim( $buf );
if ($results[$file]['media'] == 'CD-ROM') {
unset($results[$file]['capacity']);
}
}
}
}
asort($results);
return $results;
}
 
function scsi () {
$results = array();
$dev_vendor = '';
$dev_model = '';
$dev_rev = '';
$dev_type = '';
$s = 1;
 
$bufr = rfts( '/proc/scsi/scsi' );
if( $bufr != "ERROR" ) {
$bufe = explode( "\n", $bufr );
foreach( $bufe as $buf ) {
if (preg_match('/Vendor/', $buf)) {
preg_match('/Vendor: (.*) Model: (.*) Rev: (.*)/i', $buf, $dev);
list($key, $value) = explode(': ', $buf, 2);
$dev_str = $value;
$get_type = 1;
continue;
}
 
if ($get_type) {
preg_match('/Type:\s+(\S+)/i', $buf, $dev_type);
$results[$s]['model'] = "$dev[1] $dev[2] ($dev_type[1])";
$results[$s]['media'] = "Hard Disk";
$s++;
$get_type = 0;
}
}
}
asort($results);
return $results;
}
 
function usb () {
$results = array();
$devstring = 0;
$devnum = -1;
 
$bufr = rfts( '/proc/bus/usb/devices' );
if( $bufr != "ERROR" ) {
$bufe = explode( "\n", $bufr );
foreach( $bufe as $buf ) {
if (preg_match('/^T/', $buf)) {
$devnum += 1;
}
if (preg_match('/^S/', $buf)) {
$devstring = 1;
}
 
if ($devstring) {
list($key, $value) = explode(': ', $buf, 2);
list($key, $value2) = explode('=', $value, 2);
$results[$devnum] .= " " . trim($value2);
$devstring = 0;
}
}
}
return $results;
}
 
function sbus () {
$results = array();
$_results[0] = "";
// TODO. Nothing here yet. Move along.
$results = $_results;
return $results;
}
 
function network () {
$netstat = execute_program('netstat', '-ni | tail -n +2');
$lines = explode("\n", $netstat);
$results = array();
for ($i = 0, $max = sizeof($lines); $i < $max; $i++) {
$ar_buf = preg_split("/\s+/", $lines[$i]);
if (!empty($ar_buf[0]) && !empty($ar_buf[3])) {
$results[$ar_buf[0]] = array();
 
$results[$ar_buf[0]]['rx_bytes'] = $ar_buf[4];
$results[$ar_buf[0]]['rx_packets'] = $ar_buf[4];
$results[$ar_buf[0]]['rx_errs'] = $ar_buf[5];
$results[$ar_buf[0]]['rx_drop'] = $ar_buf[8];
 
$results[$ar_buf[0]]['tx_bytes'] = $ar_buf[6];
$results[$ar_buf[0]]['tx_packets'] = $ar_buf[6];
$results[$ar_buf[0]]['tx_errs'] = $ar_buf[7];
$results[$ar_buf[0]]['tx_drop'] = $ar_buf[8];
 
$results[$ar_buf[0]]['errs'] = $ar_buf[5] + $ar_buf[7];
$results[$ar_buf[0]]['drop'] = $ar_buf[8];
}
}
return $results;
}
function memory () {
$results['ram'] = array();
$results['swap'] = array();
$results['devswap'] = array();
 
$bufr = rfts( '/proc/meminfo' );
if( $bufr != "ERROR" ) {
$bufe = explode( "\n", $bufr );
foreach( $bufe as $buf ) {
if (preg_match('/Mem:\s+(.*)$/', $buf, $ar_buf)) {
$ar_buf = preg_split('/\s+/', $ar_buf[1], 6);
 
$results['ram']['total'] = $ar_buf[0] / 1024;
$results['ram']['used'] = $ar_buf[1] / 1024;
$results['ram']['free'] = $ar_buf[2] / 1024;
$results['ram']['shared'] = $ar_buf[3] / 1024;
$results['ram']['buffers'] = $ar_buf[4] / 1024;
$results['ram']['cached'] = $ar_buf[5] / 1024;
// I don't like this since buffers and cache really aren't
// 'used' per say, but I get too many emails about it.
$results['ram']['percent'] = round(($results['ram']['used'] * 100) / $results['ram']['total']);
}
 
if (preg_match('/Swap:\s+(.*)$/', $buf, $ar_buf)) {
$ar_buf = preg_split('/\s+/', $ar_buf[1], 3);
 
$results['swap']['total'] = $ar_buf[0] / 1024;
$results['swap']['used'] = $ar_buf[1] / 1024;
$results['swap']['free'] = $ar_buf[2] / 1024;
$results['swap']['percent'] = round(($ar_buf[1] * 100) / $ar_buf[0]);
// Get info on individual swap files
$swaps = rfts( '/proc/swaps' );
if( $swaps != "ERROR" ) {
$swapdevs = explode("\n", $swaps);
 
for ($i = 1, $max = (sizeof($swapdevs) - 1); $i < $max; $i++) {
$ar_buf = preg_split('/\s+/', $swapdevs[$i], 6);
$results['devswap'][$i - 1] = array();
$results['devswap'][$i - 1]['dev'] = $ar_buf[0];
$results['devswap'][$i - 1]['total'] = $ar_buf[2];
$results['devswap'][$i - 1]['used'] = $ar_buf[3];
$results['devswap'][$i - 1]['free'] = ($results['devswap'][$i - 1]['total'] - $results['devswap'][$i - 1]['used']);
$results['devswap'][$i - 1]['percent'] = round(($ar_buf[3] * 100) / $ar_buf[2]);
}
break;
}
}
}
}
return $results;
}
 
function filesystems () {
$df = execute_program('df', '-kP');
$mounts = explode("\n", $df);
$fstype = array();
 
$s = execute_program('mount', '-v');
$lines = explode("\n", $s);
 
$i = 0;
while (list(, $line) = each($lines)) {
$a = explode(' ', $line);
$fsdev[$a[0]] = $a[4];
}
 
for ($i = 1, $j = 0, $max = sizeof($mounts); $i < $max; $i++) {
$ar_buf = preg_split("/\s+/", $mounts[$i], 6);
 
if (hide_mount($ar_buf[5])) {
continue;
}
 
$results[$j] = array();
 
$results[$j]['disk'] = $ar_buf[0];
$results[$j]['size'] = $ar_buf[1];
$results[$j]['used'] = $ar_buf[2];
$results[$j]['free'] = $ar_buf[3];
$results[$j]['percent'] = $ar_buf[4];
$results[$j]['mount'] = $ar_buf[5];
($fstype[$ar_buf[5]]) ? $results[$j]['fstype'] = $fstype[$ar_buf[5]] : $results[$j]['fstype'] = $fsdev[$ar_buf[0]];
$j++;
}
return $results;
}
function distro () {
$result = 'HP-UX';
return($result);
}
 
function distroicon () {
$result = 'unknown.png';
return($result);
}
}
 
?>
/web/acc/phpsysinfo/includes/os/class.Linux.inc.php.default
0,0 → 1,552
<?php
// phpSysInfo - A PHP System Information Script
// http://phpsysinfo.sourceforge.net/
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
// $Id: class.Linux.inc.php,v 1.88 2007/02/25 20:50:52 bigmichi1 Exp $
 
if (!defined('IN_PHPSYSINFO')) {
die("No Hacking");
}
 
require_once(APP_ROOT . '/includes/os/class.BSD.common.inc.php');
 
class sysinfo {
var $inifile = "distros.ini";
var $icon = "unknown.png";
var $distro = "unknown";
var $parser;
// get the distro name and icon when create the sysinfo object
function sysinfo() {
$this->parser = new Parser();
$this->parser->df_param = 'P';
$list = @parse_ini_file(APP_ROOT . "/" . $this->inifile, true);
if (!$list) {
return;
}
$distro_info = execute_program('lsb_release','-a 2> /dev/null', false); // We have the '2> /dev/null' because Ubuntu gives an error on this command which causes the distro to be unknown
if ( $distro_info != 'ERROR') {
$distro_tmp = explode("\n",$distro_info);
foreach( $distro_tmp as $info ) {
$info_tmp = explode(':', $info, 2);
$distro[ $info_tmp[0] ] = trim($info_tmp[1]);
}
if( !isset( $list[$distro['Distributor ID']] ) ){
return;
}
$this->icon = isset($list[$distro['Distributor ID']]["Image"]) ? $list[$distro['Distributor ID']]["Image"] : $this->icon;
$this->distro = $distro['Description'];
} else { // Fall back in case 'lsb_release' does not exist ;)
foreach ($list as $section => $distribution) {
if (!isset($distribution["Files"])) {
continue;
} else {
foreach (explode(";", $distribution["Files"]) as $filename) {
if (file_exists($filename)) {
$buf = rfts( $filename );
$this->icon = isset($distribution["Image"]) ? $distribution["Image"] : $this->icon;
$this->distro = isset($distribution["Name"]) ? $distribution["Name"] . " " . trim($buf) : trim($buf);
break 2;
}
}
}
}
}
}
// get our apache SERVER_NAME or vhost
function vhostname () {
if (! ($result = getenv('SERVER_NAME'))) {
$result = 'N.A.';
}
return $result;
}
// get the IP address of our vhost name
function vip_addr () {
return gethostbyname($this->vhostname());
}
// get our canonical hostname
function chostname () {
$result = rfts( '/proc/sys/kernel/hostname', 1 );
if ( $result == "ERROR" ) {
$result = "N.A.";
} else {
$result = gethostbyaddr( gethostbyname( trim( $result ) ) );
}
return $result;
}
// get the IP address of our canonical hostname
function ip_addr () {
if (!($result = getenv('SERVER_ADDR'))) {
$result = gethostbyname($this->chostname());
}
return $result;
}
 
function kernel () {
$buf = rfts( '/proc/version', 1 );
if ( $buf == "ERROR" ) {
$result = "N.A.";
} else {
if (preg_match('/version (.*?) /', $buf, $ar_buf)) {
$result = $ar_buf[1];
 
if (preg_match('/SMP/', $buf)) {
$result .= ' (SMP)';
}
}
}
return $result;
}
function uptime () {
$buf = rfts( '/proc/uptime', 1 );
$ar_buf = explode( ' ', $buf );
$result = trim( $ar_buf[0] );
 
return $result;
}
 
function users () {
$strResult = 0;
$strBuf = execute_program('who', '-q');
if( $strBuf != "ERROR" ) {
$arrWho = explode( '=', $strBuf );
$strResult = $arrWho[1];
}
return $strResult;
}
 
function loadavg ($bar = false) {
$buf = rfts( '/proc/loadavg' );
if( $buf == "ERROR" ) {
$results['avg'] = array('N.A.', 'N.A.', 'N.A.');
} else {
$results['avg'] = preg_split("/\s/", $buf, 4);
unset($results['avg'][3]); // don't need the extra values, only first three
}
if ($bar) {
$buf = rfts( '/proc/stat', 1 );
if( $buf != "ERROR" ) {
sscanf($buf, "%*s %Ld %Ld %Ld %Ld", $ab, $ac, $ad, $ae);
// Find out the CPU load
// user + sys = load
// total = total
$load = $ab + $ac + $ad; // cpu.user + cpu.sys
$total = $ab + $ac + $ad + $ae; // cpu.total
 
// we need a second value, wait 1 second befor getting (< 1 second no good value will occour)
sleep(1);
$buf = rfts( '/proc/stat', 1 );
sscanf($buf, "%*s %Ld %Ld %Ld %Ld", $ab, $ac, $ad, $ae);
$load2 = $ab + $ac + $ad;
$total2 = $ab + $ac + $ad + $ae;
$results['cpupercent'] = (100*($load2 - $load)) / ($total2 - $total);
}
}
return $results;
}
 
function cpu_info () {
$bufr = rfts( '/proc/cpuinfo' );
$results = array("cpus" => 0);
if ( $bufr != "ERROR" ) {
$bufe = explode("\n", $bufr);
$results = array('cpus' => 0, 'bogomips' => 0);
$ar_buf = array();
foreach( $bufe as $buf ) {
$arrBuff = preg_split('/\s+:\s+/', trim($buf));
if( count( $arrBuff ) == 2 ) {
$key = $arrBuff[0];
$value = $arrBuff[1];
// All of the tags here are highly architecture dependant.
// the only way I could reconstruct them for machines I don't
// have is to browse the kernel source. So if your arch isn't
// supported, tell me you want it written in.
switch ($key) {
case 'model name':
$results['model'] = $value;
break;
case 'cpu MHz':
$results['cpuspeed'] = sprintf('%.2f', $value);
break;
case 'cycle frequency [Hz]': // For Alpha arch - 2.2.x
$results['cpuspeed'] = sprintf('%.2f', $value / 1000000);
break;
case 'clock': // For PPC arch (damn borked POS)
$results['cpuspeed'] = sprintf('%.2f', $value);
break;
case 'cpu': // For PPC arch (damn borked POS)
$results['model'] = $value;
break;
case 'L2 cache': // More for PPC
$results['cache'] = $value;
break;
case 'revision': // For PPC arch (damn borked POS)
$results['model'] .= ' ( rev: ' . $value . ')';
break;
case 'cpu model': // For Alpha arch - 2.2.x
$results['model'] .= ' (' . $value . ')';
break;
case 'cache size':
$results['cache'] = $value;
break;
case 'bogomips':
$results['bogomips'] += $value;
break;
case 'BogoMIPS': // For alpha arch - 2.2.x
$results['bogomips'] += $value;
break;
case 'BogoMips': // For sparc arch
$results['bogomips'] += $value;
break;
case 'cpus detected': // For Alpha arch - 2.2.x
$results['cpus'] += $value;
break;
case 'system type': // Alpha arch - 2.2.x
$results['model'] .= ', ' . $value . ' ';
break;
case 'platform string': // Alpha arch - 2.2.x
$results['model'] .= ' (' . $value . ')';
break;
case 'processor':
$results['cpus'] += 1;
break;
case 'Cpu0ClkTck': // Linux sparc64
$results['cpuspeed'] = sprintf('%.2f', hexdec($value) / 1000000);
break;
case 'Cpu0Bogo': // Linux sparc64 & sparc32
$results['bogomips'] = $value;
break;
case 'ncpus probed': // Linux sparc64 & sparc32
$results['cpus'] = $value;
break;
}
}
}
// sparc64 specific code follows
// This adds the ability to display the cache that a CPU has
// Originally made by Sven Blumenstein <bazik@gentoo.org> in 2004
// Modified by Tom Weustink <freshy98@gmx.net> in 2004
$sparclist = array('SUNW,UltraSPARC@0,0', 'SUNW,UltraSPARC-II@0,0', 'SUNW,UltraSPARC@1c,0', 'SUNW,UltraSPARC-IIi@1c,0', 'SUNW,UltraSPARC-II@1c,0', 'SUNW,UltraSPARC-IIe@0,0');
foreach ($sparclist as $name) {
$buf = rfts( '/proc/openprom/' . $name . '/ecache-size',1 , 32, false );
if( $buf != "ERROR" ) {
$results['cache'] = base_convert($buf, 16, 10)/1024 . ' KB';
}
}
// sparc64 specific code ends
// XScale detection code
if ( $results['cpus'] == 0 ) {
foreach( $bufe as $buf ) {
$fields = preg_split('/\s*:\s*/', trim($buf), 2);
if (sizeof($fields) == 2) {
list($key, $value) = $fields;
switch($key) {
case 'Processor':
$results['cpus'] += 1;
$results['model'] = $value;
break;
case 'BogoMIPS': //BogoMIPS are not BogoMIPS on this CPU, it's the speed, no BogoMIPS available
$results['cpuspeed'] = $value;
break;
case 'I size':
$results['cache'] = $value;
break;
case 'D size':
$results['cache'] += $value;
break;
}
}
}
$results['cache'] = $results['cache'] / 1024 . " KB";
}
}
$keys = array_keys($results);
$keys2be = array('model', 'cpuspeed', 'cache', 'bogomips', 'cpus');
while ($ar_buf = each($keys2be)) {
if (! in_array($ar_buf[1], $keys)) {
$results[$ar_buf[1]] = 'N.A.';
}
}
$buf = rfts( '/proc/acpi/thermal_zone/THRM/temperature', 1, 4096, false );
if ( $buf != "ERROR" ) {
$results['temp'] = substr( $buf, 25, 2 );
}
return $results;
}
 
function pci () {
$arrResults = array();
$booDevice = false;
if( ! $arrResults = $this->parser->parse_lspci() ) {
$strBuf = rfts( '/proc/pci', 0, 4096, false );
if( $strBuf != "ERROR" ) {
$arrBuf = explode( "\n", $strBuf );
foreach( $arrBuf as $strLine ) {
if( preg_match( '/Bus/', $strLine ) ) {
$booDevice = true;
continue;
}
if( $booDevice ) {
list( $strKey, $strValue ) = explode( ': ', $strLine, 2 );
if( ! preg_match( '/bridge/i', $strKey ) && ! preg_match( '/USB/i ', $strKey ) ) {
$arrResults[] = preg_replace( '/\([^\)]+\)\.$/', '', trim( $strValue ) );
}
$booDevice = false;
}
}
asort( $arrResults );
}
}
return $arrResults;
}
 
function ide () {
$results = array();
$bufd = gdc( '/proc/ide', false );
 
foreach( $bufd as $file ) {
if (preg_match('/^hd/', $file)) {
$results[$file] = array();
$buf = rfts("/proc/ide/" . $file . "/media", 1 );
if ( $buf != "ERROR" ) {
$results[$file]['media'] = trim($buf);
if ($results[$file]['media'] == 'disk') {
$results[$file]['media'] = 'Hard Disk';
$buf = rfts( "/proc/ide/" . $file . "/capacity", 1, 4096, false);
if( $buf == "ERROR" ) {
$buf = rfts( "/sys/block/" . $file . "/size", 1, 4096, false);
}
if ( $buf != "ERROR" ) {
$results[$file]['capacity'] = trim( $buf );
}
} elseif ($results[$file]['media'] == 'cdrom') {
$results[$file]['media'] = 'CD-ROM';
unset($results[$file]['capacity']);
}
} else {
unset($results[$file]);
}
 
$buf = rfts( "/proc/ide/" . $file . "/model", 1 );
if ( $buf != "ERROR" ) {
$results[$file]['model'] = trim( $buf );
if (preg_match('/WDC/', $results[$file]['model'])) {
$results[$file]['manufacture'] = 'Western Digital';
} elseif (preg_match('/IBM/', $results[$file]['model'])) {
$results[$file]['manufacture'] = 'IBM';
} elseif (preg_match('/FUJITSU/', $results[$file]['model'])) {
$results[$file]['manufacture'] = 'Fujitsu';
} else {
$results[$file]['manufacture'] = 'Unknown';
}
}
}
}
 
asort($results);
return $results;
}
 
function scsi () {
$results = array();
$dev_vendor = '';
$dev_model = '';
$dev_rev = '';
$dev_type = '';
$s = 1;
$get_type = 0;
 
$bufr = execute_program('lsscsi', '-c', false);
if( $bufr == "ERROR" ) {
$bufr = rfts( '/proc/scsi/scsi', 0, 4096, false);
}
if ( $bufr != "ERROR" ) {
$bufe = explode("\n", $bufr);
foreach( $bufe as $buf ) {
if (preg_match('/Vendor/', $buf)) {
preg_match('/Vendor: (.*) Model: (.*) Rev: (.*)/i', $buf, $dev);
list($key, $value) = explode(': ', $buf, 2);
$dev_str = $value;
$get_type = true;
continue;
}
 
if ($get_type) {
preg_match('/Type:\s+(\S+)/i', $buf, $dev_type);
$results[$s]['model'] = "$dev[1] $dev[2] ($dev_type[1])";
$results[$s]['media'] = "Hard Disk";
$s++;
$get_type = false;
}
}
}
asort($results);
return $results;
}
 
function usb () {
$results = array();
$devnum = -1;
 
$bufr = execute_program('lsusb', '', false);
if( $bufr == "ERROR" ) {
$bufr = rfts( '/proc/bus/usb/devices', 0, 4096, false );
if ( $bufr != "ERROR" ) {
$bufe = explode("\n", $bufr);
foreach( $bufe as $buf ) {
if (preg_match('/^T/', $buf)) {
$devnum += 1;
$results[$devnum] = "";
} elseif (preg_match('/^S:/', $buf)) {
list($key, $value) = explode(': ', $buf, 2);
list($key, $value2) = explode('=', $value, 2);
if (trim($key) != "SerialNumber") {
$results[$devnum] .= " " . trim($value2);
$devstring = 0;
}
}
}
}
} else {
$bufe = explode( "\n", $bufr );
foreach( $bufe as $buf ) {
$device = preg_split("/ /", $buf, 7);
if( isset( $device[6] ) && trim( $device[6] ) != "" ) {
$results[$devnum++] = trim( $device[6] );
}
}
}
return $results;
}
 
function sbus () {
$results = array();
$_results[0] = "";
// TODO. Nothing here yet. Move along.
$results = $_results;
return $results;
}
 
function network () {
$results = array();
 
$bufr = rfts( '/proc/net/dev' );
if ( $bufr != "ERROR" ) {
$bufe = explode("\n", $bufr);
foreach( $bufe as $buf ) {
if (preg_match('/:/', $buf)) {
list($dev_name, $stats_list) = preg_split('/:/', $buf, 2);
$stats = preg_split('/\s+/', trim($stats_list));
$results[$dev_name] = array();
 
$results[$dev_name]['rx_bytes'] = $stats[0];
$results[$dev_name]['rx_packets'] = $stats[1];
$results[$dev_name]['rx_errs'] = $stats[2];
$results[$dev_name]['rx_drop'] = $stats[3];
 
$results[$dev_name]['tx_bytes'] = $stats[8];
$results[$dev_name]['tx_packets'] = $stats[9];
$results[$dev_name]['tx_errs'] = $stats[10];
$results[$dev_name]['tx_drop'] = $stats[11];
 
$results[$dev_name]['errs'] = $stats[2] + $stats[10];
$results[$dev_name]['drop'] = $stats[3] + $stats[11];
}
}
}
return $results;
}
 
function memory () {
$results['ram'] = array('total' => 0, 'free' => 0, 'used' => 0, 'percent' => 0);
$results['swap'] = array('total' => 0, 'free' => 0, 'used' => 0, 'percent' => 0);
$results['devswap'] = array();
 
$bufr = rfts( '/proc/meminfo' );
if ( $bufr != "ERROR" ) {
$bufe = explode("\n", $bufr);
foreach( $bufe as $buf ) {
if (preg_match('/^MemTotal:\s+(.*)\s*kB/i', $buf, $ar_buf)) {
$results['ram']['total'] = $ar_buf[1];
} else if (preg_match('/^MemFree:\s+(.*)\s*kB/i', $buf, $ar_buf)) {
$results['ram']['free'] = $ar_buf[1];
} else if (preg_match('/^Cached:\s+(.*)\s*kB/i', $buf, $ar_buf)) {
$results['ram']['cached'] = $ar_buf[1];
} else if (preg_match('/^Buffers:\s+(.*)\s*kB/i', $buf, $ar_buf)) {
$results['ram']['buffers'] = $ar_buf[1];
}
}
 
$results['ram']['used'] = $results['ram']['total'] - $results['ram']['free'];
$results['ram']['percent'] = round(($results['ram']['used'] * 100) / $results['ram']['total']);
// values for splitting memory usage
if (isset($results['ram']['cached']) && isset($results['ram']['buffers'])) {
$results['ram']['app'] = $results['ram']['used'] - $results['ram']['cached'] - $results['ram']['buffers'];
$results['ram']['app_percent'] = round(($results['ram']['app'] * 100) / $results['ram']['total']);
$results['ram']['buffers_percent'] = round(($results['ram']['buffers'] * 100) / $results['ram']['total']);
$results['ram']['cached_percent'] = round(($results['ram']['cached'] * 100) / $results['ram']['total']);
}
 
$bufr = rfts( '/proc/swaps' );
if ( $bufr != "ERROR" ) {
$swaps = explode("\n", $bufr);
for ($i = 1; $i < (sizeof($swaps)); $i++) {
if( trim( $swaps[$i] ) != "" ) {
$ar_buf = preg_split('/\s+/', $swaps[$i], 6);
$results['devswap'][$i - 1] = array();
$results['devswap'][$i - 1]['dev'] = $ar_buf[0];
$results['devswap'][$i - 1]['total'] = $ar_buf[2];
$results['devswap'][$i - 1]['used'] = $ar_buf[3];
$results['devswap'][$i - 1]['free'] = ($results['devswap'][$i - 1]['total'] - $results['devswap'][$i - 1]['used']);
$results['devswap'][$i - 1]['percent'] = round(($ar_buf[3] * 100) / $ar_buf[2]);
$results['swap']['total'] += $ar_buf[2];
$results['swap']['used'] += $ar_buf[3];
$results['swap']['free'] = $results['swap']['total'] - $results['swap']['used'];
$results['swap']['percent'] = round(($results['swap']['used'] * 100) / $results['swap']['total']);
}
}
}
}
return $results;
}
function filesystems () {
return $this->parser->parse_filesystems();
}
 
function distro () {
return $this->distro;
}
 
function distroicon () {
return $this->icon;
}
 
}
 
?>
/web/acc/phpsysinfo/includes/os/class.Darwin.inc.php
0,0 → 1,198
<?php
 
// phpSysInfo - A PHP System Information Script
// http://phpsysinfo.sourceforge.net/
 
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
 
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
 
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
// $Id: class.Darwin.inc.php,v 1.33 2006/06/14 16:36:34 bigmichi1 Exp $
if (!defined('IN_PHPSYSINFO')) {
die("No Hacking");
}
 
require_once(APP_ROOT . '/includes/os/class.BSD.common.inc.php');
 
$error->addWarning("The Darwin version of phpSysInfo is work in progress, some things currently don't work");
 
class sysinfo extends bsd_common {
var $cpu_regexp;
var $scsi_regexp;
var $parser;
// Our contstructor
// this function is run on the initialization of this class
function sysinfo () {
// $this->cpu_regexp = "CPU: (.*) \((.*)-MHz (.*)\)";
// $this->scsi_regexp1 = "^(.*): <(.*)> .*SCSI.*device";
$this->cpu_regexp2 = "/(.*) ([0-9]+) ([0-9]+) ([0-9]+) ([0-9]+)/";
$this->parser = new Parser();
}
 
function grab_key ($key) {
$s = execute_program('sysctl', $key);
$s = ereg_replace($key . ': ', '', $s);
$s = ereg_replace($key . ' = ', '', $s); // fix Apple set keys
return $s;
}
 
function grab_ioreg ($key) {
$s = execute_program('ioreg', '-cls "' . $key . '" | grep "' . $key . '"'); //ioreg -cls "$key" | grep "$key"
$s = ereg_replace('\|', '', $s);
$s = ereg_replace('\+\-\o', '', $s);
$s = ereg_replace('[ ]+', '', $s);
$s = ereg_replace('<[^>]+>', '', $s); // remove possible XML conflicts
 
return $s;
}
 
function get_sys_ticks () {
$a = execute_program('sysctl', '-n kern.boottime'); // get boottime (value in seconds)
$sys_ticks = time() - $a;
 
return $sys_ticks;
}
 
function cpu_info () {
$results = array();
// $results['model'] = $this->grab_key('hw.model'); // need to expand this somehow...
// $results['model'] = $this->grab_key('hw.machine');
$results['model'] = ereg_replace('Processor type: ', '', execute_program('hostinfo', '| grep "Processor type"')); // get processor type
$results['cpus'] = $this->grab_key('hw.ncpu');
$results['cpuspeed'] = round($this->grab_key('hw.cpufrequency') / 1000000); // return cpu speed - Mhz
$results['busspeed'] = round($this->grab_key('hw.busfrequency') / 1000000); // return bus speed - Mhz
$results['cache'] = round($this->grab_key('hw.l2cachesize') / 1024); // return l2 cache
 
if (($this->grab_key('hw.model') == "PowerMac3,6") && ($results['cpus'] == "2")) { $results['model'] = 'Dual G4 - (PowerPC 7450)';} // is Dual G4
if (($this->grab_key('hw.model') == "PowerMac7,2") && ($results['cpus'] == "2")) { $results['model'] = 'Dual G5 - (PowerPC 970)';} // is Dual G5
if (($this->grab_key('hw.model') == "PowerMac1,1") && ($results['cpus'] == "1")) { $results['model'] = 'B&W G3 - (PowerPC 750)';} // is B&W G3
 
return $results;
}
// get the pci device information out of ioreg
function pci () {
$results = array();
$s = $this->grab_ioreg('IOPCIDevice');
 
$lines = explode("\n", $s);
for ($i = 0, $max = sizeof($lines); $i < $max; $i++) {
$ar_buf = preg_split("/\s+/", $lines[$i], 19);
$results[$i] = $ar_buf[0];
}
asort($results);
return array_values(array_unique($results));
}
// get the ide device information out of ioreg
function ide () {
$results = array();
// ioreg | grep "Media <class IOMedia>"
$s = $this->grab_ioreg('IOATABlockStorageDevice');
 
$lines = explode("\n", $s);
$j = 0;
for ($i = 0, $max = sizeof($lines); $i < $max; $i++) {
$ar_buf = preg_split("/\/\//", $lines[$i], 19);
 
if ( isset( $ar_buf[1] ) && $ar_buf[1] == 'class IOMedia' && preg_match('/Media/', $ar_buf[0])) {
$results[$j++]['model'] = $ar_buf[0];
}
}
asort($results);
return array_values(array_unique($results));
}
 
function memory () {
$s = $this->grab_key('hw.memsize');
 
$results['ram'] = array();
$results['swap'] = array();
$results['devswap'] = array();
$pstat = execute_program('vm_stat'); // use darwin's vm_stat
$lines = explode("\n", $pstat);
for ($i = 0, $max = sizeof($lines); $i < $max; $i++) {
$ar_buf = preg_split("/\s+/", $lines[$i], 19);
 
if ($i == 1) {
$results['ram']['free'] = $ar_buf[2] * 4; // calculate free memory from page sizes (each page = 4MB)
}
}
 
$results['ram']['total'] = $s / 1024;
$results['ram']['shared'] = 0;
$results['ram']['buffers'] = 0;
$results['ram']['used'] = $results['ram']['total'] - $results['ram']['free'];
$results['ram']['cached'] = 0;
 
$results['ram']['percent'] = round(($results['ram']['used'] * 100) / $results['ram']['total']);
// need to fix the swap info...
// meanwhile silence and / or disable the swap information
$pstat = execute_program('swapinfo', '-k', false);
if( $pstat != "ERROR" ) {
$lines = explode("\n", $pstat);
 
for ($i = 0, $max = sizeof($lines); $i < $max; $i++) {
$ar_buf = preg_split("/\s+/", $lines[$i], 6);
if ($i == 0) {
$results['swap']['total'] = 0;
$results['swap']['used'] = 0;
$results['swap']['free'] = 0;
} else {
$results['swap']['total'] = $results['swap']['total'] + $ar_buf[1];
$results['swap']['used'] = $results['swap']['used'] + $ar_buf[2];
$results['swap']['free'] = $results['swap']['free'] + $ar_buf[3];
}
}
$results['swap']['percent'] = round(($results['swap']['used'] * 100) / $results['swap']['total']);
}
return $results;
}
 
function network () {
$netstat = execute_program('netstat', '-nbdi | cut -c1-24,42- | grep Link');
$lines = explode("\n", $netstat);
$results = array();
for ($i = 0, $max = sizeof($lines); $i < $max; $i++) {
$ar_buf = preg_split("/\s+/", $lines[$i], 10);
if (!empty($ar_buf[0])) {
$results[$ar_buf[0]] = array();
 
$results[$ar_buf[0]]['rx_bytes'] = $ar_buf[5];
$results[$ar_buf[0]]['rx_packets'] = $ar_buf[3];
$results[$ar_buf[0]]['rx_errs'] = $ar_buf[4];
$results[$ar_buf[0]]['rx_drop'] = isset( $ar_buf[10] ) ? $ar_buf[10] : 0;
 
$results[$ar_buf[0]]['tx_bytes'] = $ar_buf[8];
$results[$ar_buf[0]]['tx_packets'] = $ar_buf[6];
$results[$ar_buf[0]]['tx_errs'] = $ar_buf[7];
$results[$ar_buf[0]]['tx_drop'] = isset( $ar_buf[10] ) ? $ar_buf[10] : 0;
 
$results[$ar_buf[0]]['errs'] = $ar_buf[4] + $ar_buf[7];
$results[$ar_buf[0]]['drop'] = isset( $ar_buf[10] ) ? $ar_buf[10] : 0;
}
}
return $results;
}
 
function distroicon () {
$result = 'Darwin.png';
return($result);
}
 
}
 
?>
/web/acc/phpsysinfo/includes/os/class.parseProgs.inc.php
0,0 → 1,159
<?php
/***************************************************************************
* Copyright (C) 2006 by phpSysInfo - A PHP System Information Script *
* http://phpsysinfo.sourceforge.net/ *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the *
* Free Software Foundation, Inc., *
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
***************************************************************************/
 
// $Id: class.parseProgs.inc.php,v 1.12 2007/02/01 17:37:06 bigmichi1 Exp $
 
class Parser {
var $debug = false;
var $df_param = "";
function parse_lspci() {
$arrResults = array();
if ( ( $strBuff = execute_program( "lspci", "", $this->debug ) ) != "ERROR" ) {
$arrLines = explode( "\n", $strBuff );
foreach( $arrLines as $strLine ) {
list( $strAddr, $strName) = explode( ' ', trim( $strLine ), 2 );
$strName = preg_replace( '/\(.*\)/', '', $strName);
$arrResults[] = $strName;
}
}
if( empty( $arrResults ) ) {
return false;
} else {
asort( $arrResults );
return $arrResults;
}
}
function parse_pciconf() {
$arrResults = array();
$intS = 0;
if( ( $strBuff = execute_program( "pciconf", "-lv", $this->debug ) ) != "ERROR" ) {
$arrLines = explode( "\n", $strBuff );
foreach( $arrLines as $strLine ) {
if( preg_match( "/(.*) = '(.*)'/", $strLine, $arrParts ) ) {
if( trim( $arrParts[1] ) == "vendor" ) {
$arrResults[$intS] = trim( $arrParts[2] );
} elseif( trim( $arrParts[1]) == "device" ) {
$arrResults[$intS] .= " - " . trim( $arrParts[2] );
$intS++;
}
}
}
}
if( empty( $arrResults ) ) {
return false;
} else {
asort( $arrResults );
return $arrResults;
}
}
function parse_filesystems() {
global $show_bind, $show_inodes;
$results = array();
$j = 0;
$df = execute_program('df', '-k' . $this->df_param );
$df = preg_split("/\n/", $df, -1, PREG_SPLIT_NO_EMPTY);
sort($df);
if( $show_inodes ) {
$df2 = execute_program('df', '-i' . $this->df_param );
$df2 = preg_split("/\n/", $df2, -1, PREG_SPLIT_NO_EMPTY);
sort( $df2 );
}
$mount = execute_program('mount');
$mount = preg_split("/\n/", $mount, -1, PREG_SPLIT_NO_EMPTY);
sort($mount);
foreach( $df as $df_line) {
$df_buf1 = preg_split("/(\%\s)/", $df_line, 2);
if( count($df_buf1) != 2) {
continue;
}
preg_match("/(.*)(\s+)(([0-9]+)(\s+)([0-9]+)(\s+)([0-9]+)(\s+)([0-9]+)$)/", $df_buf1[0], $df_buf2);
$df_buf = array($df_buf2[1], $df_buf2[4], $df_buf2[6], $df_buf2[8], $df_buf2[10], $df_buf1[1]);
if( $show_inodes ) {
preg_match_all("/([0-9]+)%/", $df2[$j + 1], $inode_buf, PREG_SET_ORDER);
}
if( count($df_buf) == 6 ) {
$df_buf[5] = trim( $df_buf[5] );
if( hide_mount( $df_buf[5] ) ) {
continue;
}
$df_buf[0] = trim( str_replace("\$", "\\$", $df_buf[0] ) );
$current = 0;
foreach( $mount as $mount_line ) {
if ( preg_match("#" . $df_buf[0] . " on " . $df_buf[5] . " type (.*) \((.*)\)#", $mount_line, $mount_buf) ) {
$mount_buf[1] .= "," . $mount_buf[2];
} elseif ( !preg_match("#" . $df_buf[0] . "(.*) on " . $df_buf[5] . " \((.*)\)#", $mount_line, $mount_buf) ) {
continue;
}
$strFstype = substr( $mount_buf[1], 0, strpos( $mount_buf[1], "," ) );
if( hide_fstype( $strFstype ) ) {
continue;
}
$current++;
if( $show_bind || !stristr($mount_buf[2], "bind")) {
$results[$j] = array();
$results[$j]['disk'] = str_replace( "\\$", "\$", $df_buf[0] );
$results[$j]['size'] = $df_buf[1];
$results[$j]['used'] = $df_buf[2];
$results[$j]['free'] = $df_buf[3];
// --> Bug 1527673
if( $results[$j]['used'] < 0 ) {
$results[$j]['size'] = $results[$j]['free'];
$results[$j]['free'] = 0;
$results[$j]['used'] = $results[$j]['size'];
}
// <-- Bug 1527673
// --> Bug 1649430
if( $results[$j]['size'] == 0 ) {
break;
} else {
$results[$j]['percent'] = round(($results[$j]['used'] * 100) / $results[$j]['size']);
}
// <-- Bug 1649430
$results[$j]['mount'] = $df_buf[5];
$results[$j]['fstype'] = $strFstype;
$results[$j]['options'] = substr( $mount_buf[1], strpos( $mount_buf[1], "," ) + 1, strlen( $mount_buf[1] ) );
if( $show_inodes && isset($inode_buf[ count( $inode_buf ) - 1][1]) ) {
$results[$j]['inodes'] = $inode_buf[ count( $inode_buf ) - 1][1];
}
$j++;
unset( $mount[$current - 1] );
sort( $mount );
break;
}
}
}
}
return $results;
}
}
?>
/web/acc/phpsysinfo/includes/os/class.SunOS.inc.php
0,0 → 1,240
<?php
 
// phpSysInfo - A PHP System Information Script
// http://phpsysinfo.sourceforge.net/
 
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
 
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
 
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
// $Id: class.SunOS.inc.php,v 1.24 2007/02/18 18:59:54 bigmichi1 Exp $
 
$error->addError("WARN", "The SunOS version of phpSysInfo is work in progress, some things currently don't work");
 
class sysinfo {
// Extract kernel values via kstat() interface
function kstat ($key) {
$m = execute_program('kstat', "-p d $key");
list($key, $value) = explode("\t", trim($m), 2);
return $value;
}
 
function vhostname () {
if (! ($result = getenv('SERVER_NAME'))) {
$result = 'N.A.';
}
return $result;
}
// get the IP address of our vhost name
function vip_addr () {
return gethostbyname($this->vhostname());
}
// get our canonical hostname
function chostname () {
if ($result = execute_program('uname', '-n')) {
$result = gethostbyaddr(gethostbyname($result));
} else {
$result = 'N.A.';
}
return $result;
}
// get the IP address of our canonical hostname
function ip_addr () {
if (!($result = getenv('SERVER_ADDR'))) {
$result = gethostbyname($this->chostname());
}
return $result;
}
 
function kernel () {
$os = execute_program('uname', '-s');
$version = execute_program('uname', '-r');
return $os . ' ' . $version;
}
 
function uptime () {
$result = time() - $this->kstat('unix:0:system_misc:boot_time');
 
return $result;
}
 
function users () {
$who = explode('=', execute_program('who', '-q'));
$result = $who[1];
return $result;
}
 
function loadavg ($bar = false) {
$load1 = $this->kstat('unix:0:system_misc:avenrun_1min');
$load5 = $this->kstat('unix:0:system_misc:avenrun_5min');
$load15 = $this->kstat('unix:0:system_misc:avenrun_15min');
$results['avg'] = array( round($load1/256, 2), round($load5/256, 2), round($load15/256, 2) );
return $results;
}
 
function cpu_info () {
$results = array();
$ar_buf = array();
 
$results['model'] = execute_program('uname', '-i');
$results['cpuspeed'] = $this->kstat('cpu_info:0:cpu_info0:clock_MHz');
$results['cache'] = $this->kstat('cpu_info:0:cpu_info0:cpu_type');
$results['cpus'] = $this->kstat('unix:0:system_misc:ncpus');
 
return $results;
}
 
function pci () {
// FIXME
$results = array();
return $results;
}
 
function ide () {
// FIXME
$results = array();
return $results;
}
 
function scsi () {
// FIXME
$results = array();
return $results;
}
 
function usb () {
// FIXME
$results = array();
return $results;
}
 
function sbus () {
$results = array();
$_results[0] = "";
// TODO. Nothing here yet. Move along.
$results = $_results;
return $results;
}
 
function network () {
$results = array();
 
$netstat = execute_program('netstat', '-ni | awk \'(NF ==10){print;}\'');
$lines = explode("\n", $netstat);
$results = array();
for ($i = 0, $max = sizeof($lines); $i < $max; $i++) {
$ar_buf = preg_split("/\s+/", $lines[$i]);
if ((!empty($ar_buf[0])) && ($ar_buf[0] != 'Name')) {
$results[$ar_buf[0]] = array();
 
$results[$ar_buf[0]]['rx_bytes'] = 0;
$results[$ar_buf[0]]['rx_packets'] = $ar_buf[4];
$results[$ar_buf[0]]['rx_errs'] = $ar_buf[5];
$results[$ar_buf[0]]['rx_drop'] = 0;
 
$results[$ar_buf[0]]['tx_bytes'] = 0;
$results[$ar_buf[0]]['tx_packets'] = $ar_buf[6];
$results[$ar_buf[0]]['tx_errs'] = $ar_buf[7];
$results[$ar_buf[0]]['tx_drop'] = 0;
 
$results[$ar_buf[0]]['errs'] = $ar_buf[5] + $ar_buf[
7];
$results[$ar_buf[0]]['drop'] = 0;
 
preg_match('/^(\D+)(\d+)$/', $ar_buf[0], $intf);
$prefix = $intf[1] . ':' . $intf[2] . ':' . $intf[1] . $intf[2] . ':';
$cnt = $this->kstat($prefix . 'drop');
 
if ($cnt > 0) {
$results[$ar_buf[0]]['rx_drop'] = $cnt;
}
$cnt = $this->kstat($prefix . 'obytes64');
 
if ($cnt > 0) {
$results[$ar_buf[0]]['tx_bytes'] = $cnt;
}
$cnt = $this->kstat($prefix . 'rbytes64');
 
if ($cnt > 0) {
$results[$ar_buf[0]]['rx_bytes'] = $cnt;
}
}
}
return $results;
}
 
function memory () {
$results['devswap'] = array();
 
$results['ram'] = array();
 
$pagesize = $this->kstat('unix:0:seg_cache:slab_size');
$results['ram']['total'] = $this->kstat('unix:0:system_pages:pagestotal') * $pagesize / 1024;
$results['ram']['used'] = $this->kstat('unix:0:system_pages:pageslocked') * $pagesize / 1024;
$results['ram']['free'] = $this->kstat('unix:0:system_pages:pagesfree') * $pagesize / 1024;
$results['ram']['shared'] = 0;
$results['ram']['buffers'] = 0;
$results['ram']['cached'] = 0;
 
$results['ram']['percent'] = round(($results['ram']['used'] * 100) / $results['ram']['total']);
 
$results['swap'] = array();
$results['swap']['total'] = $this->kstat('unix:0:vminfo:swap_avail') / 1024 / 1024;
$results['swap']['used'] = $this->kstat('unix:0:vminfo:swap_alloc') / 1024 / 1024;
$results['swap']['free'] = $this->kstat('unix:0:vminfo:swap_free') / 1024 / 1024;
$results['swap']['percent'] = round(($ar_buf[1] * 100) / $ar_buf[0]);
$results['swap']['percent'] = round(($results['swap']['used'] * 100) / $results['swap']['total']);
return $results;
}
 
function filesystems () {
$df = execute_program('df', '-k');
$mounts = explode("\n", $df);
 
$dftypes = execute_program('df', '-n');
$mounttypes = explode("\n", $dftypes);
 
for ($i = 1, $j = 0, $max = sizeof($mounts); $i < $max; $i++) {
$ar_buf = preg_split('/\s+/', $mounts[$i], 6);
$ty_buf = explode(':', $mounttypes[$i-1], 2);
 
if (hide_mount($ar_buf[5])) {
continue;
}
 
$results[$j] = array();
 
$results[$j]['disk'] = $ar_buf[0];
$results[$j]['size'] = $ar_buf[1];
$results[$j]['used'] = $ar_buf[2];
$results[$j]['free'] = $ar_buf[3];
$results[$j]['percent'] = round(($results[$j]['used'] * 100) / $results[$j]['size']);
$results[$j]['mount'] = $ar_buf[5];
$results[$j]['fstype'] = $ty_buf[1];
$j++;
}
return $results;
}
function distro () {
$result = 'SunOS';
return($result);
}
 
function distroicon () {
$result = 'SunOS.png';
return($result);
}
}
 
?>
/web/acc/phpsysinfo/includes/os/index.html
--- includes/os/class.OpenBSD.inc.php (nonexistent)
+++ includes/os/class.OpenBSD.inc.php (revision 325)
@@ -0,0 +1,110 @@
+<?php
+
+// phpSysInfo - A PHP System Information Script
+// http://phpsysinfo.sourceforge.net/
+
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+// $Id: class.OpenBSD.inc.php,v 1.21 2006/04/18 17:46:15 bigmichi1 Exp $
+if (!defined('IN_PHPSYSINFO')) {
+ die("No Hacking");
+}
+
+require_once(APP_ROOT . '/includes/os/class.BSD.common.inc.php');
+
+class sysinfo extends bsd_common {
+ var $cpu_regexp = "";
+ var $scsi_regexp1 = "";
+ var $scsi_regexp2 = "";
+ var $cpu_regexp2 = "";
+
+ // Our contstructor
+ // this function is run on the initialization of this class
+ function sysinfo () {
+ $this->bsd_common();
+ $this->cpu_regexp = "^cpu(.*) (.*) MHz";
+ $this->scsi_regexp1 = "^(.*) at scsibus.*: <(.*)> .*";
+ $this->scsi_regexp2 = "^(da[0-9]): (.*)MB ";
+ $this->cpu_regexp2 = "/(.*),(.*),(.*),(.*),(.*)/";
+ $this->pci_regexp1 = '/(.*) at pci[0-9] .* "(.*)"/';
+ $this->pci_regexp2 = '/"(.*)" (.*).* at [.0-9]+ irq/';
+ }
+
+ function get_sys_ticks () {
+ $a = $this->grab_key('kern.boottime');
+ $sys_ticks = time() - $a;
+ return $sys_ticks;
+ }
+
+ function network () {
+ $netstat_b = execute_program('netstat', '-nbdi | cut -c1-25,44- | grep Link | grep -v \'* \'');
+ $netstat_n = execute_program('netstat', '-ndi | cut -c1-25,44- | grep Link | grep -v \'* \'');
+ $lines_b = explode("\n", $netstat_b);
+ $lines_n = explode("\n", $netstat_n);
+ $results = array();
+ for ($i = 0, $max = sizeof($lines_b); $i < $max; $i++) {
+ $ar_buf_b = preg_split("/\s+/", $lines_b[$i]);
+ $ar_buf_n = preg_split("/\s+/", $lines_n[$i]);
+ if (!empty($ar_buf_b[0]) && !empty($ar_buf_n[3])) {
+ $results[$ar_buf_b[0]] = array();
+
+ $results[$ar_buf_b[0]]['rx_bytes'] = $ar_buf_b[3];
+ $results[$ar_buf_b[0]]['rx_packets'] = $ar_buf_n[3];
+ $results[$ar_buf_b[0]]['rx_errs'] = $ar_buf_n[4];
+ $results[$ar_buf_b[0]]['rx_drop'] = $ar_buf_n[8];
+
+ $results[$ar_buf_b[0]]['tx_bytes'] = $ar_buf_b[4];
+ $results[$ar_buf_b[0]]['tx_packets'] = $ar_buf_n[5];
+ $results[$ar_buf_b[0]]['tx_errs'] = $ar_buf_n[6];
+ $results[$ar_buf_b[0]]['tx_drop'] = $ar_buf_n[8];
+
+ $results[$ar_buf_b[0]]['errs'] = $ar_buf_n[4] + $ar_buf_n[6];
+ $results[$ar_buf_b[0]]['drop'] = $ar_buf_n[8];
+ }
+ }
+ return $results;
+ }
+ // get the ide device information out of dmesg
+ function ide () {
+ $results = array();
+
+ $s = 0;
+ for ($i = 0, $max = count($this->read_dmesg()); $i < $max; $i++) {
+ $buf = $this->dmesg[$i];
+ if (preg_match('/^(.*) at pciide[0-9] (.*): <(.*)>/', $buf, $ar_buf)) {
+ $s = $ar_buf[1];
+ $results[$s]['model'] = $ar_buf[3];
+ $results[$s]['media'] = 'Hard Disk';
+ // now loop again and find the capacity
+ for ($j = 0, $max1 = count($this->read_dmesg()); $j < $max1; $j++) {
+ $buf_n = $this->dmesg[$j];
+ if (preg_match("/^($s): (.*), (.*), (.*)MB, .*$/", $buf_n, $ar_buf_n)) {
+ $results[$s]['capacity'] = $ar_buf_n[4] * 2048 * 1.049;;
+ }
+ }
+ }
+ }
+ asort($results);
+ return $results;
+ }
+
+ function distroicon () {
+ $result = 'OpenBSD.png';
+ return($result);
+ }
+
+}
+
+?>
/web/acc/phpsysinfo/includes/os/class.FreeBSD.inc.php
0,0 → 1,108
<?php
 
// phpSysInfo - A PHP System Information Script
// http://phpsysinfo.sourceforge.net/
 
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
 
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
 
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
// $Id: class.FreeBSD.inc.php,v 1.17 2006/04/18 16:22:26 bigmichi1 Exp $
if (!defined('IN_PHPSYSINFO')) {
die("No Hacking");
}
 
require_once(APP_ROOT . '/includes/os/class.BSD.common.inc.php');
 
class sysinfo extends bsd_common {
var $cpu_regexp = "";
var $scsi_regexp1 = "";
var $scsi_regexp2 = "";
var $cpu_regexp2 = "";
// Our contstructor
// this function is run on the initialization of this class
function sysinfo () {
$this->bsd_common();
$this->cpu_regexp = "CPU: (.*) \((.*)-MHz (.*)\)";
$this->scsi_regexp1 = "^(.*): <(.*)> .*SCSI.*device";
$this->scsi_regexp2 = "^(da[0-9]): (.*)MB ";
$this->cpu_regexp2 = "/(.*) ([0-9]+) ([0-9]+) ([0-9]+) ([0-9]+)/";
}
 
function get_sys_ticks () {
$s = explode(' ', $this->grab_key('kern.boottime'));
$a = ereg_replace('{ ', '', $s[3]);
$sys_ticks = time() - $a;
return $sys_ticks;
}
 
function network () {
$netstat = execute_program('netstat', '-nibd | grep Link');
$lines = explode("\n", $netstat);
$results = array();
for ($i = 0, $max = sizeof($lines); $i < $max; $i++) {
$ar_buf = preg_split("/\s+/", $lines[$i]);
if (!empty($ar_buf[0])) {
$results[$ar_buf[0]] = array();
 
if (strlen($ar_buf[3]) < 15) {
$results[$ar_buf[0]]['rx_bytes'] = $ar_buf[5];
$results[$ar_buf[0]]['rx_packets'] = $ar_buf[3];
$results[$ar_buf[0]]['rx_errs'] = $ar_buf[4];
$results[$ar_buf[0]]['rx_drop'] = $ar_buf[10];
 
$results[$ar_buf[0]]['tx_bytes'] = $ar_buf[8];
$results[$ar_buf[0]]['tx_packets'] = $ar_buf[6];
$results[$ar_buf[0]]['tx_errs'] = $ar_buf[7];
$results[$ar_buf[0]]['tx_drop'] = $ar_buf[10];
 
$results[$ar_buf[0]]['errs'] = $ar_buf[4] + $ar_buf[7];
$results[$ar_buf[0]]['drop'] = $ar_buf[10];
} else {
$results[$ar_buf[0]]['rx_bytes'] = $ar_buf[6];
$results[$ar_buf[0]]['rx_packets'] = $ar_buf[4];
$results[$ar_buf[0]]['rx_errs'] = $ar_buf[5];
$results[$ar_buf[0]]['rx_drop'] = $ar_buf[11];
 
$results[$ar_buf[0]]['tx_bytes'] = $ar_buf[9];
$results[$ar_buf[0]]['tx_packets'] = $ar_buf[7];
$results[$ar_buf[0]]['tx_errs'] = $ar_buf[8];
$results[$ar_buf[0]]['tx_drop'] = $ar_buf[11];
 
$results[$ar_buf[0]]['errs'] = $ar_buf[5] + $ar_buf[8];
$results[$ar_buf[0]]['drop'] = $ar_buf[11];
}
}
}
return $results;
}
 
function distroicon () {
$result = 'FreeBSD.png';
return($result);
}
function memory_additional($results) {
$pagesize = $this->grab_key("hw.pagesize");
$results['ram']['cached'] = $this->grab_key("vm.stats.vm.v_cache_count") * $pagesize / 1024;
$results['ram']['cached_percent'] = round( $results['ram']['cached'] * 100 / $results['ram']['total']);
$results['ram']['app'] = $this->grab_key("vm.stats.vm.v_active_count") * $pagesize / 1024;
$results['ram']['app_percent'] = round( $results['ram']['app'] * 100 / $results['ram']['total']);
$results['ram']['buffers'] = $results['ram']['used'] - $results['ram']['app'] - $results['ram']['cached'];
$results['ram']['buffers_percent'] = round( $results['ram']['buffers'] * 100 / $results['ram']['total']);
return $results;
}
}
 
?>
/web/acc/phpsysinfo/includes/system_header.php
0,0 → 1,55
<?php
/***************************************************************************
* Copyright (C) 2006 by phpSysInfo - A PHP System Information Script *
* http://phpsysinfo.sourceforge.net/ *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the *
* Free Software Foundation, Inc., *
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
***************************************************************************/
 
// $Id: system_header.php,v 1.30 2007/02/11 15:57:17 bigmichi1 Exp $
 
if( ! defined( 'IN_PHPSYSINFO' ) ) {
die( "No Hacking" );
}
 
setlocale( LC_ALL, $text['locale'] );
global $XPath;
 
header( "Cache-Control: no-cache, must-revalidate" );
if( ! isset( $charset ) ) {
$charset = "iso-8859-1";
}
header( "Content-Type: text/html; charset=" . $charset );
 
echo "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n";
echo "<html>\n";
echo created_by();
 
echo "<head>\n";
echo "\t<title>" . $text['title'], " -- ", $XPath->getData('/phpsysinfo/Vitals/Hostname'), " --</title>\n";
echo "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=" . $charset . "\">";
if( file_exists( APP_ROOT . "/templates/" . $template . "/" . $template . ".css" ) ) {
echo "\t<link rel=\"stylesheet\" type=\"text/css\" href=\"" . $webpath . "templates/" . $template . "/" . $template . ".css\">\n";
}
echo "</head>\n";
 
if( file_exists( APP_ROOT . "/templates/" . $template . "/images/" . $template . "_background.gif" ) ) {
echo "<body background=\"" . $webpath . "templates/" . $template . "/images/" . $template . "_background.gif\">";
} else {
echo "<body>\n";
}
 
?>
/web/acc/phpsysinfo/includes/indicator.php
0,0 → 1,62
<?php
/***************************************************************************
* Copyright (C) 2006 by phpSysInfo - A PHP System Information Script *
* http://phpsysinfo.sourceforge.net/ *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the *
* Free Software Foundation, Inc., *
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
***************************************************************************/
 
// $Id: indicator.php,v 1.4 2006/06/15 18:42:30 bigmichi1 Exp $
 
if ( ! defined( 'IN_PHPSYSINFO' ) ) {
die( "No Hacking" );
}
 
$start = $_GET['color1'];
$end = $_GET['color2'];
$percent = $_GET['percent'];
$height = $_GET['height'];
$width = 300;
 
sscanf( $start, "%2x%2x%2x", $rbase, $gbase, $bbase );
sscanf( $end, "%2x%2x%2x", $rend, $gend, $bend );
 
if( $rbase == $rend ) $rend = $rend - 1;
if( $gbase == $gend ) $gend = $gend - 1;
if( $bbase == $bend ) $bend = $bend - 1;
 
$rmod = ( $rend - $rbase ) / $width;
$gmod = ( $gend - $gbase ) / $width;
$bmod = ( $bend - $bbase ) / $width;
 
$image = imagecreatetruecolor( $width, $height );
imagefilledrectangle( $image, 0, 0, $width, $height, imagecolorallocate( $image, 255,255,255 ) );
$step = $width / 100;
 
for( $i = 0; $i < $percent * $step; $i = $i + $step + 1 ) {
$r = ( $rmod * $i ) + $rbase;
$g = ( $gmod * $i ) + $gbase;
$b = ( $bmod * $i ) + $bbase;
$color = imagecolorallocate( $image, $r, $g, $b );
imagefilledrectangle( $image, $i, 0, $i + $step, $height, $color );
}
 
imagerectangle( $image, 0, 0, $width - 1, $height - 1, imagecolorallocate( $image, 0, 0, 0 ) );
imagepng( $image );
imagedestroy( $image );
?>
/web/acc/phpsysinfo/includes/common_functions.php
0,0 → 1,439
<?php
/***************************************************************************
* Copyright (C) 2006 by phpSysInfo - A PHP System Information Script *
* http://phpsysinfo.sourceforge.net/ *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the *
* Free Software Foundation, Inc., *
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
***************************************************************************/
 
// $Id: common_functions.php,v 1.55 2007/02/20 19:20:20 bigmichi1 Exp $
 
// usefull during development
if( isset($showerrors) && $showerrors ) {
error_reporting( E_ALL | E_NOTICE );
} else {
error_reporting( E_ERROR | E_WARNING | E_PARSE );
}
 
// HTML/XML Comment
function created_by () {
global $VERSION;
return "<!--\n\tCreated By: phpSysInfo - " . $VERSION . "\n\thttp://phpsysinfo.sourceforge.net/\n-->\n";
}
 
// print out the bar graph
// $value as full percentages
// $maximim as current maximum
// $b as scale factor
// $type as filesystem type
function create_bargraph ($value, $maximum, $b, $type = "") {
global $webpath;
$textdir = direction();
$imgpath = $webpath . 'templates/' . TEMPLATE_SET . '/images/';
$maximum == 0 ? $barwidth = 0 : $barwidth = round((100 / $maximum) * $value) * $b;
$red = 90 * $b;
$yellow = 75 * $b;
if (!file_exists(APP_ROOT . "/templates/" . TEMPLATE_SET . "/images/nobar_left.gif")) {
if ($barwidth == 0) {
return '<img height="' . BAR_HEIGHT . '" alt="" src="' . $imgpath . 'bar_' . $textdir['left'] . '.gif">'
.'<img height="' . BAR_HEIGHT . '" alt="" src="' . $imgpath . 'bar_middle.gif" width="1">'
.'<img height="' . BAR_HEIGHT . '" alt="" src="' . $imgpath . 'bar_' . $textdir['right'] . '.gif">';
} elseif ( file_exists( APP_ROOT . "/templates/" . TEMPLATE_SET . "/images/yellowbar_left.gif") && ( $barwidth > $yellow ) && ( $barwidth < $red ) ) {
return '<img height="' . BAR_HEIGHT . '" alt="" src="' . $imgpath . 'yellowbar_' . $textdir['left'] . '.gif">'
.'<img height="' . BAR_HEIGHT . '" alt="" src="' . $imgpath . 'yellowbar_middle.gif" width="' . $barwidth . '">'
.'<img height="' . BAR_HEIGHT . '" alt="" src="' . $imgpath . 'yellowbar_' . $textdir['right'] . '.gif">';
} elseif ( ( $barwidth < $red ) || ( $type == "iso9660" ) || ( $type == "CDFS" ) ) {
return '<img height="' . BAR_HEIGHT . '" alt="" src="' . $imgpath . 'bar_' . $textdir['left'] . '.gif">'
.'<img height="' . BAR_HEIGHT . '" alt="" src="' . $imgpath . 'bar_middle.gif" width="' . $barwidth . '">'
.'<img height="' . BAR_HEIGHT . '" alt="" src="' . $imgpath . 'bar_' . $textdir['right'] . '.gif">';
} else {
return '<img height="' . BAR_HEIGHT . '" alt="" src="' . $imgpath . 'redbar_' . $textdir['left'] . '.gif">'
.'<img height="' . BAR_HEIGHT . '" alt="" src="' . $imgpath . 'redbar_middle.gif" width="' . $barwidth . '">'
.'<img height="' . BAR_HEIGHT . '" alt="" src="' . $imgpath . 'redbar_' . $textdir['right'] . '.gif">';
}
} else {
if ($barwidth == 0) {
return '<img height="' . BAR_HEIGHT . '" alt="" src="' . $imgpath . 'nobar_' . $textdir['left'] . '.gif">'
.'<img height="' . BAR_HEIGHT . '" alt="" src="' . $imgpath . 'nobar_middle.gif" width="' . ( 100 * $b ) . '">'
.'<img height="' . BAR_HEIGHT . '" alt="" src="' . $imgpath . 'nobar_' . $textdir['right'] . '.gif">';
} elseif ( file_exists( APP_ROOT . "/templates/" . TEMPLATE_SET . "/images/yellowbar_left.gif" ) && ( $barwidth > $yellow ) && ( $barwidth < $red ) ) {
return '<img height="' . BAR_HEIGHT . '" alt="" src="' . $imgpath . 'yellowbar_' . $textdir['left'] . '.gif">'
.'<img height="' . BAR_HEIGHT . '" alt="" src="' . $imgpath . 'yellowbar_middle.gif" width="' . $barwidth . '">'
.'<img height="' . BAR_HEIGHT . '" alt="" src="' . $imgpath . 'nobar_middle.gif" width="' . ( ( 100 * $b ) - $barwidth ) . '">'
.'<img height="' . BAR_HEIGHT . '" alt="" src="' . $imgpath . 'nobar_' . $textdir['right'] . '.gif">';
} elseif ( ( $barwidth < $red ) || ( $type == "iso9660" ) || ( $type == "CDFS" ) ) {
return '<img height="' . BAR_HEIGHT . '" alt="" src="' . $imgpath . 'bar_' . $textdir['left'] . '.gif">'
.'<img height="' . BAR_HEIGHT . '" alt="" src="' . $imgpath . 'bar_middle.gif" width="' . $barwidth . '">'
.'<img height="' . BAR_HEIGHT . '" alt="" src="' . $imgpath . 'nobar_middle.gif" width="' . ( ( 100 * $b ) - $barwidth ) . '">'
.'<img height="' . BAR_HEIGHT . '" alt="" src="' . $imgpath . 'nobar_' . $textdir['right'] . '.gif">';
} elseif ( $barwidth == ( 100 * $b ) ) {
return '<img height="' . BAR_HEIGHT . '" alt="" src="' . $imgpath . 'redbar_' . $textdir['left'] . '.gif">'
.'<img height="' . BAR_HEIGHT . '" alt="" src="' . $imgpath . 'redbar_middle.gif" width="' . ( 100 * $b ) . '">'
.'<img height="' . BAR_HEIGHT . '" alt="" src="' . $imgpath . 'redbar_' . $textdir['right'] . '.gif">';
} else {
return '<img height="' . BAR_HEIGHT . '" alt="" src="' . $imgpath . 'redbar_' . $textdir['left'] . '.gif">'
.'<img height="' . BAR_HEIGHT . '" alt="" src="' . $imgpath . 'redbar_middle.gif" width="' . $barwidth . '">'
.'<img height="' . BAR_HEIGHT . '" alt="" src="' . $imgpath . 'nobar_middle.gif" width="' . ( ( 100 * $b ) - $barwidth ) . '">'
.'<img height="' . BAR_HEIGHT . '" alt="" src="' . $imgpath . 'nobar_' . $textdir['right'] . '.gif">';
}
}
}
 
function create_bargraph_grad( $value, $maximum, $b, $type = "" ) {
global $webpath;
$maximum == 0 ? $barwidth = 0 : $barwidth = round( ( 100 / $maximum ) * $value );
$startColor = '0ef424'; // green
$endColor = 'ee200a'; // red
if ( $barwidth > 100 ) {
$barwidth = 0;
}
return '<img height="' . BAR_HEIGHT . '" width="300" src="' . $webpath . 'includes/indicator.php?height=' . BAR_HEIGHT . '&amp;percent=' . $barwidth . '&amp;color1=' . $startColor . '&amp;color2=' . $endColor . '" alt="">';
}
 
function direction() {
global $text_dir;
if( ! isset( $text_dir ) || ( $text_dir == "ltr" ) ) {
$arrResult['direction'] = "ltr";
$arrResult['left'] = "left";
$arrResult['right'] = "right";
} else {
$arrResult['direction'] = "rtl";
$arrResult['left'] = "right";
$arrResult['right'] = "left";
}
return $arrResult;
}
 
// Find a system program. Do path checking
function find_program ($strProgram) {
global $addpaths;
$arrPath = array( '/bin', '/sbin', '/usr/bin', '/usr/sbin', '/usr/local/bin', '/usr/local/sbin' );
if( isset( $addpaths ) && is_array( $addpaths ) ) {
$arrPath = array_merge( $arrPath, $addpaths );
}
if ( function_exists( "is_executable" ) ) {
foreach ( $arrPath as $strPath ) {
$strProgrammpath = $strPath . "/" . $strProgram;
if( is_executable( $strProgrammpath ) ) {
return $strProgrammpath;
}
}
} else {
return strpos( $strProgram, '.exe' );
}
}
 
// Execute a system program. return a trim()'d result.
// does very crude pipe checking. you need ' | ' for it to work
// ie $program = execute_program('netstat', '-anp | grep LIST');
// NOT $program = execute_program('netstat', '-anp|grep LIST');
function execute_program ($strProgramname, $strArgs = '', $booErrorRep = true ) {
global $error;
$strBuffer = '';
$strError = '';
$strProgram = find_program($strProgramname);
if ( ! $strProgram ) {
if( $booErrorRep ) {
$error->addError( 'find_program(' . $strProgramname . ')', 'program not found on the machine', __LINE__, __FILE__);
}
return "ERROR";
}
// see if we've gotten a |, if we have we need to do patch checking on the cmd
if( $strArgs ) {
$arrArgs = explode( ' ', $strArgs );
for( $i = 0; $i < count( $arrArgs ); $i++ ) {
if ( $arrArgs[$i] == '|' ) {
$strCmd = $arrArgs[$i + 1];
$strNewcmd = find_program( $strCmd );
$strArgs = ereg_replace( "\| " . $strCmd, "| " . $strNewcmd, $strArgs );
}
}
}
// no proc_open() below php 4.3
if( function_exists( 'proc_open' ) ) {
$descriptorspec = array(
0 => array("pipe", "r"), // stdin is a pipe that the child will read from
1 => array("pipe", "w"), // stdout is a pipe that the child will write to
2 => array("pipe", "w") // stderr is a pipe that the child will write to
);
$process = proc_open( $strProgram . " " . $strArgs, $descriptorspec, $pipes );
if( is_resource( $process ) ) {
while( !feof( $pipes[1] ) ) {
$strBuffer .= fgets( $pipes[1], 1024 );
}
fclose( $pipes[1] );
while( !feof( $pipes[2] ) ) {
$strError .= fgets( $pipes[2], 1024 );
}
fclose( $pipes[2] );
}
$return_value = proc_close( $process );
} else {
if( $fp = popen( "(" . $strProgram . " " . $strArgs . " > /dev/null) 3>&1 1>&2 2>&3", 'r' ) ) {
while( ! feof( $fp ) ) {
$strError .= fgets( $fp, 4096 );
}
pclose( $fp );
}
$strError = trim( $strError );
if( $fp = popen( $strProgram . " " . $strArgs, 'r' ) ) {
while( ! feof( $fp ) ) {
$strBuffer .= fgets( $fp, 4096 );
}
$return_value = pclose( $fp );
}
}
 
$strError = trim( $strError );
$strBuffer = trim( $strBuffer );
if( ! empty( $strError ) || $return_value <> 0 ) {
if( $booErrorRep ) {
$error->addError( $strProgram, $strError . "\nReturn value: " . $return_value, __LINE__, __FILE__);
}
}
return $strBuffer;
}
 
// A helper function, when passed a number representing KB,
// and optionally the number of decimal places required,
// it returns a formated number string, with unit identifier.
function format_bytesize ($intKbytes, $intDecplaces = 2) {
global $text;
$strSpacer = '&nbsp;';
if( $intKbytes > 1048576 ) {
$strResult = sprintf( '%.' . $intDecplaces . 'f', $intKbytes / 1048576 );
$strResult .= $strSpacer . $text['gb'];
} elseif( $intKbytes > 1024 ) {
$strResult = sprintf( '%.' . $intDecplaces . 'f', $intKbytes / 1024);
$strResult .= $strSpacer . $text['mb'];
} else {
$strResult = sprintf( '%.' . $intDecplaces . 'f', $intKbytes );
$strResult .= $strSpacer . $text['kb'];
}
return $strResult;
}
 
function format_speed( $intHz ) {
$strResult = "";
if( $intHz < 1000 ) {
$strResult = $intHz . " Mhz";
} else {
$strResult = round( $intHz / 1000, 2 ) . " GHz";
}
return $strResult;
}
 
function get_gif_image_height( $image ) {
// gives the height of the given GIF image, by reading it's LSD (Logical Screen Discriptor)
// by Edwin Meester aka MillenniumV3
// Header:
//3bytes Discription
// 3bytes Version
// LSD:
//2bytes Logical Screen Width
// 2bytes Logical Screen Height
// 1bit Global Color Table Flag
// 3bits Color Resolution
// 1bit Sort Flag
// 3bits Size of Global Color Table
// 1byte Background Color Index
// 1byte Pixel Aspect Ratio
// Open Image
$fp = fopen( $image, 'rb' );
// read Header + LSD
$strHeaderandlsd = fread( $fp, 13 );
fclose( $fp );
// calc Height from Logical Screen Height bytes
$intResult = ord( $strHeaderandlsd{8} ) + ord( $strHeaderandlsd{9} ) * 255;
return $intResult;
}
 
// Check if a string exist in the global $hide_mounts.
// Return true if this is the case.
function hide_mount( $strMount ) {
global $hide_mounts;
if( isset( $hide_mounts ) && is_array( $hide_mounts ) && in_array( $strMount, $hide_mounts ) ) {
return true;
} else {
return false;
}
}
 
// Check if a string exist in the global $hide_fstypes.
// Return true if this is the case.
function hide_fstype( $strFSType ) {
global $hide_fstypes;
if( isset( $hide_fstypes ) && is_array( $hide_fstypes ) && in_array( $strFSType, $hide_fstypes ) ) {
return true;
} else {
return false;
}
}
 
function uptime( $intTimestamp ) {
global $text;
$strUptime = '';
$intMin = $intTimestamp / 60;
$intHours = $intMin / 60;
$intDays = floor( $intHours / 24 );
$intHours = floor( $intHours - ( $intDays * 24 ) );
$intMin = floor( $intMin - ( $intDays * 60 * 24 ) - ( $intHours * 60 ) );
if( $intDays != 0 ) {
$strUptime .= $intDays. "&nbsp;" . $text['days'] . "&nbsp;";
}
if( $intHours != 0 ) {
$strUptime .= $intHours . "&nbsp;" . $text['hours'] . "&nbsp;";
}
$strUptime .= $intMin . "&nbsp;" . $text['minutes'];
return $strUptime;
}
 
//Replace some chars which are not valid in xml with iso-8859-1 encoding
function replace_specialchars( &$strXml ) {
$arrSearch = array( chr(174), chr(169), chr(228), chr(246), chr(252), chr(214), chr(220), chr(196) );
$arrReplace = array( "(R)", "(C)", "ae", "oe", "ue", "Oe", "Ue", "Ae" );
$strXml = str_replace( $arrSearch, $arrReplace, $strXml );
}
 
// find duplicate entrys and count them, show this value befor the duplicated name
function finddups( $arrInput ) {
$arrResult = array();
if( is_array( $arrInput ) ) {
$arrBuffer = array_count_values( $arrInput );
foreach( $arrBuffer as $strKey => $intValue) {
if( $intValue > 1 ) {
$arrResult[] = "(" . $intValue . "x) " . $strKey;
} else {
$arrResult[] = $strKey;
}
}
}
return $arrResult;
}
 
function rfts( $strFileName, $intLines = 0, $intBytes = 4096, $booErrorRep = true ) {
global $error;
$strFile = "";
$intCurLine = 1;
if( file_exists( $strFileName ) ) {
if( $fd = fopen( $strFileName, 'r' ) ) {
while( !feof( $fd ) ) {
$strFile .= fgets( $fd, $intBytes );
if( $intLines <= $intCurLine && $intLines != 0 ) {
break;
} else {
$intCurLine++;
}
}
fclose( $fd );
} else {
if( $booErrorRep ) {
$error->addError( 'fopen(' . $strFileName . ')', 'file can not read by phpsysinfo', __LINE__, __FILE__ );
}
return "ERROR";
}
} else {
if( $booErrorRep ) {
$error->addError( 'file_exists(' . $strFileName . ')', 'the file does not exist on your machine', __LINE__, __FILE__ );
}
return "ERROR";
}
return $strFile;
}
 
function gdc( $strPath, $booErrorRep = true ) {
global $error;
$arrDirectoryContent = array();
if( is_dir( $strPath ) ) {
if( $handle = opendir( $strPath ) ) {
while( ( $strFile = readdir( $handle ) ) !== false ) {
if( $strFile != "." && $strFile != ".." && $strFile != "CVS" ) {
$arrDirectoryContent[] = $strFile;
}
}
closedir( $handle );
} else {
if( $booErrorRep ) {
$error->addError( 'opendir(' . $strPath . ')', 'directory can not be read by phpsysinfo', __LINE__, __FILE__ );
}
}
} else {
if( $booErrorRep ) {
$error->addError( 'is_dir(' . $strPath . ')', 'directory does not exist on your machine', __LINE__, __FILE__ );
}
}
return $arrDirectoryContent;
}
 
function temperature( $floatTempC ) {
global $temperatureformat, $text, $error;
$strResult = "&nbsp;";
switch( strtoupper( $temperatureformat ) ) {
case "F":
$floatFahrenheit = $floatTempC * 1.8 + 32;
$strResult .= round( $floatFahrenheit ) . $text['degreeF'];
break;
case "C":
$strResult .= round( $floatTempC ) . $text['degreeC'];
break;
case "F-C":
$floatFahrenheit = $floatTempC * 1.8 + 32;
$strResult .= round( $floatFahrenheit ) . $text['degreeF'];
$strResult .= "&nbsp;(";
$strResult .= round( $floatTempC ) . $text['degreeC'];
$strResult .= ")";
break;
case "C-F":
$floatFahrenheit = $floatTempC * 1.8 + 32;
$strResult .= round( $floatTempC ) . $text['degreeC'];
$strResult .= "&nbsp;(";
$strResult .= round( $floatFahrenheit ) . $text['degreeF'];
$strResult .= ")";
break;
default:
$error->addError( 'temperature(' . $floatTempC . ')', 'wrong or unspecified temperature format', __LINE__, __FILE__ );
break;
}
return $strResult;
}
?>
/web/acc/phpsysinfo/includes/system_footer.php
0,0 → 1,95
<?php
/***************************************************************************
* Copyright (C) 2006 by phpSysInfo - A PHP System Information Script *
* http://phpsysinfo.sourceforge.net/ *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the *
* Free Software Foundation, Inc., *
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
***************************************************************************/
 
// $Id: system_footer.php,v 1.51.4.1 2007/08/19 09:22:21 xqus Exp $
 
if( ! defined( 'IN_PHPSYSINFO' ) ) {
die( "No Hacking" );
}
 
$arrDirection = direction();
 
if( ! $hide_picklist ) {
echo "<center>\n";
$update_form = "<form method=\"POST\" action=\"" . htmlentities($_SERVER['PHP_SELF']) . "\">\n" . "\t" . $text['template'] . ":&nbsp;\n" . "\t<select name=\"template\">\n";
$resDir = opendir( APP_ROOT . '/templates/' );
while( false !== ( $strFile = readdir( $resDir ) ) ) {
if( $strFile != 'CVS' && $strFile[0] != '.' && is_dir( APP_ROOT . '/templates/' . $strFile ) ) {
$arrFilelist[] = $strFile;
}
}
closedir( $resDir );
asort( $arrFilelist );
foreach( $arrFilelist as $strVal ) {
if( $_COOKIE['template'] == $strVal ) {
$update_form .= "\t\t<option value=\"" . $strVal . "\" SELECTED>" . $strVal . "</option>\n";
} else {
$update_form .= "\t\t<option value=\"" . $strVal . "\">" . $strVal . "</option>\n";
}
}
$update_form .= "\t\t<option value=\"xml\">XML</option>\n";
$update_form .= "\t\t<option value=\"wml\">WML</option>\n";
$update_form .= "\t\t<option value=\"random\"";
if( $_COOKIE['template'] == 'random' ) {
$update_form .= " SELECTED";
}
$update_form .= ">random</option>\n";
$update_form .= "\t</select>\n";
$update_form .= "\t&nbsp;&nbsp;" . $text['language'] . ":&nbsp;\n" . "\t<select name=\"lng\">\n";
unset( $arrFilelist );
$resDir = opendir( APP_ROOT . "/includes/lang/" );
while( false !== ( $strFile = readdir( $resDir ) ) ) {
if ( $strFile[0] != '.' && is_file( APP_ROOT . "/includes/lang/" . $strFile ) && preg_match( "/\.php$/", $strFile ) ) {
$arrFilelist[] = preg_replace("/\.php$/", "", $strFile );
}
}
closedir($resDir);
asort( $arrFilelist );
foreach( $arrFilelist as $strVal ) {
if( $_COOKIE['lng'] == $strVal ) {
$update_form .= "\t\t<option value=\"" . $strVal . "\" SELECTED>" . $strVal . "</option>\n";
} else {
$update_form .= "\t\t<option value=\"" . $strVal . "\">" . $strVal . "</option>\n";
}
}
$update_form .= "\t\t<option value=\"browser\"";
if( $_COOKIE['lng'] == "browser" ) {
$update_form .= " SELECTED";
}
$update_form .= ">browser default</option>\n\t</select>\n";
 
$update_form .= "\t<input type=\"submit\" value=\"" . $text['submit'] . "\">\n" . "</form>\n";
echo $update_form;
echo "</center>\n";
} else {
echo "<br>\n";
}
 
echo "<hr>\n";
echo "<table width=\"100%\">\n\t<tr>\n";
echo "\t\t<td align=\"" . $arrDirection['left'] . "\"><font size=\"-1\">" . $text['created'] . "&nbsp;<a href=\"http://phpsysinfo.sourceforge.net\" target=\"_blank\">phpSysInfo-" . $VERSION . "</a>&nbsp;" . strftime( $text['gen_time'], time() ) . "</font></td>\n";
echo "\t\t<td align=\"" . $arrDirection['right'] . "\"><font size=\"-1\">" . round( ( array_sum( explode( " ", microtime() ) ) - $startTime ), 4 ). " sec</font></td>\n";
echo "\t</tr>\n</table>\n";
echo "<br>\n</body>\n</html>\n";
 
?>
/web/acc/phpsysinfo/includes/index.html
--- includes/class.error.inc.php (nonexistent)
+++ includes/class.error.inc.php (revision 325)
@@ -0,0 +1,129 @@
+<?php
+/***************************************************************************
+ * Copyright (C) 2006 by phpSysInfo - A PHP System Information Script *
+ * http://phpsysinfo.sourceforge.net/ *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
+ ***************************************************************************/
+
+// $Id: class.error.inc.php,v 1.9 2007/02/11 15:57:17 bigmichi1 Exp $
+
+class Error {
+
+ // Array which holds the error messages
+ var $arrErrorList = array();
+ // current number of errors encountered
+ var $errors = 0;
+
+ /**
+ *
+ * addError()
+ *
+ * @param strCommand string Command, which cause the Error
+ * @param strMessage string additional Message, to describe the Error
+ * @param intLine integer on which line the Error occours
+ * @param strFile string in which File the Error occours
+ *
+ * @return -
+ *
+ **/
+ function addError( $strCommand, $strMessage, $intLine, $strFile ) {
+ $this->arrErrorList[$this->errors]['command'] = $strCommand;
+ $this->arrErrorList[$this->errors]['message'] = $strMessage;
+ $this->arrErrorList[$this->errors]['line'] = $intLine;
+ $this->arrErrorList[$this->errors]['file'] = basename( $strFile );
+ $this->errors++;
+ }
+
+ /**
+ *
+ * addWarning()
+ *
+ * @param strMessage string Warning message to display
+ *
+ * @return -
+ *
+ **/
+ function addWarning( $strMessage ) {
+ $this->arrErrorList[$this->errors]['command'] = "WARN";
+ $this->arrErrorList[$this->errors]['message'] = $strMessage;
+ $this->errors++;
+ }
+
+ /**
+ *
+ * ErrorsAsHTML()
+ *
+ * @param -
+ *
+ * @return string string which contains a HTML table which can be used to echo out the errors
+ *
+ **/
+ function ErrorsAsHTML() {
+ $strHTMLString = "";
+ $strWARNString = "";
+ $strHTMLhead = "<table width=\"100%\" border=\"0\">\n"
+ . "\t<tr>\n"
+ . "\t\t<td><font size=\"-1\"><b>File</b></font></td>\n"
+ . "\t\t<td><font size=\"-1\"><b>Line</b></font></td>\n"
+ . "\t\t<td><font size=\"-1\"><b>Command</b></font></td>\n"
+ . "\t\t<td><font size=\"-1\"><b>Message</b></font></td>\n"
+ . "\t</tr>\n";
+ $strHTMLfoot = "</table>\n";
+
+ if( $this->errors > 0 ) {
+ foreach( $this->arrErrorList as $arrLine ) {
+ if( $arrLine['command'] == "WARN" ) {
+ $strWARNString .= "<font size=\"-1\"><b>WARNING: " . str_replace( "\n", "<br>", htmlspecialchars( $arrLine['message'] ) ) . "</b></font><br>\n";
+ } else {
+ $strHTMLString .= "\t<tr>\n"
+ . "\t\t<td><font size=\"-1\">" . htmlspecialchars( $arrLine['file'] ) . "</font></td>\n"
+ . "\t\t<td><font size=\"-1\">" . $arrLine['line'] . "</font></td>\n"
+ . "\t\t<td><font size=\"-1\">" . htmlspecialchars( $arrLine['command'] ) . "</font></td>\n"
+ . "\t\t<td><font size=\"-1\">" . str_replace( "\n", "<br>", htmlspecialchars( $arrLine['message'] ) ) . "</font></td>\n"
+ . "\t</tr>\n";
+ }
+ }
+ }
+
+ if( !empty( $strHTMLString ) ) {
+ $strHTMLString = $strWARNString . $strHTMLhead . $strHTMLString . $strHTMLfoot;
+ } else {
+ $strHTMLString = $strWARNString;
+ }
+
+ return $strHTMLString;
+ }
+
+ /**
+ *
+ * ErrorsExist()
+ *
+ * @param -
+ *
+ * @return true there are errors logged
+ * false no errors logged
+ *
+ **/
+ function ErrorsExist() {
+ if( $this->errors > 0 ) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+}
+?>
/web/acc/phpsysinfo/includes/class.Template.inc.php
0,0 → 1,449
<?php
/**************************************************************************\
* eGroupWare API - Template class *
* (C) Copyright 1999-2000 NetUSE GmbH Kristian Koehntopp *
* ------------------------------------------------------------------------ *
* http://www.egroupware.org/ *
* ------------------------------------------------------------------------ *
* This program is free software; you can redistribute it and/or modify it *
* under the terms of the GNU Lesser General Public License as published *
* by the Free Software Foundation; either version 2.1 of the License, or *
* any later version. *
\**************************************************************************/
 
/* $Id: class.Template.inc.php,v 1.5 2005/11/26 13:01:24 bigmichi1 Exp $ */
 
class Template
{
var $classname = 'Template';
 
/* if set, echo assignments */
var $debug = False;
 
/* $file[handle] = 'filename'; */
var $file = array();
 
/* relative filenames are relative to this pathname */
var $root = '';
 
/* $varkeys[key] = 'key'; $varvals[key] = 'value'; */
var $varkeys = array();
var $varvals = array();
 
/* 'remove' => remove undefined variables
* 'comment' => replace undefined variables with comments
* 'keep' => keep undefined variables
*/
var $unknowns = 'remove';
 
/* 'yes' => halt, 'report' => report error, continue, 'no' => ignore error quietly */
var $halt_on_error = 'yes';
 
/* last error message is retained here */
var $last_error = '';
 
/***************************************************************************/
/* public: Constructor.
* root: template directory.
* unknowns: how to handle unknown variables.
*/
function Template($root = '.', $unknowns = 'remove')
{
$this->set_root($root);
$this->set_unknowns($unknowns);
}
 
/* public: setroot(pathname $root)
* root: new template directory.
*/
function set_root($root)
{
if (!is_dir($root))
{
$this->halt("set_root: $root is not a directory.");
return false;
}
$this->root = $root;
return true;
}
 
/* public: set_unknowns(enum $unknowns)
* unknowns: 'remove', 'comment', 'keep'
*
*/
function set_unknowns($unknowns = 'keep')
{
$this->unknowns = $unknowns;
}
 
/* public: set_file(array $filelist)
* filelist: array of handle, filename pairs.
*
* public: set_file(string $handle, string $filename)
* handle: handle for a filename,
* filename: name of template file
*/
function set_file($handle, $filename = '')
{
if (!is_array($handle))
{
if ($filename == '')
{
$this->halt("set_file: For handle $handle filename is empty.");
return false;
}
$this->file[$handle] = $this->filename($filename);
}
else
{
reset($handle);
while(list($h, $f) = each($handle))
{
$this->file[$h] = $this->filename($f);
}
}
}
 
/* public: set_block(string $parent, string $handle, string $name = '')
* extract the template $handle from $parent,
* place variable {$name} instead.
*/
function set_block($parent, $handle, $name = '')
{
if (!$this->loadfile($parent))
{
$this->halt("subst: unable to load $parent.");
return false;
}
if ($name == '')
{
$name = $handle;
}
$str = $this->get_var($parent);
$reg = "/<!--\s+BEGIN $handle\s+-->(.*)\n\s*<!--\s+END $handle\s+-->/sm";
preg_match_all($reg, $str, $m);
$str = preg_replace($reg, '{' . "$name}", $str);
$this->set_var($handle, $m[1][0]);
$this->set_var($parent, $str);
}
 
/* public: set_var(array $values)
* values: array of variable name, value pairs.
*
* public: set_var(string $varname, string $value)
* varname: name of a variable that is to be defined
* value: value of that variable
*/
function set_var($varname, $value = '')
{
if (!is_array($varname))
{
if (!empty($varname))
{
if ($this->debug)
{
print "scalar: set *$varname* to *$value*<br>\n";
}
$this->varkeys[$varname] = $this->varname($varname);
$this->varvals[$varname] = str_replace('phpGroupWare','eGroupWare',$value);
}
}
else
{
reset($varname);
while(list($k, $v) = each($varname))
{
if (!empty($k))
{
if ($this->debug)
{
print "array: set *$k* to *$v*<br>\n";
}
$this->varkeys[$k] = $this->varname($k);
$this->varvals[$k] = str_replace('phpGroupWare','eGroupWare',$v);
}
}
}
}
 
/* public: subst(string $handle)
* handle: handle of template where variables are to be substituted.
*/
function subst($handle)
{
if (!$this->loadfile($handle))
{
$this->halt("subst: unable to load $handle.");
return false;
}
 
$str = $this->get_var($handle);
reset($this->varkeys);
while (list($k, $v) = each($this->varkeys))
{
$str = str_replace($v, $this->varvals[$k], $str);
}
return $str;
}
 
/* public: psubst(string $handle)
* handle: handle of template where variables are to be substituted.
*/
function psubst($handle)
{
print $this->subst($handle);
return false;
}
 
/* public: parse(string $target, string $handle, boolean append)
* public: parse(string $target, array $handle, boolean append)
* target: handle of variable to generate
* handle: handle of template to substitute
* append: append to target handle
*/
function parse($target, $handle, $append = false)
{
if (!is_array($handle))
{
$str = $this->subst($handle);
if ($append)
{
$this->set_var($target, $this->get_var($target) . $str);
}
else
{
$this->set_var($target, $str);
}
}
else
{
reset($handle);
while(list($i, $h) = each($handle))
{
$str = $this->subst($h);
$this->set_var($target, $str);
}
}
return $str;
}
 
function pparse($target, $handle, $append = false)
{
print $this->parse($target, $handle, $append);
return false;
}
 
/* This is short for finish parse */
function fp($target, $handle, $append = False)
{
return $this->finish($this->parse($target, $handle, $append));
}
 
/* This is a short cut for print finish parse */
function pfp($target, $handle, $append = False)
{
echo $this->finish($this->parse($target, $handle, $append));
}
 
/* public: get_vars()
*/
function get_vars()
{
reset($this->varkeys);
while(list($k, $v) = each($this->varkeys))
{
$result[$k] = $this->varvals[$k];
}
return $result;
}
 
/* public: get_var(string varname)
* varname: name of variable.
*
* public: get_var(array varname)
* varname: array of variable names
*/
function get_var($varname)
{
if (!is_array($varname))
{
return $this->varvals[$varname];
}
else
{
reset($varname);
while(list($k, $v) = each($varname))
{
$result[$k] = $this->varvals[$k];
}
return $result;
}
}
 
/* public: get_undefined($handle)
* handle: handle of a template.
*/
function get_undefined($handle)
{
if (!$this->loadfile($handle))
{
$this->halt("get_undefined: unable to load $handle.");
return false;
}
 
preg_match_all("/\{([^}]+)\}/", $this->get_var($handle), $m);
$m = $m[1];
if (!is_array($m))
{
return false;
}
reset($m);
while(list($k, $v) = each($m))
{
if (!isset($this->varkeys[$v]))
{
$result[$v] = $v;
}
}
 
if (count($result))
{
return $result;
}
else
{
return false;
}
}
 
/* public: finish(string $str)
* str: string to finish.
*/
function finish($str)
{
switch ($this->unknowns)
{
case 'keep':
break;
case 'remove':
$str = preg_replace('/{[^ \t\r\n}]+}/', '', $str);
break;
case 'comment':
$str = preg_replace('/{([^ \t\r\n}]+)}/', "<!-- Template $handle: Variable \\1 undefined -->", $str);
break;
}
 
return $str;
}
 
/* public: p(string $varname)
* varname: name of variable to print.
*/
function p($varname)
{
print $this->finish($this->get_var($varname));
}
 
function get($varname)
{
return $this->finish($this->get_var($varname));
}
 
/***************************************************************************/
/* private: filename($filename)
* filename: name to be completed.
*/
function filename($filename,$root='',$time=1)
{
if($root=='')
{
$root=$this->root;
}
if (substr($filename, 0, 1) != '/')
{
$new_filename = $root.'/'.$filename;
}
else
{
$new_filename = $filename;
}
 
if (!file_exists($new_filename))
{
if($time==2)
{
$this->halt("filename: file $new_filename does not exist.");
}
else
{
$new_root = str_replace($GLOBALS['egw_info']['server']['template_set'],'default',$root);
$new_filename = $this->filename(str_replace($root.'/','',$new_filename),$new_root,2);
}
}
return $new_filename;
}
 
/* private: varname($varname)
* varname: name of a replacement variable to be protected.
*/
function varname($varname)
{
return '{'.$varname.'}';
}
 
/* private: loadfile(string $handle)
* handle: load file defined by handle, if it is not loaded yet.
*/
function loadfile($handle)
{
if (isset($this->varkeys[$handle]) and !empty($this->varvals[$handle]))
{
return true;
}
if (!isset($this->file[$handle]))
{
$this->halt("loadfile: $handle is not a valid handle.");
return false;
}
$filename = $this->file[$handle];
 
$str = implode('', @file($filename));
if (empty($str))
{
$this->halt("loadfile: While loading $handle, $filename does not exist or is empty.");
return false;
}
 
$this->set_var($handle, $str);
return true;
}
 
/***************************************************************************/
/* public: halt(string $msg)
* msg: error message to show.
*/
function halt($msg)
{
$this->last_error = $msg;
 
if ($this->halt_on_error != 'no')
{
$this->haltmsg($msg);
}
 
if ($this->halt_on_error == 'yes')
{
echo('<b>Halted.</b>');
}
 
exit;
}
 
/* public, override: haltmsg($msg)
* msg: error message to show.
*/
function haltmsg($msg)
{
printf("<b>Template Error:</b> %s<br>\n", $msg);
}
}
/web/acc/phpsysinfo/includes/mb/class.mbm5.inc.php
0,0 → 1,79
<?php
//
// phpSysInfo - A PHP System Information Script
// http://phpsysinfo.sourceforge.net/
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//
// $Id: class.mbm5.inc.php,v 1.7 2007/02/18 19:11:31 bigmichi1 Exp $
 
class mbinfo {
var $buf_label;
var $buf_value;
 
function mbinfo() {
$buffer = rfts( APP_ROOT . "/data/MBM5.csv" );
if( strpos( $buffer, ";") === false ) {
$delim = ",";
} else {
$delim = ";";
}
$buffer = explode( "\n", $buffer );
$this->buf_label = explode( $delim, $buffer[0] );
$this->buf_value = explode( $delim, $buffer[1] );
}
function temperature() {
$results = array();
$intCount = 0;
for( $intPosi = 3; $intPosi < 6; $intPosi++ ) {
$results[$intCount]['label'] = $this->buf_label[$intPosi];
$results[$intCount]['value'] = $this->buf_value[$intPosi];
$results[$intCount]['limit'] = '70.0';
$intCount++;
}
return $results;
}
function fans() {
$results = array();
$intCount = 0;
for( $intPosi = 13; $intPosi < 16; $intPosi++ ) {
$results[$intCount]['label'] = $this->buf_label[$intPosi];
$results[$intCount]['value'] = $this->buf_value[$intPosi];
$results[$intCount]['min'] = '3000';
$intCount++;
}
return $results;
}
function voltage() {
$results = array();
$intCount = 0;
for( $intPosi = 6; $intPosi < 13; $intPosi++ ) {
$results[$intCount]['label'] = $this->buf_label[$intPosi];
$results[$intCount]['value'] = $this->buf_value[$intPosi];
$results[$intCount]['min'] = '0.00';
$results[$intCount]['max'] = '0.00';
$intCount++;
}
return $results;
}
}
 
?>
/web/acc/phpsysinfo/includes/mb/class.lmsensors.inc.php
0,0 → 1,175
<?php
 
// phpSysInfo - A PHP System Information Script
// http://phpsysinfo.sourceforge.net/
 
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
 
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
 
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
// $Id: class.lmsensors.inc.php,v 1.19 2007/02/18 19:11:31 bigmichi1 Exp $
if (!defined('IN_PHPSYSINFO')) {
die("No Hacking");
}
 
require_once(APP_ROOT . "/includes/common_functions.php");
 
class mbinfo {
var $lines;
 
function mbinfo() {
$lines = execute_program("sensors", "");
// Martijn Stolk: Dirty fix for misinterpreted output of sensors,
// where info could come on next line when the label is too long.
$lines = str_replace(":\n", ":", $lines);
$lines = str_replace("\n\n", "\n", $lines);
$this->lines = explode("\n", $lines);
}
function temperature() {
$ar_buf = array();
$results = array();
 
$sensors_value = $this->lines;
 
foreach($sensors_value as $line) {
$data = array();
if (ereg("(.*):(.*)\((.*)=(.*),(.*)=(.*)\)(.*)", $line, $data)) ;
elseif (ereg("(.*):(.*)\((.*)=(.*)\)(.*)", $line, $data)) ;
else (ereg("(.*):(.*)", $line, $data));
if (count($data) > 1) {
$temp = substr(trim($data[2]), -1);
switch ($temp) {
case "C";
case "F":
array_push($ar_buf, $line);
break;
}
}
}
 
$i = 0;
foreach($ar_buf as $line) {
unset($data);
if (ereg("(.*):(.*).C[ ]*\((.*)=(.*).C,(.*)=(.*).C\)(.*)\)", $line, $data)) ;
elseif (ereg("(.*):(.*).C[ ]*\((.*)=(.*).C,(.*)=(.*).C\)(.*)", $line, $data)) ;
elseif (ereg("(.*):(.*).C[ ]*\((.*)=(.*).C\)(.*)", $line, $data)) ;
else (ereg("(.*):(.*).C", $line, $data));
 
$results[$i]['label'] = $data[1];
$results[$i]['value'] = trim($data[2]);
if ( isset( $data[6] ) && trim( $data[2] ) > trim( $data[6] ) ) {
$results[$i]['limit'] = "+75";
$results[$i]['perce'] = "+75";
} else {
$results[$i]['limit'] = isset($data[4]) ? trim($data[4]) : "+75";
$results[$i]['perce'] = isset($data[6]) ? trim($data[6]) : "+75";
}
if ($results[$i]['limit'] < $results[$i]['perce']) {
$results[$i]['limit'] = $results[$i]['perce'];
}
$i++;
}
 
asort($results);
return array_values($results);
}
 
function fans() {
$ar_buf = array();
$results = array();
 
$sensors_value = $this->lines;
 
foreach($sensors_value as $line) {
$data = array();
if (ereg("(.*):(.*)\((.*)=(.*),(.*)=(.*)\)(.*)", $line, $data));
elseif (ereg("(.*):(.*)\((.*)=(.*)\)(.*)", $line, $data));
else ereg("(.*):(.*)", $line, $data);
 
if (count($data) > 1) {
$temp = explode(" ", trim($data[2]));
if (count($temp) == 1)
$temp = explode("\xb0", trim($data[2]));
if(isset($temp[1])) {
switch ($temp[1]) {
case "RPM":
array_push($ar_buf, $line);
break;
}
}
}
}
 
$i = 0;
foreach($ar_buf as $line) {
unset($data);
if (ereg("(.*):(.*) RPM \((.*)=(.*) RPM,(.*)=(.*)\)(.*)\)", $line, $data));
elseif (ereg("(.*):(.*) RPM \((.*)=(.*) RPM,(.*)=(.*)\)(.*)", $line, $data));
elseif (ereg("(.*):(.*) RPM \((.*)=(.*) RPM\)(.*)", $line, $data));
else ereg("(.*):(.*) RPM", $line, $data);
 
$results[$i]['label'] = trim($data[1]);
$results[$i]['value'] = trim($data[2]);
$results[$i]['min'] = isset($data[4]) ? trim($data[4]) : 0;
$i++;
}
 
asort($results);
return array_values($results);
}
 
function voltage() {
$ar_buf = array();
$results = array();
 
$sensors_value = $this->lines;
 
foreach($sensors_value as $line) {
$data = array();
if (ereg("(.*):(.*)\((.*)=(.*),(.*)=(.*)\)(.*)", $line, $data));
else ereg("(.*):(.*)", $line, $data);
if (count($data) > 1) {
$temp = explode(" ", trim($data[2]));
if (count($temp) == 1)
$temp = explode("\xb0", trim($data[2]));
if (isset($temp[1])) {
switch ($temp[1]) {
case "V":
array_push($ar_buf, $line);
break;
}
}
}
}
 
$i = 0;
foreach($ar_buf as $line) {
unset($data);
if (ereg("(.*):(.*) V \((.*)=(.*) V,(.*)=(.*) V\)(.*)\)", $line, $data));
elseif (ereg("(.*):(.*) V \((.*)=(.*) V,(.*)=(.*) V\)(.*)", $line, $data));
else ereg("(.*):(.*) V$", $line, $data);
if(isset($data[1])) {
$results[$i]['label'] = trim($data[1]);
$results[$i]['value'] = trim($data[2]);
$results[$i]['min'] = isset($data[4]) ? trim($data[4]) : 0;
$results[$i]['max'] = isset($data[6]) ? trim($data[6]) : 0;
$i++;
}
}
return $results;
}
}
 
?>
/web/acc/phpsysinfo/includes/mb/class.hddtemp.inc.php
0,0 → 1,114
<?php
 
// phpSysInfo - A PHP System Information Script
// http://phpsysinfo.sourceforge.net/
 
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
 
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
 
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
// $Id: class.hddtemp.inc.php,v 1.7 2007/01/21 13:17:20 bigmichi1 Exp $
 
class hddtemp {
function temperature($hddtemp_avail) {
$ar_buf = array();
$results = array();
switch ($hddtemp_avail) {
case "tcp":
// Timo van Roermund: connect to the hddtemp daemon, use a 5 second timeout.
$fp = fsockopen('localhost', 7634, $errno, $errstr, 5);
// if connected, read the output of the hddtemp daemon
if ($fp) {
// read output of the daemon
$lines = '';
while (!feof($fp)) {
$lines .= fread($fp, 1024);
}
// close the connection
fclose($fp);
} else {
die("HDDTemp error: " . $errno . ", " . $errstr);
}
$lines = str_replace("||", "|\n|", $lines);
$ar_buf = explode("\n", $lines);
break;
case "suid":
$strDrives = "";
$strContent = rfts( "/proc/diskstats", 0, 4096, false );
if( $strContent != "ERROR" ) {
$arrContent = explode( "\n", $strContent );
foreach( $arrContent as $strLine ) {
preg_match( "/^\s(.*)\s([a-z]*)\s(.*)/", $strLine, $arrSplit );
if( !empty( $arrSplit[2] ) ) {
$strDrive = '/dev/' . $arrSplit[2];
if( file_exists( $strDrive ) ) {
$strDrives = $strDrives . $strDrive . ' ';
}
}
}
} else {
$strContent = rfts( "/proc/partitions", 0, 4096, false );
if( $strContent != "ERROR" ) {
$arrContent = explode( "\n", $strContent );
foreach( $arrContent as $strLine ) {
if( !preg_match( "/^\s(.*)\s([\/a-z0-9]*(\/disc))\s(.*)/", $strLine, $arrSplit ) ) {
preg_match( "/^\s(.*)\s([a-z]*)\s(.*)/", $strLine, $arrSplit );
}
if( !empty( $arrSplit[2] ) ) {
$strDrive = '/dev/' . $arrSplit[2];
if( file_exists( $strDrive ) ) {
$strDrives = $strDrives . $strDrive . ' ';
}
}
}
}
}
if( trim( $strDrives ) == "" ) {
return array();
}
 
$hddtemp_value = execute_program("hddtemp", $strDrives);
$hddtemp_value = explode("\n", $hddtemp_value);
foreach($hddtemp_value as $line) {
$temp = preg_split("/:\s/", $line, 3);
if(count($temp) == 3 && preg_match("/^[0-9]/", $temp[2])) {
list($temp[2], $temp[3]) = (preg_split("/\s/", $temp[2]));
array_push( $ar_buf, "|" . implode("|", $temp) . "|");
}
}
break;
default:
die("Bad hddtemp configuration in config.php");
}
// Timo van Roermund: parse the info from the hddtemp daemon.
$i = 0;
foreach($ar_buf as $line) {
$data = array();
if (ereg("\|(.*)\|(.*)\|(.*)\|(.*)\|", $line, $data)) {
if( trim($data[3]) != "ERR" ) {
// get the info we need
$results[$i]['label'] = $data[1];
$results[$i]['value'] = $data[3];
$results[$i]['model'] = $data[2];
$i++;
}
}
}
return $results;
}
}
?>
/web/acc/phpsysinfo/includes/mb/class.mbmon.inc.php
0,0 → 1,99
<?php
 
// phpSysInfo - A PHP System Information Script
// http://phpsysinfo.sourceforge.net/
 
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
 
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
 
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
// This class was created by Z. Frombach ( zoltan at frombach dot com )
 
// $Id: class.mbmon.inc.php,v 1.5 2007/02/18 19:11:31 bigmichi1 Exp $
 
class mbinfo {
var $lines;
 
function temperature() {
$results = array();
 
if (!isset($this->lines) ) {
$this->lines = explode("\n", execute_program('mbmon', '-c 1 -r'));
}
 
$i = 0;
foreach($this->lines as $line) {
if (preg_match('/^(TEMP\d*)\s*:\s*(.*)$/D', $line, $data)) {
if ($data[2]<>'0') {
$results[$i]['label'] = $data[1];
$results[$i]['limit'] = '70.0';
if($data[2] > 250) {
$results[$i]['value'] = 0;
$results[$i]['percent'] = 0;
} else {
$results[$i]['value'] = $data[2];
$results[$i]['percent'] = $results[$i]['value'] * 100 / $results[$i]['limit'];
}
$i++;
}
}
}
return $results;
}
 
function fans() {
$results = array();
 
if (!isset($this->lines) ) {
$this->lines = explode("\n", execute_program('mbmon', '-c 1 -r'));
}
 
$i = 0;
foreach($this->lines as $line) {
if (preg_match('/^(FAN\d*)\s*:\s*(.*)$/D', $line, $data)) {
if ($data[2]<>'0') {
$results[$i]['label'] = $data[1];
$results[$i]['value'] = $data[2];
$results[$i]['min'] = '3000';
$i++;
}
}
}
return $results;
}
 
function voltage() {
$results = array();
 
if (!isset($this->lines) ) {
$this->lines = explode("\n", execute_program('mbmon', '-c 1 -r'));
}
 
$i = 0;
foreach($this->lines as $line) {
if (preg_match('/^(V.*)\s*:\s*(.*)$/D', $line, $data)) {
if ($data[2]<>'+0.00') {
$results[$i]['label'] = $data[1];
$results[$i]['value'] = $data[2];
$results[$i]['min'] = '0.00';
$results[$i]['max'] = '0.00';
$i++;
}
}
}
 
return $results;
}
}
 
?>
/web/acc/phpsysinfo/includes/mb/index.html
--- includes/mb/class.healthd.inc.php (nonexistent)
+++ includes/mb/class.healthd.inc.php (revision 325)
@@ -0,0 +1,116 @@
+<?php
+
+// phpSysInfo - A PHP System Information Script
+// http://phpsysinfo.sourceforge.net/
+
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+// $Id: class.healthd.inc.php,v 1.6 2007/02/18 19:11:31 bigmichi1 Exp $
+
+class mbinfo {
+ var $lines;
+
+ function temperature() {
+ $ar_buf = array();
+ $results = array();
+
+ if (!isset($this->lines)) {
+ $this->lines = execute_program('healthdc', '-t');
+ }
+
+ $ar_buf = preg_split("/\t+/", $this->lines);
+
+ $results[0]['label'] = 'temp1';
+ $results[0]['value'] = $ar_buf[1];
+ $results[0]['limit'] = '70.0';
+ $results[0]['percent'] = $results[0]['value'] * 100 / $results[0]['limit'];
+ $results[1]['label'] = 'temp2';
+ $results[1]['value'] = $ar_buf[2];
+ $results[1]['limit'] = '70.0';
+ $results[1]['percent'] = $results[1]['value'] * 100 / $results[1]['limit'];
+ $results[2]['label'] = 'temp3';
+ $results[2]['value'] = $ar_buf[3];
+ $results[2]['limit'] = '70.0';
+ $results[2]['percent'] = $results[2]['value'] * 100 / $results[2]['limit'];
+ return $results;
+ }
+
+ function fans() {
+ $ar_buf = array();
+ $results = array();
+
+ if (!isset($this->lines)) {
+ $this->lines = execute_program('healthdc', '-t');
+ }
+
+ $ar_buf = preg_split("/\t+/", $this->lines);
+
+ $results[0]['label'] = 'fan1';
+ $results[0]['value'] = $ar_buf[4];
+ $results[0]['min'] = '3000';
+ $results[1]['label'] = 'fan2';
+ $results[1]['value'] = $ar_buf[5];
+ $results[1]['min'] = '3000';
+ $results[2]['label'] = 'fan3';
+ $results[2]['value'] = $ar_buf[6];
+ $results[2]['min'] = '3000';
+
+ return $results;
+ }
+
+ function voltage() {
+ $ar_buf = array();
+ $results = array();
+
+ if (!isset($this->lines)) {
+ $this->lines = execute_program('healthdc', '-t');
+ }
+
+ $ar_buf = preg_split("/\t+/", $this->lines);
+
+ $results[0]['label'] = 'Vcore1';
+ $results[0]['value'] = $ar_buf[7];
+ $results[0]['min'] = '0.00';
+ $results[0]['max'] = '0.00';
+ $results[1]['label'] = 'Vcore2';
+ $results[1]['value'] = $ar_buf[8];
+ $results[1]['min'] = '0.00';
+ $results[1]['max'] = '0.00';
+ $results[2]['label'] = '3volt';
+ $results[2]['value'] = $ar_buf[9];
+ $results[2]['min'] = '0.00';
+ $results[2]['max'] = '0.00';
+ $results[3]['label'] = '+5Volt';
+ $results[3]['value'] = $ar_buf[10];
+ $results[3]['min'] = '0.00';
+ $results[3]['max'] = '0.00';
+ $results[4]['label'] = '+12Volt';
+ $results[4]['value'] = $ar_buf[11];
+ $results[4]['min'] = '0.00';
+ $results[4]['max'] = '0.00';
+ $results[5]['label'] = '-12Volt';
+ $results[5]['value'] = $ar_buf[12];
+ $results[5]['min'] = '0.00';
+ $results[5]['max'] = '0.00';
+ $results[6]['label'] = '-5Volt';
+ $results[6]['value'] = $ar_buf[13];
+ $results[6]['min'] = '0.00';
+ $results[6]['max'] = '0.00';
+
+ return $results;
+ }
+}
+
+?>
/web/acc/phpsysinfo/includes/mb/class.hwsensors.inc.php
0,0 → 1,80
<?php
 
// phpSysInfo - A PHP System Information Script
// http://phpsysinfo.sourceforge.net/
 
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
 
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
 
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
// $Id: class.hwsensors.inc.php,v 1.4 2006/05/20 17:01:07 bigmichi1 Exp $
 
class mbinfo {
var $lines;
 
function mbinfo() {
$this->lines = execute_program('sysctl', '-w hw.sensors');
$this->lines = explode("\n", $this->lines);
}
 
function temperature() {
$ar_buf = array();
$results = array();
 
foreach( $this->lines as $line ) {
$ar_buf = preg_split("/[\s,]+/", $line);
if( isset( $ar_buf[3] ) && $ar_buf[2] == 'temp') {
$results[$j]['label'] = $ar_buf[1];
$results[$j]['value'] = $ar_buf[3];
$results[$j]['limit'] = '70.0';
$results[$j]['percent'] = $results[$j]['value'] * 100 / $results[$j]['limit'];
$j++;
}
}
return $results;
}
 
function fans() {
$ar_buf = array();
$results = array();
 
foreach( $this->lines as $line ) {
$ar_buf = preg_split("/[\s,]+/", $line );
if( isset( $ar_buf[3] ) && $ar_buf[2] == 'fanrpm') {
$results[$j]['label'] = $ar_buf[1];
$results[$j]['value'] = $ar_buf[3];
$j++;
}
}
return $results;
}
 
function voltage() {
$ar_buf = array();
$results = array();
 
foreach( $this->lines as $line ) {
$ar_buf = preg_split("/[\s,]+/", $line );
if ( isset( $ar_buf[3] ) && $ar_buf[2] == 'volts_dc') {
$results[$j]['label'] = $ar_buf[1];
$results[$j]['value'] = $ar_buf[3];
$results[$j]['min'] = '0.00';
$results[$j]['max'] = '0.00';
$j++;
}
}
return $results;
}
}
 
?>
/web/acc/phpsysinfo/includes/XPath.class.php
0,0 → 1,6355
<?php
/**
* Php.XPath
*
* +======================================================================================================+
* | A php class for searching an XML document using XPath, and making modifications using a DOM
* | style API. Does not require the DOM XML PHP library.
* |
* +======================================================================================================+
* | What Is XPath:
* | --------------
* | - "What SQL is for a relational database, XPath is for an XML document." -- Sam Blum
* | - "The primary purpose of XPath is to address parts of an XML document. In support of this
* | primary purpose, it also provides basic facilities for manipulting it." -- W3C
* |
* | XPath in action and a very nice intro is under:
* | http://www.zvon.org/xxl/XPathTutorial/General/examples.html
* | Specs Can be found under:
* | http://www.w3.org/TR/xpath W3C XPath Recommendation
* | http://www.w3.org/TR/xpath20 W3C XPath Recommendation
* |
* | NOTE: Most of the XPath-spec has been realized, but not all. Usually this should not be
* | problem as the missing part is either rarely used or it's simpler to do with PHP itself.
* +------------------------------------------------------------------------------------------------------+
* | Requires PHP version 4.0.5 and up
* +------------------------------------------------------------------------------------------------------+
* | Main Active Authors:
* | --------------------
* | Nigel Swinson <nigelswinson@users.sourceforge.net>
* | Started around 2001-07, saved phpxml from near death and renamed to Php.XPath
* | Restructured XPath code to stay in line with XPath spec.
* | Sam Blum <bs_php@infeer.com>
* | Started around 2001-09 1st major restruct (V2.0) and testbench initiator.
* | 2nd (V3.0) major rewrite in 2002-02
* | Daniel Allen <bigredlinux@yahoo.com>
* | Started around 2001-10 working to make Php.XPath adhere to specs
* | Main Former Author: Michael P. Mehl <mpm@phpxml.org>
* | Inital creator of V 1.0. Stoped activities around 2001-03
* +------------------------------------------------------------------------------------------------------+
* | Code Structure:
* | --------------_
* | The class is split into 3 main objects. To keep usability easy all 3
* | objects are in this file (but may be split in 3 file in future).
* | +-------------+
* | | XPathBase | XPathBase holds general and debugging functions.
* | +------+------+
* | v
* | +-------------+ XPathEngine is the implementation of the W3C XPath spec. It contains the
* | | XPathEngine | XML-import (parser), -export and can handle xPathQueries. It's a fully
* | +------+------+ functional class but has no functions to modify the XML-document (see following).
* | v
* | +-------------+
* | | XPath | XPath extends the functionality with actions to modify the XML-document.
* | +-------------+ We tryed to implement a DOM - like interface.
* +------------------------------------------------------------------------------------------------------+
* | Usage:
* | ------
* | Scroll to the end of this php file and you will find a short sample code to get you started
* +------------------------------------------------------------------------------------------------------+
* | Glossary:
* | ---------
* | To understand how to use the functions and to pass the right parameters, read following:
* |
* | Document: (full node tree, XML-tree)
* | After a XML-source has been imported and parsed, it's stored as a tree of nodes sometimes
* | refered to as 'document'.
* |
* | AbsoluteXPath: (xPath, xPathSet)
* | A absolute XPath is a string. It 'points' to *one* node in the XML-document. We use the
* | term 'absolute' to emphasise that it is not an xPath-query (see xPathQuery). A valid xPath
* | has the form like '/AAA[1]/BBB[2]/CCC[1]'. Usually functions that require a node (see Node)
* | will also accept an abs. XPath.
* |
* | Node: (node, nodeSet, node-tree)
* | Some funtions require or return a node (or a whole node-tree). Nodes are only used with the
* | XPath-interface and have an internal structure. Every node in a XML document has a unique
* | corresponding abs. xPath. That's why public functions that accept a node, will usually also
* | accept a abs. xPath (a string) 'pointing' to an existing node (see absolutXPath).
* |
* | XPathQuery: (xquery, query)
* | A xPath-query is a string that is matched against the XML-document. The result of the match
* | is a xPathSet (vector of xPath's). It's always possible to pass a single absoluteXPath
* | instead of a xPath-query. A valid xPathQuery could look like this:
* | '//XXX/*[contains(., "foo")]/..' (See the link in 'What Is XPath' to learn more).
* |
* |
* +------------------------------------------------------------------------------------------------------+
* | Internals:
* | ----------
* | - The Node Tree
* | -------------
* | A central role of the package is how the XML-data is stored. The whole data is in a node-tree.
* | A node can be seen as the equvalent to a tag in the XML soure with some extra info.
* | For instance the following XML
* | <AAA foo="x">***<BBB/><CCC/>**<BBB/>*</AAA>
* | Would produce folowing node-tree:
* | 'super-root' <-- $nodeRoot (Very handy)
* | |
* | 'depth' 0 AAA[1] <-- top node. The 'textParts' of this node would be
* | / | \ 'textParts' => array('***','','**','*')
* | 'depth' 1 BBB[1] CCC[1] BBB[2] (NOTE: Is always size of child nodes+1)
* | - The Node
* | --------
* | The node itself is an structure desiged mainly to be used in connection with the interface of PHP.XPath.
* | That means it's possible for functions to return a sub-node-tree that can be used as input of an other
* | PHP.XPath function.
* |
* | The main structure of a node is:
* | $node = array(
* | 'name' => '', # The tag name. E.g. In <FOO bar="aaa"/> it would be 'FOO'
* | 'attributes' => array(), # The attributes of the tag E.g. In <FOO bar="aaa"/> it would be array('bar'=>'aaa')
* | 'textParts' => array(), # Array of text parts surrounding the children E.g. <FOO>aa<A>bb<B/>cc</A>dd</FOO> -> array('aa','bb','cc','dd')
* | 'childNodes' => array(), # Array of refences (pointers) to child nodes.
* |
* | For optimisation reasions some additional data is stored in the node too:
* | 'parentNode' => NULL # Reference (pointer) to the parent node (or NULL if it's 'super root')
* | 'depth' => 0, # The tag depth (or tree level) starting with the root tag at 0.
* | 'pos' => 0, # Is the zero-based position this node has in the parent's 'childNodes'-list.
* | 'contextPos' => 1, # Is the one-based position this node has by counting the siblings tags (tags with same name)
* | 'xpath' => '' # Is the abs. XPath to this node.
* | 'generated_id'=> '' # The id returned for this node by generate-id() (attribute and text nodes not supported)
* |
* | - The NodeIndex
* | -------------
* | Every node in the tree has an absolute XPath. E.g '/AAA[1]/BBB[2]' the $nodeIndex is a hash array
* | to all the nodes in the node-tree. The key used is the absolute XPath (a string).
* |
* +------------------------------------------------------------------------------------------------------+
* | License:
* | --------
* | The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License");
* | you may not use this file except in compliance with the License. You may obtain a copy of the
* | License at http://www.mozilla.org/MPL/
* |
* | Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY
* | OF ANY KIND, either express or implied. See the License for the specific language governing
* | rights and limitations under the License.
* |
* | The Original Code is <phpXML/>.
* |
* | The Initial Developer of the Original Code is Michael P. Mehl. Portions created by Michael
* | P. Mehl are Copyright (C) 2001 Michael P. Mehl. All Rights Reserved.
* |
* | Contributor(s): N.Swinson / S.Blum / D.Allen
* |
* | Alternatively, the contents of this file may be used under the terms of either of the GNU
* | General Public License Version 2 or later (the "GPL"), or the GNU Lesser General Public
* | License Version 2.1 or later (the "LGPL"), in which case the provisions of the GPL or the
* | LGPL License are applicable instead of those above. If you wish to allow use of your version
* | of this file only under the terms of the GPL or the LGPL License and not to allow others to
* | use your version of this file under the MPL, indicate your decision by deleting the
* | provisions above and replace them with the notice and other provisions required by the
* | GPL or the LGPL License. If you do not delete the provisions above, a recipient may use
* | your version of this file under either the MPL, the GPL or the LGPL License.
* |
* +======================================================================================================+
*
* @author S.Blum / N.Swinson / D.Allen / (P.Mehl)
* @link http://sourceforge.net/projects/phpxpath/
* @version 3.5
* @CVS $Id: XPath.class.php,v 1.9 2005/11/16 17:26:05 bigmichi1 Exp $
*/
 
// Include guard, protects file being included twice
$ConstantName = 'INCLUDED_'.strtoupper(__FILE__);
if (defined($ConstantName)) return;
define($ConstantName,1, TRUE);
 
/************************************************************************************************
* ===============================================================================================
* X P a t h B a s e - Class
* ===============================================================================================
************************************************************************************************/
class XPathBase {
var $_lastError;
// As debugging of the xml parse is spread across several functions, we need to make this a member.
var $bDebugXmlParse = FALSE;
 
// do we want to do profiling?
var $bClassProfiling = FALSE;
 
// Used to help navigate through the begin/end debug calls
var $iDebugNextLinkNumber = 1;
var $aDebugOpenLinks = array();
var $aDebugFunctions = array(
//'_evaluatePrimaryExpr',
//'_evaluateExpr',
//'_evaluateStep',
//'_checkPredicates',
//'_evaluateFunction',
//'_evaluateOperator',
//'_evaluatePathExpr',
);
 
/**
* Constructor
*/
function XPathBase() {
# $this->bDebugXmlParse = TRUE;
$this->properties['verboseLevel'] = 1; // 0=silent, 1 and above produce verbose output (an echo to screen).
if (!isSet($_ENV)) { // Note: $_ENV introduced in 4.1.0. In earlier versions, use $HTTP_ENV_VARS.
$_ENV = $GLOBALS['HTTP_ENV_VARS'];
}
// Windows 95/98 do not support file locking. Detecting OS (Operation System) and setting the
// properties['OS_supports_flock'] to FALSE if win 95/98 is detected.
// This will surpress the file locking error reported from win 98 users when exportToFile() is called.
// May have to add more OS's to the list in future (Macs?).
// ### Note that it's only the FAT and NFS file systems that are really a problem. NTFS and
// the latest php libs do support flock()
$_ENV['OS'] = isSet($_ENV['OS']) ? $_ENV['OS'] : 'Unknown OS';
switch ($_ENV['OS']) {
case 'Windows_95':
case 'Windows_98':
case 'Unknown OS':
// should catch Mac OS X compatible environment
if (!empty($_SERVER['SERVER_SOFTWARE'])
&& preg_match('/Darwin/',$_SERVER['SERVER_SOFTWARE'])) {
// fall-through
} else {
$this->properties['OS_supports_flock'] = FALSE;
break;
}
default:
$this->properties['OS_supports_flock'] = TRUE;
}
}
/**
* Resets the object so it's able to take a new xml sting/file
*
* Constructing objects is slow. If you can, reuse ones that you have used already
* by using this reset() function.
*/
function reset() {
$this->_lastError = '';
}
//-----------------------------------------------------------------------------------------
// XPathBase ------ Helpers ------
//-----------------------------------------------------------------------------------------
/**
* This method checks the right amount and match of brackets
*
* @param $term (string) String in which is checked.
* @return (bool) TRUE: OK / FALSE: KO
*/
function _bracketsCheck($term) {
$leng = strlen($term);
$brackets = 0;
$bracketMisscount = $bracketMissmatsh = FALSE;
$stack = array();
for ($i=0; $i<$leng; $i++) {
switch ($term[$i]) {
case '(' :
case '[' :
$stack[$brackets] = $term[$i];
$brackets++;
break;
case ')':
$brackets--;
if ($brackets<0) {
$bracketMisscount = TRUE;
break 2;
}
if ($stack[$brackets] != '(') {
$bracketMissmatsh = TRUE;
break 2;
}
break;
case ']' :
$brackets--;
if ($brackets<0) {
$bracketMisscount = TRUE;
break 2;
}
if ($stack[$brackets] != '[') {
$bracketMissmatsh = TRUE;
break 2;
}
break;
}
}
// Check whether we had a valid number of brackets.
if ($brackets != 0) $bracketMisscount = TRUE;
if ($bracketMisscount || $bracketMissmatsh) {
return FALSE;
}
return TRUE;
}
/**
* Looks for a string within another string -- BUT the search-string must be located *outside* of any brackets.
*
* This method looks for a string within another string. Brackets in the
* string the method is looking through will be respected, which means that
* only if the string the method is looking for is located outside of
* brackets, the search will be successful.
*
* @param $term (string) String in which the search shall take place.
* @param $expression (string) String that should be searched.
* @return (int) This method returns -1 if no string was found,
* otherwise the offset at which the string was found.
*/
function _searchString($term, $expression) {
$bracketCounter = 0; // Record where we are in the brackets.
$leng = strlen($term);
$exprLeng = strlen($expression);
for ($i=0; $i<$leng; $i++) {
$char = $term[$i];
if ($char=='(' || $char=='[') {
$bracketCounter++;
continue;
}
elseif ($char==')' || $char==']') {
$bracketCounter--;
}
if ($bracketCounter == 0) {
// Check whether we can find the expression at this index.
if (substr($term, $i, $exprLeng) == $expression) return $i;
}
}
// Nothing was found.
return (-1);
}
/**
* Split a string by a searator-string -- BUT the separator-string must be located *outside* of any brackets.
*
* Returns an array of strings, each of which is a substring of string formed
* by splitting it on boundaries formed by the string separator.
*
* @param $separator (string) String that should be searched.
* @param $term (string) String in which the search shall take place.
* @return (array) see above
*/
function _bracketExplode($separator, $term) {
// Note that it doesn't make sense for $separator to itself contain (,),[ or ],
// but as this is a private function we should be ok.
$resultArr = array();
$bracketCounter = 0; // Record where we are in the brackets.
do { // BEGIN try block
// Check if any separator is in the term
$sepLeng = strlen($separator);
if (strpos($term, $separator)===FALSE) { // no separator found so end now
$resultArr[] = $term;
break; // try-block
}
// Make a substitute separator out of 'unused chars'.
$substituteSep = str_repeat(chr(2), $sepLeng);
// Now determine the first bracket '(' or '['.
$tmp1 = strpos($term, '(');
$tmp2 = strpos($term, '[');
if ($tmp1===FALSE) {
$startAt = (int)$tmp2;
} elseif ($tmp2===FALSE) {
$startAt = (int)$tmp1;
} else {
$startAt = min($tmp1, $tmp2);
}
// Get prefix string part before the first bracket.
$preStr = substr($term, 0, $startAt);
// Substitute separator in prefix string.
$preStr = str_replace($separator, $substituteSep, $preStr);
// Now get the rest-string (postfix string)
$postStr = substr($term, $startAt);
// Go all the way through the rest-string.
$strLeng = strlen($postStr);
for ($i=0; $i < $strLeng; $i++) {
$char = $postStr[$i];
// Spot (,),[,] and modify our bracket counter. Note there is an
// assumption here that you don't have a string(with[mis)matched]brackets.
// This should be ok as the dodgy string will be detected elsewhere.
if ($char=='(' || $char=='[') {
$bracketCounter++;
continue;
}
elseif ($char==')' || $char==']') {
$bracketCounter--;
}
// If no brackets surround us check for separator
if ($bracketCounter == 0) {
// Check whether we can find the expression starting at this index.
if ((substr($postStr, $i, $sepLeng) == $separator)) {
// Substitute the found separator
for ($j=0; $j<$sepLeng; $j++) {
$postStr[$i+$j] = $substituteSep[$j];
}
}
}
}
// Now explod using the substitute separator as key.
$resultArr = explode($substituteSep, $preStr . $postStr);
} while (FALSE); // End try block
// Return the results that we found. May be a array with 1 entry.
return $resultArr;
}
 
/**
* Split a string at it's groups, ie bracketed expressions
*
* Returns an array of strings, when concatenated together would produce the original
* string. ie a(b)cde(f)(g) would map to:
* array ('a', '(b)', cde', '(f)', '(g)')
*
* @param $string (string) The string to process
* @param $open (string) The substring for the open of a group
* @param $close (string) The substring for the close of a group
* @return (array) The parsed string, see above
*/
function _getEndGroups($string, $open='[', $close=']') {
// Note that it doesn't make sense for $separator to itself contain (,),[ or ],
// but as this is a private function we should be ok.
$resultArr = array();
do { // BEGIN try block
// Check if we have both an open and a close tag
if (empty($open) and empty($close)) { // no separator found so end now
$resultArr[] = $string;
break; // try-block
}
 
if (empty($string)) {
$resultArr[] = $string;
break; // try-block
}
 
while (!empty($string)) {
// Now determine the first bracket '(' or '['.
$openPos = strpos($string, $open);
$closePos = strpos($string, $close);
if ($openPos===FALSE || $closePos===FALSE) {
// Oh, no more groups to be found then. Quit
$resultArr[] = $string;
break;
}
 
// Sanity check
if ($openPos > $closePos) {
// Malformed string, dump the rest and quit.
$resultArr[] = $string;
break;
}
 
// Get prefix string part before the first bracket.
$preStr = substr($string, 0, $openPos);
// This is the first string that will go in our output
if (!empty($preStr))
$resultArr[] = $preStr;
 
// Skip over what we've proceed, including the open char
$string = substr($string, $openPos + 1 - strlen($string));
 
// Find the next open char and adjust our close char
//echo "close: $closePos\nopen: $openPos\n\n";
$closePos -= $openPos + 1;
$openPos = strpos($string, $open);
//echo "close: $closePos\nopen: $openPos\n\n";
 
// While we have found nesting...
while ($openPos && $closePos && ($closePos > $openPos)) {
// Find another close pos after the one we are looking at
$closePos = strpos($string, $close, $closePos + 1);
// And skip our open
$openPos = strpos($string, $open, $openPos + 1);
}
//echo "close: $closePos\nopen: $openPos\n\n";
 
// If we now have a close pos, then it's the end of the group.
if ($closePos === FALSE) {
// We didn't... so bail dumping what was left
$resultArr[] = $open.$string;
break;
}
 
// We did, so we can extract the group
$resultArr[] = $open.substr($string, 0, $closePos + 1);
// Skip what we have processed
$string = substr($string, $closePos + 1);
}
} while (FALSE); // End try block
// Return the results that we found. May be a array with 1 entry.
return $resultArr;
}
/**
* Retrieves a substring before a delimiter.
*
* This method retrieves everything from a string before a given delimiter,
* not including the delimiter.
*
* @param $string (string) String, from which the substring should be extracted.
* @param $delimiter (string) String containing the delimiter to use.
* @return (string) Substring from the original string before the delimiter.
* @see _afterstr()
*/
function _prestr(&$string, $delimiter, $offset=0) {
// Return the substring.
$offset = ($offset<0) ? 0 : $offset;
$pos = strpos($string, $delimiter, $offset);
if ($pos===FALSE) return $string; else return substr($string, 0, $pos);
}
/**
* Retrieves a substring after a delimiter.
*
* This method retrieves everything from a string after a given delimiter,
* not including the delimiter.
*
* @param $string (string) String, from which the substring should be extracted.
* @param $delimiter (string) String containing the delimiter to use.
* @return (string) Substring from the original string after the delimiter.
* @see _prestr()
*/
function _afterstr($string, $delimiter, $offset=0) {
$offset = ($offset<0) ? 0 : $offset;
// Return the substring.
return substr($string, strpos($string, $delimiter, $offset) + strlen($delimiter));
}
//-----------------------------------------------------------------------------------------
// XPathBase ------ Debug Stuff ------
//-----------------------------------------------------------------------------------------
/**
* Alter the verbose (error) level reporting.
*
* Pass an int. >0 to turn on, 0 to turn off. The higher the number, the
* higher the level of verbosity. By default, the class has a verbose level
* of 1.
*
* @param $levelOfVerbosity (int) default is 1 = on
*/
function setVerbose($levelOfVerbosity = 1) {
$level = -1;
if ($levelOfVerbosity === TRUE) {
$level = 1;
} elseif ($levelOfVerbosity === FALSE) {
$level = 0;
} elseif (is_numeric($levelOfVerbosity)) {
$level = $levelOfVerbosity;
}
if ($level >= 0) $this->properties['verboseLevel'] = $levelOfVerbosity;
}
/**
* Returns the last occured error message.
*
* @access public
* @return string (may be empty if there was no error at all)
* @see _setLastError(), _lastError
*/
function getLastError() {
return $this->_lastError;
}
/**
* Creates a textual error message and sets it.
*
* example: 'XPath error in THIS_FILE_NAME:LINE. Message: YOUR_MESSAGE';
*
* I don't think the message should include any markup because not everyone wants to debug
* into the browser window.
*
* You should call _displayError() rather than _setLastError() if you would like the message,
* dependant on their verbose settings, echoed to the screen.
*
* @param $message (string) a textual error message default is ''
* @param $line (int) the line number where the error occured, use __LINE__
* @see getLastError()
*/
function _setLastError($message='', $line='-', $file='-') {
$this->_lastError = 'XPath error in ' . basename($file) . ':' . $line . '. Message: ' . $message;
}
/**
* Displays an error message.
*
* This method displays an error messages depending on the users verbose settings
* and sets the last error message.
*
* If also possibly stops the execution of the script.
* ### Terminate should not be allowed --fab. Should it?? N.S.
*
* @param $message (string) Error message to be displayed.
* @param $lineNumber (int) line number given by __LINE__
* @param $terminate (bool) (default TURE) End the execution of this script.
*/
function _displayError($message, $lineNumber='-', $file='-', $terminate=TRUE) {
// Display the error message.
$err = '<b>XPath error in '.basename($file).':'.$lineNumber.'</b> '.$message."<br \>\n";
$this->_setLastError($message, $lineNumber, $file);
if (($this->properties['verboseLevel'] > 0) OR ($terminate)) echo $err;
// End the execution of this script.
if ($terminate) exit;
}
 
/**
* Displays a diagnostic message
*
* This method displays an error messages
*
* @param $message (string) Error message to be displayed.
* @param $lineNumber (int) line number given by __LINE__
*/
function _displayMessage($message, $lineNumber='-', $file='-') {
// Display the error message.
$err = '<b>XPath message from '.basename($file).':'.$lineNumber.'</b> '.$message."<br \>\n";
if ($this->properties['verboseLevel'] > 0) echo $err;
}
/**
* Called to begin the debug run of a function.
*
* This method starts a <DIV><PRE> tag so that the entry to this function
* is clear to the debugging user. Call _closeDebugFunction() at the
* end of the function to create a clean box round the function call.
*
* @author Nigel Swinson <nigelswinson@users.sourceforge.net>
* @author Sam Blum <bs_php@infeer.com>
* @param $functionName (string) the name of the function we are beginning to debug
* @param $bDebugFlag (bool) TRUE if we are to draw a call stack, FALSE otherwise
* @return (array) the output from the microtime() function.
* @see _closeDebugFunction()
*/
function _beginDebugFunction($functionName, $bDebugFlag) {
if ($bDebugFlag) {
$fileName = basename(__FILE__);
static $color = array('green','blue','red','lime','fuchsia', 'aqua');
static $colIndex = -1;
$colIndex++;
echo '<div style="clear:both" align="left"> ';
echo '<pre STYLE="border:solid thin '. $color[$colIndex % 6] . '; padding:5">';
echo '<a style="float:right;margin:5px" name="'.$this->iDebugNextLinkNumber.'Open" href="#'.$this->iDebugNextLinkNumber.'Close">Function Close '.$this->iDebugNextLinkNumber.'</a>';
echo "<STRONG>{$fileName} : {$functionName}</STRONG>";
echo '<hr style="clear:both">';
array_push($this->aDebugOpenLinks, $this->iDebugNextLinkNumber);
$this->iDebugNextLinkNumber++;
}
 
if ($this->bClassProfiling)
$this->_ProfBegin($FunctionName);
 
return TRUE;
}
/**
* Called to end the debug run of a function.
*
* This method ends a <DIV><PRE> block and reports the time since $aStartTime
* is clear to the debugging user.
*
* @author Nigel Swinson <nigelswinson@users.sourceforge.net>
* @param $functionName (string) the name of the function we are beginning to debug
* @param $return_value (mixed) the return value from the function call that
* we are debugging
* @param $bDebugFlag (bool) TRUE if we are to draw a call stack, FALSE otherwise
*/
function _closeDebugFunction($functionName, $returnValue = "", $bDebugFlag) {
if ($bDebugFlag) {
echo "<hr>";
$iOpenLinkNumber = array_pop($this->aDebugOpenLinks);
echo '<a style="float:right" name="'.$iOpenLinkNumber.'Close" href="#'.$iOpenLinkNumber.'Open">Function Open '.$iOpenLinkNumber.'</a>';
if (isSet($returnValue)) {
if (is_array($returnValue))
echo "Return Value: ".print_r($returnValue)."\n";
else if (is_numeric($returnValue))
echo "Return Value: ".(string)$returnValue."\n";
else if (is_bool($returnValue))
echo "Return Value: ".($returnValue ? "TRUE" : "FALSE")."\n";
else
echo "Return Value: \"".htmlspecialchars($returnValue)."\"\n";
}
echo '<br style="clear:both">';
echo " \n</pre></div>";
}
if ($this->bClassProfiling)
$this->_ProfEnd($FunctionName);
 
return TRUE;
}
/**
* Profile begin call
*/
function _ProfBegin($sonFuncName) {
static $entryTmpl = array ( 'start' => array(),
'recursiveCount' => 0,
'totTime' => 0,
'callCount' => 0 );
$now = explode(' ', microtime());
 
if (empty($this->callStack)) {
$fatherFuncName = '';
}
else {
$fatherFuncName = $this->callStack[sizeOf($this->callStack)-1];
$fatherEntry = &$this->profile[$fatherFuncName];
}
$this->callStack[] = $sonFuncName;
 
if (!isSet($this->profile[$sonFuncName])) {
$this->profile[$sonFuncName] = $entryTmpl;
}
 
$sonEntry = &$this->profile[$sonFuncName];
$sonEntry['callCount']++;
// if we call the t's the same function let the time run, otherwise sum up
if ($fatherFuncName == $sonFuncName) {
$sonEntry['recursiveCount']++;
}
if (!empty($fatherFuncName)) {
$last = $fatherEntry['start'];
$fatherEntry['totTime'] += round( (($now[1] - $last[1]) + ($now[0] - $last[0]))*10000 );
$fatherEntry['start'] = 0;
}
$sonEntry['start'] = explode(' ', microtime());
}
 
/**
* Profile end call
*/
function _ProfEnd($sonFuncName) {
$now = explode(' ', microtime());
 
array_pop($this->callStack);
if (empty($this->callStack)) {
$fatherFuncName = '';
}
else {
$fatherFuncName = $this->callStack[sizeOf($this->callStack)-1];
$fatherEntry = &$this->profile[$fatherFuncName];
}
$sonEntry = &$this->profile[$sonFuncName];
if (empty($sonEntry)) {
echo "ERROR in profEnd(): '$funcNam' not in list. Seams it was never started ;o)";
}
 
$last = $sonEntry['start'];
$sonEntry['totTime'] += round( (($now[1] - $last[1]) + ($now[0] - $last[0]))*10000 );
$sonEntry['start'] = 0;
if (!empty($fatherEntry)) $fatherEntry['start'] = explode(' ', microtime());
}
 
/**
* Show profile gathered so far as HTML table
*/
function _ProfileToHtml() {
$sortArr = array();
if (empty($this->profile)) return '';
reset($this->profile);
while (list($funcName) = each($this->profile)) {
$sortArrKey[] = $this->profile[$funcName]['totTime'];
$sortArrVal[] = $funcName;
}
//echo '<pre>';var_dump($sortArrVal);echo '</pre>';
array_multisort ($sortArrKey, SORT_DESC, $sortArrVal );
//echo '<pre>';var_dump($sortArrVal);echo '</pre>';
 
$totTime = 0;
$size = sizeOf($sortArrVal);
for ($i=0; $i<$size; $i++) {
$funcName = &$sortArrVal[$i];
$totTime += $this->profile[$funcName]['totTime'];
}
$out = '<table border="1">';
$out .='<tr align="center" bgcolor="#bcd6f1"><th>Function</th><th> % </th><th>Total [ms]</th><th># Call</th><th>[ms] per Call</th><th># Recursive</th></tr>';
for ($i=0; $i<$size; $i++) {
$funcName = &$sortArrVal[$i];
$row = &$this->profile[$funcName];
$procent = round($row['totTime']*100/$totTime);
if ($procent>20) $bgc = '#ff8080';
elseif ($procent>15) $bgc = '#ff9999';
elseif ($procent>10) $bgc = '#ffcccc';
elseif ($procent>5) $bgc = '#ffffcc';
else $bgc = '#66ff99';
 
$out .="<tr align='center' bgcolor='{$bgc}'>";
$out .='<td>'. $funcName .'</td><td>'. $procent .'% '.'</td><td>'. $row['totTime']/10 .'</td><td>'. $row['callCount'] .'</td><td>'. round($row['totTime']/10/$row['callCount'],2) .'</td><td>'. $row['recursiveCount'].'</td>';
$out .='</tr>';
}
$out .= '</table> Total Time [' . $totTime/10 .'ms]' ;
 
echo $out;
return TRUE;
}
 
/**
* Echo an XPath context for diagnostic purposes
*
* @param $context (array) An XPath context
*/
function _printContext($context) {
echo "{$context['nodePath']}({$context['pos']}/{$context['size']})";
}
/**
* This is a debug helper function. It dumps the node-tree as HTML
*
* *QUICK AND DIRTY*. Needs some polishing.
*
* @param $node (array) A node
* @param $indent (string) (optional, default=''). For internal recursive calls.
*/
function _treeDump($node, $indent = '') {
$out = '';
// Get rid of recursion
$parentName = empty($node['parentNode']) ? "SUPER ROOT" : $node['parentNode']['name'];
unset($node['parentNode']);
$node['parentNode'] = $parentName ;
$out .= "NODE[{$node['name']}]\n";
foreach($node as $key => $val) {
if ($key === 'childNodes') continue;
if (is_Array($val)) {
$out .= $indent . " [{$key}]\n" . arrayToStr($val, $indent . ' ');
} else {
$out .= $indent . " [{$key}] => '{$val}' \n";
}
}
if (!empty($node['childNodes'])) {
$out .= $indent . " ['childNodes'] (Size = ".sizeOf($node['childNodes']).")\n";
foreach($node['childNodes'] as $key => $childNode) {
$out .= $indent . " [$key] => " . $this->_treeDump($childNode, $indent . ' ') . "\n";
}
}
if (empty($indent)) {
return "<pre>" . htmlspecialchars($out) . "</pre>";
}
return $out;
}
} // END OF CLASS XPathBase
 
 
/************************************************************************************************
* ===============================================================================================
* X P a t h E n g i n e - Class
* ===============================================================================================
************************************************************************************************/
 
class XPathEngine extends XPathBase {
// List of supported XPath axes.
// What a stupid idea from W3C to take axes name containing a '-' (dash)
// NOTE: We replace the '-' with '_' to avoid the conflict with the minus operator.
// We will then do the same on the users Xpath querys
// -sibling => _sibling
// -or- => _or_
//
// This array contains a list of all valid axes that can be evaluated in an
// XPath query.
var $axes = array ( 'ancestor', 'ancestor_or_self', 'attribute', 'child', 'descendant',
'descendant_or_self', 'following', 'following_sibling',
'namespace', 'parent', 'preceding', 'preceding_sibling', 'self'
);
// List of supported XPath functions.
// What a stupid idea from W3C to take function name containing a '-' (dash)
// NOTE: We replace the '-' with '_' to avoid the conflict with the minus operator.
// We will then do the same on the users Xpath querys
// starts-with => starts_with
// substring-before => substring_before
// substring-after => substring_after
// string-length => string_length
//
// This array contains a list of all valid functions that can be evaluated
// in an XPath query.
var $functions = array ( 'last', 'position', 'count', 'id', 'name',
'string', 'concat', 'starts_with', 'contains', 'substring_before',
'substring_after', 'substring', 'string_length', 'normalize_space', 'translate',
'boolean', 'not', 'true', 'false', 'lang', 'number', 'sum', 'floor',
'ceiling', 'round', 'x_lower', 'x_upper', 'generate_id' );
// List of supported XPath operators.
//
// This array contains a list of all valid operators that can be evaluated
// in a predicate of an XPath query. The list is ordered by the
// precedence of the operators (lowest precedence first).
var $operators = array( ' or ', ' and ', '=', '!=', '<=', '<', '>=', '>',
'+', '-', '*', ' div ', ' mod ', ' | ');
 
// List of literals from the xPath string.
var $axPathLiterals = array();
// The index and tree that is created during the analysis of an XML source.
var $nodeIndex = array();
var $nodeRoot = array();
var $emptyNode = array(
'name' => '', // The tag name. E.g. In <FOO bar="aaa"/> it would be 'FOO'
'attributes' => array(), // The attributes of the tag E.g. In <FOO bar="aaa"/> it would be array('bar'=>'aaa')
'childNodes' => array(), // Array of pointers to child nodes.
'textParts' => array(), // Array of text parts between the cilderen E.g. <FOO>aa<A>bb<B/>cc</A>dd</FOO> -> array('aa','bb','cc','dd')
'parentNode' => NULL, // Pointer to parent node or NULL if this node is the 'super root'
//-- *!* Following vars are set by the indexer and is for optimisation only *!*
'depth' => 0, // The tag depth (or tree level) starting with the root tag at 0.
'pos' => 0, // Is the zero-based position this node has in the parents 'childNodes'-list.
'contextPos' => 1, // Is the one-based position this node has by counting the siblings tags (tags with same name)
'xpath' => '' // Is the abs. XPath to this node.
);
var $_indexIsDirty = FALSE;
 
// These variable used during the parse XML source
var $nodeStack = array(); // The elements that we have still to close.
var $parseStackIndex = 0; // The current element of the nodeStack[] that we are adding to while
// parsing an XML source. Corresponds to the depth of the xml node.
// in our input data.
var $parseOptions = array(); // Used to set the PHP's XML parser options (see xml_parser_set_option)
var $parsedTextLocation = ''; // A reference to where we have to put char data collected during XML parsing
var $parsInCData = 0 ; // Is >0 when we are inside a CDATA section.
var $parseSkipWhiteCache = 0; // A cache of the skip whitespace parse option to speed up the parse.
 
// This is the array of error strings, to keep consistency.
var $errorStrings = array(
'AbsoluteXPathRequired' => "The supplied xPath '%s' does not *uniquely* describe a node in the xml document.",
'NoNodeMatch' => "The supplied xPath-query '%s' does not match *any* node in the xml document.",
'RootNodeAlreadyExists' => "An xml document may have only one root node."
);
/**
* Constructor
*
* Optionally you may call this constructor with the XML-filename to parse and the
* XML option vector. Each of the entries in the option vector will be passed to
* xml_parser_set_option().
*
* A option vector sample:
* $xmlOpt = array(XML_OPTION_CASE_FOLDING => FALSE,
* XML_OPTION_SKIP_WHITE => TRUE);
*
* @param $userXmlOptions (array) (optional) Vector of (<optionID>=><value>,
* <optionID>=><value>, ...). See PHP's
* xml_parser_set_option() docu for a list of possible
* options.
* @see importFromFile(), importFromString(), setXmlOptions()
*/
function XPathEngine($userXmlOptions=array()) {
parent::XPathBase();
// Default to not folding case
$this->parseOptions[XML_OPTION_CASE_FOLDING] = FALSE;
// And not skipping whitespace
$this->parseOptions[XML_OPTION_SKIP_WHITE] = FALSE;
// Now merge in the overrides.
// Don't use PHP's array_merge!
if (is_array($userXmlOptions)) {
foreach($userXmlOptions as $key => $val) $this->parseOptions[$key] = $val;
}
}
/**
* Resets the object so it's able to take a new xml sting/file
*
* Constructing objects is slow. If you can, reuse ones that you have used already
* by using this reset() function.
*/
function reset() {
parent::reset();
$this->properties['xmlFile'] = '';
$this->parseStackIndex = 0;
$this->parsedTextLocation = '';
$this->parsInCData = 0;
$this->nodeIndex = array();
$this->nodeRoot = array();
$this->nodeStack = array();
$this->aLiterals = array();
$this->_indexIsDirty = FALSE;
}
//-----------------------------------------------------------------------------------------
// XPathEngine ------ Get / Set Stuff ------
//-----------------------------------------------------------------------------------------
/**
* Returns the property/ies you want.
*
* if $param is not given, all properties will be returned in a hash.
*
* @param $param (string) the property you want the value of, or NULL for all the properties
* @return (mixed) string OR hash of all params, or NULL on an unknown parameter.
*/
function getProperties($param=NULL) {
$this->properties['hasContent'] = !empty($this->nodeRoot);
$this->properties['caseFolding'] = $this->parseOptions[XML_OPTION_CASE_FOLDING];
$this->properties['skipWhiteSpaces'] = $this->parseOptions[XML_OPTION_SKIP_WHITE];
if (empty($param)) return $this->properties;
if (isSet($this->properties[$param])) {
return $this->properties[$param];
} else {
return NULL;
}
}
/**
* Set an xml_parser_set_option()
*
* @param $optionID (int) The option ID (e.g. XML_OPTION_SKIP_WHITE)
* @param $value (int) The option value.
* @see XML parser functions in PHP doc
*/
function setXmlOption($optionID, $value) {
if (!is_numeric($optionID)) return;
$this->parseOptions[$optionID] = $value;
}
 
/**
* Sets a number of xml_parser_set_option()s
*
* @param $userXmlOptions (array) An array of parser options.
* @see setXmlOption
*/
function setXmlOptions($userXmlOptions=array()) {
if (!is_array($userXmlOptions)) return;
foreach($userXmlOptions as $key => $val) {
$this->setXmlOption($key, $val);
}
}
/**
* Alternative way to control whether case-folding is enabled for this XML parser.
*
* Short cut to setXmlOptions(XML_OPTION_CASE_FOLDING, TRUE/FALSE)
*
* When it comes to XML, case-folding simply means uppercasing all tag-
* and attribute-names (NOT the content) if set to TRUE. Note if you
* have this option set, then your XPath queries will also be case folded
* for you.
*
* @param $onOff (bool) (default TRUE)
* @see XML parser functions in PHP doc
*/
function setCaseFolding($onOff=TRUE) {
$this->parseOptions[XML_OPTION_CASE_FOLDING] = $onOff;
}
/**
* Alternative way to control whether skip-white-spaces is enabled for this XML parser.
*
* Short cut to setXmlOptions(XML_OPTION_SKIP_WHITE, TRUE/FALSE)
*
* When it comes to XML, skip-white-spaces will trim the tag content.
* An XML file with no whitespace will be faster to process, but will make
* your data less human readable when you come to write it out.
*
* Running with this option on will slow the class down, so if you want to
* speed up your XML, then run it through once skipping white-spaces, then
* write out the new version of your XML without whitespace, then use the
* new XML file with skip whitespaces turned off.
*
* @param $onOff (bool) (default TRUE)
* @see XML parser functions in PHP doc
*/
function setSkipWhiteSpaces($onOff=TRUE) {
$this->parseOptions[XML_OPTION_SKIP_WHITE] = $onOff;
}
/**
* Get the node defined by the $absoluteXPath.
*
* @param $absoluteXPath (string) (optional, default is 'super-root') xpath to the node.
* @return (array) The node, or FALSE if the node wasn't found.
*/
function &getNode($absoluteXPath='') {
if ($absoluteXPath==='/') $absoluteXPath = '';
if (!isSet($this->nodeIndex[$absoluteXPath])) return FALSE;
if ($this->_indexIsDirty) $this->reindexNodeTree();
return $this->nodeIndex[$absoluteXPath];
}
 
/**
* Get a the content of a node text part or node attribute.
*
* If the absolute Xpath references an attribute (Xpath ends with @ or attribute::),
* then the text value of that node-attribute is returned.
* Otherwise the Xpath is referencing a text part of the node. This can be either a
* direct reference to a text part (Xpath ends with text()[<nr>]) or indirect reference
* (a simple abs. Xpath to a node).
* 1) Direct Reference (xpath ends with text()[<part-number>]):
* If the 'part-number' is omitted, the first text-part is assumed; starting by 1.
* Negative numbers are allowed, where -1 is the last text-part a.s.o.
* 2) Indirect Reference (a simple abs. Xpath to a node):
* Default is to return the *whole text*; that is the concated text-parts of the matching
* node. (NOTE that only in this case you'll only get a copy and changes to the returned
* value wounld have no effect). Optionally you may pass a parameter
* $textPartNr to define the text-part you want; starting by 1.
* Negative numbers are allowed, where -1 is the last text-part a.s.o.
*
* NOTE I : The returned value can be fetched by reference
* E.g. $text =& wholeText(). If you wish to modify the text.
* NOTE II: text-part numbers out of range will return FALSE
* SIDENOTE:The function name is a suggestion from W3C in the XPath specification level 3.
*
* @param $absoluteXPath (string) xpath to the node (See above).
* @param $textPartNr (int) If referring to a node, specifies which text part
* to query.
* @return (&string) A *reference* to the text if the node that the other
* parameters describe or FALSE if the node is not found.
*/
function &wholeText($absoluteXPath, $textPartNr=NULL) {
$status = FALSE;
$text = NULL;
if ($this->_indexIsDirty) $this->reindexNodeTree();
do { // try-block
if (preg_match(";(.*)/(attribute::|@)([^/]*)$;U", $absoluteXPath, $matches)) {
$absoluteXPath = $matches[1];
$attribute = $matches[3];
if (!isSet($this->nodeIndex[$absoluteXPath]['attributes'][$attribute])) {
$this->_displayError("The $absoluteXPath/attribute::$attribute value isn't a node in this document.", __LINE__, __FILE__, FALSE);
break; // try-block
}
$text =& $this->nodeIndex[$absoluteXPath]['attributes'][$attribute];
$status = TRUE;
break; // try-block
}
// Xpath contains a 'text()'-function, thus goes right to a text node. If so interpret the Xpath.
if (preg_match(":(.*)/text\(\)(\[(.*)\])?$:U", $absoluteXPath, $matches)) {
$absoluteXPath = $matches[1];
if (!isSet($this->nodeIndex[$absoluteXPath])) {
$this->_displayError("The $absoluteXPath value isn't a node in this document.", __LINE__, __FILE__, FALSE);
break; // try-block
}
 
// Get the amount of the text parts in the node.
$textPartSize = sizeOf($this->nodeIndex[$absoluteXPath]['textParts']);
 
// default to the first text node if a text node was not specified
$textPartNr = isSet($matches[2]) ? substr($matches[2],1,-1) : 1;
 
// Support negative indexes like -1 === last a.s.o.
if ($textPartNr < 0) $textPartNr = $textPartSize + $textPartNr +1;
if (($textPartNr <= 0) OR ($textPartNr > $textPartSize)) {
$this->_displayError("The $absoluteXPath/text()[$textPartNr] value isn't a NODE in this document.", __LINE__, __FILE__, FALSE);
break; // try-block
}
$text =& $this->nodeIndex[$absoluteXPath]['textParts'][$textPartNr - 1];
$status = TRUE;
break; // try-block
}
// At this point we have been given an xpath with neither a 'text()' nor 'attribute::' axis at the end
// So we assume a get to text is wanted and use the optioanl fallback parameters $textPartNr
if (!isSet($this->nodeIndex[$absoluteXPath])) {
$this->_displayError("The $absoluteXPath value isn't a node in this document.", __LINE__, __FILE__, FALSE);
break; // try-block
}
 
// Get the amount of the text parts in the node.
$textPartSize = sizeOf($this->nodeIndex[$absoluteXPath]['textParts']);
 
// If $textPartNr == NULL we return a *copy* of the whole concated text-parts
if (is_null($textPartNr)) {
unset($text);
$text = implode('', $this->nodeIndex[$absoluteXPath]['textParts']);
$status = TRUE;
break; // try-block
}
// Support negative indexes like -1 === last a.s.o.
if ($textPartNr < 0) $textPartNr = $textPartSize + $textPartNr +1;
if (($textPartNr <= 0) OR ($textPartNr > $textPartSize)) {
$this->_displayError("The $absoluteXPath has no text part at pos [$textPartNr] (Note: text parts start with 1).", __LINE__, __FILE__, FALSE);
break; // try-block
}
$text =& $this->nodeIndex[$absoluteXPath]['textParts'][$textPartNr -1];
$status = TRUE;
} while (FALSE); // END try-block
if (!$status) return FALSE;
return $text;
}
 
/**
* Obtain the string value of an object
*
* http://www.w3.org/TR/xpath#dt-string-value
*
* "For every type of node, there is a way of determining a string-value for a node of that type.
* For some types of node, the string-value is part of the node; for other types of node, the
* string-value is computed from the string-value of descendant nodes."
*
* @param $node (node) The node we have to convert
* @return (string) The string value of the node. "" if the object has no evaluatable
* string value
*/
function _stringValue($node) {
// Decode the entitites and then add the resulting literal string into our array.
return $this->_addLiteral($this->decodeEntities($this->wholeText($node)));
}
//-----------------------------------------------------------------------------------------
// XPathEngine ------ Export the XML Document ------
//-----------------------------------------------------------------------------------------
/**
* Returns the containing XML as marked up HTML with specified nodes hi-lighted
*
* @param $absoluteXPath (string) The address of the node you would like to export.
* If empty the whole document will be exported.
* @param $hilighXpathList (array) A list of nodes that you would like to highlight
* @return (mixed) The Xml document marked up as HTML so that it can
* be viewed in a browser, including any XML headers.
* FALSE on error.
* @see _export()
*/
function exportAsHtml($absoluteXPath='', $hilightXpathList=array()) {
$htmlString = $this->_export($absoluteXPath, $xmlHeader=NULL, $hilightXpathList);
if (!$htmlString) return FALSE;
return "<pre>\n" . $htmlString . "\n</pre>";
}
/**
* Given a context this function returns the containing XML
*
* @param $absoluteXPath (string) The address of the node you would like to export.
* If empty the whole document will be exported.
* @param $xmlHeader (array) The string that you would like to appear before
* the XML content. ie before the <root></root>. If you
* do not specify this argument, the xmlHeader that was
* found in the parsed xml file will be used instead.
* @return (mixed) The Xml fragment/document, suitable for writing
* out to an .xml file or as part of a larger xml file, or
* FALSE on error.
* @see _export()
*/
function exportAsXml($absoluteXPath='', $xmlHeader=NULL) {
$this->hilightXpathList = NULL;
return $this->_export($absoluteXPath, $xmlHeader);
}
/**
* Generates a XML string with the content of the current document and writes it to a file.
*
* Per default includes a <?xml ...> tag at the start of the data too.
*
* @param $fileName (string)
* @param $absoluteXPath (string) The path to the parent node you want(see text above)
* @param $xmlHeader (array) The string that you would like to appear before
* the XML content. ie before the <root></root>. If you
* do not specify this argument, the xmlHeader that was
* found in the parsed xml file will be used instead.
* @return (string) The returned string contains well-formed XML data
* or FALSE on error.
* @see exportAsXml(), exportAsHtml()
*/
function exportToFile($fileName, $absoluteXPath='', $xmlHeader=NULL) {
$status = FALSE;
do { // try-block
if (!($hFile = fopen($fileName, "wb"))) { // Did we open the file ok?
$errStr = "Failed to open the $fileName xml file.";
break; // try-block
}
if ($this->properties['OS_supports_flock']) {
if (!flock($hFile, LOCK_EX + LOCK_NB)) { // Lock the file
$errStr = "Couldn't get an exclusive lock on the $fileName file.";
break; // try-block
}
}
if (!($xmlOut = $this->_export($absoluteXPath, $xmlHeader))) {
$errStr = "Export failed";
break; // try-block
}
$iBytesWritten = fwrite($hFile, $xmlOut);
if ($iBytesWritten != strlen($xmlOut)) {
$errStr = "Write error when writing back the $fileName file.";
break; // try-block
}
// Flush and unlock the file
@fflush($hFile);
$status = TRUE;
} while(FALSE);
@flock($hFile, LOCK_UN);
@fclose($hFile);
// Sanity check the produced file.
clearstatcache();
if (filesize($fileName) < strlen($xmlOut)) {
$errStr = "Write error when writing back the $fileName file.";
$status = FALSE;
}
if (!$status) $this->_displayError($errStr, __LINE__, __FILE__, FALSE);
return $status;
}
 
/**
* Generates a XML string with the content of the current document.
*
* This is the start for extracting the XML-data from the node-tree. We do some preperations
* and then call _InternalExport() to fetch the main XML-data. You optionally may pass
* xpath to any node that will then be used as top node, to extract XML-parts of the
* document. Default is '', meaning to extract the whole document.
*
* You also may pass a 'xmlHeader' (usually something like <?xml version="1.0"? > that will
* overwrite any other 'xmlHeader', if there was one in the original source. If there
* wasn't one in the original source, and you still don't specify one, then it will
* use a default of <?xml version="1.0"? >
* Finaly, when exporting to HTML, you may pass a vector xPaths you want to hi-light.
* The hi-lighted tags and attributes will receive a nice color.
*
* NOTE I : The output can have 2 formats:
* a) If "skip white spaces" is/was set. (Not Recommended - slower)
* The output is formatted by adding indenting and carriage returns.
* b) If "skip white spaces" is/was *NOT* set.
* 'as is'. No formatting is done. The output should the same as the
* the original parsed XML source.
*
* @param $absoluteXPath (string) (optional, default is root) The node we choose as top-node
* @param $xmlHeader (string) (optional) content before <root/> (see text above)
* @param $hilightXpath (array) (optional) a vector of xPaths to nodes we wat to
* hi-light (see text above)
* @return (mixed) The xml string, or FALSE on error.
*/
function _export($absoluteXPath='', $xmlHeader=NULL, $hilightXpathList='') {
// Check whether a root node is given.
if (empty($absoluteXpath)) $absoluteXpath = '';
if ($absoluteXpath == '/') $absoluteXpath = '';
if ($this->_indexIsDirty) $this->reindexNodeTree();
if (!isSet($this->nodeIndex[$absoluteXpath])) {
// If the $absoluteXpath was '' and it didn't exist, then the document is empty
// and we can safely return ''.
if ($absoluteXpath == '') return '';
$this->_displayError("The given xpath '{$absoluteXpath}' isn't a node in this document.", __LINE__, __FILE__, FALSE);
return FALSE;
}
$this->hilightXpathList = $hilightXpathList;
$this->indentStep = ' ';
$hilightIsActive = is_array($hilightXpathList);
if ($hilightIsActive) {
$this->indentStep = '&nbsp;&nbsp;&nbsp;&nbsp;';
}
// Cache this now
$this->parseSkipWhiteCache = isSet($this->parseOptions[XML_OPTION_SKIP_WHITE]) ? $this->parseOptions[XML_OPTION_SKIP_WHITE] : FALSE;
 
///////////////////////////////////////
// Get the starting node and begin with the header
 
// Get the start node. The super root is a special case.
$startNode = NULL;
if (empty($absoluteXPath)) {
$superRoot = $this->nodeIndex[''];
// If they didn't specify an xml header, use the one in the object
if (is_null($xmlHeader)) {
$xmlHeader = $this->parseSkipWhiteCache ? trim($superRoot['textParts'][0]) : $superRoot['textParts'][0];
// If we still don't have an XML header, then use a suitable default
if (empty($xmlHeader)) {
$xmlHeader = '<?xml version="1.0"?>';
}
}
 
if (isSet($superRoot['childNodes'][0])) $startNode = $superRoot['childNodes'][0];
} else {
$startNode = $this->nodeIndex[$absoluteXPath];
}
 
if (!empty($xmlHeader)) {
$xmlOut = $this->parseSkipWhiteCache ? $xmlHeader."\n" : $xmlHeader;
} else {
$xmlOut = '';
}
 
///////////////////////////////////////
// Output the document.
 
if (($xmlOut .= $this->_InternalExport($startNode)) === FALSE) {
return FALSE;
}
///////////////////////////////////////
 
// Convert our markers to hi-lights.
if ($hilightIsActive) {
$from = array('<', '>', chr(2), chr(3));
$to = array('&lt;', '&gt;', '<font color="#FF0000"><b>', '</b></font>');
$xmlOut = str_replace($from, $to, $xmlOut);
}
return $xmlOut;
}
 
/**
* Export the xml document starting at the named node.
*
* @param $node (node) The node we have to start exporting from
* @return (string) The string representation of the node.
*/
function _InternalExport($node) {
$ThisFunctionName = '_InternalExport';
$bDebugThisFunction = in_array($ThisFunctionName, $this->aDebugFunctions);
$this->_beginDebugFunction($ThisFunctionName, $bDebugThisFunction);
if ($bDebugThisFunction) {
echo "Exporting node: ".$node['xpath']."<br>\n";
}
 
////////////////////////////////
 
// Quick out.
if (empty($node)) return '';
 
// The output starts as empty.
$xmlOut = '';
// This loop will output the text before the current child of a parent then the
// current child. Where the child is a short tag we output the child, then move
// onto the next child. Where the child is not a short tag, we output the open tag,
// then queue up on currentParentStack[] the child.
//
// When we run out of children, we then output the last text part, and close the
// 'parent' tag before popping the stack and carrying on.
//
// To illustrate, the numbers in this xml file indicate what is output on each
// pass of the while loop:
//
// 1
// <1>2
// <2>3
// <3/>4
// </4>5
// <5/>6
// </6>
 
// Although this is neater done using recursion, there's a 33% performance saving
// to be gained by using this stack mechanism.
 
// Only add CR's if "skip white spaces" was set. Otherwise leave as is.
$CR = ($this->parseSkipWhiteCache) ? "\n" : '';
$currentIndent = '';
$hilightIsActive = is_array($this->hilightXpathList);
 
// To keep track of where we are in the document we use a node stack. The node
// stack has the following parallel entries:
// 'Parent' => (array) A copy of the parent node that who's children we are
// exporting
// 'ChildIndex' => (array) The child index of the corresponding parent that we
// are currently exporting.
// 'Highlighted'=> (bool) If we are highlighting this node. Only relevant if
// the hilight is active.
 
// Setup our node stack. The loop is designed to output children of a parent,
// not the parent itself, so we must put the parent on as the starting point.
$nodeStack['Parent'] = array($node['parentNode']);
// And add the childpos of our node in it's parent to our "child index stack".
$nodeStack['ChildIndex'] = array($node['pos']);
// We start at 0.
$nodeStackIndex = 0;
 
// We have not to output text before/after our node, so blank it. We will recover it
// later
$OldPreceedingStringValue = $nodeStack['Parent'][0]['textParts'][$node['pos']];
$OldPreceedingStringRef =& $nodeStack['Parent'][0]['textParts'][$node['pos']];
$OldPreceedingStringRef = "";
$currentXpath = "";
 
// While we still have data on our stack
while ($nodeStackIndex >= 0) {
// Count the children and get a copy of the current child.
$iChildCount = count($nodeStack['Parent'][$nodeStackIndex]['childNodes']);
$currentChild = $nodeStack['ChildIndex'][$nodeStackIndex];
// Only do the auto indenting if the $parseSkipWhiteCache flag was set.
if ($this->parseSkipWhiteCache)
$currentIndent = str_repeat($this->indentStep, $nodeStackIndex);
 
if ($bDebugThisFunction)
echo "Exporting child ".($currentChild+1)." of node {$nodeStack['Parent'][$nodeStackIndex]['xpath']}\n";
 
///////////////////////////////////////////
// Add the text before our child.
 
// Add the text part before the current child
$tmpTxt =& $nodeStack['Parent'][$nodeStackIndex]['textParts'][$currentChild];
if (isSet($tmpTxt) AND ($tmpTxt!="")) {
// Only add CR indent if there were children
if ($iChildCount)
$xmlOut .= $CR.$currentIndent;
// Hilight if necessary.
$highlightStart = $highlightEnd = '';
if ($hilightIsActive) {
$currentXpath = $nodeStack['Parent'][$nodeStackIndex]['xpath'].'/text()['.($currentChild+1).']';
if (in_array($currentXpath, $this->hilightXpathList)) {
// Yes we hilight
$highlightStart = chr(2);
$highlightEnd = chr(3);
}
}
$xmlOut .= $highlightStart.$nodeStack['Parent'][$nodeStackIndex]['textParts'][$currentChild].$highlightEnd;
}
if ($iChildCount && $nodeStackIndex) $xmlOut .= $CR;
 
///////////////////////////////////////////
 
// Are there any more children?
if ($iChildCount <= $currentChild) {
// Nope, so output the last text before the closing tag
$tmpTxt =& $nodeStack['Parent'][$nodeStackIndex]['textParts'][$currentChild+1];
if (isSet($tmpTxt) AND ($tmpTxt!="")) {
// Hilight if necessary.
$highlightStart = $highlightEnd = '';
if ($hilightIsActive) {
$currentXpath = $nodeStack['Parent'][$nodeStackIndex]['xpath'].'/text()['.($currentChild+2).']';
if (in_array($currentXpath, $this->hilightXpathList)) {
// Yes we hilight
$highlightStart = chr(2);
$highlightEnd = chr(3);
}
}
$xmlOut .= $highlightStart
.$currentIndent.$nodeStack['Parent'][$nodeStackIndex]['textParts'][$currentChild+1].$CR
.$highlightEnd;
}
 
// Now close this tag, as we are finished with this child.
 
// Potentially output an (slightly smaller indent).
if ($this->parseSkipWhiteCache
&& count($nodeStack['Parent'][$nodeStackIndex]['childNodes'])) {
$xmlOut .= str_repeat($this->indentStep, $nodeStackIndex - 1);
}
 
// Check whether the xml-tag is to be hilighted.
$highlightStart = $highlightEnd = '';
if ($hilightIsActive) {
$currentXpath = $nodeStack['Parent'][$nodeStackIndex]['xpath'];
if (in_array($currentXpath, $this->hilightXpathList)) {
// Yes we hilight
$highlightStart = chr(2);
$highlightEnd = chr(3);
}
}
$xmlOut .= $highlightStart
.'</'.$nodeStack['Parent'][$nodeStackIndex]['name'].'>'
.$highlightEnd;
// Decrement the $nodeStackIndex to go back to the next unfinished parent.
$nodeStackIndex--;
 
// If the index is 0 we are finished exporting the last node, as we may have been
// exporting an internal node.
if ($nodeStackIndex == 0) break;
 
// Indicate to the parent that we are finished with this child.
$nodeStack['ChildIndex'][$nodeStackIndex]++;
 
continue;
}
 
///////////////////////////////////////////
// Ok, there are children still to process.
 
// Queue up the next child (I can copy because I won't modify and copying is faster.)
$nodeStack['Parent'][$nodeStackIndex + 1] = $nodeStack['Parent'][$nodeStackIndex]['childNodes'][$currentChild];
 
// Work out if it is a short child tag.
$iGrandChildCount = count($nodeStack['Parent'][$nodeStackIndex + 1]['childNodes']);
$shortGrandChild = (($iGrandChildCount == 0) AND (implode('',$nodeStack['Parent'][$nodeStackIndex + 1]['textParts'])==''));
 
///////////////////////////////////////////
// Assemble the attribute string first.
$attrStr = '';
foreach($nodeStack['Parent'][$nodeStackIndex + 1]['attributes'] as $key=>$val) {
// Should we hilight the attribute?
if ($hilightIsActive AND in_array($currentXpath.'/attribute::'.$key, $this->hilightXpathList)) {
$hiAttrStart = chr(2);
$hiAttrEnd = chr(3);
} else {
$hiAttrStart = $hiAttrEnd = '';
}
$attrStr .= ' '.$hiAttrStart.$key.'="'.$val.'"'.$hiAttrEnd;
}
 
///////////////////////////////////////////
// Work out what goes before and after the tag content
 
$beforeTagContent = $currentIndent;
if ($shortGrandChild) $afterTagContent = '/>';
else $afterTagContent = '>';
 
// Check whether the xml-tag is to be hilighted.
if ($hilightIsActive) {
$currentXpath = $nodeStack['Parent'][$nodeStackIndex + 1]['xpath'];
if (in_array($currentXpath, $this->hilightXpathList)) {
// Yes we hilight
$beforeTagContent .= chr(2);
$afterTagContent .= chr(3);
}
}
$beforeTagContent .= '<';
// if ($shortGrandChild) $afterTagContent .= $CR;
///////////////////////////////////////////
// Output the tag
 
$xmlOut .= $beforeTagContent
.$nodeStack['Parent'][$nodeStackIndex + 1]['name'].$attrStr
.$afterTagContent;
 
///////////////////////////////////////////
// Carry on.
 
// If it is a short tag, then we've already done this child, we just move to the next
if ($shortGrandChild) {
// Move to the next child, we need not go deeper in the tree.
$nodeStack['ChildIndex'][$nodeStackIndex]++;
// But if we are just exporting the one node we'd go no further.
if ($nodeStackIndex == 0) break;
} else {
// Else queue up the child going one deeper in the stack
$nodeStackIndex++;
// Start with it's first child
$nodeStack['ChildIndex'][$nodeStackIndex] = 0;
}
}
 
$result = $xmlOut;
 
// Repair what we "undid"
$OldPreceedingStringRef = $OldPreceedingStringValue;
 
////////////////////////////////////////////
 
$this->_closeDebugFunction($ThisFunctionName, $result, $bDebugThisFunction);
 
return $result;
}
//-----------------------------------------------------------------------------------------
// XPathEngine ------ Import the XML Source ------
//-----------------------------------------------------------------------------------------
/**
* Reads a file or URL and parses the XML data.
*
* Parse the XML source and (upon success) store the information into an internal structure.
*
* @param $fileName (string) Path and name (or URL) of the file to be read and parsed.
* @return (bool) TRUE on success, FALSE on failure (check getLastError())
* @see importFromString(), getLastError(),
*/
function importFromFile($fileName) {
$status = FALSE;
$errStr = '';
do { // try-block
// Remember file name. Used in error output to know in which file it happend
$this->properties['xmlFile'] = $fileName;
// If we already have content, then complain.
if (!empty($this->nodeRoot)) {
$errStr = 'Called when this object already contains xml data. Use reset().';
break; // try-block
}
// The the source is an url try to fetch it.
if (preg_match(';^http(s)?://;', $fileName)) {
// Read the content of the url...this is really prone to errors, and we don't really
// check for too many here...for now, suppressing both possible warnings...we need
// to check if we get a none xml page or something of that nature in the future
$xmlString = @implode('', @file($fileName));
if (!empty($xmlString)) {
$status = TRUE;
} else {
$errStr = "The url '{$fileName}' could not be found or read.";
}
break; // try-block
}
// Reaching this point we're dealing with a real file (not an url). Check if the file exists and is readable.
if (!is_readable($fileName)) { // Read the content from the file
$errStr = "File '{$fileName}' could not be found or read.";
break; // try-block
}
if (is_dir($fileName)) {
$errStr = "'{$fileName}' is a directory.";
break; // try-block
}
// Read the file
if (!($fp = @fopen($fileName, 'rb'))) {
$errStr = "Failed to open '{$fileName}' for read.";
break; // try-block
}
$xmlString = fread($fp, filesize($fileName));
@fclose($fp);
$status = TRUE;
} while (FALSE);
if (!$status) {
$this->_displayError('In importFromFile(): '. $errStr, __LINE__, __FILE__, FALSE);
return FALSE;
}
return $this->importFromString($xmlString);
}
/**
* Reads a string and parses the XML data.
*
* Parse the XML source and (upon success) store the information into an internal structure.
* If a parent xpath is given this means that XML data is to be *appended* to that parent.
*
* ### If a function uses setLastError(), then say in the function header that getLastError() is useful.
*
* @param $xmlString (string) Name of the string to be read and parsed.
* @param $absoluteParentPath (string) Node to append data too (see above)
* @return (bool) TRUE on success, FALSE on failure
* (check getLastError())
*/
function importFromString($xmlString, $absoluteParentPath = '') {
$ThisFunctionName = 'importFromString';
$bDebugThisFunction = in_array($ThisFunctionName, $this->aDebugFunctions);
$this->_beginDebugFunction($ThisFunctionName, $bDebugThisFunction);
if ($bDebugThisFunction) {
echo "Importing from string of length ".strlen($xmlString)." to node '$absoluteParentPath'\n<br>";
echo "Parser options:\n<br>";
print_r($this->parseOptions);
}
 
$status = FALSE;
$errStr = '';
do { // try-block
// If we already have content, then complain.
if (!empty($this->nodeRoot) AND empty($absoluteParentPath)) {
$errStr = 'Called when this object already contains xml data. Use reset() or pass the parent Xpath as 2ed param to where tie data will append.';
break; // try-block
}
// Check whether content has been read.
if (empty($xmlString)) {
// Nothing to do!!
$status = TRUE;
// If we were importing to root, build a blank root.
if (empty($absoluteParentPath)) {
$this->_createSuperRoot();
}
$this->reindexNodeTree();
// $errStr = 'This xml document (string) was empty';
break; // try-block
} else {
$xmlString = $this->_translateAmpersand($xmlString);
}
// Restart our node index with a root entry.
$nodeStack = array();
$this->parseStackIndex = 0;
 
// If a parent xpath is given this means that XML data is to be *appended* to that parent.
if (!empty($absoluteParentPath)) {
// Check if parent exists
if (!isSet($this->nodeIndex[$absoluteParentPath])) {
$errStr = "You tried to append XML data to a parent '$absoluteParentPath' that does not exist.";
break; // try-block
}
// Add it as the starting point in our array.
$this->nodeStack[0] =& $this->nodeIndex[$absoluteParentPath];
} else {
// Build a 'super-root'
$this->_createSuperRoot();
// Put it in as the start of our node stack.
$this->nodeStack[0] =& $this->nodeRoot;
}
 
// Point our text buffer reference at the next text part of the root
$this->parsedTextLocation =& $this->nodeStack[0]['textParts'][];
$this->parsInCData = 0;
// We cache this now.
$this->parseSkipWhiteCache = isSet($this->parseOptions[XML_OPTION_SKIP_WHITE]) ? $this->parseOptions[XML_OPTION_SKIP_WHITE] : FALSE;
// Create an XML parser.
$parser = xml_parser_create();
// Set default XML parser options.
if (is_array($this->parseOptions)) {
foreach($this->parseOptions as $key => $val) {
xml_parser_set_option($parser, $key, $val);
}
}
// Set the object and the element handlers for the XML parser.
xml_set_object($parser, $this);
xml_set_element_handler($parser, '_handleStartElement', '_handleEndElement');
xml_set_character_data_handler($parser, '_handleCharacterData');
xml_set_default_handler($parser, '_handleDefaultData');
xml_set_processing_instruction_handler($parser, '_handlePI');
// Parse the XML source and on error generate an error message.
if (!xml_parse($parser, $xmlString, TRUE)) {
$source = empty($this->properties['xmlFile']) ? 'string' : 'file ' . basename($this->properties['xmlFile']) . "'";
$errStr = "XML error in given {$source} on line ".
xml_get_current_line_number($parser). ' column '. xml_get_current_column_number($parser) .
'. Reason:'. xml_error_string(xml_get_error_code($parser));
break; // try-block
}
// Free the parser.
@xml_parser_free($parser);
// And we don't need this any more.
$this->nodeStack = array();
 
$this->reindexNodeTree();
 
if ($bDebugThisFunction) {
print_r(array_keys($this->nodeIndex));
}
 
$status = TRUE;
} while (FALSE);
if (!$status) {
$this->_displayError('In importFromString(): '. $errStr, __LINE__, __FILE__, FALSE);
$bResult = FALSE;
} else {
$bResult = TRUE;
}
 
////////////////////////////////////////////
 
$this->_closeDebugFunction($ThisFunctionName, $bResult, $bDebugThisFunction);
 
return $bResult;
}
//-----------------------------------------------------------------------------------------
// XPathEngine ------ XML Handlers ------
//-----------------------------------------------------------------------------------------
/**
* Handles opening XML tags while parsing.
*
* While parsing a XML document for each opening tag this method is
* called. It'll add the tag found to the tree of document nodes.
*
* @param $parser (int) Handler for accessing the current XML parser.
* @param $name (string) Name of the opening tag found in the document.
* @param $attributes (array) Associative array containing a list of
* all attributes of the tag found in the document.
* @see _handleEndElement(), _handleCharacterData()
*/
function _handleStartElement($parser, $nodeName, $attributes) {
if (empty($nodeName)) {
$this->_displayError('XML error in file at line'. xml_get_current_line_number($parser) .'. Empty name.', __LINE__, __FILE__);
return;
}
 
// Trim accumulated text if necessary.
if ($this->parseSkipWhiteCache) {
$iCount = count($this->nodeStack[$this->parseStackIndex]['textParts']);
$this->nodeStack[$this->parseStackIndex]['textParts'][$iCount-1] = rtrim($this->parsedTextLocation);
}
 
if ($this->bDebugXmlParse) {
echo "<blockquote>" . htmlspecialchars("Start node: <".$nodeName . ">")."<br>";
echo "Appended to stack entry: $this->parseStackIndex<br>\n";
echo "Text part before element is: ".htmlspecialchars($this->parsedTextLocation);
/*
echo "<pre>";
$dataPartsCount = count($this->nodeStack[$this->parseStackIndex]['textParts']);
for ($i = 0; $i < $dataPartsCount; $i++) {
echo "$i:". htmlspecialchars($this->nodeStack[$this->parseStackIndex]['textParts'][$i])."\n";
}
echo "</pre>";
*/
}
 
// Add a node and set path to current.
if (!$this->_internalAppendChild($this->parseStackIndex, $nodeName)) {
$this->_displayError('Internal error during parse of XML file at line'. xml_get_current_line_number($parser) .'. Empty name.', __LINE__, __FILE__);
return;
}
 
// We will have gone one deeper then in the stack.
$this->parseStackIndex++;
 
// Point our parseTxtBuffer reference at the new node.
$this->parsedTextLocation =& $this->nodeStack[$this->parseStackIndex]['textParts'][0];
// Set the attributes.
if (!empty($attributes)) {
if ($this->bDebugXmlParse) {
echo 'Attributes: <br>';
print_r($attributes);
echo '<br>';
}
$this->nodeStack[$this->parseStackIndex]['attributes'] = $attributes;
}
}
/**
* Handles closing XML tags while parsing.
*
* While parsing a XML document for each closing tag this method is called.
*
* @param $parser (int) Handler for accessing the current XML parser.
* @param $name (string) Name of the closing tag found in the document.
* @see _handleStartElement(), _handleCharacterData()
*/
function _handleEndElement($parser, $name) {
if (($this->parsedTextLocation=='')
&& empty($this->nodeStack[$this->parseStackIndex]['textParts'])) {
// We reach this point when parsing a tag of format <foo/>. The 'textParts'-array
// should stay empty and not have an empty string in it.
} else {
// Trim accumulated text if necessary.
if ($this->parseSkipWhiteCache) {
$iCount = count($this->nodeStack[$this->parseStackIndex]['textParts']);
$this->nodeStack[$this->parseStackIndex]['textParts'][$iCount-1] = rtrim($this->parsedTextLocation);
}
}
 
if ($this->bDebugXmlParse) {
echo "Text part after element is: ".htmlspecialchars($this->parsedTextLocation)."<br>\n";
echo htmlspecialchars("Parent:<{$this->parseStackIndex}>, End-node:</$name> '".$this->parsedTextLocation) . "'<br>Text nodes:<pre>\n";
$dataPartsCount = count($this->nodeStack[$this->parseStackIndex]['textParts']);
for ($i = 0; $i < $dataPartsCount; $i++) {
echo "$i:". htmlspecialchars($this->nodeStack[$this->parseStackIndex]['textParts'][$i])."\n";
}
var_dump($this->nodeStack[$this->parseStackIndex]['textParts']);
echo "</pre></blockquote>\n";
}
 
// Jump back to the parent element.
$this->parseStackIndex--;
 
// Set our reference for where we put any more whitespace
$this->parsedTextLocation =& $this->nodeStack[$this->parseStackIndex]['textParts'][];
 
// Note we leave the entry in the stack, as it will get blanked over by the next element
// at this level. The safe thing to do would be to remove it too, but in the interests
// of performance, we will not bother, as were it to be a problem, then it would be an
// internal bug anyway.
if ($this->parseStackIndex < 0) {
$this->_displayError('Internal error during parse of XML file at line'. xml_get_current_line_number($parser) .'. Empty name.', __LINE__, __FILE__);
return;
}
}
/**
* Handles character data while parsing.
*
* While parsing a XML document for each character data this method
* is called. It'll add the character data to the document tree.
*
* @param $parser (int) Handler for accessing the current XML parser.
* @param $text (string) Character data found in the document.
* @see _handleStartElement(), _handleEndElement()
*/
function _handleCharacterData($parser, $text) {
if ($this->parsInCData >0) $text = $this->_translateAmpersand($text, $reverse=TRUE);
if ($this->bDebugXmlParse) echo "Handling character data: '".htmlspecialchars($text)."'<br>";
if ($this->parseSkipWhiteCache AND !empty($text) AND !$this->parsInCData) {
// Special case CR. CR always comes in a separate data. Trans. it to '' or ' '.
// If txtBuffer is already ending with a space use '' otherwise ' '.
$bufferHasEndingSpace = (empty($this->parsedTextLocation) OR substr($this->parsedTextLocation, -1) === ' ') ? TRUE : FALSE;
if ($text=="\n") {
$text = $bufferHasEndingSpace ? '' : ' ';
} else {
if ($bufferHasEndingSpace) {
$text = ltrim(preg_replace('/\s+/', ' ', $text));
} else {
$text = preg_replace('/\s+/', ' ', $text);
}
}
if ($this->bDebugXmlParse) echo "'Skip white space' is ON. reduced to : '" .htmlspecialchars($text) . "'<br>";
}
$this->parsedTextLocation .= $text;
}
/**
* Default handler for the XML parser.
*
* While parsing a XML document for string not caught by one of the other
* handler functions, we end up here.
*
* @param $parser (int) Handler for accessing the current XML parser.
* @param $text (string) Character data found in the document.
* @see _handleStartElement(), _handleEndElement()
*/
function _handleDefaultData($parser, $text) {
do { // try-block
if (!strcmp($text, '<![CDATA[')) {
$this->parsInCData++;
} elseif (!strcmp($text, ']]>')) {
$this->parsInCData--;
if ($this->parsInCData < 0) $this->parsInCData = 0;
}
$this->parsedTextLocation .= $this->_translateAmpersand($text, $reverse=TRUE);
if ($this->bDebugXmlParse) echo "Default handler data: ".htmlspecialchars($text)."<br>";
break; // try-block
} while (FALSE); // END try-block
}
/**
* Handles processing instruction (PI)
*
* A processing instruction has the following format:
* <? target data ? > e.g. <? dtd version="1.0" ? >
*
* Currently I have no bether idea as to left it 'as is' and treat the PI data as normal
* text (and adding the surrounding PI-tags <? ? >).
*
* @param $parser (int) Handler for accessing the current XML parser.
* @param $target (string) Name of the PI target. E.g. XML, PHP, DTD, ...
* @param $data (string) Associative array containing a list of
* @see PHP's manual "xml_set_processing_instruction_handler"
*/
function _handlePI($parser, $target, $data) {
//echo("pi data=".$data."end"); exit;
$data = $this->_translateAmpersand($data, $reverse=TRUE);
$this->parsedTextLocation .= "<?{$target} {$data}?>";
return TRUE;
}
//-----------------------------------------------------------------------------------------
// XPathEngine ------ Node Tree Stuff ------
//-----------------------------------------------------------------------------------------
 
/**
* Creates a super root node.
*/
function _createSuperRoot() {
// Build a 'super-root'
$this->nodeRoot = $this->emptyNode;
$this->nodeRoot['name'] = '';
$this->nodeRoot['parentNode'] = NULL;
$this->nodeIndex[''] =& $this->nodeRoot;
}
 
/**
* Adds a new node to the XML document tree during xml parsing.
*
* This method adds a new node to the tree of nodes of the XML document
* being handled by this class. The new node is created according to the
* parameters passed to this method. This method is a much watered down
* version of appendChild(), used in parsing an xml file only.
*
* It is assumed that adding starts with root and progresses through the
* document in parse order. New nodes must have a corresponding parent. And
* once we have read the </> tag for the element we will never need to add
* any more data to that node. Otherwise the add will be ignored or fail.
*
* The function is faciliated by a nodeStack, which is an array of nodes that
* we have yet to close.
*
* @param $stackParentIndex (int) The index into the nodeStack[] of the parent
* node to which the new node should be added as
* a child. *READONLY*
* @param $nodeName (string) Name of the new node. *READONLY*
* @return (bool) TRUE if we successfully added a new child to
* the node stack at index $stackParentIndex + 1,
* FALSE on error.
*/
function _internalAppendChild($stackParentIndex, $nodeName) {
// This call is likely to be executed thousands of times, so every 0.01ms counts.
// If you want to debug this function, you'll have to comment the stuff back in
//$bDebugThisFunction = FALSE;
/*
$ThisFunctionName = '_internalAppendChild';
$bDebugThisFunction = in_array($ThisFunctionName, $this->aDebugFunctions);
$this->_beginDebugFunction($ThisFunctionName, $bDebugThisFunction);
if ($bDebugThisFunction) {
echo "Current Node (parent-index) and the child to append : '{$stackParentIndex}' + '{$nodeName}' \n<br>";
}
*/
//////////////////////////////////////
 
if (!isSet($this->nodeStack[$stackParentIndex])) {
$errStr = "Invalid parent. You tried to append the tag '{$nodeName}' to an non-existing parent in our node stack '{$stackParentIndex}'.";
$this->_displayError('In _internalAppendChild(): '. $errStr, __LINE__, __FILE__, FALSE);
 
/*
$this->_closeDebugFunction($ThisFunctionName, FALSE, $bDebugThisFunction);
*/
 
return FALSE;
}
 
// Retrieve the parent node from the node stack. This is the last node at that
// depth that we have yet to close. This is where we should add the text/node.
$parentNode =& $this->nodeStack[$stackParentIndex];
// Brand new node please
$newChildNode = $this->emptyNode;
// Save the vital information about the node.
$newChildNode['name'] = $nodeName;
$parentNode['childNodes'][] =& $newChildNode;
// Add to our node stack
$this->nodeStack[$stackParentIndex + 1] =& $newChildNode;
 
/*
if ($bDebugThisFunction) {
echo "The new node received index: '".($stackParentIndex + 1)."'\n";
foreach($this->nodeStack as $key => $val) echo "$key => ".$val['name']."\n";
}
$this->_closeDebugFunction($ThisFunctionName, TRUE, $bDebugThisFunction);
*/
 
return TRUE;
}
/**
* Update nodeIndex and every node of the node-tree.
*
* Call after you have finished any tree modifications other wise a match with
* an xPathQuery will produce wrong results. The $this->nodeIndex[] is recreated
* and every nodes optimization data is updated. The optimization data is all the
* data that is duplicate information, would just take longer to find. Child nodes
* with value NULL are removed from the tree.
*
* By default the modification functions in this component will automatically re-index
* the nodes in the tree. Sometimes this is not the behaver you want. To surpress the
* reindex, set the functions $autoReindex to FALSE and call reindexNodeTree() at the
* end of your changes. This sometimes leads to better code (and less CPU overhead).
*
* Sample:
* =======
* Given the xml is <AAA><B/>.<B/>.<B/></AAA> | Goal is <AAA>.<B/>.</AAA> (Delete B[1] and B[3])
* $xPathSet = $xPath->match('//B'); # Will result in array('/AAA[1]/B[1]', '/AAA[1]/B[2]', '/AAA[1]/B[3]');
* Three ways to do it.
* 1) Top-Down (with auto reindexing) - Safe, Slow and you get easily mix up with the the changing node index
* removeChild('/AAA[1]/B[1]'); // B[1] removed, thus all B[n] become B[n-1] !!
* removeChild('/AAA[1]/B[2]'); // Now remove B[2] (That originaly was B[3])
* 2) Bottom-Up (with auto reindexing) - Safe, Slow and the changing node index (caused by auto-reindex) can be ignored.
* for ($i=sizeOf($xPathSet)-1; $i>=0; $i--) {
* if ($i==1) continue;
* removeChild($xPathSet[$i]);
* }
* 3) // Top-down (with *NO* auto reindexing) - Fast, Safe as long as you call reindexNodeTree()
* foreach($xPathSet as $xPath) {
* // Specify no reindexing
* if ($xPath == $xPathSet[1]) continue;
* removeChild($xPath, $autoReindex=FALSE);
* // The object is now in a slightly inconsistent state.
* }
* // Finally do the reindex and the object is consistent again
* reindexNodeTree();
*
* @return (bool) TRUE on success, FALSE otherwise.
* @see _recursiveReindexNodeTree()
*/
function reindexNodeTree() {
//return;
$this->_indexIsDirty = FALSE;
$this->nodeIndex = array();
$this->nodeIndex[''] =& $this->nodeRoot;
// Quick out for when the tree has no data.
if (empty($this->nodeRoot)) return TRUE;
return $this->_recursiveReindexNodeTree('');
}
 
/**
* Create the ids that are accessable through the generate-id() function
*/
function _generate_ids() {
// If we have generated them already, then bail.
if (isset($this->nodeIndex['']['generate_id'])) return;
 
// keys generated are the string 'id0' . hexatridecimal-based (0..9,a-z) index
$aNodeIndexes = array_keys($this->nodeIndex);
$idNumber = 0;
foreach($aNodeIndexes as $index => $key) {
// $this->nodeIndex[$key]['generated_id'] = 'id' . base_convert($index,10,36);
// Skip attribute and text nodes.
// ### Currently don't support attribute and text nodes.
if (strstr($key, 'text()') !== FALSE) continue;
if (strstr($key, 'attribute::') !== FALSE) continue;
$this->nodeIndex[$key]['generated_id'] = 'idPhpXPath' . $idNumber;
 
// Make the id's sequential so that we can test predictively.
$idNumber++;
}
}
 
/**
* Here's where the work is done for reindexing (see reindexNodeTree)
*
* @param $absoluteParentPath (string) the xPath to the parent node
* @return (bool) TRUE on success, FALSE otherwise.
* @see reindexNodeTree()
*/
function _recursiveReindexNodeTree($absoluteParentPath) {
$parentNode =& $this->nodeIndex[$absoluteParentPath];
// Check for any 'dead' child nodes first and concate the text parts if found.
for ($iChildIndex=sizeOf($parentNode['childNodes'])-1; $iChildIndex>=0; $iChildIndex--) {
// Check if the child node still exits (it may have been removed).
if (!empty($parentNode['childNodes'][$iChildIndex])) continue;
// Child node was removed. We got to merge the text parts then.
$parentNode['textParts'][$iChildIndex] .= $parentNode['textParts'][$iChildIndex+1];
array_splice($parentNode['textParts'], $iChildIndex+1, 1);
array_splice($parentNode['childNodes'], $iChildIndex, 1);
}
 
// Now start a reindex.
$contextHash = array();
$childSize = sizeOf($parentNode['childNodes']);
 
// If there are no children, we have to treat this specially:
if ($childSize == 0) {
// Add a dummy text node.
$this->nodeIndex[$absoluteParentPath.'/text()[1]'] =& $parentNode;
} else {
for ($iChildIndex=0; $iChildIndex<$childSize; $iChildIndex++) {
$childNode =& $parentNode['childNodes'][$iChildIndex];
// Make sure that there is a text-part in front of every node. (May be empty)
if (!isSet($parentNode['textParts'][$iChildIndex])) $parentNode['textParts'][$iChildIndex] = '';
// Count the nodes with same name (to determine their context position)
$childName = $childNode['name'];
if (empty($contextHash[$childName])) {
$contextPos = $contextHash[$childName] = 1;
} else {
$contextPos = ++$contextHash[$childName];
}
// Make the node-index hash
$newPath = $absoluteParentPath . '/' . $childName . '['.$contextPos.']';
 
// ### Note ultimately we will end up supporting text nodes as actual nodes.
 
// Preceed with a dummy entry for the text node.
$this->nodeIndex[$absoluteParentPath.'/text()['.($childNode['pos']+1).']'] =& $childNode;
// Then the node itself
$this->nodeIndex[$newPath] =& $childNode;
 
// Now some dummy nodes for each of the attribute nodes.
$iAttributeCount = sizeOf($childNode['attributes']);
if ($iAttributeCount > 0) {
$aAttributesNames = array_keys($childNode['attributes']);
for ($iAttributeIndex = 0; $iAttributeIndex < $iAttributeCount; $iAttributeIndex++) {
$attribute = $aAttributesNames[$iAttributeIndex];
$newAttributeNode = $this->emptyNode;
$newAttributeNode['name'] = $attribute;
$newAttributeNode['textParts'] = array($childNode['attributes'][$attribute]);
$newAttributeNode['contextPos'] = $iAttributeIndex;
$newAttributeNode['xpath'] = "$newPath/attribute::$attribute";
$newAttributeNode['parentNode'] =& $childNode;
$newAttributeNode['depth'] =& $parentNode['depth'] + 2;
// Insert the node as a master node, not a reference, otherwise there will be
// variable "bleeding".
$this->nodeIndex["$newPath/attribute::$attribute"] = $newAttributeNode;
}
}
 
// Update the node info (optimisation)
$childNode['parentNode'] =& $parentNode;
$childNode['depth'] = $parentNode['depth'] + 1;
$childNode['pos'] = $iChildIndex;
$childNode['contextPos'] = $contextHash[$childName];
$childNode['xpath'] = $newPath;
$this->_recursiveReindexNodeTree($newPath);
 
// Follow with a dummy entry for the text node.
$this->nodeIndex[$absoluteParentPath.'/text()['.($childNode['pos']+2).']'] =& $childNode;
}
 
// Make sure that their is a text-part after the last node.
if (!isSet($parentNode['textParts'][$iChildIndex])) $parentNode['textParts'][$iChildIndex] = '';
}
 
return TRUE;
}
/**
* Clone a node and it's child nodes.
*
* NOTE: If the node has children you *MUST* use the reference operator!
* E.g. $clonedNode =& cloneNode($node);
* Otherwise the children will not point back to the parent, they will point
* back to your temporary variable instead.
*
* @param $node (mixed) Either a node (hash array) or an abs. Xpath to a node in
* the current doc
* @return (&array) A node and it's child nodes.
*/
function &cloneNode($node, $recursive=FALSE) {
if (is_string($node) AND isSet($this->nodeIndex[$node])) {
$node = $this->nodeIndex[$node];
}
// Copy the text-parts ()
$textParts = $node['textParts'];
$node['textParts'] = array();
foreach ($textParts as $key => $val) {
$node['textParts'][] = $val;
}
$childSize = sizeOf($node['childNodes']);
for ($i=0; $i<$childSize; $i++) {
$childNode =& $this->cloneNode($node['childNodes'][$i], TRUE); // copy child
$node['childNodes'][$i] =& $childNode; // reference the copy
$childNode['parentNode'] =& $node; // child references the parent.
}
if (!$recursive) {
//$node['childNodes'][0]['parentNode'] = null;
//print "<pre>";
//var_dump($node);
}
return $node;
}
/** Nice to have but __sleep() has a bug.
(2002-2 PHP V4.1. See bug #15350)
/**
* PHP cals this function when you call PHP's serialize.
*
* It prevents cyclic referencing, which is why print_r() of an XPath object doesn't work.
*
function __sleep() {
// Destroy recursive pointers
$keys = array_keys($this->nodeIndex);
$size = sizeOf($keys);
for ($i=0; $i<$size; $i++) {
unset($this->nodeIndex[$keys[$i]]['parentNode']);
}
unset($this->nodeIndex);
}
/**
* PHP cals this function when you call PHP's unserialize.
*
* It reindexes the node-tree
*
function __wakeup() {
$this->reindexNodeTree();
}
*/
//-----------------------------------------------------------------------------------------
// XPath ------ XPath Query / Evaluation Handlers ------
//-----------------------------------------------------------------------------------------
/**
* Matches (evaluates) an XPath query
*
* This method tries to evaluate an XPath query by parsing it. A XML source must
* have been imported before this method is able to work.
*
* @param $xPathQuery (string) XPath query to be evaluated.
* @param $baseXPath (string) (default is super-root) XPath query to a single document node,
* from which the XPath query should start evaluating.
* @return (mixed) The result of the XPath expression. Either:
* node-set (an ordered collection of absolute references to nodes without duplicates)
* boolean (true or false)
* number (a floating-point number)
* string (a sequence of UCS characters)
*/
function match($xPathQuery, $baseXPath='') {
if ($this->_indexIsDirty) $this->reindexNodeTree();
// Replace a double slashes, because they'll cause problems otherwise.
static $slashes2descendant = array(
'//@' => '/descendant_or_self::*/attribute::',
'//' => '/descendant_or_self::node()/',
'/@' => '/attribute::');
// Stupid idea from W3C to take axes name containing a '-' (dash) !!!
// We replace the '-' with '_' to avoid the conflict with the minus operator.
static $dash2underscoreHash = array(
'-sibling' => '_sibling',
'-or-' => '_or_',
'starts-with' => 'starts_with',
'substring-before' => 'substring_before',
'substring-after' => 'substring_after',
'string-length' => 'string_length',
'normalize-space' => 'normalize_space',
'x-lower' => 'x_lower',
'x-upper' => 'x_upper',
'generate-id' => 'generate_id');
if (empty($xPathQuery)) return array();
 
// Special case for when document is empty.
if (empty($this->nodeRoot)) return array();
 
if (!isSet($this->nodeIndex[$baseXPath])) {
$xPathSet = $this->_resolveXPathQuery($baseXPath,'match');
if (sizeOf($xPathSet) !== 1) {
$this->_displayError(sprintf($this->errorStrings['NoNodeMatch'], $xPathQuery), __LINE__, __FILE__, FALSE);
return FALSE;
}
$baseXPath = $xPathSet[0];
}
 
// We should possibly do a proper syntactical parse, but instead we will cheat and just
// remove any literals that could make things very difficult for us, and replace them with
// special tags. Then we can treat the xPathQuery much more easily as JUST "syntax". Provided
// there are no literals in the string, then we can guarentee that most of the operators and
// syntactical elements are indeed elements and not just part of a literal string.
$processedxPathQuery = $this->_removeLiterals($xPathQuery);
// Replace a double slashes, and '-' (dash) in axes names.
$processedxPathQuery = strtr($processedxPathQuery, $slashes2descendant);
$processedxPathQuery = strtr($processedxPathQuery, $dash2underscoreHash);
 
// Build the context
$context = array('nodePath' => $baseXPath, 'pos' => 1, 'size' => 1);
 
// The primary syntactic construct in XPath is the expression.
$result = $this->_evaluateExpr($processedxPathQuery, $context);
 
// We might have been returned a string.. If so convert back to a literal
$literalString = $this->_asLiteral($result);
if ($literalString != FALSE) return $literalString;
else return $result;
}
 
/**
* Alias for the match function
*
* @see match()
*/
function evaluate($xPathQuery, $baseXPath='') {
return $this->match($xPathQuery, $baseXPath);
}
 
/**
* Parse out the literals of an XPath expression.
*
* Instead of doing a full lexical parse, we parse out the literal strings, and then
* Treat the sections of the string either as parts of XPath or literal strings. So
* this function replaces each literal it finds with a literal reference, and then inserts
* the reference into an array of strings that we can access. The literals can be accessed
* later from the literals associative array.
*
* Example:
* XPathExpr = /AAA[@CCC = "hello"]/BBB[DDD = 'world']
* => literals: array("hello", "world")
* return value: /AAA[@CCC = $1]/BBB[DDD = $2]
*
* Note: This does not interfere with the VariableReference syntactical element, as these
* elements must not start with a number.
*
* @param $xPathQuery (string) XPath expression to be processed
* @return (string) The XPath expression without the literals.
*
*/
function _removeLiterals($xPathQuery) {
// What comes first? A " or a '?
if (!preg_match(":^([^\"']*)([\"'].*)$:", $xPathQuery, $aMatches)) {
// No " or ' means no more literals.
return $xPathQuery;
}
$result = $aMatches[1];
$remainder = $aMatches[2];
// What kind of literal?
if (preg_match(':^"([^"]*)"(.*)$:', $remainder, $aMatches)) {
// A "" literal.
$literal = $aMatches[1];
$remainder = $aMatches[2];
} else if (preg_match(":^'([^']*)'(.*)$:", $remainder, $aMatches)) {
// A '' literal.
$literal = $aMatches[1];
$remainder = $aMatches[2];
} else {
$this->_displayError("The '$xPathQuery' argument began a literal, but did not close it.", __LINE__, __FILE__);
}
 
// Store the literal
$literalNumber = count($this->axPathLiterals);
$this->axPathLiterals[$literalNumber] = $literal;
$result .= '$'.$literalNumber;
return $result.$this->_removeLiterals($remainder);
}
 
/**
* Returns the given string as a literal reference.
*
* @param $string (string) The string that we are processing
* @return (mixed) The literal string. FALSE if the string isn't a literal reference.
*/
function _asLiteral($string) {
if (empty($string)) return FALSE;
if (empty($string[0])) return FALSE;
if ($string[0] == '$') {
$remainder = substr($string, 1);
if (is_numeric($remainder)) {
// We have a string reference then.
$stringNumber = (int)$remainder;
if ($stringNumber >= count($this->axPathLiterals)) {
$this->_displayError("Internal error. Found a string reference that we didn't set in xPathQuery: '$xPathQuery'.", __LINE__, __FILE__);
return FALSE;
}
return $this->axPathLiterals[$stringNumber];
}
}
 
// It's not a reference then.
return FALSE;
}
/**
* Adds a literal to our array of literals
*
* In order to make sure we don't interpret literal strings as XPath expressions, we have to
* encode literal strings so that we know that they are not XPaths.
*
* @param $string (string) The literal string that we need to store for future access
* @return (mixed) A reference string to this literal.
*/
function _addLiteral($string) {
// Store the literal
$literalNumber = count($this->axPathLiterals);
$this->axPathLiterals[$literalNumber] = $string;
$result = '$'.$literalNumber;
return $result;
}
 
/**
* Look for operators in the expression
*
* Parses through the given expression looking for operators. If found returns
* the operands and the operator in the resulting array.
*
* @param $xPathQuery (string) XPath query to be evaluated.
* @return (array) If an operator is found, it returns an array containing
* information about the operator. If no operator is found
* then it returns an empty array. If an operator is found,
* but has invalid operands, it returns FALSE.
* The resulting array has the following entries:
* 'operator' => The string version of operator that was found,
* trimmed for whitespace
* 'left operand' => The left operand, or empty if there was no
* left operand for this operator.
* 'right operand' => The right operand, or empty if there was no
* right operand for this operator.
*/
function _GetOperator($xPathQuery) {
$position = 0;
$operator = '';
 
// The results of this function can easily be cached.
static $aResultsCache = array();
if (isset($aResultsCache[$xPathQuery])) {
return $aResultsCache[$xPathQuery];
}
 
// Run through all operators and try to find one.
$opSize = sizeOf($this->operators);
for ($i=0; $i<$opSize; $i++) {
// Pick an operator to try.
$operator = $this->operators[$i];
// Quickcheck. If not present don't wast time searching 'the hard way'
if (strpos($xPathQuery, $operator)===FALSE) continue;
// Special check
$position = $this->_searchString($xPathQuery, $operator);
// Check whether a operator was found.
if ($position <= 0 ) continue;
 
// Check whether it's the equal operator.
if ($operator == '=') {
// Also look for other operators containing the equal sign.
switch ($xPathQuery[$position-1]) {
case '<' :
$position--;
$operator = '<=';
break;
case '>' :
$position--;
$operator = '>=';
break;
case '!' :
$position--;
$operator = '!=';
break;
default:
// It's a pure = operator then.
}
break;
}
 
if ($operator == '*') {
// http://www.w3.org/TR/xpath#exprlex:
// "If there is a preceding token and the preceding token is not one of @, ::, (, [,
// or an Operator, then a * must be recognized as a MultiplyOperator and an NCName must
// be recognized as an OperatorName."
 
// Get some substrings.
$character = substr($xPathQuery, $position - 1, 1);
// Check whether it's a multiply operator or a name test.
if (strchr('/@:([', $character) != FALSE) {
// Don't use the operator.
$position = -1;
continue;
} else {
// The operator is good. Lets use it.
break;
}
}
 
// Extremely annoyingly, we could have a node name like "for-each" and we should not
// parse this as a "-" operator. So if the first char of the right operator is alphabetic,
// then this is NOT an interger operator.
if (strchr('-+*', $operator) != FALSE) {
$rightOperand = trim(substr($xPathQuery, $position + strlen($operator)));
if (strlen($rightOperand) > 1) {
if (preg_match(':^\D$:', $rightOperand[0])) {
// Don't use the operator.
$position = -1;
continue;
} else {
// The operator is good. Lets use it.
break;
}
}
}
 
// The operator must be good then :o)
break;
 
} // end while each($this->operators)
 
// Did we find an operator?
if ($position == -1) {
$aResultsCache[$xPathQuery] = array();
return array();
}
 
/////////////////////////////////////////////
// Get the operands
 
// Get the left and the right part of the expression.
$leftOperand = trim(substr($xPathQuery, 0, $position));
$rightOperand = trim(substr($xPathQuery, $position + strlen($operator)));
// Remove whitespaces.
$leftOperand = trim($leftOperand);
$rightOperand = trim($rightOperand);
 
/////////////////////////////////////////////
// Check the operands.
 
if ($leftOperand == '') {
$aResultsCache[$xPathQuery] = FALSE;
return FALSE;
}
 
if ($rightOperand == '') {
$aResultsCache[$xPathQuery] = FALSE;
return FALSE;
}
 
// Package up and return what we found.
$aResult = array('operator' => $operator,
'left operand' => $leftOperand,
'right operand' => $rightOperand);
 
$aResultsCache[$xPathQuery] = $aResult;
 
return $aResult;
}
 
/**
* Evaluates an XPath PrimaryExpr
*
* http://www.w3.org/TR/xpath#section-Basics
*
* [15] PrimaryExpr ::= VariableReference
* | '(' Expr ')'
* | Literal
* | Number
* | FunctionCall
*
* @param $xPathQuery (string) XPath query to be evaluated.
* @param $context (array) The context from which to evaluate
* @param $results (mixed) If the expression could be parsed and evaluated as one of these
* syntactical elements, then this will be either:
* - node-set (an ordered collection of nodes without duplicates)
* - boolean (true or false)
* - number (a floating-point number)
* - string (a sequence of UCS characters)
* @return (string) An empty string if the query was successfully parsed and
* evaluated, else a string containing the reason for failing.
* @see evaluate()
*/
function _evaluatePrimaryExpr($xPathQuery, $context, &$result) {
$ThisFunctionName = '_evaluatePrimaryExpr';
$bDebugThisFunction = in_array($ThisFunctionName, $this->aDebugFunctions);
$this->_beginDebugFunction($ThisFunctionName, $bDebugThisFunction);
if ($bDebugThisFunction) {
echo "Path: $xPathQuery\n";
echo "Context:";
$this->_printContext($context);
echo "\n";
}
 
// Certain expressions will never be PrimaryExpr, so to speed up processing, cache the
// results we do find from this function.
static $aResultsCache = array();
// Do while false loop
$error = "";
// If the result is independant of context, then we can cache the result and speed this function
// up on future calls.
$bCacheableResult = FALSE;
do {
if (isset($aResultsCache[$xPathQuery])) {
$error = $aResultsCache[$xPathQuery]['Error'];
$result = $aResultsCache[$xPathQuery]['Result'];
break;
}
 
// VariableReference
// ### Not supported.
 
// Is it a number?
// | Number
if (is_numeric($xPathQuery)) {
$result = doubleval($xPathQuery);
$bCacheableResult = TRUE;
break;
}
 
// If it starts with $, and the remainder is a number, then it's a string.
// | Literal
$literal = $this->_asLiteral($xPathQuery);
if ($literal !== FALSE) {
$result = $xPathQuery;
$bCacheableResult = TRUE;
break;
}
 
// Is it a function?
// | FunctionCall
{
// Check whether it's all wrapped in a function. will be like count(.*) where .* is anything
// text() will try to be matched here, so just explicitly ignore it
$regex = ":^([^\(\)\[\]/]*)\s*\((.*)\)$:U";
if (preg_match($regex, $xPathQuery, $aMatch) && $xPathQuery != "text()") {
$function = $aMatch[1];
$data = $aMatch[2];
// It is possible that we will get "a() or b()" which will match as function "a" with
// arguments ") or b(" which is clearly wrong... _bracketsCheck() should catch this.
if ($this->_bracketsCheck($data)) {
if (in_array($function, $this->functions)) {
if ($bDebugThisFunction) echo "XPathExpr: $xPathQuery is a $function() function call:\n";
$result = $this->_evaluateFunction($function, $data, $context);
break;
}
}
}
}
 
// Is it a bracketed expression?
// | '(' Expr ')'
// If it is surrounded by () then trim the brackets
$bBrackets = FALSE;
if (preg_match(":^\((.*)\):", $xPathQuery, $aMatches)) {
// Do not keep trimming off the () as we could have "(() and ())"
$bBrackets = TRUE;
$xPathQuery = $aMatches[1];
}
 
if ($bBrackets) {
// Must be a Expr then.
$result = $this->_evaluateExpr($xPathQuery, $context);
break;
}
 
// Can't be a PrimaryExpr then.
$error = "Expression is not a PrimaryExpr";
$bCacheableResult = TRUE;
} while (FALSE);
//////////////////////////////////////////////
 
// If possible, cache the result.
if ($bCacheableResult) {
$aResultsCache[$xPathQuery]['Error'] = $error;
$aResultsCache[$xPathQuery]['Result'] = $result;
}
 
$this->_closeDebugFunction($ThisFunctionName, array('result' => $result, 'error' => $error), $bDebugThisFunction);
 
// Return the result.
return $error;
}
 
/**
* Evaluates an XPath Expr
*
* $this->evaluate() is the entry point and does some inits, while this
* function is called recursive internaly for every sub-xPath expresion we find.
* It handles the following syntax, and calls evaluatePathExpr if it finds that none
* of this grammer applies.
*
* http://www.w3.org/TR/xpath#section-Basics
*
* [14] Expr ::= OrExpr
* [21] OrExpr ::= AndExpr
* | OrExpr 'or' AndExpr
* [22] AndExpr ::= EqualityExpr
* | AndExpr 'and' EqualityExpr
* [23] EqualityExpr ::= RelationalExpr
* | EqualityExpr '=' RelationalExpr
* | EqualityExpr '!=' RelationalExpr
* [24] RelationalExpr ::= AdditiveExpr
* | RelationalExpr '<' AdditiveExpr
* | RelationalExpr '>' AdditiveExpr
* | RelationalExpr '<=' AdditiveExpr
* | RelationalExpr '>=' AdditiveExpr
* [25] AdditiveExpr ::= MultiplicativeExpr
* | AdditiveExpr '+' MultiplicativeExpr
* | AdditiveExpr '-' MultiplicativeExpr
* [26] MultiplicativeExpr ::= UnaryExpr
* | MultiplicativeExpr MultiplyOperator UnaryExpr
* | MultiplicativeExpr 'div' UnaryExpr
* | MultiplicativeExpr 'mod' UnaryExpr
* [27] UnaryExpr ::= UnionExpr
* | '-' UnaryExpr
* [18] UnionExpr ::= PathExpr
* | UnionExpr '|' PathExpr
*
* NOTE: The effect of the above grammar is that the order of precedence is
* (lowest precedence first):
* 1) or
* 2) and
* 3) =, !=
* 4) <=, <, >=, >
* 5) +, -
* 6) *, div, mod
* 7) - (negate)
* 8) |
*
* @param $xPathQuery (string) XPath query to be evaluated.
* @param $context (array) An associative array the describes the context from which
* to evaluate the XPath Expr. Contains three members:
* 'nodePath' => The absolute XPath expression to the context node
* 'size' => The context size
* 'pos' => The context position
* @return (mixed) The result of the XPath expression. Either:
* node-set (an ordered collection of nodes without duplicates)
* boolean (true or false)
* number (a floating-point number)
* string (a sequence of UCS characters)
* @see evaluate()
*/
function _evaluateExpr($xPathQuery, $context) {
$ThisFunctionName = '_evaluateExpr';
$bDebugThisFunction = in_array($ThisFunctionName, $this->aDebugFunctions);
$this->_beginDebugFunction($ThisFunctionName, $bDebugThisFunction);
if ($bDebugThisFunction) {
echo "Path: $xPathQuery\n";
echo "Context:";
$this->_printContext($context);
echo "\n";
}
 
// Numpty check
if (!isset($xPathQuery) || ($xPathQuery == '')) {
$this->_displayError("The \$xPathQuery argument must have a value.", __LINE__, __FILE__);
return FALSE;
}
 
// At the top level we deal with booleans. Only if the Expr is just an AdditiveExpr will
// the result not be a boolean.
//
//
// Between these syntactical elements we get PathExprs.
 
// Do while false loop
do {
static $aKnownPathExprCache = array();
 
if (isset($aKnownPathExprCache[$xPathQuery])) {
if ($bDebugThisFunction) echo "XPathExpr is a PathExpr\n";
$result = $this->_evaluatePathExpr($xPathQuery, $context);
break;
}
 
// Check for operators first, as we could have "() op ()" and the PrimaryExpr will try to
// say that that is an Expr called ") op ("
// Set the default position and the type of the operator.
$aOperatorInfo = $this->_GetOperator($xPathQuery);
 
// An expression can be one of these, and we should catch these "first" as they are most common
if (empty($aOperatorInfo)) {
$error = $this->_evaluatePrimaryExpr($xPathQuery, $context, $result);
if (empty($error)) {
// It could be parsed as a PrimaryExpr, so look no further :o)
break;
}
}
 
// Check whether an operator was found.
if (empty($aOperatorInfo)) {
if ($bDebugThisFunction) echo "XPathExpr is a PathExpr\n";
$aKnownPathExprCache[$xPathQuery] = TRUE;
// No operator. Means we have a PathExpr then. Go to the next level.
$result = $this->_evaluatePathExpr($xPathQuery, $context);
break;
}
 
if ($bDebugThisFunction) { echo "\nFound and operator:"; print_r($aOperatorInfo); }//LEFT:[$leftOperand] oper:[$operator] RIGHT:[$rightOperand]";
 
$operator = $aOperatorInfo['operator'];
 
/////////////////////////////////////////////
// Recursively process the operator
 
// Check the kind of operator.
switch ($operator) {
case ' or ':
case ' and ':
$operatorType = 'Boolean';
break;
case '+':
case '-':
case '*':
case ' div ':
case ' mod ':
$operatorType = 'Integer';
break;
case ' | ':
$operatorType = 'NodeSet';
break;
case '<=':
case '<':
case '>=':
case '>':
case '=':
case '!=':
$operatorType = 'Multi';
break;
default:
$this->_displayError("Internal error. Default case of switch statement reached.", __LINE__, __FILE__);
}
 
if ($bDebugThisFunction) echo "\nOperator is a [$operator]($operatorType operator)";
 
/////////////////////////////////////////////
// Evaluate the operands
 
// Evaluate the left part.
if ($bDebugThisFunction) echo "\nEvaluating LEFT:[{$aOperatorInfo['left operand']}]\n";
$left = $this->_evaluateExpr($aOperatorInfo['left operand'], $context);
if ($bDebugThisFunction) {echo "{$aOperatorInfo['left operand']} evals as:\n"; print_r($left); }
// If it is a boolean operator, it's possible we don't need to evaluate the right part.
 
// Only evaluate the right part if we need to.
$right = '';
if ($operatorType == 'Boolean') {
// Is the left part false?
$left = $this->_handleFunction_boolean($left, $context);
if (!$left and ($operator == ' and ')) {
$result = FALSE;
break;
} else if ($left and ($operator == ' or ')) {
$result = TRUE;
break;
}
}
 
// Evaluate the right part
if ($bDebugThisFunction) echo "\nEvaluating RIGHT:[{$aOperatorInfo['right operand']}]\n";
$right = $this->_evaluateExpr($aOperatorInfo['right operand'], $context);
if ($bDebugThisFunction) {echo "{$aOperatorInfo['right operand']} evals as:\n"; print_r($right); echo "\n";}
 
/////////////////////////////////////////////
// Combine the operands
 
// If necessary, work out how to treat the multi operators
if ($operatorType != 'Multi') {
$result = $this->_evaluateOperator($left, $operator, $right, $operatorType, $context);
} else {
// http://www.w3.org/TR/xpath#booleans
// If both objects to be compared are node-sets, then the comparison will be true if and
// only if there is a node in the first node-set and a node in the second node-set such
// that the result of performing the comparison on the string-values of the two nodes is
// true.
//
// If one object to be compared is a node-set and the other is a number, then the
// comparison will be true if and only if there is a node in the node-set such that the
// result of performing the comparison on the number to be compared and on the result of
// converting the string-value of that node to a number using the number function is true.
//
// If one object to be compared is a node-set and the other is a string, then the comparison
// will be true if and only if there is a node in the node-set such that the result of performing
// the comparison on the string-value of the node and the other string is true.
//
// If one object to be compared is a node-set and the other is a boolean, then the comparison
// will be true if and only if the result of performing the comparison on the boolean and on
// the result of converting the node-set to a boolean using the boolean function is true.
if (is_array($left) || is_array($right)) {
if ($bDebugThisFunction) echo "As one of the operands is an array, we will need to loop\n";
if (is_array($left) && is_array($right)) {
$operatorType = 'String';
} elseif (is_numeric($left) || is_numeric($right)) {
$operatorType = 'Integer';
} elseif (is_bool($left)) {
$operatorType = 'Boolean';
$right = $this->_handleFunction_boolean($right, $context);
} elseif (is_bool($right)) {
$operatorType = 'Boolean';
$left = $this->_handleFunction_boolean($left, $context);
} else {
$operatorType = 'String';
}
if ($bDebugThisFunction) echo "Equals operator is a $operatorType operator\n";
// Turn both operands into arrays to simplify logic
$aLeft = $left;
$aRight = $right;
if (!is_array($aLeft)) $aLeft = array($aLeft);
if (!is_array($aRight)) $aRight = array($aRight);
$result = FALSE;
if (!empty($aLeft)) {
foreach ($aLeft as $leftItem) {
if (empty($aRight)) break;
// If the item is from a node set, we should evaluate it's string-value
if (is_array($left)) {
if ($bDebugThisFunction) echo "\tObtaining string-value of LHS:$leftItem as it's from a nodeset\n";
$leftItem = $this->_stringValue($leftItem);
}
foreach ($aRight as $rightItem) {
// If the item is from a node set, we should evaluate it's string-value
if (is_array($right)) {
if ($bDebugThisFunction) echo "\tObtaining string-value of RHS:$rightItem as it's from a nodeset\n";
$rightItem = $this->_stringValue($rightItem);
}
 
if ($bDebugThisFunction) echo "\tEvaluating $leftItem $operator $rightItem\n";
$result = $this->_evaluateOperator($leftItem, $operator, $rightItem, $operatorType, $context);
if ($result === TRUE) break;
}
if ($result === TRUE) break;
}
}
}
// When neither object to be compared is a node-set and the operator is = or !=, then the
// objects are compared by converting them to a common type as follows and then comparing
// them.
//
// If at least one object to be compared is a boolean, then each object to be compared
// is converted to a boolean as if by applying the boolean function.
//
// Otherwise, if at least one object to be compared is a number, then each object to be
// compared is converted to a number as if by applying the number function.
//
// Otherwise, both objects to be compared are converted to strings as if by applying
// the string function.
//
// The = comparison will be true if and only if the objects are equal; the != comparison
// will be true if and only if the objects are not equal. Numbers are compared for equality
// according to IEEE 754 [IEEE 754]. Two booleans are equal if either both are true or
// both are false. Two strings are equal if and only if they consist of the same sequence
// of UCS characters.
else {
if (is_bool($left) || is_bool($right)) {
$operatorType = 'Boolean';
} elseif (is_numeric($left) || is_numeric($right)) {
$operatorType = 'Integer';
} else {
$operatorType = 'String';
}
if ($bDebugThisFunction) echo "Equals operator is a $operatorType operator\n";
$result = $this->_evaluateOperator($left, $operator, $right, $operatorType, $context);
}
}
 
} while (FALSE);
//////////////////////////////////////////////
 
$this->_closeDebugFunction($ThisFunctionName, $result, $bDebugThisFunction);
 
// Return the result.
return $result;
}
 
/**
* Evaluate the result of an operator whose operands have been evaluated
*
* If the operator type is not "NodeSet", then neither the left or right operators
* will be node sets, as the processing when one or other is an array is complex,
* and should be handled by the caller.
*
* @param $left (mixed) The left operand
* @param $right (mixed) The right operand
* @param $operator (string) The operator to use to combine the operands
* @param $operatorType (string) The type of the operator. Either 'Boolean',
* 'Integer', 'String', or 'NodeSet'
* @param $context (array) The context from which to evaluate
* @return (mixed) The result of the XPath expression. Either:
* node-set (an ordered collection of nodes without duplicates)
* boolean (true or false)
* number (a floating-point number)
* string (a sequence of UCS characters)
*/
function _evaluateOperator($left, $operator, $right, $operatorType, $context) {
$ThisFunctionName = '_evaluateOperator';
$bDebugThisFunction = in_array($ThisFunctionName, $this->aDebugFunctions);
$this->_beginDebugFunction($ThisFunctionName, $bDebugThisFunction);
if ($bDebugThisFunction) {
echo "left: $left\n";
echo "right: $right\n";
echo "operator: $operator\n";
echo "operator type: $operatorType\n";
}
 
// Do while false loop
do {
// Handle the operator depending on the operator type.
switch ($operatorType) {
case 'Boolean':
{
// Boolify the arguments. (The left arg is already a bool)
$right = $this->_handleFunction_boolean($right, $context);
switch ($operator) {
case '=': // Compare the two results.
$result = (bool)($left == $right);
break;
case ' or ': // Return the two results connected by an 'or'.
$result = (bool)( $left or $right );
break;
case ' and ': // Return the two results connected by an 'and'.
$result = (bool)( $left and $right );
break;
case '!=': // Check whether the two results are not equal.
$result = (bool)( $left != $right );
break;
default:
$this->_displayError("Internal error. Default case of switch statement reached.", __LINE__, __FILE__);
}
}
break;
case 'Integer':
{
// Convert both left and right operands into numbers.
if (empty($left) && ($operator == '-')) {
// There may be no left operator if the op is '-'
$left = 0;
} else {
$left = $this->_handleFunction_number($left, $context);
}
$right = $this->_handleFunction_number($right, $context);
if ($bDebugThisFunction) echo "\nLeft is $left, Right is $right\n";
switch ($operator) {
case '=': // Compare the two results.
$result = (bool)($left == $right);
break;
case '!=': // Compare the two results.
$result = (bool)($left != $right);
break;
case '+': // Return the result by adding one result to the other.
$result = $left + $right;
break;
case '-': // Return the result by decrease one result by the other.
$result = $left - $right;
break;
case '*': // Return a multiplication of the two results.
$result = $left * $right;
break;
case ' div ': // Return a division of the two results.
$result = $left / $right;
break;
case ' mod ': // Return a modulo division of the two results.
$result = $left % $right;
break;
case '<=': // Compare the two results.
$result = (bool)( $left <= $right );
break;
case '<': // Compare the two results.
$result = (bool)( $left < $right );
break;
case '>=': // Compare the two results.
$result = (bool)( $left >= $right );
break;
case '>': // Compare the two results.
$result = (bool)( $left > $right );
break;
default:
$this->_displayError("Internal error. Default case of switch statement reached.", __LINE__, __FILE__);
}
}
break;
case 'NodeSet':
// Add the nodes to the result set
$result = array_merge($left, $right);
// Remove duplicated nodes.
$result = array_unique($result);
 
// Preserve doc order if there was more than one query.
if (count($result) > 1) {
$result = $this->_sortByDocOrder($result);
}
break;
case 'String':
$left = $this->_handleFunction_string($left, $context);
$right = $this->_handleFunction_string($right, $context);
if ($bDebugThisFunction) echo "\nLeft is $left, Right is $right\n";
switch ($operator) {
case '=': // Compare the two results.
$result = (bool)($left == $right);
break;
case '!=': // Compare the two results.
$result = (bool)($left != $right);
break;
default:
$this->_displayError("Internal error. Default case of switch statement reached.", __LINE__, __FILE__);
}
break;
default:
$this->_displayError("Internal error. Default case of switch statement reached.", __LINE__, __FILE__);
}
} while (FALSE);
 
//////////////////////////////////////////////
 
$this->_closeDebugFunction($ThisFunctionName, $result, $bDebugThisFunction);
 
// Return the result.
return $result;
}
/**
* Evaluates an XPath PathExpr
*
* It handles the following syntax:
*
* http://www.w3.org/TR/xpath#node-sets
* http://www.w3.org/TR/xpath#NT-LocationPath
* http://www.w3.org/TR/xpath#path-abbrev
* http://www.w3.org/TR/xpath#NT-Step
*
* [19] PathExpr ::= LocationPath
* | FilterExpr
* | FilterExpr '/' RelativeLocationPath
* | FilterExpr '//' RelativeLocationPath
* [20] FilterExpr ::= PrimaryExpr
* | FilterExpr Predicate
* [1] LocationPath ::= RelativeLocationPath
* | AbsoluteLocationPath
* [2] AbsoluteLocationPath ::= '/' RelativeLocationPath?
* | AbbreviatedAbsoluteLocationPath
* [3] RelativeLocationPath ::= Step
* | RelativeLocationPath '/' Step
* | AbbreviatedRelativeLocationPath
* [4] Step ::= AxisSpecifier NodeTest Predicate*
* | AbbreviatedStep
* [5] AxisSpecifier ::= AxisName '::'
* | AbbreviatedAxisSpecifier
* [10] AbbreviatedAbsoluteLocationPath
* ::= '//' RelativeLocationPath
* [11] AbbreviatedRelativeLocationPath
* ::= RelativeLocationPath '//' Step
* [12] AbbreviatedStep ::= '.'
* | '..'
* [13] AbbreviatedAxisSpecifier
* ::= '@'?
*
* If you expand all the abbreviated versions, then the grammer simplifies to:
*
* [19] PathExpr ::= RelativeLocationPath
* | '/' RelativeLocationPath?
* | FilterExpr
* | FilterExpr '/' RelativeLocationPath
* [20] FilterExpr ::= PrimaryExpr
* | FilterExpr Predicate
* [3] RelativeLocationPath ::= Step
* | RelativeLocationPath '/' Step
* [4] Step ::= AxisName '::' NodeTest Predicate*
*
* Conceptually you can say that we should split by '/' and try to treat the parts
* as steps, and if that fails then try to treat it as a PrimaryExpr.
*
* @param $PathExpr (string) PathExpr syntactical element
* @param $context (array) The context from which to evaluate
* @return (mixed) The result of the XPath expression. Either:
* node-set (an ordered collection of nodes without duplicates)
* boolean (true or false)
* number (a floating-point number)
* string (a sequence of UCS characters)
* @see evaluate()
*/
function _evaluatePathExpr($PathExpr, $context) {
$ThisFunctionName = '_evaluatePathExpr';
$bDebugThisFunction = in_array($ThisFunctionName, $this->aDebugFunctions);
$this->_beginDebugFunction($ThisFunctionName, $bDebugThisFunction);
if ($bDebugThisFunction) {
echo "PathExpr: $PathExpr\n";
echo "Context:";
$this->_printContext($context);
echo "\n";
}
// Numpty check
if (empty($PathExpr)) {
$this->_displayError("The \$PathExpr argument must have a value.", __LINE__, __FILE__);
return FALSE;
}
//////////////////////////////////////////////
 
// Parsing the expression into steps is a cachable operation as it doesn't depend on the context
static $aResultsCache = array();
 
if (isset($aResultsCache[$PathExpr])) {
$steps = $aResultsCache[$PathExpr];
} else {
// Note that we have used $this->slashes2descendant to simplify this logic, so the
// "Abbreviated" paths basically never exist as '//' never exists.
 
// mini syntax check
if (!$this->_bracketsCheck($PathExpr)) {
$this->_displayError('While parsing an XPath query, in the PathExpr "' .
$PathExpr.
'", there was an invalid number of brackets or a bracket mismatch.', __LINE__, __FILE__);
}
// Save the current path.
$this->currentXpathQuery = $PathExpr;
// Split the path at every slash *outside* a bracket.
$steps = $this->_bracketExplode('/', $PathExpr);
if ($bDebugThisFunction) { echo "<hr>Split the path '$PathExpr' at every slash *outside* a bracket.\n "; print_r($steps); }
// Check whether the first element is empty.
if (empty($steps[0])) {
// Remove the first and empty element. It's a starting '//'.
array_shift($steps);
}
$aResultsCache[$PathExpr] = $steps;
}
 
// Start to evaluate the steps.
// ### Consider implementing an evaluateSteps() function that removes recursion from
// evaluateStep()
$result = $this->_evaluateStep($steps, $context);
 
// Preserve doc order if there was more than one result
if (count($result) > 1) {
$result = $this->_sortByDocOrder($result);
}
//////////////////////////////////////////////
 
$this->_closeDebugFunction($ThisFunctionName, $result, $bDebugThisFunction);
 
// Return the result.
return $result;
}
 
/**
* Sort an xPathSet by doc order.
*
* @param $xPathSet (array) Array of full paths to nodes that need to be sorted
* @return (array) Array containing the same contents as $xPathSet, but
* with the contents in doc order
*/
function _sortByDocOrder($xPathSet) {
$ThisFunctionName = '_sortByDocOrder';
$bDebugThisFunction = in_array($ThisFunctionName, $this->aDebugFunctions);
$this->_beginDebugFunction($ThisFunctionName, $bDebugThisFunction);
if ($bDebugThisFunction) {
echo "_sortByDocOrder(xPathSet:[".count($xPathSet)."])";
echo "xPathSet:\n";
print_r($xPathSet);
echo "<hr>\n";
}
//////////////////////////////////////////////
 
$aResult = array();
 
// Spot some common shortcuts.
if (count($xPathSet) < 1) {
$aResult = $xPathSet;
} else {
// Build an array of doc-pos indexes.
$aDocPos = array();
$nodeCount = count($this->nodeIndex);
$aPaths = array_keys($this->nodeIndex);
if ($bDebugThisFunction) {
echo "searching for path indices in array_keys(this->nodeIndex)...\n";
//print_r($aPaths);
}
 
// The last index we found. In general the elements will be in groups
// that are themselves in order.
$iLastIndex = 0;
foreach ($xPathSet as $path) {
// Cycle round the nodes, starting at the last index, looking for the path.
$foundNode = FALSE;
for ($iIndex = $iLastIndex; $iIndex < $nodeCount + $iLastIndex; $iIndex++) {
$iThisIndex = $iIndex % $nodeCount;
if (!strcmp($aPaths[$iThisIndex],$path)) {
// we have found the doc-position index of the path
$aDocPos[] = $iThisIndex;
$iLastIndex = $iThisIndex;
$foundNode = TRUE;
break;
}
}
if ($bDebugThisFunction) {
if (!$foundNode)
echo "Error: $path not found in \$this->nodeIndex\n";
else
echo "Found node after ".($iIndex - $iLastIndex)." iterations\n";
}
}
// Now count the number of doc pos we have and the number of results and
// confirm that we have the same number of each.
$iDocPosCount = count($aDocPos);
$iResultCount = count($xPathSet);
if ($iDocPosCount != $iResultCount) {
if ($bDebugThisFunction) {
echo "count(\$aDocPos)=$iDocPosCount; count(\$result)=$iResultCount\n";
print_r(array_keys($this->nodeIndex));
}
$this->_displayError('Results from _InternalEvaluate() are corrupt. '.
'Do you need to call reindexNodeTree()?', __LINE__, __FILE__);
}
 
// Now sort the indexes.
sort($aDocPos);
 
// And now convert back to paths.
$iPathCount = count($aDocPos);
for ($iIndex = 0; $iIndex < $iPathCount; $iIndex++) {
$aResult[] = $aPaths[$aDocPos[$iIndex]];
}
}
 
// Our result from the function is this array.
$result = $aResult;
 
//////////////////////////////////////////////
 
$this->_closeDebugFunction($ThisFunctionName, $result, $bDebugThisFunction);
 
// Return the result.
return $result;
}
 
/**
* Evaluate a step from a XPathQuery expression at a specific contextPath.
*
* Steps are the arguments of a XPathQuery when divided by a '/'. A contextPath is a
* absolute XPath (or vector of XPaths) to a starting node(s) from which the step should
* be evaluated.
*
* @param $steps (array) Vector containing the remaining steps of the current
* XPathQuery expression.
* @param $context (array) The context from which to evaluate
* @return (array) Vector of absolute XPath's as a result of the step
* evaluation. The results will not necessarily be in doc order
* @see _evaluatePathExpr()
*/
function _evaluateStep($steps, $context) {
$ThisFunctionName = '_evaluateStep';
$bDebugThisFunction = in_array($ThisFunctionName, $this->aDebugFunctions);
$this->_beginDebugFunction($ThisFunctionName, $bDebugThisFunction);
if ($bDebugThisFunction) {
echo "Context:";
$this->_printContext($context);
echo "\n";
echo "Steps: ";
print_r($steps);
echo "<hr>\n";
}
//////////////////////////////////////////////
 
$result = array(); // Create an empty array for saving the abs. XPath's found.
 
$contextPaths = array(); // Create an array to save the new contexts.
$step = trim(array_shift($steps)); // Get this step.
if ($bDebugThisFunction) echo __LINE__.":Evaluating step $step\n";
$axis = $this->_getAxis($step); // Get the axis of the current step.
 
// If there was no axis, then it must be a PrimaryExpr
if ($axis == FALSE) {
if ($bDebugThisFunction) echo __LINE__.":Step is not an axis but a PrimaryExpr\n";
// ### This isn't correct, as the result of this function might not be a node set.
$error = $this->_evaluatePrimaryExpr($step, $context, $contextPaths);
if (!empty($error)) {
$this->_displayError("Expression failed to parse as PrimaryExpr because: $error"
, __LINE__, __FILE__, FALSE);
}
} else {
if ($bDebugThisFunction) { echo __LINE__.":Axis of step is:\n"; print_r($axis); echo "\n";}
$method = '_handleAxis_' . $axis['axis']; // Create the name of the method.
// Check whether the axis handler is defined. If not display an error message.
if (!method_exists($this, $method)) {
$this->_displayError('While parsing an XPath query, the axis ' .
$axis['axis'] . ' could not be handled, because this version does not support this axis.', __LINE__, __FILE__);
}
if ($bDebugThisFunction) echo __LINE__.":Calling user method $method\n";
// Perform an axis action.
$contextPaths = $this->$method($axis, $context['nodePath']);
if ($bDebugThisFunction) { echo __LINE__.":We found these contexts from this step:\n"; print_r( $contextPaths ); echo "\n";}
}
 
// Check whether there are predicates.
if (count($contextPaths) > 0 && count($axis['predicate']) > 0) {
if ($bDebugThisFunction) echo __LINE__.":Filtering contexts by predicate...\n";
// Check whether each node fits the predicates.
$contextPaths = $this->_checkPredicates($contextPaths, $axis['predicate']);
}
 
// Check whether there are more steps left.
if (count($steps) > 0) {
if ($bDebugThisFunction) echo __LINE__.":Evaluating next step given the context of the first step...\n";
// Continue the evaluation of the next steps.
 
// Run through the array.
$size = sizeOf($contextPaths);
for ($pos=0; $pos<$size; $pos++) {
// Build new context
$newContext = array('nodePath' => $contextPaths[$pos], 'size' => $size, 'pos' => $pos + 1);
if ($bDebugThisFunction) echo __LINE__.":Evaluating step for the {$contextPaths[$pos]} context...\n";
// Call this method for this single path.
$xPathSetNew = $this->_evaluateStep($steps, $newContext);
if ($bDebugThisFunction) {echo "New results for this context:\n"; print_r($xPathSetNew);}
$result = array_merge($result, $xPathSetNew);
}
 
// Remove duplicated nodes.
$result = array_unique($result);
} else {
$result = $contextPaths; // Save the found contexts.
}
//////////////////////////////////////////////
 
$this->_closeDebugFunction($ThisFunctionName, $result, $bDebugThisFunction);
 
// Return the result.
return $result;
}
/**
* Checks whether a node matches predicates.
*
* This method checks whether a list of nodes passed to this method match
* a given list of predicates.
*
* @param $xPathSet (array) Array of full paths of all nodes to be tested.
* @param $predicates (array) Array of predicates to use.
* @return (array) Vector of absolute XPath's that match the given predicates.
* @see _evaluateStep()
*/
function _checkPredicates($xPathSet, $predicates) {
$ThisFunctionName = '_checkPredicates';
$bDebugThisFunction = in_array($ThisFunctionName, $this->aDebugFunctions);
$this->_beginDebugFunction($ThisFunctionName, $bDebugThisFunction);
if ($bDebugThisFunction) {
echo "XPathSet:";
print_r($xPathSet);
echo "Predicates:";
print_r($predicates);
echo "<hr>";
}
//////////////////////////////////////////////
// Create an empty set of nodes.
$result = array();
 
// Run through all predicates.
$pSize = sizeOf($predicates);
for ($j=0; $j<$pSize; $j++) {
$predicate = $predicates[$j];
if ($bDebugThisFunction) echo "Evaluating predicate \"$predicate\"\n";
 
// This will contain all the nodes that match this predicate
$aNewSet = array();
// Run through all nodes.
$contextSize = count($xPathSet);
for ($contextPos=0; $contextPos<$contextSize; $contextPos++) {
$xPath = $xPathSet[$contextPos];
 
// Build the context for this predicate
$context = array('nodePath' => $xPath, 'size' => $contextSize, 'pos' => $contextPos + 1);
// Check whether the predicate is just an number.
if (preg_match('/^\d+$/', $predicate)) {
if ($bDebugThisFunction) echo "Taking short cut and calling _handleFunction_position() directly.\n";
// Take a short cut. If it is just a position, then call
// _handleFunction_position() directly. 70% of the
// time this will be the case. ## N.S
// $check = (bool) ($predicate == $context['pos']);
$check = (bool) ($predicate == $this->_handleFunction_position('', $context));
} else {
// Else do the predicate check the long and through way.
$check = $this->_evaluateExpr($predicate, $context);
}
if ($bDebugThisFunction) {
echo "Evaluating the predicate returned ";
var_dump($check);
echo "\n";
}
 
if (is_int($check)) { // Check whether it's an integer.
// Check whether it's the current position.
$check = (bool) ($check == $this->_handleFunction_position('', $context));
} else {
$check = (bool) ($this->_handleFunction_boolean($check, $context));
// if ($bDebugThisFunction) {echo $this->_handleFunction_string($check, $context);}
}
 
if ($bDebugThisFunction) echo "Node $xPath matches predicate $predicate: " . (($check) ? "TRUE" : "FALSE") ."\n";
 
// Do we add it?
if ($check) $aNewSet[] = $xPath;
}
// Use the newly filtered list.
$xPathSet = $aNewSet;
 
if ($bDebugThisFunction) {echo "Node set now contains : "; print_r($xPathSet); }
}
 
$result = $xPathSet;
 
//////////////////////////////////////////////
 
$this->_closeDebugFunction($ThisFunctionName, $result, $bDebugThisFunction);
 
// Return the array of nodes.
return $result;
}
/**
* Evaluates an XPath function
*
* This method evaluates a given XPath function with its arguments on a
* specific node of the document.
*
* @param $function (string) Name of the function to be evaluated.
* @param $arguments (string) String containing the arguments being
* passed to the function.
* @param $context (array) The context from which to evaluate
* @return (mixed) This method returns the result of the evaluation of
* the function. Depending on the function the type of the
* return value can be different.
* @see evaluate()
*/
function _evaluateFunction($function, $arguments, $context) {
$ThisFunctionName = '_evaluateFunction';
$bDebugThisFunction = in_array($ThisFunctionName, $this->aDebugFunctions);
$this->_beginDebugFunction($ThisFunctionName, $bDebugThisFunction);
if ($bDebugThisFunction) {
if (is_array($arguments)) {
echo "Arguments:\n";
print_r($arguments);
} else {
echo "Arguments: $arguments\n";
}
echo "Context:";
$this->_printContext($context);
echo "\n";
echo "<hr>\n";
}
/////////////////////////////////////
// Remove whitespaces.
$function = trim($function);
$arguments = trim($arguments);
// Create the name of the function handling function.
$method = '_handleFunction_'. $function;
// Check whether the function handling function is available.
if (!method_exists($this, $method)) {
// Display an error message.
$this->_displayError("While parsing an XPath query, ".
"the function \"$function\" could not be handled, because this ".
"version does not support this function.", __LINE__, __FILE__);
}
if ($bDebugThisFunction) echo "Calling function $method($arguments)\n";
// Return the result of the function.
$result = $this->$method($arguments, $context);
//////////////////////////////////////////////
// Return the nodes found.
 
$this->_closeDebugFunction($ThisFunctionName, $result, $bDebugThisFunction);
 
// Return the result.
return $result;
}
/**
* Checks whether a node matches a node-test.
*
* This method checks whether a node in the document matches a given node-test.
* A node test is something like text(), node(), or an element name.
*
* @param $contextPath (string) Full xpath of the node, which should be tested for
* matching the node-test.
* @param $nodeTest (string) String containing the node-test for the node.
* @return (boolean) This method returns TRUE if the node matches the
* node-test, otherwise FALSE.
* @see evaluate()
*/
function _checkNodeTest($contextPath, $nodeTest) {
// Empty node test means that it must match
if (empty($nodeTest)) return TRUE;
 
if ($nodeTest == '*') {
// * matches all element nodes.
return (!preg_match(':/[^/]+\(\)\[\d+\]$:U', $contextPath));
}
elseif (preg_match('/^[\w-:\.]+$/', $nodeTest)) {
// http://www.w3.org/TR/2000/REC-xml-20001006#NT-Name
// The real spec for what constitutes whitespace is quite elaborate, and
// we currently just hope that "\w" catches them all. In reality it should
// start with a letter too, not a number, but we've just left it simple.
// It's just a node name test. It should end with "/$nodeTest[x]"
return (preg_match('"/'.$nodeTest.'\[\d+\]$"', $contextPath));
}
elseif (preg_match('/\(/U', $nodeTest)) { // Check whether it's a function.
// Get the type of function to use.
$function = $this->_prestr($nodeTest, '(');
// Check whether the node fits the method.
switch ($function) {
case 'node': // Add this node to the list of nodes.
return TRUE;
case 'text': // Check whether the node has some text.
$tmp = implode('', $this->nodeIndex[$contextPath]['textParts']);
if (!empty($tmp)) {
return TRUE; // Add this node to the list of nodes.
}
break;
/******** NOT supported (yet?)
case 'comment': // Check whether the node has some comment.
if (!empty($this->nodeIndex[$contextPath]['comment'])) {
return TRUE; // Add this node to the list of nodes.
}
break;
case 'processing-instruction':
$literal = $this->_afterstr($axis['node-test'], '('); // Get the literal argument.
$literal = substr($literal, 0, strlen($literal) - 1); // Cut the literal.
// Check whether a literal was given.
if (!empty($literal)) {
// Check whether the node's processing instructions are matching the literals given.
if ($this->nodeIndex[$context]['processing-instructions'] == $literal) {
return TRUE; // Add this node to the node-set.
}
} else {
// Check whether the node has processing instructions.
if (!empty($this->nodeIndex[$contextPath]['processing-instructions'])) {
return TRUE; // Add this node to the node-set.
}
}
break;
***********/
default: // Display an error message.
$this->_displayError('While parsing an XPath query there was an undefined function called "' .
str_replace($function, '<b>'.$function.'</b>', $this->currentXpathQuery) .'"', __LINE__, __FILE__);
}
}
else { // Display an error message.
$this->_displayError("While parsing the XPath query \"{$this->currentXpathQuery}\" ".
"an empty and therefore invalid node-test has been found.", __LINE__, __FILE__, FALSE);
}
return FALSE; // Don't add this context.
}
//-----------------------------------------------------------------------------------------
// XPath ------ XPath AXIS Handlers ------
//-----------------------------------------------------------------------------------------
/**
* Retrieves axis information from an XPath query step.
*
* This method tries to extract the name of the axis and its node-test
* from a given step of an XPath query at a given node. If it can't parse
* the step, then we treat it as a PrimaryExpr.
*
* [4] Step ::= AxisSpecifier NodeTest Predicate*
* | AbbreviatedStep
* [5] AxisSpecifier ::= AxisName '::'
* | AbbreviatedAxisSpecifier
* [12] AbbreviatedStep ::= '.'
* | '..'
* [13] AbbreviatedAxisSpecifier
* ::= '@'?
*
* [7] NodeTest ::= NameTest
* | NodeType '(' ')'
* | 'processing-instruction' '(' Literal ')'
* [37] NameTest ::= '*'
* | NCName ':' '*'
* | QName
* [38] NodeType ::= 'comment'
* | 'text'
* | 'processing-instruction'
* | 'node'
*
* @param $step (string) String containing a step of an XPath query.
* @return (array) Contains information about the axis found in the step, or FALSE
* if the string isn't a valid step.
* @see _evaluateStep()
*/
function _getAxis($step) {
// The results of this function are very cachable, as it is completely independant of context.
static $aResultsCache = array();
 
// Create an array to save the axis information.
$axis = array(
'axis' => '',
'node-test' => '',
'predicate' => array()
);
 
$cacheKey = $step;
do { // parse block
$parseBlock = 1;
 
if (isset($aResultsCache[$cacheKey])) {
return $aResultsCache[$cacheKey];
} else {
// We have some danger of causing recursion here if we refuse to parse a step as having an
// axis, and demand it be treated as a PrimaryExpr. So if we are going to fail, make sure
// we record what we tried, so that we can catch to see if it comes straight back.
$guess = array(
'axis' => 'child',
'node-test' => $step,
'predicate' => array());
$aResultsCache[$cacheKey] = $guess;
}
 
///////////////////////////////////////////////////
// Spot the steps that won't come with an axis
 
// Check whether the step is empty or only self.
if (empty($step) OR ($step == '.') OR ($step == 'current()')) {
// Set it to the default value.
$step = '.';
$axis['axis'] = 'self';
$axis['node-test'] = '*';
break $parseBlock;
}
 
if ($step == '..') {
// Select the parent axis.
$axis['axis'] = 'parent';
$axis['node-test'] = '*';
break $parseBlock;
}
 
///////////////////////////////////////////////////
// Pull off the predicates
 
// Check whether there are predicates and add the predicate to the list
// of predicates without []. Get contents of every [] found.
$groups = $this->_getEndGroups($step);
//print_r($groups);
$groupCount = count($groups);
while (($groupCount > 0) && ($groups[$groupCount - 1][0] == '[')) {
// Remove the [] and add the predicate to the top of the list
$predicate = substr($groups[$groupCount - 1], 1, -1);
array_unshift($axis['predicate'], $predicate);
// Pop a group off the end of the list
array_pop($groups);
$groupCount--;
}
 
// Finally stick the rest back together and this is the rest of our step
if ($groupCount > 0) {
$step = implode('', $groups);
}
 
///////////////////////////////////////////////////
// Pull off the axis
 
// Check for abbreviated syntax
if ($step[0] == '@') {
// Use the attribute axis and select the attribute.
$axis['axis'] = 'attribute';
$step = substr($step, 1);
} else {
// Check whether the axis is given in plain text.
if (preg_match("/^([^:]*)::(.*)$/", $step, $match)) {
// Split the step to extract axis and node-test.
$axis['axis'] = $match[1];
$step = $match[2];
} else {
// The default axis is child
$axis['axis'] = 'child';
}
}
 
///////////////////////////////////////////////////
// Process the rest which will either a node test, or else this isn't a step.
 
// Check whether is an abbreviated syntax.
if ($step == '*') {
// Use the child axis and select all children.
$axis['node-test'] = '*';
break $parseBlock;
}
 
// ### I'm pretty sure our current handling of cdata is a fudge, and we should
// really do this better, but leave this as is for now.
if ($step == "text()") {
// Handle the text node
$axis["node-test"] = "cdata";
break $parseBlock;
}
 
// There are a few node tests that we match verbatim.
if ($step == "node()"
|| $step == "comment()"
|| $step == "text()"
|| $step == "processing-instruction") {
$axis["node-test"] = $step;
break $parseBlock;
}
 
// processing-instruction() is allowed to take an argument, but if it does, the argument
// is a literal, which we will have parsed out to $[number].
if (preg_match(":processing-instruction\(\$\d*\):", $step)) {
$axis["node-test"] = $step;
break $parseBlock;
}
 
// The only remaining way this can be a step, is if the remaining string is a simple name
// or else a :* name.
// http://www.w3.org/TR/xpath#NT-NameTest
// NameTest ::= '*'
// | NCName ':' '*'
// | QName
// QName ::= (Prefix ':')? LocalPart
// Prefix ::= NCName
// LocalPart ::= NCName
//
// ie
// NameTest ::= '*'
// | NCName ':' '*'
// | (NCName ':')? NCName
// NCName ::= (Letter | '_') (NCNameChar)*
$NCName = "[a-zA-Z_][\w\.\-_]*";
if (preg_match("/^$NCName:$NCName$/", $step)
|| preg_match("/^$NCName:*$/", $step)) {
$axis['node-test'] = $step;
if (!empty($this->parseOptions[XML_OPTION_CASE_FOLDING])) {
// Case in-sensitive
$axis['node-test'] = strtoupper($axis['node-test']);
}
// Not currently recursing
$LastFailedStep = '';
$LastFailedContext = '';
break $parseBlock;
}
 
// It's not a node then, we must treat it as a PrimaryExpr
// Check for recursion
if ($LastFailedStep == $step) {
$this->_displayError('Recursion detected while parsing an XPath query, in the step ' .
str_replace($step, '<b>'.$step.'</b>', $this->currentXpathQuery)
, __LINE__, __FILE__, FALSE);
$axis['node-test'] = $step;
} else {
$LastFailedStep = $step;
$axis = FALSE;
}
} while(FALSE); // end parse block
// Check whether it's a valid axis.
if ($axis !== FALSE) {
if (!in_array($axis['axis'], array_merge($this->axes, array('function')))) {
// Display an error message.
$this->_displayError('While parsing an XPath query, in the step ' .
str_replace($step, '<b>'.$step.'</b>', $this->currentXpathQuery) .
' the invalid axis ' . $axis['axis'] . ' was found.', __LINE__, __FILE__, FALSE);
}
}
 
// Cache the real axis information
$aResultsCache[$cacheKey] = $axis;
 
// Return the axis information.
return $axis;
}
 
/**
* Handles the XPath child axis.
*
* This method handles the XPath child axis. It essentially filters out the
* children to match the name specified after the '/'.
*
* @param $axis (array) Array containing information about the axis.
* @param $contextPath (string) xpath to starting node from which the axis should
* be processed.
* @return (array) A vector containing all nodes that were found, during
* the evaluation of the axis.
* @see evaluate()
*/
function _handleAxis_child($axis, $contextPath) {
$xPathSet = array(); // Create an empty node-set to hold the results of the child matches
if ($axis["node-test"] == "cdata") {
if (!isSet($this->nodeIndex[$contextPath]['textParts']) ) return '';
$tSize = sizeOf($this->nodeIndex[$contextPath]['textParts']);
for ($i=1; $i<=$tSize; $i++) {
$xPathSet[] = $contextPath . '/text()['.$i.']';
}
}
else {
// Get a list of all children.
$allChildren = $this->nodeIndex[$contextPath]['childNodes'];
// Run through all children in the order they where set.
$cSize = sizeOf($allChildren);
for ($i=0; $i<$cSize; $i++) {
$childPath = $contextPath .'/'. $allChildren[$i]['name'] .'['. $allChildren[$i]['contextPos'] .']';
$textChildPath = $contextPath.'/text()['.($i + 1).']';
// Check the text node
if ($this->_checkNodeTest($textChildPath, $axis['node-test'])) { // node test check
$xPathSet[] = $textChildPath; // Add the child to the node-set.
}
// Check the actual node
if ($this->_checkNodeTest($childPath, $axis['node-test'])) { // node test check
$xPathSet[] = $childPath; // Add the child to the node-set.
}
}
 
// Finally there will be one more text node to try
$textChildPath = $contextPath.'/text()['.($cSize + 1).']';
// Check the text node
if ($this->_checkNodeTest($textChildPath, $axis['node-test'])) { // node test check
$xPathSet[] = $textChildPath; // Add the child to the node-set.
}
}
return $xPathSet; // Return the nodeset.
}
/**
* Handles the XPath parent axis.
*
* @param $axis (array) Array containing information about the axis.
* @param $contextPath (string) xpath to starting node from which the axis should be processed.
* @return (array) A vector containing all nodes that were found, during the
* evaluation of the axis.
* @see evaluate()
*/
function _handleAxis_parent($axis, $contextPath) {
$xPathSet = array(); // Create an empty node-set.
// Check whether the parent matches the node-test.
$parentPath = $this->getParentXPath($contextPath);
if ($this->_checkNodeTest($parentPath, $axis['node-test'])) {
$xPathSet[] = $parentPath; // Add this node to the list of nodes.
}
return $xPathSet; // Return the nodeset.
}
/**
* Handles the XPath attribute axis.
*
* @param $axis (array) Array containing information about the axis.
* @param $contextPath (string) xpath to starting node from which the axis should be processed.
* @return (array) A vector containing all nodes that were found, during the evaluation of the axis.
* @see evaluate()
*/
function _handleAxis_attribute($axis, $contextPath) {
$xPathSet = array(); // Create an empty node-set.
// Check whether all nodes should be selected.
$nodeAttr = $this->nodeIndex[$contextPath]['attributes'];
if ($axis['node-test'] == '*'
|| $axis['node-test'] == 'node()') {
foreach($nodeAttr as $key=>$dummy) { // Run through the attributes.
$xPathSet[] = $contextPath.'/attribute::'.$key; // Add this node to the node-set.
}
}
elseif (isset($nodeAttr[$axis['node-test']])) {
$xPathSet[] = $contextPath . '/attribute::'. $axis['node-test']; // Add this node to the node-set.
}
return $xPathSet; // Return the nodeset.
}
/**
* Handles the XPath self axis.
*
* @param $axis (array) Array containing information about the axis.
* @param $contextPath (string) xpath to starting node from which the axis should be processed.
* @return (array) A vector containing all nodes that were found, during the evaluation of the axis.
* @see evaluate()
*/
function _handleAxis_self($axis, $contextPath) {
$xPathSet = array(); // Create an empty node-set.
// Check whether the context match the node-test.
if ($this->_checkNodeTest($contextPath, $axis['node-test'])) {
$xPathSet[] = $contextPath; // Add this node to the node-set.
}
return $xPathSet; // Return the nodeset.
}
/**
* Handles the XPath descendant axis.
*
* @param $axis (array) Array containing information about the axis.
* @param $contextPath (string) xpath to starting node from which the axis should be processed.
* @return (array) A vector containing all nodes that were found, during the evaluation of the axis.
* @see evaluate()
*/
function _handleAxis_descendant($axis, $contextPath) {
$xPathSet = array(); // Create an empty node-set.
// Get a list of all children.
$allChildren = $this->nodeIndex[$contextPath]['childNodes'];
// Run through all children in the order they where set.
$cSize = sizeOf($allChildren);
for ($i=0; $i<$cSize; $i++) {
$childPath = $allChildren[$i]['xpath'];
// Check whether the child matches the node-test.
if ($this->_checkNodeTest($childPath, $axis['node-test'])) {
$xPathSet[] = $childPath; // Add the child to the list of nodes.
}
// Recurse to the next level.
$xPathSet = array_merge($xPathSet, $this->_handleAxis_descendant($axis, $childPath));
}
return $xPathSet; // Return the nodeset.
}
/**
* Handles the XPath ancestor axis.
*
* @param $axis (array) Array containing information about the axis.
* @param $contextPath (string) xpath to starting node from which the axis should be processed.
* @return (array) A vector containing all nodes that were found, during the evaluation of the axis.
* @see evaluate()
*/
function _handleAxis_ancestor($axis, $contextPath) {
$xPathSet = array(); // Create an empty node-set.
$parentPath = $this->getParentXPath($contextPath); // Get the parent of the current node.
// Check whether the parent isn't super-root.
if (!empty($parentPath)) {
// Check whether the parent matches the node-test.
if ($this->_checkNodeTest($parentPath, $axis['node-test'])) {
$xPathSet[] = $parentPath; // Add the parent to the list of nodes.
}
// Handle all other ancestors.
$xPathSet = array_merge($this->_handleAxis_ancestor($axis, $parentPath), $xPathSet);
}
return $xPathSet; // Return the nodeset.
}
/**
* Handles the XPath namespace axis.
*
* @param $axis (array) Array containing information about the axis.
* @param $contextPath (string) xpath to starting node from which the axis should be processed.
* @return (array) A vector containing all nodes that were found, during the evaluation of the axis.
* @see evaluate()
*/
function _handleAxis_namespace($axis, $contextPath) {
$this->_displayError("The axis 'namespace is not suported'", __LINE__, __FILE__, FALSE);
}
/**
* Handles the XPath following axis.
*
* @param $axis (array) Array containing information about the axis.
* @param $contextPath (string) xpath to starting node from which the axis should be processed.
* @return (array) A vector containing all nodes that were found, during the evaluation of the axis.
* @see evaluate()
*/
function _handleAxis_following($axis, $contextPath) {
$xPathSet = array(); // Create an empty node-set.
do { // try-block
$node = $this->nodeIndex[$contextPath]; // Get the current node
$position = $node['pos']; // Get the current tree position.
$parent = $node['parentNode'];
// Check if there is a following sibling at all; if not end.
if ($position >= sizeOf($parent['childNodes'])) break; // try-block
// Build the starting abs. XPath
$startXPath = $parent['childNodes'][$position+1]['xpath'];
// Run through all nodes of the document.
$nodeKeys = array_keys($this->nodeIndex);
$nodeSize = sizeOf($nodeKeys);
for ($k=0; $k<$nodeSize; $k++) {
if ($nodeKeys[$k] == $startXPath) break; // Check whether this is the starting abs. XPath
}
for (; $k<$nodeSize; $k++) {
// Check whether the node fits the node-test.
if ($this->_checkNodeTest($nodeKeys[$k], $axis['node-test'])) {
$xPathSet[] = $nodeKeys[$k]; // Add the node to the list of nodes.
}
}
} while(FALSE);
return $xPathSet; // Return the nodeset.
}
/**
* Handles the XPath preceding axis.
*
* @param $axis (array) Array containing information about the axis.
* @param $contextPath (string) xpath to starting node from which the axis should be processed.
* @return (array) A vector containing all nodes that were found, during the evaluation of the axis.
* @see evaluate()
*/
function _handleAxis_preceding($axis, $contextPath) {
$xPathSet = array(); // Create an empty node-set.
// Run through all nodes of the document.
foreach ($this->nodeIndex as $xPath=>$dummy) {
if (empty($xPath)) continue; // skip super-Root
// Check whether this is the context node.
if ($xPath == $contextPath) {
break; // After this we won't look for more nodes.
}
if (!strncmp($xPath, $contextPath, strLen($xPath))) {
continue;
}
// Check whether the node fits the node-test.
if ($this->_checkNodeTest($xPath, $axis['node-test'])) {
$xPathSet[] = $xPath; // Add the node to the list of nodes.
}
}
return $xPathSet; // Return the nodeset.
}
/**
* Handles the XPath following-sibling axis.
*
* @param $axis (array) Array containing information about the axis.
* @param $contextPath (string) xpath to starting node from which the axis should be processed.
* @return (array) A vector containing all nodes that were found, during the evaluation of the axis.
* @see evaluate()
*/
function _handleAxis_following_sibling($axis, $contextPath) {
$xPathSet = array(); // Create an empty node-set.
// Get all children from the parent.
$siblings = $this->_handleAxis_child($axis, $this->getParentXPath($contextPath));
// Create a flag whether the context node was already found.
$found = FALSE;
// Run through all siblings.
$size = sizeOf($siblings);
for ($i=0; $i<$size; $i++) {
$sibling = $siblings[$i];
// Check whether the context node was already found.
if ($found) {
// Check whether the sibling matches the node-test.
if ($this->_checkNodeTest($sibling, $axis['node-test'])) {
$xPathSet[] = $sibling; // Add the sibling to the list of nodes.
}
}
// Check if we reached *this* context node.
if ($sibling == $contextPath) {
$found = TRUE; // Continue looking for other siblings.
}
}
return $xPathSet; // Return the nodeset.
}
/**
* Handles the XPath preceding-sibling axis.
*
* @param $axis (array) Array containing information about the axis.
* @param $contextPath (string) xpath to starting node from which the axis should be processed.
* @return (array) A vector containing all nodes that were found, during the evaluation of the axis.
* @see evaluate()
*/
function _handleAxis_preceding_sibling($axis, $contextPath) {
$xPathSet = array(); // Create an empty node-set.
// Get all children from the parent.
$siblings = $this->_handleAxis_child($axis, $this->getParentXPath($contextPath));
// Run through all siblings.
$size = sizeOf($siblings);
for ($i=0; $i<$size; $i++) {
$sibling = $siblings[$i];
// Check whether this is the context node.
if ($sibling == $contextPath) {
break; // Don't continue looking for other siblings.
}
// Check whether the sibling matches the node-test.
if ($this->_checkNodeTest($sibling, $axis['node-test'])) {
$xPathSet[] = $sibling; // Add the sibling to the list of nodes.
}
}
return $xPathSet; // Return the nodeset.
}
/**
* Handles the XPath descendant-or-self axis.
*
* @param $axis (array) Array containing information about the axis.
* @param $contextPath (string) xpath to starting node from which the axis should be processed.
* @return (array) A vector containing all nodes that were found, during the evaluation of the axis.
* @see evaluate()
*/
function _handleAxis_descendant_or_self($axis, $contextPath) {
$xPathSet = array(); // Create an empty node-set.
// Read the nodes.
$xPathSet = array_merge(
$this->_handleAxis_self($axis, $contextPath),
$this->_handleAxis_descendant($axis, $contextPath)
);
return $xPathSet; // Return the nodeset.
}
/**
* Handles the XPath ancestor-or-self axis.
*
* This method handles the XPath ancestor-or-self axis.
*
* @param $axis (array) Array containing information about the axis.
* @param $contextPath (string) xpath to starting node from which the axis should be processed.
* @return (array) A vector containing all nodes that were found, during the evaluation of the axis.
* @see evaluate()
*/
function _handleAxis_ancestor_or_self ( $axis, $contextPath) {
$xPathSet = array(); // Create an empty node-set.
// Read the nodes.
$xPathSet = array_merge(
$this->_handleAxis_ancestor($axis, $contextPath),
$this->_handleAxis_self($axis, $contextPath)
);
return $xPathSet; // Return the nodeset.
}
//-----------------------------------------------------------------------------------------
// XPath ------ XPath FUNCTION Handlers ------
//-----------------------------------------------------------------------------------------
/**
* Handles the XPath function last.
*
* @param $arguments (string) String containing the arguments that were passed to the function.
* @param $context (array) The context from which to evaluate the function
* @return (mixed) Depending on the type of function being processed
* @see evaluate()
*/
function _handleFunction_last($arguments, $context) {
return $context['size'];
}
/**
* Handles the XPath function position.
*
* @param $arguments (string) String containing the arguments that were passed to the function.
* @param $context (array) The context from which to evaluate the function
* @return (mixed) Depending on the type of function being processed
* @see evaluate()
*/
function _handleFunction_position($arguments, $context) {
return $context['pos'];
}
/**
* Handles the XPath function count.
*
* @param $arguments (string) String containing the arguments that were passed to the function.
* @param $context (array) The context from which to evaluate the function
* @return (mixed) Depending on the type of function being processed
* @see evaluate()
*/
function _handleFunction_count($arguments, $context) {
// Evaluate the argument of the method as an XPath and return the number of results.
return count($this->_evaluateExpr($arguments, $context));
}
/**
* Handles the XPath function id.
*
* @param $arguments (string) String containing the arguments that were passed to the function.
* @param $context (array) The context from which to evaluate the function
* @return (mixed) Depending on the type of function being processed
* @see evaluate()
*/
function _handleFunction_id($arguments, $context) {
$arguments = trim($arguments); // Trim the arguments.
$arguments = explode(' ', $arguments); // Now split the arguments into an array.
// Create a list of nodes.
$resultXPaths = array();
// Run through all nodes of the document.
$keys = array_keys($this->nodeIndex);
$kSize = $sizeOf($keys);
for ($i=0; $i<$kSize; $i++) {
if (empty($keys[$i])) continue; // skip super-Root
if (in_array($this->nodeIndex[$keys[$i]]['attributes']['id'], $arguments)) {
$resultXPaths[] = $context['nodePath']; // Add this node to the list of nodes.
}
}
return $resultXPaths; // Return the list of nodes.
}
/**
* Handles the XPath function name.
*
* @param $arguments (string) String containing the arguments that were passed to the function.
* @param $context (array) The context from which to evaluate the function
* @return (mixed) Depending on the type of function being processed
* @see evaluate()
*/
function _handleFunction_name($arguments, $context) {
// If the argument it omitted, it defaults to a node-set with the context node as its only member.
if (empty($arguments)) {
return $this->_addLiteral($this->nodeIndex[$context['nodePath']]['name']);
}
 
// Evaluate the argument to get a node set.
$nodeSet = $this->_evaluateExpr($arguments, $context);
if (!is_array($nodeSet)) return '';
if (count($nodeSet) < 1) return '';
if (!isset($this->nodeIndex[$nodeSet[0]])) return '';
// Return a reference to the name of the node.
return $this->_addLiteral($this->nodeIndex[$nodeSet[0]]['name']);
}
/**
* Handles the XPath function string.
*
* http://www.w3.org/TR/xpath#section-String-Functions
*
* @param $arguments (string) String containing the arguments that were passed to the function.
* @param $context (array) The context from which to evaluate the function
* @return (mixed) Depending on the type of function being processed
* @see evaluate()
*/
function _handleFunction_string($arguments, $context) {
// Check what type of parameter is given
if (is_array($arguments)) {
// Get the value of the first result (which means we want to concat all the text...unless
// a specific text() node has been given, and it will switch off to substringData
if (!count($arguments)) $result = '';
else {
$result = $this->_stringValue($arguments[0]);
if (($literal = $this->_asLiteral($result)) !== FALSE) {
$result = $literal;
}
}
}
// Is it a number string?
elseif (preg_match('/^[0-9]+(\.[0-9]+)?$/', $arguments) OR preg_match('/^\.[0-9]+$/', $arguments)) {
// ### Note no support for NaN and Infinity.
$number = doubleval($arguments); // Convert the digits to a number.
$result = strval($number); // Return the number.
}
elseif (is_bool($arguments)) { // Check whether it's TRUE or FALSE and return as string.
// ### Note that we used to return TRUE and FALSE which was incorrect according to the standard.
if ($arguments === TRUE) {
$result = 'true';
} else {
$result = 'false';
}
}
elseif (($literal = $this->_asLiteral($arguments)) !== FALSE) {
return $literal;
}
elseif (!empty($arguments)) {
// Spec says:
// "An object of a type other than the four basic types is converted to a string in a way that
// is dependent on that type."
// Use the argument as an XPath.
$result = $this->_evaluateExpr($arguments, $context);
if (is_string($result) && is_string($arguments) && (!strcmp($result, $arguments))) {
$this->_displayError("Loop detected in XPath expression. Probably an internal error :o/. _handleFunction_string($result)", __LINE__, __FILE__, FALSE);
return '';
} else {
$result = $this->_handleFunction_string($result, $context);
}
}
else {
$result = ''; // Return an empty string.
}
return $result;
}
/**
* Handles the XPath function concat.
*
* @param $arguments (string) String containing the arguments that were passed to the function.
* @param $context (array) The context from which to evaluate the function
* @return (mixed) Depending on the type of function being processed
* @see evaluate()
*/
function _handleFunction_concat($arguments, $context) {
// Split the arguments.
$arguments = explode(',', $arguments);
// Run through each argument and evaluate it.
$size = sizeof($arguments);
for ($i=0; $i<$size; $i++) {
$arguments[$i] = trim($arguments[$i]); // Trim each argument.
// Evaluate it.
$arguments[$i] = $this->_handleFunction_string($arguments[$i], $context);
}
$arguments = implode('', $arguments); // Put the string together and return it.
return $this->_addLiteral($arguments);
}
/**
* Handles the XPath function starts-with.
*
* @param $arguments (string) String containing the arguments that were passed to the function.
* @param $context (array) The context from which to evaluate the function
* @return (mixed) Depending on the type of function being processed
* @see evaluate()
*/
function _handleFunction_starts_with($arguments, $context) {
// Get the arguments.
$first = trim($this->_prestr($arguments, ','));
$second = trim($this->_afterstr($arguments, ','));
// Evaluate each argument.
$first = $this->_handleFunction_string($first, $context);
$second = $this->_handleFunction_string($second, $context);
// Check whether the first string starts with the second one.
return (bool) ereg('^'.$second, $first);
}
/**
* Handles the XPath function contains.
*
* @param $arguments (string) String containing the arguments that were passed to the function.
* @param $context (array) The context from which to evaluate the function
* @return (mixed) Depending on the type of function being processed
* @see evaluate()
*/
function _handleFunction_contains($arguments, $context) {
// Get the arguments.
$first = trim($this->_prestr($arguments, ','));
$second = trim($this->_afterstr($arguments, ','));
//echo "Predicate: $arguments First: ".$first." Second: ".$second."\n";
// Evaluate each argument.
$first = $this->_handleFunction_string($first, $context);
$second = $this->_handleFunction_string($second, $context);
//echo $second.": ".$first."\n";
// If the search string is null, then the provided there is a value it will contain it as
// it is considered that all strings contain the empty string. ## N.S.
if ($second==='') return TRUE;
// Check whether the first string starts with the second one.
if (strpos($first, $second) === FALSE) {
return FALSE;
} else {
return TRUE;
}
}
/**
* Handles the XPath function substring-before.
*
* @param $arguments (string) String containing the arguments that were passed to the function.
* @param $context (array) The context from which to evaluate the function
* @return (mixed) Depending on the type of function being processed
* @see evaluate()
*/
function _handleFunction_substring_before($arguments, $context) {
// Get the arguments.
$first = trim($this->_prestr($arguments, ','));
$second = trim($this->_afterstr($arguments, ','));
// Evaluate each argument.
$first = $this->_handleFunction_string($first, $context);
$second = $this->_handleFunction_string($second, $context);
// Return the substring.
return $this->_addLiteral($this->_prestr(strval($first), strval($second)));
}
/**
* Handles the XPath function substring-after.
*
* @param $arguments (string) String containing the arguments that were passed to the function.
* @param $context (array) The context from which to evaluate the function
* @return (mixed) Depending on the type of function being processed
* @see evaluate()
*/
function _handleFunction_substring_after($arguments, $context) {
// Get the arguments.
$first = trim($this->_prestr($arguments, ','));
$second = trim($this->_afterstr($arguments, ','));
// Evaluate each argument.
$first = $this->_handleFunction_string($first, $context);
$second = $this->_handleFunction_string($second, $context);
// Return the substring.
return $this->_addLiteral($this->_afterstr(strval($first), strval($second)));
}
/**
* Handles the XPath function substring.
*
* @param $arguments (string) String containing the arguments that were passed to the function.
* @param $context (array) The context from which to evaluate the function
* @return (mixed) Depending on the type of function being processed
* @see evaluate()
*/
function _handleFunction_substring($arguments, $context) {
// Split the arguments.
$arguments = explode(",", $arguments);
$size = sizeOf($arguments);
for ($i=0; $i<$size; $i++) { // Run through all arguments.
$arguments[$i] = trim($arguments[$i]); // Trim the string.
// Evaluate each argument.
$arguments[$i] = $this->_handleFunction_string($arguments[$i], $context);
}
// Check whether a third argument was given and return the substring..
if (!empty($arguments[2])) {
return $this->_addLiteral(substr(strval($arguments[0]), $arguments[1] - 1, $arguments[2]));
} else {
return $this->_addLiteral(substr(strval($arguments[0]), $arguments[1] - 1));
}
}
/**
* Handles the XPath function string-length.
*
* @param $arguments (string) String containing the arguments that were passed to the function.
* @param $context (array) The context from which to evaluate the function
* @return (mixed) Depending on the type of function being processed
* @see evaluate()
*/
function _handleFunction_string_length($arguments, $context) {
$arguments = trim($arguments); // Trim the argument.
// Evaluate the argument.
$arguments = $this->_handleFunction_string($arguments, $context);
return strlen(strval($arguments)); // Return the length of the string.
}
 
/**
* Handles the XPath function normalize-space.
*
* The normalize-space function returns the argument string with whitespace
* normalized by stripping leading and trailing whitespace and replacing sequences
* of whitespace characters by a single space.
* If the argument is omitted, it defaults to the context node converted to a string,
* in other words the string-value of the context node
*
* @param $arguments (string) String containing the arguments that were passed to the function.
* @param $context (array) The context from which to evaluate the function
* @return (stri)g trimed string
* @see evaluate()
*/
function _handleFunction_normalize_space($arguments, $context) {
if (empty($arguments)) {
$arguments = $this->getParentXPath($context['nodePath']).'/'.$this->nodeIndex[$context['nodePath']]['name'].'['.$this->nodeIndex[$context['nodePath']]['contextPos'].']';
} else {
$arguments = $this->_handleFunction_string($arguments, $context);
}
$arguments = trim(preg_replace (";[[:space:]]+;s",' ',$arguments));
return $this->_addLiteral($arguments);
}
 
/**
* Handles the XPath function translate.
*
* @param $arguments (string) String containing the arguments that were passed to the function.
* @param $context (array) The context from which to evaluate the function
* @return (mixed) Depending on the type of function being processed
* @see evaluate()
*/
function _handleFunction_translate($arguments, $context) {
$arguments = explode(',', $arguments); // Split the arguments.
$size = sizeOf($arguments);
for ($i=0; $i<$size; $i++) { // Run through all arguments.
$arguments[$i] = trim($arguments[$i]); // Trim the argument.
// Evaluate the argument.
$arguments[$i] = $this->_handleFunction_string($arguments[$i], $context);
}
// Return the translated string.
return $this->_addLiteral(strtr($arguments[0], $arguments[1], $arguments[2]));
}
 
/**
* Handles the XPath function boolean.
*
* http://www.w3.org/TR/xpath#section-Boolean-Functions
*
* @param $arguments (string) String containing the arguments that were passed to the function.
* @param $context (array) The context from which to evaluate the function
* @return (mixed) Depending on the type of function being processed
* @see evaluate()
*/
function _handleFunction_boolean($arguments, $context) {
if (empty($arguments)) {
return FALSE; // Sorry, there were no arguments.
}
// a bool is dead obvious
elseif (is_bool($arguments)) {
return $arguments;
}
// a node-set is true if and only if it is non-empty
elseif (is_array($arguments)) {
return (count($arguments) > 0);
}
// a number is true if and only if it is neither positive or negative zero nor NaN
// (Straight out of the XPath spec.. makes no sense?????)
elseif (preg_match('/^[0-9]+(\.[0-9]+)?$/', $arguments) || preg_match('/^\.[0-9]+$/', $arguments)) {
$number = doubleval($arguments); // Convert the digits to a number.
// If number zero return FALSE else TRUE.
if ($number == 0) return FALSE; else return TRUE;
}
// a string is true if and only if its length is non-zero
elseif (($literal = $this->_asLiteral($arguments)) !== FALSE) {
return (strlen($literal) != 0);
}
// an object of a type other than the four basic types is converted to a boolean in a
// way that is dependent on that type
else {
// Spec says:
// "An object of a type other than the four basic types is converted to a number in a way
// that is dependent on that type"
// Try to evaluate the argument as an XPath.
$result = $this->_evaluateExpr($arguments, $context);
if (is_string($result) && is_string($arguments) && (!strcmp($result, $arguments))) {
$this->_displayError("Loop detected in XPath expression. Probably an internal error :o/. _handleFunction_boolean($result)", __LINE__, __FILE__, FALSE);
return FALSE;
} else {
return $this->_handleFunction_boolean($result, $context);
}
}
}
/**
* Handles the XPath function not.
*
* @param $arguments (string) String containing the arguments that were passed to the function.
* @param $context (array) The context from which to evaluate the function
* @return (mixed) Depending on the type of function being processed
* @see evaluate()
*/
function _handleFunction_not($arguments, $context) {
// Return the negative value of the content of the brackets.
$bArgResult = $this->_handleFunction_boolean($arguments, $context);
//echo "Before inversion: ".($bArgResult?"TRUE":"FALSE")."\n";
return !$bArgResult;
}
/**
* Handles the XPath function TRUE.
*
* @param $arguments (string) String containing the arguments that were passed to the function.
* @param $context (array) The context from which to evaluate the function
* @return (mixed) Depending on the type of function being processed
* @see evaluate()
*/
function _handleFunction_true($arguments, $context) {
return TRUE; // Return TRUE.
}
/**
* Handles the XPath function FALSE.
*
* @param $arguments (string) String containing the arguments that were passed to the function.
* @param $context (array) The context from which to evaluate the function
* @return (mixed) Depending on the type of function being processed
* @see evaluate()
*/
function _handleFunction_false($arguments, $context) {
return FALSE; // Return FALSE.
}
/**
* Handles the XPath function lang.
*
* @param $arguments (string) String containing the arguments that were passed to the function.
* @param $context (array) The context from which to evaluate the function
* @return (mixed) Depending on the type of function being processed
* @see evaluate()
*/
function _handleFunction_lang($arguments, $context) {
$arguments = trim($arguments); // Trim the arguments.
$currentNode = $this->nodeIndex[$context['nodePath']];
while (!empty($currentNode['name'])) { // Run through the ancestors.
// Check whether the node has an language attribute.
if (isSet($currentNode['attributes']['xml:lang'])) {
// Check whether it's the language, the user asks for; if so return TRUE else FALSE
return eregi('^'.$arguments, $currentNode['attributes']['xml:lang']);
}
$currentNode = $currentNode['parentNode']; // Move up to parent
} // End while
return FALSE;
}
/**
* Handles the XPath function number.
*
* http://www.w3.org/TR/xpath#section-Number-Functions
*
* @param $arguments (string) String containing the arguments that were passed to the function.
* @param $context (array) The context from which to evaluate the function
* @return (mixed) Depending on the type of function being processed
* @see evaluate()
*/
function _handleFunction_number($arguments, $context) {
// Check the type of argument.
 
// A string that is a number
if (is_numeric($arguments)) {
return doubleval($arguments); // Return the argument as a number.
}
// A bool
elseif (is_bool($arguments)) { // Return TRUE/FALSE as a number.
if ($arguments === TRUE) return 1; else return 0;
}
// A node set
elseif (is_array($arguments)) {
// Is converted to a string then handled like a string
$string = $this->_handleFunction_string($arguments, $context);
if (is_numeric($string))
return doubleval($string);
}
elseif (($literal = $this->_asLiteral($arguments)) !== FALSE) {
if (is_numeric($literal)) {
return doubleval($literal);
} else {
// If we are to stick strictly to the spec, we should return NaN, but lets just
// leave PHP to see if can do some dynamic conversion.
return $literal;
}
}
else {
// Spec says:
// "An object of a type other than the four basic types is converted to a number in a way
// that is dependent on that type"
// Try to evaluate the argument as an XPath.
$result = $this->_evaluateExpr($arguments, $context);
if (is_string($result) && is_string($arguments) && (!strcmp($result, $arguments))) {
$this->_displayError("Loop detected in XPath expression. Probably an internal error :o/. _handleFunction_number($result)", __LINE__, __FILE__, FALSE);
return FALSE;
} else {
return $this->_handleFunction_number($result, $context);
}
}
}
 
/**
* Handles the XPath function sum.
*
* @param $arguments (string) String containing the arguments that were passed to the function.
* @param $context (array) The context from which to evaluate the function
* @return (mixed) Depending on the type of function being processed
* @see evaluate()
*/
function _handleFunction_sum($arguments, $context) {
$arguments = trim($arguments); // Trim the arguments.
// Evaluate the arguments as an XPath query.
$result = $this->_evaluateExpr($arguments, $context);
$sum = 0; // Create a variable to save the sum.
// The sum function expects a node set as an argument.
if (is_array($result)) {
// Run through all results.
$size = sizeOf($result);
for ($i=0; $i<$size; $i++) {
$value = $this->_stringValue($result[$i], $context);
if (($literal = $this->_asLiteral($value)) !== FALSE) {
$value = $literal;
}
$sum += doubleval($value); // Add it to the sum.
}
}
return $sum; // Return the sum.
}
 
/**
* Handles the XPath function floor.
*
* @param $arguments (string) String containing the arguments that were passed to the function.
* @param $context (array) The context from which to evaluate the function
* @return (mixed) Depending on the type of function being processed
* @see evaluate()
*/
function _handleFunction_floor($arguments, $context) {
if (!is_numeric($arguments)) {
$arguments = $this->_handleFunction_number($arguments, $context);
}
$arguments = doubleval($arguments); // Convert the arguments to a number.
return floor($arguments); // Return the result
}
/**
* Handles the XPath function ceiling.
*
* @param $arguments (string) String containing the arguments that were passed to the function.
* @param $context (array) The context from which to evaluate the function
* @return (mixed) Depending on the type of function being processed
* @see evaluate()
*/
function _handleFunction_ceiling($arguments, $context) {
if (!is_numeric($arguments)) {
$arguments = $this->_handleFunction_number($arguments, $context);
}
$arguments = doubleval($arguments); // Convert the arguments to a number.
return ceil($arguments); // Return the result
}
/**
* Handles the XPath function round.
*
* @param $arguments (string) String containing the arguments that were passed to the function.
* @param $context (array) The context from which to evaluate the function
* @return (mixed) Depending on the type of function being processed
* @see evaluate()
*/
function _handleFunction_round($arguments, $context) {
if (!is_numeric($arguments)) {
$arguments = $this->_handleFunction_number($arguments, $context);
}
$arguments = doubleval($arguments); // Convert the arguments to a number.
return round($arguments); // Return the result
}
 
//-----------------------------------------------------------------------------------------
// XPath ------ XPath Extension FUNCTION Handlers ------
//-----------------------------------------------------------------------------------------
 
/**
* Handles the XPath function x-lower.
*
* lower case a string.
* string x-lower(string)
*
* @param $arguments (string) String containing the arguments that were passed to the function.
* @param $context (array) The context from which to evaluate the function
* @return (mixed) Depending on the type of function being processed
* @see evaluate()
*/
function _handleFunction_x_lower($arguments, $context) {
// Evaluate the argument.
$string = $this->_handleFunction_string($arguments, $context);
// Return a reference to the lowercased string
return $this->_addLiteral(strtolower(strval($string)));
}
 
/**
* Handles the XPath function x-upper.
*
* upper case a string.
* string x-upper(string)
*
* @param $arguments (string) String containing the arguments that were passed to the function.
* @param $context (array) The context from which to evaluate the function
* @return (mixed) Depending on the type of function being processed
* @see evaluate()
*/
function _handleFunction_x_upper($arguments, $context) {
// Evaluate the argument.
$string = $this->_handleFunction_string($arguments, $context);
// Return a reference to the lowercased string
return $this->_addLiteral(strtoupper(strval($string)));
}
 
/**
* Handles the XPath function generate-id.
*
* Produce a unique id for the first node of the node set.
*
* Example usage, produces an index of all the nodes in an .xml document, where the content of each
* "section" is the exported node as XML.
*
* $aFunctions = $xPath->match('//');
*
* foreach ($aFunctions as $Function) {
* $id = $xPath->match("generate-id($Function)");
* echo "<a href='#$id'>$Function</a><br>";
* }
*
* foreach ($aFunctions as $Function) {
* $id = $xPath->match("generate-id($Function)");
* echo "<h2 id='$id'>$Function</h2>";
* echo htmlspecialchars($xPath->exportAsXml($Function));
* }
*
* @param $arguments (string) String containing the arguments that were passed to the function.
* @param $context (array) The context from which to evaluate the function
* @return (mixed) Depending on the type of function being processed
* @author Ricardo Garcia
* @see evaluate()
*/
function _handleFunction_generate_id($arguments, $context) {
// If the argument is omitted, it defaults to a node-set with the context node as its only member.
if (is_string($arguments) && empty($arguments)) {
// We need ids then
$this->_generate_ids();
return $this->_addLiteral($this->nodeIndex[$context['nodePath']]['generated_id']);
}
 
// Evaluate the argument to get a node set.
$nodeSet = $this->_evaluateExpr($arguments, $context);
 
if (!is_array($nodeSet)) return '';
if (count($nodeSet) < 1) return '';
if (!isset($this->nodeIndex[$nodeSet[0]])) return '';
// Return a reference to the name of the node.
// We need ids then
$this->_generate_ids();
return $this->_addLiteral($this->nodeIndex[$nodeSet[0]]['generated_id']);
}
 
//-----------------------------------------------------------------------------------------
// XPathEngine ------ Help Stuff ------
//-----------------------------------------------------------------------------------------
 
/**
* Decodes the character set entities in the given string.
*
* This function is given for convenience, as all text strings or attributes
* are going to come back to you with their entities still encoded. You can
* use this function to remove these entites.
*
* It makes use of the get_html_translation_table(HTML_ENTITIES) php library
* call, so is limited in the same ways. At the time of writing this seemed
* be restricted to iso-8859-1
*
* ### Provide an option that will do this by default.
*
* @param $encodedData (mixed) The string or array that has entities you would like to remove
* @param $reverse (bool) If TRUE entities will be encoded rather than decoded, ie
* < to &lt; rather than &lt; to <.
* @return (mixed) The string or array returned with entities decoded.
*/
function decodeEntities($encodedData, $reverse=FALSE) {
static $aEncodeTbl;
static $aDecodeTbl;
// Get the translation entities, but we'll cache the result to enhance performance.
if (empty($aDecodeTbl)) {
// Get the translation entities.
$aEncodeTbl = get_html_translation_table(HTML_ENTITIES);
$aDecodeTbl = array_flip($aEncodeTbl);
}
 
// If it's just a single string.
if (!is_array($encodedData)) {
if ($reverse) {
return strtr($encodedData, $aEncodeTbl);
} else {
return strtr($encodedData, $aDecodeTbl);
}
}
 
$result = array();
foreach($encodedData as $string) {
if ($reverse) {
$result[] = strtr($string, $aEncodeTbl);
} else {
$result[] = strtr($string, $aDecodeTbl);
}
}
 
return $result;
}
/**
* Compare two nodes to see if they are equal (point to the same node in the doc)
*
* 2 nodes are considered equal if the absolute XPath is equal.
*
* @param $node1 (mixed) Either an absolute XPath to an node OR a real tree-node (hash-array)
* @param $node2 (mixed) Either an absolute XPath to an node OR a real tree-node (hash-array)
* @return (bool) TRUE if equal (see text above), FALSE if not (and on error).
*/
function equalNodes($node1, $node2) {
$xPath_1 = is_string($node1) ? $node1 : $this->getNodePath($node1);
$xPath_2 = is_string($node2) ? $node2 : $this->getNodePath($node2);
return (strncasecmp ($xPath_1, $xPath_2, strLen($xPath_1)) == 0);
}
/**
* Get the absolute XPath of a node that is in a document tree.
*
* @param $node (array) A real tree-node (hash-array)
* @return (string) The string path to the node or FALSE on error.
*/
function getNodePath($node) {
if (!empty($node['xpath'])) return $node['xpath'];
$pathInfo = array();
do {
if (empty($node['name']) OR empty($node['parentNode'])) break; // End criteria
$pathInfo[] = array('name' => $node['name'], 'contextPos' => $node['contextPos']);
$node = $node['parentNode'];
} while (TRUE);
$xPath = '';
for ($i=sizeOf($pathInfo)-1; $i>=0; $i--) {
$xPath .= '/' . $pathInfo[$i]['name'] . '[' . $pathInfo[$i]['contextPos'] . ']';
}
if (empty($xPath)) return FALSE;
return $xPath;
}
/**
* Retrieves the absolute parent XPath query.
*
* The parents stored in the tree are only relative parents...but all the parent
* information is stored in the XPath query itself...so instead we use a function
* to extract the parent from the absolute Xpath query
*
* @param $childPath (string) String containing an absolute XPath query
* @return (string) returns the absolute XPath of the parent
*/
function getParentXPath($absoluteXPath) {
$lastSlashPos = strrpos($absoluteXPath, '/');
if ($lastSlashPos == 0) { // it's already the root path
return ''; // 'super-root'
} else {
return (substr($absoluteXPath, 0, $lastSlashPos));
}
}
/**
* Returns TRUE if the given node has child nodes below it
*
* @param $absoluteXPath (string) full path of the potential parent node
* @return (bool) TRUE if this node exists and has a child, FALSE otherwise
*/
function hasChildNodes($absoluteXPath) {
if ($this->_indexIsDirty) $this->reindexNodeTree();
return (bool) (isSet($this->nodeIndex[$absoluteXPath])
AND sizeOf($this->nodeIndex[$absoluteXPath]['childNodes']));
}
/**
* Translate all ampersands to it's literal entities '&amp;' and back.
*
* I wasn't aware of this problem at first but it's important to understand why we do this.
* At first you must know:
* a) PHP's XML parser *translates* all entities to the equivalent char E.g. &lt; is returned as '<'
* b) PHP's XML parser (in V 4.1.0) has problems with most *literal* entities! The only one's that are
* recognized are &amp;, &lt; &gt; and &quot;. *ALL* others (like &nbsp; &copy; a.s.o.) cause an
* XML_ERROR_UNDEFINED_ENTITY error. I reported this as bug at http://bugs.php.net/bug.php?id=15092
* (It turned out not to be a 'real' bug, but one of those nice W3C-spec things).
*
* Forget position b) now. It's just for info. Because the way we will solve a) will also solve b) too.
*
* THE PROBLEM
* To understand the problem, here a sample:
* Given is the following XML: "<AAA> &lt; &nbsp; &gt; </AAA>"
* Try to parse it and PHP's XML parser will fail with a XML_ERROR_UNDEFINED_ENTITY becaus of
* the unknown litteral-entity '&nbsp;'. (The numeric equivalent '&#160;' would work though).
* Next try is to use the numeric equivalent 160 for '&nbsp;', thus "<AAA> &lt; &#160; &gt; </AAA>"
* The data we receive in the tag <AAA> is " < > ". So we get the *translated entities* and
* NOT the 3 entities &lt; &#160; &gt. Thus, we will not even notice that there were entities at all!
* In *most* cases we're not able to tell if the data was given as entity or as 'normal' char.
* E.g. When receiving a quote or a single space were not able to tell if it was given as 'normal' char
* or as &nbsp; or &quot;. Thus we loose the entity-information of the XML-data!
*
* THE SOLUTION
* The better solution is to keep the data 'as is' by replacing the '&' before parsing begins.
* E.g. Taking the original input from above, this would result in "<AAA> &amp;lt; &amp;nbsp; &amp;gt; </AAA>"
* The data we receive now for the tag <AAA> is " &lt; &nbsp; &gt; ". and that's what we want.
*
* The bad thing is, that a global replace will also replace data in section that are NOT translated by the
* PHP XML-parser. That is comments (<!-- -->), IP-sections (stuff between <? ? >) and CDATA-block too.
* So all data comming from those sections must be reversed. This is done during the XML parse phase.
* So:
* a) Replacement of all '&' in the XML-source.
* b) All data that is not char-data or in CDATA-block have to be reversed during the XML-parse phase.
*
* @param $xmlSource (string) The XML string
* @return (string) The XML string with translated ampersands.
*/
function _translateAmpersand($xmlSource, $reverse=FALSE) {
$PHP5 = (substr(phpversion(), 0, 1) == '5');
if ($PHP5) {
//otherwise we receive &amp;nbsp; instead of &nbsp;
return $xmlSource;
} else {
return ($reverse ? str_replace('&amp;', '&', $xmlSource) : str_replace('&', '&amp;', $xmlSource));
}
}
 
} // END OF CLASS XPathEngine
 
 
/************************************************************************************************
* ===============================================================================================
* X P a t h - Class
* ===============================================================================================
************************************************************************************************/
 
define('XPATH_QUERYHIT_ALL' , 1);
define('XPATH_QUERYHIT_FIRST' , 2);
define('XPATH_QUERYHIT_UNIQUE', 3);
 
class XPath extends XPathEngine {
/**
* Constructor of the class
*
* Optionally you may call this constructor with the XML-filename to parse and the
* XML option vector. A option vector sample:
* $xmlOpt = array(XML_OPTION_CASE_FOLDING => FALSE, XML_OPTION_SKIP_WHITE => TRUE);
*
* @param $userXmlOptions (array) (optional) Vector of (<optionID>=><value>, <optionID>=><value>, ...)
* @param $fileName (string) (optional) Filename of XML file to load from.
* It is recommended that you call importFromFile()
* instead as you will get an error code. If the
* import fails, the object will be set to FALSE.
* @see parent::XPathEngine()
*/
function XPath($fileName='', $userXmlOptions=array()) {
parent::XPathEngine($userXmlOptions);
$this->properties['modMatch'] = XPATH_QUERYHIT_ALL;
if ($fileName) {
if (!$this->importFromFile($fileName)) {
// Re-run the base constructor to "reset" the object. If the user has any sense, then
// they will have created the object, and then explicitly called importFromFile(), giving
// them the chance to catch and handle the error properly.
parent::XPathEngine($userXmlOptions);
}
}
}
/**
* Resets the object so it's able to take a new xml sting/file
*
* Constructing objects is slow. If you can, reuse ones that you have used already
* by using this reset() function.
*/
function reset() {
parent::reset();
$this->properties['modMatch'] = XPATH_QUERYHIT_ALL;
}
//-----------------------------------------------------------------------------------------
// XPath ------ Get / Set Stuff ------
//-----------------------------------------------------------------------------------------
/**
* Resolves and xPathQuery array depending on the property['modMatch']
*
* Most of the modification functions of XPath will also accept a xPathQuery (instead
* of an absolute Xpath). The only problem is that the query could match more the one
* node. The question is, if the none, the fist or all nodes are to be modified.
* The behaver can be set with setModMatch()
*
* @param $modMatch (int) One of the following:
* - XPATH_QUERYHIT_ALL (default)
* - XPATH_QUERYHIT_FIRST
* - XPATH_QUERYHIT_UNIQUE // If the query matches more then one node.
* @see _resolveXPathQuery()
*/
function setModMatch($modMatch = XPATH_QUERYHIT_ALL) {
switch($modMatch) {
case XPATH_QUERYHIT_UNIQUE : $this->properties['modMatch'] = XPATH_QUERYHIT_UNIQUE; break;
case XPATH_QUERYHIT_FIRST: $this->properties['modMatch'] = XPATH_QUERYHIT_FIRST; break;
default: $this->properties['modMatch'] = XPATH_QUERYHIT_ALL;
}
}
//-----------------------------------------------------------------------------------------
// XPath ------ DOM Like Modification ------
//-----------------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------------
// XPath ------ Child (Node) Set/Get ------
//-----------------------------------------------------------------------------------------
/**
* Retrieves the name(s) of a node or a group of document nodes.
*
* This method retrieves the names of a group of document nodes
* specified in the argument. So if the argument was '/A[1]/B[2]' then it
* would return 'B' if the node did exist in the tree.
*
* @param $xPathQuery (mixed) Array or single full document path(s) of the node(s),
* from which the names should be retrieved.
* @return (mixed) Array or single string of the names of the specified
* nodes, or just the individual name. If the node did
* not exist, then returns FALSE.
*/
function nodeName($xPathQuery) {
if (is_array($xPathQuery)) {
$xPathSet = $xPathQuery;
} else {
// Check for a valid xPathQuery
$xPathSet = $this->_resolveXPathQuery($xPathQuery,'nodeName');
}
if (count($xPathSet) == 0) return FALSE;
// For each node, get it's name
$result = array();
foreach($xPathSet as $xPath) {
$node = &$this->getNode($xPath);
if (!$node) {
// ### Fatal internal error??
continue;
}
$result[] = $node['name'];
}
// If just a single string, return string
if (count($xPathSet) == 1) $result = $result[0];
// Return result.
return $result;
}
/**
* Removes a node from the XML document.
*
* This method removes a node from the tree of nodes of the XML document. If the node
* is a document node, all children of the node and its character data will be removed.
* If the node is an attribute node, only this attribute will be removed, the node to which
* the attribute belongs as well as its children will remain unmodified.
*
* NOTE: When passing a xpath-query instead of an abs. Xpath.
* Depending on setModMatch() one, none or multiple nodes are affected.
*
* @param $xPathQuery (string) xpath to the node (See note above).
* @param $autoReindex (bool) (optional, default=TRUE) Reindex the document to reflect
* the changes. A performance helper. See reindexNodeTree()
* @return (bool) TRUE on success, FALSE on error;
* @see setModMatch(), reindexNodeTree()
*/
function removeChild($xPathQuery, $autoReindex=TRUE) {
$ThisFunctionName = 'removeChild';
$bDebugThisFunction = in_array($ThisFunctionName, $this->aDebugFunctions);
$this->_beginDebugFunction($ThisFunctionName, $bDebugThisFunction);
if ($bDebugThisFunction) {
echo "Node: $xPathQuery\n";
echo '<hr>';
}
 
$NULL = NULL;
$status = FALSE;
do { // try-block
// Check for a valid xPathQuery
$xPathSet = $this->_resolveXPathQuery($xPathQuery,'removeChild');
if (sizeOf($xPathSet) === 0) {
$this->_displayError(sprintf($this->errorStrings['NoNodeMatch'], $xPathQuery), __LINE__, __FILE__, FALSE);
break; // try-block
}
$mustReindex = FALSE;
// Make chages from 'bottom-up'. In this manner the modifications will not affect itself.
for ($i=sizeOf($xPathSet)-1; $i>=0; $i--) {
$absoluteXPath = $xPathSet[$i];
if (preg_match(';/attribute::;', $absoluteXPath)) { // Handle the case of an attribute node
$xPath = $this->_prestr($absoluteXPath, '/attribute::'); // Get the path to the attribute node's parent.
$attribute = $this->_afterstr($absoluteXPath, '/attribute::'); // Get the name of the attribute.
unSet($this->nodeIndex[$xPath]['attributes'][$attribute]); // Unset the attribute
if ($bDebugThisFunction) echo "We removed the attribute '$attribute' of node '$xPath'.\n";
continue;
}
// Otherwise remove the node by setting it to NULL. It will be removed on the next reindexNodeTree() call.
$mustReindex = $autoReindex;
// Flag the index as dirty; it's not uptodate. A reindex will be forced (if dirty) when exporting the XML doc
$this->_indexIsDirty = TRUE;
$theNode = $this->nodeIndex[$absoluteXPath];
$theNode['parentNode']['childNodes'][$theNode['pos']] =& $NULL;
if ($bDebugThisFunction) echo "We removed the node '$absoluteXPath'.\n";
}
// Reindex the node tree again
if ($mustReindex) $this->reindexNodeTree();
$status = TRUE;
} while(FALSE);
$this->_closeDebugFunction($ThisFunctionName, $status, $bDebugThisFunction);
 
return $status;
}
/**
* Replace a node with any data string. The $data is taken 1:1.
*
* This function will delete the node you define by $absoluteXPath (plus it's sub-nodes) and
* substitute it by the string $text. Often used to push in not well formed HTML.
* WARNING:
* The $data is taken 1:1.
* You are in charge that the data you enter is valid XML if you intend
* to export and import the content again.
*
* NOTE: When passing a xpath-query instead of an abs. Xpath.
* Depending on setModMatch() one, none or multiple nodes are affected.
*
* @param $xPathQuery (string) xpath to the node (See note above).
* @param $data (string) String containing the content to be set. *READONLY*
* @param $autoReindex (bool) (optional, default=TRUE) Reindex the document to reflect
* the changes. A performance helper. See reindexNodeTree()
* @return (bool) TRUE on success, FALSE on error;
* @see setModMatch(), replaceChild(), reindexNodeTree()
*/
function replaceChildByData($xPathQuery, $data, $autoReindex=TRUE) {
$ThisFunctionName = 'replaceChildByData';
$bDebugThisFunction = in_array($ThisFunctionName, $this->aDebugFunctions);
$this->_beginDebugFunction($ThisFunctionName, $bDebugThisFunction);
if ($bDebugThisFunction) {
echo "Node: $xPathQuery\n";
}
 
$NULL = NULL;
$status = FALSE;
do { // try-block
// Check for a valid xPathQuery
$xPathSet = $this->_resolveXPathQuery($xPathQuery,'replaceChildByData');
if (sizeOf($xPathSet) === 0) {
$this->_displayError(sprintf($this->errorStrings['NoNodeMatch'], $xPathQuery), __LINE__, __FILE__, FALSE);
break; // try-block
}
$mustReindex = FALSE;
// Make chages from 'bottom-up'. In this manner the modifications will not affect itself.
for ($i=sizeOf($xPathSet)-1; $i>=0; $i--) {
$mustReindex = $autoReindex;
// Flag the index as dirty; it's not uptodate. A reindex will be forced (if dirty) when exporting the XML doc
$this->_indexIsDirty = TRUE;
$absoluteXPath = $xPathSet[$i];
$theNode = $this->nodeIndex[$absoluteXPath];
$pos = $theNode['pos'];
$theNode['parentNode']['textParts'][$pos] .= $data;
$theNode['parentNode']['childNodes'][$pos] =& $NULL;
if ($bDebugThisFunction) echo "We replaced the node '$absoluteXPath' with data.\n";
}
// Reindex the node tree again
if ($mustReindex) $this->reindexNodeTree();
$status = TRUE;
} while(FALSE);
$this->_closeDebugFunction($ThisFunctionName, ($status) ? 'Success' : '!!! FAILD !!!', $bDebugThisFunction);
 
return $status;
}
/**
* Replace the node(s) that matches the xQuery with the passed node (or passed node-tree)
*
* If the passed node is a string it's assumed to be XML and replaceChildByXml()
* will be called.
* NOTE: When passing a xpath-query instead of an abs. Xpath.
* Depending on setModMatch() one, none or multiple nodes are affected.
*
* @param $xPathQuery (string) Xpath to the node being replaced.
* @param $node (mixed) String or Array (Usually a String)
* If string: Vaild XML. E.g. "<A/>" or "<A> foo <B/> bar <A/>"
* If array: A Node (can be a whole sub-tree) (See comment in header)
* @param $autoReindex (bool) (optional, default=TRUE) Reindex the document to reflect
* the changes. A performance helper. See reindexNodeTree()
* @return (array) The last replaced $node (can be a whole sub-tree)
* @see reindexNodeTree()
*/
function &replaceChild($xPathQuery, $node, $autoReindex=TRUE) {
$NULL = NULL;
if (is_string($node)) {
if (empty($node)) { //--sam. Not sure how to react on an empty string - think it's an error.
return array();
} else {
if (!($node = $this->_xml2Document($node))) return FALSE;
}
}
// Special case if it's 'super root'. We then have to take the child node == top node
if (empty($node['parentNode'])) $node = $node['childNodes'][0];
$status = FALSE;
do { // try-block
// Check for a valid xPathQuery
$xPathSet = $this->_resolveXPathQuery($xPathQuery,'replaceChild');
if (sizeOf($xPathSet) === 0) {
$this->_displayError(sprintf($this->errorStrings['NoNodeMatch'], $xPathQuery), __LINE__, __FILE__, FALSE);
break; // try-block
}
$mustReindex = FALSE;
// Make chages from 'bottom-up'. In this manner the modifications will not affect itself.
for ($i=sizeOf($xPathSet)-1; $i>=0; $i--) {
$mustReindex = $autoReindex;
// Flag the index as dirty; it's not uptodate. A reindex will be forced (if dirty) when exporting the XML doc
$this->_indexIsDirty = TRUE;
$absoluteXPath = $xPathSet[$i];
$childNode =& $this->nodeIndex[$absoluteXPath];
$parentNode =& $childNode['parentNode'];
$childNode['parentNode'] =& $NULL;
$childPos = $childNode['pos'];
$parentNode['childNodes'][$childPos] =& $this->cloneNode($node);
}
if ($mustReindex) $this->reindexNodeTree();
$status = TRUE;
} while(FALSE);
if (!$status) return FALSE;
return $childNode;
}
/**
* Insert passed node (or passed node-tree) at the node(s) that matches the xQuery.
*
* With parameters you can define if the 'hit'-node is shifted to the right or left
* and if it's placed before of after the text-part.
* Per derfault the 'hit'-node is shifted to the right and the node takes the place
* the of the 'hit'-node.
* NOTE: When passing a xpath-query instead of an abs. Xpath.
* Depending on setModMatch() one, none or multiple nodes are affected.
*
* E.g. Following is given: AAA[1]
* / \
* ..BBB[1]..BBB[2] ..
*
* a) insertChild('/AAA[1]/BBB[2]', <node CCC>)
* b) insertChild('/AAA[1]/BBB[2]', <node CCC>, $shiftRight=FALSE)
* c) insertChild('/AAA[1]/BBB[2]', <node CCC>, $shiftRight=FALSE, $afterText=FALSE)
*
* a) b) c)
* AAA[1] AAA[1] AAA[1]
* / | \ / | \ / | \
* ..BBB[1]..CCC[1]BBB[2].. ..BBB[1]..BBB[2]..CCC[1] ..BBB[1]..BBB[2]CCC[1]..
*
* #### Do a complete review of the "(optional)" tag after several arguments.
*
* @param $xPathQuery (string) Xpath to the node to append.
* @param $node (mixed) String or Array (Usually a String)
* If string: Vaild XML. E.g. "<A/>" or "<A> foo <B/> bar <A/>"
* If array: A Node (can be a whole sub-tree) (See comment in header)
* @param $shiftRight (bool) (optional, default=TRUE) Shift the target node to the right.
* @param $afterText (bool) (optional, default=TRUE) Insert after the text.
* @param $autoReindex (bool) (optional, default=TRUE) Reindex the document to reflect
* the changes. A performance helper. See reindexNodeTree()
* @return (mixed) FALSE on error (or no match). On success we return the path(s) to the newly
* appended nodes. That is: Array of paths if more then 1 node was added or
* a single path string if only one node was added.
* NOTE: If autoReindex is FALSE, then we can't return the *complete* path
* as the exact doc-pos isn't available without reindexing. In that case we leave
* out the last [docpos] in the path(s). ie we'd return /A[3]/B instead of /A[3]/B[2]
* @see appendChildByXml(), reindexNodeTree()
*/
function insertChild($xPathQuery, $node, $shiftRight=TRUE, $afterText=TRUE, $autoReindex=TRUE) {
if (is_string($node)) {
if (empty($node)) { //--sam. Not sure how to react on an empty string - think it's an error.
return FALSE;
} else {
if (!($node = $this->_xml2Document($node))) return FALSE;
}
}
 
// Special case if it's 'super root'. We then have to take the child node == top node
if (empty($node['parentNode'])) $node = $node['childNodes'][0];
// Check for a valid xPathQuery
$xPathSet = $this->_resolveXPathQuery($xPathQuery,'insertChild');
if (sizeOf($xPathSet) === 0) {
$this->_displayError(sprintf($this->errorStrings['NoNodeMatch'], $xPathQuery), __LINE__, __FILE__, FALSE);
return FALSE;
}
$mustReindex = FALSE;
$newNodes = array();
$result = array();
// Make chages from 'bottom-up'. In this manner the modifications will not affect itself.
for ($i=sizeOf($xPathSet)-1; $i>=0; $i--) {
$absoluteXPath = $xPathSet[$i];
$childNode =& $this->nodeIndex[$absoluteXPath];
$parentNode =& $childNode['parentNode'];
 
// We can't insert at the super root or at the root.
if (empty($absoluteXPath) || (!$parentNode['parentNode'])) {
$this->_displayError(sprintf($this->errorStrings['RootNodeAlreadyExists']), __LINE__, __FILE__, FALSE);
return FALSE;
}
 
$mustReindex = $autoReindex;
// Flag the index as dirty; it's not uptodate. A reindex will be forced (if dirty) when exporting the XML doc
$this->_indexIsDirty = TRUE;
//Special case: It not possible to add siblings to the top node.
if (empty($parentNode['name'])) continue;
$newNode =& $this->cloneNode($node);
$pos = $shiftRight ? $childNode['pos'] : $childNode['pos']+1;
$parentNode['childNodes'] = array_merge(
array_slice($parentNode['childNodes'], 0, $pos),
array(&$newNode),
array_slice($parentNode['childNodes'], $pos)
);
$pos += $afterText ? 1 : 0;
$parentNode['textParts'] = array_merge(
array_slice($parentNode['textParts'], 0, $pos),
array(''),
array_slice($parentNode['textParts'], $pos)
);
// We are going from bottom to top, but the user will want results from top to bottom.
if ($mustReindex) {
// We'll have to wait till after the reindex to get the full path to this new node.
$newNodes[] = &$newNode;
} else {
// If we are reindexing the tree later, then we can't return the user any
// useful results, so we just return them the count.
$newNodePath = $parentNode['xpath'].'/'.$newNode['name'];
array_unshift($result, $newNodePath);
}
}
if ($mustReindex) {
$this->reindexNodeTree();
// Now we must fill in the result array. Because until now we did not
// know what contextpos our newly added entries had, just their pos within
// the siblings.
foreach ($newNodes as $newNode) {
array_unshift($result, $newNode['xpath']);
}
}
if (count($result) == 1) $result = $result[0];
return $result;
}
/**
* Appends a child to anothers children.
*
* If you intend to do a lot of appending, you should leave autoIndex as FALSE
* and then call reindexNodeTree() when you are finished all the appending.
*
* @param $xPathQuery (string) Xpath to the node to append to.
* @param $node (mixed) String or Array (Usually a String)
* If string: Vaild XML. E.g. "<A/>" or "<A> foo <B/> bar <A/>"
* If array: A Node (can be a whole sub-tree) (See comment in header)
* @param $afterText (bool) (optional, default=FALSE) Insert after the text.
* @param $autoReindex (bool) (optional, default=TRUE) Reindex the document to reflect
* the changes. A performance helper. See reindexNodeTree()
* @return (mixed) FALSE on error (or no match). On success we return the path(s) to the newly
* appended nodes. That is: Array of paths if more then 1 node was added or
* a single path string if only one node was added.
* NOTE: If autoReindex is FALSE, then we can't return the *complete* path
* as the exact doc-pos isn't available without reindexing. In that case we leave
* out the last [docpos] in the path(s). ie we'd return /A[3]/B instead of /A[3]/B[2]
* @see insertChild(), reindexNodeTree()
*/
function appendChild($xPathQuery, $node, $afterText=FALSE, $autoReindex=TRUE) {
if (is_string($node)) {
if (empty($node)) { //--sam. Not sure how to react on an empty string - think it's an error.
return FALSE;
} else {
if (!($node = $this->_xml2Document($node))) return FALSE;
}
}
// Special case if it's 'super root'. We then have to take the child node == top node
if (empty($node['parentNode'])) $node = $node['childNodes'][0];
 
// Check for a valid xPathQuery
$xPathSet = $this->_resolveXPathQueryForNodeMod($xPathQuery, 'appendChild');
if (sizeOf($xPathSet) === 0) return FALSE;
 
$mustReindex = FALSE;
$newNodes = array();
$result = array();
// Make chages from 'bottom-up'. In this manner the modifications will not affect itself.
for ($i=sizeOf($xPathSet)-1; $i>=0; $i--) {
$mustReindex = $autoReindex;
// Flag the index as dirty; it's not uptodate. A reindex will be forced (if dirty) when exporting the XML doc
$this->_indexIsDirty = TRUE;
$absoluteXPath = $xPathSet[$i];
$parentNode =& $this->nodeIndex[$absoluteXPath];
$newNode =& $this->cloneNode($node);
$parentNode['childNodes'][] =& $newNode;
$pos = count($parentNode['textParts']);
$pos -= $afterText ? 0 : 1;
$parentNode['textParts'] = array_merge(
array_slice($parentNode['textParts'], 0, $pos),
array(''),
array_slice($parentNode['textParts'], $pos)
);
// We are going from bottom to top, but the user will want results from top to bottom.
if ($mustReindex) {
// We'll have to wait till after the reindex to get the full path to this new node.
$newNodes[] = &$newNode;
} else {
// If we are reindexing the tree later, then we can't return the user any
// useful results, so we just return them the count.
array_unshift($result, "$absoluteXPath/{$newNode['name']}");
}
}
if ($mustReindex) {
$this->reindexNodeTree();
// Now we must fill in the result array. Because until now we did not
// know what contextpos our newly added entries had, just their pos within
// the siblings.
foreach ($newNodes as $newNode) {
array_unshift($result, $newNode['xpath']);
}
}
if (count($result) == 1) $result = $result[0];
return $result;
}
/**
* Inserts a node before the reference node with the same parent.
*
* If you intend to do a lot of appending, you should leave autoIndex as FALSE
* and then call reindexNodeTree() when you are finished all the appending.
*
* @param $xPathQuery (string) Xpath to the node to insert new node before
* @param $node (mixed) String or Array (Usually a String)
* If string: Vaild XML. E.g. "<A/>" or "<A> foo <B/> bar <A/>"
* If array: A Node (can be a whole sub-tree) (See comment in header)
* @param $afterText (bool) (optional, default=FLASE) Insert after the text.
* @param $autoReindex (bool) (optional, default=TRUE) Reindex the document to reflect
* the changes. A performance helper. See reindexNodeTree()
* @return (mixed) FALSE on error (or no match). On success we return the path(s) to the newly
* appended nodes. That is: Array of paths if more then 1 node was added or
* a single path string if only one node was added.
* NOTE: If autoReindex is FALSE, then we can't return the *complete* path
* as the exact doc-pos isn't available without reindexing. In that case we leave
* out the last [docpos] in the path(s). ie we'd return /A[3]/B instead of /A[3]/B[2]
* @see reindexNodeTree()
*/
function insertBefore($xPathQuery, $node, $afterText=TRUE, $autoReindex=TRUE) {
return $this->insertChild($xPathQuery, $node, $shiftRight=TRUE, $afterText, $autoReindex);
}
 
//-----------------------------------------------------------------------------------------
// XPath ------ Attribute Set/Get ------
//-----------------------------------------------------------------------------------------
/**
* Retrieves a dedecated attribute value or a hash-array of all attributes of a node.
*
* The first param $absoluteXPath must be a valid xpath OR a xpath-query that results
* to *one* xpath. If the second param $attrName is not set, a hash-array of all attributes
* of that node is returned.
*
* Optionally you may pass an attrubute name in $attrName and the function will return the
* string value of that attribute.
*
* @param $absoluteXPath (string) Full xpath OR a xpath-query that results to *one* xpath.
* @param $attrName (string) (Optional) The name of the attribute. See above.
* @return (mixed) hash-array or a string of attributes depending if the
* parameter $attrName was set (see above). FALSE if the
* node or attribute couldn't be found.
* @see setAttribute(), removeAttribute()
*/
function getAttributes($absoluteXPath, $attrName=NULL) {
// Numpty check
if (!isSet($this->nodeIndex[$absoluteXPath])) {
$xPathSet = $this->_resolveXPathQuery($absoluteXPath,'getAttributes');
if (empty($xPathSet)) return FALSE;
// only use the first entry
$absoluteXPath = $xPathSet[0];
}
if (!empty($this->parseOptions[XML_OPTION_CASE_FOLDING])) {
// Case in-sensitive
$attrName = strtoupper($attrName);
}
// Return the complete list or just the desired element
if (is_null($attrName)) {
return $this->nodeIndex[$absoluteXPath]['attributes'];
} elseif (isSet($this->nodeIndex[$absoluteXPath]['attributes'][$attrName])) {
return $this->nodeIndex[$absoluteXPath]['attributes'][$attrName];
}
return FALSE;
}
/**
* Set attributes of a node(s).
*
* This method sets a number single attributes. An existing attribute is overwritten (default)
* with the new value, but setting the last param to FALSE will prevent overwritten.
* NOTE: When passing a xpath-query instead of an abs. Xpath.
* Depending on setModMatch() one, none or multiple nodes are affected.
*
* @param $xPathQuery (string) xpath to the node (See note above).
* @param $name (string) Attribute name.
* @param $value (string) Attribute value.
* @param $overwrite (bool) If the attribute is already set we overwrite it (see text above)
* @return (bool) TRUE on success, FALSE on failure.
* @see getAttributes(), removeAttribute()
*/
function setAttribute($xPathQuery, $name, $value, $overwrite=TRUE) {
return $this->setAttributes($xPathQuery, array($name => $value), $overwrite);
}
/**
* Version of setAttribute() that sets multiple attributes to node(s).
*
* This method sets a number of attributes. Existing attributes are overwritten (default)
* with the new values, but setting the last param to FALSE will prevent overwritten.
* NOTE: When passing a xpath-query instead of an abs. Xpath.
* Depending on setModMatch() one, none or multiple nodes are affected.
*
* @param $xPathQuery (string) xpath to the node (See note above).
* @param $attributes (array) associative array of attributes to set.
* @param $overwrite (bool) If the attributes are already set we overwrite them (see text above)
* @return (bool) TRUE on success, FALSE otherwise
* @see setAttribute(), getAttributes(), removeAttribute()
*/
function setAttributes($xPathQuery, $attributes, $overwrite=TRUE) {
$status = FALSE;
do { // try-block
// The attributes parameter should be an associative array.
if (!is_array($attributes)) break; // try-block
// Check for a valid xPathQuery
$xPathSet = $this->_resolveXPathQuery($xPathQuery,'setAttributes');
foreach($xPathSet as $absoluteXPath) {
// Add the attributes to the node.
$theNode =& $this->nodeIndex[$absoluteXPath];
if (empty($theNode['attributes'])) {
$this->nodeIndex[$absoluteXPath]['attributes'] = $attributes;
} else {
$theNode['attributes'] = $overwrite ? array_merge($theNode['attributes'],$attributes) : array_merge($attributes, $theNode['attributes']);
}
}
$status = TRUE;
} while(FALSE); // END try-block
return $status;
}
/**
* Removes an attribute of a node(s).
*
* This method removes *ALL* attributres per default unless the second parameter $attrList is set.
* $attrList can be either a single attr-name as string OR a vector of attr-names as array.
* E.g.
* removeAttribute(<xPath>); # will remove *ALL* attributes.
* removeAttribute(<xPath>, 'A'); # will only remove attributes called 'A'.
* removeAttribute(<xPath>, array('A_1','A_2')); # will remove attribute 'A_1' and 'A_2'.
* NOTE: When passing a xpath-query instead of an abs. Xpath.
* Depending on setModMatch() one, none or multiple nodes are affected.
*
* @param $xPathQuery (string) xpath to the node (See note above).
* @param $attrList (mixed) (optional) if not set will delete *all* (see text above)
* @return (bool) TRUE on success, FALSE if the node couldn't be found
* @see getAttributes(), setAttribute()
*/
function removeAttribute($xPathQuery, $attrList=NULL) {
// Check for a valid xPathQuery
$xPathSet = $this->_resolveXPathQuery($xPathQuery, 'removeAttribute');
if (!empty($attrList) AND is_string($attrList)) $attrList = array($attrList);
if (!is_array($attrList)) return FALSE;
foreach($xPathSet as $absoluteXPath) {
// If the attribute parameter wasn't set then remove all the attributes
if ($attrList[0] === NULL) {
$this->nodeIndex[$absoluteXPath]['attributes'] = array();
continue;
}
// Remove all the elements in the array then.
foreach($attrList as $name) {
unset($this->nodeIndex[$absoluteXPath]['attributes'][$name]);
}
}
return TRUE;
}
//-----------------------------------------------------------------------------------------
// XPath ------ Text Set/Get ------
//-----------------------------------------------------------------------------------------
/**
* Retrieve all the text from a node as a single string.
*
* Sample
* Given is: <AA> This <BB\>is <BB\> some<BB\>text </AA>
* Return of getData('/AA[1]') would be: " This is sometext "
* The first param $xPathQuery must be a valid xpath OR a xpath-query that
* results to *one* xpath.
*
* @param $xPathQuery (string) xpath to the node - resolves to *one* xpath.
* @return (mixed) The returned string (see above), FALSE if the node
* couldn't be found or is not unique.
* @see getDataParts()
*/
function getData($xPathQuery) {
$aDataParts = $this->getDataParts($xPathQuery);
if ($aDataParts === FALSE) return FALSE;
return implode('', $aDataParts);
}
/**
* Retrieve all the text from a node as a vector of strings
*
* Where each element of the array was interrupted by a non-text child element.
*
* Sample
* Given is: <AA> This <BB\>is <BB\> some<BB\>text </AA>
* Return of getDataParts('/AA[1]') would be: array([0]=>' This ', [1]=>'is ', [2]=>' some', [3]=>'text ');
* The first param $absoluteXPath must be a valid xpath OR a xpath-query that results
* to *one* xpath.
*
* @param $xPathQuery (string) xpath to the node - resolves to *one* xpath.
* @return (mixed) The returned array (see above), or FALSE if node is not
* found or is not unique.
* @see getData()
*/
function getDataParts($xPathQuery) {
// Resolve xPath argument
$xPathSet = $this->_resolveXPathQuery($xPathQuery, 'getDataParts');
if (1 !== ($setSize=count($xPathSet))) {
$this->_displayError(sprintf($this->errorStrings['AbsoluteXPathRequired'], $xPathQuery) . "Not unique xpath-query, matched {$setSize}-times.", __LINE__, __FILE__, FALSE);
return FALSE;
}
$absoluteXPath = $xPathSet[0];
// Is it an attribute node?
if (preg_match(";(.*)/attribute::([^/]*)$;U", $xPathSet[0], $matches)) {
$absoluteXPath = $matches[1];
$attribute = $matches[2];
if (!isSet($this->nodeIndex[$absoluteXPath]['attributes'][$attribute])) {
$this->_displayError("The $absoluteXPath/attribute::$attribute value isn't a node in this document.", __LINE__, __FILE__, FALSE);
continue;
}
return array($this->nodeIndex[$absoluteXPath]['attributes'][$attribute]);
} else if (preg_match(":(.*)/text\(\)(\[(.*)\])?$:U", $xPathQuery, $matches)) {
$absoluteXPath = $matches[1];
$textPartNr = $matches[2];
return array($this->nodeIndex[$absoluteXPath]['textParts'][$textPartNr]);
} else {
return $this->nodeIndex[$absoluteXPath]['textParts'];
}
}
/**
* Retrieves a sub string of a text-part OR attribute-value.
*
* This method retrieves the sub string of a specific text-part OR (if the
* $absoluteXPath references an attribute) the the sub string of the attribute value.
* If no 'direct referencing' is used (Xpath ends with text()[<part-number>]), then
* the first text-part of the node ist returned (if exsiting).
*
* @param $absoluteXPath (string) Xpath to the node (See note above).
* @param $offset (int) (optional, default is 0) Starting offset. (Just like PHP's substr())
* @param $count (number) (optional, default is ALL) Character count (Just like PHP's substr())
* @return (mixed) The sub string, FALSE if not found or on error
* @see XPathEngine::wholeText(), PHP's substr()
*/
function substringData($absoluteXPath, $offset = 0, $count = NULL) {
if (!($text = $this->wholeText($absoluteXPath))) return FALSE;
if (is_null($count)) {
return substr($text, $offset);
} else {
return substr($text, $offset, $count);
}
}
/**
* Replace a sub string of a text-part OR attribute-value.
*
* NOTE: When passing a xpath-query instead of an abs. Xpath.
* Depending on setModMatch() one, none or multiple nodes are affected.
*
* @param $xPathQuery (string) xpath to the node (See note above).
* @param $replacement (string) The string to replace with.
* @param $offset (int) (optional, default is 0) Starting offset. (Just like PHP's substr_replace ())
* @param $count (number) (optional, default is 0=ALL) Character count (Just like PHP's substr_replace())
* @param $textPartNr (int) (optional) (see _getTextSet() )
* @return (bool) The new string value on success, FALSE if not found or on error
* @see substringData()
*/
function replaceData($xPathQuery, $replacement, $offset = 0, $count = 0, $textPartNr=1) {
if (!($textSet = $this->_getTextSet($xPathQuery, $textPartNr))) return FALSE;
$tSize=sizeOf($textSet);
for ($i=0; $i<$tSize; $i++) {
if ($count) {
$textSet[$i] = substr_replace($textSet[$i], $replacement, $offset, $count);
} else {
$textSet[$i] = substr_replace($textSet[$i], $replacement, $offset);
}
}
return TRUE;
}
/**
* Insert a sub string in a text-part OR attribute-value.
*
* NOTE: When passing a xpath-query instead of an abs. Xpath.
* Depending on setModMatch() one, none or multiple nodes are affected.
*
* @param $xPathQuery (string) xpath to the node (See note above).
* @param $data (string) The string to replace with.
* @param $offset (int) (optional, default is 0) Offset at which to insert the data.
* @return (bool) The new string on success, FALSE if not found or on error
* @see replaceData()
*/
function insertData($xPathQuery, $data, $offset=0) {
return $this->replaceData($xPathQuery, $data, $offset, 0);
}
/**
* Append text data to the end of the text for an attribute OR node text-part.
*
* This method adds content to a node. If it's an attribute node, then
* the value of the attribute will be set, otherwise the passed data will append to
* character data of the node text-part. Per default the first text-part is taken.
*
* NOTE: When passing a xpath-query instead of an abs. Xpath.
* Depending on setModMatch() one, none or multiple nodes are affected.
*
* @param $xPathQuery (string) to the node(s) (See note above).
* @param $data (string) String containing the content to be added.
* @param $textPartNr (int) (optional, default is 1) (see _getTextSet())
* @return (bool) TRUE on success, otherwise FALSE
* @see _getTextSet()
*/
function appendData($xPathQuery, $data, $textPartNr=1) {
if (!($textSet = $this->_getTextSet($xPathQuery, $textPartNr))) return FALSE;
$tSize=sizeOf($textSet);
for ($i=0; $i<$tSize; $i++) {
$textSet[$i] .= $data;
}
return TRUE;
}
/**
* Delete the data of a node.
*
* This method deletes content of a node. If it's an attribute node, then
* the value of the attribute will be removed, otherwise the node text-part.
* will be deleted. Per default the first text-part is deleted.
*
* NOTE: When passing a xpath-query instead of an abs. Xpath.
* Depending on setModMatch() one, none or multiple nodes are affected.
*
* @param $xPathQuery (string) to the node(s) (See note above).
* @param $offset (int) (optional, default is 0) Starting offset. (Just like PHP's substr_replace())
* @param $count (number) (optional, default is 0=ALL) Character count. (Just like PHP's substr_replace())
* @param $textPartNr (int) (optional, default is 0) the text part to delete (see _getTextSet())
* @return (bool) TRUE on success, otherwise FALSE
* @see _getTextSet()
*/
function deleteData($xPathQuery, $offset=0, $count=0, $textPartNr=1) {
if (!($textSet = $this->_getTextSet($xPathQuery, $textPartNr))) return FALSE;
$tSize=sizeOf($textSet);
for ($i=0; $i<$tSize; $i++) {
if (!$count)
$textSet[$i] = "";
else
$textSet[$i] = substr_replace($textSet[$i],'', $offset, $count);
}
return TRUE;
}
//-----------------------------------------------------------------------------------------
// XPath ------ Help Stuff ------
//-----------------------------------------------------------------------------------------
/**
* Parse the XML to a node-tree. A so called 'document'
*
* @param $xmlString (string) The string to turn into a document node.
* @return (&array) a node-tree
*/
function &_xml2Document($xmlString) {
$xmlOptions = array(
XML_OPTION_CASE_FOLDING => $this->getProperties('caseFolding'),
XML_OPTION_SKIP_WHITE => $this->getProperties('skipWhiteSpaces')
);
$xmlParser = new XPathEngine($xmlOptions);
$xmlParser->setVerbose($this->properties['verboseLevel']);
// Parse the XML string
if (!$xmlParser->importFromString($xmlString)) {
$this->_displayError($xmlParser->getLastError(), __LINE__, __FILE__, FALSE);
return FALSE;
}
return $xmlParser->getNode('/');
}
/**
* Get a reference-list to node text part(s) or node attribute(s).
*
* If the Xquery references an attribute(s) (Xquery ends with attribute::),
* then the text value of the node-attribute(s) is/are returned.
* Otherwise the Xquery is referencing to text part(s) of node(s). This can be either a
* direct reference to text part(s) (Xquery ends with text()[<nr>]) or indirect reference
* (a simple Xquery to node(s)).
* 1) Direct Reference (Xquery ends with text()[<part-number>]):
* If the 'part-number' is omitted, the first text-part is assumed; starting by 1.
* Negative numbers are allowed, where -1 is the last text-part a.s.o.
* 2) Indirect Reference (a simple Xquery to node(s)):
* Default is to return the first text part(s). Optionally you may pass a parameter
* $textPartNr to define the text-part you want; starting by 1.
* Negative numbers are allowed, where -1 is the last text-part a.s.o.
*
* NOTE I : The returned vector is a set of references to the text parts / attributes.
* This is handy, if you wish to modify the contents.
* NOTE II: text-part numbers out of range will not be in the list
* NOTE III:Instead of an absolute xpath you may also pass a xpath-query.
* Depending on setModMatch() one, none or multiple nodes are affected.
*
* @param $xPathQuery (string) xpath to the node (See note above).
* @param $textPartNr (int) String containing the content to be set.
* @return (mixed) A vector of *references* to the text that match, or
* FALSE on error
* @see XPathEngine::wholeText()
*/
function _getTextSet($xPathQuery, $textPartNr=1) {
$ThisFunctionName = '_getTextSet';
$bDebugThisFunction = in_array($ThisFunctionName, $this->aDebugFunctions);
$this->_beginDebugFunction($ThisFunctionName, $bDebugThisFunction);
if ($bDebugThisFunction) {
echo "Node: $xPathQuery\n";
echo "Text Part Number: $textPartNr\n";
echo "<hr>";
}
$status = FALSE;
$funcName = '_getTextSet';
$textSet = array();
do { // try-block
// Check if it's a Xpath reference to an attribut(s). Xpath ends with attribute::)
if (preg_match(";(.*)/(attribute::|@)([^/]*)$;U", $xPathQuery, $matches)) {
$xPathQuery = $matches[1];
$attribute = $matches[3];
// Quick out
if (isSet($this->nodeIndex[$xPathQuery])) {
$xPathSet[] = $xPathQuery;
} else {
// Try to evaluate the absoluteXPath (since it seems to be an Xquery and not an abs. Xpath)
$xPathSet = $this->_resolveXPathQuery("$xPathQuery/attribute::$attribute", $funcName);
}
foreach($xPathSet as $absoluteXPath) {
preg_match(";(.*)/attribute::([^/]*)$;U", $xPathSet[0], $matches);
$absoluteXPath = $matches[1];
$attribute = $matches[2];
if (!isSet($this->nodeIndex[$absoluteXPath]['attributes'][$attribute])) {
$this->_displayError("The $absoluteXPath/attribute::$attribute value isn't a node in this document.", __LINE__, __FILE__, FALSE);
continue;
}
$textSet[] =& $this->nodes[$absoluteXPath]['attributes'][$attribute];
}
$status = TRUE;
break; // try-block
}
// Check if it's a Xpath reference direct to a text-part(s). (xpath ends with text()[<part-number>])
if (preg_match(":(.*)/text\(\)(\[(.*)\])?$:U", $xPathQuery, $matches)) {
$xPathQuery = $matches[1];
// default to the first text node if a text node was not specified
$textPartNr = isSet($matches[2]) ? substr($matches[2],1,-1) : 1;
// Quick check
if (isSet($this->nodeIndex[$xPathQuery])) {
$xPathSet[] = $xPathQuery;
} else {
// Try to evaluate the absoluteXPath (since it seams to be an Xquery and not an abs. Xpath)
$xPathSet = $this->_resolveXPathQuery("$xPathQuery/text()[$textPartNr]", $funcName);
}
}
else {
// At this point we have been given an xpath with neither a 'text()' or 'attribute::' axis at the end
// So this means to get the text-part of the node. If parameter $textPartNr was not set, use the last
// text-part.
if (isSet($this->nodeIndex[$xPathQuery])) {
$xPathSet[] = $xPathQuery;
} else {
// Try to evaluate the absoluteXPath (since it seams to be an Xquery and not an abs. Xpath)
$xPathSet = $this->_resolveXPathQuery($xPathQuery, $funcName);
}
}
 
if ($bDebugThisFunction) {
echo "Looking up paths for:\n";
print_r($xPathSet);
}
 
// Now fetch all text-parts that match. (May be 0,1 or many)
foreach($xPathSet as $absoluteXPath) {
unset($text);
if ($text =& $this->wholeText($absoluteXPath, $textPartNr)) {
$textSet[] =& $text;
} else {
// The node does not yet have any text, so we have to add a '' string so that
// if we insert or replace to it, then we'll actually have something to op on.
$this->nodeIndex[$absoluteXPath]['textParts'][$textPartNr-1] = '';
$textSet[] =& $this->nodeIndex[$absoluteXPath]['textParts'][$textPartNr-1];
}
}
 
$status = TRUE;
} while (FALSE); // END try-block
if (!$status) $result = FALSE;
else $result = $textSet;
 
$this->_closeDebugFunction($ThisFunctionName, $result, $bDebugThisFunction);
 
return $result;
}
 
/**
* Resolves an xPathQuery vector for a node op for modification
*
* It is possible to create a brand new object, and try to append and insert nodes
* into it, so this is a version of _resolveXPathQuery() that will autocreate the
* super root if it detects that it is not present and the $xPathQuery is empty.
*
* Also it demands that there be at least one node returned, and displays a suitable
* error message if the returned xPathSet does not contain any nodes.
*
* @param $xPathQuery (string) An xpath query targeting a single node. If empty()
* returns the root node and auto creates the root node
* if it doesn't exist.
* @param $function (string) The function in which this check was called
* @return (array) Vector of $absoluteXPath's (May be empty)
* @see _resolveXPathQuery()
*/
function _resolveXPathQueryForNodeMod($xPathQuery, $functionName) {
$xPathSet = array();
if (empty($xPathQuery)) {
// You can append even if the root node doesn't exist.
if (!isset($this->nodeIndex[$xPathQuery])) $this->_createSuperRoot();
$xPathSet[] = '';
// However, you can only append to the super root, if there isn't already a root entry.
$rootNodes = $this->_resolveXPathQuery('/*','appendChild');
if (count($rootNodes) !== 0) {
$this->_displayError(sprintf($this->errorStrings['RootNodeAlreadyExists']), __LINE__, __FILE__, FALSE);
return array();
}
} else {
$xPathSet = $this->_resolveXPathQuery($xPathQuery,'appendChild');
if (sizeOf($xPathSet) === 0) {
$this->_displayError(sprintf($this->errorStrings['NoNodeMatch'], $xPathQuery), __LINE__, __FILE__, FALSE);
return array();
}
}
return $xPathSet;
}
 
/**
* Resolves an xPathQuery vector depending on the property['modMatch']
*
* To:
* - all matches,
* - the first
* - none (If the query matches more then one node.)
* see setModMatch() for details
*
* @param $xPathQuery (string) An xpath query targeting a single node. If empty()
* returns the root node (if it exists).
* @param $function (string) The function in which this check was called
* @return (array) Vector of $absoluteXPath's (May be empty)
* @see setModMatch()
*/
function _resolveXPathQuery($xPathQuery, $function) {
$xPathSet = array();
do { // try-block
if (isSet($this->nodeIndex[$xPathQuery])) {
$xPathSet[] = $xPathQuery;
break; // try-block
}
if (empty($xPathQuery)) break; // try-block
if (substr($xPathQuery, -1) === '/') break; // If the xPathQuery ends with '/' then it cannot be a good query.
// If this xPathQuery is not absolute then attempt to evaluate it
$xPathSet = $this->match($xPathQuery);
$resultSize = sizeOf($xPathSet);
switch($this->properties['modMatch']) {
case XPATH_QUERYHIT_UNIQUE :
if ($resultSize >1) {
$xPathSet = array();
if ($this->properties['verboseLevel']) $this->_displayError("Canceled function '{$function}'. The query '{$xPathQuery}' mached {$resultSize} nodes and 'modMatch' is set to XPATH_QUERYHIT_UNIQUE.", __LINE__, __FILE__, FALSE);
}
break;
case XPATH_QUERYHIT_FIRST :
if ($resultSize >1) {
$xPathSet = array($xPathSet[0]);
if ($this->properties['verboseLevel']) $this->_displayError("Only modified first node in function '{$function}' because the query '{$xPathQuery}' mached {$resultSize} nodes and 'modMatch' is set to XPATH_QUERYHIT_FIRST.", __LINE__, __FILE__, FALSE);
}
break;
default: ; // DO NOTHING
}
} while (FALSE);
if ($this->properties['verboseLevel'] >= 2) $this->_displayMessage("'{$xPathQuery}' parameter from '{$function}' returned the following nodes: ".(count($xPathSet)?implode('<br>', $xPathSet):'[none]'), __LINE__, __FILE__);
return $xPathSet;
}
} // END OF CLASS XPath
 
// -----------------------------------------------------------------------------------------
// -----------------------------------------------------------------------------------------
// -----------------------------------------------------------------------------------------
// -----------------------------------------------------------------------------------------
 
/**************************************************************************************************
// Usage Sample:
// -------------
// Following code will give you an idea how to work with PHP.XPath. It's a working sample
// to help you get started. :o)
// Take the comment tags away and run this file.
**************************************************************************************************/
 
/**
* Produces a short title line.
*/
function _title($title) {
echo "<br><hr><b>" . htmlspecialchars($title) . "</b><hr>\n";
}
 
$self = isSet($_SERVER) ? $_SERVER['PHP_SELF'] : $PHP_SELF;
if (basename($self) == 'XPath.class.php') {
// The sampe source:
$q = '?';
$xmlSource = <<< EOD
<{$q}Process_Instruction test="&copy;&nbsp;All right reserved" {$q}>
<AAA foo="bar"> ,,1,,
..1.. <![CDATA[ bla bla
newLine blo blo ]]>
<BBB foo="bar">
..2..
</BBB>..3..<CC/> ..4..</AAA>
EOD;
// The sample code:
$xmlOptions = array(XML_OPTION_CASE_FOLDING => TRUE, XML_OPTION_SKIP_WHITE => TRUE);
$xPath = new XPath(FALSE, $xmlOptions);
//$xPath->bDebugXmlParse = TRUE;
if (!$xPath->importFromString($xmlSource)) { echo $xPath->getLastError(); exit; }
_title("Following was imported:");
echo $xPath->exportAsHtml();
_title("Get some content");
echo "Last text part in &lt;AAA&gt;: '" . $xPath->wholeText('/AAA[1]', -1) ."'<br>\n";
echo "All the text in &lt;AAA&gt;: '" . $xPath->wholeText('/AAA[1]') ."'<br>\n";
echo "The attibute value in &lt;BBB&gt; using getAttributes('/AAA[1]/BBB[1]', 'FOO'): '" . $xPath->getAttributes('/AAA[1]', 'FOO') ."'<br>\n";
echo "The attibute value in &lt;BBB&gt; using getData('/AAA[1]/@FOO'): '" . $xPath->getData('/AAA[1]/@FOO') ."'<br>\n";
_title("Append some additional XML below /AAA/BBB:");
$xPath->appendChild('/AAA[1]/BBB[1]', '<CCC> Step 1. Append new node </CCC>', $afterText=FALSE);
$xPath->appendChild('/AAA[1]/BBB[1]', '<CCC> Step 2. Append new node </CCC>', $afterText=TRUE);
$xPath->appendChild('/AAA[1]/BBB[1]', '<CCC> Step 3. Append new node </CCC>', $afterText=TRUE);
echo $xPath->exportAsHtml();
_title("Insert some additional XML below <AAA>:");
$xPath->reindexNodeTree();
$xPath->insertChild('/AAA[1]/BBB[1]', '<BB> Step 1. Insert new node </BB>', $shiftRight=TRUE, $afterText=TRUE);
$xPath->insertChild('/AAA[1]/BBB[1]', '<BB> Step 2. Insert new node </BB>', $shiftRight=FALSE, $afterText=TRUE);
$xPath->insertChild('/AAA[1]/BBB[1]', '<BB> Step 3. Insert new node </BB>', $shiftRight=FALSE, $afterText=FALSE);
echo $xPath->exportAsHtml();
 
_title("Replace the last <BB> node with new XML data '&lt;DDD&gt; Replaced last BB &lt;/DDD&gt;':");
$xPath->reindexNodeTree();
$xPath->replaceChild('/AAA[1]/BB[last()]', '<DDD> Replaced last BB </DDD>', $afterText=FALSE);
echo $xPath->exportAsHtml();
_title("Replace second <BB> node with normal text");
$xPath->reindexNodeTree();
$xPath->replaceChildByData('/AAA[1]/BB[2]', '"Some new text"');
echo $xPath->exportAsHtml();
}
 
?>
/web/acc/phpsysinfo/templates/alcasar/form.tpl
0,0 → 1,56
{errors}
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr bgcolor="#666666"><th height="20">{title}</th><tr>
<tr bgcolor="#FFCC66"><td><img src="/images/pix.gif" width="1" height="2"></td></tr>
</table>
<table width="100%" border="1" cellspacing="0" cellpadding="1">
<tr><td>
<table width="100%" align="center">
<tr>
<td width="50%" valign="top">
{portail}
</td>
<td width="50%" valign="top">
{vitals}
</td>
</tr>
 
<tr>
<td colspan="2">
{memory}
</td>
</tr>
 
<tr>
<td colspan="2">
{filesystems}
</td>
</tr>
 
<tr>
<td width="50%" valign="top">
{hardware}
</td>
<td width="50%" valign="top">
{network}
</td>
</tr>
</table>
 
<table width="100%">
<tr>
<td width="55%" valign="top">
{mbtemp}
<br>
{mbfans}
</td>
 
<td width="45%" valign="top">
{mbvoltage}
</td>
</tr>
</table>
</td>
</tr>
</table>
 
/web/acc/phpsysinfo/templates/alcasar/images/redbar_right.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/web/acc/phpsysinfo/templates/alcasar/images/redbar_middle.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/web/acc/phpsysinfo/templates/alcasar/images/bar_left.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/web/acc/phpsysinfo/templates/alcasar/images/bar_right.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/templates/alcasar/images/bar_middle.gif
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/web/acc/phpsysinfo/templates/alcasar/images/index.html
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/templates/alcasar/images/trans.gif
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/web/acc/phpsysinfo/templates/alcasar/images/redbar_left.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/web/acc/phpsysinfo/templates/alcasar/box.tpl
0,0 → 1,19
<table width="100%">
<tr>
<td>
 
<table border="1" class="box">
 
<tr class="boxheader">
<td class="boxheader">{title}</td>
</tr>
 
<tr class="boxbody">
<td dir="{text_dir}">{content}</td>
</tr>
 
</table>
 
</td>
</tr>
</table>
/web/acc/phpsysinfo/templates/alcasar/index.html
--- templates/alcasar/alcasar.css (nonexistent)
+++ templates/alcasar/alcasar.css (revision 325)
@@ -0,0 +1,77 @@
+A {
+ color: #000000;
+ text-decoration: none;
+}
+A:link {
+ color: #486591;
+ background-color: transparent;
+}
+A:visited {
+ color: #6f6c81;
+ background-color: transparent;
+}
+A:active {
+
+ background-color: transparent;
+}
+body {
+ color: #000000;
+ background-color: #F7F3EF;
+ background-color: #EFEFEF;
+ text-decoration: none;
+ font-family: Verdana,Helvetica,sans-serif;
+ font-size: 11px;
+ font-weight: normal;
+}
+font {
+ color: #000000;
+ text-decoration: none;
+ font-family: Verdana,Helvetica,sans-serif;
+ font-size: 11px;
+ font-weight: normal;
+}
+H1 {
+ color: #000000;
+ background-color: transparent;
+ text-decoration: none;
+ font-family: Verdana,Helvetica,sans-serif;
+ font-size: 20px;
+}
+select {
+ color: black;
+ text-decoration: none;
+ font-family: Verdana,Helvetica,sans-serif;
+ font-size: 10px;
+ font-weight: normal;
+}
+input {
+ color: black;
+ text-decoration: none;
+ font-family: Verdana,Helvetica,sans-serif;
+ font-size: 10px;
+ font-weight: bold;
+}
+table
+{
+ border: none;
+ margin: 0px;
+ padding: 0px;
+}
+table.box {
+ color: #fefefe;
+ background-color: transparent;
+ border: none;
+ padding: 1px;
+ width: 100%;
+}
+tr.boxheader {
+ background-color: #9BA1A8;
+}
+td.boxheader {
+ color: #000000;
+ text-align: center;
+}
+tr.boxbody {
+ color: #000000;
+ background-color: #F7F3EF;
+}