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;
- }
- }
- ?>
|