Plug.php 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531
  1. <?php
  2. // __ __
  3. // | \/ |
  4. // | \ / | _ _ _ _ _ _ ___ _ __ ___ ___ ___ ___ _ __ ___
  5. // | |\/| | | | | | | | | | | | | | / __| | '_ ` _ \ / __| / __| / _ \ | '_ ` _ \
  6. // | | | | | |_| | | |_| | | |_| | | (__ | | | | | | \__ \ _ | (__ | (_) | | | | | | |
  7. // |_| |_| \__,_| \__, | \__,_| \___| |_| |_| |_| |___/ (_) \___| \___/ |_| |_| |_|
  8. // __/ |
  9. // |___/
  10. // 閒浴豀头静自居,此身已濯心何如。
  11. // 此心欲濯静中去,静定由来物自除。
  12. //
  13. namespace app\admin\controller;
  14. use app\admin\controller\Base;
  15. use think\Request;
  16. use app\admin\model\Links;
  17. use app\admin\model\Advertising;
  18. use think\facade\Env;
  19. use think\Db;
  20. class Plug extends Base
  21. {
  22. protected function initialize()
  23. {
  24. }
  25. /**
  26. * 广告列表
  27. *
  28. * @return \think\Response
  29. */
  30. public function addindex()
  31. {
  32. $list = Advertising::order('id','desc')->paginate(25);
  33. return view('index_add',['list'=>$list]);
  34. }
  35. /**
  36. * 友链列表
  37. *
  38. * @return \think\Response
  39. */
  40. public function linkindex()
  41. {
  42. //
  43. $list = links::order('orders','asc')->paginate(25);
  44. $check = links::where("checkurl",NULL)->count();
  45. return view('index_link',['list'=>$list,'check'=>$check]);
  46. }
  47. /**
  48. * 插件列表
  49. *
  50. * @return \think\Response
  51. */
  52. public function addonslist()
  53. {
  54. //获取插件列表数据
  55. //定义插件所在路径
  56. $addonspath = Env::get('root_path') . "addons";
  57. $addons = scandir($addonspath);
  58. $aons=[];
  59. foreach($addons as $va){
  60. if($va=="." || $va==".."){
  61. //跳过上级路径
  62. continue;
  63. }
  64. if(is_file($addonspath .'/'. $va)){
  65. //是文件直接跳过
  66. continue;
  67. }
  68. if(is_dir($addonspath .'/'. $va)){
  69. //判断插件是否为有效插件
  70. //判断是否存在插件类
  71. if(!is_file($addonspath .'/' . $va .'/' . ucfirst($va) . '.php')){
  72. //不存在直接跳过
  73. continue;
  74. }
  75. //实例化插件类
  76. $class = get_addon_class($va);
  77. $info = (new $class)->info;
  78. //判断是否存在安装标识文件
  79. if(is_file($addonspath .'/' . $va .'/' . 'install.php')){
  80. $info = include($addonspath .'/' . $va .'/' . 'install.php');
  81. }
  82. //判断插件基本信息是否有效
  83. if(!(new $class)->checkInfo()){
  84. //无效直接跳过
  85. continue;
  86. }
  87. $aons[] = $info;
  88. }
  89. }
  90. $this -> view -> assign(['aons'=>$aons]);
  91. return view('addons_list');
  92. }
  93. /**
  94. * 插件的安装方法.
  95. *
  96. * @return \think\Response
  97. */
  98. public function adonsinstall(Request $request){
  99. if(request()->isAjax()){
  100. $name = $request->param('name');
  101. $class = get_addon_class($name);
  102. $res = (new $class)->install();
  103. if($res === false){
  104. $this->error("安装失败!");
  105. }elseif($res === true){
  106. $this->success("安装成功!");
  107. }else{
  108. $this->error("未知错误!");
  109. }
  110. }
  111. $this->error("非法请求!");
  112. }
  113. /**
  114. * 插件的卸载方法.
  115. *
  116. * @return \think\Response
  117. */
  118. public function adonsupdate(Request $request){
  119. if(request()->isAjax()){
  120. $name = $request->param('name');
  121. $class = get_addon_class($name);
  122. $res = (new $class)->uninstall();
  123. if($res === false){
  124. $this->error("卸载失败!");
  125. }elseif($res === true){
  126. $this->success("卸载成功!");
  127. }else{
  128. $this->error("未知错误!");
  129. }
  130. }
  131. $this->error("非法请求!");
  132. }
  133. /**
  134. * 添加广告
  135. *
  136. * @param \think\Request $request
  137. * @return \think\Response
  138. */
  139. public function addcreate(Request $request)
  140. {
  141. //接收post过来的数据
  142. if($request->isAjax()){
  143. $data = $request->param();
  144. $data['create_time'] = time();
  145. //过期时间转化为时间戳
  146. if(!empty($data['outtime'])){
  147. $data['outtime'] = strtotime($data['outtime']);
  148. if(empty($data['outtime']) || $data['outtime'] == 0 || !preg_match("/^[1-9][0-9]*$/" ,$data['outtime'])){
  149. $data['outtime'] = null;
  150. }
  151. }else{
  152. if(empty($data['outtime']) || $data['outtime'] == 0 || !preg_match("/^[1-9][0-9]*$/" ,$data['outtime'])){
  153. $data['outtime'] = null;
  154. }
  155. }
  156. //status为空时设置数值为0
  157. if(isset($data['status']) == false){
  158. $data['status'] = 0;
  159. }
  160. if(!empty($data['adtext'])){
  161. $data['adtext'] = html_entity_decode(htmlspecialchars_decode($data['adtext']));
  162. }
  163. if(!empty($data['outext'])){
  164. $data['outext'] = html_entity_decode(htmlspecialchars_decode($data['outext']));
  165. }
  166. //数据库添加操作
  167. $admodel = new Advertising;
  168. $res = $admodel->allowField(true)->save($data);
  169. //判断是否成功并提示
  170. if($res){
  171. $getid = $admodel->id;
  172. $this->logs("广告 [ID: ".$getid.'] 添加成功!');
  173. $this -> success("添加成功!",'Plug/addindex');
  174. }else{
  175. $this -> error("添加失败!");
  176. }
  177. }
  178. return view('new_add');
  179. }
  180. /**
  181. * 添加友情链接
  182. *
  183. * @return \think\Response
  184. */
  185. public function linkcreate(Request $request)
  186. {
  187. if($request->isAjax()){
  188. $data = $request->param();
  189. $data['create_time'] = time();
  190. if(isset($data['status']) == false){
  191. $data['status'] = 0;
  192. }
  193. //数据库添加操作
  194. $linkmod = new Links;
  195. $res = $linkmod->allowField(true)->save($data);
  196. //判断是否成功并提示
  197. if($res){
  198. $getid = $linkmod->id;
  199. $this->logs("友情链接 [ID: ".$getid.'] 添加成功!');
  200. return jsonmsg(1,'添加成功!');
  201. }else{
  202. return jsonmsg(0,'添加失败!');
  203. }
  204. }
  205. $linkorder = 1;
  206. $order = Links::all();
  207. if($order != ""){
  208. foreach($order as $val){
  209. $linkorder = $val['orders']+1;
  210. }
  211. }
  212. return view('new_link',['linkorder'=>$linkorder]);
  213. }
  214. public function gettdk(Request $request){
  215. if($request->isAjax()){
  216. $url = $request->param("urls");
  217. $res = geturltdk($url);
  218. if($res == 0){
  219. return jsonmsg(0,'获取失败!');
  220. }else{
  221. return jsonmsg(1,$res);
  222. }
  223. }
  224. return jsonmsg(0,"非法请求!");
  225. }
  226. //编辑广告
  227. public function addedit(Request $request)
  228. {
  229. if($request->isAjax()){
  230. $data = $request->param();
  231. //过期时间转化为时间戳
  232. if(!empty($data['outtime'])){
  233. $data['outtime'] = strtotime($data['outtime']);
  234. if(empty($data['outtime']) || $data['outtime'] == 0){
  235. $data['outtime'] = null;
  236. }
  237. }else{
  238. if(empty($data['outtime']) || $data['outtime'] == 0){
  239. $data['outtime'] = null;
  240. }
  241. }
  242. if(!empty($data['adtext'])){
  243. $data['adtext'] = html_entity_decode(htmlspecialchars_decode($data['adtext']));
  244. }
  245. if(!empty($data['outext'])){
  246. $data['outext'] = html_entity_decode(htmlspecialchars_decode($data['outext']));
  247. }
  248. //status为空时设置数值为0
  249. if(isset($data['status']) == false){
  250. $data['status'] = 0;
  251. }
  252. //数据库添加操作
  253. $res = Advertising::update($data);
  254. //判断是否成功并提示
  255. if($res){
  256. $this->logs("广告 [ID:".$data['id'].'] 更新成功!');
  257. $this -> success("更新成功!",'Plug/addindex');
  258. }else{
  259. $this -> error("更新失败!");
  260. }
  261. }
  262. //获取旧数据
  263. //查询对应id信息并赋值
  264. $id = $request->param('id');
  265. $add = Advertising::get($id);
  266. //var_dump($add);
  267. return view('edit_add',['add'=>$add]);
  268. }
  269. //编辑友情链接
  270. public function linkedit(Request $request)
  271. {
  272. if($request->isPost()){
  273. $data = $request->param();
  274. //dump($data);
  275. unset($data['file']);
  276. //数据库添加操作
  277. $res = Links::update($data);
  278. //判断是否成功并提示
  279. if($res){
  280. $this->logs("友情链接 [ID:".$data['id'].'] 更新成功!');
  281. return jsonmsg(1,"更新成功!");
  282. }else{
  283. return jsonmsg(0,"更新失败!");
  284. }
  285. }
  286. $id = $request->param('id');
  287. $link = Links::get($id);
  288. return view('edit_link',['link'=>$link]);
  289. }
  290. //广告状态变更
  291. public function addstatus(Request $request){
  292. //获取前台传递id
  293. $add_id = $request->param('id');
  294. //根据id查询数据
  295. $result = Advertising::get($add_id);
  296. //查询原生数据进行判断
  297. if($result->getData('status') == 1){
  298. $res = Advertising::update(['status'=>0],['id'=>$add_id]);
  299. if($res){
  300. $this->logs("广告 [ID:".$add_id.'] 隐藏成功!');
  301. $this->success("隐藏成功!",'Plug/addindex');
  302. }else{
  303. $this->error("隐藏失败!");
  304. }
  305. }else{
  306. $res = Advertising::update(['status'=>1],['id'=>$add_id]);
  307. if($res){
  308. $this->logs("广告 [ID:".$add_id.'] 显示成功!');
  309. $this->success("显示成功!",'Plug/addindex');
  310. }else{
  311. $this->error("显示失败!");
  312. }
  313. }
  314. }
  315. //友链状态变更
  316. public function linkstatus(Request $request){
  317. //获取前台传递id
  318. $link_id = $request->param('id');
  319. //根据id查询数据
  320. $result = Links::get($link_id);
  321. //查询原生数据进行判断
  322. if($result->getData('status') == 1){
  323. Links::update(['status'=>0],['id'=>$link_id]);
  324. $this->logs("友链 [ID :".$link_id.'] 隐藏成功!');
  325. return json(['code'=>1,'msg'=>'已隐藏!']);
  326. }else{
  327. Links::update(['status'=>1],['id'=>$link_id]);
  328. $this->logs("友链 [ID :".$link_id.'] 显示成功!');
  329. return json(['code'=>1,'msg'=>'已显示!']);
  330. }
  331. return json(['code'=>0,'msg'=>'操作失败!']);
  332. }
  333. //检测友链是否上本站链接
  334. public function checkurl(Request $request)
  335. {
  336. if($request->isPost()){
  337. $curl="";
  338. $urlid = $request->param('id');
  339. if(!empty($urlid)){
  340. if(substr_count($urlid,',')>=1){
  341. $urlid = explode(",",$urlid);
  342. $curl = Db::name("links")->where(["id"=>$urlid])->field("id,url")->select()->toArray();
  343. foreach($curl as $val){
  344. $res = links_check($val['url']);
  345. if($res == "ok"){
  346. links::where("id",$val['id'])->update(["checkurl"=>1]);
  347. }else{
  348. links::where("id",$val['id'])->update(["checkurl"=>0]);
  349. }
  350. }
  351. return json(['code'=>1,'msg'=>'检查完成!']);
  352. }else{
  353. $curl = links::where("id",$urlid)->field("id,url")->find();
  354. $res = links_check($curl['url']);
  355. if($res == "ok"){
  356. links::where("id",$curl['id'])->update(["checkurl"=>1]);
  357. }else{
  358. links::where("id",$curl['id'])->update(["checkurl"=>0]);
  359. }
  360. return json(['code'=>1,'msg'=>'检查完成!']);
  361. }
  362. }
  363. return json(['code'=>0,'msg'=>'非法操作!']);
  364. }
  365. return json(['code'=>0,'msg'=>'非法操作!']);
  366. }
  367. //广告删除/批量删除
  368. public function adddelete(Request $request){
  369. if($request->isAjax()){
  370. //获取传递过来的值并删除
  371. $res =Advertising::destroy($request -> param('delid'));
  372. if($res){
  373. $this -> logs("广告删除成功");
  374. $this -> success("删除成功!",'Plug/addindex');
  375. }else{
  376. $this -> error("删除失败!");
  377. }
  378. }
  379. }
  380. //友链删除
  381. public function linkdelete(Request $request){
  382. if($request->isPost()){
  383. //获取传递过来的值并删除
  384. $res =Links::destroy($request -> param('delid'));
  385. if($res){
  386. return jsonmsg(1,"删除成功");
  387. }else{
  388. return jsonmsg(0,"删除失败");
  389. }
  390. }
  391. return jsonmsg(0,"非法操作");
  392. }
  393. //广告图片上传
  394. public function addload(Request $request){
  395. //接收上传的文件
  396. $file = request()->file('file');
  397. if(!empty($file)){
  398. //移动到框架指定目录
  399. $info = $file->validate(['size'=>1048576,'ext'=>'jpg,png,jpeg,gif'])->rule('uniqid')->move('./public/upload/ggpic');
  400. if($info){
  401. //获取图片名称
  402. $imgName = str_replace("\\","/",$info->getSaveName());
  403. $photo = '/public/upload/ggpic/'.$imgName;
  404. }else{
  405. $error = $file->getError();
  406. }
  407. }else{
  408. $photo = "";
  409. }
  410. //判断上传是否成功
  411. if($photo == ""){
  412. $error = $file->getError();
  413. return ['code'=>0,'msg'=>"上传失败,{$error}"];
  414. }else{
  415. return ['code'=>1,'msg'=>'上传成功',"photo"=>$photo];
  416. }
  417. }
  418. //友情链接图标上传
  419. public function linkload(Request $request){
  420. //接收上传的文件
  421. $file = request()->file('file');
  422. if(!empty($file)){
  423. //移动到框架指定目录
  424. $info = $file->validate(['size'=>1048576,'ext'=>'jpg,png,jpeg,gif'])->rule('uniqid')->move('./public/upload/linkpic');
  425. if($info){
  426. //获取图片名称
  427. $imgName = str_replace("\\","/",$info->getSaveName());
  428. $photo = '/public/upload/linkpic/'.$imgName;
  429. }else{
  430. $error = $file->getError();
  431. }
  432. }else{
  433. $photo = "";
  434. }
  435. //判断上传是否成功
  436. if($photo == ""){
  437. $error = $file->getError();
  438. return ['code'=>0,'msg'=>"上传失败,{$error}"];
  439. }else{
  440. return ['code'=>1,'msg'=>'上传成功',"photo"=>$photo];
  441. }
  442. }
  443. /**
  444. *插件删除方法
  445. *
  446. *
  447. *
  448. */
  449. public function addonsdel(Request $request){
  450. $dir = ADDON_PATH.$request ->param('filename');
  451. if(is_file($dir .'/' . 'install.php')){
  452. $this->error('请先卸载插件!');
  453. return false;
  454. }
  455. $res = rmdirr($dir);
  456. if($res){
  457. $this->success('删除成功!');
  458. }else{
  459. $this->error('删除失败!');
  460. }
  461. }
  462. //插件本地上传
  463. public function addonsup(Request $request){
  464. //接收上传的文件
  465. $file = request()->file('addons');
  466. if($file){
  467. $fileinfo = $file->getInfo();
  468. $res = unzip(ADDON_PATH,$fileinfo['tmp_name']);
  469. if($res){
  470. return json(['code'=>1,'msg'=>'上传成功!']);
  471. }else{
  472. return json(['code'=>0,'msg'=>'上传失败!']);
  473. }
  474. }
  475. }
  476. /*
  477. *应用中心渲染
  478. *
  479. *我们正在马不停蹄的开发中
  480. *
  481. *
  482. */
  483. public function appshop(Request $request){
  484. $status = ["msg"=>"我们正在马不停蹄的开发中","status"=>1];
  485. return view('appshop',['status'=>$status]);
  486. }
  487. }