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'); }
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'); }
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; }