/** * Given an installSettingsForm, run the install including the schema creation and default data load. This is * used by the interactice install and the command line install. * @param object $form * @param object $messageStreamer */ public static function runInstallation($form, &$messageStreamer) { assert('$form instanceof InstallSettingsForm'); assert('$messageStreamer instanceof MessageStreamer'); if (defined('IS_TEST')) { $perInstanceFilename = "perInstanceTest.php"; $debugFilename = "debugTest.php"; } else { @set_time_limit(1200); $perInstanceFilename = "perInstance.php"; $debugFilename = "debug.php"; } $messageStreamer->add(Zurmo::t('InstallModule', 'Connecting to Database.')); InstallUtil::connectToDatabase($form->databaseType, $form->databaseHostname, $form->databaseName, $form->databaseUsername, $form->databasePassword, $form->databasePort); ForgetAllCacheUtil::forgetAllCaches(); $messageStreamer->add(Zurmo::t('InstallModule', 'Dropping existing tables.')); InstallUtil::dropAllTables(); $messageStreamer->add(Zurmo::t('InstallModule', 'Creating super user.')); InstallUtil::createSuperUser('super', $form->superUserPassword); $messageLogger = new MessageLogger($messageStreamer); Yii::app()->custom->runBeforeInstallationAutoBuildDatabase($messageLogger); $messageStreamer->add(Zurmo::t('InstallModule', 'Starting database schema creation.')); $startTime = microtime(true); $messageStreamer->add('debugOn:' . BooleanUtil::boolToString(YII_DEBUG)); $messageStreamer->add('phpLevelCaching:' . BooleanUtil::boolToString(PHP_CACHING_ON)); $messageStreamer->add('memcacheLevelCaching:' . BooleanUtil::boolToString(MEMCACHE_ON)); InstallUtil::autoBuildDatabase($messageLogger); $endTime = microtime(true); $messageStreamer->add(Zurmo::t('InstallModule', 'Total autobuild time: {formattedTime} seconds.', array('{formattedTime}' => number_format($endTime - $startTime, 3)))); if (SHOW_QUERY_DATA) { $messageStreamer->add(PageView::getTotalAndDuplicateQueryCountContent()); $messageStreamer->add(PageView::makeNonHtmlDuplicateCountAndQueryContent()); } $messageStreamer->add(Zurmo::t('InstallModule', 'Database schema creation complete.')); $messageStreamer->add(Zurmo::t('InstallModule', 'Rebuilding Permissions.')); ReadPermissionsOptimizationUtil::rebuild(); $messageStreamer->add(Zurmo::t('InstallModule', 'Freezing database.')); InstallUtil::freezeDatabase(); $messageStreamer->add(Zurmo::t('InstallModule', 'Writing Configuration File.')); InstallUtil::writeConfiguration(INSTANCE_ROOT, $form->databaseType, $form->databaseHostname, $form->databaseName, $form->databaseUsername, $form->databasePassword, $form->databasePort, $form->memcacheHostname, (int) $form->memcachePortNumber, true, Yii::app()->language, $perInstanceFilename, $debugFilename, $form->hostInfo, $form->scriptUrl, $form->submitCrashToSentry); $messageStreamer->add(Zurmo::t('InstallModule', 'Setting up default data.')); DefaultDataUtil::load($messageLogger); Yii::app()->custom->runAfterInstallationDefaultDataLoad($messageLogger); // Send notification to super admin to delete test.php file in case if this // installation is used in production mode. $message = new NotificationMessage(); $message->textContent = Zurmo::t('InstallModule', 'If this website is in production mode, please remove the app/test.php file.'); $rules = new RemoveApiTestEntryScriptFileNotificationRules(); NotificationsUtil::submit($message, $rules); // If minify is disabled, inform user that they should fix issues and enable minify $setIncludePathServiceHelper = new SetIncludePathServiceHelper(); if (!$setIncludePathServiceHelper->runCheckAndGetIfSuccessful()) { $message = new NotificationMessage(); $message->textContent = Zurmo::t('InstallModule', 'Minify has been disabled due to a system issue. Try to resolve the problem and re-enable Minify.'); $rules = new EnableMinifyNotificationRules(); NotificationsUtil::submit($message, $rules); } InstallUtil::setZurmoTokenAndWriteToPerInstanceFile(INSTANCE_ROOT); ZurmoPasswordSecurityUtil::setPasswordSaltAndWriteToPerInstanceFile(INSTANCE_ROOT); $messageStreamer->add(Zurmo::t('InstallModule', 'Installation Complete.')); }
public function testWriteConfiguration() { $instanceRoot = INSTANCE_ROOT; $perInstanceConfigFileDist = "{$instanceRoot}/protected/config/perInstanceDIST.php"; $perInstanceConfigFile = "{$instanceRoot}/protected/config/perInstanceTest.php"; $originalPerInstanceConfiguration = file_get_contents($perInstanceConfigFile); copy($perInstanceConfigFileDist, $perInstanceConfigFile); $perInstanceConfiguration = file_get_contents($perInstanceConfigFile); $debugConfigFileDist = "{$instanceRoot}/protected/config/debugDIST.php"; $debugConfigFile = "{$instanceRoot}/protected/config/debugTest.php"; $originalDebugConfiguration = file_get_contents($debugConfigFile); copy($debugConfigFileDist, $debugConfigFile); $debugConfiguration = file_get_contents($debugConfigFile); $this->assertRegExp('/\\$debugOn = false;/', $debugConfiguration); try { InstallUtil::writeConfiguration($instanceRoot, 'mysql', 'databases.r-us.com', 'wacky', 'wacko', 'wacked', 3306, 'memcache.jason.com', 5432, false, 'es', 'perInstanceTest.php', 'debugTest.php', '', ''); $debugConfiguration = file_get_contents($debugConfigFile); $perInstanceConfiguration = file_get_contents($perInstanceConfigFile); $this->assertRegExp('/\\$debugOn = false;/', $debugConfiguration); $this->assertRegExp('/\\$language = \'es\';/', $perInstanceConfiguration); $this->assertRegExp('/\\$connectionString = \'mysql:host=databases.r-us.com;port=3306;dbname=wacky\';/', $perInstanceConfiguration); $this->assertRegExp('/\\$username = \'wacko\';/', $perInstanceConfiguration); $this->assertRegExp('/\\$password = \'wacked\';/', $perInstanceConfiguration); $this->assertRegExp('/\'host\' => \'memcache.jason.com\',\\n' . ' \'port\' => 5432,/', $perInstanceConfiguration); $this->assertNotRegExp('/\\/\\/ REMOVE THE REMAINDER/', $perInstanceConfiguration); } catch (Exception $e) { if (isset($debugConfiguration)) { echo $debugConfiguration; } if (isset($perInstanceConfiguration)) { echo $perInstanceConfiguration; } } // finally // { unlink($debugConfigFile); unlink($perInstanceConfigFile); file_put_contents($perInstanceConfigFile, $originalPerInstanceConfiguration); file_put_contents($debugConfigFile, $originalDebugConfiguration); // } if (isset($e)) { throw $e; } }