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/plugin.php
<?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;

	}



}

?>