|
|
<?php
|
|
|
// +----------------------------------------------------------------------
|
|
|
// | bronet [ 以客户为中心 以奋斗者为本 ]
|
|
|
// +----------------------------------------------------------------------
|
|
|
// | Copyright (c) 2013-2017 http://www.bronet.cn All rights reserved.
|
|
|
// +----------------------------------------------------------------------
|
|
|
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
|
|
|
// +---------------------------------------------------------------------
|
|
|
// | Author: Tiger
|
|
|
// +----------------------------------------------------------------------
|
|
|
namespace cmf\controller;
|
|
|
|
|
|
use app\user\model\UserModel;
|
|
|
use EasyWeChat\Foundation\Application;
|
|
|
use think\Db;
|
|
|
use app\admin\model\ThemeModel;
|
|
|
use think\View;
|
|
|
|
|
|
class WeChatBaseController extends BaseController
|
|
|
{
|
|
|
|
|
|
public function _initialize()
|
|
|
{
|
|
|
// 监听home_init
|
|
|
hook('home_init');
|
|
|
parent::_initialize();
|
|
|
$siteInfo = cmf_get_site_info();
|
|
|
View::share('site_info', $siteInfo);
|
|
|
}
|
|
|
|
|
|
public function _initializeView()
|
|
|
{
|
|
|
$cmfThemePath = config('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
|
|
|
];
|
|
|
}
|
|
|
|
|
|
$viewReplaceStr = array_merge(config('view_replace_str'), $viewReplaceStr);
|
|
|
config('template.view_base', "{$themePath}/");
|
|
|
config('view_replace_str', $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']);
|
|
|
return parent::fetch($template, $vars, $replace, $config);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 自动定位模板文件
|
|
|
* @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 . DS : '');
|
|
|
} else {
|
|
|
$path = isset($module) ? APP_PATH . $module . DS . 'view' . DS : 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('.', DS, $controller) . $depr . $request->action();
|
|
|
} elseif (false === strpos($template, $depr)) {
|
|
|
$template = str_replace('.', DS, $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('cmf_theme_path');
|
|
|
$file = str_replace('\\', '/', $file);
|
|
|
$file = str_replace('//', '/', $file);
|
|
|
$file = str_replace(['.html', '.php', $themePath . $theme . "/"], '', $file);
|
|
|
|
|
|
$files = Db::name('theme_file')->field('more')->where(['theme' => $theme])->where(function ($query) use ($file) {
|
|
|
$query->where(['is_public' => 1])->whereOr(['file' => $file]);
|
|
|
})->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;
|
|
|
$widgets[$widgetName] = $widget;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return ['vars' => $vars, 'widgets' => $widgets];
|
|
|
}
|
|
|
|
|
|
public function checkUserLogin()
|
|
|
{
|
|
|
$userId = cmf_get_current_user_id();
|
|
|
if (empty($userId)) {
|
|
|
$this->error("用户尚未登录", url("user/login/index"));
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 检查微信用户登录
|
|
|
*/
|
|
|
public function checkWeChatUserLogin()
|
|
|
{
|
|
|
$userId = cmf_get_current_user_id();
|
|
|
if (empty($userId)) {
|
|
|
$config = [
|
|
|
'oauth' => [
|
|
|
'scopes' => ['snsapi_userinfo'],
|
|
|
'callback' => '/oauth_callback',
|
|
|
],
|
|
|
];
|
|
|
|
|
|
$app = new Application($config);
|
|
|
$oauth = $app->oauth;
|
|
|
$target_url='http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
|
|
|
session('target_url',$target_url);
|
|
|
return $oauth->redirect();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
} |
|
|
\ No newline at end of file |
...
|
...
|
|