Автор: vench
Наследование: extends CFormModel
Пример #1
0
 /**
  * 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();
     }
 }
Пример #2
0
 /**
  * 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*** ");
 }
Пример #4
0
 /**
  * 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*** ");
 }
Пример #5
0
 /**
  * Экшен начальной настройки проекта:
  *
  * @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)]]);
 }
Пример #6
0
 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)));
 }
Пример #7
0
 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));
 }
Пример #8
0
		<?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');
?>
Пример #9
0
    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'));
        }
    }
Пример #10
0
 /**
  * 
  * @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();
 }