install() public static method

Install the database
public static install ( string $dbname, array $db, string $dir, mixed $install = null, boolean $suppress = false, boolean $clear = true ) : array
$dbname string
$db array
$dir string
$install mixed
$suppress boolean
$clear boolean
return array
示例#1
0
 /**
  * Install config method
  *
  * @param mixed  $form
  * @param string $docRoot
  * @return void
  */
 public function config($form, $docRoot = null)
 {
     if (null === $docRoot) {
         $docRoot = $_SERVER['DOCUMENT_ROOT'] . BASE_PATH;
     }
     // Get config file contents
     $cfgFile = new File($docRoot . '/config.php');
     $config = $cfgFile->read();
     // Get DB interface and type
     if (strpos($form->db_adapter, 'Pdo') !== false) {
         $dbInterface = 'Pdo';
         $dbType = strtolower(substr($form->db_adapter, strrpos($form->db_adapter, '\\') + 1));
     } else {
         $dbInterface = html_entity_decode($form->db_adapter, ENT_QUOTES, 'UTF-8');
         $dbType = null;
     }
     // If DB is SQLite
     if (strpos($form->db_adapter, 'Sqlite') !== false) {
         touch($docRoot . $form->content_path . '/.htphire.sqlite');
         $relativeDbName = "__DIR__ . '" . $form->content_path . '/.htphire.sqlite';
         $dbName = realpath($docRoot . $form->content_path . '/.htphire.sqlite');
         $dbUser = null;
         $dbPassword = null;
         $dbHost = null;
         $installFile = $dbName;
         chmod($dbName, 0777);
     } else {
         $relativeDbName = null;
         $dbName = $form->db_name;
         $dbUser = $form->db_username;
         $dbPassword = $form->db_password;
         $dbHost = $form->db_host;
         $installFile = null;
     }
     $dbPrefix = $form->db_prefix;
     // Set config values
     $config = str_replace("define('CONTENT_PATH', '/phire-content');", "define('CONTENT_PATH', '" . $form->content_path . "');", $config);
     $config = str_replace("define('APP_URI', '/phire');", "define('APP_URI', '" . $form->app_uri . "');", $config);
     $config = str_replace("define('DB_INTERFACE', '');", "define('DB_INTERFACE', '" . $dbInterface . "');", $config);
     $config = str_replace("define('DB_TYPE', '');", "define('DB_TYPE', '" . $dbType . "');", $config);
     $config = str_replace("define('DB_NAME', '');", "define('DB_NAME', " . (null !== $relativeDbName ? $relativeDbName : "'" . $dbName) . "');", $config);
     $config = str_replace("define('DB_USER', '');", "define('DB_USER', '" . $dbUser . "');", $config);
     $config = str_replace("define('DB_PASS', '');", "define('DB_PASS', '" . $dbPassword . "');", $config);
     $config = str_replace("define('DB_HOST', '');", "define('DB_HOST', '" . $dbHost . "');", $config);
     $config = str_replace("define('DB_PREFIX', '');", "define('DB_PREFIX', '" . $dbPrefix . "');", $config);
     $this->data['configWritable'] = is_writable($docRoot . '/config.php');
     if ($form instanceof \Pop\Form\Form) {
         // Store the config values in session in case config file is not writable.
         $sess = Session::getInstance();
         $sess->config = serialize(htmlentities($config, ENT_QUOTES, 'UTF-8'));
         $sess->app_uri = $form->app_uri;
     }
     if ($this->data['configWritable']) {
         $cfgFile->write($config)->save();
     }
     // Install the database
     $sqlFile = __DIR__ . '/../../../data/phire.' . str_replace(array('pdo\\', 'mysqli'), array('', 'mysql'), strtolower($form->db_adapter)) . '.sql';
     $db = array('database' => $dbName, 'username' => $dbUser, 'password' => $dbPassword, 'host' => $dbHost, 'prefix' => $dbPrefix, 'type' => str_replace('\\', '_', $form->db_adapter));
     Dbs::install($dbName, $db, $sqlFile, $installFile, true);
     if (stripos($form->db_adapter, 'Pdo\\') !== false) {
         $adapter = 'Pdo';
         $type = strtolower(substr($form->db_adapter, strpos($form->db_adapter, '\\') + 1));
     } else {
         $adapter = $form->db_adapter;
         $type = null;
     }
     // Set the default system config
     $db = Db::factory($adapter, array('database' => $dbName, 'username' => $dbUser, 'password' => $dbPassword, 'host' => $dbHost, 'type' => $type));
     // Get server info
     if (isset($_SERVER) && isset($_SERVER['SERVER_SOFTWARE'])) {
         $server = new Server();
         $os = $server->getOs() . ' (' . $server->getDistro() . ')';
         $srv = $server->getServer() . ' ' . $server->getServerVersion();
         $domain = $_SERVER['HTTP_HOST'];
         $doc = $_SERVER['DOCUMENT_ROOT'];
     } else {
         $os = '';
         $srv = '';
         $domain = '';
         $doc = '';
     }
     // Set the system configuration
     $db->adapter()->query("UPDATE " . $db->adapter()->escape($dbPrefix) . "config SET value = '" . \Phire\Project::VERSION . "' WHERE setting = 'system_version'");
     $db->adapter()->query("UPDATE " . $db->adapter()->escape($dbPrefix) . "config SET value = '" . $db->adapter()->escape($domain) . "' WHERE setting = 'system_domain'");
     $db->adapter()->query("UPDATE " . $db->adapter()->escape($dbPrefix) . "config SET value = '" . $db->adapter()->escape($doc) . "' WHERE setting = 'system_document_root'");
     $db->adapter()->query("UPDATE " . $db->adapter()->escape($dbPrefix) . "config SET value = '" . $db->adapter()->escape($os) . "' WHERE setting = 'server_operating_system'");
     $db->adapter()->query("UPDATE " . $db->adapter()->escape($dbPrefix) . "config SET value = '" . $db->adapter()->escape($srv) . "' WHERE setting = 'server_software'");
     $db->adapter()->query("UPDATE " . $db->adapter()->escape($dbPrefix) . "config SET value = '" . $db->adapter()->version() . "' WHERE setting = 'database_version'");
     $db->adapter()->query("UPDATE " . $db->adapter()->escape($dbPrefix) . "config SET value = '" . PHP_VERSION . "' WHERE setting = 'php_version'");
     $db->adapter()->query("UPDATE " . $db->adapter()->escape($dbPrefix) . "config SET value = '" . date('Y-m-d H:i:s') . "' WHERE setting = 'installed_on'");
     $db->adapter()->query("UPDATE " . $db->adapter()->escape($dbPrefix) . "config SET value = '" . $db->adapter()->escape($form->language) . "' WHERE setting = 'default_language'");
     $db->adapter()->query("UPDATE " . $db->adapter()->escape($dbPrefix) . "user_types SET password_encryption = '" . $db->adapter()->escape((int) $form->password_encryption) . "' WHERE id = 2001");
 }
示例#2
0
 /**
  * Install modules method
  *
  * @throws \Phire\Exception
  * @return void
  */
 public function installModules()
 {
     try {
         $path = BASE_PATH . APP_URI;
         if ($path == '') {
             $path = '/';
         }
         $modulePath1 = $_SERVER['DOCUMENT_ROOT'] . BASE_PATH . CONTENT_PATH . '/extensions/modules';
         $modulePath2 = __DIR__ . '/../../../../../module';
         $formats = Archive::formats();
         $phireCookie = null;
         foreach ($this->data['new'] as $name => $module) {
             $ext = substr($module, strrpos($module, '.') + 1);
             if (array_key_exists($ext, $formats)) {
                 $modPath = file_exists($modulePath1 . '/' . $module) ? $modulePath1 : $modulePath2;
                 if (!is_writable($modPath)) {
                     throw new \Phire\Exception($this->i18n->__('The modules folder is not writable.'));
                 }
                 $archive = new Archive($modPath . '/' . $module);
                 $archive->extract($modPath . '/');
                 if ((stripos($module, 'gz') || stripos($module, 'bz')) && file_exists($modPath . '/' . $name . '.tar')) {
                     unlink($modPath . '/' . $name . '.tar');
                 }
                 $dbType = Table\Extensions::getSql()->getDbType();
                 if ($dbType == \Pop\Db\Sql::SQLITE) {
                     $type = 'sqlite';
                 } else {
                     if ($dbType == \Pop\Db\Sql::PGSQL) {
                         $type = 'pgsql';
                     } else {
                         $type = 'mysql';
                     }
                 }
                 $sqlFile = $modPath . '/' . $name . '/data/' . strtolower($name) . '.' . $type . '.sql';
                 $cfg = null;
                 $tables = array();
                 $info = array();
                 // Check for a config and try to get info out of it
                 if (file_exists($modPath . '/' . $name . '/config') && file_exists($modPath . '/' . $name . '/config/module.php')) {
                     $cfg = file_get_contents($modPath . '/' . $name . '/config/module.php');
                     if (strpos($cfg, '*/') !== false) {
                         $cfgHeader = substr($cfg, 0, strpos($cfg, '*/'));
                         $cfgHeader = substr($cfgHeader, strpos($cfgHeader, '/*') + 2);
                         $cfgHeaderAry = explode("\n", $cfgHeader);
                         foreach ($cfgHeaderAry as $line) {
                             if (strpos($line, ':')) {
                                 $ary = explode(':', $line);
                                 if (isset($ary[0]) && isset($ary[1])) {
                                     $key = trim(str_replace('*', '', $ary[0]));
                                     $value = trim(str_replace('*', '', $ary[1]));
                                     $info[$key] = $value;
                                 }
                             }
                         }
                     }
                 }
                 if (file_exists($sqlFile)) {
                     // Get any tables required and created by this module
                     $sql = file_get_contents($sqlFile);
                     $tables = array();
                     $matches = array();
                     preg_match_all('/^CREATE TABLE(.*)$/mi', $sql, $matches);
                     if (isset($matches[0]) && isset($matches[0][0])) {
                         foreach ($matches[0] as $table) {
                             if (strpos($table, '`') !== false) {
                                 $table = substr($table, strpos($table, '`') + 1);
                                 $table = substr($table, 0, strpos($table, '`'));
                             } else {
                                 if (strpos($table, '"') !== false) {
                                     $table = substr($table, strpos($table, '"') + 1);
                                     $table = substr($table, 0, strpos($table, '"'));
                                 } else {
                                     if (strpos($table, "'") !== false) {
                                         $table = substr($table, strpos($table, "'") + 1);
                                         $table = substr($table, 0, strpos($table, "'"));
                                     } else {
                                         if (stripos($table, 'EXISTS') !== false) {
                                             $table = substr($table, stripos($table, 'EXISTS') + 6);
                                         } else {
                                             $table = substr($table, stripos($table, 'TABLE') + 5);
                                         }
                                         if (strpos($table, '(') !== false) {
                                             $table = substr($table, 0, strpos($table, '('));
                                         }
                                         $table = trim($table);
                                     }
                                 }
                             }
                             $tables[] = str_replace('[{prefix}]', DB_PREFIX, $table);
                         }
                     }
                     $ext = new Table\Extensions(array('name' => $name, 'file' => $module, 'type' => 1, 'active' => 1, 'assets' => serialize(array('tables' => $tables, 'info' => $info))));
                     $ext->save();
                     // If DB is SQLite
                     if (stripos($type, 'Sqlite') !== false) {
                         $dbName = realpath($_SERVER['DOCUMENT_ROOT'] . BASE_PATH . CONTENT_PATH . '/.htphire.sqlite');
                         $dbUser = null;
                         $dbPassword = null;
                         $dbHost = null;
                         $installFile = $dbName;
                     } else {
                         $dbName = DB_NAME;
                         $dbUser = DB_USER;
                         $dbPassword = DB_PASS;
                         $dbHost = DB_HOST;
                         $installFile = null;
                     }
                     $db = array('database' => $dbName, 'username' => $dbUser, 'password' => $dbPassword, 'host' => $dbHost, 'prefix' => DB_PREFIX, 'type' => DB_INTERFACE == 'Pdo' ? 'Pdo_' . ucfirst(DB_TYPE) : DB_INTERFACE);
                     Dbs::install($dbName, $db, $sqlFile, $installFile, true, false);
                 } else {
                     $ext = new Table\Extensions(array('name' => $name, 'type' => 1, 'active' => 1, 'assets' => serialize(array('tables' => $tables, 'info' => $info))));
                     $ext->save();
                 }
                 if (null !== $cfg) {
                     $config = (include $modPath . '/' . $name . '/config/module.php');
                     if (null !== $config[$name]->install) {
                         $installFunc = $config[$name]->install;
                         $installFunc();
                     }
                 }
                 if (php_sapi_name() != 'cli') {
                     $cookie = Cookie::getInstance(array('path' => $path));
                     if (isset($cookie->phire)) {
                         if (null === $phireCookie) {
                             $phireCookie = $cookie->phire;
                         }
                         $i18n = file_exists($modPath . '/' . $name . '/data/assets/i18n');
                         $modules = (array) $phireCookie->modules;
                         $modules[] = array('name' => $name, 'i18n' => $i18n);
                         $phireCookie->modules = $modules;
                     }
                 }
             }
         }
         if (null !== $phireCookie) {
             $cookie = Cookie::getInstance(array('path' => $path));
             $cookie->set('phire', $phireCookie);
         }
     } catch (\Exception $e) {
         $this->data['error'] = $e->getMessage();
     }
 }
示例#3
0
 /**
  * Install the project based on the available config files
  *
  * @param string $installFile
  * @return void
  */
 public static function install($installFile)
 {
     // Display instructions to continue
     $dbTables = array();
     self::instructions();
     $input = self::cliInput();
     if ($input == 'n') {
         echo I18n::factory()->__('Aborted.') . PHP_EOL . PHP_EOL;
         exit(0);
     }
     // Get the install config.
     $installDir = realpath(dirname($installFile));
     $install = (include $installFile);
     // Check if a project folder already exists.
     if (file_exists($install->project->name)) {
         echo wordwrap(I18n::factory()->__('Project folder exists. This may overwrite any project files you may already have under that project folder.'), 70, PHP_EOL) . PHP_EOL;
         $input = self::cliInput();
     } else {
         $input = 'y';
     }
     // If 'No', abort
     if ($input == 'n') {
         echo I18n::factory()->__('Aborted.') . PHP_EOL . PHP_EOL;
         exit(0);
         // Else, continue
     } else {
         $db = false;
         $databases = array();
         // Test for a database creds and schema, and ask
         // to test and install the database.
         if (isset($install->databases)) {
             $databases = $install->databases->asArray();
             echo I18n::factory()->__('Database credentials and schema detected.') . PHP_EOL;
             $input = self::cliInput(I18n::factory()->__('Test and install the database(s)?') . ' (Y/N) ');
             $db = $input == 'n' ? false : true;
         }
         // Handle any databases
         if ($db) {
             // Get current error reporting setting and set
             // error reporting to E_ERROR to suppress warnings
             $oldError = ini_get('error_reporting');
             error_reporting(E_ERROR);
             // Test the databases
             echo I18n::factory()->__('Testing the database(s)...') . PHP_EOL;
             foreach ($databases as $dbname => $db) {
                 echo I18n::factory()->__('Testing') . ' \'' . $dbname . '\'...' . PHP_EOL;
                 if (!isset($db['type']) || !isset($db['database'])) {
                     echo I18n::factory()->__('The database type and database name must be set for the database ') . '\'' . $dbname . '\'.' . PHP_EOL . PHP_EOL;
                     exit(0);
                 }
                 $check = Install\Dbs::check($db);
                 if (null !== $check) {
                     echo $check . PHP_EOL . PHP_EOL;
                     exit(0);
                 } else {
                     echo I18n::factory()->__('Database') . ' \'' . $dbname . '\' passed.' . PHP_EOL;
                     echo I18n::factory()->__('Installing database') . ' \'' . $dbname . '\'...' . PHP_EOL;
                     $tables = Install\Dbs::install($dbname, $db, $installDir, $install);
                     if (count($tables) > 0) {
                         $dbTables = array_merge($dbTables, $tables);
                     }
                 }
             }
             // Return error reporting to its original state
             error_reporting($oldError);
         }
         // Install base folder and file structure
         Install\Base::install($install);
         // Install project files
         Install\Projects::install($install, $installDir);
         // Install table class files
         if (count($dbTables) > 0) {
             Install\Tables::install($install, $dbTables);
         }
         // Install controller class files
         if (isset($install->controllers)) {
             Install\Controllers::install($install, $installDir);
         }
         // Install form class files
         if (isset($install->forms)) {
             Install\Forms::install($install);
         }
         // Install model class files
         if (isset($install->models)) {
             Install\Models::install($install);
         }
         // Create 'bootstrap.php' file
         Install\Bootstrap::install($install);
         echo I18n::factory()->__('Project install complete.') . PHP_EOL . PHP_EOL;
     }
 }