// +---------------------------------------------------------------------- namespace Portal\Controller; use Common\Controller\AdminbaseController; class AdminPostController extends AdminbaseController { protected $posts_model; protected $term_relationships_model; protected $terms_model; function _initialize() { parent::_initialize(); $this->posts_model = D("Portal/Posts"); $this->terms_model = D("Portal/Terms"); $this->term_relationships_model = D("Portal/TermRelationships"); } // 后台文章管理列表 public function index(){ $this->_lists(array("post_status"=>array('neq',3))); $this->_getTree(); $this->display(); } // 文章添加 public function add(){ $terms = $this->terms_model->order(array("listorder"=>"asc"))->select(); $term_id = I("get.term",0,'intval'); $this->_getTermTree(); $term=$this->terms_model->where(array('term_id'=>$term_id))->find(); $this->assign("term",$term); $this->assign("terms",$terms); $this->display(); } // 文章添加提交 public function add_post(){ if (IS_POST) { if(empty($_POST['term'])){ $this->error("请至少选择一个分类!"); } if(!empty($_POST['photos_alt']) && !empty($_POST['photos_url'])){ foreach ($_POST['photos_url'] as $key=>$url){ $photourl=sp_asset_relative_url($url); $_POST['smeta']['photo'][]=array("url"=>$photourl,"alt"=>$_POST['photos_alt'][$key]); } } $_POST['smeta']['thumb'] = sp_asset_relative_url($_POST['smeta']['thumb']); $_POST['post']['post_modified']=date("Y-m-d H:i:s",time()); $_POST['post']['post_author']=get_current_admin_id(); $article=I("post.post"); $article['smeta']=json_encode($_POST['smeta']); $article['post_content']=htmlspecialchars_decode($article['post_content']); $result=$this->posts_model->add($article); if ($result) { foreach ($_POST['term'] as $mterm_id){ $this->term_relationships_model->add(array("term_id"=>intval($mterm_id),"object_id"=>$result)); } $this->success("添加成功!"); } else { $this->error("添加失败!"); } } } // 文章编辑 public function edit(){ $id= I("get.id",0,'intval'); $term_relationship = M('TermRelationships')->where(array("object_id"=>$id,"status"=>1))->getField("term_id",true); $this->_getTermTree($term_relationship); $terms=$this->terms_model->select(); $post=$this->posts_model->where("id=$id")->find(); $this->assign("post",$post); $this->assign("smeta",json_decode($post['smeta'],true)); $this->assign("terms",$terms); $this->assign("term",$term_relationship); $this->display(); } // 文章编辑提交 public function edit_post(){ if (IS_POST) { if(empty($_POST['term'])){ $this->error("请至少选择一个分类!"); } $post_id=intval($_POST['post']['id']); $this->term_relationships_model->where(array("object_id"=>$post_id,"term_id"=>array("not in",implode(",", $_POST['term']))))->delete(); foreach ($_POST['term'] as $mterm_id){ $find_term_relationship=$this->term_relationships_model->where(array("object_id"=>$post_id,"term_id"=>$mterm_id))->count(); if(empty($find_term_relationship)){ $this->term_relationships_model->add(array("term_id"=>intval($mterm_id),"object_id"=>$post_id)); }else{ $this->term_relationships_model->where(array("object_id"=>$post_id,"term_id"=>$mterm_id))->save(array("status"=>1)); } } if(!empty($_POST['photos_alt']) && !empty($_POST['photos_url'])){ foreach ($_POST['photos_url'] as $key=>$url){ $photourl=sp_asset_relative_url($url); $_POST['smeta']['photo'][]=array("url"=>$photourl,"alt"=>$_POST['photos_alt'][$key]); } } $_POST['smeta']['thumb'] = sp_asset_relative_url($_POST['smeta']['thumb']); unset($_POST['post']['post_author']); $_POST['post']['post_modified']=date("Y-m-d H:i:s",time()); $article=I("post.post"); $article['smeta']=json_encode($_POST['smeta']); $article['post_content']=htmlspecialchars_decode($article['post_content']); $result=$this->posts_model->save($article); if ($result!==false) { $this->success("保存成功!"); } else { $this->error("保存失败!"); } } } // 文章排序 public function listorders() { $status = parent::_listorders($this->term_relationships_model); if ($status) { $this->success("排序更新成功!"); } else { $this->error("排序更新失败!"); } } /** * 文章列表处理方法,根据不同条件显示不同的列表 * @param array $where 查询条件 */ private function _lists($where=array()){ $term_id=I('request.term',0,'intval'); $where['post_type']=array(array('eq',1),array('exp','IS NULL'),'OR'); if(!empty($term_id)){ $where['b.term_id']=$term_id; $term=$this->terms_model->where(array('term_id'=>$term_id))->find(); $this->assign("term",$term); } $start_time=I('request.start_time'); if(!empty($start_time)){ $where['post_date']=array( array('EGT',$start_time) ); } $end_time=I('request.end_time'); if(!empty($end_time)){ if(empty($where['post_date'])){ $where['post_date']=array(); } array_push($where['post_date'], array('ELT',$end_time)); } $keyword=I('request.keyword'); if(!empty($keyword)){ $where['post_title']=array('like',"%$keyword%"); } $this->posts_model ->alias("a") ->where($where); if(!empty($term_id)){ $this->posts_model->join("__TERM_RELATIONSHIPS__ b ON a.id = b.object_id"); } $count=$this->posts_model->count(); $page = $this->page($count, 20); $this->posts_model ->alias("a") ->join("__USERS__ c ON a.post_author = c.id") ->where($where) ->limit($page->firstRow , $page->listRows) ->order("a.post_date DESC"); if(empty($term_id)){ $this->posts_model->field('a.*,c.user_login,c.user_nicename'); }else{ $this->posts_model->field('a.*,c.user_login,c.user_nicename,b.listorder,b.tid'); $this->posts_model->join("__TERM_RELATIONSHIPS__ b ON a.id = b.object_id"); } $posts=$this->posts_model->select(); $this->assign("page", $page->show('Admin')); $this->assign("formget",array_merge($_GET,$_POST)); $this->assign("posts",$posts); } // 获取文章分类树结构 select 形式 private function _getTree(){ $term_id=empty($_REQUEST['term'])?0:intval($_REQUEST['term']); $result = $this->terms_model->order(array("listorder"=>"asc"))->select(); $tree = new \Tree(); $tree->icon = array('   │ ', '   ├─ ', '   └─ '); $tree->nbsp = '   '; foreach ($result as $r) { $r['str_manage'] = ' $r['term_id'])) . '">添加子类 | $r['term_id'])) . '">修改 | $r['term_id'])) . '">删除 '; $r['visit'] = "访问"; $r['taxonomys'] = $this->taxonomys[$r['taxonomy']]; $r['id']=$r['term_id']; $r['parentid']=$r['parent']; $r['selected']=$term_id==$r['term_id']?"selected":""; $array[] = $r; } $tree->init($array); $str=""; $taxonomys = $tree->get_tree(0, $str); $this->assign("taxonomys", $taxonomys); } // 获取文章分类树结构 private function _getTermTree($term=array()){ $result = $this->terms_model->order(array("listorder"=>"asc"))->select(); $tree = new \Tree(); $tree->icon = array('   │ ', '   ├─ ', '   └─ '); $tree->nbsp = '   '; foreach ($result as $r) { $r['str_manage'] = ' $r['term_id'])) . '">添加子类 | $r['term_id'])) . '">修改 | $r['term_id'])) . '">删除 '; $r['visit'] = "访问"; $r['taxonomys'] = $this->taxonomys[$r['taxonomy']]; $r['id']=$r['term_id']; $r['parentid']=$r['parent']; $r['selected']=in_array($r['term_id'], $term)?"selected":""; $r['checked'] =in_array($r['term_id'], $term)?"checked":""; $array[] = $r; } $tree->init($array); $str=""; $taxonomys = $tree->get_tree(0, $str); $this->assign("taxonomys", $taxonomys); } // 文章删除 public function delete(){ if(isset($_GET['id'])){ $id = I("get.id",0,'intval'); if ($this->posts_model->where(array('id'=>$id))->save(array('post_status'=>3)) !==false) { $this->success("删除成功!"); } else { $this->error("删除失败!"); } } if(isset($_POST['ids'])){ $ids = I('post.ids/a'); if ($this->posts_model->where(array('id'=>array('in',$ids)))->save(array('post_status'=>3))!==false) { $this->success("删除成功!"); } else { $this->error("删除失败!"); } } } // 文章审核 public function check(){ if(isset($_POST['ids']) && $_GET["check"]){ $ids = I('post.ids/a'); if ( $this->posts_model->where(array('id'=>array('in',$ids)))->save(array('post_status'=>1)) !== false ) { $this->success("审核成功!"); } else { $this->error("审核失败!"); } } if(isset($_POST['ids']) && $_GET["uncheck"]){ $ids = I('post.ids/a'); if ( $this->posts_model->where(array('id'=>array('in',$ids)))->save(array('post_status'=>0)) !== false) { $this->success("取消审核成功!"); } else { $this->error("取消审核失败!"); } } } // 文章置顶 public function top(){ if(isset($_POST['ids']) && $_GET["top"]){ $ids = I('post.ids/a'); if ( $this->posts_model->where(array('id'=>array('in',$ids)))->save(array('istop'=>1))!==false) { $this->success("置顶成功!"); } else { $this->error("置顶失败!"); } } if(isset($_POST['ids']) && $_GET["untop"]){ $ids = I('post.ids/a'); if ( $this->posts_model->where(array('id'=>array('in',$ids)))->save(array('istop'=>0))!==false) { $this->success("取消置顶成功!"); } else { $this->error("取消置顶失败!"); } } } // 文章推荐 public function recommend(){ if(isset($_POST['ids']) && $_GET["recommend"]){ $ids = I('post.ids/a'); if ( $this->posts_model->where(array('id'=>array('in',$ids)))->save(array('recommended'=>1))!==false) { $this->success("推荐成功!"); } else { $this->error("推荐失败!"); } } if(isset($_POST['ids']) && $_GET["unrecommend"]){ $ids = I('post.ids/a'); if ( $this->posts_model->where(array('id'=>array('in',$ids)))->save(array('recommended'=>0))!==false) { $this->success("取消推荐成功!"); } else { $this->error("取消推荐失败!"); } } } // 文章批量移动 public function move(){ if(IS_POST){ if(isset($_GET['ids']) && $_GET['old_term_id'] && isset($_POST['term_id'])){ $old_term_id=I('get.old_term_id',0,'intval'); $term_id=I('post.term_id',0,'intval'); if($old_term_id!=$term_id){ $ids=explode(',', I('get.ids/s')); $ids=array_map('intval', $ids); foreach ($ids as $id){ $this->term_relationships_model->where(array('object_id'=>$id,'term_id'=>$old_term_id))->delete(); $find_relation_count=$this->term_relationships_model->where(array('object_id'=>$id,'term_id'=>$term_id))->count(); if($find_relation_count==0){ $this->term_relationships_model->add(array('object_id'=>$id,'term_id'=>$term_id)); } } } $this->success("移动成功!"); } }else{ $tree = new \Tree(); $tree->icon = array('   │ ', '   ├─ ', '   └─ '); $tree->nbsp = '   '; $terms = $this->terms_model->order(array("path"=>"ASC"))->select(); $new_terms=array(); foreach ($terms as $r) { $r['id']=$r['term_id']; $r['parentid']=$r['parent']; $new_terms[] = $r; } $tree->init($new_terms); $tree_tpl=""; $tree=$tree->get_tree(0,$tree_tpl); $this->assign("terms_tree",$tree); $this->display(); } } // 文章批量复制 public function copy(){ if(IS_POST){ if(isset($_GET['ids']) && isset($_POST['term_id'])){ $ids=explode(',', I('get.ids/s')); $ids=array_map('intval', $ids); $uid=sp_get_current_admin_id(); $term_id=I('post.term_id',0,'intval'); $term_count=$terms_model=M('Terms')->where(array('term_id'=>$term_id))->count(); if($term_count==0){ $this->error('分类不存在!'); } $data=array(); foreach ($ids as $id){ $find_post=$this->posts_model->field('post_keywords,post_source,post_content,post_title,post_excerpt,smeta')->where(array('id'=>$id))->find(); if($find_post){ $find_post['post_author']=$uid; $find_post['post_date']=date('Y-m-d H:i:s'); $find_post['post_modified']=date('Y-m-d H:i:s'); $post_id=$this->posts_model->add($find_post); if($post_id>0){ array_push($data, array('object_id'=>$post_id,'term_id'=>$term_id)); } } } if ( $this->term_relationships_model->addAll($data) !== false) { $this->success("复制成功!"); } else { $this->error("复制失败!"); } } }else{ $tree = new \Tree(); $tree->icon = array('   │ ', '   ├─ ', '   └─ '); $tree->nbsp = '   '; $terms = $this->terms_model->order(array("path"=>"ASC"))->select(); $new_terms=array(); foreach ($terms as $r) { $r['id']=$r['term_id']; $r['parentid']=$r['parent']; $new_terms[] = $r; } $tree->init($new_terms); $tree_tpl=""; $tree=$tree->get_tree(0,$tree_tpl); $this->assign("terms_tree",$tree); $this->display(); } } // 文章回收站列表 public function recyclebin(){ $this->_lists(array('post_status'=>array('eq',3))); $this->_getTree(); $this->display(); } // 清除已经删除的文章 public function clean(){ if(isset($_POST['ids'])){ $ids = I('post.ids/a'); $ids = array_map('intval', $ids); $status=$this->posts_model->where(array("id"=>array('in',$ids),'post_status'=>3))->delete(); $this->term_relationships_model->where(array('object_id'=>array('in',$ids)))->delete(); if ($status!==false) { $this->success("删除成功!"); } else { $this->error("删除失败!"); } }else{ if(isset($_GET['id'])){ $id = I("get.id",0,'intval'); $status=$this->posts_model->where(array("id"=>$id,'post_status'=>3))->delete(); $this->term_relationships_model->where(array('object_id'=>$id))->delete(); if ($status!==false) { $this->success("删除成功!"); } else { $this->error("删除失败!"); } } } } // 文章还原 public function restore(){ if(isset($_GET['id'])){ $id = I("get.id",0,'intval'); if ($this->posts_model->where(array("id"=>$id,'post_status'=>3))->save(array("post_status"=>"1"))) { $this->success("还原成功!"); } else { $this->error("还原失败!"); } } } }