Esempio n. 1
0
 /**
  * Composer install method
  * 
  * @param  \Composer\Script\Event $event
  * @throws \Pop\Db\Exception
  * @return void
  */
 public static function install($event)
 {
     $console = new Console(100, '    ');
     if (!file_exists(__DIR__ . '/../../data')) {
         mkdir(__DIR__ . '/../../data');
     }
     chmod(__DIR__ . '/../../data', 0777);
     if (!file_exists(__DIR__ . '/../../app/config/application.php')) {
         $console->write();
         $console->write($console->colorize('A configuration file was not detected.', Console::BOLD_YELLOW));
         $console->write();
         $createConfig = $console->prompt('Would you like to create one and install the database? [Y/N] ', ['y', 'n']);
         if (strtolower($createConfig) == 'y') {
             $console->write();
             // Configure application database
             $dbName = '';
             $dbUser = '';
             $dbPass = '';
             $dbHost = '';
             $dbPrefix = '';
             $dbAdapters = self::getDbAdapters();
             $adapters = array_keys($dbAdapters);
             $dbChoices = [];
             $dsn = null;
             $i = 1;
             foreach ($dbAdapters as $a) {
                 $console->write($i . ': ' . $a);
                 $dbChoices[] = $i;
                 $i++;
             }
             $console->write();
             $adapter = $console->prompt('Please select one of the above database adapters: ', $dbChoices);
             $console->write();
             // If PDO
             if (strpos($adapters[$adapter - 1], 'pdo') !== false) {
                 $console->write('1: mysql');
                 $console->write('2: pgsql');
                 $console->write('3: sqlite');
                 $console->write();
                 $dsn = $console->prompt('Please select the PDO DSN: ', [1, 2, 3]);
                 $dbInterface = 'Pdo';
                 $dbType = str_replace('pdo_', '', strtolower($adapters[$adapter - 1]));
                 $console->write();
             } else {
                 $dbInterface = ucfirst(strtolower($adapters[$adapter - 1]));
                 $dbType = null;
             }
             // If SQLite
             if ($dsn == 3 || $adapters[$adapter - 1] == 'sqlite') {
                 if (!file_exists(__DIR__ . '/../../data/.htpop.sqlite')) {
                     touch(__DIR__ . '/../../data/.htpop.sqlite');
                     chmod(__DIR__ . '/../../data/.htpop.sqlite', 0777);
                 }
                 $dbName = __DIR__ . '/../../data/.htpop.sqlite';
                 $realDbName = "__DIR__ . '/../../data/.htpop.sqlite'";
                 $dbPrefix = $console->prompt('DB Table Prefix: [pop_] ');
                 $console->write();
             } else {
                 $dbCheck = 1;
                 while (null !== $dbCheck) {
                     $dbName = $console->prompt('DB Name: ');
                     $dbUser = $console->prompt('DB User: '******'DB Password: '******'DB Host: [localhost] ');
                     $dbPrefix = $console->prompt('DB Table Prefix: [pop_] ');
                     if ($dbHost == '') {
                         $dbHost = 'localhost';
                     }
                     $dbCheck = Db::check($dbInterface, ['database' => $dbName, 'username' => $dbUser, 'password' => $dbPass, 'host' => $dbHost, 'type' => $dbType]);
                     if (null !== $dbCheck) {
                         $console->write();
                         $console->write($console->colorize('Database configuration test failed. Please try again.', Console::BOLD_RED));
                     } else {
                         $realDbName = "'" . $dbName . "'";
                         $console->write();
                         $console->write($console->colorize('Database configuration test passed.', Console::BOLD_GREEN));
                     }
                     $console->write();
                 }
             }
             // Install database
             $sql = stripos($dbInterface, 'pdo') !== false ? __DIR__ . '/../data/pop.' . strtolower($dbType) . '.sql' : __DIR__ . '/../data/pop.' . strtolower($dbInterface) . '.sql';
             if ($dbPrefix == '') {
                 $dbPrefix = 'pop_';
             }
             Db::install($sql, ['database' => $dbName, 'username' => $dbUser, 'password' => $dbPass, 'host' => $dbHost, 'prefix' => $dbPrefix, 'type' => $dbType], $dbInterface);
             // Write config file
             $config = str_replace(["define('DB_PREFIX', '');", "'adapter'  => '',", "'database' => '',", "'username' => '',", "'password' => '',", "'host'     => '',", "'type'     => null"], ["define('DB_PREFIX', '" . $dbPrefix . "');", "'adapter'  => '" . strtolower($dbInterface) . "',", "'database' => " . $realDbName . ",", "'username' => '" . $dbUser . "',", "'password' => '" . $dbPass . "',", "'host'     => '" . $dbHost . "',", "'type'     => '" . $dbType . "'"], file_get_contents(__DIR__ . '/../../app/config/application.orig.php'));
             file_put_contents(__DIR__ . '/../../app/config/application.php', $config);
             $console->write($console->colorize('Application configuration completed.', Console::BOLD_GREEN));
         }
     }
     $console->write();
     $console->write('Thank you for using Pop!');
     $console->write();
 }
Esempio n. 2
0
 /**
  * Install Profile
  *
  * @param  string $sql
  * @return void
  */
 public function installProfile($sql)
 {
     Db::install($sql, ['database' => DB_NAME, 'username' => DB_USER, 'password' => DB_PASS, 'host' => DB_HOST, 'prefix' => DB_PREFIX, 'type' => DB_TYPE], ucfirst(strtolower(DB_INTERFACE)));
 }
Esempio n. 3
0
 /**
  * Finalize module install
  *
  * @param  string               $module
  * @param  string               $folder
  * @param  string               $modulesPath
  * @param  \Pop\Service\Locator $services
  * @return void
  */
 protected function finalizeInstall($module, $folder, $modulesPath, $services)
 {
     // Get module config and module info from config file
     $config = (include $modulesPath . '/' . $folder . '/config/module.php');
     $info = $this->getInfo(file_get_contents($modulesPath . '/' . $folder . '/config/module.php'));
     $name = key($config);
     $descName = '';
     if (isset($info['name'])) {
         $descName = $info['name'];
     } else {
         if (isset($info['Name'])) {
             $descName = $info['Name'];
         } else {
             if (isset($info['NAME'])) {
                 $descName = $info['NAME'];
             } else {
                 if (isset($info['module name'])) {
                     $descName = $info['module name'];
                 } else {
                     if (isset($info['Module Name'])) {
                         $descName = $info['Module Name'];
                     } else {
                         if (isset($info['MODULE NAME'])) {
                             $descName = $info['MODULE NAME'];
                         }
                     }
                 }
             }
         }
     }
     $info['Desc Name'] = $descName;
     if (isset($info['version'])) {
         $version = $info['version'];
     } else {
         if (isset($info['Version'])) {
             $version = $info['Version'];
         } else {
             if (isset($info['VERSION'])) {
                 $version = $info['VERSION'];
             } else {
                 $version = 'N/A';
             }
         }
     }
     // Get SQL, if exists
     $sqlType = strtolower(DB_INTERFACE == 'pdo' ? DB_TYPE : DB_INTERFACE);
     $sqlFile = $modulesPath . '/' . $folder . '/data/' . $name . '.' . $sqlType . '.sql';
     if (!file_exists($sqlFile)) {
         $sqlFile = null;
     }
     $tables = null !== $sqlFile ? $this->getTables(file_get_contents($sqlFile)) : [];
     // Save module in the database
     $mod = new Table\Modules(['file' => $module, 'folder' => $folder, 'name' => $name, 'prefix' => isset($config[$name]['prefix']) ? $config[$name]['prefix'] : '', 'version' => $version, 'active' => 1, 'order' => (int) Table\Modules::findAll()->count() + 1, 'assets' => serialize(['tables' => $tables, 'info' => $info]), 'installed_on' => date('Y-m-d H:i:s')]);
     $mod->save();
     $this->sendStats($name, $version);
     // Execute any SQL that came with the module
     if (null !== $sqlFile) {
         Db::install($sqlFile, ['database' => DB_NAME, 'username' => DB_USER, 'password' => DB_PASS, 'host' => DB_HOST, 'prefix' => DB_PREFIX, 'type' => DB_TYPE], ucfirst(strtolower(DB_INTERFACE)));
     }
     // Run any install functions
     if (isset($config[$name]) && isset($config[$name]['install']) && !empty($config[$name]['install'])) {
         call_user_func_array($config[$name]['install'], [$services]);
     }
 }