123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461 |
- <?php
- /**
- * special_api.class.php 专题接口类
- *
- * @copyright (C) 2005-2010 PHPCMS
- * @license http://www.phpcms.cn/license/
- * @lastmodify 2010-8-3
- */
- defined('IN_PHPCMS') or exit('No permission resources.');
- class special_api {
-
- private $db, $type_db, $c_db, $data_db;
- public $pages;
-
- public function __construct() {
- $this->db = pc_base::load_model('special_model'); //专题数据模型
- $this->type_db = pc_base::load_model('type_model'); //专题分类数据模型
- $this->c_db = pc_base::load_model('special_content_model'); //专题内容数据模型
- $this->data_db = pc_base::load_model('special_c_data_model');
- }
-
- /**
- * 更新分类
- * @param intval $pid 专题ID
- * @param string $type 分类字符串 每行一个分类。格式为:分类名|分类目录,例:最新新闻|news last
- * @param string $a 添加时直接加入到数据库,修改是需要判断。
- * @return boolen
- */
- public function _update_type($specialid, $type, $a = 'add') {
- $specialid = intval($specialid);
- if (!$specialid) return false;
- $special_info = $this->db->get_one(array('id'=>$specialid));
- $app_path = substr(APP_PATH, 0, -1);
- foreach ($type as $k => $v) {
- if (!$v['name'] || !$v['typedir']) continue;
- //添加时,无需判断直接加到数据表中,修改时应判断是否为新添加、修改还是删除
- $siteid = get_siteid();
- if ($a == 'add' && !$v['del']) {
- $typeid = $this->type_db->insert(array('siteid'=>$siteid, 'module'=>'special', 'name'=>$v['name'], 'listorder'=>$v['listorder'], 'typedir'=>$v['typedir'], 'parentid'=>$specialid, 'listorder'=>$k), true);
- if ($siteid>1) {
- $site = pc_base::load_app_class('sites', 'admin');
- $site_info = $site->get_by_id($siteid);
- if ($special_info['ishtml']) {
- $url = $site_info['domain'].'special/'.$special_info['filename'].'/'.$v['typedir'].'/'.'type-'.$typeid.'.html';
- } else {
- $url = $site_info['domain'].'index.php?m=special&c=index&a=type&specialid='.$specialid.'&typeid='.$typeid;
- }
- } else {
- if($special_info['ishtml']) $url = addslashes($app_path.pc_base::load_config('system', 'html_root').'/special/'.$special_info['filename'].'/'.$v['typedir'].'/'.'type-'.$typeid.'.html');
- else $url = APP_PATH.'index.php?m=special&c=index&a=type&specialid='.$specialid.'&typeid='.$typeid;
- }
- $this->type_db->update(array('url'=>$url), array('typeid'=>$typeid));
- } elseif ($a == 'edit') {
- if ((!isset($v['typeid']) || empty($v['typeid'])) && (!isset($v['del']) || empty($v['del']))) {
- $typeid = $this->type_db->insert(array('siteid'=>$siteid, 'module'=>'special', 'name'=>$v['name'], 'listorder'=>$v['listorder'], 'typedir'=>$v['typedir'], 'parentid'=>$specialid, 'listorder'=>$k), true);
- if ($siteid>1) {
- $site = pc_base::load_app_class('sites', 'admin');
- $site_info = $site->get_by_id($siteid);
- if ($special_info['ishtml']) {
- $url = $site_info['domain'].'special/'.$special_info['filename'].'/'.$v['typedir'].'/'.'type-'.$typeid.'.html';
- } else {
- $url = $site_info['domain'].'index.php?m=special&c=index&a=type&specialid='.$specialid.'&typeid='.$typeid;
- }
- } else {
- if($special_info['ishtml']) $url = addslashes($app_path.pc_base::load_config('system', 'html_root').'/special/'.$special_info['filename'].'/'.$v['typedir'].'/'.'type-'.$typeid.'.html');
- else $url = APP_PATH.'index.php?m=special&c=index&a=type&specialid='.$specialid.'&typeid='.$typeid;
- }
- $v['url'] = $url;
- $this->type_db->update($v, array('typeid'=>$typeid));
- }
- if ((!isset($v['del']) || empty($v['del'])) && $v['typeid']) {
- $this->type_db->update(array('name'=>$v['name'], 'typedir'=>$v['typedir'], 'listorder'=>$v['listorder']), array('typeid'=>$r['typeid']));
- if ($siteid>1) {
- $site = pc_base::load_app_class('sites', 'admin');
- $site_info = $site->get_by_id($siteid);
- if ($special_info['ishtml']) {
- $url = $site_info['domain'].'special/'.$special_info['filename'].'/'.$v['typedir'].'/'.'type-'.$v['typeid'].'.html';
- } else {
- $url = $site_info['domain'].'index.php?m=special&c=index&a=type&specialid='.$specialid.'&typeid='.$v['typeid'];
- }
- } else {
- if($special_info['ishtml']) $url = addslashes($app_path.pc_base::load_config('system', 'html_root').'/special/'.$special_info['filename'].'/'.$v['typedir'].'/'.'type-'.$v['typeid'].'.html');
- else $url = APP_PATH.'index.php?m=special&c=index&a=type&specialid='.$specialid.'&typeid='.$v['typeid'];
- }
- $v['url'] = $url;
- $typeid = $v['typeid'];
- unset($v['typeid']);
- $this->type_db->update($v, array('typeid'=>$typeid));
- }
- if ($v['typeid'] && $v['del']) {
- $this->delete_type($v['typeid'], $siteid, $special_info['ishtml']);
- }
- }
- }
- return true;
- }
-
- /**
- * 调取内容信息
- * @param intval $modelid 模型ID
- * @param string $where sql语句
- * @param intval $page 分页
- * @return array 返回调取的数据
- */
- public function _get_import_data($modelid = 0, $where = '', $page) {
- $c = pc_base::load_model('content_model');
- if(!$modelid) return '';
- $c->set_model($modelid);
- $data = $c->listinfo($where, '`id` DESC', $page);
- $this->pages = $c->pages;
- return $data;
- }
-
- /**
- * 信息推荐至专题接口
- * @param array $param 属性 请求时,为模型、栏目数组。 例:array('modelid'=>1, 'catid'=>12); 提交添加为二维信息数据 。例:array(1=>array('title'=>'多发发送方法', ....))
- * @param array $arr 参数 表单数据,只在请求添加时传递。
- * @return 返回专题的下拉列表
- */
- public function _get_special($param = array(), $arr = array()) {
- if ($arr['dosubmit']) {
- foreach ($param as $id => $v) {
- if (!$arr['specialid'] || !$arr['typeid']) continue;
- if (!$this->c_db->get_one(array('title'=>$v['title'], 'specialid'=>$arr['specialid']))) {
- $info['specialid'] = $arr['specialid'];
- $info['typeid'] = $arr['typeid'];
- $info['title'] = $v['title'];
- $info['thumb'] = $v['thumb'];
- $info['url'] = $v['url'];
- $info['curl'] = $v['id'].'|'.$v['catid'];
- $info['description'] = $v['description'];
- $info['userid'] = $v['userid'];
- $info['username'] = $v['username'];
- $info['inputtime'] = $v['inputtime'];
- $info['updatetime'] = $v['updatetime'];
- $info['islink'] = 1;
- $this->c_db->insert($info, true);
- }
- }
- return true;
- } else {
- $datas = getcache('special', 'commons');
- $special = array(L('please_select'));
- if (is_array($datas)) {
- foreach ($datas as $sid => $d) {
- if ($d['siteid']==get_siteid()) {
- $special[$sid] = $d['title'];
- }
- }
- }
- return array(
- 'specialid' => array('name'=>L('special_list','','special'), 'htmltype'=>'select', 'data'=>$special, 'ajax'=>array('name'=>L('for_type','','special'), 'action'=>'_get_type', 'm'=>'special', 'id'=>'typeid')),
- 'validator' => '$(\'#specialid\').formValidator({autotip:true,onshow:"'.L('please_choose_special','','special').'",oncorrect:"'.L('true', '', 'special').'"}).inputValidator({min:1,onerror:"'.L('please_choose_special','','special').'"});$(\'#typeid\').formValidator({autotip:true,onshow:"'.L('please_choose_type', '', 'special').'",oncorrect:"'.L('true', '', 'special').'"}).inputValidator({min:1,onerror:"'.L('please_choose_type', '', 'special').'"});',
- );
- }
- }
-
- /**
- * 获取分类
- * @param intval $specialid 专题ID
- */
- public function _get_type($specialid = 0) {
- $type_db = pc_base::load_model('type_model');
- $data = $arr = array();
- $data = $type_db->select(array('module'=>'special', 'parentid'=>$specialid));
- pc_base::load_sys_class('form', '', 0);
- foreach ($data as $r) {
- $arr[$r['typeid']] = $r['name'];
- }
- return form::select($arr, '', 'name="typeid", id="typeid"', L('please_select'));
- }
-
- /**
- * 调取专题的附属分类
- * @param intval $specialid 专题ID
- * @return array 专题的附属分类
- */
- public function _get_types($specialid = 0) {
- if (!$specialid) return false;
- $rs = $this->type_db->select(array('parentid'=>$specialid, 'siteid'=>get_siteid()), 'typeid, name');
- $types = array();
- foreach ($rs as $r) {
- $types[$r['typeid']] = $r['name'];
- }
- return $types;
- }
- /**
- * 删除专题 执行删除操作的方法,同时删除专题下的分类、信息、及生成静态文件和图片
- * @param intval $id 专题ID
- * @return boolen
- */
- public function _del_special($id = 0) {
- $id = intval($id);
- if (!$id) return false;
-
- //检查专题下是否有信息
- $rs = $this->c_db->select(array('specialid'=>$id), 'id');
- $info = $this->db->get_one(array('id'=>$id, 'siteid'=>get_siteid()), 'siteid, ispage, filename, ishtml');
-
- //有信息时,循环删除
- if (is_array($rs) && !empty($rs)) {
- foreach ($rs as $r) {
- $this->_delete_content($r['id'], $info['siteid'], $info['ishtml']);
- }
- }
- //删除专题的附属分类
- $type_info = $this->type_db->select(array('module'=>'special', 'parentid'=>$id, 'siteid'=>get_siteid()), '`typeid`');
- if (is_array($type_info) && !empty($type_info)) {
- foreach ($type_info as $t) {
- $this->delete_type($t['typeid'], $info['siteid'], $info['ishtml']);
- }
- }
- pc_base::load_sys_func('dir');
- $this->db->delete(array('id'=>$id, 'siteid'=>get_siteid()));
- $info['filename'] = str_replace('..','',$info['filename']);
- if ($info['siteid']>1) {
- if ($info['ishtml']) {
- $queue = pc_base::load_model('queue_model');
- $site = pc_base::load_app_class('sites', 'admin');
- $site_info = $site->get_by_id($info['siteid']);
- $file = pc_base::load_config('system', 'html_root').'/'.$site_info['dirname'].'/special/'.$info['filename'].'/index.html';
- if ($info['ispage']) {
- for ($i==1; $i>0; $i++) {
- if ($i>1) {
- $file = str_replace('.html', '-'.$i.'.html', $file);
- }
- if (!file_exists(PHPCMS_PATH.$file)) {
- break;
- } else {
- $queue->add_queue('del', $file, $info['siteid']);
- unlink(PHPCMS_PATH.$file);
- }
- }
- } else {
- $queue->add_queue('del', $file, $info['siteid']);
- unlink(PHPCMS_PATH.$file);
- }
- $queue->add_queue('del', pc_base::load_config('system', 'html_root').'/'.$site_info['dirname'].'/special/'.$info['filename'].'/', $info['siteid']);
- dir_delete(pc_base::load_config('system', 'html_root').'/'.$site_info['dirname'].'/special/'.$info['filename']);
- }
- } else {
- if ($info['ishtml']) {
- dir_delete(PHPCMS_PATH.pc_base::load_config('system', 'html_root').DIRECTORY_SEPARATOR.'special'.DIRECTORY_SEPARATOR.$info['filename']); //删除专题目录
- }
- }
- if(pc_base::load_config('system','attachment_stat')) {
- $keyid = 'special-'.$id;
- $this->attachment_db = pc_base::load_model('attachment_model');
- $this->attachment_db->api_delete($keyid);
- }
- return true;
- }
-
- /**
- * 导入的数据添加到数据表
- * @param intval $modelid 模型ID
- * @param intval $specialid 信息的所属专题ID
- * @param intval $id 信息的ID
- * @param intval $typeid 信息的分类ID
- * @param intval $listorder 信息的排序
- */
- public function _import($modelid, $specialid, $id, $typeid, $listorder = 0) {
- if (!$specialid || !$id || !$typeid) return false;
- $c = pc_base::load_model('content_model');
- $c->set_model($modelid);
- $info = $c->get_one(array('id'=>$id, 'status'=>99), '`id`, `catid`, `title`, `thumb`, `url`, `description`, `username`, `inputtime`, `updatetime`');
- if ($info) {
- $info['curl'] = $info['id'].'|'.$info['catid'];
- unset($info['id'], $info['catid']);
- if(!$this->c_db->get_one(array('title'=>addslashes($info['title']), 'specialid'=>$specialid, 'typeid'=>$typeid))) {
- $info['specialid'] = $specialid;
- $info['typeid'] = $typeid;
- $info['islink'] = 1;
- $info['listorder'] = $listorder;
- $info = new_addslashes($info);
- return $this->c_db->insert($info, true);
- }
- }
- return false;
- }
-
- /**
- * 删除专题分类
- * @param intval $typeid 专题附属分类ID
- * @param intval $siteid 站点ID
- * @param intval $ishtml 专题是否生成静态
- */
- private function delete_type($typeid = 0, $siteid = 0, $ishtml = 0) {
- $typeid = intval($typeid);
- if (!$typeid) return false;
-
- pc_base::load_sys_func('dir');
- $info = $this->type_db->get_one(array('typeid'=>$typeid));
- if ($ishtml) {
- $siteid = $siteid ? intval($siteid) : get_siteid();
- if ($siteid>1) {
- $site = pc_base::load_app_class('sites', 'admin');
- $site_info = $site->get_by_id($siteid);
- $queue = pc_base::load_model('queue_model');
- for ($i = 1; $i>0; $i++) {
- if ($i==1) $file = str_replace($site_info['domain'], pc_base::load_config('system', 'html_root').'/'.$site_info['dirname'].'/', $info['url']);
- else $file = str_replace(array($site_info['domain'], '.html'), array(pc_base::load_config('system', 'html_root').'/'.$site_info['dirname'].'/', '-'.$i.'.html'), $info['url']);
- if (!file_exists(PHPCMS_PATH.$file)) {
- break;
- } else {
- $queue->add_queue('del', $file, $siteid); //并加入到消息队列中,便以其他站点删除文件
- unlink(PHPCMS_PATH.$file); //删除生成的静态文件
- }
- }
- } else {
- for ($i = 1; $i>0; $i++) {
- if ($i==1) $file = str_replace(APP_PATH, '', $info['url']);
- else $file = str_replace(array(APP_PATH, '.html'), array('', '-'.$i.'.html'), $info['url']);
- if (!file_exists(PHPCMS_PATH.$file)) {
- break;
- } else {
- unlink(PHPCMS_PATH.$file); //删除生成的静态文件
- }
- }
- }
- }
- $this->type_db->delete(array('typeid'=>$typeid)); //删除数据表记录
- return true;
- }
-
- /**
- * 删除专题信息,同时删除专题的信息,及相关的静态文件、图片
- * @param intval $cid 专题信息ID
- * @param intval $siteid 所属站点
- * @param intval $ishtml 专题是否生成静态
- */
- public function _delete_content($cid = 0, $siteid = 0, $ishtml = 0) {
- $info = $this->c_db->get_one(array('id'=>$cid), 'inputtime, isdata');
- if ($info['isdata']) {
- if ($ishtml) {
- pc_base::load_app_func('global', 'special');
- $siteid = $siteid ? intval($siteid) : get_siteid();
- if ($siteid>1) {
- $site = pc_base::load_app_class('sites', 'admin');
- $site_info = $site->get_by_id($siteid);
- $queue = pc_base::load_model('queue_model');
-
- for ($i = 1; $i>0; $i++) {
- $file = content_url($cid, $i, $info['inputtime'], 'html', $site_info);
- if (!file_exists(PHPCMS_PATH.$file[1])) {
- break;
- } else {
- $queue->add_queue('del', $file[1], $siteid); //并加入到消息队列中,便以其他站点删除文件
- unlink(PHPCMS_PATH.$file[1]); //删除生成的静态文件
- }
- }
- } else {
- for ($i = 1; $i>0; $i++) {
- $file = content_url($cid, $i, $info['inputtime']);
- if (!file_exists(PHPCMS_PATH.$file[1])) {
- break;
- } else {
- unlink(PHPCMS_PATH.$file[1]); //删除生成的静态文件
- }
- }
- }
- }
-
- //删除全站搜索数据
- $this->search_api($cid, '', '', 'delete');
-
- // 删除数据统计表数据
- $count = pc_base::load_model('hits_model');
- $hitsid = 'special-c-'.$info['specialid'].'-'.$cid;
- $count->delete(array('hitsid'=>$hitsid));
-
- //删除信息内容表中的数据
- $this->data_db->delete(array('id'=>$cid));
- }
- $this->c_db->delete(array('id'=>$cid)); //删除信息表中的数据
- return true;
- }
-
- /**
- * Function importfalbum
- * 将专辑载入到专题
- * @param array $info 专辑详细信息
- */
- public function importfalbum($info = array()) {
- static $siteid,$sitelists;
- if (!$siteid) $siteid = get_siteid();
- if (!$sitelists) $sitelists = getcache('sitelist', 'commons');
- pc_base::load_sys_func('iconv');
- if (is_array($info)) {
- $username = param::get_cookie('admin_username');
- $userid = param::get_cookie('userid');
- $arr = array(
- 'siteid' => $siteid,
- 'aid' => $info['id'],
- 'title' => $info['title'],
- 'thumb' => format_url($info['coverurl']),
- 'banner' => format_url($info['coverurl']),
- 'description' => $info['desc'],
- 'ishtml' => 0,
- 'ispage' => 0,
- 'style' => 'default',
- 'index_template' => 'index_video',
- 'list_template' => 'list_video',
- 'show_template' => 'show_video',
- 'username' => $username,
- 'userid' =>$userid,
- 'createtime' => SYS_TIME,
- 'isvideo' => 1,
- );
- //将数据插入到专题表中
- $arr = new_html_special_chars($arr);
- $specialid = $this->db->insert($arr, true);
- $url = $sitelists[$siteid]['domain'].'index.php?m=special&c=index&id='.$specialid;
- $this->db->update(array('url'=>$url), array('id'=>$specialid));
- //组合子分类数组
- $letters = gbk_to_pinyin($info['title']);
- $type_info = array(
- 'siteid' => $siteid,
- 'module' => 'special',
- 'modelid' => 0,
- 'name' => new_html_special_chars($info['title']),
- 'parentid' => $specialid,
- 'typedir' => strtolower(implode('', $letters)),
- 'listorder' => 1,
- );
- $typeid = $this->type_db->insert($type_info, true);
- $url = $sitelists[$siteid]['domain'].'index.php?m=special&c=index&a=type&specialid='.$specialid.'&typeid='.$typeid;
- $this->type_db->update(array('url'=>$url), array('typeid'=>$typeid));
- return $specialid;
- } else {
- return false;
- }
- }
-
- /**
- * 添加到全站搜索
- * @param intval $id 文章ID
- * @param array $data 数组
- * @param string $title 标题
- * @param string $action 动作
- */
- private function search_api($id = 0, $data = array(), $title, $action = 'update') {
- $this->search_db = pc_base::load_model('search_model');
- $siteid = get_siteid();
- $type_arr = getcache('type_module_'.$siteid,'search');
- $typeid = $type_arr['special'];
- if($action == 'update') {
- $fulltextcontent = $data['content'];
- return $this->search_db->update_search($typeid ,$id, $fulltextcontent,$title);
- } elseif($action == 'delete') {
- $this->search_db->delete_search($typeid ,$id);
- }
- }
- }
- ?>
|