196 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			196 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
 | 
						|
namespace addons\third;
 | 
						|
 | 
						|
use addons\third\library\Service;
 | 
						|
use app\common\library\Auth;
 | 
						|
use app\common\library\Menu;
 | 
						|
use think\Addons;
 | 
						|
use think\Db;
 | 
						|
use think\Request;
 | 
						|
use think\Session;
 | 
						|
 | 
						|
/**
 | 
						|
 * 第三方登录
 | 
						|
 */
 | 
						|
class Third extends Addons
 | 
						|
{
 | 
						|
 | 
						|
    protected static $html = ['register' => '', 'profile' => ''];
 | 
						|
 | 
						|
    /**
 | 
						|
     * 插件安装方法
 | 
						|
     * @return bool
 | 
						|
     */
 | 
						|
    public function install()
 | 
						|
    {
 | 
						|
        $menu = [
 | 
						|
            [
 | 
						|
                'name'    => 'third',
 | 
						|
                'title'   => '第三方登录管理',
 | 
						|
                'icon'    => 'fa fa-users',
 | 
						|
                'sublist' => [
 | 
						|
                    [
 | 
						|
                        "name"  => "third/index",
 | 
						|
                        "title" => "查看"
 | 
						|
                    ],
 | 
						|
                    [
 | 
						|
                        "name"  => "third/del",
 | 
						|
                        "title" => "删除"
 | 
						|
                    ]
 | 
						|
                ]
 | 
						|
            ]
 | 
						|
        ];
 | 
						|
        Menu::create($menu);
 | 
						|
        return true;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * 插件卸载方法
 | 
						|
     * @return bool
 | 
						|
     */
 | 
						|
    public function uninstall()
 | 
						|
    {
 | 
						|
        Menu::delete("third");
 | 
						|
        return true;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * 插件启用方法
 | 
						|
     * @return bool
 | 
						|
     */
 | 
						|
    public function enable()
 | 
						|
    {
 | 
						|
        Menu::enable("third");
 | 
						|
        return true;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * 插件禁用方法
 | 
						|
     * @return bool
 | 
						|
     */
 | 
						|
    public function disable()
 | 
						|
    {
 | 
						|
        Menu::disable("third");
 | 
						|
        return true;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * 删除第三方登录表的关联数据
 | 
						|
     */
 | 
						|
    public function userDeleteSuccessed(\app\common\model\User $user)
 | 
						|
    {
 | 
						|
        \addons\third\model\Third::where('user_id', $user->id)->delete();
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * 移除第三方登录信息
 | 
						|
     */
 | 
						|
    public function userLogoutSuccessed(\app\common\model\User $user)
 | 
						|
    {
 | 
						|
        Session::delete(["wechat-userinfo", "qq-userinfo", "weibo-userinfo"]);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * 模块开始
 | 
						|
     */
 | 
						|
    public function moduleInit()
 | 
						|
    {
 | 
						|
        $config = $this->getConfig();
 | 
						|
        if (!$config['status']) {
 | 
						|
            return;
 | 
						|
        }
 | 
						|
        $request = Request::instance();
 | 
						|
 | 
						|
        $module = strtolower($request->module());
 | 
						|
        $controller = strtolower($request->controller());
 | 
						|
        $action = strtolower($request->action());
 | 
						|
        if ($module !== 'index' || $controller !== 'user' || !in_array($action, ['login', 'register'])) {
 | 
						|
            return;
 | 
						|
        }
 | 
						|
        $url = $request->get('url', $request->server('HTTP_REFERER', '', 'trim'), 'trim');
 | 
						|
        $data = [
 | 
						|
            'status' => explode(',', $config['status']),
 | 
						|
            'url'    => $url
 | 
						|
        ];
 | 
						|
        self::$html['register'] = $this->view->fetch('view/hook/user_register_end', $data);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * 方法开始
 | 
						|
     */
 | 
						|
    public function actionBegin()
 | 
						|
    {
 | 
						|
        $config = $this->getConfig();
 | 
						|
        if (!$config['status']) {
 | 
						|
            return;
 | 
						|
        }
 | 
						|
        $request = Request::instance();
 | 
						|
 | 
						|
        $module = strtolower($request->module());
 | 
						|
        $controller = strtolower($request->controller());
 | 
						|
        $action = strtolower($request->action());
 | 
						|
        if ($module !== 'index' || $controller !== 'user' || !in_array($action, ['profile'])) {
 | 
						|
            return;
 | 
						|
        }
 | 
						|
        $platform = \addons\third\model\Third::where('user_id', Auth::instance()->id)->column('platform');
 | 
						|
 | 
						|
        // 微信判断apptype
 | 
						|
        if (in_array('wechat', $platform)) {
 | 
						|
            $wechatApptypeArr = \addons\third\model\Third::where('user_id', Auth::instance()->id)->where('platform', 'wechat')->column('apptype');
 | 
						|
            $apptype = Service::getApptype();
 | 
						|
            if (!in_array($apptype, $wechatApptypeArr)) {
 | 
						|
                $platform = array_diff($platform, ['wechat']);
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        $data = [
 | 
						|
            'status'   => explode(',', $config['status']),
 | 
						|
            'platform' => $platform
 | 
						|
        ];
 | 
						|
        self::$html['profile'] = $this->view->fetch('view/hook/user_profile_end', $data);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * 配置
 | 
						|
     * @param $params
 | 
						|
     */
 | 
						|
    public function configInit(&$params)
 | 
						|
    {
 | 
						|
        // 兼容旧版本FastAdmin
 | 
						|
        $config = $this->getConfig();
 | 
						|
        $module = strtolower(request()->module());
 | 
						|
        $controller = strtolower(request()->controller());
 | 
						|
        $action = strtolower(request()->action());
 | 
						|
        $loginhtml = version_compare(config('fastadmin.version'), '1.3.0', '<') > 0 && $module === 'index' && $controller === 'user' && in_array($action, ['login', 'register']) ? self::$html['register'] : '';
 | 
						|
        $params['third'] = ['status' => explode(',', $config['status']), 'loginhtml' => $loginhtml];
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * HTML替换
 | 
						|
     */
 | 
						|
    public function viewFilter(&$content)
 | 
						|
    {
 | 
						|
        $config = $this->getConfig();
 | 
						|
        if (!$config['status']) {
 | 
						|
            return;
 | 
						|
        }
 | 
						|
        $request = Request::instance();
 | 
						|
 | 
						|
        $module = strtolower($request->module());
 | 
						|
        $controller = strtolower($request->controller());
 | 
						|
        $action = strtolower($request->action());
 | 
						|
        if ($module !== 'index' || $controller !== 'user') {
 | 
						|
            return;
 | 
						|
        }
 | 
						|
        if (in_array($action, ['login', 'register'])) {
 | 
						|
            $html = self::$html['register'] ?? '';
 | 
						|
            $content = preg_replace('/<!\-\-@(IndexRegisterFormEnd|IndexLoginFormEnd)\-\->/i', "\$0\n" . $html, $content);
 | 
						|
        } elseif ($action === 'profile') {
 | 
						|
            $html = self::$html['profile'] ?? '';
 | 
						|
            $content = str_replace("<div class=\"form-group normal-footer\">", "{$html}<div class=\"form-group normal-footer\">", $content);
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
}
 |