| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237 | 
							- <?php
 
- /**
 
-  * Created by PhpStorm.
 
-  * User:  NODELOG
 
-  * Date: 16/7/6
 
-  * Time: 下午3:35
 
-  */
 
- namespace console\controllers;
 
- use common\modules\user\models\User;
 
- use yii\console\Controller;
 
- use Yii;
 
- use yii\helpers\Console;
 
- class AppController extends Controller
 
- {
 
-     public $defaultAction = 'install';
 
-     public $writablePaths = [
 
-         '@root/web/assets',
 
-         '@root/web/admin/assets',
 
-         '@root/web/storage',
 
-         '@root/cache',
 
-         '@api/runtime',
 
-         '@backend/runtime',
 
-         '@frontend/runtime',
 
-         '@wechat/runtime',
 
-     ];
 
-     public $executablePaths = [
 
-         '@root/yii',
 
-     ];
 
-     public $envPath = '@root/.env';
 
-     public $installFile = '@root/web/storage/install.txt';
 
-     /**
 
-      * 设置可写
 
-      */
 
-     public function actionSetWritable()
 
-     {
 
-         $this->setWritable($this->writablePaths);
 
-     }
 
-     /**
 
-      * 设置可执行
 
-      */
 
-     public function actionSetExecutable()
 
-     {
 
-         $this->setExecutable($this->executablePaths);
 
-     }
 
-     /**
 
-      * 设置cookie加密key
 
-      */
 
-     public function actionSetKeys()
 
-     {
 
-         $this->setKeys($this->envPath);
 
-     }
 
-     public function setWritable($paths)
 
-     {
 
-         foreach ($paths as $writable) {
 
-             $writable = Yii::getAlias($writable);
 
-             Console::output("Setting writable: {$writable}");
 
-             @chmod($writable, 0777);
 
-         }
 
-     }
 
-     public function setExecutable($paths)
 
-     {
 
-         foreach ($paths as $executable) {
 
-             $executable = Yii::getAlias($executable);
 
-             Console::output("Setting executable: {$executable}");
 
-             @chmod($executable, 0755);
 
-         }
 
-     }
 
-     public function setKeys($file)
 
-     {
 
-         $file = Yii::getAlias($file);
 
-         Console::output("Generating keys in {$file}");
 
-         $content = file_get_contents($file);
 
-         $content = preg_replace_callback('/<generated_key>/', function () {
 
-             $length = 32;
 
-             $bytes = openssl_random_pseudo_bytes(32, $cryptoStrong);
 
-             return strtr(substr(base64_encode($bytes), 0, $length), '+/', '_-');
 
-         }, $content);
 
-         file_put_contents($file, $content);
 
-     }
 
-     /**
 
-      * 设置数据库
 
-      * @throws \yii\base\InvalidConfigException
 
-      */
 
-     public function actionSetDb()
 
-     {
 
-         do {
 
-             $dbHost = $this->prompt('dbhost(默认为中括号内的值)' . PHP_EOL, ['default' => '127.0.0.1']);
 
-             $dbPort = $this->prompt('dbport(默认为中括号内的值)' . PHP_EOL, ['default' => '3306']);
 
-             $dbDbname = $this->prompt('dbname(不存在则自动创建)' . PHP_EOL, ['default' => 'yii']);
 
-             $dbUsername = $this->prompt('dbusername(默认为中括号内的值)' . PHP_EOL, ['default' => 'root']);
 
-             $dbPassword = $this->prompt('dbpassword' . PHP_EOL);
 
-             $dbDsn = "mysql:host={$dbHost};port={$dbPort}";
 
-         } while(!$this->testConnect($dbDsn, $dbDbname, $dbUsername, $dbPassword));
 
-         $dbDsn = "mysql:host={$dbHost};port={$dbPort};dbname={$dbDbname}";
 
-         $dbTablePrefix = $this->prompt('tableprefix(默认为中括号内的值)' . PHP_EOL, ['default' => 'yii2cmf_']);
 
-         $this->setEnv('DB_USERNAME', $dbUsername);
 
-         $this->setEnv('DB_PASSWORD', $dbPassword);
 
-         $this->setEnv('DB_TABLE_PREFIX', $dbTablePrefix);
 
-         $this->setEnv('DB_DSN', $dbDsn);
 
-         Yii::$app->set('db', Yii::createObject([
 
-                 'class' => 'yii\db\Connection',
 
-                 'dsn' => $dbDsn,
 
-                 'username' => $dbUsername,
 
-                 'password' => $dbPassword,
 
-                 'tablePrefix' => $dbTablePrefix,
 
-                 'charset' => 'utf8'
 
-             ])
 
-         );
 
-     }
 
-     public function testConnect($dsn = '', $dbname, $username = '', $password = '')
 
-     {
 
-         try{
 
-             $pdo = new \PDO($dsn, $username, $password);
 
-             $sql = "CREATE DATABASE IF NOT EXISTS {$dbname} DEFAULT CHARSET utf8 COLLATE utf8_general_ci;";
 
-             $pdo->query($sql);
 
-         } catch(\Exception $e) {
 
-             $this->stderr("\n" . $e->getMessage(), Console::FG_RED);
 
-             $this->stderr("\n  ... 连接失败,核对数据库信息.\n\n", Console::FG_RED, Console::BOLD);
 
-             return false;
 
-         }
 
-         return true;
 
-     }
 
-     public function setEnv($name, $value)
 
-     {
 
-         $file = Yii::getAlias($this->envPath);
 
-         $content = preg_replace("/({$name}\s*=)\s*(.*)/", "\${1}$value", file_get_contents($file));// \${1}修复后边跟数字的bug
 
-         file_put_contents($file, $content);
 
-     }
 
-     public function checkInstalled()
 
-     {
 
-         return file_exists(Yii::getAlias($this->installFile));
 
-     }
 
-     public function setInstalled()
 
-     {
 
-         file_put_contents(Yii::getAlias($this->installFile), time());
 
-     }
 
-     // 重置安装
 
-     public function resetInstall()
 
-     {
 
-         $this->run('/migrate/down', ['all', 'interactive' => false]);
 
-         @unlink(Yii::getAlias($this->installFile));
 
-         @unlink(Yii::getAlias($this->envPath));
 
-     }
 
-     // 安装
 
-     public function actionInstall()
 
-     {
 
-         if ($this->checkInstalled()) {
 
-             $this->stdout("\n  ... 已经安装过.\n\n", Console::FG_RED);
 
-             die;
 
-         }
 
-         $start = <<<STR
 
- +==========================================+
 
- | Welcome to setup yii2cmf         |
 
- | 欢迎使用 yii2cmf 安装程序     |
 
- +------------------------------------------+
 
- | Follow the on-screen instructions please |
 
- | 请按照屏幕上的提示操作以完成安装         |
 
- +==========================================+
 
- STR;
 
-         $this->stdout($start, Console::FG_GREEN);
 
-         copy(Yii::getAlias('@root/.env.example'), Yii::getAlias($this->envPath));
 
-         $this->runAction('set-writable', ['interactive' => $this->interactive]);
 
-         $this->runAction('set-executable', ['interactive' => $this->interactive]);
 
-         $this->runAction('set-keys', ['interactive' => $this->interactive]);
 
-         $this->runAction('set-db', ['interactive' => $this->interactive]);
 
-         $appStatus = $this->select('设置当前应用模式', ['dev' => 'dev', 'prod' => 'prod']);
 
-         $this->setEnv('YII_DEBUG', $appStatus == 'prod' ? 'false' : 'true');
 
-         $this->setEnv('YII_ENV', $appStatus);
 
-         // 迁移
 
-         Yii::$app->runAction('migrate/up', ['interactive' => false]);
 
-         //创建默认用户
 
-         $this->runAction('create-admin', ['interactive' => $this->interactive]);
 
-         $this->setEnv('SITE_URL', $this->prompt('siteUrl'));
 
-         // 清缓存
 
-         Yii::$app->runAction('cache/flush-all', ['interactive' => false]);
 
-         $this->setInstalled();
 
-         $end = <<<STR
 
- +=================================================+
 
- | Installation completed successfully, Thanks you |
 
- | 安装成功,感谢选择和使用 yii2cmf              |
 
- +------------------------------------------+
 
- | 默认后台账号:hehe  密码: 111111
 
- +=================================================+
 
- STR;
 
-         $this->stdout($end, Console::FG_GREEN);
 
-     }
 
-     public function actionCreateAdmin()
 
-     {
 
-         $user = new User();
 
-         $user->setScenario("create");
 
-         $user->email = 'hehe@hehe.com';
 
-         $user->username = 'hehe';
 
-         $user->password = '111111';
 
-         $user->create();
 
-     }
 
-     public function actionReset()
 
-     {
 
-         if (!$this->checkInstalled()) {
 
-             $this->stdout("\n  ... 还没安装.\n\n", Console::FG_RED);
 
-             die;
 
-         }
 
-         if ($this->confirm('确定要重置安装状态吗?')) {
 
-             $this->resetInstall();
 
-         }
 
-     }
 
-     public function actionUpdate()
 
-     {
 
-         \Yii::$app->runAction('migrate/up', ['interactive' => $this->interactive]);
 
-     }
 
- }
 
 
  |