Example #1
0
 public function run(array $params)
 {
     global $f3;
     // 1. reset 整个数据库
     printLog('Begin Reset Database', 'ResetData');
     $dbEngine = DataMapper::getDbEngine();
     // 解析 sql 文件,导入数据
     $sqlFileContent = file_get_contents(CONSOLE_PATH . '/../install/Asset/data/bzfshop.sql');
     $sqlFileContent = SqlHelper::removeComment($sqlFileContent);
     $sqlArray = SqlHelper::splitToSqlArray($sqlFileContent, ';');
     unset($sqlFileContent);
     foreach ($sqlArray as $sqlQuery) {
         $queryObject = $dbEngine->prepare($sqlQuery);
         $queryObject->execute();
         unset($sqlQuery);
         unset($queryObject);
     }
     unset($sqlArray);
     printLog('End Reset Database', 'ResetData');
     // 2. 删除 /data 目录下的所有目录
     printLog('remove everything under /data', 'ResetData');
     $this->removeAllDirInsideDir($f3->get('sysConfig[data_path_root]'));
     // 3. 删除 RunTime 目录下所有目录
     printLog('remove everything in Runtime', 'ResetData');
     $this->removeAllDirInsideDir($f3->get('sysConfig[runtime_path]') . DIRECTORY_SEPARATOR . 'Log/');
     $this->removeAllDirInsideDir($f3->get('sysConfig[runtime_path]') . DIRECTORY_SEPARATOR . 'Smarty/');
     $this->removeAllDirInsideDir($f3->get('sysConfig[runtime_path]') . DIRECTORY_SEPARATOR . 'Temp/');
     // 4. 清除 F3 的缓存
     $f3->clear('CACHE');
     printLog('ResetData Done', 'ResetData');
 }
Example #2
0
 public function post($f3)
 {
     // 参数验证
     $validator = new Validator($f3->get('POST'));
     $dbHost = $validator->validate('dbHost');
     $dbPort = $validator->validate('dbPort');
     $dbName = $validator->validate('dbName');
     // 系统通用的配置
     $sysConfig = $validator->validate('sysConfig');
     if (!$this->validate($validator)) {
         goto out_fail;
     }
     try {
         // 对云平台要做特殊处理
         if (CloudHelper::CLOUD_ENGINE_SAE == CloudHelper::$currentEngineStr) {
             $dbPdo = 'mysql:host=' . SAE_MYSQL_HOST_M . ';port=' . SAE_MYSQL_PORT . ';dbname=' . SAE_MYSQL_DB;
             $sysConfig['db_username'] = SAE_MYSQL_USER;
             $sysConfig['db_password'] = SAE_MYSQL_PASS;
             goto import_data;
         }
         if (CloudHelper::CLOUD_ENGINE_BAE3 == CloudHelper::$currentEngineStr) {
             $sysConfig['db_username'] = $sysConfig['bae3_api_key'];
             $sysConfig['db_password'] = $sysConfig['bae3_secret_key'];
         }
         // 检查是否需要创建数据库
         $dbPdo = 'mysql:host=' . $dbHost . ';port=' . $dbPort;
         $dbEngine = new \Core\Modal\DbEngine($dbPdo, $sysConfig['db_username'], $sysConfig['db_password']);
         // 检查数据库是否存在,从而确定我们是否应该新建一个数据库
         $shouldCreateDatabase = true;
         $databaseArray = $dbEngine->exec('SHOW DATABASES');
         foreach ($databaseArray as $databaseItem) {
             if ($databaseItem['Database'] == $dbName) {
                 $shouldCreateDatabase = false;
                 break;
             }
         }
         if ($shouldCreateDatabase) {
             // 在这里创建一个新的数据库
             $dbEngine->exec('CREATE DATABASE ' . $dbName);
         }
         // 重新初始化数据库连接
         unset($dbPdo);
         unset($dbEngine);
         $dbPdo = 'mysql:host=' . $dbHost . ';port=' . $dbPort . ';dbname=' . $dbName;
         // 更新配置文件 env.cfg
         $filePath = INSTALL_PATH . '/../protected/Config/env.cfg';
         $fileContent = file_get_contents($filePath);
         $fileContent = preg_replace('/sysConfig\\[env\\]="[^"]*"/', 'sysConfig[env]="prod"', $fileContent);
         file_put_contents($filePath, $fileContent);
         // 更新配置文件 common-prod.cfg
         $filePath = INSTALL_PATH . '/../protected/Config/common-prod.cfg';
         $fileContent = file_get_contents($filePath);
         $fileContent = preg_replace('/sysConfig\\[db_pdo\\]="[^"]*"/', 'sysConfig[db_pdo]="' . $dbPdo . '"', $fileContent);
         // 清除 demo 配置
         $fileContent = preg_replace('/sysConfig\\[is_demo\\]=1/', 'sysConfig[is_demo]=0', $fileContent);
         // 清除 Cache 的设置
         $sysConfig['cache'] = '';
         foreach ($sysConfig as $key => $value) {
             $fileContent = preg_replace('/sysConfig\\[' . $key . '\\]="[^"]*"/', 'sysConfig[' . $key . ']="' . $value . '"', $fileContent);
         }
         file_put_contents($filePath, $fileContent);
         import_data:
         // 这里完成导入数据的工作
         $pdoObject = new \PDO($dbPdo, $sysConfig['db_username'], $sysConfig['db_password']);
         // 解析 sql 文件,导入数据
         $sqlFileContent = file_get_contents(INSTALL_PATH . '/Asset/data/bzfshop.sql');
         $sqlFileContent = SqlHelper::removeComment($sqlFileContent);
         $sqlArray = SqlHelper::splitToSqlArray($sqlFileContent, ';');
         foreach ($sqlArray as $sqlQuery) {
             $pdoObject->exec($sqlQuery);
         }
         unset($pdoObject);
     } catch (\PDOException $e) {
         $this->addFlashMessage($e->getMessage());
         goto out_fail;
     }
     $this->addFlashMessage('数据导入成功');
     // 成功,进入到下一步
     RouteHelper::reRoute($this, '/Install/Step4');
     return;
     out_fail:
     // 失败从这里退出
     global $smarty;
     $smarty->assign('currentEngineStr', CloudHelper::$currentEngineStr);
     $smarty->display('install_step3.tpl');
 }
Example #3
0
        public function doUpdate($currentVersion)
        {
            // 更新数据库表
            $sqlFileContent = <<<SQL
-- 创建 cron 任务列表
CREATE TABLE IF NOT EXISTS `bzf_cron_task` (
  `task_id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
  `user_name` varchar(32) DEFAULT NULL COMMENT '哪个用户添加的',
  `task_name` varchar(16) DEFAULT NULL COMMENT '任务名称',
  `task_desc` varchar(128) DEFAULT NULL COMMENT '任务描述',
  `task_time` int(10) unsigned NOT NULL DEFAULT 0 COMMENT '任务设定时间',
  `task_run_time` int(10) unsigned NOT NULL DEFAULT 0 COMMENT '任务实际运行时间',
  `task_class` varchar(128) NOT NULL COMMENT '任务的PHP Class',
  `task_param` text DEFAULT NULL,
  `search_param` varchar(64) DEFAULT NULL COMMENT '用于任务搜索',
  `return_code` int DEFAULT 0 COMMENT '任务设定时间',
  `return_message` varchar(128) DEFAULT NULL COMMENT '任务返回消息',

  PRIMARY KEY (`task_id`)
) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

ALTER TABLE `bzf_cron_task` ADD INDEX ( `task_name` ) ;
ALTER TABLE `bzf_cron_task` ADD INDEX ( `task_time` ) ;
ALTER TABLE `bzf_cron_task` ADD INDEX ( `task_run_time` ) ;
ALTER TABLE `bzf_cron_task` ADD INDEX ( `search_param` ) ;
ALTER TABLE `bzf_cron_task` ADD INDEX ( `return_code` ) ;

-- 记录管理员的行为
CREATE TABLE IF NOT EXISTS `bzf_admin_log` (
  `log_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `user_id` mediumint(8) unsigned NOT NULL ,
  `user_name` varchar(60) DEFAULT NULL ,
  `operate` varchar(16) DEFAULT NULL COMMENT '操作名称',
  `operate_desc` varchar(128) DEFAULT NULL COMMENT '操作描述',
  `operate_time` int(10) unsigned NOT NULL DEFAULT 0 COMMENT '操作时间',
  `operate_data` text DEFAULT NULL COMMENT '操作的数据记录',
  PRIMARY KEY (`log_id`)
) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
ALTER TABLE `bzf_admin_log` ADD INDEX ( `user_id` ) ;
ALTER TABLE `bzf_admin_log` ADD INDEX ( `operate` ) ;
ALTER TABLE `bzf_admin_log` ADD INDEX ( `operate_time` ) ;

-- 修改价格表,增加价格说明
ALTER TABLE `bzf_goods` ADD `shop_price_notice` VARCHAR( 32 ) NULL DEFAULT NULL COMMENT '价格说明' AFTER `shop_price`;
ALTER TABLE `bzf_goods` ADD `type_id` SMALLINT( 5 ) NOT NULL DEFAULT '0' COMMENT '商品类型' AFTER `cat_id`;

-- 修改 brand 表
ALTER TABLE `bzf_brand` CHANGE `sort_order` `sort_order` TINYINT( 3 ) UNSIGNED NOT NULL DEFAULT '0';
ALTER TABLE `bzf_brand` CHANGE `brand_logo` `brand_logo` VARCHAR( 128 ) NULL DEFAULT NULL ;
ALTER TABLE `bzf_brand` CHANGE `brand_desc` `brand_desc` VARCHAR( 255 ) NULL DEFAULT NULL ;
ALTER TABLE `bzf_brand` ADD `is_custom` int NULL DEFAULT 0 COMMENT '是否自定义页面';
ALTER TABLE `bzf_brand` ADD `custom_page` TEXT NULL DEFAULT NULL COMMENT '品牌自定义页面';

-- 增加 goods_attr 表记录商品的属性值
CREATE TABLE IF NOT EXISTS `bzf_goods_attr` (
  `goods_attr_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `goods_id` int(10) unsigned NOT NULL DEFAULT '0',
  `attr_item_id` int(10) unsigned NOT NULL DEFAULT '0',
  `attr_item_value` varchar(128) NULL,
  PRIMARY KEY (`goods_attr_id`),
  KEY `goods_id` (`goods_id`),
  KEY `attr_item_id` (`attr_item_id`),
  KEY `attr_item_value` (`attr_item_value`)
) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

SQL;
            $dbEngine = DataMapper::getDbEngine();
            // 解析 sql 文件,导入数据
            $sqlFileContent = SqlHelper::removeComment($sqlFileContent);
            $sqlArray = SqlHelper::splitToSqlArray($sqlFileContent, ';');
            unset($sqlFileContent);
            foreach ($sqlArray as $sqlQuery) {
                $queryObject = $dbEngine->prepare($sqlQuery);
                $queryObject->execute();
                unset($sqlQuery);
                unset($queryObject);
            }
            unset($sqlArray);
            // 权限管理
            $metaPrivilegeService = new MetaPrivilegeService();
            // 删除不用的权限
            $metaPrivilegeService->removePrivilegeItem('manage_goods_attrgroup_listattrgroup');
            $metaPrivilegeService->removePrivilegeItem('manage_goods_attrgroup_create');
            $metaPrivilegeService->removePrivilegeItem('manage_goods_attrgroup_edit');
            // 添加执行权限
            $privilegeGroup = $metaPrivilegeService->loadPrivilegeGroup('manage_misc');
            $metaPrivilegeService->savePrivilegeItem($privilegeGroup['meta_id'], 'manage_misc_cron', '定时任务', '管理系统的定时任务');
            $privilegeGroup = $metaPrivilegeService->loadPrivilegeGroup('manage_account');
            $metaPrivilegeService->savePrivilegeItem($privilegeGroup['meta_id'], 'manage_account_admin_listlog', '管理员日志', '查看管理员的操作日志');
            $privilegeGroup = $metaPrivilegeService->loadPrivilegeGroup('manage_goods');
            $metaPrivilegeService->savePrivilegeItem($privilegeGroup['meta_id'], 'manage_goods_brand_listbrand', '商品品牌', '管理商品品牌');
            $metaPrivilegeService->savePrivilegeItem($privilegeGroup['meta_id'], 'manage_goods_type_listtype', '商品类型', '管理商品类型');
            // 把版本设置为 1.0.1
            ManageThemePlugin::saveOptionValue('version', $this->targetVersion);
            return true;
        }