* @Date: 2021-12-06 16:04:50 * @LastEditTime: 2022-07-24 11:06:14 * @LastEditors: TaoLer * @Description: 搜索引擎SEO优化设置 * @FilePath: \TaoLer\app\admin\controller\Set.php * Copyright (c) 2020~2022 http://www.aieok.com All rights reserved. */ namespace app\admin\controller; use app\common\controller\AdminController; use think\facade\View; use think\facade\Request; use think\facade\Db; use think\facade\Cache; use think\facade\Config; use app\admin\model\System; use app\admin\model\MailServer; use taoler\com\Files; use think\facade\Session; use think\facade\Cookie; use taoser\SetArr; use app\common\lib\SetArr as SetArrConf; class Set extends AdminController { protected function initialize() { parent::initialize(); $this->sysInfo = $this->getSystem(); } //网站设置显示 public function index() { $mailserver = MailServer::find(1); $template = Files::getDirName('../view'); $email = Db::name('admin')->where('id',1)->value('email'); // 应用映射 $index_map = array_search('index',config('app.app_map')); $admin_map = array_search('admin',config('app.app_map')); $index_map = $index_map ? $index_map : ''; $admin_map = $admin_map ? $admin_map : ''; View::assign(['sysInfo'=>$this->sysInfo,'mailserver'=>$mailserver,'template'=>$template,'email'=>$email,'index_map'=>$index_map,'admin_map'=>$admin_map]); // 域名绑定 if(!empty(config('app.domain_bind'))){ $data = array_flip(config('app.domain_bind')); $domain_bind = [ 'index' => isset($data['index']) ? $data['index'] : '', 'admin' => isset($data['admin']) ? $data['admin'] : '', ]; } else { $domain_bind = [ 'index' => '', 'admin' => '', ]; } View::assign($domain_bind); // url美化 $urlArr = config('taoler.url_rewrite'); $urlRe = []; foreach($urlArr as $k => $v) { if(!empty($v)) { $urlRe[$k] = substr($v, 0, strrpos($v, '/')); } else { $urlRe[$k] = ''; } } View::assign('url_re',$urlRe); return View::fetch('set/system/website'); } //网站设置 public function website() { if(Request::isPost()){ $data = Request::only(['webname','domain','template','cache','upsize','uptype','blackname','webtitle','keywords','descript','state','icp','showlist','copyright']); $system = new System(); $result = $system->sets($data,$this->sysInfo['clevel']); if($result == 1){ return json(['code'=>0,'msg'=>'更新成功']); } else { return json(['code'=>-1,'msg'=>$result]); } } } //综合设置 public function server() { return View::fetch('set/system/server'); } /**邮箱设置 * parem $id */ public function email() { $mailserver = MailServer::find(1); //邮箱配置 if(Request::isAjax()){ $data = Request::only(['host','port','mail','nickname','password']); $res = $mailserver->save($data); if($res){ return json(['code'=>0,'msg'=>'更新成功']); } else { return json(['code'=>-1,'msg'=>'更新失败']); } } } /** * 发验证码 * * @return void */ public function sendMailCode() { if(Request::isPost()){ $email = Request::param('email'); $code = mt_rand('1111','9999'); Cache::set('test_code',$code,600); $result = mailto($email,'邮箱服务配置','Hi亲爱的管理员:
您正在配置您站点的邮箱服务,配置成功后,可以收到来自网站的发帖,评论等即时信息。请在10分钟内把激活码填入激活码框内,您的激活码为:'.$code); if($result){ $res = ['code'=>0,'msg'=>'请去邮箱获取测试码']; }else{ $res = ['code'=>-1,'msg'=>'邮箱配置错误或无服务能力,请排查!']; } } return json($res); } /** * 邮件激活 * * @return void */ public function activeMailServer() { if(Request::isPost()){ $eCode = Request::param('code'); $sCode = Cache::get('test_code'); if($eCode == $sCode){ $result = Db::name('mail_server')->update(['id'=>1,'active'=>1]); if($result){ $res = ['code'=>0,'msg'=>'邮箱服务激活成功']; } else { $res = ['code'=>-1,'msg'=>'激活服务出错!']; } }else{ $res = ['code'=>-1,'msg'=>'激活码错误!!!']; } } return json($res); } /**基础服务配置 * parem $id */ public function config() { $conf = Config::get('taoler.config'); if(Request::isPost()){ $data = Request::param(); if(!isset($data['regist_check'])) $data['regist_check'] =1; if(!isset($data['posts_check'])) $data['posts_check'] =1; if(!isset($data['commnets_check'])) $data['commnets_check'] =1; foreach($conf as $c=>$f){ if(array_key_exists($c,$data)){ $conf[$c] = (int) $data[$c]; }else{ $conf[$c] = 0; } } $value = [ 'config'=>$conf ]; $result = SetArr::name('taoler')->edit($value); if($result){ $res = ['code'=>0,'msg'=>'配置成功']; } else { $res = ['code'=>-1,'msg'=>'配置出错!']; } return json($res); } } // 域名绑定 public function setDomain() { $str = file_get_contents(str_replace('\\', '/', app()->getConfigPath() . 'app.php')); if(Request::isPost()){ $data = Request::only(['index','admin','domain_check']); //$data = Request::param(); //dump($data); if($data['domain_check'] == 'on') { // 过滤空项目 $domain_bind = []; if(!empty($data['index'])){ $domain_bind[$data['index']] ='index'; if(config('app.default_app') == $domain_bind[$data['index']]) { if(empty($data['admin'])) { return json(['code'=>-1, 'msg'=>'默认应用和Index一致时必须绑定Admin域名,否则无法进入后台']); } } } if(!empty($data['admin'])){ $domain_bind[$data['admin']] ='admin'; } // 匹配整个domain_map数组 $pats_domain_bind = '/\'(domain_bind)\'[^\]]*\],/'; // 空数组 $rep_domain_null = "'domain_bind'\t=> [\n\t],"; $str = preg_replace($pats_domain_bind, $rep_domain_null, $str); // 匹配'domain_bind' => [ $pats = '/\'(domain_bind)\'\s*=>\s*\[\r?\n/'; preg_match($pats,$str,$arr); // 拼接数组内字符串 $domainArr = ''; foreach($domain_bind as $k => $v){ $domainArr .= "\t\t'". $k. "' => '" . $v . "',\n"; } // 追加组成新数组写入文件 $reps = $arr[0].$domainArr; $str = preg_replace($pats, $reps, $str); $res = file_put_contents(app()->getConfigPath() . 'app.php', $str); // 如果编辑了后台 ,需要清理退出缓存 if(!empty($domain_bind[$data['admin']])) { //清空缓存 Cookie::delete('adminAuth'); Session::clear(); } } else { $res = SetArr::name('app')->delete([ 'domain_bind'=> config('app.domain_bind'), ]); } if($res == true){ return json(['code'=>0,'msg'=>'成功']); } else{ return json(['code'=>-1,'msg'=>'失败']); } } } /** * 绑定应用映射 * * @return void */ public function bindMap() { $data = Request::only(['index_map','admin_map']); $str = file_get_contents(str_replace('\\', '/', app()->getConfigPath() . 'app.php')); // 过滤空项目 $app_map = []; if(!empty($data['index_map'])){ $app_map[$data['index_map']]='index'; } if(!empty($data['admin_map'])){ $app_map[$data['admin_map']] ='admin'; } //halt($app_map); // $set = new SetArrConf('app'); // $res = $set->delete(['app_map' => config('app.app_map')])->add([ // 'app_map' => $app_map, // ])->put(); // halt($res); // 匹配整个app_map数组 $pats_app_map = '/\'(app_map)\'[^\]]*\],/'; preg_match($pats_app_map,$str,$arr_map); // 空数组 $rep_map_null = "'app_map'\t=> [\n\t],"; $str = preg_replace($pats_app_map, $rep_map_null, $str); // 匹配'app_map' => [ $pats = '/\'(app_map)\'\s*=>\s*\[\r?\n/'; preg_match($pats,$str,$arr); // 拼接数组内字符串 $appArr = ''; foreach($app_map as $k => $v){ $appArr .= "\t\t'". $k. "' => '" . $v . "',\n"; } // 追加组成新数组写入文件 $reps = $arr[0].$appArr; $str = preg_replace($pats, $reps, $str); $res = file_put_contents(app()->getConfigPath() . 'app.php', $str); if(!$res) { return json(['code'=>-1,'msg'=>'绑定失败']); } return json(['code'=>0,'msg'=>'绑定成功']); } /** * URL美化,设置访问链接 * * @return void */ public function setUrl() { $data = Request::only(['article_as','cate_as']); $arr = []; foreach($data as $k => $v) { if(!empty($v)) { $arr['url_rewrite'][$k] = $v . '/'; } else { $arr['url_rewrite'][$k] = ''; } } if(empty($arr['url_rewrite']['cate_as'])) return json(['code'=>-1,'msg'=>'分类不能为空']); if(!array_key_exists('url_rewrite',config('taoler'))){ $result = SetArr::name('taoler')->add($arr); } else { $result = SetArr::name('taoler')->edit($arr); } if($result){ $res = ['code'=>0,'msg'=>'配置成功']; } else { $res = ['code'=>-1,'msg'=>'配置出错!']; } return json($res); } //上传logo public function upload() { $param = Request::param('field'); $uploads = new \app\common\lib\Uploads(); $upRes = $uploads->put('file','SYS_logo',2000,'image'); $logoJson = $upRes->getData(); if($logoJson['status'] == 0){ if($param == 'logo'){ $result = Db::name('system')->where('id', 1)->cache('system')->update(['logo'=>$logoJson['url']]); } else { //移动端logo $result = Db::name('system')->where('id', 1)->cache('system')->update(['m_logo'=>$logoJson['url']]); } if($result){ $res = ['code'=>0,'msg'=>'更新logo成功']; } else { $res = ['code'=>-1,'msg'=>'上传成功,数据无须更新']; } } else { $res = ['code'=>-1, 'msg'=>$logoJson['msg']]; } return json($res); } }