/** * 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(); }
/** * 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))); }
/** * 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]); } }