| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265 |
- <?php
- // +----------------------------------------------------------------------
- // | ThinkCMF [ WE CAN DO IT MORE SIMPLE ]
- // +----------------------------------------------------------------------
- // | Copyright (c) 2013-2019 http://www.thinkcmf.com All rights reserved.
- // +----------------------------------------------------------------------
- // | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
- // +---------------------------------------------------------------------
- // | Author: Dean <zxxjjforever@163.com>
- // +----------------------------------------------------------------------
- namespace cmf\controller;
- use think\Db;
- use app\admin\model\ThemeModel;
- use think\facade\View;
- class HomeBaseController extends BaseController
- {
- protected function initialize()
- {
- // 监听home_init
- hook('home_init');
- parent::initialize();
- $closeConfig = cmf_get_option('close_config');
- $closeConfig = $closeConfig? $closeConfig : config('weixin.site');
- $isClose = isset($closeConfig['close'])? $closeConfig['close'] : 2;
- $accessIp = isset($closeConfig['access_ip'])? $closeConfig['access_ip'] : '';
- $accessIp = $accessIp? explode(',', $accessIp) : [];
- $closeMsg = isset($closeConfig['msg'])? $closeConfig['msg'] : '<div style="width: 100%; margin-top: 20%;line-height: 100px; font-size: 24px; text-align: center;"><h2>网站正在升级维护中</h2></div>';
- $controllerName = strtolower(request()->controller());
- if($controllerName != 'notify' && $isClose==1 && (empty($accessIp) || $accessIp && !in_array(get_client_ip(),$accessIp))){
- echo '<meta name="viewport" content="width=device-width, initial-scale=1.0,minimum-scale=1.0,user-scalable=0"><title>站点维护提示</title><div id="close_msg">'.$closeMsg.'</div>'; die();
- }
- $siteInfo = cmf_get_site_info();
- $mapConfig = config('config.map');
- $mapKey = isset($mapConfig['key'])? $mapConfig['key'] : '';
- $version = config('weixin.version');
- $version = $version? $version.'.'.date('Hi') : date('YmdH');
- $this->assign('version', $version);
- View::share('mapKey', $mapKey);
- View::share('site_info', $siteInfo);
- }
- protected function _initializeView()
- {
- $cmfThemePath = config('template.cmf_theme_path');
- $cmfDefaultTheme = cmf_get_current_theme();
- $themePath = "{$cmfThemePath}{$cmfDefaultTheme}";
- $root = cmf_get_root();
- //使cdn设置生效
- $cdnSettings = cmf_get_option('cdn_settings');
- if (empty($cdnSettings['cdn_static_root'])) {
- $viewReplaceStr = [
- '__ROOT__' => $root,
- '__TMPL__' => "{$root}/{$themePath}",
- '__STATIC__' => "{$root}/static",
- '__WEB_ROOT__' => $root
- ];
- } else {
- $cdnStaticRoot = rtrim($cdnSettings['cdn_static_root'], '/');
- $viewReplaceStr = [
- '__ROOT__' => $root,
- '__TMPL__' => "{$cdnStaticRoot}/{$themePath}",
- '__STATIC__' => "{$cdnStaticRoot}/static",
- '__WEB_ROOT__' => $cdnStaticRoot
- ];
- }
- config('template.view_base', WEB_ROOT . "{$themePath}/");
- config('template.tpl_replace_string', $viewReplaceStr);
- $themeErrorTmpl = "{$themePath}/error.html";
- if (file_exists_case($themeErrorTmpl)) {
- config('dispatch_error_tmpl', $themeErrorTmpl);
- }
- $themeSuccessTmpl = "{$themePath}/success.html";
- if (file_exists_case($themeSuccessTmpl)) {
- config('dispatch_success_tmpl', $themeSuccessTmpl);
- }
- }
- /**
- * 加载模板输出
- * @access protected
- * @param string $template 模板文件名
- * @param array $vars 模板输出变量
- * @param array $replace 模板替换
- * @param array $config 模板参数
- * @return mixed
- */
- protected function fetch($template = '', $vars = [], $replace = [], $config = [])
- {
- $template = $this->parseTemplate($template);
- $more = $this->getThemeFileMore($template);
- $this->assign('theme_vars', $more['vars']);
- $this->assign('theme_widgets', $more['widgets']);
- $content = parent::fetch($template, $vars, $replace, $config);
- $designingTheme = cookie('cmf_design_theme');
- if ($designingTheme) {
- $app = $this->request->module();
- $controller = $this->request->controller();
- $action = $this->request->action();
- $output = <<<hello
- <script>
- var _themeDesign=true;
- var _themeTest="test";
- var _app='{$app}';
- var _controller='{$controller}';
- var _action='{$action}';
- var _themeFile='{$more['file']}';
- if(parent && parent.simulatorRefresh){
- parent.simulatorRefresh();
- }
- </script>
- hello;
- $pos = strripos($content, '</body>');
- if (false !== $pos) {
- $content = substr($content, 0, $pos) . $output . substr($content, $pos);
- } else {
- $content = $content . $output;
- }
- }
- return $content;
- }
- /**
- * 自动定位模板文件
- * @access private
- * @param string $template 模板文件规则
- * @return string
- */
- private function parseTemplate($template)
- {
- // 分析模板文件规则
- $request = $this->request;
- // 获取视图根目录
- if (strpos($template, '@')) {
- // 跨模块调用
- list($module, $template) = explode('@', $template);
- }
- $viewBase = config('template.view_base');
- if ($viewBase) {
- // 基础视图目录
- $module = isset($module) ? $module : $request->module();
- $path = $viewBase . ($module ? $module . DIRECTORY_SEPARATOR : '');
- } else {
- $path = isset($module) ? APP_PATH . $module . DIRECTORY_SEPARATOR . 'view' . DIRECTORY_SEPARATOR : config('template.view_path');
- }
- $depr = config('template.view_depr');
- if (0 !== strpos($template, '/')) {
- $template = str_replace(['/', ':'], $depr, $template);
- $controller = cmf_parse_name($request->controller());
- if ($controller) {
- if ('' == $template) {
- // 如果模板文件名为空 按照默认规则定位
- $template = str_replace('.', DIRECTORY_SEPARATOR, $controller) . $depr . cmf_parse_name($request->action(true));
- } elseif (false === strpos($template, $depr)) {
- $template = str_replace('.', DIRECTORY_SEPARATOR, $controller) . $depr . $template;
- }
- }
- } else {
- $template = str_replace(['/', ':'], $depr, substr($template, 1));
- }
- return $path . ltrim($template, '/') . '.' . ltrim(config('template.view_suffix'), '.');
- }
- /**
- * 获取模板文件变量
- * @param string $file
- * @param string $theme
- * @return array
- */
- private function getThemeFileMore($file, $theme = "")
- {
- //TODO 增加缓存
- $theme = empty($theme) ? cmf_get_current_theme() : $theme;
- // 调试模式下自动更新模板
- if (APP_DEBUG) {
- $themeModel = new ThemeModel();
- $themeModel->updateTheme($theme);
- }
- $themePath = config('template.cmf_theme_path');
- $file = str_replace('\\', '/', $file);
- $file = str_replace('//', '/', $file);
- $webRoot = str_replace('\\', '/', WEB_ROOT);
- $themeFile = str_replace(['.html', '.php', $themePath . $theme . "/", $webRoot], '', $file);
- $files = Db::name('theme_file')->field('more')->where('theme', $theme)
- ->where(function ($query) use ($themeFile) {
- $query->where('is_public', 1)->whereOr('file', $themeFile);
- })->select();
- $vars = [];
- $widgets = [];
- foreach ($files as $file) {
- $oldMore = json_decode($file['more'], true);
- if (!empty($oldMore['vars'])) {
- foreach ($oldMore['vars'] as $varName => $var) {
- $vars[$varName] = $var['value'];
- }
- }
- if (!empty($oldMore['widgets'])) {
- foreach ($oldMore['widgets'] as $widgetName => $widget) {
- $widgetVars = [];
- if (!empty($widget['vars'])) {
- foreach ($widget['vars'] as $varName => $var) {
- $widgetVars[$varName] = $var['value'];
- }
- }
- $widget['vars'] = $widgetVars;
- //如果重名,则合并配置
- if (empty($widgets[$widgetName])) {
- $widgets[$widgetName] = $widget;
- } else {
- foreach ($widgets[$widgetName] as $key => $value) {
- if (is_array($widget[$key])) {
- $widgets[$widgetName][$key] = array_merge($widgets[$widgetName][$key], $widget[$key]);
- } else {
- $widgets[$widgetName][$key] = $widget[$key];
- }
- }
- }
- }
- }
- }
- return ['vars' => $vars, 'widgets' => $widgets, 'file' => $themeFile];
- }
- public function checkUserLogin()
- {
- $userId = cmf_get_current_user_id();
- if (empty($userId)) {
- if ($this->request->isAjax()) {
- $this->error("您尚未登录", cmf_url("user/Login/index"));
- } else {
- $this->redirect(cmf_url("user/Login/index"));
- }
- }
- }
- }
|