2
error_reporting(E_ALL & ~E_NOTICE);
4
require_once('require/aide_developpement.php');
5
require_once('require/function_table_html.php');
6
require_once('fichierConf.class.php');
8
include('dbconfig.inc.php');
10
require_once('var.php');
12
//$_SESSION["SERVER_READ"]=$_SESSION["SERVEUR_SQL"];
13
//$_SESSION["SERVER_WRITE"]=$_SESSION["SERVER_READ"];
15
if( ! isset($_SESSION["debug"]) ) {
16
$_SESSION["debug"] = 0 ;
19
if( isset( $_GET["cache"] ) ) {
20
$_SESSION["usecache"] = $_GET["cache"];
22
else if( ! isset($_SESSION["usecache"]) ) {
23
$_SESSION["usecache"] = USE_CACHE ;
28
if ($_SESSION['LOG_GUI'] == 1){
29
define("DB_LOG_NAME", DB_NAME);
30
// if ($_SESSION['LOG_DIR'] == "")
31
// define("LOG_FILE", $_SERVER["DOCUMENT_ROOT"]."/oscreport/log.csv");
33
define("LOG_FILE", $_SESSION['LOG_DIR']."/log.csv");
34
$logHandler = @fopen( LOG_FILE, "a");
38
if( ! function_exists ( "utf8_decode" )) {
39
function utf8_decode($st) {
46
if(!isset($_SESSION["rangCookie"])) $_SESSION["rangCookie"] = 0;
48
function addComputersToGroup( $gName, $ids ) {
50
$reqIdGroup = "SELECT id FROM hardware WHERE name='$gName'";
51
$resIdGroup = mysql_query( $reqIdGroup, $_SESSION["readServer"] );
52
$valIdGroup = mysql_fetch_array( $resIdGroup );
53
if( lock( $valIdGroup["id"] ) ) {
55
foreach( $ids as $key=>$val ) {
56
if( strpos ( $key, "checkmass" ) !== false ) {
58
$resDelete = "DELETE FROM groups_cache WHERE hardware_id=$val AND group_id=".$valIdGroup["id"];
59
@mysql_query( $resDelete, $_SESSION["writeServer"] );
61
$reqInsert = "INSERT INTO groups_cache(hardware_id, group_id, static) VALUES ($val, ".$valIdGroup["id"].", 1)";
62
$resInsert = mysql_query( $reqInsert, $_SESSION["writeServer"] );
66
unlock( $valIdGroup["id"] );
74
* Group creating function
76
function createGroup( $name,$description="", $staticOnly=false, $alreadyExists = false ) {
79
$deviceid = "_SYSTEMGROUP_";
81
//does $name group already exists
82
$reqGetId = "SELECT id FROM hardware WHERE name='".$name."'";
83
$resGetId = mysql_query( $reqGetId, $_SESSION["readServer"]);
84
if( $valGetId = mysql_fetch_array( $resGetId ) )
85
$groupAlreadyInDb = true;
87
$groupAlreadyInDb = false;
89
if( $alreadyExists && $groupAlreadyInDb ) {
90
$name_id_supp=deleteDid( $valGetId["id"], true, true, true );
91
addLog("DELETE",$valGetId["id"].' => '.$name_id_supp);
93
else if( $groupAlreadyInDb ) {
94
echo "<center><font class='warn'>".$l->g(621)."</font></center>";
99
$request = "SELECT DISTINCT h.id " . addslashes( $_SESSION["groupReq"] );
103
mysql_query( "INSERT INTO hardware(deviceid,name,description,lastdate) VALUES( '$deviceid' , '".$name."', '".$description."', NOW() )", $_SESSION["writeServer"] )
104
or die( mysql_error($_SESSION["writeServer"]));
106
//Getting hardware id
107
$insertId = mysql_insert_id( $_SESSION["writeServer"] );
110
mysql_query( "INSERT INTO groups(hardware_id, request, create_time) VALUES ( $insertId, '$request', UNIX_TIMESTAMP() )", $_SESSION["writeServer"] )
111
or die( mysql_error($_SESSION["writeServer"]) );
114
if( ! $staticOnly && lock($insertId) ) {
115
$reqCache = "INSERT IGNORE INTO groups_cache(hardware_id, group_id, static) SELECT DISTINCT h.id, $insertId, 0 ".$_SESSION["groupReq"];
116
$cachedRes = mysql_query( $reqCache , $_SESSION["writeServer"] )
117
or die( mysql_error($_SESSION["writeServer"]) );
118
$cached = mysql_affected_rows($_SESSION["writeServer"]);
121
else if( ! $staticOnly ) {
125
echo "<br><center>".$l->g(607)." <b>".stripslashes($name)."</b> ".(!$alreadyExists?$l->g(608):$l->g(609))." ".(isset($cached)?$l->g(622).":".$cached:"")."<br>";
129
function dbconnect() {
132
//echo $_SESSION["SERVER_READ"];
133
$link=@mysql_connect($_SESSION["SERVER_READ"],$_SESSION["COMPTE_BASE"],$_SESSION["PSWD_BASE"]);
135
echo "<br><center><font color=red><b>ERROR: MySql connection problem<br>".mysql_error()."</b></font></center>";
138
if( ! mysql_select_db($db,$link)) {
139
require('install.php');
143
$link2=@mysql_connect($_SESSION["SERVER_WRITE"],$_SESSION["COMPTE_BASE"],$_SESSION["PSWD_BASE"]);
145
echo "<br><center><font color=red><b>ERROR: MySql connection problem<br>".mysql_error($link2)."</b></font></center>";
149
if( ! @mysql_select_db($db,$link2)) {
150
require('install.php');
154
$_SESSION["writeServer"] = $link2;
155
$_SESSION["readServer"] = $link;
161
function getCount( $req ) {
162
$ech = $_SESSION["debug"];
163
//IF nor accountinfo and bios are needed, don't join them in count query.
164
if( strpos(" ".$req->where , " a.")===FALSE && strpos(" ".$req->where , " b.")===FALSE&&
165
strpos(" ".$req->where , " A.")===FALSE && strpos(" ".$req->where , " B.")===FALSE ) {
166
$newFrom = str_replace("hardware h LEFT JOIN accountinfo a ON a.hardware_id=h.id LEFT JOIN bios b ON b.hardware_id=h.id", "hardware h ",$req->from );
169
$newFrom = $req->from;
171
$reqCount = "SELECT count(distinct ".$req->countId.") AS cpt FROM ".$newFrom.($req->fromPrelim?",":"").$req->fromPrelim;
173
$reqCount .= " WHERE ".$req->where;
175
if($ech) echo "<br><font color='red'><b>$reqCount</b></font><br><br>";
176
$resCount = mysql_query($reqCount, $_SESSION["readServer"]) or die(mysql_error($_SESSION["readServer"]));
177
$valCount = mysql_fetch_array($resCount);
179
return $valCount["cpt"];
182
function getPrelim( $req, $limit=NULL ) {
183
$ech = $_SESSION["debug"];
184
$rac = "LEFT JOIN accountinfo a ON a.hardware_id=h.id";
186
// $selectFin = $req->getSelect();
187
//$fromFin = $req->from;
189
/*if( is_array($_SESSION["currentRegistry"]) )
190
foreach( $_SESSION["currentRegistry"] as $regist ) {
191
$selectReg .= ", regAff{$cpt}.regvalue AS \"$regist\"";
192
$fromReg.= "LEFT JOIN registry regAff{$cpt} ON regAff{$cpt}.hardware_id=h.id";
194
$whereReg .= " AND ";
195
$whereReg .= "regAff{$cpt}.name='".$regist;
199
$selPrelim = $req->getSelectPrelim();
200
$fromPrelim = $req->from;
202
$reqPrelim = "SELECT $selPrelim FROM ".$fromPrelim.($req->fromPrelim?",":"").$req->fromPrelim;
203
if( $req->where ) $reqPrelim .= " WHERE ".$req->where;
204
if( $req->group ) $reqPrelim .= " GROUP BY ".$req->group;
207
if( strstr( $req->order, "ipaddr" ) ) {
208
if( strstr( $req->order, "DESC" ) ) {
209
$order = "inet_aton(h.ipaddr) DESC";
212
$order = "inet_aton(h.ipaddr) ASC";
216
$order = $req->order;
218
if( $req->order ) $reqPrelim .= " ORDER BY ".$order;
221
if( $limit ) $reqPrelim .= " LIMIT ".$limit;
223
if($ech) echo "<br><font color='green'><b>$reqPrelim</b></font><br><br>";
228
function getQuery( $req, $limit ) {
230
$ech = $_SESSION["debug"];
231
$resPrelim = mysql_query( getPrelim( $req, $limit ) , $_SESSION["readServer"]);
233
$selFin = $req->getSelect();
234
$fromFin = $req->from ;
236
$toExec = "SELECT ".$selFin." FROM ".$fromFin;
239
while( $valPrelim = mysql_fetch_array($resPrelim) ) {
240
if( !$prem) $lesIn .= ",";
242
$lesIn .= "'".addslashes($valPrelim[$req->linkId])."'";
247
$toExec .= " WHERE ".$req->whereId." IN($lesIn) ";
249
$toExec .= $req->selFinal;
252
$toExec .= " WHERE 1=0";
254
if( $req->group ) $toExec .= " GROUP BY ".$req->group;
256
if( strstr( $req->order, "ipaddr" ) ) {
257
if( strstr( $req->order, "DESC" ) ) {
258
$order = "inet_aton(h.ipaddr) DESC";
261
$order = "inet_aton(h.ipaddr) ASC";
265
$order = $req->order;
267
if( $req->order ) $toExec .= " ORDER BY ".$order;
269
if($ech) echo "<br><font color='blue'><b>$toExec</b></font><br><br>";
274
function printEnTete($ent) {
275
echo "<br><table border=1 class= \"Fenetre\" WIDTH = '62%' ALIGN = 'Center' CELLPADDING='5'>
276
<th height=40px class=\"Fenetre\" colspan=2><b>".$ent."</b></th></table>";
279
function dateOnClick($input, $checkOnClick=false) {
281
$dateForm = $l->g(269) == "%m/%d/%Y" ? "MMDDYYYY" : "DDMMYYYY" ;
282
if( $checkOnClick ) $cOn = ",'$checkOnClick'";
283
$ret = "OnClick=\"javascript:NewCal('$input','$dateForm',false,24{$cOn});\"";
287
function datePick($input, $checkOnClick=false) {
289
$dateForm = $l->g(269) == "%m/%d/%Y" ? "MMDDYYYY" : "DDMMYYYY" ;
290
if( $checkOnClick ) $cOn = ",'$checkOnClick'";
291
$ret = "<a href=\"javascript:NewCal('$input','$dateForm',false,24{$cOn});\">";
292
$ret .= "<img src=\"image/cal.gif\" width=\"16\" height=\"16\" border=\"0\" alt=\"Pick a date\"></a>";
296
function dateFromMysql($v) {
299
if( $l->g(269) == "%m/%d/%Y" )
300
$ret = sprintf("%02d/%02d/%04d", $v[5].$v[6], $v[8].$v[9], $v);
302
$ret = sprintf("%02d/%02d/%04d", $v[8].$v[9], $v[5].$v[6], $v);
306
function dateTimeFromMysql($v) {
309
if( $l->g(269) == "%m/%d/%Y" )
310
$ret = sprintf("%02d/%02d/%04d %02d:%02d:%02d", $v[5].$v[6], $v[8].$v[9], $v, $v[11].$v[12],$v[14].$v[15],$v[17].$v[18]);
312
$ret = sprintf("%02d/%02d/%04d %02d:%02d:%02d", $v[8].$v[9], $v[5].$v[6], $v, $v[11].$v[12],$v[14].$v[15],$v[17].$v[18]);
316
function dateToMysql($date_cible) {
319
if(!isset($date_cible)) return "";
321
$dateAr = explode("/", $date_cible);
323
if( $l->g(269) == "%m/%d/%Y" ) {
333
return sprintf("%04d-%02d-%02d", $annee, $mois, $jour);
336
function addLog( $type, $value="" ) {
338
if ($_SESSION['LOG_GUI'] == 1){
340
$date = sprintf("%02d/%02d/%04d %02d:%02d:%02d", $dte["mday"], $dte["mon"], $dte["year"], $dte["hours"], $dte["minutes"], $dte["seconds"]);
341
@fwrite($logHandler, $_SESSION["loggeduser"].";$date;".DB_LOG_NAME.";$type;$value;\n");
346
function getBrowser() {
347
$bro = $_SERVER['HTTP_USER_AGENT'];
348
if( strpos ( $bro, "MSIE") === false ) {
354
function getBrowserLang() {
355
$bro = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
356
if (strpos( $bro,"de") === false) {
358
if (strpos( $bro,"es") === false) {
360
if (strpos( $bro,"fr") === false) {
362
if (strpos( $bro,"it") === false) {
364
if (strpos( $bro,"pt-br") === false) {
365
// Not brazilian portugueuse
366
if (strpos( $bro,"pt") === false) {
368
if (strpos( $bro,"pl") === false) {
370
// Use english default language
382
// Brazilian portuguese
383
return "brazilian_portuguese";
404
function printNavigation( $lesGets, $numPages) {
406
$prefG = "<a href=index.php?".stripslashes($lesGets)."&page=";
407
echo "<p align='center'>";
408
if( $numPages > 1 ) {
409
if( $_SESSION["pageCur"] == 1) {
410
echo " ";//voir gris�
411
echo " 1 ..";
413
echo " {$prefG}-1><img src='image/prec24.png'></a>";
414
echo " {$prefG}1>1</a> ..";
417
if( $_SESSION["pageCur"] && $_SESSION["pageCur"]>1 && $_SESSION["pageCur"]!=$numPages ) {
418
echo " ".$_SESSION["pageCur"]." ";
421
if( $_SESSION["pageCur"] >= $numPages) {
422
echo ".. $numPages ";
423
//echo "<img src='image/proch24.png'> "; voir gris�
425
echo ".. {$prefG}$numPages>$numPages</a> ";
426
echo "{$prefG}-2><img src='image/proch24.png'></a> ";
432
function deleteNet($id) {
433
mysql_query("DELETE FROM network_devices WHERE macaddr='$id';", $_SESSION["writeServer"]);
438
* @param id Hardware identifier to be deleted
439
* @param checkLock Tells wether or not the locking system must be used (default true)
440
* @param traceDel Tells wether or not the deleted entities must be inserted in deleted_equiv for tracking purpose (default true)
442
function deleteDid($id, $checkLock = true, $traceDel = true, $silent=false
445
//If lock is not user OR it is used and available
446
if( ! $checkLock || lock($id) ) {
447
$resId = mysql_query("SELECT deviceid,name,IPADDR,OSNAME FROM hardware WHERE id='$id'",$_SESSION["readServer"]) or die(mysql_error());
448
$valId = mysql_fetch_array($resId);
450
$did = $valId["deviceid"];
453
//Deleting a network device
454
if( strpos ( $did, "NETWORK_DEVICE-" ) === false ) {
455
$resNetm = @mysql_query("SELECT macaddr FROM networks WHERE hardware_id=$idHard", $_SESSION["readServer"]) or die(mysql_error());
456
while( $valNetm = mysql_fetch_array($resNetm)) {
457
@mysql_query("DELETE FROM netmap WHERE mac='".$valNetm["macaddr"]."';", $_SESSION["writeServer"]) or die(mysql_error());
460
//deleting a regular computer
461
if( $did != "_SYSTEMGROUP_" and $did != '_DOWNLOADGROUP_') {
462
$tables=Array("accesslog","accountinfo","bios","controllers","drives",
463
"inputs","memories","modems","monitors","networks","ports","printers","registry",
464
"slots","softwares","sounds","storages","videos","devices","download_history","download_servers");
466
elseif($did == "_SYSTEMGROUP_"){//Deleting a group
467
$tables=Array("devices");
468
mysql_query("DELETE FROM groups WHERE hardware_id=$idHard", $_SESSION["writeServer"]) or die(mysql_error());
469
$resDelete = mysql_query("DELETE FROM groups_cache WHERE group_id=$idHard", $_SESSION["writeServer"]) or die(mysql_error());
470
$affectedComputers = mysql_affected_rows( $_SESSION["writeServer"] );
474
echo "<center><font color=red><b>".$valId["name"]." ".$l->g(220)."</b></font></center>";
476
foreach ($tables as $table) {
477
mysql_query("DELETE FROM $table WHERE hardware_id=$idHard;", $_SESSION["writeServer"]) or die(mysql_error());
479
mysql_query("delete from download_enable where SERVER_ID=".$idHard, $_SESSION["writeServer"]) or die(mysql_error($_SESSION["writeServer"]));
481
mysql_query("DELETE FROM hardware WHERE id=$idHard;", $_SESSION["writeServer"]) or die(mysql_error());
482
//Deleted computers tracking
483
if($traceDel && mysql_num_rows(mysql_query("SELECT IVALUE FROM config WHERE IVALUE>0 AND NAME='TRACE_DELETED'", $_SESSION["readServer"]))){
484
mysql_query("insert into deleted_equiv(DELETED,EQUIVALENT) values('$did',NULL)", $_SESSION["writeServer"]) or die(mysql_error());
487
//Using lock ? Unlock
490
return $valId["name"];
498
* Hardware locking function. Prevents the hardware to be altered by either the server or another administrator using the GUI
499
* @param id Hardware identifier to be locked
502
//echo "<br><font color='red'><b>LOCK $id</b></font><br>";
503
$reqClean = "DELETE FROM locks WHERE unix_timestamp(since)<(unix_timestamp(NOW())-3600)";
504
$resClean = mysql_query($reqClean, $_SESSION["writeServer"]) or die(mysql_error());
506
$reqLock = "INSERT INTO locks(hardware_id) VALUES ('$id')";
507
if( $resLock = mysql_query($reqLock, $_SESSION["writeServer"]) or die(mysql_error()))
508
return( mysql_affected_rows ( $_SESSION["writeServer"] ) == 1 );
513
* Hardware unlocking function
514
* @param id Hardware identifier to be unlocked
516
function unlock($id) {
517
//echo "<br><font color='green'><b>UNLOCK $id</b></font><br>";
518
$reqLock = "DELETE FROM locks WHERE hardware_id='$id'";
519
$resLock = mysql_query($reqLock, $_SESSION["writeServer"]) or die(mysql_error());
520
return( mysql_affected_rows ( $_SESSION["writeServer"] ) == 1 );
524
* Show an error message if the locking failed
528
echo "<br><center><font color=red><b>".$l->g(376)."</b></font></center><br>";
532
* Includes the javascript datetime picker
534
function incPicker() {
537
echo "<script language=\"javascript\">
540
for( $mois=527; $mois<538; $mois++ )
541
echo "\"".$l->g($mois)."\",";
542
echo "\"".$l->g(538)."\"";
547
for( $jour=539; $jour<545; $jour++ )
548
echo "\"".$l->g($jour)."\",";
549
echo "\"".$l->g(545)."\"";
553
<script language=\"javascript\" type=\"text/javascript\" src=\"js/datetimepicker.js\">
558
* Loads the whole mac file in memory
561
if( $file=@fopen(MAC_FILE,"r") ) {
562
while (!feof($file)) {
563
$line = fgets($file, 4096);
564
if( preg_match("/^((?:[a-fA-F0-9]{2}-){2}[a-fA-F0-9]{2})\s+\(.+\)\s+(.+)\s*$/", $line, $result ) ) {
565
$_SESSION["mac"][strtoupper(str_replace("-",":",$result[1]))] = $result[2];
573
* Gets the manufacturer of a given network card
574
* @param mac A mac adress
575
* @return The manufacturer of the given mac
577
function getConstructor( $mac ) {
578
$beg = strtoupper(substr( $mac, 0, 8 ));
579
return ( ucwords(strtolower( $_SESSION["mac"][ $beg ])) );
583
* Decodes all the text from utf8
584
* @param txt Text to be decoded
585
* @return Text decoded from UTF8 according to UTF8_DEGREE
590
function getGluedIds( $reqSid ) {
591
$idNotIn = getIds($reqSid);
592
$idNotIn = @array_unique( $idNotIn );
593
$gluedId = @implode( "','", $idNotIn );
598
function getIds($reqSid) {
599
$resSid = mysql_query( $reqSid, $_SESSION["readServer"] );
600
while( $valSid = mysql_fetch_array($resSid) ) {
601
$idNotIn[] = $valSid["hardware_id"];
b'\\ No newline at end of file'