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