Server : nginx/1.22.1
System : Linux iZwz9daxib3w3i063fw434Z 3.10.0-1127.19.1.el7.x86_64 #1 SMP Tue Aug 25 17:23:54 UTC 2020 x86_64
User : www ( 1000)
PHP Version : 7.2.33
Disable Function : passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv
Directory :  /www/wwwroot/www.jkmold.com/phpcms/modules/admin/
Upload File :
Current Directory [ Writeable ] Root Directory [ Writeable ]


Current File : /www/wwwroot/www.jkmold.com/phpcms/modules/admin/category.php
<?php

defined('IN_PHPCMS') or exit('No permission resources.');

pc_base::load_app_class('admin','admin',0);



class category extends admin {

	private $db;

	public $siteid;

	function __construct() {

		parent::__construct();

		$this->db = pc_base::load_model('category_model');

		$this->siteid = $this->get_siteid();

	}

	/**

	 * 管理栏目

	 */

	public function init () {

		$show_pc_hash = '';

		$tree = pc_base::load_sys_class('tree');

		$models = getcache('model','commons');

		$sitelist = getcache('sitelist','commons');

		$category_items = array();

		foreach ($models as $modelid=>$model) {

			$category_items[$modelid] = getcache('category_items_'.$modelid,'commons');

		}

		$tree->icon = array('&nbsp;&nbsp;&nbsp;│ ','&nbsp;&nbsp;&nbsp;├─ ','&nbsp;&nbsp;&nbsp;└─ ');

		$tree->nbsp = '&nbsp;&nbsp;&nbsp;';

		$categorys = array();

		//读取缓存

		$result = getcache('category_content_'.$this->siteid,'commons');

		$show_detail = count($result) < 500 ? 1 : 0;

		$parentid = $_GET['parentid'] ? intval($_GET['parentid']) : 0;

		$html_root = pc_base::load_config('system','html_root');

		$types = array(0 => L('category_type_system'),1 => L('category_type_page'),2 => L('category_type_link'));

		if(!empty($result)) {

			foreach($result as $r) {

				$r['modelname'] = $models[$r['modelid']]['name'];

				$r['str_manage'] = '';

				if(!$show_detail) {

					if($r['parentid']!=$parentid) continue;

					$r['parentid'] = 0;

					$r['str_manage'] .= '<a href="?m=admin&c=category&a=init&parentid='.$r['catid'].'&menuid='.$_GET['menuid'].'&s='.$r['type'].'&pc_hash='.$_SESSION['pc_hash'].'">'.L('manage_sub_category').'</a> | ';

				}

				$r['str_manage'] .= '<a href="?m=admin&c=category&a=add&parentid='.$r['catid'].'&menuid='.$_GET['menuid'].'&s='.$r['type'].'&pc_hash='.$_SESSION['pc_hash'].'">'.L('add_sub_category').'</a> | ';

				

				$r['str_manage'] .= '<a href="?m=admin&c=category&a=edit&catid='.$r['catid'].'&menuid='.$_GET['menuid'].'&type='.$r['type'].'&pc_hash='.$_SESSION['pc_hash'].'">'.L('edit').'</a> | <a href="javascript:confirmurl(\'?m=admin&c=category&a=delete&catid='.$r['catid'].'&menuid='.$_GET['menuid'].'\',\''.L('confirm',array('message'=>addslashes($r['catname']))).'\')">'.L('delete').'</a> | <a href="?m=admin&c=category&a=remove&catid='.$r['catid'].'&pc_hash='.$_SESSION['pc_hash'].'">'.L('remove','','content').'</a>';

				$r['typename'] = $types[$r['type']];

				$r['display_icon'] = $r['ismenu'] ? '' : ' <img src ="'.IMG_PATH.'icon/gear_disable.png" title="'.L('not_display_in_menu').'">';

				if($r['type'] || $r['child']) {

					$r['items'] = '';

				} else {

					$r['items'] = $category_items[$r['modelid']][$r['catid']];

				}

				$r['help'] = '';

				$setting = string2array($r['setting']);

				if($r['url']) {

					if(preg_match('/^(http|https):\/\//', $r['url'])) {

						$catdir = $r['catdir'];

						$prefix = $r['sethtml'] ? '' : $html_root;

						if($this->siteid==1) {

							$catdir = $prefix.'/'.$r['parentdir'].$catdir;

						} else {

							$catdir = $prefix.'/'.$sitelist[$this->siteid]['dirname'].$html_root.'/'.$catdir;

						}

						if($r['type']==0 && $setting['ishtml'] && strpos($r['url'], '?')===false && substr_count($r['url'],'/')<4) $r['help'] = '<img src="'.IMG_PATH.'icon/help.png" title="'.L('tips_domain').$r['url'].'&#10;'.L('directory_binding').'&#10;'.$catdir.'/">';

					} else {

						$r['url'] = substr($sitelist[$this->siteid]['domain'],0,-1).$r['url'];

					}

					$r['url'] = "<a href='$r[url]' target='_blank'>".L('vistor')."</a>";

				} else {

					$r['url'] = "<a href='?m=admin&c=category&a=public_cache&menuid=43&module=admin'><font color='red'>".L('update_backup')."</font></a>";

				}

				$categorys[$r['catid']] = $r;

			}

		}

		$str  = "<tr>

					<td align='center'><input name='listorders[\$id]' type='text' size='3' value='\$listorder' class='input-text-c'></td>

					<td align='center'>\$id</td>

					<td >\$spacer\$catname\$display_icon</td>

					<td>\$typename</td>

					<td>\$modelname</td>

					<td align='center'>\$items</td>

					<td align='center'>\$url</td>

					<td align='center'>\$help</td>

					<td align='center' >\$str_manage</td>

				</tr>";

		$tree->init($categorys);

		$categorys = $tree->get_tree(0, $str);

		include $this->admin_tpl('category_manage');

	}

	/**

	 * 添加栏目

	 */

	public function add() {

		if(isset($_POST['dosubmit'])) {

			pc_base::load_sys_func('iconv');

			$_POST['info']['type'] = intval($_POST['type']);

			

			if(isset($_POST['batch_add']) && empty($_POST['batch_add'])) {

				if($_POST['info']['catname']=='') showmessage(L('input_catname'));

				$_POST['info']['catname'] = safe_replace($_POST['info']['catname']);

				$_POST['info']['catname'] = str_replace(array('%'),'',$_POST['info']['catname']);

				if($_POST['info']['type']!=2) {

					if($_POST['info']['catdir']=='') showmessage(L('input_dirname'));

					if(!$this->public_check_catdir(0,$_POST['info']['catdir'])) showmessage(L('catname_have_exists'));

				}

			}

			

			$_POST['info']['siteid'] = $this->siteid;

			$_POST['info']['module'] = 'content';

			$setting = $_POST['setting'];

			if($_POST['info']['type']!=2) {

				//栏目生成静态配置

				if($setting['ishtml']) {

					$setting['category_ruleid'] = $_POST['category_html_ruleid'];

				} else {

					$setting['category_ruleid'] = $_POST['category_php_ruleid'];

					$_POST['info']['url'] = '';

				}

			}

			

			//内容生成静态配置

			if($setting['content_ishtml']) {

				$setting['show_ruleid'] = $_POST['show_html_ruleid'];

			} else {

				$setting['show_ruleid'] = $_POST['show_php_ruleid'];

			}

			if($setting['repeatchargedays']<1) $setting['repeatchargedays'] = 1;

			$_POST['info']['sethtml'] = $setting['create_to_html_root'];

			$_POST['info']['setting'] = array2string($setting);

			

			$end_str = $old_end =  '<script type="text/javascript">window.top.art.dialog({id:"test"}).close();window.top.art.dialog({id:"test",content:\'<h2>'.L("add_success").'</h2><span style="fotn-size:16px;">'.L("following_operation").'</span><br /><ul style="fotn-size:14px;"><li><a href="?m=admin&c=category&a=public_cache&menuid=43&module=admin" target="right"  onclick="window.top.art.dialog({id:\\\'test\\\'}).close()">'.L("following_operation_1").'</a></li><li><a href="'.HTTP_REFERER.'" target="right" onclick="window.top.art.dialog({id:\\\'test\\\'}).close()">'.L("following_operation_2").'</a></li></ul>\',width:"400",height:"200"});</script>';

			if(!isset($_POST['batch_add']) || empty($_POST['batch_add'])) {

				$catname = CHARSET == 'gbk' ? $_POST['info']['catname'] : iconv('utf-8','gbk',$_POST['info']['catname']);

				$letters = gbk_to_pinyin($catname);

				$_POST['info']['letter'] = strtolower(implode('', $letters));

				$catid = $this->db->insert($_POST['info'], true);

				$this->update_priv($catid, $_POST['priv_roleid']);

				$this->update_priv($catid, $_POST['priv_groupid'],0);

			} else {//批量添加

				$end_str = '';

				$batch_adds = explode("\n", $_POST['batch_add']);

				foreach ($batch_adds as $_v) {

					if(trim($_v)=='') continue;

					$names = explode('|', $_v);

					$catname = $names[0];

					$_POST['info']['catname'] = trim($names[0]);

					$letters = gbk_to_pinyin($catname);

					$_POST['info']['letter'] = strtolower(implode('', $letters));

					$_POST['info']['catdir'] = trim($names[1]) ? trim($names[1]) : trim($_POST['info']['letter']);

					if(!$this->public_check_catdir(0,$_POST['info']['catdir'])) {

						$end_str .= $end_str ? ','.$_POST['info']['catname'].'('.$_POST['info']['catdir'].')' : $_POST['info']['catname'].'('.$_POST['info']['catdir'].')';

						continue;

					}

					$catid = $this->db->insert($_POST['info'], true);

					$this->update_priv($catid, $_POST['priv_roleid']);

					$this->update_priv($catid, $_POST['priv_groupid'],0);

				}

				$end_str = $end_str ? L('follow_catname_have_exists').$end_str : $old_end;

			}

			$this->cache();

			showmessage(L('add_success').$end_str);

		} else {

			//获取站点模板信息

			pc_base::load_app_func('global');



			$template_list = template_list($this->siteid, 0);

			foreach ($template_list as $k=>$v) {

				$template_list[$v['dirname']] = $v['name'] ? $v['name'] : $v['dirname'];

				unset($template_list[$k]);

			}

			$show_validator = '';

			if(isset($_GET['parentid'])) {

				$parentid = $_GET['parentid'];

				$r = $this->db->get_one(array('catid'=>$parentid));

				if($r) extract($r,EXTR_SKIP);

				$setting = string2array($setting);

			}

			

			pc_base::load_sys_class('form','',0);

			$type = $_GET['s'];

			if($type==0) {

				$exists_model = false;

				$models = getcache('model','commons');	

				foreach($models as $_m) {

					if($this->siteid == $_m['siteid']) {

						$exists_model = true;

						break;

					}

				}

				if(!$exists_model) showmessage(L('please_add_model'),'?m=content&c=sitemodel&a=init&menuid=59',5000);

				include $this->admin_tpl('category_add');

			} elseif ($type==1) {

				include $this->admin_tpl('category_page_add');

			} else {

				include $this->admin_tpl('category_link');

			}

		}

	}

	/**

	 * 修改栏目

	 */

	public function edit() {

		

		if(isset($_POST['dosubmit'])) {

			pc_base::load_sys_func('iconv');

			$catid = 0;

			$catid = intval($_POST['catid']);

			$setting = $_POST['setting'];

			//上级栏目不能是自身

			if($_POST['info']['parentid']==$catid){

				showmessage(L('operation_failure'),'?m=admin&c=category&a=init&module=admin&menuid=43');

			}

			//栏目生成静态配置

			if($_POST['type'] != 2) {

				if($setting['ishtml']) {

					$setting['category_ruleid'] = $_POST['category_html_ruleid'];

				} else {

					$setting['category_ruleid'] = $_POST['category_php_ruleid'];

					$_POST['info']['url'] = '';

				}

			}

			//内容生成静态配置

			if($setting['content_ishtml']) {

				$setting['show_ruleid'] = $_POST['show_html_ruleid'];

			} else {

				$setting['show_ruleid'] = $_POST['show_php_ruleid'];

			}

			if($setting['repeatchargedays']<1) $setting['repeatchargedays'] = 1;

			$_POST['info']['sethtml'] = $setting['create_to_html_root'];

			$_POST['info']['setting'] = array2string($setting);

			$_POST['info']['module'] = 'content';

			$catname = CHARSET == 'gbk' ? safe_replace($_POST['info']['catname']) : iconv('utf-8','gbk',safe_replace($_POST['info']['catname']));

			$catname = str_replace(array('%'),'',$catname);

			$letters = gbk_to_pinyin($catname);

			$_POST['info']['letter'] = strtolower(implode('', $letters));

			

			//应用权限设置到子栏目

			if($_POST['priv_child']) {

				$arrchildid = $this->db->get_one(array('catid'=>$catid), 'arrchildid');

				if(!empty($arrchildid['arrchildid'])) {

					$arrchildid_arr = explode(',', $arrchildid['arrchildid']);

					if(!empty($arrchildid_arr)) {

						foreach ($arrchildid_arr as $arr_v) {

							$this->update_priv($arr_v, $_POST['priv_groupid'], 0);

						}

					}

				}

				

			}

			

			//应用模板到所有子栏目

			if($_POST['template_child']){

                                $this->categorys = $categorys = $this->db->select(array('siteid'=>$this->siteid,'module'=>'content'), '*', '', 'listorder ASC, catid ASC', '', 'catid');

                                $idstr = $this->get_arrchildid($catid);

                                 if(!empty($idstr)){

                                        $sql = "select catid,setting from phpcms_category where catid in($idstr)";

                                        $this->db->query($sql);

                                        $arr = $this->db->fetch_array();

                                         if(!empty($arr)){

                                                foreach ($arr as $v){

                                                        $new_setting = array2string(

														array_merge(string2array($v['setting']), array('category_template' => $_POST['setting']['category_template'],'list_template' =>  $_POST['setting']['list_template'],'show_template' =>  $_POST['setting']['show_template'])

                                                                                )

                                                        );

                                                        $this->db->update(array('setting'=>$new_setting), 'catid='.$v['catid']);

                                                }

                                        }                                

                                }

			}

			

			$this->db->update($_POST['info'],array('catid'=>$catid,'siteid'=>$this->siteid));

			$this->update_priv($catid, $_POST['priv_roleid']);

			$this->update_priv($catid, $_POST['priv_groupid'],0);

			$this->cache();

			//更新附件状态

			if($_POST['info']['image'] && pc_base::load_config('system','attachment_stat')) {

				$this->attachment_db = pc_base::load_model('attachment_model');

				$this->attachment_db->api_update($_POST['info']['image'],'catid-'.$catid,1);

			}

			showmessage(L('operation_success').'<script type="text/javascript">window.top.art.dialog({id:"test"}).close();window.top.art.dialog({id:"test",content:\'<h2>'.L("operation_success").'</h2><span style="fotn-size:16px;">'.L("edit_following_operation").'</span><br /><ul style="fotn-size:14px;"><li><a href="?m=admin&c=category&a=public_cache&menuid=43&module=admin" target="right"  onclick="window.top.art.dialog({id:\\\'test\\\'}).close()">'.L("following_operation_1").'</a></li></ul>\',width:"400",height:"200"});</script>','?m=admin&c=category&a=init&module=admin&menuid=43');

		} else {

			//获取站点模板信息

			pc_base::load_app_func('global');

			$template_list = template_list($this->siteid, 0);

			foreach ($template_list as $k=>$v) {

				$template_list[$v['dirname']] = $v['name'] ? $v['name'] : $v['dirname'];

				unset($template_list[$k]);

			}

			

			

			$show_validator = $catid = $r = '';

			$catid = intval($_GET['catid']);

			pc_base::load_sys_class('form','',0);

			$r = $this->db->get_one(array('catid'=>$catid));

			if($r) extract($r);

			$setting = string2array($setting);

			

			$this->priv_db = pc_base::load_model('category_priv_model');

			$this->privs = $this->priv_db->select(array('catid'=>$catid));

			

			$type = $_GET['type'];

			if($type==0) {

				include $this->admin_tpl('category_edit');

			} elseif ($type==1) {

				include $this->admin_tpl('category_page_edit');

			} else {

				include $this->admin_tpl('category_link');

			}

		}	

	}

	/**

	 * 排序

	 */

	public function listorder() {

		if(isset($_POST['dosubmit'])) {

			foreach($_POST['listorders'] as $id => $listorder) {

				$this->db->update(array('listorder'=>$listorder),array('catid'=>$id));

			}

			$this->cache();

			showmessage(L('operation_success'),HTTP_REFERER);

		} else {

			showmessage(L('operation_failure'));

		}

	}

	/**

	 * 删除栏目

	 */

	public function delete() {

		$catid = intval($_GET['catid']);

		$categorys = getcache('category_content_'.$this->siteid,'commons');

		$modelid = $categorys[$catid]['modelid'];

		$items = getcache('category_items_'.$modelid,'commons');

		//if($items[$catid]) showmessage(L('category_does_not_allow_delete'));

		$this->delete_child($catid, $modelid);

		$this->db->delete(array('catid'=>$catid));

		if ($modelid != 0) {

			$this->delete_category_video($catid, $modelid);

		}

		$this->cache();

		showmessage(L('operation_success'),HTTP_REFERER);

	}

	/**

	 * 递归删除栏目

	 * @param $catid 要删除的栏目id

	 */

	private function delete_child($catid, $modelid) {

		$catid = intval($catid);

		if (empty($catid)) return false;

		$r = $this->db->get_one(array('parentid'=>$catid));

		if($r) {

			$this->delete_child($r['catid']);

			$this->db->delete(array('catid'=>$r['catid']));

			if ($modelid != 0) {

				$this->delete_category_video($r['catid'], $modelid);

			}

		}

		return true;

	}

	/**

	 * 删除栏目分类下的视频

	 * @param $catid 要删除视频的栏目id

	 */

	private function delete_category_video($catid, $modelid) {

		$content_model = pc_base::load_model('content_model');

		$content_model->set_model($modelid);

		$result = $content_model->select(array('catid'=>$catid), 'id');

		if (is_array($result) && !empty($result)) {

			foreach ($result as $key=>$val) {

				$content_model->delete_content($val['id'],$fileurl,$catid);				

			}

		}

	}	

	/**

	 * 更新缓存

	 */

	public function cache() {

		$categorys = array();

		$models = getcache('model','commons');

		foreach ($models as $modelid=>$model) {

			$datas = $this->db->select(array('modelid'=>$modelid),'catid,type,items',10000);

			$array = array();

			foreach ($datas as $r) {

				if($r['type']==0) $array[$r['catid']] = $r['items'];

			}

			setcache('category_items_'.$modelid, $array,'commons');

		}

		$array = array();

		$categorys = $this->db->select('`module`=\'content\'','catid,siteid',20000,'listorder ASC');

		foreach ($categorys as $r) {

			$array[$r['catid']] = $r['siteid'];

		}

		setcache('category_content',$array,'commons');

		$categorys = $this->categorys = array();

		$this->categorys = $this->db->select(array('siteid'=>$this->siteid, 'module'=>'content'),'*',10000,'listorder ASC');

		foreach($this->categorys as $r) {

			unset($r['module']);

			$setting = string2array($r['setting']);

			$r['create_to_html_root'] = $setting['create_to_html_root'];

			$r['ishtml'] = $setting['ishtml'];

			$r['content_ishtml'] = $setting['content_ishtml'];

			$r['category_ruleid'] = $setting['category_ruleid'];

			$r['show_ruleid'] = $setting['show_ruleid'];

			$r['workflowid'] = $setting['workflowid'];

			$r['isdomain'] = '0';

			if(!preg_match('/^(http|https):\/\//', $r['url'])) {

				$r['url'] = siteurl($r['siteid']).$r['url'];

			} elseif ($r['ishtml']) {

				$r['isdomain'] = '1';

			}

			$categorys[$r['catid']] = $r;

		}

		setcache('category_content_'.$this->siteid,$categorys,'commons');

		return true;

	}

	/**

	 * 更新缓存并修复栏目

	 */

	public function public_cache() {

		$this->repair();

		$this->cache();

		showmessage(L('operation_success'),'?m=admin&c=category&a=init&module=admin&menuid=43');

	}

	/**

	* 修复栏目数据

	*/

	private function repair() {

		pc_base::load_sys_func('iconv');

		@set_time_limit(600);

		$html_root = pc_base::load_config('system','html_root');

		$this->categorys = $categorys = array();

		$this->categorys = $categorys = $this->db->select(array('siteid'=>$this->siteid,'module'=>'content'), '*', '', 'listorder ASC, catid ASC', '', 'catid');

		

		$this->get_categorys($categorys);

		if(is_array($this->categorys)) {

			foreach($this->categorys as $catid => $cat) {

				if($cat['type'] == 2) continue;

				$arrparentid = $this->get_arrparentid($catid);

				$setting = string2array($cat['setting']);

				$arrchildid = $this->get_arrchildid($catid);

				$child = is_numeric($arrchildid) ? 0 : 1;

				if($categorys[$catid]['arrparentid']!=$arrparentid || $categorys[$catid]['arrchildid']!=$arrchildid || $categorys[$catid]['child']!=$child) $this->db->update(array('arrparentid'=>$arrparentid,'arrchildid'=>$arrchildid,'child'=>$child),array('catid'=>$catid));



				$parentdir = $this->get_parentdir($catid);

				$catname = $cat['catname'];

				$letters = gbk_to_pinyin($catname);

				$letter = strtolower(implode('', $letters));

				$listorder = $cat['listorder'] ? $cat['listorder'] : $catid;

				

				$this->sethtml = $setting['create_to_html_root'];

				//检查是否生成到根目录

				$this->get_sethtml($catid);

				$sethtml = $this->sethtml ? 1 : 0;

				

				if($setting['ishtml']) {

				//生成静态时

					$url = $this->update_url($catid);

					if(!preg_match('/^(http|https):\/\//i', $url)) {

						$url = $sethtml ? '/'.$url : $html_root.'/'.$url;

					}

				} else {

				//不生成静态时

					$url = $this->update_url($catid);

					$url = APP_PATH.$url;

				}

				if($cat['url']!=$url) $this->db->update(array('url'=>$url), array('catid'=>$catid));

				

				

				

				if($categorys[$catid]['parentdir']!=$parentdir || $categorys[$catid]['sethtml']!=$sethtml || $categorys[$catid]['letter']!=$letter || $categorys[$catid]['listorder']!=$listorder) $this->db->update(array('parentdir'=>$parentdir,'sethtml'=>$sethtml,'letter'=>$letter,'listorder'=>$listorder), array('catid'=>$catid));

			}

		}

		

		//删除在非正常显示的栏目

		foreach($this->categorys as $catid => $cat) {

			if($cat['parentid'] != 0 && !isset($this->categorys[$cat['parentid']])) {

				$this->db->delete(array('catid'=>$catid));

			}

		}

		return true;

	}

	/**

	 * 获取父栏目是否生成到根目录

	 */

	private function get_sethtml($catid) {

		foreach($this->categorys as $id => $cat) {

			if($catid==$id) {

				$parentid = $cat['parentid'];

				if($this->categorys[$parentid]['sethtml']) {

					$this->sethtml = 1;

				}

				if($parentid) {

					$this->get_sethtml($parentid);

				}

			}

		}

	}

	

	/**

	 * 找出子目录列表

	 * @param array $categorys

	 */

	private function get_categorys($categorys = array()) {

		if (is_array($categorys) && !empty($categorys)) {

			foreach ($categorys as $catid => $c) {

				$this->categorys[$catid] = $c;

				$result = array();

				foreach ($this->categorys as $_k=>$_v) {

					if($_v['parentid']) $result[] = $_v;

				}

				$this->get_categorys($r);

			}

		} 

		return true;

	}

	/**

	* 更新栏目链接地址

	*/

	private function update_url($catid) {

		$catid = intval($catid);

		if (!$catid) return false;

		$url = pc_base::load_app_class('url', 'content'); //调用URL实例

		return $url->category_url($catid);

	}



	/**

	 * 

	 * 获取父栏目ID列表

	 * @param integer $catid              栏目ID

	 * @param array $arrparentid          父目录ID

	 * @param integer $n                  查找的层次

	 */

	private function get_arrparentid($catid, $arrparentid = '', $n = 1) {

		if($n > 5 || !is_array($this->categorys) || !isset($this->categorys[$catid])) return false;

		$parentid = $this->categorys[$catid]['parentid'];

		$arrparentid = $arrparentid ? $parentid.','.$arrparentid : $parentid;

		if($parentid) {

			$arrparentid = $this->get_arrparentid($parentid, $arrparentid, ++$n);

		} else {

			$this->categorys[$catid]['arrparentid'] = $arrparentid;

		}

		$parentid = $this->categorys[$catid]['parentid'];

		return $arrparentid;

	}



	/**

	 * 

	 * 获取子栏目ID列表

	 * @param $catid 栏目ID

	 */

	private function get_arrchildid($catid) {

		$arrchildid = $catid;

		if(is_array($this->categorys)) {

			foreach($this->categorys as $id => $cat) {

				if($cat['parentid'] && $id != $catid && $cat['parentid']==$catid) {

					$arrchildid .= ','.$this->get_arrchildid($id);

				}

			}

		}

		return $arrchildid;

	}

	/**

	 * 获取父栏目路径

	 * @param  $catid

	 */

	function get_parentdir($catid) {

		if($this->categorys[$catid]['parentid']==0) return '';

		$r = $this->categorys[$catid];

		$setting = string2array($r['setting']);

		$url = $r['url'];

		$arrparentid = $r['arrparentid'];

		unset($r);

		if (strpos($url, '://')===false) {

			if ($setting['creat_to_html_root']) {

				return '';

			} else {

				$arrparentid = explode(',', $arrparentid);

				$arrcatdir = array();

				foreach($arrparentid as $id) {

					if($id==0) continue;

					$arrcatdir[] = $this->categorys[$id]['catdir'];

				}

				return implode('/', $arrcatdir).'/';

			}

		} else {

			if ($setting['create_to_html_root']) {

				if (preg_match('/^((http|https):\/\/)?([^\/]+)/i', $url, $matches)) {

					$url = $matches[0].'/';

					$rs = $this->db->get_one(array('url'=>$url), '`parentdir`,`catid`');

					if ($catid == $rs['catid']) return '';

					else return $rs['parentdir'];

				} else {

					return '';

				}

			} else {

				$arrparentid = explode(',', $arrparentid);

				$arrcatdir = array();

				krsort($arrparentid);

				foreach ($arrparentid as $id) {

					if ($id==0) continue;

					$arrcatdir[] = $this->categorys[$id]['catdir'];

					if ($this->categorys[$id]['parentdir'] == '') break;

				}

				krsort($arrcatdir);

				return implode('/', $arrcatdir).'/';

			}

		}

	}

	/**

	 * 检查目录是否存在

	 * @param  $return_method 返回方法

	 * @param  $catdir 目录

	 */

	public function public_check_catdir($return_method = 1,$catdir = '') {

		$old_dir = '';

		$catdir = $catdir ? $catdir : $_GET['catdir'];

		$parentid = intval($_GET['parentid']);

		$old_dir = $_GET['old_dir'];

		$r = $this->db->get_one(array('siteid'=>$this->siteid,'module'=>'content','catdir'=>$catdir,'parentid'=>$parentid));

		if($r && $old_dir != $r['catdir']) {

			//目录存在

			if($return_method) {

				exit('0');

			} else {

				return false;

			}

		} else {

			if($return_method) {

				exit('1');

			} else {

				return true;

			}

		}

	}

	

	/**

	 * 更新权限

	 * @param  $catid

	 * @param  $priv_datas

	 * @param  $is_admin

	 */

	private function update_priv($catid,$priv_datas,$is_admin = 1) {

		$this->priv_db = pc_base::load_model('category_priv_model');

		$this->priv_db->delete(array('catid'=>$catid,'is_admin'=>$is_admin));

		if(is_array($priv_datas) && !empty($priv_datas)) {

			foreach ($priv_datas as $r) {

				$r = explode(',', $r);

				$action = $r[0];

				$roleid = $r[1];

				$this->priv_db->insert(array('catid'=>$catid,'roleid'=>$roleid,'is_admin'=>$is_admin,'action'=>$action,'siteid'=>$this->siteid));

			}

		}

	}



	/**

	 * 检查栏目权限

	 * @param $action 动作

	 * @param $roleid 角色

	 * @param $is_admin 是否为管理组

	 */

	private function check_category_priv($action,$roleid,$is_admin = 1) {

		$checked = '';

		foreach ($this->privs as $priv) {

			if($priv['is_admin']==$is_admin && $priv['roleid']==$roleid && $priv['action']==$action) $checked = 'checked';

		}

		return $checked;

	}

	/**

	 * 重新统计栏目信息数量

	 */

	public function count_items() {

		$this->content_db = pc_base::load_model('content_model');

		$result = getcache('category_content_'.$this->siteid,'commons');

		foreach($result as $r) {

			if($r['type'] == 0) {

				$modelid = $r['modelid'];

				$this->content_db->set_model($modelid);

				$number = $this->content_db->count(array('catid'=>$r['catid']));

				$this->db->update(array('items'=>$number),array('catid'=>$r['catid']));

			}

		}

		showmessage(L('operation_success'),HTTP_REFERER);

	}

	/**

	 * json方式加载模板

	 */

	public function public_tpl_file_list() {

		$style = isset($_GET['style']) && trim($_GET['style']) ? trim($_GET['style']) : exit(0);

		$catid = isset($_GET['catid']) && intval($_GET['catid']) ? intval($_GET['catid']) : 0;

		$batch_str = isset($_GET['batch_str']) ? '['.$catid.']' : '';

		if ($catid) {

			$cat = getcache('category_content_'.$this->siteid,'commons');

			$cat = $cat[$catid];

			$cat['setting'] = string2array($cat['setting']);

		}

		pc_base::load_sys_class('form','',0);

		if($_GET['type']==1) {

			$html = array('page_template'=>form::select_template($style, 'content',(isset($cat['setting']['page_template']) && !empty($cat['setting']['page_template']) ? $cat['setting']['page_template'] : 'category'),'name="setting'.$batch_str.'[page_template]"','page'));

		} else {

			$html = array('category_template'=> form::select_template($style, 'content',(isset($cat['setting']['category_template']) && !empty($cat['setting']['category_template']) ? $cat['setting']['category_template'] : 'category'),'name="setting'.$batch_str.'[category_template]"','category'), 

				'list_template'=>form::select_template($style, 'content',(isset($cat['setting']['list_template']) && !empty($cat['setting']['list_template']) ? $cat['setting']['list_template'] : 'list'),'name="setting'.$batch_str.'[list_template]"','list'),

				'show_template'=>form::select_template($style, 'content',(isset($cat['setting']['show_template']) && !empty($cat['setting']['show_template']) ? $cat['setting']['show_template'] : 'show'),'name="setting'.$batch_str.'[show_template]"','show')

			);

		}

		if ($_GET['module']) {

			unset($html);

			if ($_GET['templates']) {

				$templates = explode('|', $_GET['templates']);

				if ($_GET['id']) $id = explode('|', $_GET['id']);

				if (is_array($templates)) {

					foreach ($templates as $k => $tem) {

						$t = $tem.'_template';

						if ($id[$k]=='') $id[$k] = $tem;

						$html[$t] = form::select_template($style, $_GET['module'], $id[$k], 'name="'.$_GET['name'].'['.$t.']" id="'.$t.'"', $tem);

					}

				}

			}

			

		}

		if (CHARSET == 'gbk') {

			$html = array_iconv($html, 'gbk', 'utf-8');

		}

		echo json_encode($html);

	}



	/**

	 * 快速进入搜索

	 */

	public function public_ajax_search() {

		if($_GET['catname']) {

			if(preg_match('/([a-z]+)/i',$_GET['catname'])) {

				$field = 'letter';

				$catname = strtolower(trim($_GET['catname']));

			} else {

				$field = 'catname';

				$catname = trim($_GET['catname']);

				if (CHARSET == 'gbk') $catname = iconv('utf-8','gbk',$catname);

			}

			$result = $this->db->select("$field LIKE('$catname%') AND siteid='$this->siteid' AND child=0",'catid,type,catname,letter',10);

			if (CHARSET == 'gbk') {

				$result = array_iconv($result, 'gbk', 'utf-8');

			}

			echo json_encode($result);

		}

	}

	/**

	 * json方式读取风格列表,推送部分调用

	 */

	public function public_change_tpl() {

		pc_base::load_sys_class('form','',0);

		$models = getcache('model','commons');

		$modelid = intval($_GET['modelid']);

		if($_GET['modelid']) {

			$style = $models[$modelid]['default_style'];

			$category_template = $models[$modelid]['category_template'];

			$list_template = $models[$modelid]['list_template'];

			$show_template = $models[$modelid]['show_template'];

			$html = array(

				'template_list'=> $style, 

				'category_template'=> form::select_template($style, 'content',$category_template,'name="setting[category_template]"','category'), 

				'list_template'=>form::select_template($style, 'content',$list_template,'name="setting[list_template]"','list'),

				'show_template'=>form::select_template($style, 'content',$show_template,'name="setting[show_template]"','show')

			);

			if (CHARSET == 'gbk') {

				$html = array_iconv($html, 'gbk', 'utf-8');

			}

			echo json_encode($html);

		}

	}

	/**

	 * 批量修改

	 */

	public function batch_edit() {

		$categorys = getcache('category_content_'.$this->siteid,'commons');

		if(isset($_POST['dosubmit'])) {

			

			pc_base::load_sys_func('iconv');	

			$catid = intval($_POST['catid']);

			$post_setting = $_POST['setting'];

			//栏目生成静态配置

			$infos = $info = array();

			$infos = $_POST['info'];

			if(empty($infos)) showmessage(L('operation_success'));

			$this->attachment_db = pc_base::load_model('attachment_model');

			foreach ($infos as $catid=>$info) {

				$setting = string2array($categorys[$catid]['setting']);

				if($_POST['type'] != 2) {

					if($post_setting[$catid]['ishtml']) {

						$setting['category_ruleid'] = $_POST['category_html_ruleid'][$catid];

					} else {

						$setting['category_ruleid'] = $_POST['category_php_ruleid'][$catid];

						$info['url'] = '';

					}

				}

				foreach($post_setting[$catid] as $_k=>$_setting) {

					$setting[$_k] = $_setting;

				}

				//内容生成静态配置

				if($post_setting[$catid]['content_ishtml']) {

					$setting['show_ruleid'] = $_POST['show_html_ruleid'][$catid];

				} else {

					$setting['show_ruleid'] = $_POST['show_php_ruleid'][$catid];

				}

				if($setting['repeatchargedays']<1) $setting['repeatchargedays'] = 1;

				$info['sethtml'] = $post_setting[$catid]['create_to_html_root'];

				$info['setting'] = array2string($setting);

				

				$info['module'] = 'content';

				$catname = CHARSET == 'gbk' ? $info['catname'] : iconv('utf-8','gbk',$info['catname']);

				$letters = gbk_to_pinyin($catname);

				$info['letter'] = strtolower(implode('', $letters));

				$this->db->update($info,array('catid'=>$catid,'siteid'=>$this->siteid));



				//更新附件状态

				if($info['image'] && pc_base::load_config('system','attachment_stat')) {

					$this->attachment_db->api_update($info['image'],'catid-'.$catid,1);

				}

			}

			$this->public_cache();

			showmessage(L('operation_success'),'?m=admin&c=category&a=init&module=admin&menuid=43');

		} else {

			if(isset($_POST['catids'])) {

				//获取站点模板信息

				pc_base::load_app_func('global');

				$template_list = template_list($this->siteid, 0);

				foreach ($template_list as $k=>$v) {

					$template_list[$v['dirname']] = $v['name'] ? $v['name'] : $v['dirname'];

					unset($template_list[$k]);

				}

				

				$show_validator = $show_header = '';

				$catid = intval($_GET['catid']);

				$type = $_POST['type'] ? intval($_POST['type']) : 0;

				pc_base::load_sys_class('form','',0);

				

				if(empty($_POST['catids'])) showmessage(L('illegal_parameters'));

				$batch_array = $workflows = array();

				foreach ($categorys as $catid=>$cat) {

					if($cat['type']==$type && in_array($catid, $_POST['catids'])) {

						$batch_array[$catid] = $cat;

					}

				}

				if(empty($batch_array)) showmessage(L('please_select_category')); 

				$workflows = getcache('workflow_'.$this->siteid,'commons');

				if($workflows) {

					$workflows_datas = array();

					foreach($workflows as $_k=>$_v) {

						$workflows_datas[$_v['workflowid']] = $_v['workname'];

					}

				}

				

				if($type==1) {

					include $this->admin_tpl('category_batch_edit_page');

				} else {

					include $this->admin_tpl('category_batch_edit');

				}

			} else {

				$type = isset($_GET['select_type']) ? intval($_GET['select_type']) : 0;

				

				$tree = pc_base::load_sys_class('tree');

				$tree->icon = array('&nbsp;&nbsp;│ ','&nbsp;&nbsp;├─ ','&nbsp;&nbsp;└─ ');

				$tree->nbsp = '&nbsp;&nbsp;';

				$category = array();

				foreach($categorys as $catid=>$r) {

					if($this->siteid != $r['siteid'] || ($r['type']==2 && $r['child']==0)) continue;

					$category[$catid] = $r;

				}

				$str  = "<option value='\$catid' \$selected>\$spacer \$catname</option>";

	

				$tree->init($category);

				$string .= $tree->get_tree(0, $str);

				include $this->admin_tpl('category_batch_select');

			}

		}	

	} 

	/**

	 * 批量移动文章

	 */

	public function remove() {

		$this->categorys = getcache('category_content_'.$this->siteid,'commons');

		$this->content_db = pc_base::load_model('content_model');

		if(isset($_POST['dosubmit'])) {

			$this->content_check_db = pc_base::load_model('content_check_model'); 

			if(!$_POST['fromid']) showmessage(L('please_input_move_source','','content'));

			if(!$_POST['tocatid']) showmessage(L('please_select_target_category','','content'));

			$tocatid = intval($_POST['tocatid']);

			$modelid = $this->categorys[$tocatid]['modelid'];

			if(!$modelid) showmessage(L('illegal_operation','','content'));

			$fromid = array_filter($_POST['fromid'],"is_numeric");

			$fromid = implode(',', $fromid);

			$this->content_db->set_model($modelid);

			$this->content_db->update(array('catid'=>$tocatid),"catid IN($fromid)");

 			showmessage(L('operation_success'),HTTP_REFERER);

 		} else {

			$show_header = '';

			$catid = intval($_GET['catid']);

			$categorys = array();

 			

  			$modelid = $this->categorys[$catid]['modelid'];

  			$tree = pc_base::load_sys_class('tree');

			$tree->icon = array('&nbsp;&nbsp;│ ','&nbsp;&nbsp;├─ ','&nbsp;&nbsp;└─ ');

			$tree->nbsp = '&nbsp;&nbsp;';

 			foreach($this->categorys as $cid=>$r) {

				if($this->siteid != $r['siteid'] || $r['type']) continue;

				if($modelid && $modelid != $r['modelid']) continue;

				$r['disabled'] = $r['child'] ? 'disabled' : '';

				$r['selected'] = $cid == $catid ? 'selected' : '';

				$categorys[$cid] = $r;

			}

			$str  = "<option value='\$catid' \$disabled>\$spacer \$catname</option>";

 			$tree->init($categorys);

			$string .= $tree->get_tree(0, $str);

			

			

			$str  = "<option value='\$catid' \$selected>\$spacer \$catname</option>";

			$source_string = '';

			$tree->init($categorys);

			$source_string .= $tree->get_tree(0, $str);

			include $this->admin_tpl('category_remove');

 		}

	}

}

?>