westdc-zf1/application/admin/controllers/NewsController.php

692 lines
18 KiB
PHP
Raw Normal View History

<?php
class Admin_NewsController extends Zend_Controller_Action
{
function preDispatch()
{
$this->db=Zend_Registry::get('db');
$this->view->config = Zend_Registry::get('config');
$this->messenger=$this->_helper->getHelper('FlashMessenger');
$this->view->messages = $this->messenger->getMessages();
}
function postDispatch()
{
$this->view->messages = $this->messenger->getMessages();
}
function indexAction()
{
$sql = "select n.*,c.title as catlog,u.realname as author from news_archives n
left join news_category c on n.typeid=c.id
LEFT JOIN users u ON n.userid=u.id
order by n.ts_created desc limit 10";
$rs = $this->db->query($sql);
$rows = $rs->fetchAll();
$this->view->news = $rows;
$sql = "SELECT count(id) as c FROM news_archives";
$rs = $this->db->query($sql);
$row = $rs->fetch();
$this->view->totle = $row;
$sql = "SELECT count(id) as c FROM news_category";
$rs = $this->db->query($sql);
$row = $rs->fetch();
$this->view->typec = $row;
}//indexAction 首页
function newslistAction(){
2012-11-23 09:54:37 +00:00
include_once("news.php");
$News = new news($this->db);
$type = $this->_request->getParam('type');
if(!empty($type))
{
2012-11-23 09:54:37 +00:00
$sql = "select n.*,c.title as catlog,c.code as author from ".$News->tbl_archives." n
left join ".$News->tbl_categorys." c on n.typeid=c.id
LEFT JOIN users u ON n.userid=u.id
WHERE n.typeid='$type' order by n.ts_created desc";
}else
{
2012-11-23 09:54:37 +00:00
$sql = "select n.*,c.title as catlog,c.code from ".$News->tbl_archives." n
left join ".$News->tbl_catalog." ct on ct.aid=n.id
left join ".$News->tbl_categorys." c on c.id = ct.cid
LEFT JOIN users u ON n.userid=u.id
order by n.ts_created desc";
}
$rs = $this->db->query($sql);
$rows = $rs->fetchAll();
$paginator = Zend_Paginator::factory($rows);
$paginator->setCurrentPageNumber($this->_getParam('page'));
$paginator->setItemCountPerPage($this->view->config->page->max);
$paginator->setView($this->view);
Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml');
$this->view->paginator=$paginator;
2012-11-23 09:54:37 +00:00
$this->view->types=$News->getAllCategory();
$this->view->type = $type;
}//newslistAction 新闻列表
function catlogAction()
{
$add = $this->_request->getParam('add');
$submit = $this->_request->getParam('submit');
$delete = $this->_request->getParam('delete');
$edit = $this->_request->getParam('edit');
2012-11-23 09:54:37 +00:00
include_once("news.php");
$News = new news($this->db);
if($add)
{
2012-11-23 09:54:37 +00:00
$this->view->ptype = $News->ptype;
$this->_helper->viewRenderer('category-add');
2012-11-23 09:54:37 +00:00
$this->view->categories = $News->getAllCategory();
2012-08-23 08:01:19 +00:00
if(empty($submit)){
//$this->_helper->viewRenderer('category-add');
2012-11-23 09:54:37 +00:00
2012-08-23 08:01:19 +00:00
}else{
2012-11-23 09:54:37 +00:00
$data = array();
$data['title'] = $this->_request->getParam('ctitle');
2012-11-23 09:54:37 +00:00
$data['code'] = $this->_request->getParam('code');
$data['fid'] = $this->_request->getParam('fid');
2012-11-23 09:54:37 +00:00
$data['ptype'] = $this->_request->getParam('ptype');
$data['is_pub'] = 1;
$this->view->info = $data;
if(empty($data['title']))
{
$this->view->error = "请输入标题";
return true;
}
2012-11-23 09:54:37 +00:00
if(empty($data['code']))
{
$this->view->error = "请输入栏目连接如http://westdc.westgis.ac.cn/news/notice则只需要输入notice";
return true;
}
2012-11-23 09:54:37 +00:00
if(!preg_match("/^[a-z]+$/",$data['code']))
{
$this->view->error = "url格式不正确仅允许26个小写字母";
return true;
}
2012-11-23 09:54:37 +00:00
if($this->db->insert($News->tbl_categorys,$data))
{
$this->view->msg = '提示信息:栏目添加成功!';
$this->view->jump_url = '/admin/news/catlog';
return true;
}else{
$this->view->error = "添加失败,请重试";
return true;
}
}
}//栏目添加
if($delete>0)
{
2012-11-23 09:54:37 +00:00
$sql = "delete from ".$News->tbl_categorys." where id='$delete'";
if($this->db->exec($sql)>0)
{
$this->messenger->addMessage('提示信息:栏目删除成功!');
$this->_redirect('/admin/news/catlog');
}
}//栏目删除
2012-08-23 08:01:19 +00:00
if($edit>0)
{
2012-08-23 08:01:19 +00:00
$submit = $this->_getParam('submit');
2012-11-23 09:54:37 +00:00
$this->_helper->viewRenderer('category-edit');
$this->view->ptype = $News->ptype;
$this->view->info = $News->getCategory($edit);
$this->view->categories = $this->getAllcategory($edit);
if(!empty($submit))
{
2012-08-23 08:01:19 +00:00
2012-11-23 09:54:37 +00:00
$data = array();
2012-08-23 08:01:19 +00:00
2012-11-23 09:54:37 +00:00
$data['title'] = $this->_request->getParam('ctitle');
$data['code'] = $this->_request->getParam('code');
$data['fid'] = $this->_request->getParam('fid');
$data['ptype'] = $this->_request->getParam('ptype');
$data['is_pub'] = $this->_request->getParam('is_pub');
2012-08-23 08:01:19 +00:00
2012-11-23 09:54:37 +00:00
$this->view->info = $data;
2012-08-23 08:01:19 +00:00
2012-11-23 09:54:37 +00:00
if(empty($data['title']))
{
2012-11-23 09:54:37 +00:00
$this->view->error = "请输入标题";
return true;
}
2012-11-23 09:54:37 +00:00
if(empty($data['code']))
2012-08-23 08:01:19 +00:00
{
2012-11-23 09:54:37 +00:00
$this->view->error = "请输入栏目连接如http://westdc.westgis.ac.cn/news/notice则只需要输入notice";
return true;
}
if(!preg_match("/^[a-z]+$/",$data['code']))
{
$this->view->error = "url格式不正确仅允许26个小写字母";
return true;
}
if($this->db->update($News->tbl_categorys,$data,"id=$edit"))
{
$this->view->msg = '提示信息:栏目添加成功!';
$this->view->jump_url = '/admin/news/catlog';
return true;
}else{
$this->view->error = "添加失败,请重试";
return true;
2012-08-23 08:01:19 +00:00
}
}
2012-08-23 08:01:19 +00:00
}//栏目编辑
else
{
include_once("news.php");
$news = new news($this->db);
$catlogs = $news->getAllCategory(-1);
/*
2012-08-23 08:01:19 +00:00
$sql="select * from news_category WHERE fid=0 order by displayorder asc";
$re=$this->db->query($sql);
$catlogs=$re->fetchAll();
2012-08-23 08:01:19 +00:00
foreach($catlogs as $k=>$v)
{
$catlogs[$k]['sub'] = $this->getSubCategory($v['id']);
}
*/
$this->view->catlogs=$catlogs;
}//栏目列表
}//栏目管理
2012-08-23 08:01:19 +00:00
function getSubCategory($fid)
{
$sql = "SELECT * FROM news_category WHERE fid=?";
$sth = $this->db->prepare($sql);
$sth->execute(array($fid));
$rows = $sth->fetchAll();
if(empty($rows) || count($rows)<1)
{
return 0;
}else{
return $rows;
}
}
function getCategory($id)
{
$sql = "SELECT * FROM news_category WHERE id=?";
$sth = $this->db->prepare($sql);
$sth->execute(array($id));
$rows = $sth->fetch();
return $rows;
}
function getAllcategory($id=0)
2012-11-23 09:54:37 +00:00
{
2012-08-23 08:01:19 +00:00
$_addon = '';
if(!empty($id))
{
$_addon = "WHERE id not in ($id)";
}
$sql = "SELECT * FROM news_category $_addon ORDER BY id DESC";
$sth = $this->db->prepare($sql);
$sth->execute();
return $sth->fetchAll();
}
2012-11-23 09:54:37 +00:00
//新闻添加页面
function newsaddAction()
{
2012-11-23 09:54:37 +00:00
include_once("news.php");
$News = new news($this->db);
$this->view->types=$News->getAllCategory();
}//newsadd 新闻添加
2012-11-23 09:54:37 +00:00
//新闻添加
2011-10-09 10:15:50 +00:00
function archivesaddAction()
{
$this->_helper->layout->disableLayout();
$this->_helper->viewRenderer->setNoRender();
2012-11-23 09:54:37 +00:00
include_once("news.php");
$News = new news($this->db);
$auth = Zend_Auth::getInstance();
if($auth->hasIdentity())
{
$user = $auth->getIdentity();
$uid = $user->id;
}
2011-10-09 10:15:50 +00:00
$datavar = array(
2012-11-23 09:54:37 +00:00
'title',
'source',
'image',
'body',
'typeid',
'pub',
'pubtimer',
'pubtime',
'description',
'keyword'
2011-10-09 10:15:50 +00:00
);
foreach($_POST as $k=>$v)
{
if(in_array($k,$datavar))
{
$$k=$v;
}
}
$msg=array();
if(empty($title)) $msg[]="标题不能为空";
2012-11-23 09:54:37 +00:00
if(mb_strlen($title)>200) $msg[]="标题长度不能超过200个字符";
if(mb_strlen($keyword)>200) $msg[] = "关键词长度不能超过200个字符现在输入了".strlen($keyword)."个字符";
if(mb_strlen($description)>400) $msg[] = "内容描述不能超过200个字符现在输入了".strlen($description)."个字符";
2011-10-09 10:15:50 +00:00
if(empty($body)) $msg[]="请填写内容";
if($typeid==0) $msg[]="请选择栏目";
if(count($msg)>0)
{
echo '<div class="box box-error">发布失败:</div>
<div class="box box-error-msg">
<ol>';
foreach ($msg as $v)
{
echo '<li>'.$v.'</li>';
}
echo'</ol>
</div>
';
2012-11-23 09:54:37 +00:00
return true;
}
if(!empty($pubtimer))
{
$pubtime = date("Y-m-d H:i:s",strtotime($pubtime));
2011-10-09 10:15:50 +00:00
}
else
{
2012-11-23 09:54:37 +00:00
$pubtime = date("Y-m-d H:i:s",time());
}
$data=array(
'title' => $this->db->quote($this->replacehtml($title)),
'userid' => $uid,
'description'=> $this->db->quote($this->replacehtml($description)),
'image' => $this->db->quote($image) ,
'source' => $this->db->quote($source),
'ts_published' => $this->db->quote($pubtime),
'is_pub' => $pub,
'body' => $this->db->quote($body)
);
$sql = "INSERT INTO ".$News->tbl_archives." (userid,title,description,image,source,ts_published,is_pub,body)
VALUES (
".$data['userid'].",
".$data['title'].",
".$data['description'].",
".$data['image'].",
".$data['source'].",
".$data['ts_published'].",
".$data['is_pub'].",
".$data['body']."
)
RETURNING id
";
try{
$sth = $this->db->prepare($sql);
if($sth->execute())
2011-10-10 06:30:51 +00:00
{
2012-11-23 09:54:37 +00:00
$temp = $sth->fetch(PDO::FETCH_ASSOC);
$News->ToCatalog($temp['id'],$typeid);
echo '<div class="box box-success">发布成功!</div><script>
setTimeout("self.location=\'/admin/news/newslist\'",500);
</script>';
}else{
echo '<div class="box box-success">发布失败!请重试</div>';
2011-10-09 10:15:50 +00:00
}
2012-11-23 09:54:37 +00:00
}catch(Exception $e){
echo '<div class="box box-error">文章发布失败:</div>
<div class="box box-error-msg">
<ol>
<li>'.$e->getMessage().'</li>
</ol>
</div>';
}
}// 文章发布
function newseditAction()
{
$id = $this->_request->getParam('id');
$sql = "select * from news_archives arc where arc.id=$id";
$rs = $this->db->query($sql);
$row = $rs->fetch();
$this->view->ev = $row;
if(!empty($row['image']))
{
$sql = "SELECT * FROM attachments WHERE filename='".str_replace("/upload/",'',$row['image'])."'";
$rs = $this->db->query($sql);
$row = $rs->fetch();
$this->view->att = $row;
}
$sql="select * from news_category order by displayorder desc";
$re = $this->db->query($sql);
$types = $re->fetchAll();
$this->view->types=$types;
}
function archiveseditAction()
{
$this->_helper->layout->disableLayout();
$this->_helper->viewRenderer->setNoRender();
$id = $this->_request->getParam('id');
if(empty($id))
{
echo '<div class="box box-error">发布失败:</div>
<div class="box box-error-msg">
<ol>';
echo '<li>参数错误</li>'.
'</ol>
</div>
';
}
$auth = Zend_Auth::getInstance();
if($auth->hasIdentity())
{
$user = $auth->getIdentity();
$uid = $user->id;
}
$datavar = array(
'title','source','image','body','typeid','pub','pubtimer','pubtime','description','keyword'
);
foreach($_POST as $k=>$v)
{
if(in_array($k,$datavar))
{
$$k=$v;
2011-10-09 10:15:50 +00:00
}
}
$msg=array();
if(empty($title)) $msg[]="标题不能为空";
if(strlen($title)>200) $msg[]="标题长度不能超过200个字符";
if(strlen($keyword)>200) $msg[] = "关键词长度不能超过200个字符现在输入了".strlen($keyword)."个字符";
if(strlen($description)>500) $msg[] = "内容描述不能超过500个字符现在输入了".strlen($description)."个字符";
if(empty($body)) $msg[]="请填写内容";
if($typeid==0) $msg[]="请选择栏目";
if(count($msg)>0)
{
echo '<div class="box box-error">发布失败:</div>
<div class="box box-error-msg">
<ol>';
foreach ($msg as $v)
{
echo '<li>'.$v.'</li>';
}
echo'</ol>
</div>
';
}
else
{
$pubtime = date("Y-m-d H:i:s",strtotime($pubtime));
$date=array(
'title' => $this->replacehtml($title),
'writer' => $uid,
'keyword' => $this->replacehtml($keyword),
'description'=> $this->replacehtml($description),
'image' => $image,
'pubtime' => $pubtime,
'source' => $this->replacehtml($source),
'typeid' => $typeid,
'pub' => $pub,
'body' => $this->db->quote($body)
);
2011-10-10 06:30:51 +00:00
$sql = "UPDATE news_archives SET
title='{$date['title']}',
userid='{$date['writer']}',
keywords='{$date['keyword']}',
description='{$date['description']}',
image='{$date['image']}',
ts_published='{$date['pubtime']}',
source='{$date['source']}',
typeid='{$date['typeid']}',
is_pub='{$date['pub']}',
body=".$date['body']."
WHERE id='$id'
";
2011-10-10 06:30:51 +00:00
try{
$sth = $this->db->prepare($sql);
if($sth->execute())
{
echo '<div class="box box-success">发布成功!</div><script>
setTimeout("self.location=\'/admin/news/newsadd/id/'.$id.'\'",500);
</script>';
}else{
echo '<div class="box box-success">发布失败!写入附加表出错,请联系管理员</div>';
}
}catch(Exception $e){
echo '<div class="box box-error">文章发布失败:</div>
2011-10-09 10:15:50 +00:00
<div class="box box-error-msg">
<ol>
<li>'.$e->getMessage().'</li>
2011-10-09 10:15:50 +00:00
</ol>
</div>';
}
}
}// 文章编辑
function deleteAction(){
2011-10-09 10:15:50 +00:00
$id = $this->_request->getParam('id');
2012-11-23 09:54:37 +00:00
include_once("news.php");
$News = new news($this->db);
$News->DeleteArchives($id);
2012-11-23 09:54:37 +00:00
$this->messenger->addMessage('提示信息:档案删除成功!');
$this->_redirect('/admin/news/newslist');
}//文章删除
function uploadAction(){
try{
$auth = Zend_Auth::getInstance();
if($auth->hasIdentity())
{
$user = $auth->getIdentity();
$userid = $user->id;
}
include_once('files.php');
$files=new files();
$msg = $files -> upload('../htdocs/upload/',$_FILES['Filedata'],'image');
if(empty($msg['error']))
{
$msg['error']="";
$filename = $msg['db_path'];
$filesize = $msg['file_size'];
$filedesc = $this->_request->getParam('filedesc');
$filetype = 'thumb';
$realname = $msg['realname'];
$fileurl = $msg['file_url'];
$sql = "insert into attachments (filename,filetype,filedesc,userid,filesize,realname) values ('$filename','$filetype','$filedesc','$userid','$filesize','$realname') RETURNING id";
$sth = $this->db->prepare($sql);
$sth->execute();
$att = $sth->fetch(PDO::FETCH_ASSOC);
$msg['attid'] = $attid = $att['id'];
$imgct = files::getImageType('../htdocs/upload/'.$filename);
if(!isset($imgct['error'])) $preview = '<img src="/upload/'.$filename.'" style="display:block;max-height:300px;" />';
else $preview = "";
$msg['html'] = $preview.$realname.'[已完成]<input type="hidden" name="image" value="/upload/'.$filename.'" /><div class="cancel"><a href="javascript:;" id="deletebtn_'.$attid.'"><img border="0" src="/static/js/uploadify/cancel.png" /></a></div>';
$msg['preview'] = "/images/".$attid;
echo Zend_Json::encode($msg);
exit();
}else{
$msg['error'] = '附件上传失败:'.$msg['error'];
@unlink($filename);
echo Zend_Json::encode($msg);
exit();
}
}catch(Exception $e){
$msg['error'] = "错误:".$e->getMessage();
echo Zend_Json::encode($msg);
exit();
}
}
function getattsAction(){
$this->_helper->layout()->disableLayout();
$this->_helper->viewRenderer->setNoRender();
$id = $this->_request->getParam('id');
if($id!='')
{
$auth = Zend_Auth::getInstance();
if($auth->hasIdentity())
{
$sql = "select att.realname,att.id,att.filename from attachments att
left join archives_att ratt on att.id=ratt.attid
where ratt.arcid=$id";
$rs = $this->db->query($sql);
$atts = $rs->fetchAll();
include_once('files/files.php');
foreach($atts as $k=>$v)
{
$imgct = files::getImageType('../htdocs/upload/'.$v['filename']);
if(!isset($imgct['error'])) $preview = '<img src="/images/'.$v['id'].'" style="display:block;" />';
else $preview = "";
$atts[$k]['html']= $preview.$v['realname'].'[已完成]<input type="hidden" name="atts[]" value="'.$v['id'].'" /><div class="cancel"><a href="javascript:;" id="deletebtn_'.$v['id'].'"><img border="0" src="/static/js/uploadify/cancel.png" /></a></div>';
}
echo Zend_Json::encode($atts);
exit();
}else
{
exit();
}
}else{
exit();
}
}
function delattAction(){
$this->_helper->layout()->disableLayout();
$this->_helper->viewRenderer->setNoRender();
$id = $this->_request->getParam('id');
$aid = $this->_getParam('aid');
$basepath = '../htdocs/upload/';
$info = $this->getFileinfo($id);
$filepath = $basepath.$info['filename'];
try{
if(empty($aid))
{
$sql = "DELETE FROM attachments WHERE id=$id";
if($this->db->exec($sql)>0)
{
@unlink($filepath);
}
}else{
$sql = "delete from archives_att where attid='$id' and arcid='$aid'";
if($this->db->exec($sql)>0)
{
$sql = "DELETE FROM attachments WHERE id=$id";
if($this->db->exec($sql)>0){@unlink($filepath);}
}
}
}
catch(Exception $e){}
}
public function getFileinfo($id){
$sql = "select * from attachments where id='$id'";
$re= $this->db->query($sql);
$row= $re->fetch();
return $row;
}
public function jsonexit($data){
$this->getResponse()->setHeader('Content-Type', 'application/json')->appendBody(Zend_Json::encode($data));
return true;
}
2012-11-23 09:54:37 +00:00
function replacehtml($html)
{
$newString = htmlentities($html, ENT_QUOTES, "UTF-8");
return $newString;
}
}