why.xingtongworld.com项目
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.
 
 
 
 
 

499 lines
20 KiB

<?php
// +----------------------------------------------------------------------
// | YFCMF [ WE CAN DO IT MORE SIMPLE ]
// +----------------------------------------------------------------------
// | Copyright (c) 2015-2016 http://www.rainfer.cn All rights reserved.
// +----------------------------------------------------------------------
// | Author: rainfer <81818832@qq.com>
// +----------------------------------------------------------------------
namespace app\bbs\controller;
use think\Db;
class Index extends Cbase{
/**
* 中间加密 替换字符串的子串
*/
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'];
$lists= 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')->paginate(5);
$list=[];
if($lists){
$lists=$lists->toArray();
$list=$lists['data'];
unset($lists['data']);
}
$cates[$k]['pages']=$lists;
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);
$where=[];
$where=['status'=>1,'viewnum'=>['egt',30]];
$order="viewnum desc,id desc";
$hots= Db::name('bbslist')->where($where)->order($order)->limit(5)->select();
$this->assign("hots",$hots);
$where=[];
$where=['status'=>1,'marrow'=>1];
$order="update_time desc,id desc";
$hots= Db::name('bbslist')->where($where)->order($order)->limit(5)->select();
$this->assign("marrows",$hots);
$user=session('user');
$this->assign("user",$user);
return $this->view->fetch(':index');
}
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();
$lists=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])->order('top desc,id asc')->paginate(10);
$comments=[];
if($lists){
$lists=$lists->toArray();
$comments=$lists['data'];
unset($lists['data']);
}
$this->assign("pages",$lists);
$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("hid");
$this->assign("mid",$mid);
Db::name('bbslist')->where(['id'=>$id])->setInc('viewnum');
$where=[];
$where=['status'=>1,'marrow'=>1];
$order="update_time desc,id desc";
$hots= Db::name('bbslist')->where($where)->order($order)->limit(5)->select();
$this->assign("marrows",$hots);
$where=[];
$where=['status'=>1,'viewnum'=>['egt',30]];
$order="viewnum desc,id desc";
$hots= Db::name('bbslist')->where($where)->order($order)->limit(5)->select();
$this->assign("hots",$hots);
return $this->view->fetch(':detail');
}
public function article(){
$this->check_login();
$mid=session("hid");
$id=input('id');
$find=['name'=>'','id'=>'','content'=>'','child_id'=>'','parent_id'=>''];
if($id){
$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);
$jump=url('home/center/mybbs');
if($rst!==false){
$this->success('修改成功',url('index'));
}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(":article");
}
public function ajaxchat(){
$user=session('user');
$mid=session('hid');
$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('hid');
$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('user');
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']);
$where=[];
$where=['status'=>1,'marrow'=>1];
$order="update_time desc,id desc";
$hots= Db::name('bbslist')->where($where)->order($order)->limit(5)->select();
$this->assign("marrows",$hots);
$where=[];
$where=['status'=>1,'viewnum'=>['egt',30]];
$order="viewnum desc,id desc";
$hots= Db::name('bbslist')->where($where)->order($order)->limit(5)->select();
$this->assign("hots",$hots);
return $this->view->fetch(':chatroom');
}
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.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.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.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.id'=>$pid])->find();
if($parent){
$parent['content']=RemoveXSS(strip_tags(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("hid");
if(empty($mid)){
$this->error('请先登录');
}
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("hid");
if(empty($mid)){
$this->error('请先登录');
}
$content=input('content','','strip_tags');
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('留言失败');
}
}
}