/** * 查询插件的某些属性,比如 插件的版本信息,财付通支付插件是否支持 网银直连 * * @param array $paramArray * @param $smarty * * @return mixed|null */ function smarty_helper_function_query_plugin_feature_var(array $paramArray, $smarty) { $varName = isset($paramArray['varName']) ? $paramArray['varName'] : ''; unset($paramArray['varName']); $uniqueId = isset($paramArray['uniqueId']) ? $paramArray['uniqueId'] : ''; unset($paramArray['uniqueId']); $command = isset($paramArray['command']) ? $paramArray['command'] : ''; unset($paramArray['command']); if (empty($varName) || empty($uniqueId) || empty($command)) { throw new InvalidArgumentException('must provide varName, uniqueId, command'); } $varValue = null; if (empty($uniqueId) || !($pluginInstance = \Core\Plugin\PluginHelper::getPluginInstanceByUniqueId($uniqueId))) { goto out; } // execute command to get result $varValue = $pluginInstance->pluginCommand($command, $paramArray); out: $smarty->assign($varName, $varValue); }
} $smarty->setCaching(Smarty::CACHING_OFF); } // 初始化 logger $logger = new \Core\Log\Wrapper(); /** * 用一个简单的全局函数方便日志的输出 * * @param string $msg 日志消息 * @param string $source 日志的来源,比如 'SQL' * @param string $level 日志等级 * * */ function printLog($msg, $source = '', $level = \Core\Log\Base::INFO) { global $logger; $logger->addLogInfo($level, $source, $msg); } // option 我们使用数据库实现 \Core\Plugin\Option\OptionHelper::setOptionDriver(new \Core\Plugin\Option\OptionDbDriver()); // 设置插件所在的路径 \Core\Plugin\PluginHelper::addPluginDir(PROTECTED_PATH . '/Plugin'); // 系统自带的插件 // 设置 Theme 所在的路径 \Core\Plugin\ThemeHelper::addPluginDir(PROTECTED_PATH . '/Theme'); // 加载运行环境变量设置 $f3->config(PROTECTED_PATH . '/Config/env.cfg'); // 加载全局变量设置 $f3->config(PROTECTED_PATH . '/Config/common.cfg'); // 根据环境变量的不同,加载对应的环境变量设置,开发环境和生产环境的配置显然是不一样的 $f3->config(PROTECTED_PATH . '/Config/common-' . $f3->get('sysConfig[env]') . '.cfg');
// 开启 Smarty Web Log BzfDebug::enableSmartyWebLog(); } } // ---------------------------------------- 4. 加载显示主题 -------------------------------------- $themeIntance = ThemeHelper::loadSystemTheme(ThemeHelper::SYSTEM_SUPPLIER_THEME); if (!$themeIntance) { die('没有正确设置 ' . ThemeHelper::SYSTEM_SUPPLIER_THEME . ' 主题'); } // 调用主题自己的初始化方法 $themeLoadRet = $themeIntance->pluginLoad(PluginHelper::SYSTEM_SUPPLIER); if (true !== $themeLoadRet) { die(ThemeHelper::SYSTEM_SUPPLIER_THEME . ' 主题无法初始化:' . $themeLoadRet); } // 调用主题的 action $themeActionRet = $themeIntance->pluginAction(PluginHelper::SYSTEM_SUPPLIER); if (true !== $themeActionRet) { die(ThemeHelper::SYSTEM_SUPPLIER_THEME . ' 主题无法加载:' . $themeActionRet); } // ---------------------------------------- 5. 加载系统插件 -------------------------------------- // 这里我们加载额外的插件 PluginHelper::loadActivePlugin(PluginHelper::SYSTEM_SUPPLIER); // 执行插件的 action 方法,让插件能完成各种注册 PluginHelper::doActivePluginAction(PluginHelper::SYSTEM_SUPPLIER); // ---------------------------------------- 6. 启动整个系统 -------------------------------------- // 启动控制器 $f3->run(); // 执行完成,卸载插件 PluginHelper::unloadActivePlugin(PluginHelper::SYSTEM_SUPPLIER); // 执行完成,卸载主题 $themeIntance->pluginUnload(PluginHelper::SYSTEM_SUPPLIER);
/** * 加载所有 active 的插件 * * @param string $system 系统的标识 * */ public static function loadActivePlugin($system) { $activePluginArray = PluginHelper::getActivePluginArray(); if (empty($activePluginArray)) { return; } foreach ($activePluginArray as $activePlugin) { $instance = static::loadPluginInstance($activePlugin); if (!$instance) { printLog('load plugin [' . $activePlugin . '] failed', 'PLUGIN', \Core\Log\Base::ERROR); continue; } //调用插件的 load 方法做初始化 if (true !== $instance->pluginLoad($system)) { // 如果加载失败,就不要做后面的操作了 unset($instance); continue; } global $f3; if ($f3->get('DEBUG')) { printLog('load plugin [' . $activePlugin . '] success', 'PLUGIN', \Core\Log\Base::DEBUG); } // 把插件放入到列表中 static::$pluginInstanceArray[$activePlugin] = $instance; unset($instance); } }
die(ThemeHelper::SYSTEM_MOBILE_THEME . ' 主题无法初始化:' . $themeLoadRet); } // 调用主题的 action $themeActionRet = $themeIntance->pluginAction(PluginHelper::SYSTEM_MOBILE); if (true !== $themeActionRet) { die(ThemeHelper::SYSTEM_MOBILE_THEME . ' 主题无法加载:' . $themeActionRet); } // ---------------------------------------- 5. 加载系统插件 -------------------------------------- // 这里我们加载额外的插件 PluginHelper::loadActivePlugin(PluginHelper::SYSTEM_MOBILE); // 执行插件的 action 方法,让插件能完成各种注册 PluginHelper::doActivePluginAction(PluginHelper::SYSTEM_MOBILE); // ----------------------------- 6. 把系统安装的主题当作插件一样加载上来,用于不同主题之间互相合作---------------- ThemeHelper::loadActiveTheme(PluginHelper::SYSTEM_MOBILE, ThemeHelper::getSystemThemeDirName(ThemeHelper::SYSTEM_MOBILE_THEME)); ThemeHelper::doActiveThemeAction(PluginHelper::SYSTEM_MOBILE); // ---------------------------------------- 7. 启动整个系统 -------------------------------------- // 是否开启 URL 伪静态化 if ($f3->get('sysConfig[enable_static_url][' . PluginHelper::SYSTEM_MOBILE . ']')) { RouteHelper::$isMakeStaticUrl = true; // 我们开启 URL 伪静态化 RouteHelper::processStaticUrl(); // 解析静态化的 URL } // 启动控制器 $f3->run(); // unload 系统 active 的主题插件 ThemeHelper::unloadActiveTheme(PluginHelper::SYSTEM_MOBILE); // 执行完成,卸载插件 PluginHelper::unloadActivePlugin(PluginHelper::SYSTEM_MOBILE); // 执行完成,卸载主题 $themeIntance->pluginUnload(PluginHelper::SYSTEM_MOBILE);
} // 调用主题的 action $themeActionRet = $themeIntance->pluginAction(PluginHelper::SYSTEM_SHOP); if (true !== $themeActionRet) { die(ThemeHelper::SYSTEM_SHOP_THEME . ' 主题无法加载:' . $themeActionRet); } // ---------------------------------------- 5. 加载系统插件 -------------------------------------- // 在这里启动插件体系架构 // 这里我们加载额外的插件 PluginHelper::loadActivePlugin(PluginHelper::SYSTEM_SHOP); // 执行插件的 action 方法,让插件能完成各种注册 PluginHelper::doActivePluginAction(PluginHelper::SYSTEM_SHOP); // ----------------------------- 6. 把系统安装的主题当作插件一样加载上来,用于不同主题之间互相合作---------------- ThemeHelper::loadActiveTheme(PluginHelper::SYSTEM_SHOP, ThemeHelper::getSystemThemeDirName(ThemeHelper::SYSTEM_SHOP_THEME)); ThemeHelper::doActiveThemeAction(PluginHelper::SYSTEM_SHOP); // ---------------------------------------- 7. 启动整个系统 -------------------------------------- // 是否开启 URL 伪静态化 if ($f3->get('sysConfig[enable_static_url][' . PluginHelper::SYSTEM_SHOP . ']')) { RouteHelper::$isMakeStaticUrl = true; // 我们开启 URL 伪静态化 RouteHelper::processStaticUrl(); // 解析静态化的 URL } // 启动控制器 $f3->run(); // unload 系统 active 的主题插件 ThemeHelper::unloadActiveTheme(PluginHelper::SYSTEM_SHOP); // 执行完成,卸载插件 PluginHelper::unloadActivePlugin(PluginHelper::SYSTEM_SHOP); // 执行完成,卸载主题 $themeIntance->pluginUnload(PluginHelper::SYSTEM_SHOP);
public function UpdatePlugin($f3) { // 权限检查,有权限安装就有权限升级 $this->requirePrivilege('manage_plugin_plugin_installplugin'); // 参数验证 $validator = new Validator($f3->get('GET')); $pluginDirName = $validator->required()->validate('pluginDirName'); if (!$this->validate($validator)) { goto out; } $pluginInstance = PluginHelper::loadPluginInstance($pluginDirName); if (!$pluginInstance) { $this->addFlashMessage('插件[' . $pluginDirName . ']无效'); goto out; } // 调用插件操作 $ret = $pluginInstance->pluginUpdate(); if (true !== $ret) { $this->addFlashMessage('插件[' . $pluginDirName . ']升级失败:' . $ret); goto out; } $this->addFlashMessage('插件升级成功'); out: RouteHelper::reRoute($this, RouteHelper::getRefer(), false); }
require_once PROTECTED_PATH . '/Framework/Debug/BzfDebug.php'; // 开启 debug 功能 BzfDebug::enableDebug(); // 开启 Smarty Web Log BzfDebug::enableSmartyWebLog(); } } // ---------------------------------------- 4. 加载显示主题 -------------------------------------- // 加载主题自己的初始化文件 $themeLoadFile = PROTECTED_PATH . '/Theme/' . $f3->get('sysConfig[theme]') . '/theme_load.php'; if (is_file($themeLoadFile)) { require_once $themeLoadFile; } else { die('系统主题设置错误'); } // ---------------------------------------- 5. 加载系统插件 -------------------------------------- // 这里我们加载额外的插件 PluginHelper::loadActivePlugin(PluginHelper::SYSTEM_MANAGE); // 执行插件的 action 方法,让插件能完成各种注册 PluginHelper::doActivePluginAction(PluginHelper::SYSTEM_MANAGE); // ---------------------------------------- 6. 把系统安装的主题当作插件一样加载上来,用于主题管理配置---------------- ThemeHelper::loadInstallTheme(PluginHelper::SYSTEM_MANAGE); ThemeHelper::doInstallThemeAction(PluginHelper::SYSTEM_MANAGE); // ---------------------------------------- 7. 启动整个系统 -------------------------------------- // 启动控制器 $f3->run(); // unload 系统安装的主题 ThemeHelper::unloadInstallTheme(PluginHelper::SYSTEM_MANAGE); // 执行完成,unload 插件 PluginHelper::unloadActivePlugin(PluginHelper::SYSTEM_MANAGE);