/** * Execute installer. * @param $args array * @param $request PKPRequest */ function install($args, $request) { $this->validate($request); $this->setupTemplate($request); $installForm = new InstallForm($request); $installForm->readInputData(); if ($installForm->validate()) { $installForm->execute(); } else { $installForm->display(); } }
/** * Execute installer. */ function install() { $this->validate(); $this->setupTemplate(); if (checkPhpVersion('5.0.0')) { // WARNING: This form needs $this in constructor $installForm = new InstallForm(); } else { $installForm =& new InstallForm(); } $installForm->readInputData(); if ($installForm->validate()) { $installForm->execute(); } else { $installForm->display(); } }
/** * Read installation parameters from stdin. * FIXME: May want to implement an abstract "CLIForm" class handling input/validation. * FIXME: Use readline if available? */ function readParams() { if (checkPhpVersion('5.0.0')) { // WARNING: This form needs $this in constructor $installForm = new InstallForm(); } else { $installForm =& new InstallForm(); } // Locale Settings $this->printTitle('installer.localeSettings'); $this->readParamOptions('locale', 'locale.primary', $installForm->supportedLocales, 'en_US'); $this->readParamOptions('additionalLocales', 'installer.additionalLocales', $installForm->supportedLocales, '', true); $this->readParamOptions('clientCharset', 'installer.clientCharset', $installForm->supportedClientCharsets, 'utf-8'); $this->readParamOptions('connectionCharset', 'installer.connectionCharset', $installForm->supportedConnectionCharsets, ''); $this->readParamOptions('databaseCharset', 'installer.databaseCharset', $installForm->supportedDatabaseCharsets, ''); // File Settings $this->printTitle('installer.fileSettings'); $this->readParam('filesDir', 'installer.filesDir'); $this->readParamBoolean('skipFilesDir', 'installer.skipFilesDir'); // Security Settings $this->printTitle('installer.securitySettings'); $this->readParamOptions('encryption', 'installer.encryption', $installForm->supportedEncryptionAlgorithms, 'md5'); // Administrator Account $this->printTitle('installer.administratorAccount'); $this->readParam('adminUsername', 'user.username'); @`/bin/stty -echo`; do { $this->readParam('adminPassword', 'user.password'); printf("\n"); $this->readParam('adminPassword2', 'user.register.repeatPassword'); printf("\n"); } while ($this->params['adminPassword'] != $this->params['adminPassword2']); @`/bin/stty echo`; $this->readParam('adminEmail', 'user.email'); // Database Settings $this->printTitle('installer.databaseSettings'); $this->readParamOptions('databaseDriver', 'installer.databaseDriver', $installForm->checkDBDrivers()); $this->readParam('databaseHost', 'installer.databaseHost', ''); $this->readParam('databaseUsername', 'installer.databaseUsername', ''); $this->readParam('databasePassword', 'installer.databasePassword', ''); $this->readParam('databaseName', 'installer.databaseName'); $this->readParamBoolean('createDatabase', 'installer.createDatabase', 'Y'); // Miscellaneous Settings $this->printTitle('installer.miscSettings'); $this->readParam('oaiRepositoryId', 'installer.oaiRepositoryId'); printf("\n*** "); }
/** * Read installation parameters from stdin. * FIXME: May want to implement an abstract "CLIForm" class handling input/validation. * FIXME: Use readline if available? */ function readParams() { $installForm = new InstallForm(null); // Request object not available to CLI // Locale Settings $this->printTitle('installer.localeSettings'); $this->readParamOptions('locale', 'locale.primary', $installForm->supportedLocales, 'en_US'); $this->readParamOptions('additionalLocales', 'installer.additionalLocales', $installForm->supportedLocales, '', true); $this->readParamOptions('clientCharset', 'installer.clientCharset', $installForm->supportedClientCharsets, 'utf-8'); $this->readParamOptions('connectionCharset', 'installer.connectionCharset', $installForm->supportedConnectionCharsets, ''); $this->readParamOptions('databaseCharset', 'installer.databaseCharset', $installForm->supportedDatabaseCharsets, ''); // File Settings $this->printTitle('installer.fileSettings'); $this->readParam('filesDir', 'installer.filesDir'); // Administrator Account $this->printTitle('installer.administratorAccount'); $this->readParam('adminUsername', 'user.username'); @`/bin/stty -echo`; do { $this->readParam('adminPassword', 'user.password'); printf("\n"); $this->readParam('adminPassword2', 'user.repeatPassword'); printf("\n"); } while ($this->params['adminPassword'] != $this->params['adminPassword2']); @`/bin/stty echo`; $this->readParam('adminEmail', 'user.email'); // Database Settings $this->printTitle('installer.databaseSettings'); $this->readParamOptions('databaseDriver', 'installer.databaseDriver', $installForm->checkDBDrivers()); $this->readParam('databaseHost', 'installer.databaseHost', ''); $this->readParam('databaseUsername', 'installer.databaseUsername', ''); $this->readParam('databasePassword', 'installer.databasePassword', ''); $this->readParam('databaseName', 'installer.databaseName'); $this->readParamBoolean('createDatabase', 'installer.createDatabase', 'Y'); // Miscellaneous Settings $this->printTitle('installer.miscSettings'); $this->readParam('oaiRepositoryId', 'installer.oaiRepositoryId'); $this->readParamBoolean('enableBeacon', 'installer.beacon.enable', 'Y'); printf("\n*** "); }
/** * Экшен начальной настройки проекта: * * @return nothing **/ public function actionSitesettings() { $model = new InstallForm('siteSettings'); if (isset($this->session['InstallForm']['siteSettings'])) { $model->setAttributes($this->session['InstallForm']['siteSettings']); if ($model->validate() && $this->session['InstallForm']['siteSettingsStep'] === true) { $this->session['InstallForm'] = array_merge($this->session['InstallForm'], ['siteSettings' => $model->attributes, 'siteSettingsStep' => false]); $this->_markFinished('sitesettings'); $this->_setSession(); $this->redirect(['/install/default/finish']); } } if (Yii::app()->getRequest()->getIsPostRequest() && isset($_POST['InstallForm'])) { $model->setAttributes($_POST['InstallForm']); if ($model->validate()) { $transaction = Yii::app()->db->beginTransaction(); try { Settings::model()->deleteAll(); $user = User::model()->admin()->findAll(); foreach (['siteDescription', 'siteName', 'siteKeyWords', 'email', 'theme', 'backendTheme'] as $param) { $settings = new Settings(); $model->email = $model->siteEmail; $settings->setAttributes(['module_id' => 'yupe', 'param_name' => $param, 'param_value' => $model->{$param}, 'user_id' => $user[0]->id]); if ($settings->save()) { continue; } else { throw new CDbException(print_r($settings->getErrors(), true)); } } $transaction->commit(); Yii::app()->getUser()->setFlash(yupe\widgets\YFlashMessages::SUCCESS_MESSAGE, Yii::t('InstallModule.install', 'Site settings saved successfully!')); // попробуем создать каталог assets $assetsPath = dirname(Yii::app()->getRequest()->getScriptFile()) . '/' . CAssetManager::DEFAULT_BASEPATH; if (!is_dir($assetsPath)) { @mkdir($assetsPath); } $this->session['InstallForm'] = array_merge($this->session['InstallForm'], ['siteSettings' => $model->attributes, 'siteSettingsStep' => true]); $this->_setSession(); $this->redirect(['/install/default/sitesettings']); } catch (CDbException $e) { $transaction->rollback(); Yii::app()->getUser()->setFlash(yupe\widgets\YFlashMessages::ERROR_MESSAGE, $e->__toString()); Yii::log($e->__toString(), CLogger::LEVEL_ERROR); $this->redirect(['/install/default/sitesettings/']); } } } else { $model->siteEmail = $model->emailName; } $this->render('_view', ['data' => ['model' => $model, 'themes' => $this->yupe->getThemes(), 'backendThemes' => $this->yupe->getThemes(true)]]); }
public function actionIndex() { if (_xls_get_conf('INSTALLED', 0) == 1) { _xls_404(); } $this->layout = "license"; $this->editSectionInstructions = ""; $this->license = $this->renderPartial("license", null, true, false); $model = new InstallForm(); $getpage = "getPage" . $model->page; $model->scenario = "page1"; $model->setScenario($this->cloudMtScenario($model->getScenario())); $formDefinition = $model->{$getpage}(); if (isset($_POST['InstallForm'])) { $model->scenario = "page" . $_POST['InstallForm']['page']; if (isset($_POST['buttonSkip']) && $_POST['InstallForm']['page'] == 4) { $model->scenario = "page-skip" . $_POST['InstallForm']['page']; } $model->setScenario($this->cloudMtScenario($model->getScenario())); $model->attributes = $_POST['InstallForm']; if ($model->validate()) { switch ($model->page) { case 1: $model->page = 2; break; case 2: $model->savePage(2); $model->page = 3; break; case 3: $model->savePage(3); $model->page = 4; break; case 4: $model->savePage(4); _xls_set_conf('INSTALLED', 1); $this->redirect($this->createUrl('license/end')); break; } if (_xls_get_conf('LIGHTSPEED_CLOUD', 0) > 0 && $model->page == 2) { $model->scenario = "page" . $model->page . "-cld"; } else { if (_xls_get_conf('LIGHTSPEED_CLOUD', 0) == 0 && _xls_get_conf('LIGHTSPEED_MT', 0) > 0 && $model->page == 2) { $model->scenario = "page" . $model->page . "-mt"; } else { $model->scenario = "page" . $model->page; } } $model->attributes = $model->readFromSession($model->page); } else { Yii::log("Install Wizard " . $model->scenario . " error " . print_r($model->getErrors(), true), 'error', 'application.' . __CLASS__ . "." . __FUNCTION__); } //Possibly after submit, refetch these items $getpage = "getPage" . $model->page; $formDefinition = $model->{$getpage}(); } foreach ($formDefinition['elements'] as $key => $value) { if ($key != "iagree") { $formDefinition['elements'][$key]['layout'] = '<div class="span3 optionlabel">{label}</div><div class="span4 optionvalue">{input}</div>{error}<div class="span2 maxhint">{hint}</div>'; } } $this->render('index', array('model' => $model, 'form' => new CForm($formDefinition, $model))); }
public function actionInstall() { if (Yii::app()->db->username) { throw new CHttpException(404, 'Система уже установлена'); } // Список требований $minPhp = '5.3'; $testFunc = array('chmod', 'mkdir', 'copy'); $disFunc = explode(',', ini_get('disable_functions')); $testExt = array('pdo', 'pdo_mysql', 'gd', 'mbstring', 'ctype'); $confFile = __DIR__ . '/../../include/db.config.inc.php'; $assetDir = __DIR__ . '/../../assets'; $runtimeDir = __DIR__ . '/../runtime'; // Проверка подключения к БД if (Yii::app()->request->isAjaxRequest) { $form = new InstallForm('test'); $form->attributes = $_POST['InstallForm']; $conn = $form->testConnect(); if ($conn !== TRUE) { Yii::app()->end('<span class="text-error">' . $conn . '</span>'); } Yii::app()->end('<span class="text-success">Соединение установлено</span>'); } $error = array(); // Проверка требований if (version_compare(PHP_VERSION, $minPhp, '<')) { $error[] = 'Вы используете PHP версию ниже рекомендуемой'; } foreach ($testFunc as $func) { if (!function_exists($func) || in_array($func, $disFunc)) { $error[] = "Недоступна функция {$func}"; } } foreach ($testExt as $ext) { if (!extension_loaded($ext)) { $error[] = "Недоступно расширение {$ext}"; } } if (!is_writable($confFile)) { if (!chmod($confFile, 0666)) { $error[] = 'Недостаточно прав для записи в конфиг'; } } if (!is_writable($assetDir)) { if (!chmod($assetDir, 0777)) { exit('Недостаточно прав для записи в папку /assets'); } } if (!is_writable($runtimeDir)) { if (!chmod($runtimeDir, 0777)) { exit('Недостаточно прав для записи в папку /protected/runtime'); } } $form = new InstallForm(); $success = FALSE; // ПОСТ? Ошибок нет? Устанавливаем! if (!count($error) && Yii::app()->request->isPostRequest) { $form->attributes = $_POST['InstallForm']; if ($form->validate()) { $res = $form->installDB(); if ($res !== TRUE) { $form->addError('', $res); } else { $success = TRUE; } } } $this->render('install', array('form' => $form, 'error' => $error, 'success' => $success)); }
<?php echo $form->labelEx($model, 'url_resource_path'); ?> <?php echo $form->textField($model, 'url_resource_path'); ?> <?php echo $form->error($model, 'url_resource_path'); ?> </div> <div class="row"> <?php echo $form->labelEx($model, 'timezone'); ?> <?php echo $form->dropDownList($model, 'timezone', InstallForm::getTimeZone()); ?> <?php echo $form->error($model, 'timezone'); ?> </div> <div class="row"> <?php echo $form->labelEx($model, 'admin_email'); ?> <?php echo $form->textField($model, 'admin_email'); ?> <?php echo $form->error($model, 'admin_email'); ?>
public function actionInstall() { global $CONFIG; // Путь к файлу конфигурации для его изменения $this->layout = "/install-layout"; $db_error = false; $model = new InstallForm; if (Yii::app()->params['installed'] !== "yes") { if (!is_writable($CONFIG)) { $model->addError("site_name", "Файл " . $CONFIG . " должен быть доступен для записи"); } if (!is_writable(Yii::getPathOfAlias('application.config.settings') . ".php")) { $model->addError("site_name", "Файл " .Yii::getPathOfAlias('application.config.settings') . ".php" . " должен быть доступен для записи"); } if (!is_writable(Yii::getPathOfAlias('application.runtime'))) { $model->addError("site_name", "папка " .Yii::getPathOfAlias('application.runtime') . " должена быть доступена для записи"); } if (!is_writable(Yii::app()->basePath . "/../assets")) { $model->addError("site_name", "папка /assets должена быть доступена для записи"); } if (isset($_POST['InstallForm'])) { $model->attributes = $_POST['InstallForm']; // данные Mysql $server = trim(stripslashes($_POST['InstallForm']['mysql_server'])); $username = trim(stripslashes($_POST['InstallForm']['mysql_login'])); $password = trim(stripslashes($_POST['InstallForm']['mysql_password'])); $db_name = trim(stripslashes($_POST['InstallForm']['mysql_db_name'])); // данные пользователя if (!$model->validate() or $model->userpass !== $model->userpass2) { $model->addError('userpass2', "Пароли не совпадают"); } if (!$model->errors) { $db_con = mysqli_connect($server, $username, $password) or $db_error = mysqli_error(); mysqli_select_db($db_con, $db_name) or $db_error = mysqli_error($db_con); } if (!$db_error and ! $model->errors) { $config_data = require $CONFIG; $dump_file = file_get_contents(Yii::getPathOfAlias('application.data.install') . '.sql'); // Сохранение данных о пользователе $dump_file.=" INSERT INTO `users` (`username`, `password`, `email`, `activkey`, `superuser`, `status`) VALUES " . "('" . $model->username . "', '" . UserModule::encrypting($model->userpass) . "', " . "'" . $model->useremail . "', '" . UserModule::encrypting(microtime() . $model->userpass) . "'," . " 1, 1);"; mysqli_multi_query($db_con, $dump_file) or $db_error = mysqli_error($db_con); if (!$db_error) { // Заполнение конфигурации $config_data['components']['db'] = array( 'connectionString' => 'mysql:host=' . $server . ';dbname=' . $db_name, 'emulatePrepare' => true, 'username' => $username, 'password' => $password, 'charset' => 'utf8', 'tablePrefix' => '', ); $config_data['name'] = trim(stripslashes($_POST['InstallForm']['site_name'])); $config_data['params'] = "require"; $config_array_str = var_export($config_data, true); $config_array_str = str_replace("'params' => 'require',", "'params' => require 'settings.php',", $config_array_str); //Сохранение конфигурации file_put_contents($CONFIG, "<? return " . $config_array_str . " ?>"); // Сохранение настроек $settings = new ConfigForm(Yii::getPathOfAlias('application.config.settings') . ".php"); $settings->updateParam('adminEmail', $model->useremail); $settings->updateParam('installed', 'yes'); $settings->saveToFile(); $this->redirect(array('site/index')); } } } $this->render('install', array('model' => $model, 'db_error' => $db_error)); } else { $this->redirect(array('site/index')); } }
/** * * @param InstallForm $installForm */ protected function createDB(InstallForm $installForm) { ob_start(); $patch = Yii::getPathOfAlias('application.migrations'); $names = scandir($patch); $db = $installForm->getCDbConnection(); foreach ($names as $name) { $exp = explode('.', $name); if (sizeof($exp) === 2) { list($className, $expr) = $exp; if ($expr === 'php') { include_once $patch . DIRECTORY_SEPARATOR . $name; if (class_exists($className)) { $migration = new $className(); $migration->setDbConnection($db); $migration->up(); } } } } ob_clean(); }