redirect(url('Login/index',['jump'=>urlencode(url('bbs/index'))])); } /** * 中间加密 替换字符串的子串 */ protected static function encryptName($tel) { $new_tel =is_numeric($tel)?substr_replace($tel, '****', 3, 4):$tel; return $new_tel; } protected function showtime($time){ $endtime=time(); $showtime=''; if($time){ $date=floor(($endtime-$time)/86400); if($date>=30)return ceil($date%30).'月前'; if($date>0)return $date.'天前'; $hour=floor(($endtime-$time)%86400/3600); if($hour>0)return $hour.'小时前'; $minute=floor(($endtime-$time)%86400/60); if($minute>0)return $minute.'分钟前'; } return $showtime; } public function index(){ $showcates=[]; $cates= Db::name('bbstype')->where(['status'=>1,'parentid'=>0])->order('sort desc,id asc')->select(); $pid=input('pid'); $cid=input('cid'); $page=input('page',1,'intval'); foreach ($cates as $k=>$row){ $showcates[$row['id']]=$row['name']; if(empty($pid))$pid=$row['id']; $list= Db::name('bbslist')->alias("a")->field("a.*,m.member_list_groupid as groupid,m.member_list_nickname as nickname,m.signature as uname,m.member_list_headpic as poster")->join(config('database.prefix').'member_list m','a.mid =m.member_list_id','left')->where(['a.status'=>1,'a.parent_id'=>$row['id'],'a.top'=>0])->order('a.update_time desc,a.id desc')->limit(5)->select(); foreach ($list as $j=>$jow){ $list[$j]['created']=$this->showtime($jow['create_time']); $uname=$jow['uname']; if(empty($uname))$uname=$jow['nickname']; if($jow['groupid']==10)$uname=$uname.'(版主)'; $list[$j]['uname']=$this->encryptName($uname); } $cates[$k]['data']=$list; $tops= Db::name('bbslist')->where(['status'=>1,'top'=>1,'parent_id'=>$row['id']])->order('id desc')->limit(10)->select(); $cates[$k]['tops']=$tops; $childs=Db::name('bbstype')->where(['status'=>1,'parentid'=>$row['id']])->order('sort desc,id asc')->select(); foreach ($childs as $jow){ $showcates[$jow['id']]=$jow['name']; } $cates[$k]['childs']=$childs; } $this->assign("cates",$cates); $this->assign("showcates",$showcates); if(empty($cid))$cid=$pid; $this->assign("pid",$pid); $this->assign("cid",$cid); $this->assign("page",$page); $user=session('muser'); $this->assign("user",$user); return $this->view->fetch(); } public function detail(){ $id=input('id'); $page=input('page',1,'intval'); $this->assign("page",$page); $list= Db::name('bbslist')->alias("a")->field("a.*,m.member_list_groupid as groupid,m.member_list_nickname as nickname,m.signature as uname")->join(config('database.prefix').'member_list m','a.mid =m.member_list_id','left')->where(['a.status'=>1,'a.id'=>$id])->find(); $cates= Db::name('bbstype')->where(['status'=>1,'parentid'=>0])->order('sort desc,id asc')->select(); $comments=Db::name('bbslog')->alias("a")->field("a.*,m.member_list_groupid as groupid,m.member_list_nickname as nickname,m.signature as uname")->join(config('database.prefix').'member_list m','a.mid =m.member_list_id','left')->where(['a.status'=>1,'a.list_id'=>$id])->limit(10)->order('top desc,id asc')->select(); $this->assign("cates",$cates); if(count($comments)){ foreach ($comments as $k=>$jow){ $pid=$jow['pid']; $parent=[]; if($pid){ $parent=Db::name('bbslog')->alias("a")->field("a.content,m.member_list_groupid as groupid,m.member_list_nickname as nickname,m.signature as uname")->join(config('database.prefix').'member_list m','a.mid =m.member_list_id','left')->where(['a.status'=>1,'a.id'=>$pid])->find(); if(empty($parent['uname']))$parent['uname']=$parent['nickname']; if($parent['groupid']==10)$parent['uname']=$parent['uname'].'(版主)'; if($parent)$parent['uname']=$this->encryptName($parent['uname']); } $comments[$k]['parent']=$parent; if(empty($jow['uname']))$jow['uname']=$jow['nickname']; if($jow['groupid']==10)$jow['uname']=$jow['uname'].'(版主)'; $comments[$k]['uname']=$this->encryptName($jow['uname']); } } $this->assign("comments",$comments); $childid=isset($list['child_id'])?$list['child_id']:''; $typename=''; if($childid){ $type=Db::name('bbstype')->where(['id'=>$childid])->find(); if($type)$typename=$type['name']; } $list['typename']=$typename; if(empty($list['uname']))$list['uname']=$list['nickname']; $list['uname']=$this->encryptName($list['uname']); $this->assign("list",$list); $mid=session("mhid"); $this->assign("mid",$mid); Db::name('bbslist')->where(['id'=>$id])->setInc('viewnum'); return $this->view->fetch(); } public function article(){ $mid=session("mhid"); if(empty($mid)){ $this->error('请先登录',url("login/index",['jump'=>urlencode(url('article'))])); } $id=input('id'); $find=['name'=>'','id'=>'','content'=>'','child_id'=>'','parent_id'=>'']; if($id){ if($id&&empty($mid)){ $this->error('请先登录',url("login/index",['jump'=>urlencode(url('article'))])); } $find=Db::name('bbslist')->where(['mid'=>$mid,'id'=>$id])->find(); if(!$find){ $this->error('没权限修改此帖子'); } } if(request()->isPost()){ $jump=url('article'); $data=[]; $data['name']=input('title'); $data['content']=input('content'); $pid=input('parent_id'); $data['parent_id']=$pid; $childid=input('child_id'); $data['child_id']=$childid?$childid:$pid; $data['update_time']=time(); $data['create_time']=time(); $data['status']=0; if(!$id){ $data['mid']=$mid; } if(empty($data['name'])){ $this->error('标题不能空'); } if(empty($data['content'])){ $this->error('内容不能空'); } if(empty($data['parent_id'])){ $this->error('版块不能空'); } if($id){ $rst=Db::name("bbslist")->where(['mid'=>$mid,'id'=>$id])->update($data); if($rst!==false){ $this->success('修改成功',url('center/mybbs')); }else{ $this->error('修改失败',$jump); } }else{ $rst=Db::name("bbslist")->insert($data); if($rst!==false){ $this->success('发表成功',url('index')); }else{ $this->error('发表失败',$jump); } } } $cates= Db::name('bbstype')->where(['status'=>1,'parentid'=>0])->order('sort desc,id asc')->select(); foreach ($cates as $k=>$row){ $childs=Db::name('bbstype')->where(['status'=>1,'parentid'=>$row['id']])->order('sort desc,id asc')->select(); $cates[$k]['childs']=$childs; } $this->assign("cates",$cates); $this->assign("detail",$find); $this->assign("id",$id); return $this->view->fetch(); } public function ajaxchat(){ $user=session('muser'); $mid=session('mhid'); $uid=input('uid'); $type=input('type'); if(!$user){ return $this->error("查询失败"); } if($type=='replay'){ $where=['rid'=>$user['member_list_id'],'uid'=>$uid]; }else{ $where=['uid'=>$user['member_list_id'],'rid'=>$uid]; } $log=db('bbsask')->where($where)->order('id desc')->limit(1)->find(); $logs=[]; if($log){ $logs=unserialize($log['content']); if(count($logs)){ foreach ($logs as $k=>$vo){ if(($log['uid']==$mid&&isset($vo['ques']))||$log['rid']==$mid&&isset($vo['ans'])){ $logs[$k]['nickname']=$user['member_list_nickname']; $logs[$k]['poster']=$user['member_list_headpic']; } if(($log['uid']==$uid&&isset($vo['ques']))||$log['rid']==$uid&&isset($vo['ans'])){ $find=Db::name('member_list')->field('member_list_nickname,member_list_headpic')->where(['member_list_id'=>$uid])->find(); $logs[$k]['nickname']=$find['member_list_nickname']; $logs[$k]['poster']=$find['member_list_headpic']; } if(isset($vo['ans'])&&$vo['ans'])$logs[$k]['ans']=RemoveXSS($vo['ans']); if(isset($vo['ques'])&&$vo['ques'])$logs[$k]['ques']=RemoveXSS($vo['ques']); $logs[$k]['time']=date("H:i",$vo['time']); } } } return $this->success("查询成功",'',$logs); } public function history(){ $uid=session('mhid'); $rid=input('uid'); $type=input('type'); if(!$uid){ return $this->redirect("login/index",['jump'=>url('bbs/chatbot')]); } if($uid==$rid){ $this->error("参数错误",url('bbs/index')); } $ques=input("ques"); $ans=isset($_POST['ans'])?$_POST['ans']:''; $where=['uid'=>$uid,'rid'=>$rid]; if($type=='replay'){ $where=['rid'=>$uid,'uid'=>$rid]; } $log=db('bbsask')->where($where)->order('id desc')->limit(1)->find(); $content=[]; if($log){ $content=unserialize($log['content']); } if($type=='replay'){ array_push($content,['ans'=>$ans,'time'=>time()]); }else{ array_push($content,['ques'=>$ques,'time'=>time()]); } $content=serialize($content); if($log){ db('bbsask')->where($where)->update(['content'=>$content]); }else{ $data=[]; if($type=='replay'){ $data['rid']=$uid; $data['uid']=$rid; }else{ $data['uid']=$uid; $data['rid']=$rid; } $data['create_time']=time(); $data['update_time']=time(); $data['content']=$content; db('bbsask')->insert($data); } return $this->success("提交成功"); } public function chatroom(){ $uid=input('uid'); $type=input('type'); $user=session('muser'); if(empty($uid))$this->error("缺少参数",url('bbs/index')); $this->assign('uid',$uid); $this->assign('type',$type); $this->assign('nickname',$user['member_list_nickname']); $this->assign('poster',$user['member_list_headpic']); return $this->view->fetch(); } public function msg(){ $user=session('muser'); $uid=$user['member_list_id']; $where=['uid|rid'=>$uid,'status'=>1]; $list=db('bbsask')->where($where)->order('id desc')->paginate(10); $show = $list->render(); if(count($list)){ $list=$list->toArray(); $data=$list['data']; foreach ($data as $k=>$row){ $nickname=''; $poster=''; $sid=$row['rid']; if($uid==$row['rid']){ $sid=$row['uid']; } $find=Db::name('member_list')->field('member_list_nickname,member_list_headpic')->where(['member_list_id'=>$sid])->find(); if($find){ $nickname=$find['member_list_nickname']; $poster=$find['member_list_headpic']; } $data[$k]['nickname']=$nickname; $data[$k]['poster']=$poster; } $list=$data; } $this->assign("list",$list); $this->assign("show",$show); $this->assign("uid",$uid); return $this->view->fetch(); } public function ajaxlist(){ $pid=input('pid'); $cid=input('cid'); $page=input('page'); $type=input('type'); $keyword=input('keyword'); $order='a.update_time desc,a.id desc'; $where=['a.status'=>1,'a.parent_id'=>$pid,'a.top'=>0]; switch ($type){ case 'subject': break; case 'comment': $order="a.comment desc,a.id desc"; break; case 'hot': $where['a.viewnum']=['egt',30]; $order="a.viewnum desc,a.id desc"; break; case 'marrow': $where['a.marrow']=1; break; } if($cid&&$cid!=$pid){ $where['a.child_id']=$cid; } if($keyword){ $where['a.name|a.content']=['like',['%'.$keyword,'%'.$keyword.'%',$keyword],'or']; } $list= Db::name('bbslist')->alias("a")->field("a.link,a.mid,a.parent_id,a.child_id,a.viewnum,a.create_time,a.id,a.child_id,a.name,a.content,a.comment,m.member_list_groupid as groupid,m.member_list_nickname as nickname,m.signature as uname,m.member_list_headpic as poster")->join(config('database.prefix').'member_list m','a.mid =m.member_list_id','left')->where($where)->order($order)->paginate(5); $cates= Db::name('bbstype')->where(['status'=>1])->order('sort desc,id asc')->select(); $showcates=[]; if(count($cates)){ $keys=array_column($cates,'id'); $vals=array_column($cates,'name'); $showcates=array_combine($keys, $vals); } if(count($list)){ $list=$list->toArray(); $data=$list['data']; foreach ($data as $j=>$jow){ $scate=isset($showcates[$jow['child_id']])?$showcates[$jow['child_id']]:''; if(empty($scate))$scate=isset($showcates[$jow['parent_id']])?$showcates[$jow['parent_id']]:''; $data[$j]['name']=($scate?'【'.$scate.'】':'').RemoveXSS($jow['name']); if(empty($jow['uname']))$jow['uname']=$jow['nickname']; if($jow['groupid']==10)$jow['uname']=$jow['uname'].'(版主)'; $data[$j]['uname']=$this->encryptName($jow['uname']); $data[$j]['created']=$this->showtime($jow['create_time']); $data[$j]['create_time']=date("Y-m-d H:i",$jow['create_time']); $data[$j]['content']=sub_str(strip_tags(RemoveXSS(htmlspecialchars_decode($jow['content']))),100); } $list['data']=$data; } return $this->success("查询成功","",$list); } public function ajaxlog(){ $pid=input('pid'); $list= Db::name('bbslog')->alias("a")->field("a.*,m.member_list_groupid as groupid,m.member_list_nickname as nickname,m.signature as uname,m.member_list_headpic as poster")->join(config('database.prefix').'member_list m','a.mid =m.member_list_id','left')->where(['a.status'=>1,'a.list_id'=>$pid])->order('top desc,id asc')->paginate(10); if(count($list)){ $list=$list->toArray(); $data=$list['data']; foreach ($data as $k=>$jow){ $pid=$jow['pid']; $parent=[]; if($pid){ $parent=Db::name('bbslog')->alias("a")->field("a.content,m.member_list_groupid as groupid,m.member_list_nickname as nickname,m.signature as uname,m.member_list_headpic as poster")->join(config('database.prefix').'member_list m','a.mid =m.member_list_id','left')->where(['a.status'=>1,'a.id'=>$pid])->find(); if($parent){ $parent['content']=RemoveXSS(htmlspecialchars_decode($parent['content'])); if(empty($parent['uname']))$parent['uname']=$parent['nickname']; if($parent['groupid']==10)$parent['uname']=$parent['uname'].'(版主)'; $parent['uname']=$this->encryptName($parent['uname']); } } if(empty($jow['uname']))$jow['uname']=$jow['nickname']; if($jow['groupid']==10)$jow['uname']=$jow['uname'].'(版主)'; $data[$k]['uname']=$this->encryptName($jow['uname']); $data[$k]['content']=RemoveXSS(htmlspecialchars_decode($jow['content'])); $data[$k]['create_time']=date("Y-m-d H:i",$jow['create_time']); $data[$k]['parent']=$parent; } $list['data']=$data; } return $this->success("查询成功","",$list); } public function love(){ $id=input('id'); $pid=input('pid'); $mid=session("mhid"); if(empty($mid)){ $this->error('请先登录',url("login/index",['jump'=>urlencode(url('detail',['id'=>$id]))])); } if(empty($id)){ $this->error('缺少参数id'); } if(empty($pid)){ $this->error('缺少参数pid'); } $check=Db::name('bbslove')->where(['comid'=>$id,'mid'=>$mid])->count(); if($check)$this->error("已点赞"); $query=Db::name('bbslog')->where(['id'=>$id,'list_id'=>$pid])->setInc('love'); if($query!==false){ $data=[]; $data['create_time']=time(); $data['mid']=$mid; $data['comid']=$id; $data['listid']=$pid; Db::name('bbslove')->insert($data); $this->success('点赞成功'); }else{ $this->error('点赞失败'); } } public function comment(){ $id=input('id'); if(empty($id)){ $this->error('缺少参数id'); } $pid=input('pid',0,'intval'); $mid=session("mhid"); if(empty($mid)){ $this->error('请先登录',url("login/index",['jump'=>urlencode(url('detail',['id'=>$id]))])); } $content=input('content'); if(empty($content)){ $this->error('请输入您的观点'); } $find=Db::name('bbslist')->where(['id'=>$id])->find(); if(!$find){ $this->error('此文章不存在'); } if(!$find['open']){ $this->error('此文章禁止留言'); } $data=[]; $data['create_time']=time(); $data['content']=$content; $data['mid']=$mid; $data['list_id']=$id; $data['pid']=$pid; $data['child_id']=$find['child_id']; $data['parent_id']=$find['parent_id']; $data['status']=0; $query=Db::name('bbslog')->insert($data); if($query!==false){ Db::name('bbslist')->where(['id'=>$id])->setInc('comment'); Db::name('bbslist')->where(['id'=>$id])->update(['update_time'=>time()]); $this->success('留言成功'); }else{ $this->error('留言失败'); } } }