* Date: 2019-7-30
*/
namespace app\plugins\model;
use think\Model;
use think\Db;
use think\Page;
use think\Config;
use app\plugins\logic\AskLogic;
/**
* 模型
*/
class Ask extends Model
{
//初始化
protected function initialize()
{
// 需要调用`Model`的`initialize`方法
parent::initialize();
$this->users_db = Db::name('users'); // 会员表
$this->weapp_ask_db = Db::name('weapp_ask'); // 问题表
$this->weapp_ask_answer_db = Db::name('weapp_ask_answer'); // 答案表
$this->weapp_ask_type_db = Db::name('weapp_ask_type'); // 问题栏目分类表
$this->weapp_ask_answer_like_db = Db::name('weapp_ask_answer_like'); // 问题回答点赞表
$this->AskLogic = new AskLogic;
}
// 用户信息及问题回答数据
public function GetUsersAskCount($view_uid = null)
{
// 返回参数
$result = [];
// 查询会员信息
$users = session('users');
if (!empty($users) && $users['users_id'] == $view_uid) {
$result = [
'NickName' => $users['nickname'],
'HeadPic' => $users['head_pic'],
'IsLogin' => 1,
];
}else{
$UsersInfo = $this->users_db->field('nickname,head_pic')->where('users_id', $view_uid)->find();
if (!empty($UsersInfo)) {
$result = [
'NickName' => $UsersInfo['nickname'],
'HeadPic' => $UsersInfo['head_pic'],
'IsLogin' => 0,
];
}
}
// 问答数量
if (!empty($result['NickName'])) {
// 查询问题数量
$result['AskCount'] = $this->weapp_ask_db->where('users_id', $view_uid)->count();
// 查询回答数量
$result['AnswerCount'] = $this->weapp_ask_answer_db->where('users_id', $view_uid)->count();
}
// 拼装URL
$result['UsersAskUrl'] = url('plugins/Ask/ask_index', ['view_uid'=>$view_uid]);
// ROOT_DIR.'/index.php?m=plugins&c=Ask&a=ask_index&view_uid='.$view_uid;
$result['UsersAnswerUrl'] = url('plugins/Ask/ask_index', ['view_uid'=>$view_uid, 'method'=>'answer']);
// ROOT_DIR.'/index.php?m=plugins&c=Ask&a=ask_index&view_uid='.$view_uid.'&method=answer';
return $result;
}
// 会员问题回答数据
public function GetUsersAskData($view_uid = null, $is_ask = true,$limit = 10)
{
// 返回参数
$result = [];
$field = 'a.ask_id, a.ask_title, a.click, a.replies, a.add_time, a.is_review, b.users_id, b.nickname';
if (!empty($is_ask)) {
// 提问问题查询列表
$where = [
'a.status' => ['IN',[0,1]],
'a.users_id' => $view_uid,
];
/* 分页 */
$count = $this->weapp_ask_db->alias('a')->where($where)->count('ask_id');
$pageObj = new \weapp\Ask\logic\PageLogic($count, $limit);
$result['pageStr'] = $pageObj->show();
/* END */
/*问题表数据(问题表+会员表+问题分类表)*/
$result['AskData'] = $this->weapp_ask_db->field($field)
->alias('a')
->join('__USERS__ b', 'a.users_id = b.users_id', 'LEFT')
->where($where)
->order('a.add_time desc')
->limit($pageObj->firstRow.','.$pageObj->listRows)
->select();
/* END */
/*问题回答人查询*/
$ask_id = get_arr_column($result['AskData'], 'ask_id');
$RepliesData = $this->weapp_ask_answer_db->field('a.ask_id, a.users_id, b.nickname')
->alias('a')
->join('__USERS__ b', 'a.users_id = b.users_id', 'LEFT')
->where('ask_id', 'IN', $ask_id)
->select();
/* END */
}else{
// 回答问题查询列表
/*问题回答人查询*/
$RepliesData = $this->weapp_ask_answer_db->field('a.ask_id, a.users_id, b.nickname')
->alias('a')
->join('__USERS__ b', 'a.users_id = b.users_id', 'LEFT')
->select();
/* END */
/* 查询条件 */
$UsersIds = group_same_key($RepliesData, 'users_id');
$ask_ids = get_arr_column($UsersIds[$view_uid], 'ask_id');
// 按主键去重
$ask_ids = array_unique($ask_ids, SORT_REGULAR);
$where = [
'a.status' => ['IN', [0, 1]],
'a.ask_id' => ['IN', $ask_ids],
];
/* END */
/* 分页 */
$count = $this->weapp_ask_db->alias('a')->where($where)->count('ask_id');
$pageObj = new \weapp\Ask\logic\PageLogic($count, $limit);
$result['pageStr'] = $pageObj->show();
/* END */
/*问题表数据(问题表+会员表+问题分类表)*/
$result['AskData'] = $this->weapp_ask_db->field($field)
->alias('a')
->join('__USERS__ b', 'a.users_id = b.users_id', 'LEFT')
->where($where)
->order('a.add_time desc')
->limit($pageObj->firstRow.','.$pageObj->listRows)
->select();
/* END */
}
// 取出提问问题的ID作为主键
$RepliesData = group_same_key($RepliesData, 'ask_id');
/*数据处理*/
foreach ($result['AskData'] as $key => $value) {
// 时间友好显示处理
$result['AskData'][$key]['add_time'] = friend_date($value['add_time']);
// 问题内容Url
$result['AskData'][$key]['AskUrl'] = url('plugins/Ask/details', ['ask_id'=>$value['ask_id']]);
// ROOT_DIR.'/index.php?m=plugins&c=Ask&a=details&ask_id='.$value['ask_id'];
// 回复处理
if (!empty($RepliesData[$value['ask_id']])) {
$UsersConut = array_values(array_unique($RepliesData[$value['ask_id']], SORT_REGULAR));
$result['AskData'][$key]['UsersConut'] = '等'.count($UsersConut).'人参与讨论';
}else{
$UsersConut = ['0'=>['nickname'=>$value['nickname']]];
$result['AskData'][$key]['UsersConut'] = $value['nickname'];
}
// 处理参与讨论者的A标签跳转
foreach ($UsersConut as $kkk => $vvv) {
$nickname = $vvv['nickname'];
if (($kkk + 1) == count($UsersConut) || 2 == $kkk) {
$result['AskData'][$key]['NickName'] .= ''. $nickname .'';
break;
}else{
$result['AskData'][$key]['NickName'] .= ''. $nickname .'、';
}
}
}
/* END */
return $result;
}
// 问题数据
public function GetNewAskData($where = array(), $limit = 20, $field = null)
{
// 返回参数
$result = [];
// 没有传入则默认查询这些字段
if (empty($field)) {
$field = 'a.*, b.nickname, b.head_pic, c.type_name,b.level';
}
$result['PendingAsk'] = '';
if (isset($where['a.replies']) && 0 == $where['a.replies']) {
$result['PendingAsk'] = '待回答';
}
$result['SearchName'] = '';
// 提取搜索关键词
if (!empty($where['a.ask_title'])) {
$SearchName = str_replace("%","",$where['a.ask_title'][1]);
$result['SearchName'] = $SearchName;
$result['SearchNameRed'] = "搜索 ".$SearchName." 结果";
}else{
$result['SearchName'] = "";
}
if (!empty($where['a.type_id'])) {
// 存在栏目ID则执行
$TypeData = $this->weapp_ask_type_db->where('parent_id',$where['a.type_id'])->field('type_id')->select();
if (!empty($TypeData)) {
// 将顶级栏目ID合并到新条件中
$type_id = get_arr_column($TypeData, 'type_id');
$type_id = array_merge($type_id, array(0 => $where['a.type_id']));
$where['a.type_id'] = ['IN', $type_id];
}
// 查询满足要求的总记录数
$count = $this->weapp_ask_db->alias('a')->where($where)->count('ask_id');
// 实例化分页类 传入总记录数和每页显示的记录数
$pageObj = new \weapp\Ask\logic\PageLogic($count, $limit);
/*问题表数据(问题表+会员表+问题分类表)*/
$result['AskData'] = $this->weapp_ask_db->field($field)
->alias('a')
->join('__USERS__ b', 'a.users_id = b.users_id', 'LEFT')
->join('__WEAPP_ASK_TYPE__ c', 'a.type_id = c.type_id', 'LEFT')
->where($where)
->order('a.ask_id desc')
->limit($pageObj->firstRow.','.$pageObj->listRows)
->select();
// 分页显示输出
$result['pageStr'] = $pageObj->show();
}else{
/*问题表数据(问题表+会员表+问题分类表)*/
$result['AskData'] = $this->weapp_ask_db->field($field)
->alias('a')
->join('__USERS__ b', 'a.users_id = b.users_id', 'LEFT')
->join('__WEAPP_ASK_TYPE__ c', 'a.type_id = c.type_id', 'LEFT')
->where($where)
->order('a.ask_id desc')
->limit($limit)
->select();
/* END */
$result['pageStr'] = '';
}
/*问题回答人查询*/
$ask_id = get_arr_column($result['AskData'], 'ask_id');
$RepliesData = $this->weapp_ask_answer_db->field('a.ask_id, a.users_id, b.head_pic, b.nickname')
->alias('a')
->join('__USERS__ b', 'a.users_id = b.users_id', 'LEFT')
->where('ask_id', 'IN', $ask_id)
->select();
$RepliesDataNew = [];
foreach ($RepliesData as $key => $value) {
/*头像处理*/
$value['head_pic'] = get_head_pic($value['head_pic']);
/* END */
// 将二维数组以ask_id值作为键,并归类数组,效果同等group_same_key
$RepliesDataNew[$value['ask_id']][] = $value;
}
/* END */
/*数据处理*/
foreach ($result['AskData'] as $key => $value) {
/*头像处理*/
$value['head_pic'] = get_head_pic($value['head_pic']);
$result['AskData'][$key]['head_pic'] = $value['head_pic'];
/* END */
// 若存在搜索关键词则标红关键词
if (isset($SearchName) && !empty($SearchName)) {
$result['AskData'][$key]['ask_title'] = $this->AskLogic->GetRedKeyWord($SearchName, $value['ask_title']);
}
// 时间友好显示处理
$result['AskData'][$key]['add_time'] = friend_date($value['add_time']);
// 栏目分类Url
$result['AskData'][$key]['TypeUrl'] = url('plugins/Ask/index', ['type_id'=>$value['type_id']]);
// ROOT_DIR.'/index.php?m=plugins&c=Ask&a=index&type_id='.$value['type_id'];
// 问题内容Url
$result['AskData'][$key]['AskUrl'] = url('plugins/Ask/details', ['ask_id'=>$value['ask_id']]);
// ROOT_DIR.'/index.php?m=plugins&c=Ask&a=details&ask_id='.$value['ask_id'];
// 回复处理
if (!empty($RepliesDataNew[$value['ask_id']])) {
$UsersConut = array_unique($RepliesDataNew[$value['ask_id']], SORT_REGULAR);
// 读取前三条数据
$result['AskData'][$key]['HeadPic'] = array_slice($UsersConut, 0, 3);
$result['AskData'][$key]['UsersConut'] = '等'.count($UsersConut).'人参与讨论';
}else{
$result['AskData'][$key]['HeadPic'] = ['0'=>['head_pic'=>$value['head_pic']]];
$result['AskData'][$key]['UsersConut'] = $value['nickname'];
}
}
/* END */
// 是否推荐
if (!empty($where['a.is_recom'])) {
$result['IsRecom'] = 1;
}else{
$result['IsRecom'] = 0;
}
if (!empty($where['a.money'])) {
$result['IsRecom'] = 3;
}
return $result;
}
// 问题数据
public function GetAjaxAskPage($page = 1,$where = array(), $limit = 10, $field = null)
{
// 返回参数
$result = [];
// 没有传入则默认查询这些字段
if (empty($field)) {
$field = 'a.*, b.nickname, b.head_pic, c.type_name';
}
$start = ($page-1) * $limit;
$count = $this->weapp_ask_db->alias('a')->where($where)->count('ask_id');
$total_page = intval($count/$limit);
/*问题表数据(问题表+会员表+问题分类表)*/
$result['AskData'] = $this->weapp_ask_db->field($field)
->alias('a')
->join('__USERS__ b', 'a.users_id = b.users_id', 'LEFT')
->join('__WEAPP_ASK_TYPE__ c', 'a.type_id = c.type_id', 'LEFT')
->where($where)
->order('a.ask_id desc')
->limit($start,$limit)
->select();
/* END */
$result['pageStr'] = '';
if (!empty($where['a.ask_title'])) {
$SearchName = str_replace("%","",$where['a.ask_title'][1]);
}
/*问题回答人查询*/
$ask_id = get_arr_column($result['AskData'], 'ask_id');
$RepliesData = $this->weapp_ask_answer_db->field('a.ask_id, a.users_id, b.head_pic, b.nickname')
->alias('a')
->join('__USERS__ b', 'a.users_id = b.users_id', 'LEFT')
->where('ask_id', 'IN', $ask_id)
->select();
$RepliesDataNew = [];
foreach ($RepliesData as $key => $value) {
/*头像处理*/
$value['head_pic'] = get_head_pic($value['head_pic']);
/* END */
// 将二维数组以ask_id值作为键,并归类数组,效果同等group_same_key
$RepliesDataNew[$value['ask_id']][] = $value;
}
/* END */
/*数据处理*/
foreach ($result['AskData'] as $key => $value) {
/*头像处理*/
$value['head_pic'] = get_head_pic($value['head_pic']);
$result['AskData'][$key]['head_pic'] = $value['head_pic'];
/* END */
// 若存在搜索关键词则标红关键词
if (isset($SearchName) && !empty($SearchName)) {
$result['AskData'][$key]['ask_title'] = $this->AskLogic->GetRedKeyWord($SearchName, $value['ask_title']);
}
// 时间友好显示处理
$result['AskData'][$key]['add_time'] = friend_date($value['add_time']);
// 栏目分类Url
$result['AskData'][$key]['TypeUrl'] = url('plugins/Ask/index', ['type_id'=>$value['type_id']]);
// ROOT_DIR.'/index.php?m=plugins&c=Ask&a=index&type_id='.$value['type_id'];
// 问题内容Url
$result['AskData'][$key]['AskUrl'] = url('plugins/Ask/details', ['ask_id'=>$value['ask_id']]);
// ROOT_DIR.'/index.php?m=plugins&c=Ask&a=details&ask_id='.$value['ask_id'];
// 回复处理
if (!empty($RepliesDataNew[$value['ask_id']])) {
$UsersConut = array_unique($RepliesDataNew[$value['ask_id']], SORT_REGULAR);
// 读取前三条数据
$result['AskData'][$key]['HeadPic'] = array_slice($UsersConut, 0, 3);
$result['AskData'][$key]['UsersConut'] = '等'.count($UsersConut).'人参与讨论';
}else{
$result['AskData'][$key]['HeadPic'] = ['0'=>['head_pic'=>$value['head_pic']]];
$result['AskData'][$key]['UsersConut'] = $value['nickname'];
}
}
/* END */
// 是否推荐
$result['IsRecom'] = 0;
if (!empty($where['a.is_recom'])) {
$result['IsRecom'] = 1;
}
return ['total'=>$total_page,'list'=>$result['AskData'],'IsRecom'=>$result['IsRecom']];
}
// 问题栏目分类数据
public function GetAskTypeData($param = array(), $is_add = null)
{
// 数据初始化
$result = [
'IsTypeId' => 0,
'ParentId' => 0,
'TypeId' => 0,
'TypeName' => '',
'HtmlCode' => '请先让管理员在插件栏目列表中添加分类!',
'TypeData' => []
];
/*栏目处理*/
$TypeData = $this->weapp_ask_type_db->order('sort_order asc, type_id asc')->select();
if (empty($TypeData)) return [];
foreach ($TypeData as $key => $value) {
/*若存在分类ID且和数据中的值相等则执行*/
if (!empty($param['type_id']) && $value['type_id'] == $param['type_id']) {
$result['TypeName'] = $value['type_name'];
$result['TypeId'] = $value['type_id'];
$result['ParentId'] = $value['parent_id'];
// 描点标记焦点
if (!empty($value['parent_id'])) {
$result['IsTypeId'] = $value['parent_id'];
}else{
$result['IsTypeId'] = $value['type_id'];
}
}
/* END */
// 是否顶级栏目
if($value['parent_id'] == 0){
$value['SelectType'] = 0;
$PidData[] = $value;
}else{
$value['SelectSubType'] = 0;
$TidData[] = $value;
}
}
// 调用来源
if (isset($is_add) && 'add_ask' == $is_add) {
// 问题发布调用
$return['HtmlCode'] = $this->AskLogic->GetTypeHtmlCode($PidData, $TidData, $param['type_id']);
return $return;
}else if (isset($is_add) && 'edit_ask' == $is_add) {
// 问题编辑调用
$return['HtmlCode'] = $this->AskLogic->GetTypeHtmlCode($PidData, $TidData, $param['type_id']);
return $return;
}else{
// 列表或内容页调用
$TidData = group_same_key($TidData, 'parent_id');
// 一级栏目处理
foreach($PidData as $P_key => $PidValue){
$result['TypeData'][] = $PidValue;
$result['TypeData'][$P_key]['Url'] = url('plugins/Ask/index', ['type_id'=>$PidValue['type_id']]);
// ROOT_DIR.'/index.php?m=plugins&c=Ask&a=index&type_id='.$PidValue['type_id'];
$result['TypeData'][$P_key]['SubType'] = [];
if (!empty($TidData[$PidValue['type_id']])) {
// 所属子栏目处理
foreach($TidData[$PidValue['type_id']] as $T_key => $TidValue){
if($TidValue['parent_id'] == $PidValue['type_id']){
array_push($result['TypeData'][$P_key]['SubType'], $TidValue);
$result['TypeData'][$P_key]['SubType'][$T_key]['Url'] = url('plugins/Ask/index', ['type_id'=>$TidValue['type_id']]);
// ROOT_DIR.'/index.php?m=plugins&c=Ask&a=index&type_id='.$TidValue['type_id'];
}
}
}
}
}
/* END */
return $result;
}
// 周榜
public function GetAskWeekListData()
{
$time1 = strtotime(date('Y-m-d H:i:s', time()));
$time2 = $time1 - (86400 * 7);
$where = [
'a.add_time' => ['between time', [$time2, $time1]],
'a.is_review'=> 1,
];
$result['WeekList'] = [];
$WeekList = $this->weapp_ask_db->field('a.ask_id, a.ask_title, a.click, a.replies, b.head_pic')
->alias('a')
->join('__USERS__ b', 'a.users_id = b.users_id', 'LEFT')
->order('click desc, replies desc')
->where($where)
->limit('0, 10')
->select();
if (empty($WeekList)) {
return $result;
}
foreach ($WeekList as $key => $value) {
$result['WeekList'][$key]['AskUrl'] = url('plugins/Ask/details', ['ask_id'=>$value['ask_id']]);
// ROOT_DIR.'/index.php?m=plugins&c=Ask&a=details&ask_id='.$value['ask_id'];
// $result['WeekList'][$key]['ask_title'] = mb_strimwidth($value['ask_title'], 0, 30, "...");
$result['WeekList'][$key]['ask_title'] = $value['ask_title'];
}
return $result;
}
// 总榜
public function GetAskTotalListData()
{
$result['TotalList'] = [];
$TotalList = $this->weapp_ask_db->field('a.ask_id, a.ask_title, a.click, a.replies, b.head_pic')
->alias('a')
->join('__USERS__ b', 'a.users_id = b.users_id', 'LEFT')
->order('click desc, replies desc')
->where('a.is_review', 1)
->limit('0, 10')
->select();
if (empty($TotalList)) {
return $result;
}
foreach ($TotalList as $key => $value) {
$result['TotalList'][$key]['AskUrl'] = url('plugins/Ask/details', ['ask_id'=>$value['ask_id']]);
// ROOT_DIR.'/index.php?m=plugins&c=Ask&a=details&ask_id='.$value['ask_id'];
// $result['TotalList'][$key]['ask_title'] = mb_strimwidth($value['ask_title'], 0, 30, "...");
$result['TotalList'][$key]['ask_title'] = $value['ask_title'];
}
return $result;
}
// 问题详情数据
public function GetAskDetailsData($param = array(), $parent_id = null, $users_id = null)
{
$ResultData['code'] = 1;
$ResultData['info'] = $this->weapp_ask_db->field('a.*, b.username, b.nickname, b.head_pic, c.type_name')
->alias('a')
->join('__WEAPP_ASK_TYPE__ c', 'c.type_id = a.type_id', 'LEFT')
->join('__USERS__ b', 'a.users_id = b.users_id', 'LEFT')
->where('ask_id', $param['ask_id'])
->find();
if (empty($ResultData['info'])) return ['code'=>0,'msg'=>'浏览的问题不存在!'];
if (0 !== $parent_id) {
if (0 == $ResultData['info']['is_review'] && $ResultData['info']['users_id'] !== $users_id){
return ['code'=>0,'msg'=>'问题未审核通过,暂时不可浏览!'];
}
}
// 头像处理
$ResultData['info']['head_pic'] = get_head_pic($ResultData['info']['head_pic']);
// 时间友好显示处理
$ResultData['info']['add_time'] = friend_date($ResultData['info']['add_time']);
$ResultData['IsUsers'] = 0;
if ($ResultData['info']['users_id'] == session('users_id')) $ResultData['IsUsers'] = 1;
// 处理格式
$ResultData['info']['content'] = htmlspecialchars_decode($ResultData['info']['content']);
$ResultData['SearchName'] = null;
// seo信息
$ResultData['info']['seo_title'] = $ResultData['info']['ask_title'] . ' - ' . $ResultData['info']['type_name'];
$ResultData['info']['seo_keywords'] = $ResultData['info']['ask_title'];
$ResultData['info']['seo_description'] = @msubstr(checkStrHtml($ResultData['info']['content']), 0, config('global.arc_seo_description_length'), false);
return $ResultData;
}
// 问题回答数据
public function GetAskReplyData($param = array(), $parent_id = null)
{
/*查询条件*/
$bestanswer_id = $this->weapp_ask_db->where('ask_id', $param['ask_id'])->getField('bestanswer_id');
$RepliesWhere = ['ask_id' => $param['ask_id'], 'is_review' => 1];
$WhereOr = [];
if (!empty($param['answer_id'])) {
$RepliesWhere = ['answer_id' => $param['answer_id'], 'is_review' => 1];
$WhereOr = ['answer_pid' => $param['answer_id']];
}
// 若为则创始人则去除仅查询已审核评论这个条件,$parent_id = 0 表示为创始人
if (0 == $parent_id) unset($RepliesWhere['is_review']);
/* END */
/*评论读取条数*/
$firstRow = !empty($param['firstRow']) ? $param['firstRow'] : 0;
$listRows = !empty($param['listRows']) ? $param['listRows'] : 5;
$result['firstRow'] = $firstRow;
$result['listRows'] = $listRows;
/* END */
/*排序*/
$OrderBy = !empty($param['click_like']) ? 'a.click_like '.$param['click_like'].', a.add_time asc' : 'a.add_time asc';
$click_like = isset($param['click_like']) ? $param['click_like'] : '';
$result['SortOrder'] = 'desc' == $click_like ? 'asc' : 'desc';
/* END */
/*评论回答*/
$RepliesData = $this->weapp_ask_answer_db->field('a.*, b.head_pic, b.nickname, c.nickname as `at_usersname`')
->alias('a')
->join('__USERS__ b', 'a.users_id = b.users_id', 'LEFT')
->join('__USERS__ c', 'a.at_users_id = c.users_id', 'LEFT')
->order($OrderBy)
->where($RepliesWhere)
->WhereOr($WhereOr)
->select();
if (empty($RepliesData)) return [];
/* END */
/*点赞数据*/
$AnswerIds = get_arr_column($RepliesData, 'answer_id');
$AnswerLikeData = $this->weapp_ask_answer_like_db->field('a.*, b.nickname')
->alias('a')
->join('__USERS__ b', 'a.users_id = b.users_id', 'LEFT')
->order('like_id desc')
->where('answer_id','IN',$AnswerIds)
->select();
$AnswerLikeData = group_same_key($AnswerLikeData, 'answer_id');
/* END */
/*回答处理*/
$PidData = $AnswerData = [];
foreach ($RepliesData as $key => $value) {
// 友好显示时间
$value['add_time'] = friend_date($value['add_time']);
// 处理格式
$value['content'] = htmlspecialchars_decode($value['content']);
// 头像处理
$value['head_pic'] = get_head_pic($value['head_pic']);
// 会员昵称
$value['nickname'] = !empty($value['nickname']) ? $value['nickname'] : $value['username'];
// 是否上一级回答
if($value['answer_pid'] == 0){
$PidData[] = $value;
}else{
$AnswerData[] = $value;
}
}
/* END */
/*一级回答*/
foreach($PidData as $key => $PidValue){
$result['AnswerData'][] = $PidValue;
// 子回答
$result['AnswerData'][$key]['AnswerSubData'] = [];
// 点赞数据
$result['AnswerData'][$key]['AnswerLike'] = [];
/*所属子回答处理*/
foreach($AnswerData as $AnswerValue){
if($AnswerValue['answer_pid'] == $PidValue['answer_id']){
array_push($result['AnswerData'][$key]['AnswerSubData'], $AnswerValue);
}
}
/* END */
/*读取指定数据*/
// 以是否审核排序,审核的优先
array_multisort(get_arr_column($result['AnswerData'][$key]['AnswerSubData'],'is_review'), SORT_DESC, $result['AnswerData'][$key]['AnswerSubData']);
// 读取指定条数
$result['AnswerData'][$key]['AnswerSubData'] = array_slice($result['AnswerData'][$key]['AnswerSubData'], $firstRow, $listRows);
/* END */
$result['AnswerData'][$key]['AnswerLike']['LikeNum'] = null;
$result['AnswerData'][$key]['AnswerLike']['LikeName'] = null;
/*点赞处理*/
foreach ($AnswerLikeData as $LikeKey => $LikeValue) {
if($PidValue['answer_id'] == $LikeKey){
// 点赞总数
$LikeNum = count($LikeValue);
$result['AnswerData'][$key]['AnswerLike']['LikeNum'] = $LikeNum;
for ($i=0; $i < $LikeNum; $i++) {
// 获取前三个点赞人处理后退出本次for
if ($i > 2) break;
// 点赞人用户名\昵称
$LikeName = $LikeValue[$i]['nickname'];
// 在第二个数据前加入顿号,拼装a链接
if ($i != 0) {
$LikeName = ' 、'. $LikeName .'';
}else{
$LikeName = ''. $LikeName .'';
}
$result['AnswerData'][$key]['AnswerLike']['LikeName'] .= $LikeName;
}
}
}
/* END */
}
/* END */
/*最佳答案数据*/
foreach ($result['AnswerData'] as $key => $value) {
if ($bestanswer_id == $value['answer_id']) {
$result['BestAnswer'][$key] = $value;
unset($result['AnswerData'][$key]);
}
}
/* NED */
// 统计回答数
$result['AnswerCount'] = count($RepliesData);
return $result;
}
// 操作问题表回复数
public function UpdateAskReplies($ask_id = null, $IsAdd = true, $DelNum = 0)
{
if (empty($ask_id)) return false;
if (!empty($IsAdd)) {
$Updata = [
'replies' => Db::raw('replies+1'),
'update_time' => getTime(),
];
}else{
$Updata = [
'replies' => Db::raw('replies-1'),
'update_time' => getTime(),
];
if ($DelNum > 0) $Updata['replies'] = Db::raw('replies-'.$DelNum);
}
$this->weapp_ask_db->where('ask_id', $ask_id)->update($Updata);
}
// 增加问题浏览点击量
public function UpdateAskClick($ask_id = null)
{
if (empty($ask_id)) return false;
$Updata = [
'click' => Db::raw('click+1'),
'update_time' => getTime(),
];
$this->weapp_ask_db->where('ask_id', $ask_id)->update($Updata);
}
/*
*会员中心--问题中心--我的问题\回复
* $view_uid 用户id
* $is_ask true:获取问题列表,false:获取回答列表
* $limit 煤业显示条数
*/
public function GetUsersAskDataNew($view_uid = null, $is_ask = true,$limit = 5)
{
// 返回参数
$result = [];
if (!empty($is_ask)) {
// 提问问题查询列表
/*查询字段*/
$field = 'a.ask_id, a.ask_title, a.click, a.replies, a.add_time, a.is_review, b.type_name';
/* END */
/*查询条件*/
$where = [
'a.status' => ['IN', [0, 1]],
'a.users_id' => $view_uid,
];
/* END */
/* 分页 */
$count = $this->weapp_ask_db->alias('a')->where($where)->count('ask_id');
$pageObj = new \weapp\Ask\logic\PageLogic($count, $limit);
$result['pageStr'] = $pageObj->show();
/* END */
/*问题表数据(问题表+会员表+问题分类表)*/
$result['AskData'] = $this->weapp_ask_db->field($field)
->alias('a')
->join('__WEAPP_ASK_TYPE__ b', 'a.type_id = b.type_id', 'LEFT')
->where($where)
->order('a.add_time desc')
->limit($pageObj->firstRow.','.$pageObj->listRows)
->select();
/* END */
}else{
// 回答问题查询列表
/*查询字段*/
$field = 'a.*, b.ask_title';
/* END */
/*查询条件*/
$where = [
'a.users_id' => $view_uid,
];
/* END */
/* 分页 */
$count = $this->weapp_ask_answer_db->alias('a')->where($where)->count('answer_id');
$pageObj = new \weapp\Ask\logic\PageLogic($count, $limit);
$result['pageStr'] = $pageObj->show();
/* END */
/*问题回答人查询*/
$result['AskData'] = $this->weapp_ask_answer_db->field($field)
->alias('a')
->join('__WEAPP_ASK__ b', 'a.ask_id = b.ask_id', 'LEFT')
->where($where)
->order('a.add_time desc')
->limit($pageObj->firstRow.','.$pageObj->listRows)
->select();
/* END */
}
/*数据处理*/
foreach ($result['AskData'] as $key => $value) {
// 问题内容Url
$result['AskData'][$key]['AskUrl'] = url('plugins/Ask/details', ['ask_id'=>$value['ask_id']]);
// ROOT_DIR.'/index.php?m=plugins&c=Ask&a=details&ask_id='.$value['ask_id'];
if (empty($is_ask)) {
$result['AskData'][$key]['AskUrl'] .= !empty($value['answer_pid']) ? '#ul_div_li_'.$value['answer_pid'] : '#ul_div_li_'.$value['answer_id'];
}
if (isset($value['answer_id']) && !empty($value['answer_id'])) {
$preg = '//i';
$value['content'] = htmlspecialchars_decode($value['content']);
$value['content'] = preg_replace($preg,'[图片]',$value['content']);
$value['content'] = strip_tags($value['content']);
$result['AskData'][$key]['content'] = mb_strimwidth($value['content'], 0, 120, "...");
}
}
/* END */
return $result;
}
/**
* 悬赏余额/积分记录
*/
public function setUb($reward_type = 'scores',$users_id = 0, $ask_id = 0, $money = 0, $act = 'add',$ori_money = 0,$answer_id = 0)
{
$users = [];
if ($reward_type == 'users_money'){
$users = Db::name('users')->where('users_id', $users_id)->field('users_money')->find();
}
if ($act == 'add'){
$info = '问答悬赏';
//会员表更新
if ($reward_type == 'scores'){
$update['scores'] = Db::raw('scores-' . $money);
}else{
$update['users_money'] = Db::raw('users_money-' . $money);
}
$update['update_time'] = getTime();
Db::name('users')->where('users_id', $users_id)->update($update);
//日志记录
if ($reward_type == 'scores'){
$users = Db::name('users')->where('users_id', $users_id)->field('scores,devote')->find();
$data = [
'ask_id' => $ask_id,
'users_id' => $users_id,
'info' => $info,
'score' => -$money,
'type' => 7,
'add_time' => getTime(),
'update_time' => getTime(),
'current_score' => $users['scores'],
'current_devote' => $users['devote'],
];
Db::name('users_score')->insert($data);
}else{
$data = [
'users_id' => $users_id,
'money' => $money,
'users_money' => $users['users_money'],
'cause' => $info,
'cause_type' => 6,
'status' => 3,
'level_id' => $ask_id,//cause_type=6时为ask_id
'add_time' => getTime(),
'update_time' => getTime(),
];
Db::name('users_money')->insert($data);
}
}elseif ($act == 'edit'){
$difference = $money - $ori_money;
$info = '问答悬赏';
//会员表更新
if ($reward_type == 'scores'){
$update['scores'] = Db::raw('scores-' . $difference);
}else{
$update['users_money'] = Db::raw('users_money-' . $difference);
}
$update['update_time'] = getTime();
Db::name('users')->where('users_id', $users_id)->update($update);
//日志记录
if ($reward_type == 'scores'){
$users = Db::name('users')->where('users_id', $users_id)->field('scores,devote')->find();
$data = [
'ask_id' => $ask_id,
'users_id' => $users_id,
'info' => $info,
'score' => -$difference,
'type' => 7,
'add_time' => getTime(),
'update_time' => getTime(),
'current_score' => $users['scores'],
'current_devote' => $users['devote'],
];
Db::name('users_score')->insert($data);
}else{
$data = [
'users_id' => $users_id,
'money' => $difference,
'users_money' => $users['users_money'],
'cause' => $info,
'cause_type' => 6,
'status' => 3,
'level_id' => $ask_id,//cause_type=6时为ask_id
'add_time' => getTime(),
'update_time' => getTime(),
];
Db::name('users_money')->insert($data);
}
}elseif ($act == 'answer'){
$info = '问答获得悬赏';
//会员表更新
if ($reward_type == 'scores'){
$update['scores'] = Db::raw('scores+' . $money);
}else{
$update['users_money'] = Db::raw('users_money+' . $money);
}
$update['update_time'] = getTime();
Db::name('users')->where('users_id', $users_id)->update($update);
//日志记录
if ($reward_type == 'scores'){
$users = Db::name('users')->where('users_id', $users_id)->field('scores,devote')->find();
$data = [
'ask_id' => $ask_id,
'reply_id' => $answer_id,
'users_id' => $users_id,
'info' => $info,
'score' => $money,
'type' => 7,
'add_time' => getTime(),
'update_time' => getTime(),
'current_score' => $users['scores'],
'current_devote' => $users['devote'],
];
Db::name('users_score')->insert($data);
}else{
$data = [
'users_id' => $users_id,
'money' => $money,
'users_money' => $users['users_money'],
'cause' => $info,
'cause_type' => 7,
'status' => 3,
'level_id' => $answer_id,//cause_type=7时为answer_id
'add_time' => getTime(),
'update_time' => getTime(),
];
Db::name('users_money')->insert($data);
}
}
}
}