vogelor
2010-05-10 82927e7ac3c7f22c40df6e3454d009e0c32ef110
server/lib/classes/db_mysql.inc.php
@@ -41,7 +41,7 @@
      var $errorNumber = 0;   // last error number
      var $errorMessage = "";   // last error message
      var $errorLocation = "";// last error location
      var $show_error_messages = false;
      var $show_error_messages = true;
      // constructor
      function db()
@@ -52,19 +52,22 @@
         $this->dbName = $conf["db_database"];
         $this->dbUser = $conf["db_user"];
         $this->dbPass = $conf["db_password"];
         $this->dbCharset = $conf['db_charset'];
         //$this->connect();
      }
      // error handler
      function updateError($location)
      {
         $this->errorNumber = mysql_errno();
         $this->errorMessage = mysql_error();
         global $app;
         $this->errorNumber = mysql_errno($this->linkId);
         $this->errorMessage = mysql_error($this->linkId);
         $this->errorLocation = $location;
         if($this->errorNumber && $this->show_error_messages)
         if($this->errorNumber && $this->show_error_messages && method_exists($app,'log'))
         {
            echo('<br /><b>'.$this->errorLocation.'</b><br />'.$this->errorMessage);
            flush();
            // echo('<br /><b>'.$this->errorLocation.'</b><br />'.$this->errorMessage);
            $app->log($this->errorLocation." ".$this->errorMessage,LOGLEVEL_WARN);
            //flush();
         }
      }
@@ -75,9 +78,11 @@
            $this->linkId = mysql_connect($this->dbHost, $this->dbUser, $this->dbPass);
            if(!$this->linkId)
            {
               $this->updateError('DB::connect()<br />mysql_connect');
               $this->updateError('DB::connect()-> mysql_connect');
               return false;
            }
            $this->queryId = @mysql_query('SET NAMES '.$this->dbCharset, $this->linkId);
            $this->queryId = @mysql_query("SET character_set_results = '".$this->dbCharset."', character_set_client = '".$this->dbCharset."', character_set_connection = '".$this->dbCharset."', character_set_database = '".$this->dbCharset."', character_set_server = '".$this->dbCharset."'", $this->linkId);
         }
         return true;
      }
@@ -90,11 +95,11 @@
         }
         if(!mysql_select_db($this->dbName, $this->linkId))
         {
            $this->updateError('DB::connect()<br />mysql_select_db');
            $this->updateError('DB::connect()-> mysql_select_db');
            return false;
         }
         $this->queryId = @mysql_query($queryString, $this->linkId);
         $this->updateError('DB::query('.$queryString.')<br />mysql_query');
         $this->updateError('DB::query('.$queryString.') -> mysql_query');
         if(!$this->queryId)
         {
            return false;
@@ -132,7 +137,7 @@
      function nextRecord()
      {
            $this->record = mysql_fetch_assoc($this->queryId);
         $this->updateError('DB::nextRecord()<br />mysql_fetch_array');
         $this->updateError('DB::nextRecord()-> mysql_fetch_array');
         if(!$this->record || !is_array($this->record))
         {
            return false;
@@ -187,7 +192,8 @@
      return $out;
      }
       
       /*
      //* These functions are deprecated and will be removed.
       function insert($tablename,$form,$debug = 0)
       {
         if(is_array($form)){
@@ -222,6 +228,117 @@
             if($debug == 1) echo "mySQL Error Message: ".$this->errorMessage;
           }
       }
      */
      public function diffrec($record_old, $record_new) {
      $diffrec_full = array();
      $diff_num = 0;
      if(is_array($record_old) && count($record_old) > 0) {
         foreach($record_old as $key => $val) {
            // if(!isset($record_new[$key]) || $record_new[$key] != $val) {
            if($record_new[$key] != $val) {
               // Record has changed
               $diffrec_full['old'][$key] = $val;
               $diffrec_full['new'][$key] = $record_new[$key];
               $diff_num++;
            } else {
               $diffrec_full['old'][$key] = $val;
               $diffrec_full['new'][$key] = $val;
            }
         }
      } elseif(is_array($record_new)) {
         foreach($record_new as $key => $val) {
            if(isset($record_new[$key]) && @$record_old[$key] != $val) {
               // Record has changed
               $diffrec_full['new'][$key] = $val;
               $diffrec_full['old'][$key] = @$record_old[$key];
               $diff_num++;
            } else {
               $diffrec_full['new'][$key] = $val;
               $diffrec_full['old'][$key] = $val;
            }
         }
      }
      return array('diff_num' => $diff_num, 'diff_rec' => $diffrec_full);
   }
   //** Function to fill the datalog with a full differential record.
   public function datalogSave($db_table, $action, $primary_field, $primary_id, $record_old, $record_new) {
      global $app,$conf;
      // Insert backticks only for incomplete table names.
      if(stristr($db_table,'.')) {
         $escape = '';
      } else {
         $escape = '`';
      }
      $tmp = $this->diffrec($record_old, $record_new);
      $diffrec_full = $tmp['diff_rec'];
      $diff_num = $tmp['diff_num'];
      unset($tmp);
      // Insert the server_id, if the record has a server_id
      $server_id = (isset($record_old["server_id"]) && $record_old["server_id"] > 0)?$record_old["server_id"]:0;
      if(isset($record_new["server_id"])) $server_id = $record_new["server_id"];
      if($diff_num > 0) {
         //print_r($diff_num);
         //print_r($diffrec_full);
         $diffstr = $app->db->quote(serialize($diffrec_full));
         $username = $app->db->quote($_SESSION["s"]["user"]["username"]);
         $dbidx = $primary_field.":".$primary_id;
         if($action == 'INSERT') $action = 'i';
         if($action == 'UPDATE') $action = 'u';
         if($action == 'DELETE') $action = 'd';
         $sql = "INSERT INTO sys_datalog (dbtable,dbidx,server_id,action,tstamp,user,data) VALUES ('".$db_table."','$dbidx','$server_id','$action','".time()."','$username','$diffstr')";
         $app->db->query($sql);
      }
      return true;
   }
   //** Inserts a record and saves the changes into the datalog
   public function datalogInsert($tablename, $insert_data, $index_field) {
      global $app;
      $old_rec = array();
      $this->query("INSERT INTO $tablename $insert_data");
      $index_value = $this->insertID();
      $new_rec = $this->queryOneRecord("SELECT * FROM $tablename WHERE $index_field = '$index_value'");
      $this->datalogSave($tablename, 'INSERT', $index_field, $index_value, $old_rec, $new_rec);
      return $index_value;
   }
   //** Updates a record and saves the changes into the datalog
   public function datalogUpdate($tablename, $update_data, $index_field, $index_value) {
      global $app;
      $old_rec = $this->queryOneRecord("SELECT * FROM $tablename WHERE $index_field = '$index_value'");
      $this->query("UPDATE $tablename SET $update_data WHERE $index_field = '$index_value'");
      $new_rec = $this->queryOneRecord("SELECT * FROM $tablename WHERE $index_field = '$index_value'");
      $this->datalogSave($tablename, 'UPDATE', $index_field, $index_value, $old_rec, $new_rec);
      return true;
   }
   //** Deletes a record and saves the changes into the datalog
   public function datalogDelete($tablename, $index_field, $index_value) {
      global $app;
      $old_rec = $this->queryOneRecord("SELECT * FROM $tablename WHERE $index_field = '$index_value'");
      $this->query("DELETE FROM $tablename WHERE $index_field = '$index_value'");
      $new_rec = array();
      $this->datalogSave($tablename, 'DELETE', $index_field, $index_value, $old_rec, $new_rec);
      return true;
   }
       
       public function closeConn()
       {