Example #1
0
 /**
  * Get Connection to slave, if exists,
  * and if configured to be used for read only request
  *
  * @return DBmysql object
  **/
 static function getReadConnection()
 {
     global $DB, $CFG_GLPI;
     if ($CFG_GLPI['use_slave_for_search'] && !$DB->isSlave() && self::isDBSlaveActive()) {
         include_once GLPI_CONFIG_DIR . "/config_db_slave.php";
         $DBread = new DBSlave();
         if ($DBread->connected) {
             $sql = "SELECT MAX(`id`) AS maxid\n                    FROM `glpi_logs`";
             switch ($CFG_GLPI['use_slave_for_search']) {
                 case 3:
                     // If synced or read-only account
                     if (Session::isReadOnlyAccount()) {
                         return $DBread;
                     }
                     // nobreak;
                 // nobreak;
                 case 1:
                     // If synced (all changes)
                     $slave = $DBread->request($sql)->next();
                     $master = $DB->request($sql)->next();
                     if (isset($slave['maxid']) && isset($master['maxid']) && $slave['maxid'] == $master['maxid']) {
                         // Latest Master change available on Slave
                         return $DBread;
                     }
                     break;
                 case 2:
                     // If synced (current user changes or profile in read only)
                     if (!isset($_SESSION['glpi_maxhistory'])) {
                         // No change yet
                         return $DBread;
                     }
                     $slave = $DBread->request($sql)->next();
                     if (isset($slave['maxid']) && $slave['maxid'] >= $_SESSION['glpi_maxhistory']) {
                         // Latest current user change avaiable on Slave
                         return $DBread;
                     }
                     break;
                 default:
                     // Always
                     return $DBread;
             }
         }
     }
     return $DB;
 }