Example #1
0
 protected function getDriversList()
 {
     $driversInfos = jDbParameters::getDriversInfosList();
     $drivers = isset($this->config['availabledDrivers']) ? $this->config['availabledDrivers'] : 'mysqli,sqlite3,pgsql';
     $list = preg_split("/ *, */", $drivers);
     $drivers = array();
     foreach ($driversInfos as $drinfos) {
         if (in_array($drinfos[3], $list)) {
             $drv = $drinfos[3];
             if (extension_loaded($drinfos[1])) {
                 $drivers[$drv] = array($drv, $drinfos[0]);
             }
             if (class_exists('PDO') && extension_loaded($drinfos[2])) {
                 $drivers[$drv . ':pdo'] = array($drv . ' (PDO)', $drinfos[0]);
             }
         }
     }
     return $drivers;
 }
 function checkPhpExtensions()
 {
     $ok = true;
     if (!version_compare($this->buildProperties['PHP_VERSION_TARGET'], phpversion(), '<=')) {
         $this->error('php.bad.version');
         $notice = $this->messages->get('php.version.required', $this->buildProperties['PHP_VERSION_TARGET']);
         $notice .= '. ' . $this->messages->get('php.version.current', phpversion());
         $this->reporter->showNotice($notice);
         $ok = false;
     } else {
         if ($this->verbose) {
             $this->ok('php.ok.version', phpversion());
         }
     }
     $extensions = array('dom', 'SPL', 'SimpleXML', 'pcre', 'session', 'tokenizer', 'iconv', 'filter', 'json');
     foreach ($extensions as $name) {
         if (!extension_loaded($name)) {
             $this->error('extension.required.not.installed', $name);
             $ok = false;
         } else {
             if ($this->verbose) {
                 $this->ok('extension.required.installed', $name);
             }
         }
     }
     if (count($this->databases)) {
         $driversInfos = jDbParameters::getDriversInfosList();
         $req = $this->dbRequired ? 'required' : 'optional';
         $okdb = false;
         array_combine($this->databases, array_fill(0, count($this->databases), false));
         $alreadyExtensionsChecked = array();
         $okdatabases = array();
         foreach ($this->databases as $name) {
             foreach ($driversInfos as $driverInfo) {
                 list($dbType, $nativeExt, $pdoExt, $jdbDriver, $pdoDriver) = $driverInfo;
                 if ($name == $dbType || $name == $nativeExt || $name == $pdoDriver) {
                     if (extension_loaded($nativeExt)) {
                         if (!isset($alreadyExtensionsChecked[$nativeExt])) {
                             if ($this->verbose) {
                                 $this->ok('extension.installed', $nativeExt);
                             }
                             $alreadyExtensionsChecked[$nativeExt] = true;
                             $okdb = true;
                             $okdatabases[$name] = true;
                         }
                     } else {
                         if (!isset($alreadyExtensionsChecked[$nativeExt])) {
                             if ($this->verbose) {
                                 $this->notice('extension.not.installed', $nativeExt);
                             }
                             $alreadyExtensionsChecked[$nativeExt] = false;
                         }
                     }
                     if (extension_loaded($pdoExt)) {
                         if (!isset($alreadyExtensionsChecked[$pdoExt])) {
                             if ($this->verbose) {
                                 $this->ok('extension.installed', $pdoExt);
                             }
                             $alreadyExtensionsChecked[$pdoExt] = true;
                             $okdb = true;
                             $okdatabases[$name] = true;
                         }
                     } else {
                         if (!isset($alreadyExtensionsChecked[$pdoExt])) {
                             if ($this->verbose) {
                                 $this->notice('extension.not.installed', $pdoExt);
                             }
                             $alreadyExtensionsChecked[$pdoExt] = false;
                         }
                     }
                 }
             }
         }
         if ($this->dbRequired) {
             if ($okdb) {
                 $this->ok('extension.database.ok', implode(',', array_keys($okdatabases)));
             } else {
                 $this->error('extension.database.missing');
                 $ok = false;
             }
         } else {
             if ($okdb) {
                 $this->ok('extension.database.ok2', implode(',', array_keys($okdatabases)));
             } else {
                 $this->notice('extension.database.missing2');
             }
         }
     }
     foreach ($this->otherExtensions as $name => $required) {
         $req = $required ? 'required' : 'optional';
         if (!extension_loaded($name)) {
             if ($required) {
                 $this->error('extension.' . $req . '.not.installed', $name);
                 $ok = false;
             } else {
                 $this->notice('extension.' . $req . '.not.installed', $name);
             }
         } else {
             if ($this->verbose) {
                 $this->ok('extension.' . $req . '.installed', $name);
             }
         }
     }
     if ($ok) {
         $this->ok('extensions.required.ok');
     }
     return $ok;
 }