* Date: 2018-4-3 */ namespace app\admin\controller; use think\Page; use think\Db; use app\common\logic\ArctypeLogic; /** * 插件的控制器 */ class Ask extends Base { private $arctypeLogic; /** * 构造方法 */ public function _initialize() { parent::_initialize(); $functionLogic = new \app\common\logic\FunctionLogic; $functionLogic->check_authorfile(2); $this->arctypeLogic = new ArctypeLogic(); // 问题表 $this->ask_db = Db::name('ask'); // 答案表 $this->ask_answer_db = Db::name('ask_answer'); // 点赞表 $this->ask_answer_like_db = Db::name('ask_answer_like'); // 问题分类表 $this->ask_type_db = Db::name('ask_type'); $score_name = getUsersConfigData('score.score_name'); $this->assign('score_name', $score_name); } /** * 插件后台管理 - 栏目管理 */ public function index() { $list = $this->ask_type_db->order('sort_order asc, type_id asc')->select(); foreach ($list as $key => $value) { // 是否顶级栏目 if ($value['parent_id'] == 0) { $PidData[] = $value; } else { $TidData[] = $value; } } $list_new = []; foreach ($PidData as $P_key => $PidValue) { $type_name = $PidValue['type_name']; $PidValue['type_name_input'] = ''; $PidValue['parent_name'] = '顶级栏目'; /*一级栏目*/ $list_new[] = $PidValue; /* END */ foreach ($TidData as $T_key => $TidValue) { /*二级栏目*/ if ($TidValue['parent_id'] == $PidValue['type_id']) { $TidValue['type_name_input'] = '|— '; $TidValue['parent_name'] = $type_name; $list_new[] = $TidValue; } /* END */ } } $this->assign('list', $list_new); /*栏目处理*/ $PidDataNew[0] = [ 'type_id' => 0, 'type_name' => '顶级栏目', 'parent_id' => 0, ]; $PidData = !empty($PidData) ? array_merge($PidDataNew, $PidData) : $PidDataNew; $this->assign('PidData', $PidData); /* END */ /*是否有数据*/ $IsEmpty = empty($list_new) ? 0 : 1; $this->assign('IsEmpty', $IsEmpty); /* END */ return $this->fetch(); } /** * 插件后台管理 - 问题列表 */ public function ask_list() { $list = array(); $keywords = input('keywords/s'); $map = array(); if (!empty($keywords)) { $map['a.ask_title'] = array('LIKE', "%{$keywords}%"); } $map['a.is_del'] = 0; $count = $this->ask_db->alias('a')->where($map)->count('ask_id');// 查询满足要求的总记录数 $pageObj = new Page($count, config('paginate.list_rows'));// 实例化分页类 传入总记录数和每页显示的记录数 $list = $this->ask_db->field('a.*, b.type_name, b.parent_id') ->alias('a') ->join('__ASK_TYPE__ b', 'a.type_id = b.type_id', 'LEFT') ->where($map) ->order('a.is_review asc, a.ask_id desc') ->limit($pageObj->firstRow . ',' . $pageObj->listRows) ->select(); // 分类处理 if (!empty($list)) { // 用户ID $users_ids = []; // 总分类数据 $TypeData = $this->ask_type_db->getField('type_id, type_name, parent_id'); foreach ($list as $key => $value) { array_push($users_ids, $value['users_id']); /*分类处理*/ if (!empty($value['parent_id'])) { $list[$key]['sub_type_name'] = $value['type_name']; $list[$key]['type_name'] = $TypeData[$value['parent_id']]['type_name']; } else { $list[$key]['type_name'] = $value['type_name']; $list[$key]['sub_type_name'] = ''; } /* END */ /*问题状态处理*/ if (0 == $value['status']) { $list[$key]['status'] = '未解决'; } else if (1 == $value['status']) { $list[$key]['status'] = '已解决'; } else if (2 == $value['status']) { $list[$key]['status'] = '已关闭'; } /* END */ // 访问前台url $list[$key]['HomeUrl'] = get_askurl("home/Ask/details", ['ask_id'=>$value['ask_id']]); } // 用户信息 $users_list = Db::name('users')->field('users_id, username, nickname, head_pic')->where(['users_id'=>['IN', $users_ids]])->getAllWithIndex('users_id'); $this->assign('users_list', $users_list); } $pageStr = $pageObj->show(); // 分页显示输出 $this->assign('list', $list); // 赋值数据集 $this->assign('page', $pageStr); // 赋值分页输出 $this->assign('pager', $pageObj); // 赋值分页对象 return $this->fetch('ask_list'); } /** * 插件后台管理 - 答案列表 */ public function answer() { $list = array(); $keywords = input('keywords/s'); $map = array(); if (!empty($keywords)) { $map['a.content'] = array('LIKE', "%{$keywords}%"); } $count = $this->ask_answer_db->alias('a')->where($map)->count('answer_id');// 查询满足要求的总记录数 $pageObj = new Page($count, config('paginate.list_rows'));// 实例化分页类 传入总记录数和每页显示的记录数 $list = $this->ask_answer_db->field('a.*, b.nickname, b.username, b.head_pic') ->alias('a') ->join('__USERS__ b', 'a.users_id = b.users_id', 'LEFT') ->where($map) ->order('a.is_review asc, a.answer_id desc') ->limit($pageObj->firstRow . ',' . $pageObj->listRows) ->select(); // 用户ID $users_ids = []; foreach ($list as $key => $value) { array_push($users_ids, $value['users_id']); // 访问前台url $HomeAskUrl = get_askurl("home/Ask/details", ['ask_id'=>$value['ask_id']]); $list[$key]['HomeUrl'] = $HomeAskUrl; $HomeAskUrl .= !empty($value['answer_pid']) ? '#ul_div_li_' . $value['answer_pid'] : '#ul_div_li_' . $value['answer_id']; $list[$key]['HomeAnswerUrl'] = $HomeAskUrl; // 内容处理 $preg = '//i'; $value['content'] = htmlspecialchars_decode($value['content']); $value['content'] = preg_replace($preg, '[图片]', $value['content']); $value['content'] = strip_tags($value['content']); $list[$key]['content'] = mb_strimwidth($value['content'], 0, 120, "..."); } $pageStr = $pageObj->show(); // 分页显示输出 $this->assign('list', $list); // 赋值数据集 $this->assign('page', $pageStr); // 赋值分页输出 $this->assign('pager', $pageObj); // 赋值分页对象 return $this->fetch('answer'); } // 删除栏目 public function ask_type_del() { $type_id = input('del_id/a'); $type_id = eyIntval($type_id); if (!empty($type_id)) { $result = $this->ask_type_db->where("type_id", 'IN', $type_id)->select(); $title_list = get_arr_column($result, 'type_name'); $r = $this->ask_type_db->where("type_id", 'IN', $type_id)->delete(); if ($r) { adminLog('删除问答栏目:' . implode(',', $title_list)); // 同步删除顶级栏目下的子栏目 if (empty($result[0]['parent_id'])) { $this->ask_type_db->where("parent_id", 'IN', $type_id)->delete(); } $this->success("删除成功!"); } else { $this->error("删除失败!"); } } else { $this->error("参数有误!"); } } /** * 插件后台管理 - 插件配置 */ public function conf() { if (IS_POST) { $post = input('post.'); $inc_type = 'ask'; tpSetting($inc_type, $post['ask']); $functionLogic = new \app\common\logic\FunctionLogic; $functionLogic->scoreConf($post['score']); $this->success("操作成功"); } $askConf = tpSetting('ask'); $this->assign('askConf', $askConf); $score = getUsersConfigData('score'); $this->assign('score', $score); return $this->fetch('conf'); } public function level_set() { $LevelData = model('UsersLevel')->getList(); $this->assign('list', $LevelData); return $this->fetch('level_set'); } /** * 栏目SEO配置 * @return [type] [description] */ public function ask_type_seo() { $type_id = input('param.type_id/d'); if (IS_POST) { if (empty($type_id)) { $this->error('操作失败'); } $data = input('post.'); $data['type_name'] = !empty($data['type_name']) ? trim($data['type_name']) : ''; $data['seo_title'] = !empty($data['seo_title']) ? trim($data['seo_title']) : ''; $data['seo_keywords'] = !empty($data['seo_keywords']) ? trim($data['seo_keywords']) : ''; $data['seo_description'] = !empty($data['seo_description']) ? trim($data['seo_description']) : ''; $data['update_time'] = getTime(); $r = $this->ask_type_db->where('type_id', $type_id)->update($data); if (false !== $r) { $this->success('操作成功!'); } else { $this->error('操作失败!'); } } $info = $this->ask_type_db->where('type_id', $type_id)->find(); if (empty($info)) { $this->error('数据不存在,请联系管理员!'); exit; } $this->assign('info', $info); return $this->fetch('ask_type_seo'); } /** * 插件后台管理 - 删除问题 */ public function ask_del() { $ask_id = input('del_id/a'); $ask_id = eyIntval($ask_id); if (!empty($ask_id)) { $ask = Db::name('ask')->where('ask_id', 'IN', $ask_id)->select(); $result = $this->ask_db->where("ask_id", 'IN', $ask_id)->select(); $title_list = get_arr_column($result, 'ask_title'); $r = $this->ask_db->where("ask_id", 'IN', $ask_id)->update(['is_del'=>1]); if ($r) { adminLog('删除问题:' . implode(',', $title_list)); // 同步删除答案表数据 $this->ask_answer_db->where("ask_id", 'IN', $ask_id)->update(['is_del'=>1]); // 同步删除点赞表数据 $this->ask_answer_like_db->where("ask_id", 'IN', $ask_id)->update(['is_del'=>1]); /*afterDel start*/ foreach ($ask as $key => $val) { if (!empty($val['bestanswer_id'])){ continue; } $users_id = $val['users_id']; $money = $val['money']; if ($money > 0) { //退钱 Db::name('users')->where('users_id', $users_id)->setInc('users_money', $money); $data = [ 'ask_id' => $val['ask_id'], 'users_id' => $users_id, 'type' => 4,//悬赏退回 'money' => $money, ]; Db::name('users_score')->insert($data); } } /*afterDel end*/ $this->success("删除成功!"); } else { $this->error("删除失败!"); } } else { $this->error("参数有误!"); } } /** * 插件后台管理 - 批量审核问题 */ public function ask_review() { $ask_id = input('ask_id/a'); $ask_id = eyIntval($ask_id); if (!empty($ask_id)) { $UpData = [ 'is_review' => 1, 'update_time' => getTime(), ]; $r = $this->ask_db->where("ask_id", 'IN', $ask_id)->update($UpData); if ($r) { $this->success("审核成功!"); } else { $this->error("审核失败!"); } } else { $this->error("参数有误!"); } } /** * 插件后台管理 - 批量推荐问题 */ public function ask_recom() { $ask_id = input('ask_id/a'); $ask_id = eyIntval($ask_id); if (!empty($ask_id)) { $UpData = [ 'is_recom' => 1, 'update_time' => getTime(), ]; $r = $this->ask_db->where("ask_id", 'IN', $ask_id)->update($UpData); if ($r) { $this->success("审核成功!"); } else { $this->error("审核失败!"); } } else { $this->error("参数有误!"); } } /** * 插件后台管理 - 批量删除答案 */ public function answer_del() { $answer_id = input('del_id/a'); $answer_id = eyIntval($answer_id); if (!empty($answer_id)) { $r = $this->ask_answer_db->where("answer_id", 'IN', $answer_id)->delete(); if ($r) { // 同步删除点赞表数据 $this->ask_answer_like_db->where("answer_id", 'IN', $answer_id)->delete(); $this->success("删除成功!"); } else { $this->error("删除失败!"); } } else { $this->error("参数有误!"); } } /** * 插件后台管理 - 批量审核答案 */ public function answer_review() { $answer_id = input('ask_id/a'); $answer_id = eyIntval($answer_id); if (!empty($answer_id)) { $UpData = [ 'is_review' => 1, 'update_time' => getTime(), ]; $r = $this->ask_answer_db->where("answer_id", 'IN', $answer_id)->update($UpData); if ($r) { $this->success("审核成功!"); } else { $this->error("审核失败!"); } } else { $this->error("参数有误!"); } } /** * 积分级别列表 * @return mixed */ public function score_level() { if (IS_AJAX_POST){ $post = input('post.'); if (empty($post['name'])) { $this->error('至少新增一个级别名称!'); } else { $is_empty = true; foreach ($post['name'] as $key => $val) { $val = trim($val); if (!empty($val)) { $is_empty = false; break; } } if (true === $is_empty) { $this->error('级别名称不能为空!'); } } // 处理新增数据 $AddAskData = []; foreach ($post['name'] as $key => $value) { $name = trim($value); if (empty($name)) { continue; } $id = !empty($post['id'][$key]) ? intval($post['id'][$key]) : 0; $min = !empty($post['min'][$key]) ? intval($post['min'][$key]+1) : 0; $max = !empty($post['min'][$key+1]) ? intval($post['min'][$key+1]) : 0; $AddAskData[] = [ 'id' => $id, 'name' => $name, 'min' => $min, 'max' => $max, ]; if (empty($id)) { unset($AddAskData[$key]['id']); } } // 添加\更新 $AskScoreLevelModel = new \app\common\model\AskScoreLevel; if (!empty($AddAskData)) $ReturnId = $AskScoreLevelModel->saveAll($AddAskData); if (!empty($ReturnId)) $this->success('保存成功'); $this->error('保存失败'); } $list = Db::name('ask_score_level')->select(); $this->assign('list', $list); return $this->fetch(); } /** * 删除积分级别 */ public function score_level_del() { $id = input('del_id/a'); $id = eyIntval($id); if (!empty($id)) { $r = Db::name('ask_score_level')->where("id", 'IN', $id)->delete(); if ($r) { adminLog('删除问答积分级别表,id:' . implode(',', $id)); $this->success("删除成功!"); } else { $this->error("删除失败!"); } } else { $this->error("参数有误!"); } } // 问答模型 - 保存栏目 public function ajax_ask_type_save() { if (IS_AJAX_POST) { $post = input('post.'); if (empty($post['type_name'])) { $this->error('至少新增一个栏目名称!'); } else { $is_empty = true; foreach ($post['type_name'] as $key => $val) { $val = trim($val); if (!empty($val)) { $is_empty = false; break; } } if (true === $is_empty) { $this->error('栏目名称不能为空!'); } } // 处理新增数据 $AddAskData = []; foreach ($post['type_name'] as $key => $value) { $type_name = trim($value); if (empty($type_name)) { continue; } $type_id = $post['type_id'][$key]; $parent_id = $post['parent_id'][$key]; $sort_order = $post['sort_order'][$key]; if (empty($parent_id) || $parent_id < 0) $parent_id = 0; $AddAskData[] = [ 'type_id' => $type_id, 'type_name' => $type_name, 'parent_id' => $parent_id, 'sort_order' => $sort_order, 'update_time' => getTime(), ]; if (empty($type_id)) { $AddAskData[$key]['seo_description'] = ''; $AddAskData[$key]['lang'] = $this->admin_lang; $AddAskData[$key]['add_time'] = getTime(); unset($AddAskData[$key]['type_id']); } } // 添加\更新 $AskTypeModel = new \app\common\model\AskType; if (!empty($AddAskData)) $ReturnId = $AskTypeModel->saveAll($AddAskData); // 返回 if (!empty($ReturnId)) $this->success('操作成功'); $this->error('操作失败'); } } }