* @Copyright (c) 2020~2023 https://www.aieok.com All rights reserved. */ namespace app\admin\controller; use app\common\controller\AdminController; use think\facade\View; use think\facade\Db; use think\facade\Session; use think\facade\Request; use think\facade\Cache; use think\facade\Lang; use app\admin\model\Cunsult; use think\facade\Config; use taoler\com\Api; use app\common\lib\facade\HttpHelper; class Index extends AdminController { protected $sys_version; protected $pn; protected $sys; protected $domain; protected $api; public function __construct() { //控制器初始化显示左侧导航菜单 parent::initialize(); $this->sys_version = Config::get('taoler.version'); $this->pn = Config::get('taoler.appname'); $this->sys = $this->getSystem(); $this->domain = $this->getHttpUrl($this->sys['domain']); $this->api = $this->sys['api_url']; if(empty($this->api)){ $baseUrl = $this->sys['base_url']; $this->api = strstr($baseUrl,'/v',true); } } public function index() { return View::fetch('index'); } public function console1() { return View::fetch('console1'); } public function console2() { // 评论、帖子状态 $comm = Db::name('comment')->field('id')->where(['delete_time'=>0,'status'=>0])->select(); $forum = Db::name('article')->field('id')->where(['delete_time'=>0,'status'=>0])->select(); $user = Db::name('user')->field('id')->where(['delete_time'=>0,'status'=>0])->select(); View::assign([ 'pendComms' => count($comm), 'pendForums' => count($forum), 'pendUser' => count($user), ]); return View::fetch('console2'); } public function set() { return view(); } public function message() { return view(); } public function home() { // 评论、帖子状态 $comm = Db::name('comment')->field('id')->where(['delete_time'=>0,'status'=>0])->select(); $forum = Db::name('article')->field('id')->where(['delete_time'=>0,'status'=>0])->select(); $comms = count($comm); $forums = count($forum); // 用户注册数据 $monthTime = Cache::get('monthTime'); if(!$monthTime){ $time = Db::name('user')->where('delete_time',0)->whereMonth('create_time')->order('create_time','asc')->column('create_time'); $monthTime = [];//当月有注册的日期 foreach($time as $v){// $data = date('m-d',$v); if(!in_array($data,$monthTime)){ $monthTime[] = $data; }; } $userDayCount = [];//每天注册用户数 foreach($monthTime as $d){ $userArr = Db::name('user')->whereDay('create_time',date("Y").'-'.$d)->select(); $userDayCount[] = count($userArr); } $monthTime = implode(',',$monthTime); //数组转字符串 $monthUserCount = implode(',',$userDayCount); Cache::set('monthTime',$monthTime,3600); Cache::set('monthUserCount',$monthUserCount,3600); } View::assign(['comms'=>$comms,'forums'=>$forums,'monthTime'=>$monthTime,'monthUserCount'=>Cache::get('monthUserCount')]); return View::fetch(); } /** * 系统升级检测 * @return mixed|string */ public function sysUpgradeCheck() { $data = ['pn'=>$this->pn,'ver'=>$this->sys_version]; $response = HttpHelper::withHost()->get('/v1/upload/check', $data)->toJson(); if($response->code !== -1){ return $response->code ? "有{$response->up_num}个版本需更新,当前可更新至{$response->version}" : $response->msg; } else { return lang('No new messages'); } } /** * 检测 * @return mixed|string */ public function check() { if(empty($this->sys['key'])) return json(['code' => -1, 'msg' => '请配置网站KEY']); $data = ['u'=>$this->sys['domain'],'key'=>$this->sys['key']]; $response = HttpHelper::withHost()->get('/v1/cy', $data)->toJson(); if($response->code == 0){ Db::name('system')->save(['id' => 1, 'clevel' => $response->data->level]); return json(['code' => 0, 'msg' => $response->data->info, 'data' => $response->data]); } else { return json(['code' => -1, 'msg' => $response->msg]); } } //本周发帖 public function forums() { $forumList = Db::name('article') ->alias('a') ->join('user u','a.user_id = u.id') ->join('cate c','a.cate_id = c.id') ->field('a.id as aid,title,name,ename,catename,pv') ->where('a.delete_time',0) ->whereWeek('a.create_time') ->order('a.create_time', 'desc') ->paginate(10); $res = []; $count = $forumList->total(); if($count){ $res['code'] = 0; $res['msg'] = ''; $res['count'] = $count; foreach($forumList as $k=>$v){ //$url = (string) str_replace("admin","index",$this->domain.url('article/detail',['id'=>$v['aid']])); $url = $this->getRouteUrl($v['aid'],$v['ename']); $res['data'][]= ['id'=>$url,'title'=>htmlspecialchars($v['title']),'name'=>$v['name'],'catename'=>$v['catename'],'pv'=>$v['pv']]; } } else { $res = ['code'=>-1,'msg'=>'本周还没有发帖!']; } return json($res); } //本周评论 public function replys() { if(Request::isAjax()){ $replys = Db::name('comment') ->alias('a') ->join('user u','a.user_id = u.id') ->join('article c','a.article_id = c.id') ->join('cate ca','c.cate_id = ca.id') ->field('a.content as content,title,c.id as cid,name,ename') ->where('c.delete_time',0) ->whereWeek('a.create_time') ->order('a.create_time', 'desc') ->paginate(10); $count = $replys->total(); $res = []; if ($count) { $res = ['code'=>0,'msg'=>'','count'=>$count]; foreach($replys as $k => $v){ $res['data'][] = ['content'=>htmlspecialchars($v['content']),'title'=>htmlspecialchars($v['title']),'cid'=>$this->getRouteUrl($v['cid'],$v['ename']),'name'=>$v['name']]; } } else { $res = ['code'=>-1,'msg'=>'本周还没评论']; } return json($res); } } //动态信息 public function news() { $data = Request::only(['page', 'limit']); $url = $this->api.'/v1/news?'.'page='.$data['page'].'&'.'limit='.$data['limit']; $news = Cache::get('news'.$data['page'].'_'.$data['limit']); if(empty($news)){ $news = Api::urlGet($url); if($news->code == 0){ Cache::set('news'.$data['page'].'_'.$data['limit'],$news,600); } } return $news; } //提交反馈 public function cunsult() { $url = $this->api.'/v1/reply'; if(Request::isAjax()){ $data = Request::only(['type','title','content','post','uid']); $apiRes = Api::urlPost($url,$data); $data['poster'] = Session::get('admin_id'); unset($data['post']); if($apiRes){ $res = Cunsult::create($data); if($res->id){ //$result = mailto($mail,$data['title'],'我的问题类型是'.$data['type'].$data['content']); $res = ['code'=>0,'msg'=>$apiRes->msg]; } else { $res = ['code'=>0,'msg'=>$apiRes->msg]; } } else { $res = ['code'=>-1,'msg'=>'失败,请稍后再试提交...']; } return json($res); } } //问题和反馈 public function reply() { if(Request::isAjax()) { $replys = Db::name('cunsult') ->whereWeek('create_time') ->order('create_time', 'desc') ->paginate(10); $count = $replys->total(); $res = []; if ($count) { $res = ['code'=>0,'msg'=>'','count'=>$count]; foreach($replys as $k => $v){ $res['data'][] = ['id'=>$v['id'],'content'=>$v['content'],'title'=>$v['title'],'time'=>Date('Y-m-d',$v['create_time'])]; } } else { $res = ['code'=>-1,'msg'=>'本周还没问题']; } return json($res); } } //删除反馈 public function delReply() { if(Request::isAjax()){ $res = Db::name('cunsult')->delete(input('id')); if($res){ $res = ['code'=>0,'msg'=>'删除成功!']; }else{ $res = ['code'=>-1,'msg'=>'删除失败!']; } return json($res); } } // 系统调试 public function sysSys() { $status = input('status'); //打开调试 $env = root_path().'.env'; $app = config_path().'app.php'; if(file_exists($env)){ $str = file_get_contents($env); $appStr = file_get_contents($app); $patk = '/APP_DEBUG[^\r?\n]*/'; $appPatk = '/'.'exception_tmpl'.'[^\r?\n]*/'; if($status == 'true'){ $reps = 'APP_DEBUG = true'; $appArr = "exception_tmpl' => app()->getThinkPath() . 'tpl/think_exception.tpl',"; } else { $reps = 'APP_DEBUG = false'; $appArr = "exception_tmpl' => app()->getAppPath() . '404.html',"; } $str = preg_replace($patk, $reps, $str); file_put_contents($env, $str); $appStr = preg_replace($appPatk, $appArr, $appStr); $res = file_put_contents($app, $appStr) ? true : false; if($res == true){ return json(['code'=>0,'msg'=>'设置成功']); } else { return json(['code'=>-1,'msg'=>'开启失败']); } } } public function layout(){ return view(); } }