You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
467 lines
20 KiB
467 lines
20 KiB
<?php
|
|
namespace app\member\controller;
|
|
use think\Db;
|
|
class Bbs extends Base{
|
|
public function __construct(){
|
|
parent::__construct();
|
|
if(!session('mhid')) return $this->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('留言失败');
|
|
}
|
|
}
|
|
}
|
|
|