Вход Регистрация
Файл: protected/modules/install/controllers/DefaultController.php
Строк: 165
<?php
/* 
 * Контроллер установки блога
 */

class DefaultController extends CController
{
    
/*
     * Макет страницы
     */
    
public $layout 'install_layout';

    
/*
     * Действие по умолчанию
     */
    
public $defaultAction 'Step1';

    
/*
     * Выводить ли аналог title вверху страницы
     */
    
public $printTopTitle TRUE;



    
/*
     * Переменная с подключением к БД (CDbConnection)
     */
    
private $_db;



    
/*
     * Заливка таблиц
     */
    
private function _dumpTables ($prefix)
    {
        echo 
preg_replace ('#!!!prefix!!!#u'$prefixfile_get_contents (Yii::getPathOfAlias ('application.data') . '/schema.mysql.sql'));
        exit;

        
/*
        $this->_db->active = TRUE;
         */

        /*$db = $this->_db;
        $query = $db->createCommand (preg_replace ('#!!!prefix!!!#u', $prefix, file_get_contents (Yii::getPathOfAlias ('application.data') . '/schema.mysql.sql')));
        $query->execute ();
         /*

        $this->_db->active = FALSE;
        $this->_db->active = TRUE;

        // Заливаем внешние ключи
        $query2 = $db->createCommand (preg_replace ('#!!!prefix!!!#u', $prefix, file_get_contents (Yii::getPathOfAlias ('application.data') . '/foreign_keys.sql')));
        $query2->execute ();
         */

        //$this->_db->exec (preg_replace ('#!!!prefix!!!#u', $prefix, file_get_contents (Yii::getPathOfAlias ('application.data') . '/schema.mysql.sql')));
    
}



    
/*
     * Шаг 1. Проверка прав доступа
     * А так же автоматическая их настройка (если получится)
     */
    
public function actionStep1 ()
    {
        
// Массив с путем к файлу и нужными правами
        
$filesPerms = array (
            
'/protected/runtime' => 707,
            
            
'/protected/config' => 707,
            
'/protected/config/install.php' => 707,
            
            
'/protected/modules/install' => 707,
            
            
'/protected/modules/install/controllers' => 707,
            
'/protected/modules/install/controllers/DefaultController.php' => 707,
            
            
'/protected/modules/install/extensions' => 707,
            
            
'/protected/modules/install/extensions/Config_Lite' => 707,
            
'/protected/modules/install/extensions/Config_Lite/Config_Lite.php' => 707,
            
'/protected/modules/install/extensions/Config_Lite/Lite' => 707,
            
'/protected/modules/install/extensions/Config_Lite/Lite/Exception.php' => 707,
            
'/protected/modules/install/extensions/Config_Lite/Lite/Exception' => 707,
            
'/protected/modules/install/extensions/Config_Lite/Lite/Exception/InvalidArgument.php' => 707,
            
'/protected/modules/install/extensions/Config_Lite/Lite/Exception/Runtime.php' => 707,
            
'/protected/modules/install/extensions/Config_Lite/Lite/Exception/UnexpectedValue.php' => 707,
            
            
'/protected/modules/install/extensions/rmDir' => 707,
            
'/protected/modules/install/extensions/rmDir/rmDir.php' => 707,
            
            
'/protected/modules/install/models' => 707,
            
'/protected/modules/install/models/ConfigForm.php' => 707,
            
            
'/protected/modules/install/views' => 707,
            
            
'/protected/modules/install/views/default' => 707,
            
'/protected/modules/install/views/default/step1.php' => 707,
            
'/protected/modules/install/views/default/step2_1.php' => 707,
            
'/protected/modules/install/views/default/step2_2.php' => 707,
            
'/protected/modules/install/views/default/step3.php' => 707,
            
'/protected/modules/install/views/default/step4.php' => 707,
            
            
'/protected/modules/install/views/layouts' => 707,
            
'/protected/modules/install/views/layouts/install_layout.php' => 707,
            
            
            
'/protected/modules/install/InstallModule.php' => 707,
        );

        
$this->render ('step1', array (
            
'filesPerms' => $filesPerms,
            
'runtime' => '/protected/runtime'
        
));
    }

    
/*
     * Шаг 2
     * Сохранение настроек подключения к БД в ini файл
     * Заливка таблиц
     */
    
public function actionStep2 ()
    {
        
/*
        // Если подключение настроено, выводим сообщение о необходимости заливки таблиц
        if (file_exists (APP_ROOT . '/protected/config/' . ConfigForm::$configFile))
        {
            $this->actionDumpTables ();
        }
        // Если нет, предлагаем настроить подключение
        else
        {
         */
        
$model = new ConfigForm;

        if (isset (
$_POST["config"]))
        {
            
$model->attributes $_POST["config"];
            if (
$model->validate ())
            {
                
// Сохраняем настройки в ini файл
                
$model->saveToIniFile ();

                
// Создаем подключение к БД
                //$this->_db = new CDbConnection ('mysql:host=' . $model->host . ';dbname=' . $model->database, $model->username, $model->password);
                //$this->_db = new PDO ('mysql:host=' . $model->host . ';dbname=' . $model->database, $model->username, $model->password);
                

                // Заливаем таблицы
                //$this->_dumpTables ($model->prefix);

                //$this->actionDumpTables ();

                //$this->actionStep3 ();
                
$this->redirect (array ('step3'));
                
Yii::app ()->end ();
            }
        }
        
$this->render ('step2_1', array ('model' => $model));
        
//}
    
}



    
/*
     * Выводим сообщение о необходимости заливки таблиц
     * Вообще-то они должны заливаться сами из скрипта, но при заливке таблиц с внешними ключами, он ведет себя неадекватно
     * Как только проблема будет решена, в скрипте уже есть средства для автоматической заливки
     */
    
protected  function actionDumpTables ()
    {
        
$is_dump file_exists (APP_ROOT '/protected/config/' ConfigForm::$configFile);
        
// Если подключение настроено, выводим сообщение о необходимости заливки таблиц
        
$this->render ('step2_2', array (
            
'is_dump' => $is_dump
        
));
    }



    
/*
     * Шаг 3
     * Регистрация админа
     */
    
public function actionStep3 ()
    {
        
// Назначаем всем классам Active Record подключение к БД
        //CActiveRecord::$db = $this->_db;

        
Yii::import ('application.models.User');
        
$model = new User;
        
        if (isset (
$_POST["user"]))
        {
            
$model->attributes $_POST["user"];
            if (
$model->save ())
            {
                
$this->actionStep4 ();
                
//$this->redirect (array ('step4'));
                
Yii::app ()->end ();
            }
        }
        
$this->render ('step3', array ('model' => $model));
    }

    
/*
     * Шаг 4
     * Удаление всех связанных с установкой данных
     * Выполняется автоматически после Шага 2
     */
    
public function actionStep4 ()
    {
        
$this->render ('step4');

        
/*
         * Удаляем данные
         * ВНИМАНИЕ!!! Делайте бекапы при тестировании или комментируйте строки
         */
        
Yii::import ('install.extensions.rmDir.*');
        
        
unlink (Yii::getPathOfAlias ('application.config.install') . '.php');
        
        
rmDir::delete (Yii::getPathOfAlias ('application.modules.install'));// !!!!!!!!Внимание, эта строка удаляет установщик!!!
    
}
}
Онлайн: 1
Реклама