tbrehm
2008-12-09 eaa00d8cb42b07a7f6a6c48504e94edb552df97d
server/lib/classes/modules.inc.php
@@ -33,15 +33,15 @@
   var $notification_hooks = array();
   
   /*
    This function is called to load the modules from the mods-available folder
    This function is called to load the modules from the mods-enabled or the mods-core folder
   */
   function loadModules() {
   function loadModules($type) {
      global $app, $conf;
      
      $modules_dir = $conf["rootpath"].$conf["fs_div"]."mods-enabled".$conf["fs_div"];
      $subPath = 'mods-enabled';
      if ($type == 'core') $subPath = 'mods-core';
      $modules_dir = $conf["rootpath"].$conf["fs_div"].$subPath.$conf["fs_div"];
      if (is_dir($modules_dir)) {
         if ($dh = opendir($modules_dir)) {
            while (($file = readdir($dh)) !== false) {
@@ -78,15 +78,93 @@
   */
   
   function processDatalog() {
      global $app;
      global $app,$conf;
      
      // TODO: process only new entries.
      $sql = "SELECT * FROM sys_datalog WHERE 1";
      $records = $app->db->queryAllRecords($sql);
      foreach($records as $rec) {
         $data = unserialize(stripslashes($rec["data"]));
         $this->raiseTableHook($rec["dbtable"],$rec["action"],$data);
      //* If its a multiserver setup
      if($app->db->dbHost != $app->dbmaster->dbHost) {
         $sql = "SELECT * FROM sys_datalog WHERE server_id = ".$conf["server_id"]." ORDER BY datalog_id";
         $records = $app->dbmaster->queryAllRecords($sql);
         foreach($records as $d) {
            $data = unserialize(stripslashes($d["data"]));
            $replication_error = false;
            if($d["action"] == 'i') {
               $idx = explode(":",$d["dbidx"]);
               $tmp_sql1 = '';
               $tmp_sql2 = '';
               foreach($data['new'] as $fieldname => $val) {
                  $tmp_sql1 .= "$fieldname,";
                  $tmp_sql2 .= "'$val',";
               }
               $tmp_sql1 = substr($tmp_sql1,0,-1);
               $tmp_sql2 = substr($tmp_sql2,0,-1);
               //$tmp_sql1 .= "$idx[0]";
               //$tmp_sql2 .= "$idx[1]";
               $sql = "INSERT INTO $d[dbtable] ($tmp_sql1) VALUES ($tmp_sql2)";
               $app->db->query($sql);
               if($app->db->errorNumber > 0) {
                  $replication_error = true;
                  $app->log("Replication failed. Error: ".$app->db->errorMessage,LOGLEVEL_ERROR);
               }
               $app->log("Replicated from master: ".$sql,LOGLEVEL_DEBUG);
            }
            if($d["action"] == 'u') {
               $sql = "UPDATE $d[dbtable] SET ";
               foreach($data['new'] as $fieldname => $val) {
                  $sql .= "$fieldname = '$val',";
               }
               $sql = substr($sql,0,-1);
               $idx = explode(":",$d["dbidx"]);
               $sql .= " WHERE $idx[0] = $idx[1]";
               $app->db->query($sql);
               if($app->db->errorNumber > 0) {
                  $replication_error = true;
                  $app->log("Replication failed. Error: ".$app->db->errorMessage,LOGLEVEL_ERROR);
               }
               $app->log("Replicated from master: ".$sql,LOGLEVEL_DEBUG);
            }
            if($d["action"] == 'd') {
               $idx = explode(":",$d["dbidx"]);
               $sql = "DELETE FROM $d[dbtable] ";
               $sql .= " WHERE $idx[0] = $idx[1]";
               $app->db->query($sql);
               if($app->db->errorNumber > 0) {
                  $replication_error = true;
                  $app->log("Replication failed. Error: ".$app->db->errorMessage,LOGLEVEL_ERROR);
               }
               $app->log("Replicated from master: ".$sql,LOGLEVEL_DEBUG);
            }
            if($replication_error == false) {
               $this->raiseTableHook($d["dbtable"],$d["action"],$data);
               $app->dbmaster->query("DELETE FROM sys_datalog WHERE datalog_id = ".$d["datalog_id"]);
               $app->log("Deleting sys_datalog ID ".$d["datalog_id"],LOGLEVEL_DEBUG);
            } else {
               $app->log("Error in Repliction, changes were not processed.",LOGLEVEL_ERROR);
            }
         }
      //* if we have a single server setup
      } else {
         $sql = "SELECT * FROM sys_datalog WHERE server_id = ".$conf["server_id"]." ORDER BY datalog_id";
         $records = $app->db->queryAllRecords($sql);
         foreach($records as $rec) {
            $data = unserialize(stripslashes($rec["data"]));
            $this->raiseTableHook($rec["dbtable"],$rec["action"],$data);
            $app->db->query("DELETE FROM sys_datalog WHERE datalog_id = ".$rec["datalog_id"]);
            $app->log("Deleting sys_datalog ID ".$rec["datalog_id"],LOGLEVEL_DEBUG);
         }
      }
   }
   
   function raiseTableHook($table_name,$action,$data) {