| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656 | 
							- <?php
 
- defined('IN_PHPCMS') or exit('No permission resources.');
 
- pc_base::load_app_class('admin','admin',0);
 
- pc_base::load_sys_class('form', '', 0);
 
- pc_base::load_sys_func('plugin');
 
- class plugin extends admin {
 
- 	private $db,$db_var;
 
- 	function __construct() {
 
- 		parent::__construct();
 
- 		$this->db = pc_base::load_model('plugin_model');
 
- 		$this->db_var = pc_base::load_model('plugin_var_model');
 
- 		pc_base::load_app_func('global');
 
- 	}
 
- 	
 
- 	/**
 
- 	 * 应用配置信息
 
- 	 */
 
- 	public function init() {
 
- 		$show_validator = true;
 
- 		$show_dialog = true;
 
- 		if($pluginfo = $this->db->select('','*','','disable DESC,listorder DESC')) {
 
- 			foreach ($pluginfo as $_k=>$_r) {
 
- 				if(file_exists(PC_PATH.'plugin'.DIRECTORY_SEPARATOR.$_r['dir'].DIRECTORY_SEPARATOR.$_r['dir'].'.class.php')){
 
- 					$pluginfo[$_k]['url'] = 'plugin.php?id='.$_r['dir'];
 
- 				} else {
 
- 					$pluginfo[$_k]['url'] = '';
 
- 				}
 
-   			 	$pluginfo[$_k]['dir'] = $_r['dir'].'/';	
 
- 			}		
 
- 		}
 
- 		
 
- 		include $this->admin_tpl('plugin_list');
 
- 	}
 
- 	
 
- 	/**
 
- 	 * 应用导入\安装
 
- 	 */
 
- 	 
 
- 	public function import() {
 
- 		if(!isset($_GET['dir'])) {
 
- 			$plugnum = 1;
 
- 			$installsdir = array();
 
- 			if($installs_pluginfo = $this->db->select()) {
 
- 				foreach ($installs_pluginfo as $_r) {
 
- 	  			 	$installsdir[] = $_r['dir'];	
 
- 				}		
 
- 			}	
 
- 			$pluginsdir = dir(PC_PATH.'plugin');
 
- 			while (false !== ($entry = $pluginsdir->read())) {
 
- 				$config_file = '';
 
- 				$plugin_data = array();
 
- 				if(!in_array($entry, array('.', '..')) && is_dir(PC_PATH.'plugin'.DIRECTORY_SEPARATOR.$entry) && !in_array($entry, $installsdir) && !$this->db->get_one(array('identification'=>$entry))) {
 
- 					$config_file = PC_PATH.'plugin'.DIRECTORY_SEPARATOR.$entry.DIRECTORY_SEPARATOR.'plugin_'.$entry.'.cfg.php';
 
- 					if(file_exists($config_file)) {
 
- 						$plugin_data = @require($config_file);					
 
- 		  			 	$pluginfo[$plugnum]['name'] = $plugin_data['plugin']['name'];
 
- 		  			 	$pluginfo[$plugnum]['version'] = $plugin_data['plugin']['version'];
 
- 		  			 	$pluginfo[$plugnum]['copyright'] = $plugin_data['plugin']['copyright'];
 
- 		  			 	$pluginfo[$plugnum]['dir'] = $entry;
 
- 		  			 	$plugnum++;
 
- 					}
 
- 				}
 
- 			}		
 
- 			include $this->admin_tpl('plugin_list_import');
 
- 		} else {
 
- 			$dir = trim($_GET['dir']);
 
- 			$license = 0;
 
- 			$config_file = PC_PATH.'plugin'.DIRECTORY_SEPARATOR.$dir.DIRECTORY_SEPARATOR.'plugin_'.$dir.'.cfg.php';
 
- 			if(file_exists($config_file)) {
 
- 				$plugin_data = @require($config_file);
 
- 				$license = ($plugin_data['license'] == '' || !isset($plugin_data['license'])) ? 0 : 1;
 
- 			}
 
- 			if(empty($_GET['license']) && $license) {
 
- 				$submit_url = '?m=admin&c=plugin&a=import&dir='.$dir.'&license=1&pc_hash='. $_SESSION['pc_hash'].'&menuid='.$_GET['menuid'];
 
- 			} else {
 
- 				$submit_url = '?m=admin&c=plugin&a=install&dir='.$dir.'&pc_hash='. $_SESSION['pc_hash'].'&menuid='.$_GET['menuid'];
 
- 			}	
 
- 				$show_header = 0;
 
- 			include $this->admin_tpl('plugin_import_confirm');
 
- 		}
 
- 	}
 
- 	/**
 
- 	 * 应用删除程序
 
- 	 */
 
- 	public function delete() {
 
- 		if(isset($_POST['dosubmit'])) {
 
- 			$pluginid = intval($_POST['pluginid']);
 
- 			$plugin_data =  $this->db->get_one(array('pluginid'=>$pluginid));
 
- 			$op_status = FALSE;	
 
- 			$dir = $plugin_data['dir'];
 
- 			$config_file = PC_PATH.'plugin'.DIRECTORY_SEPARATOR.$dir.DIRECTORY_SEPARATOR.'plugin_'.$dir.'.cfg.php';	
 
- 			if(file_exists($config_file)) {
 
- 				$plugin_data = @require($config_file);
 
- 			}		
 
- 			$filename = PC_PATH.'plugin'.DIRECTORY_SEPARATOR.$dir.DIRECTORY_SEPARATOR.$plugin_data['plugin']['uninstallfile'];
 
- 			if(file_exists($filename)) {
 
- 				@include_once $filename;
 
- 			} else {
 
- 				showmessage(L('plugin_lacks_uninstall_file','','plugin'),HTTP_REFERER);
 
- 			}
 
- 			if($op_status) {
 
- 				$this->db->delete(array('pluginid'=>$pluginid));
 
- 				$this->db_var->delete(array('pluginid'=>$pluginid));
 
- 				delcache($dir,'plugins');
 
- 				delcache($dir.'_var','plugins');
 
- 				$this->set_hook_cache();
 
- 				if($plugin_data['plugin']['iframe']) {
 
- 					pc_base::load_sys_func('dir');
 
- 					if(!dir_delete(PC_PATH.'plugin'.DIRECTORY_SEPARATOR.$dir)) {
 
- 						showmessage(L('plugin_uninstall_success_no_delete','','plugin'),'?m=admin&c=plugin');
 
- 					}
 
- 				}
 
- 				showmessage(L('plugin_uninstall_success','','plugin'),'?m=admin&c=plugin');
 
- 			} else {
 
- 				showmessage(L('plugin_uninstall_fail','','plugin'),'?m=admin&c=plugin');
 
- 			}	
 
- 		} else {
 
- 			$show_header = 0;
 
- 			$pluginid = intval($_GET['pluginid']);
 
- 			$plugin_data =  $this->db->get_one(array('pluginid'=>$pluginid));
 
- 			include $this->admin_tpl('plugin_delete_confirm');			
 
- 		}
 
- 	}
 
- 	
 
- 	/**
 
- 	 * 应用安装
 
- 	 */	
 
- 	public function install() {
 
- 		$op_status = FALSE;
 
- 		$dir = trim($_GET['dir']);
 
- 		$config_file = PC_PATH.'plugin'.DIRECTORY_SEPARATOR.$dir.DIRECTORY_SEPARATOR.'plugin_'.$dir.'.cfg.php';		
 
- 		if(file_exists($config_file)) {
 
- 			$plugin_data = @require($config_file);
 
- 		} else {
 
- 			showmessage(L('plugin_config_not_exist','','plugin'));
 
- 		}
 
- 		$app_status  = app_validity_check($plugin_data['appid']);
 
- 		if($app_status != 2){
 
- 			$app_msg = $app_status == '' ? L('plugin_not_exist_or_pending','','plugin') : ($app_status == 0 || $app_status == 1 ? L('plugin_developing','','plugin') : L('plugin_be_locked','','plugin'));
 
- 			showmessage($app_msg);
 
- 		}
 
- 		if($plugin_data['version'] && $plugin_data['version']!=pc_base::load_config('version', 'pc_version')) {
 
- 			showmessage(L('plugin_incompatible','','plugin'));
 
- 		}
 
- 		
 
- 		if($plugin_data['dir'] == '' || $plugin_data['identification'] == '' || $plugin_data['identification']!=$plugin_data['dir']) {
 
- 			showmessage(L('plugin_lack_of_necessary_configuration_items','','plugin'));
 
- 		}
 
- 		
 
- 		if(!pluginkey_check($plugin_data['identification'])) {
 
- 			showmessage(L('plugin_illegal_id','','plugin'));
 
- 		}
 
- 		if(is_array($plugin_data['plugin_var'])) {
 
- 			foreach($plugin_data['plugin_var'] as $config) {
 
- 				if(!pluginkey_check($config['fieldname'])) {
 
- 					showmessage(L('plugin_illegal_variable','','plugin'));
 
- 				}
 
- 			}
 
- 		}
 
- 		if($this->db->get_one(array('identification'=>$plugin_data['identification']))) {
 
- 			showmessage(L('plugin_duplication_name','','plugin'));
 
- 		};				
 
- 		$filename = PC_PATH.'plugin'.DIRECTORY_SEPARATOR.$dir.DIRECTORY_SEPARATOR.$plugin_data['plugin']['installfile'];
 
- 		
 
- 		if(file_exists($filename)) {
 
- 			@include_once $filename;
 
- 		} 
 
- 		
 
- 		if($op_status) {	
 
- 			//向插件表中插入数据
 
- 			
 
- 			$plugin = array('name'=>new_addslashes($plugin_data['plugin']['name']),'identification'=>$plugin_data['identification'],'appid'=>$plugin_data['appid'],'description'=>new_addslashes($plugin_data['plugin']['description']),'dir'=>$plugin_data['dir'],'copyright'=>new_addslashes($plugin_data['plugin']['copyright']),'setting'=>array2string($plugin_data['plugin']['setting']),'iframe'=>array2string($plugin_data['plugin']['iframe']),'version'=>$plugin_data['plugin']['version'],'disable'=>'0');
 
- 			
 
- 			$pluginid = $this->db->insert($plugin,TRUE);
 
- 			
 
- 			//向插件变量表中插入数据
 
- 			if(is_array($plugin_data['plugin_var'])) {
 
- 				foreach($plugin_data['plugin_var'] as $config) {
 
- 					$plugin_var = array();
 
- 					$plugin_var['pluginid'] = $pluginid;
 
- 					foreach($config as $_k => $_v) {
 
- 						if(!in_array($_k, array('title','description','fieldname','fieldtype','setting','listorder','value','formattribute'))) continue;
 
- 						if($_k == 'setting') $_v = array2string($_v);
 
- 						$plugin_var[$_k] = $_v;
 
- 					}
 
- 					$this->db_var->insert($plugin_var);				
 
- 				}
 
- 			}		
 
- 			plugin_install_stat($plugin_data['appid']);
 
- 			setcache($plugin_data['identification'], $plugin,'plugins');
 
- 			$this->set_var_cache($pluginid);
 
- 			showmessage(L('plugin_install_success','','plugin'),'?m=admin&c=plugin');
 
- 		} else {
 
- 			showmessage(L('plugin_install_fail','','plugin'),'?m=admin&c=plugin');
 
- 		}
 
- 	}	
 
- 	
 
- 	/**
 
- 	 * 应用升级
 
- 	 */		
 
- 	public function upgrade() {
 
- 		//TODO		
 
- 	}
 
- 	
 
- 	/**
 
- 	 * 应用排序
 
- 	 */
 
- 	public function listorder() {
 
- 		if(isset($_POST['dosubmit'])) {
 
- 			foreach($_POST['listorders'] as $pluginid => $listorder) {
 
- 				$this->db->update(array('listorder'=>$listorder),array('pluginid'=>$pluginid));
 
- 			}
 
- 			$this->set_hook_cache();
 
- 			showmessage(L('operation_success'),'?m=admin&c=plugin');
 
- 		} else {
 
- 			showmessage(L('operation_failure'),'?m=admin&c=plugin');
 
- 		}
 
- 	}
 
- 	
 
- 	public function design() {
 
- 		
 
- 	    if(isset($_POST['dosubmit'])) {
 
- 			$data['identification'] = $_POST['info']['identification'];
 
- 			$data['realease'] = date('YMd',SYS_TIME);
 
- 			$data['dir'] = $_POST['info']['identification'];
 
- 			$data['appid'] = '';
 
- 			$data['plugin'] = array(
 
- 							'version' => '0.0.2',
 
- 							'name' => $_POST['info']['name'],
 
- 							'copyright' => $_POST['info']['copyright'],
 
- 							'description' => "",
 
- 							'installfile' => 'install.php',
 
- 							'uninstallfile' => 'uninstall.php',
 
- 						);
 
- 			
 
- 			$filepath = PC_PATH.'plugin'.DIRECTORY_SEPARATOR.$data['identification'].DIRECTORY_SEPARATOR.'plugin_'.$data['identification'].'.cfg.php';
 
- 			pc_base::load_sys_func('dir');
 
- 			dir_create(dirname($filepath));	
 
- 		    $data = "<?php\nreturn ".var_export($data, true).";\n?>";			
 
- 			if(pc_base::load_config('system', 'lock_ex')) {
 
- 				$file_size = file_put_contents($filepath, $data, LOCK_EX);
 
- 			} else {
 
- 				$file_size = file_put_contents($filepath, $data);
 
- 			}
 
- 			echo 'success';
 
- 		} else {
 
- 			include $this->admin_tpl('plugin_design');
 
- 		}
 
- 	}
 
- 	/**
 
- 	 * 应用中心
 
- 	 * Enter description here ...
 
- 	 */ 
 
- 	public function appcenter() {
 
- 		$data = array();
 
- 		$p = intval($_GET[p]) ? intval($_GET[p]) : 1;
 
- 		$s = 8;
 
- 		
 
- 		$data = file_get_contents('http://open.phpcms.cn/index.php?m=open&c=api&a=get_applist&s='.$s.'&p='.$p);
 
- 		$data = array_iconv(json_decode($data, true),'utf-8',CHARSET);
 
- 		
 
- 		$recommed_data = file_get_contents('http://open.phpcms.cn/index.php?m=open&c=api&a=get_recommed_applist&s=5&p=1');
 
- 		$recommed_data = array_iconv(json_decode($recommed_data, true),'utf-8',CHARSET);
 
- 		
 
- 		$focus_data = file_get_contents('http://open.phpcms.cn/index.php?m=open&c=api&a=get_app_focus&num=3');
 
- 		$focus_data = array_iconv(json_decode($focus_data, true),'utf-8',CHARSET);	
 
- 		$pages = $data['pages'];
 
- 		$pre_page = $p <= 1 ? 1 : $p - 1;
 
- 		$next_page = $p >= $pages ? $pages : $p + 1;
 
- 		$pages = '<a class="a1">'.$data['total'].L('plugin_item','','plugin').'</a> <a href="?m=admin&c=plugin&a=appcenter&p=1">'.L('plugin_firstpage').'</a> <a href="?m=admin&c=plugin&a=appcenter&p='.$pre_page.'">'.L('plugin_prepage').'</a> <a href="?m=admin&c=plugin&a=appcenter&p='.$next_page.'">'.L('plugin_nextpage').'</a> <a href="?m=admin&c=plugin&a=appcenter&p='.$pages.'">'.L('plugin_lastpage').'</a>';
 
- 		$show_header = 1;
 
- 		include $this->admin_tpl('plugin_appcenter');
 
- 	}
 
- 	
 
- 	/**
 
- 	 * 显示应用详情
 
- 	 */
 
- 	public function appcenter_detail() {
 
- 		$data = array();
 
- 		$id = intval($_GET['id']);
 
- 		$data = file_get_contents('http://open.phpcms.cn/index.php?m=open&c=api&a=get_detail_byappid&id='.$id);
 
- 		$data = array_iconv(json_decode($data, true),'utf-8',CHARSET);
 
- 		extract($data);		
 
- 		if($appname) {
 
- 			include $this->admin_tpl('plugin_appcenter_detail');
 
- 		} else {
 
- 			showmessage(L('plugin_not_exist_or_pending','','plugin'));
 
- 		}
 
- 	}
 
- 	
 
- 	/**
 
- 	 * 在线安装
 
- 	 */
 
- 	public function install_online() {
 
- 		$data = array();
 
- 		$id = intval($_GET['id']);
 
- 		$data = file_get_contents('http://open.phpcms.cn/index.php?m=open&c=api&a=get_detail_byappid&id='.$id);
 
- 		$data = array_iconv(json_decode($data, true),'utf-8',CHARSET);
 
- 		
 
- 		//如果为iframe类型应用,无需下载压缩包,之间创建插件文件夹
 
- 		if(!empty($data['iframe'])) {
 
- 			$appdirname = PC_PATH.'plugin'.DIRECTORY_SEPARATOR.$data['appenname'];
 
- 			if(!file_exists($appdirname)) {
 
- 				if(!mkdir($appdirname)) {
 
- 					showmessage(L('plugin_mkdir_fail', '', 'plugin'));
 
- 				} else {
 
- 					//创建安装、配置文件
 
- 					$installdata = <<<EOF
 
- <?php 
 
- 	defined('IN_PHPCMS') or exit('No permission resources.');
 
- 	\$op_status = TRUE;
 
- ?>
 
- EOF;
 
- 					$uninstallres = @file_put_contents($appdirname.DIRECTORY_SEPARATOR.'uninstall.php', $installdata);
 
- 					$installres = @file_put_contents($appdirname.DIRECTORY_SEPARATOR.'install.php', $installdata);
 
- 					
 
- 					$cfgdata = <<<EOF
 
- <?php
 
- return array (
 
-   'identification' => '$data[appenname]',
 
-   'dir' => '$data[appenname]',
 
-   'appid' => '$data[id]',
 
-   'plugin'=> array(
 
- 		  'version' => '1.0',
 
- 		  'name' => '$data[appname]',
 
- 		  'copyright' => 'phpcms team',
 
- 		  'description' =>'$data[description]',
 
- 		  'installfile' => 'install.php',
 
- 		  'uninstallfile' => 'uninstall.php',
 
- 		  'iframe' => array('width'=>'960','height'=>'640','url'=>'$data[iframe]'),		  
 
- 	),
 
-    'plugin_var'=> array(   array('title'=>'宽度','description'=>'','fieldname'=>'width','fieldtype'=>'text','value'=>'960','formattribute'=>'style="width:50px"','listorder'=>'1',),		array('title'=>'高度','description'=>'','fieldname'=>'height','fieldtype'=>'text','value'=>'640','formattribute'=>'style="width:50px"','listorder'=>'2',),   
 
- 	),	
 
- );
 
- ?>				
 
- EOF;
 
- 					$cfgres = @file_put_contents($appdirname.DIRECTORY_SEPARATOR.'plugin_'.$data['appenname'].'.cfg.php', $cfgdata);
 
- 					
 
- 					//检查配置文件是否写入成功
 
- 					if($installres*$uninstallres*$cfgres > 0) {
 
- 						showmessage(L('plugin_configure_success', '', 'plugin'), 'index.php?m=admin&c=plugin&a=import&dir='.$data['appenname']);
 
- 					} else {
 
- 						showmessage(L('plugin_install_fail', '', 'plugin'));
 
- 					}
 
- 				}
 
- 			} else {
 
- 				showmessage(L('plugin_allready_exists', '', 'plugin'));
 
- 			}
 
- 		} else {	
 
- 			//远程压缩包地址
 
- 			$upgradezip_url = $data['downurl'];
 
- 			if(empty($upgradezip_url)) {
 
- 				showmessage(L('download_fail', '', 'plugin'), 'index.php?m=admin&c=plugin&a=appcenter');
 
- 			}
 
- 			
 
- 			//创建缓存文件夹
 
- 			if(!file_exists(CACHE_PATH.'caches_open')) {
 
- 				@mkdir(CACHE_PATH.'caches_open');
 
- 			}
 
- 			//保存到本地地址
 
- 			$upgradezip_path = CACHE_PATH.'caches_open'.DIRECTORY_SEPARATOR.$data['id'].'.zip';
 
- 			//解压路径
 
- 			$upgradezip_source_path = CACHE_PATH.'caches_open'.DIRECTORY_SEPARATOR.$data['id'];
 
- 				
 
- 			//下载压缩包
 
- 			@file_put_contents($upgradezip_path, @file_get_contents($upgradezip_url));
 
- 			//解压缩
 
- 			pc_base::load_app_class('pclzip', 'upgrade', 0);
 
- 			$archive = new PclZip($upgradezip_path);
 
- 	
 
- 			if($archive->extract(PCLZIP_OPT_PATH, $upgradezip_source_path, PCLZIP_OPT_REPLACE_NEWER) == 0) {
 
- 				die("Error : ".$archive->errorInfo(true));
 
- 			}
 
- 			//删除压缩包
 
- 			@unlink($upgradezip_path);
 
- 			
 
- 			//拷贝gbk/upload文件夹到根目录
 
- 			$copy_from = $upgradezip_source_path.DIRECTORY_SEPARATOR.CHARSET;
 
- 			//动态程序路径
 
- 			$copy_to_pcpath = PC_PATH.'plugin';
 
- 			//静态程序路径
 
- 			$copy_to_staticspath = PHPCMS_PATH.'statics'.DIRECTORY_SEPARATOR.'plugin';
 
- 			//应用文件夹名称
 
- 			$appdirname = $data['appenname'];
 
- 	
 
- 			$this->copyfailnum = 0;
 
- 			$this->copydir($copy_from.DIRECTORY_SEPARATOR.'phpcms'.DIRECTORY_SEPARATOR.'plugin', $copy_to_pcpath, $_GET['cover']);
 
- 			$this->copydir($copy_from.DIRECTORY_SEPARATOR.'statics'.DIRECTORY_SEPARATOR.'plugin', $copy_to_staticspath, $_GET['cover']);
 
- 			$this->deletedir($copy_from);
 
- 			//检查文件操作权限,是否复制成功
 
- 			if($this->copyfailnum > 0) {
 
- 				showmessage(L('download_fail', '', 'plugin'), 'index.php?m=admin&c=plugin&a=appcenter');	
 
- 			} else {
 
- 				showmessage(L('download_success', '', 'plugin'), 'index.php?m=admin&c=plugin&a=import&dir='.$appdirname);	
 
- 			}
 
- 		}
 
- 	}
 
- 		
 
- 	/**
 
- 	 * 异步方式调用详情
 
- 	 * Enter description here ...
 
- 	 */
 
- 	public function public_appcenter_ajx_detail() {
 
- 		$id = intval($_GET['id']);
 
- 		$data = file_get_contents('http://open.phpcms.cn/index.php?m=open&c=api&a=get_detail_byappid&id='.$id);
 
- 		//$data = json_decode($data, true);
 
- 		echo $_GET['jsoncallback'].'(',$data,')';
 
- 		exit;		
 
- 	}
 
- 	
 
- 	/**
 
- 	 * 配置应用.
 
- 	 */
 
- 	public function config() {
 
- 		if(isset($_POST['dosubmit'])) {
 
- 			$pluginid = intval($_POST['pluginid']);
 
- 			foreach ($_POST['info'] as $_k => $_v) {
 
- 				 $this->db_var->update(array('value'=>$_v),array('pluginid'=>$pluginid,'fieldname'=>$_k));
 
- 			}
 
- 			$this->set_var_cache($pluginid);
 
- 			showmessage(L('operation_success'),HTTP_REFERER);
 
- 		} else {
 
- 			$pluginid = intval($_GET['pluginid']);
 
- 			$plugin_menus = array();
 
- 			$info = $this->db->get_one(array('pluginid'=>$pluginid));
 
- 			extract($info);
 
- 			if(!isset($_GET['module'])) {	
 
- 				$plugin_menus[] =array('name'=>L('plugin_desc','','plugin'),'url'=>'','status'=>'1');
 
- 				if($disable){
 
- 					if($info_var = $this->db_var->select(array('pluginid'=>$pluginid),'*','','listorder ASC,id DESC')) {
 
- 						$plugin_menus[] =array('name'=>L('plugin_config','','plugin'),'url'=>'','status'=>'0');
 
- 						$form = $this->creatconfigform($info_var);
 
- 					}
 
- 					$meun_total = count($plugin_menus);;
 
- 					$setting = string2array($setting);
 
- 					if(is_array($setting)) {
 
- 						foreach($setting as $m) {
 
- 							$plugin_menus[] = array('name'=>$m['menu'],'extend'=>1,'url'=>$m['name']);
 
- 							$mods[] = $m['name'];
 
- 						}
 
- 					}
 
- 				}
 
- 				include $this->admin_tpl('plugin_setting');
 
- 			} else {
 
- 				define('PLUGIN_ID', $identification);
 
- 				$plugin_module = trim($_GET['module']);
 
- 				$plugin_admin_path = PC_PATH.'plugin'.DIRECTORY_SEPARATOR.$identification.DIRECTORY_SEPARATOR.'plugin_admin.class.php';
 
- 				if (file_exists($plugin_admin_path)) {
 
- 					include $plugin_admin_path;
 
- 					$plugin_admin = new plugin_admin($pluginid);
 
- 					call_user_func(array($plugin_admin, $plugin_module));
 
- 				}				
 
- 			}
 
- 		}
 
- 	}
 
- 	/**
 
- 	 * 开启/关闭插件
 
- 	 * Enter description here ...
 
- 	 */
 
- 	public function status() {
 
- 		$disable = intval($_GET['disable']);
 
- 		$pluginid = intval($_GET['pluginid']);
 
- 		$this->db->update(array('disable'=>$disable),array('pluginid'=>$pluginid));
 
- 		$this->set_cache($pluginid);
 
- 		showmessage(L('operation_success'),HTTP_REFERER);
 
- 	}
 
- 	
 
- 	/**
 
- 	 * 设置字段缓存
 
- 	 * @param int $pluginid
 
- 	 */
 
- 	private function set_var_cache($pluginid) {
 
- 		if($info = $this->db_var->select(array('pluginid'=>$pluginid))) {
 
- 			$plugin_data =  $this->db->get_one(array('pluginid'=>$pluginid));
 
- 			foreach ($info as $_value) {
 
- 				$plugin_vars[$_value['fieldname']] = $_value['value'];
 
- 			}
 
- 			setcache($plugin_data['identification'].'_var', $plugin_vars,'plugins');
 
- 		}
 
- 	}
 
- 	
 
- 	/**
 
- 	 * 设置缓存
 
- 	 * @param int $pluginid
 
- 	 */
 
- 	private function set_cache($pluginid) {
 
- 		if($info = $this->db->get_one(array('pluginid'=>$pluginid))) {		
 
- 			setcache($info['identification'], $info,'plugins');
 
- 		}
 
- 		$this->set_hook_cache();
 
- 	}
 
- 	/**
 
- 	 * 设置hook缓存
 
- 	 */
 
- 	function set_hook_cache() {
 
- 		if($info = $this->db->select(array('disable'=>1),'*','','listorder DESC')) {
 
- 			foreach($info as $i) {
 
- 				$id = $i['identification'];
 
- 				$hook_file = PC_PATH.'plugin'.DIRECTORY_SEPARATOR.$id.DIRECTORY_SEPARATOR.'hook.class.php';
 
- 				if(file_exists($hook_file)) {
 
- 					$hook[$i['appid']] = $i['identification'];
 
- 				}
 
- 			}			
 
- 		}
 
- 		setcache('hook',$hook,'plugins');
 
- 	}
 
- 	
 
- 	/**
 
- 	 * 创建配置表单
 
- 	 * @param array $data
 
- 	 */
 
- 	private function creatconfigform($data) {
 
- 		if(!is_array($data) || empty($data)) return false;
 
- 		foreach ($data as $r) {
 
- 			$form .= '<tr><th width="120">'.$r['title'].'</th><td class="y-bg">'.$this->creatfield($r).'</td></tr>';			
 
- 		}
 
- 		return $form;		
 
- 	}
 
- 	
 
- 	/**
 
- 	 * 创建配置表单字段
 
- 	 * @param array $data
 
- 	 */
 
- 	private function creatfield($data) {
 
- 		extract($data);
 
- 		$fielda_array = array('text','radio','checkbox','select','datetime','textarea');
 
- 		if(in_array($fieldtype, $fielda_array)) {
 
- 			if($fieldtype == 'text') {
 
- 				return '<input type="text" name="info['.$fieldname.']" id="'.$fieldname.'" value="'.$value.'" class="input-text" '.$formattribute.' > '.' '.$description;
 
- 			} elseif($fieldtype == 'checkbox') {
 
- 				return form::checkbox(string2array($setting),$value,"name='info[$fieldname]' $formattribute",'',$fieldname).' '.$description;
 
- 			} elseif($fieldtype == 'radio') {
 
- 				return form::radio(string2array($setting),$value,"name='info[$fieldname]' $formattribute",'',$fieldname).' '.$description;
 
- 			}  elseif($fieldtype == 'select') {
 
- 				return form::select(string2array($setting),$value,"name='info[$fieldname]' $formattribute",'',$fieldname).' '.$description;
 
- 			} elseif($fieldtype == 'datetime') {
 
- 				return form::date("info[$fieldname]",$value,$isdatetime,1).' '.$description;
 
- 			} elseif($fieldtype == 'textarea') {
 
- 				return '<textarea name="info['.$fieldname.']" id="'.$fieldname.'" '.$formattribute.'>'.$value.'</textarea>'.' '.$description;
 
- 			}
 
- 		}
 
- 	}
 
- 	/**
 
- 	 * 执行SQL
 
- 	 * @param string $sql 要执行的sql语句
 
- 	 */
 
-  	private function _sql_execute($sql) {
 
- 	    $sqls = $this->_sql_split($sql);
 
- 		if(is_array($sqls)) {
 
- 			foreach($sqls as $sql) {
 
- 				if(trim($sql) != '') {
 
- 					$this->db->query($sql);
 
- 				}
 
- 			}
 
- 		} else {
 
- 			$this->db->query($sqls);
 
- 		}
 
- 		return true;
 
- 	}	
 
- 	
 
- 	/**
 
- 	 * 分割SQL语句
 
- 	 * @param string $sql 要执行的sql语句
 
- 	 */	
 
-  	private function _sql_split($sql) {
 
- 		$database = pc_base::load_config('database');
 
- 		$db_charset = $database['default']['charset'];
 
- 		if($this->db->version() > '4.1' && $db_charset) {
 
- 			$sql = preg_replace("/TYPE=(InnoDB|MyISAM|MEMORY)( DEFAULT CHARSET=[^; ]+)?/", "ENGINE=\\1 DEFAULT CHARSET=".$db_charset,$sql);
 
- 		}
 
- 		$sql = str_replace("\r", "\n", $sql);
 
- 		$ret = array();
 
- 		$num = 0;
 
- 		$queriesarray = explode(";\n", trim($sql));
 
- 		unset($sql);
 
- 		foreach($queriesarray as $query) {
 
- 			$ret[$num] = '';
 
- 			$queries = explode("\n", trim($query));
 
- 			$queries = array_filter($queries);
 
- 			foreach($queries as $query) {
 
- 				$str1 = substr($query, 0, 1);
 
- 				if($str1 != '#' && $str1 != '-') $ret[$num] .= $query;
 
- 			}
 
- 			$num++;
 
- 		}
 
- 		return($ret);
 
- 	}
 
- 				
 
- 	private function copydir($dirfrom, $dirto, $cover='') {
 
- 	    //如果遇到同名文件无法复制,则直接退出
 
- 	    if(is_file($dirto)){
 
- 	        die(L('have_no_pri').$dirto);
 
- 	    }
 
- 	    //如果目录不存在,则建立之
 
- 	    if(!file_exists($dirto)){
 
- 	        mkdir($dirto);
 
- 	    }
 
- 	    
 
- 	    $handle = opendir($dirfrom); //打开当前目录
 
-     
 
- 	    //循环读取文件
 
- 	    while(false !== ($file = readdir($handle))) {
 
- 	    	if($file != '.' && $file != '..'){ //排除"."和"."
 
- 		        //生成源文件名
 
- 			    $filefrom = $dirfrom.DIRECTORY_SEPARATOR.$file;
 
- 		     	//生成目标文件名
 
- 		        $fileto = $dirto.DIRECTORY_SEPARATOR.$file;
 
- 		        if(is_dir($filefrom)){ //如果是子目录,则进行递归操作
 
- 		            $this->copydir($filefrom, $fileto, $cover);
 
- 		        } else { //如果是文件,则直接用copy函数复制
 
- 		        	if(!empty($cover)) {
 
- 						if(!copy($filefrom, $fileto)) {
 
- 							$this->copyfailnum++;
 
- 						    echo L('copy').$filefrom.L('to').$fileto.L('failed')."<br />";
 
- 						}
 
- 		        	} else {
 
- 		        		if(fileext($fileto) == 'html' && file_exists($fileto)) {
 
- 		        		} else {
 
- 		        			if(!copy($filefrom, $fileto)) {
 
- 								$this->copyfailnum++;
 
- 							    echo L('copy').$filefrom.L('to').$fileto.L('failed')."<br />";
 
- 							}
 
- 		        		}
 
- 		        	}
 
- 		        }
 
- 	    	}
 
- 	    }
 
- 	}
 
- 	
 
- 	private function deletedir($dirname){
 
- 	    $result = false;
 
- 	    if(! is_dir($dirname)){
 
- 	        echo " $dirname is not a dir!";
 
- 	        exit(0);
 
- 	    }
 
- 	    $handle = opendir($dirname); //打开目录
 
- 	    while(($file = readdir($handle)) !== false) {
 
- 	        if($file != '.' && $file != '..'){ //排除"."和"."
 
- 	            $dir = $dirname.DIRECTORY_SEPARATOR.$file;
 
- 	            //$dir是目录时递归调用deletedir,是文件则直接删除
 
- 	            is_dir($dir) ? $this->deletedir($dir) : unlink($dir);
 
- 	        }
 
- 	    }
 
- 	    closedir($handle);
 
- 	    $result = rmdir($dirname) ? true : false;
 
- 	    return $result;
 
- 	}
 
- }
 
- ?>
 
 
  |