123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- <?php
- /**
- * Created by PhpStorm.
- * User: 中闽 < 1464674022@qq.com >
- * Date: 2020/2/4
- * Time: 12:47
- */
- namespace app\common\command;
- use app\admin\model\Admin;
- use app\common\model\Templet;
- use file\DirHelper;
- use think\console\input\Argument;
- use think\console\Command;
- use think\console\Input;
- use think\console\input\Option;
- use think\console\Output;
- use think\Db;
- use think\Env;
- use file\ZipHelper;
- class InstallDemo extends Command
- {
- /**
- * 安装测试数据
- * php think InstallDemo
- */
- protected function configure()
- {
- $this->setName('InstallDemo')
- ->addOption('delete', 'd', Option::VALUE_NONE, 'delete data')//清空数据,仅测试时使用,线上使用后记得跑路
- ->addArgument('admin_pass', Argument::OPTIONAL, "admin password", "123456")//需要验证管理员密码
- ->addArgument('demo_name', Argument::OPTIONAL, "demo source name", "blog_demo")//安装包名
- ->setDescription('install test data & demo');
- }
- protected function execute(Input $input, Output $output)
- {
- //验证管理员密码
- $admin = Admin::get(1);
- if (!$admin || $admin->password != password($input->getArgument("admin_pass"))) {
- $output->writeln("<error>admin pass error</error>");
- return;
- }
- if ($input->getOption("delete")) {
- //清空数据
- $prefix = \think\Env::get("db_prefix", "");
- Db::execute("TRUNCATE {$prefix}admin_log");
- Db::execute("TRUNCATE {$prefix}article");
- Db::execute("TRUNCATE {$prefix}article_cate");
- Db::execute("TRUNCATE {$prefix}attachment");
- Db::execute("TRUNCATE {$prefix}catalog");
- Db::execute("TRUNCATE {$prefix}cate_catalog");
- Db::execute("TRUNCATE {$prefix}config");
- Db::execute("TRUNCATE {$prefix}config_option");
- Db::execute("TRUNCATE {$prefix}config_tab");
- Db::execute("TRUNCATE {$prefix}messages");
- Db::execute("TRUNCATE {$prefix}point_log");
- Db::execute("TRUNCATE {$prefix}user");
- $output->writeln("delete success");
- } else {
- $demo_name = $input->getArgument("demo_name");
- $source = APP_PATH . "install/data/$demo_name.zip";
- if (!file_exists($source)) {
- $output->error("demo source not exists");
- exit;
- }
- //解压
- $dest = APP_PATH . 'install/data/';
- if (false === (new ZipHelper())->unzip($source, $dest)) {
- $output->error("unzip fail");
- exit;
- }
- //复制static
- $source = APP_PATH . "install/data/$demo_name/static";
- $dest = Templet::DEFAULT_STATIC_PATH . 'static';
- DirHelper::copyDir($source, $dest);
- //复制template
- $source = APP_PATH . "install/data/$demo_name/template";
- $dest = Templet::getTempletDir();
- DirHelper::copyDir($source, $dest);
- //connect db
- $db_prefix = Env::get('db_prefix', 'tplay_');
- $db_name = Env::get('db_name', 'tplay');
- $search = [
- "tplay_",
- "USE `tplay`",
- "CREATE DATABASE IF NOT EXISTS `tplay`",
- ];
- $replace = [
- $db_prefix,
- "USE `" . $db_name . "`",
- "CREATE DATABASE IF NOT EXISTS `" . $db_name . "`",
- ];
- //导入sql
- $demo_sql = file_get_contents(APP_PATH . "install/data/$demo_name/db.sql");
- $sql_array = preg_split("/;[\r\n]+/", str_replace($search, $replace, $demo_sql));
- foreach ($sql_array as $k => $v) {
- if (!empty($v)) {
- Db::query($v);
- }
- }
- $output->writeln("install success");
- }
- }
- }
|