pagetitle); if(e_AJAX_REQUEST && isset($_GET['action'])) // Ajax { if($_GET['action'] == 'download') { $string = base64_decode($_GET['src']); parse_str($string, $p); print_a($p); // $mp = $pman->getMarketplace(); // $mp->generateAuthKey($e107SiteUsername, $e107SiteUserpass); // Server flush useless. It's ajax ready state 4, we can't flush (sadly) before that (at least not for all browsers) echo "
Connecting...\n"; flush(); // FIXME change the modal default label, default is Loading...
		// download and flush
		$mp->download($p['plugin_id'], $p['plugin_mode'], 'plugin');
		
		echo "
"; flush(); } /*$string = base64_decode($_GET['src']); parse_str($string,$p); $remotefile = $p['plugin_url']; $localfile = md5($remotefile.time()).".zip"; $status = "Downloading..."; $fl = e107::getFile(); $fl->setAuthKey($e107SiteUsername,$e107SiteUserpass); $fl->download($remotefile,'plugin');*/ exit; } if(isset($_POST['uninstall_cancel'])) { header("location:".e_SELF); exit; } class pluginmanager_form extends e_form { var $plug; var $plug_vars; //FIXME _ there's a problem with calling this. function plugin_website($parms, $value, $id, $attributes) { return ($plugURL) ? "".ADMIN_URL_ICON."" : ""; } function options($val, $curVal) { $tp = e107::getParser(); $_path = e_PLUGIN.$this->plug['plugin_path'].'/'; $icon_src = (isset($this->plug_vars['plugin_php']) ? e_PLUGIN : $_path).$this->plug_vars['administration']['icon']; $plugin_icon = $this->plug_vars['administration']['icon'] ? "" : $tp->toGlyph('e-cat_plugins-32'); $conf_file = "#"; $conf_title = ""; if ($this->plug_vars['administration']['configFile'] && $this->plug['plugin_installflag'] == true) { $conf_file = e_PLUGIN. $this->plug['plugin_path'].'/'.$this->plug_vars['administration']['configFile']; $conf_title = LAN_CONFIGURE.' '.$tp->toHtml($this->plug_vars['@attributes']['name'], "", "defs,emotes_off, no_make_clickable"); $plugin_icon = "".$plugin_icon.""; $plugin_config_icon = "".ADMIN_CONFIGURE_ICON.""; } $text = "
"; $text .= vartrue($plugin_config_icon); if ($this->plug_vars['@attributes']['installRequired']) { if ($this->plug['plugin_installflag']) { $text .= ($this->plug['plugin_installflag'] ? "plug['plugin_id']}\" title='".EPL_ADLAN_1."' >".ADMIN_UNINSTALLPLUGIN_ICON."" : "plug['plugin_id']}\" title='".EPL_ADLAN_0."' >".ADMIN_INSTALLPLUGIN_ICON.""); // $text .= ($this->plug['plugin_installflag'] ? "" : ""); if (PLUGIN_SHOW_REFRESH && !varsettrue($this->plug_vars['plugin_php'])) { $text .= "

plug['plugin_id']}'\" title='".'Refresh plugin settings'."' value='".'Refresh plugin settings'."' /> "; } } else { // $text .= "plug['plugin_id']}'\" title='".EPL_ADLAN_0."' value='".EPL_ADLAN_0."' />"; // $text .= ""; $text .= "plug['plugin_id']}\" title='".EPL_ADLAN_0."' >".ADMIN_INSTALLPLUGIN_ICON.""; } } else { if ($this->plug_vars['menuName']) { $text .= EPL_NOINSTALL.str_replace("..", "", e_PLUGIN.$this->plug['plugin_path'])."/ ".EPL_DIRECTORY; } else { $text .= EPL_NOINSTALL_1.str_replace("..", "", e_PLUGIN.$this->plug['plugin_path'])."/ ".EPL_DIRECTORY; if($this->plug['plugin_installflag'] == false) { e107::getDb()->db_Delete('plugin', "plugin_installflag=0 AND (plugin_path='{$this->plug['plugin_path']}' OR plugin_path='{$this->plug['plugin_path']}/' ) "); } } } if ($this->plug['plugin_version'] != $this->plug_vars['@attributes']['version'] && $this->plug['plugin_installflag']) { // $text .= "
plug['plugin_id']}'\" title='".EPL_UPGRADE." to v".$this->plug_vars['@attributes']['version']."' value='".EPL_UPGRADE."' />"; $text .= "plug_vars['@attributes']['version']."\" >".ADMIN_UPGRADEPLUGIN_ICON.""; } $text .="
"; return $text; } } require_once("auth.php"); $pman->pluginObserver(); $mes = e107::getMessage(); $frm = e107::getForm(); function e_help() { return array( 'caption' => "Scan for Changes", 'text' => "Plugin folders are scanned every ".(PLUGIN_SCAN_INTERVAL ? PLUGIN_SCAN_INTERVAL / 60 : 0) ." minutes for changes. Click the button below to scan now.

Refresh

" ); } require_once("footer.php"); exit; // FIXME switch to admin UI class pluginManager{ var $plugArray; var $action; var $id; var $frm; var $fieldpref; var $titlearray = array(); var $pagetitle; /** * Marketplace handler instance * @var e_marketplace */ var $mp; protected $pid = 'plugin_id'; protected $fields = array( "checkboxes" => array("title" => "", 'type'=>null, "forced"=>TRUE, "width"=>"3%", 'thclass'=>'center','class'=>'center'), "plugin_icon" => array("title" => EPL_ADLAN_82, "type"=>"icon", "width" => "5%", "thclass" => "middle center",'class'=>'center', "url" => ""), "plugin_name" => array("title" => EPL_ADLAN_10, 'forced'=>true, "type"=>"text", "width" => "auto", 'class'=>'left', "thclass" => "middle", "url" => ""), "plugin_version" => array("title" => EPL_ADLAN_11, "type"=>"numeric", "width" => "5%", "thclass" => "middle", "url" => ""), "plugin_date" => array("title" => "Released ", "type"=>"text", "width" => "8%", "thclass" => "middle"), "plugin_folder" => array("title" => EPL_ADLAN_64, "type"=>"text", "width" => "10%", "thclass" => "middle"), "plugin_category" => array("title" => LAN_CATEGORY, "type"=>"text", "width" => "auto", "thclass" => "middle"), "plugin_author" => array("title" => EPL_ADLAN_12, "type"=>"text", "width" => "10%", "thclass" => "middle"), "plugin_license" => array("title" => "License", 'nolist'=>true, "forced"=>true, "type"=>"text", "width" => "5%", "thclass" => "left"), // "plugin_price" => array("title" => "Price", 'nolist'=>true, "forced"=>true, "type"=>"text", "width" => "5%", "thclass" => "left"), "plugin_compatible" => array("title" => EPL_ADLAN_13, "type"=>"text", "width" => "5%", "thclass" => "middle"), "plugin_description" => array("title" => EPL_ADLAN_14, "type"=>"bbarea", "width" => "30%", "thclass" => "middle center", 'readParms' => 'expand=1&truncate=180&bb=1'), "plugin_compliant" => array("title" => EPL_ADLAN_81, "type"=>"text", "width" => "5%", "thclass" => "middle center", "url" => ""), // "plugin_release" => array("title" => EPL_ADLAN_81, "type"=>"text", "width" => "5%", "thclass" => "middle center", "url" => ""), // "plugin_notes" => array("title" => EPL_ADLAN_83, "type"=>"url", "width" => "5%", "thclass" => "middle center", "url" => ""), "options" => array("title" => LAN_OPTIONS, 'forced'=>TRUE, 'type'=> 'method', "width" => "15%", "thclass" => "right last", 'class'=>'right'), ); function __construct() { global $user_pref,$admin_log; $tmp = explode('.', e_QUERY); $this -> action = ($tmp[0]) ? $tmp[0] : "installed"; $this -> id = varset($tmp[1]) ? intval($tmp[1]) : ""; $this -> titlearray = array('installed'=>EPL_ADLAN_22,'avail'=>EPL_ADLAN_23, 'upload'=>EPL_ADLAN_38); if(isset($_GET['mode'])) { $this->action = $_GET['mode']; } if($this->action == 'online') { // $this->fields["plugin_price"]['nolist'] = false; // = array("title" => "Price", "forced"=>true, "type"=>"text", "width" => "5%", "thclass" => "middle center"); $this->fields["plugin_license"]['nolist'] = false; } $keys = array_keys($this -> titlearray); $this->pagetitle = (in_array($this->action,$keys)) ? $this -> titlearray[$this->action] : $this -> titlearray['installed']; /* if(isset($_POST['uninstall-selected'])) { foreach($_POST['checkboxes'] as $val) { $this -> id = intval($val); $this -> pluginUninstall(); } $this -> action = "installed"; $this -> pluginRenderList(); return; // Complicated, as each uninstall system is different. }*/ } /** * Temporary, e107::getMarketplace() coming soon * @return e_marketplace */ public function getMarketplace() { if(null === $this->mp) { require_once(e_HANDLER.'e_marketplace.php'); $this->mp = new e_marketplace(); // autodetect the best method } return $this->mp; } function pluginObserver() { global $user_pref,$admin_log; if (isset($_POST['upload'])) { $this -> pluginProcessUpload(); } if(isset($_POST['etrigger_ecolumns'])) { $user_pref['admin_pluginmanager_columns'] = $_POST['e-columns']; save_prefs('user'); } $user_pref['admin_pluginmanager_columns'] = false; $this -> fieldpref = (vartrue($user_pref['admin_pluginmanager_columns'])) ? $user_pref['admin_pluginmanager_columns'] : array("plugin_icon","plugin_name","plugin_version","plugin_date","plugin_description","plugin_category","plugin_compatible","plugin_author","plugin_website","plugin_notes"); foreach($this->fields as $key=>$val) { if(vartrue($val['forced']) && substr($key,0,6)=='plugin') { $this->fieldpref[] = $key; } } if($this->action == 'avail' || $this->action == 'installed') // Plugin Check is done during upgrade_routine. { $this -> pluginCheck(); } if($this->action == "uninstall") { $this -> pluginUninstall(); $this -> pluginCheck(true); // forced } if($this->action == "refresh") { $this -> pluginCheck(true); // forced } if($this->action == "install" || $this->action == "refresh") { $this -> pluginInstall(); $this -> action = "installed"; } if($this->action == 'create') { $pc = new pluginBuilder; return; } if($this->action == "upgrade") { $this -> pluginUpgrade(); $this -> action = "installed"; } if($this->action == "refresh") { $this -> pluginRefresh(); } if($this->action == "upload") { $this -> pluginUpload(); } if($this->action == "online") { $this -> pluginOnline(); return; } // print_a($_POST); if(isset($_POST['install-selected'])) { foreach($_POST['multiselect'] as $val) { $this -> id = intval($val); $this -> pluginInstall(); } $this -> action = "installed"; } if($this->action != 'avail' && varset($this->fields['checkboxes'])) { unset($this->fields['checkboxes']); // = FALSE; } if($this->action !='upload' && $this->action !='uninstall') { $this -> pluginRenderList(); } } private function compatibilityLabel($val='') { $badge = (vartrue($val) > 1.9) ? "Made for v2" : '1.x'; return $badge; } function pluginOnline() { global $plugin, $e107SiteUsername, $e107SiteUserpass; $tp = e107::getParser(); $frm = e107::getForm(); $caption = "Search Online"; $e107 = e107::getInstance(); $xml = e107::getXml(); $mes = e107::getMessage(); // $mes->addWarning("Some older plugins may produce unpredictable results."); // check for cURL if(!function_exists(curl_init)) { $mes->addWarning("cURL is currently required to use this feature. Contact your webhosting provider to enable cURL"); // TODO LAN? } //TODO use admin_ui including filter capabilities by sending search queries back to the xml script. $from = isset($_GET['frm']) ? intval($_GET['frm']) : 0; $srch = preg_replace('/[^\w]/','', vartrue($_GET['srch'])); $mp = $this->getMarketplace(); // auth $mp->generateAuthKey($e107SiteUsername, $e107SiteUserpass); // do the request, retrieve and parse data $xdata = $mp->call('getList', array( 'type' => 'plugin', 'params' => array('limit' => 10, 'search' => $srch, 'from' => $from) )); $total = $xdata['params']['count']; // OLD BIT OF CODE -------------------------------> /* // $file = SITEURLBASE.e_PLUGIN_ABS."release/release.php"; // temporary testing $file = "http://e107.org/feed?type=plugin&frm=".$from."&srch=".$srch."&limit=10"; $xml->setOptArrayTags('plugin'); // make sure 'plugin' tag always returns an array $xdata = $xml->loadXMLfile($file,'advanced'); $total = $xdata['@attributes']['total']; echo 'file='.$file; // print_a($xdata); $xdata['data'] = $xdata['plugin']; */ // OLD BIT OF CODE END -------------------------------> // print_a($xdata); $c = 1; foreach($xdata['data'] as $row) { //$row = $r['@attributes']; // print_a($row); $badge = $this->compatibilityLabel($row['compatibility']);; $featured = ($row['featured']== 1) ? " Featured" : ''; $price = ($row['price'] > 0) ? "Buy" : "Free"; $data[] = array( 'plugin_id' => $row['params']['id'], 'plugin_mode' => $row['params']['mode'], 'plugin_icon' => vartrue($row['icon'],'e-plugins-32'), 'plugin_name' => stripslashes($row['name']), 'plugin_featured' => $featured, 'plugin_sef' => '', 'plugin_folder' => $row['folder'], 'plugin_date' => vartrue($row['date']), 'plugin_category' => vartrue($row['category'], 'n/a'), 'plugin_author' => vartrue($row['author']), 'plugin_version' => $row['version'], 'plugin_description' => nl2br(vartrue($row['description'])), 'plugin_compatible' => $badge, 'plugin_website' => vartrue($row['authorUrl']), 'plugin_url' => $row['urlView'], 'plugin_notes' => '', // 'plugin_price' => $price, 'plugin_license' => $price ); $c++; } $fieldList = $this->fields; unset($fieldList['checkboxes']); $text = "
".$caption." ".$frm->colGroup($fieldList,$this->fieldpref). $frm->thead($fieldList,$this->fieldpref)." "; foreach($data as $key=>$val ) { // print_a($val); $text .= ""; foreach($this->fields as $v=>$foo) { if(!in_array($v,$this->fieldpref) || $v == 'checkboxes') { continue; } $_value = $val[$v]; if($v == 'plugin_name') $_value .= $val['plugin_featured']; // echo '
v='.$v; $text .= "\n"; } $text .= ""; $text .= ""; } $text .= "
".$frm->renderValue($v, $_value, $this->fields[$v], $key)."".$this->options($val)."
"; $text .= "
"; $amount = 30; if($total > $amount) { $parms = $total.",".$amount.",".$from.",".e_SELF.'?mode='.$_GET['mode'].'&frm=[FROM]'; $text .= "
".$tp->parseTemplate("{NEXTPREV=$parms}",TRUE)."
"; } e107::getRender()->tablerender(ADLAN_98.SEP.$caption, $mes->render(). $text); } function options($data) { // print_a($data); /* if(!e107::getFile()->hasAuthKey()) { // return "Download and Install"; } */ $d = http_build_query($data,false,'&'); //$url = e_SELF."?src=".base64_encode($d); $url = e_SELF.'?action=download&src='.base64_encode($d);//$url.'&action=download'; $id = 'plug_'.$data['plugin_id']; // // Temporary Pop-up version. $dicon = ''; // $dicon = " "; return "
{$dicon}
"; } // FIXME - move it to plugin handler, similar to install_plugin() routine function pluginUninstall() { $pref = e107::getPref(); $admin_log = e107::getAdminLog(); $plugin = e107::getPlugin(); $tp = e107::getParser(); $sql = e107::getDb(); $eplug_folder = ''; if(!isset($_POST['uninstall_confirm'])) { // $id is already an integer $this->pluginConfirmUninstall($this->id); return; } $plug = $plugin->getinfo($this->id); $text = ''; //Uninstall Plugin if ($plug['plugin_installflag'] == TRUE ) { $eplug_folder = $plug['plugin_path']; $_path = e_PLUGIN.$plug['plugin_path'].'/'; if(file_exists($_path.'plugin.xml')) { unset($_POST['uninstall_confirm']); $text .= $plugin->install_plugin_xml($this->id, 'uninstall', $_POST); //$_POST must be used. } else { // Deprecated - plugin uses plugin.php include(e_PLUGIN.$plug['plugin_path'].'/plugin.php'); $func = $eplug_folder.'_uninstall'; if (function_exists($func)) { $text .= call_user_func($func); } if($_POST['delete_tables']) { if (is_array($eplug_table_names)) { $result = $plugin->manage_tables('remove', $eplug_table_names); if ($result !== TRUE) { $text .= EPL_ADLAN_27.' '.$mySQLprefix.$result.' - '.EPL_ADLAN_30.'
'; } else { $text .= EPL_ADLAN_28."
"; } } } else { $text .= EPL_ADLAN_49."
"; } if (is_array($eplug_prefs)) { $plugin->manage_prefs('remove', $eplug_prefs); $text .= EPL_ADLAN_29."
"; } if (is_array($eplug_comment_ids)) { $text .= ($plugin->manage_comments('remove', $eplug_comment_ids)) ? EPL_ADLAN_50."
" : ""; } if (is_array($eplug_array_pref)) { foreach($eplug_array_pref as $key => $val) { $plugin->manage_plugin_prefs('remove', $key, $eplug_folder, $val); } } if ($eplug_menu_name) { $sql->db_Delete('menus', "menu_name='{$eplug_menu_name}' "); } if ($eplug_link) { $plugin->manage_link('remove', $eplug_link_url, $eplug_link_name); } if ($eplug_userclass) { $plugin->manage_userclass('remove', $eplug_userclass); } $sql->update('plugin', "plugin_installflag=0, plugin_version='{$eplug_version}' WHERE plugin_id='{$this->id}' "); $plugin->manage_search('remove', $eplug_folder); $plugin->manage_notify('remove', $eplug_folder); // it's done inside install_plugin_xml(), required only here if (isset($pref['plug_installed'][$plug['plugin_path']])) { unset($pref['plug_installed'][$plug['plugin_path']]); } e107::getConfig('core')->setPref($pref); $plugin->rebuildUrlConfig(); e107::getConfig('core')->save(); } $logInfo = deftrue($plug['plugin_name'],$plug['plugin_name']). " v".$plug['plugin_version']." ({e_PLUGIN}".$plug['plugin_path'].")"; $admin_log->log_event('PLUGMAN_03', $logInfo, E_LOG_INFORMATIVE, ''); } if($_POST['delete_files']) { include_once(e_HANDLER.'file_class.php'); $fi = new e_file; $result = $fi->rmtree(e_PLUGIN.$eplug_folder); $text .= ($result ? '
'.EPL_ADLAN_86.e_PLUGIN.$eplug_folder : '
'.EPL_ADLAN_87.'
'.EPL_ADLAN_31.' '.e_PLUGIN.$eplug_folder.' '.EPL_ADLAN_32); } else { $text .= '
'.EPL_ADLAN_31.' '.e_PLUGIN.$eplug_folder.' '.EPL_ADLAN_32; } $plugin->save_addon_prefs('update'); $this->show_message($text, E_MESSAGE_SUCCESS); // $ns->tablerender(EPL_ADLAN_1.' '.$tp->toHtml($plug['plugin_name'], "", "defs,emotes_off,no_make_clickable"), $text); $text = ''; $this->action = 'installed'; return; } function pluginProcessUpload() { if (!$_POST['ac'] == md5(ADMINPWCHANGE)) { exit; } extract($_FILES); /* check if e_PLUGIN dir is writable ... */ if(!is_writable(e_PLUGIN)) { /* still not writable - spawn error message */ e107::getRender()->tablerender(EPL_ADLAN_40, EPL_ADLAN_39); } else { /* e_PLUGIN is writable - continue */ require_once(e_HANDLER."upload_handler.php"); $fileName = $file_userfile['name'][0]; $fileSize = $file_userfile['size'][0]; $fileType = $file_userfile['type'][0]; if(strstr($file_userfile['type'][0], "gzip")) { $fileType = "tar"; } else if (strstr($file_userfile['type'][0], "zip")) { $fileType = "zip"; } else { /* not zip or tar - spawn error message */ e107::getRender()->tablerender(EPL_ADLAN_40, EPL_ADLAN_41); require_once("footer.php"); exit; } if ($fileSize) { $uploaded = file_upload(e_PLUGIN); $archiveName = $uploaded[0]['name']; /* attempt to unarchive ... */ if($fileType == "zip") { require_once(e_HANDLER."pclzip.lib.php"); $archive = new PclZip(e_PLUGIN.$archiveName); $unarc = ($fileList = $archive -> extract(PCLZIP_OPT_PATH, e_PLUGIN, PCLZIP_OPT_SET_CHMOD, 0666)); } else { require_once(e_HANDLER."pcltar.lib.php"); $unarc = ($fileList = PclTarExtract($archiveName, e_PLUGIN)); } if(!$unarc) { /* unarc failed ... */ if($fileType == "zip") { $error = EPL_ADLAN_46." '".$archive -> errorName(TRUE)."'"; } else { $error = EPL_ADLAN_47.PclErrorString().", ".EPL_ADLAN_48.intval(PclErrorCode()); } e107::getRender()->tablerender(EPL_ADLAN_40, EPL_ADLAN_42." ".$archiveName." ".$error); require_once("footer.php"); exit; } /* ok it looks like the unarc succeeded - continue */ /* get folder name ... */ $folderName = substr($fileList[0]['stored_filename'], 0, (strpos($fileList[0]['stored_filename'], "/"))); if(file_exists(e_PLUGIN.$folderName."/plugin.php") || file_exists(e_PLUGIN.$folderName."/plugin.xml")) { /* upload is a plugin */ e107::getRender()->tablerender(EPL_ADLAN_40, EPL_ADLAN_43); } elseif(file_exists(e_PLUGIN.$folderName."/theme.php") || file_exists(e_PLUGIN.$folderName."/theme.xml")) { /* upload is a menu */ e107::getRender()->tablerender(EPL_ADLAN_40, EPL_ADLAN_45); } else { /* upload is unlocatable */ e107::getRender()->tablerender(EPL_ADLAN_40, 'Unknown file: '.$fileList[0]['stored_filename']); } /* attempt to delete uploaded archive */ @unlink(e_PLUGIN.$archiveName); } } } // ----------------------------------------------------------------------------- function pluginInstall() { global $plugin,$admin_log,$eplug_folder; $text = $plugin->install_plugin($this->id); $log = e107::getAdminLog(); if ($text === FALSE) { // Tidy this up $this->show_message("Error messages above this line", E_MESSAGE_ERROR); } else { $plugin->save_addon_prefs('update'); $info = $plugin->getinfo($this->id); $name = deftrue($info['plugin_name'],$info['plugin_name']). " v".$info['plugin_version']. "({e_PLUGIN}".$info['plugin_path'].")"; $log->log_event('PLUGMAN_01', $name, E_LOG_INFORMATIVE, ''); $this->show_message($text, E_MESSAGE_SUCCESS); } } // ----------------------------------------------------------------------------- function pluginUpgrade() { $pref = e107::getPref(); $admin_log = e107::getAdminLog(); $plugin = e107::getPlugin(); $sql = e107::getDb(); $mes = e107::getMessage(); $plug = $plugin->getinfo($this->id); $_path = e_PLUGIN.$plug['plugin_path'].'/'; if(file_exists($_path.'plugin.xml')) { $plugin->install_plugin_xml($this->id, 'upgrade'); } else { include(e_PLUGIN.$plug['plugin_path'].'/plugin.php'); $func = $eplug_folder.'_upgrade'; if (function_exists($func)) { $text .= call_user_func($func); } if (is_array($upgrade_alter_tables)) { $result = $plugin->manage_tables('upgrade', $upgrade_alter_tables); if (true !== $result) { //$text .= EPL_ADLAN_9.'
'; $mes->addWarning(EPL_ADLAN_9) ->addDebug($result); } else { $text .= EPL_ADLAN_7."
"; } } if (is_array($upgrade_add_prefs)) { $plugin->manage_prefs('add', $upgrade_add_prefs); $text .= EPL_ADLAN_8.'
'; } if (is_array($upgrade_remove_prefs)) { $plugin->manage_prefs('remove', $upgrade_remove_prefs); } if (is_array($upgrade_add_array_pref)) { foreach($upgrade_add_array_pref as $key => $val) { $plugin->manage_plugin_prefs('add', $key, $eplug_folder, $val); } } if (is_array($upgrade_remove_array_pref)) { foreach($upgrade_remove_array_pref as $key => $val) { $plugin->manage_plugin_prefs('remove', $key, $eplug_folder, $val); } } $plugin->manage_search('upgrade', $eplug_folder); $plugin->manage_notify('upgrade', $eplug_folder); $eplug_addons = $plugin -> getAddons($eplug_folder); $info = $plugin->getinfo($this->id); $name = deftrue($info['plugin_name'],$info['plugin_name']). " v".$eplug_version. "({e_PLUGIN}".$info['plugin_path'].")"; $admin_log->log_event('PLUGMAN_02', $name, E_LOG_INFORMATIVE, ''); $text .= (isset($eplug_upgrade_done)) ? '
'.$eplug_upgrade_done : "
".LAN_UPGRADE_SUCCESSFUL; $sql->update('plugin', "plugin_version ='{$eplug_version}', plugin_addons='{$eplug_addons}' WHERE plugin_id='$this->id' "); $pref['plug_installed'][$plug['plugin_path']] = $eplug_version; // Update the version e107::getConfig('core')->setPref($pref); $plugin->rebuildUrlConfig(); e107::getConfig('core')->save(); } $mes->addSuccess($text); $plugin->save_addon_prefs('update'); } // ----------------------------------------------------------------------------- function pluginRefresh() { global $plug; $plug = $plugin->getinfo($this->id); $_path = e_PLUGIN.$plug['plugin_path'].'/'; if(file_exists($_path.'plugin.xml')) { $text .= $plugin->install_plugin_xml($this->id, 'refresh'); $admin_log->log_event('PLUGMAN_04', $this->id.':'.$plug['plugin_path'], E_LOG_INFORMATIVE, ''); } } // ----------------------------------------------------------------------------- // Check for new plugins, create entry in plugin table ... function pluginCheck($force=false) { global $plugin; if(!PLUGIN_SCAN_INTERVAL) { $plugin->update_plugins_table('update'); return; } if((time() > vartrue($_SESSION['nextPluginFolderScan'],0)) || $force == true) { $plugin->update_plugins_table('update'); } $_SESSION['nextPluginFolderScan'] = time() + PLUGIN_SCAN_INTERVAL; //echo "TIME = ".$_SESSION['nextPluginFolderScan']; } // ---------------------------------------------------------- // render plugin information ... // ----------------------------------------------------------------------------- function pluginUpload() { global $plugin; $frm = e107::getForm(); //TODO 'install' checkbox in plugin upload form. (as it is for theme upload) /* plugin upload form */ if(!is_writable(e_PLUGIN)) { e107::getRender()->tablerender(EPL_ADLAN_40, EPL_ADLAN_44); } else { // Get largest allowable file upload require_once(e_HANDLER.'upload_handler.php'); $max_file_size = get_user_max_upload(); $text = "
".EPL_ADLAN_37."
"; $text .= $frm->admin_button('upload', EPL_ADLAN_38, 'submit', EPL_ADLAN_38); $text .= "
\n"; } e107::getRender()->tablerender(ADLAN_98.SEP.EPL_ADLAN_38, $text); } // ----------------------------------------------------------------------------- function pluginRenderList() // Uninstall and Install sorting should be fixed once and for all now ! { global $plugin; $frm = e107::getForm(); $e107 = e107::getInstance(); $mes = e107::getMessage(); if($this->action == "" || $this->action == "installed") { $installed = $plugin->getall(1); $caption = EPL_ADLAN_22; $pluginRenderPlugin = $this->pluginRenderPlugin($installed); $button_mode = "uninstall-selected"; $button_caption = EPL_ADLAN_85; $button_action = "delete"; } if($this->action == "avail") { $uninstalled = $plugin->getall(0); $caption = EPL_ADLAN_23; $pluginRenderPlugin = $this->pluginRenderPlugin($uninstalled); $button_mode = "install-selected"; $button_caption = EPL_ADLAN_84; $button_action = "update"; } $text = "
".vartrue($caption)." ".$frm->colGroup($this->fields,$this->fieldpref). $frm->thead($this->fields,$this->fieldpref)." "; if(vartrue($pluginRenderPlugin)) { $text .= $pluginRenderPlugin; } else { //TODO LANs $text .= ""; } $text .= "
No plugins installed - click here to install some.
"; if($this->action == "avail") { $text .= "
".$frm->admin_button($button_mode, $button_caption, $button_action)."
"; } $text .= "
"; e107::getRender()->tablerender(ADLAN_98.SEP.$caption, $mes->render(). $text); } // ----------------------------------------------------------------------------- function pluginRenderPlugin($pluginList) { global $plugin; if (empty($pluginList)) return ''; $tp = e107::getParser(); $frm = e107::getForm(); $pgf = new pluginmanager_form; $text = ""; foreach($pluginList as $plug) { e107::loadLanFiles($plug['plugin_path'],'admin'); if($this->action == "avail") { e107::lan($plug['plugin_path'],'global', true); // Load language files. } $_path = e_PLUGIN.$plug['plugin_path'].'/'; $plug_vars = false; $plugin_config_icon = ""; if($plugin->parse_plugin($plug['plugin_path'])) { $plug_vars = $plugin->plug_vars; } if(varset($plug['plugin_category']) == "menu") // Hide "Menu Only" plugins. { continue; } if($plug_vars) { $icon_src = (isset($plug_vars['plugin_php']) ? e_PLUGIN : $_path).$plug_vars['administration']['icon']; $plugin_icon = $plug_vars['administration']['icon'] ? $icon_src : $tp->toGlyph('e-cat_plugins-32'); $conf_file = "#"; $conf_title = ""; if ($plug_vars['administration']['configFile'] && $plug['plugin_installflag'] == true) { $conf_file = e_PLUGIN.$plug['plugin_path'].'/'.$plug_vars['administration']['configFile']; $conf_title = LAN_CONFIGURE.' '.$tp->toHtml($plug_vars['@attributes']['name'], "", "defs,emotes_off, no_make_clickable"); // $plugin_icon = "".$plugin_icon.""; $plugin_config_icon = "".ADMIN_CONFIGURE_ICON.""; } $plugEmail = varset($plug_vars['author']['@attributes']['email'],''); $plugAuthor = varset($plug_vars['author']['@attributes']['name'],''); $plugURL = varset($plug_vars['author']['@attributes']['url'],''); $plugDate = varset($plug_vars['@attributes']['date'],''); $compatibility = varset($plug_vars['@attributes']['compatibility'],''); $description = varset($plug_vars['description']['@attributes']['lang']) ? $tp->toHTML($plug_vars['description']['@attributes']['lang'], false, "defs,emotes_off, no_make_clickable") : $tp->toHTML($plug_vars['description']['@value'], false, "emotes_off, no_make_clickable") ; $plugReadme = ""; if(varset($plug['plugin_installflag'])) { $plugName = "".$tp->toHTML($plug['plugin_name'], false, "defs,emotes_off, no_make_clickable").""; } else { $plugName = $tp->toHTML($plug['plugin_name'], false, "defs,emotes_off, no_make_clickable"); } if(varset($plug_vars['readme'])) // 0.7 plugin.php { $plugReadme = $plug_vars['readme']; } if(varset($plug_vars['readMe'])) // 0.8 plugin.xml { $plugReadme = $plug_vars['readMe']; } if(!file_exists($plugin_icon)) { $plugin_icon = 'e-cat_plugins-32'; // e_IMAGE."admin_images/cat_plugins_32.png"; } $data = array( 'plugin_id' => $plug['plugin_id'], 'plugin_icon' => $plugin_icon, 'plugin_name' => $plugName, 'plugin_folder' => $plug['plugin_path'], 'plugin_date' => $plugDate, 'plugin_category' => vartrue($plug['plugin_category']), 'plugin_author' => vartrue($plugAuthor), // vartrue($plugEmail) ? "".$plugAuthor."" : vartrue($plugAuthor), 'plugin_version' => $plug['plugin_version'], 'plugin_description' => $description, 'plugin_compatible' => $this->compatibilityLabel($plug_vars['@attributes']['compatibility']), 'plugin_website' => vartrue($row['authorUrl']), // 'plugin_url' => vartrue($plugURL), // ; // ? "".ADMIN_URL_ICON."" : "", 'plugin_notes' => '' ); $pgf->plug_vars = $plug_vars; $pgf->plug = $plug; $text .= $pgf->renderTableRow($this->fields, $this->fieldpref, $data, 'plugin_id'); /* //LEGACY CODE $text .= ""; if(varset($this-> fields['checkboxes'])) { $rowid = "checkboxes[".$plug['plugin_id']."]"; $text .= "".$frm->checkbox($rowid, $plug['plugin_id'])."\n"; } // $text .= (in_array("plugin_status",$this->fieldpref)) ? "".$img."" : ""; $text .= (in_array("plugin_icon",$this->fieldpref)) ? "".$plugin_icon."" : ""; $text .= (in_array("plugin_name",$this->fieldpref)) ? "".$plugName."" : ""; $text .= (in_array("plugin_version",$this->fieldpref)) ? "".$plug['plugin_version']."" : ""; $text .= (in_array("plugin_date",$this->fieldpref)) ? "".$plugDate."" : ""; $text .= (in_array("plugin_folder",$this->fieldpref)) ? "".$plug['plugin_path']."" : ""; $text .= (in_array("plugin_category",$this->fieldpref)) ? "".$plug['plugin_category']."" : ""; $text .= (in_array("plugin_author",$this->fieldpref)) ? "".$plugAuthor." " : ""; $text .= (in_array("plugin_website",$this->fieldpref)) ? "".($plugURL ? "".ADMIN_URL_ICON."" : "")."" : ""; $text .= (in_array("plugin_compatible",$this->fieldpref)) ? "".$this->compatibilityLabel($plug_vars['@attributes']['compatibility'])."" : ""; $text .= (in_array("plugin_description",$this->fieldpref)) ? "".$description."" : ""; $text .= (in_array("plugin_compliant",$this->fieldpref)) ? "".((varset($plug_vars['compliant']) || varsettrue($plug_vars['@attributes']['xhtmlcompliant'])) ? ADMIN_TRUE_ICON : " ")."" : ""; $text .= (in_array("plugin_notes",$this->fieldpref)) ? "".($plugReadme ? "".ADMIN_INFO_ICON."" : " ")."" : ""; // Plugin options Column -------------- $text .= "
".$plugin_config_icon; if ($plug_vars['@attributes']['installRequired']) { if ($plug['plugin_installflag']) { $text .= ($plug['plugin_installflag'] ? "".ADMIN_UNINSTALLPLUGIN_ICON."" : "".ADMIN_INSTALLPLUGIN_ICON.""); // $text .= ($plug['plugin_installflag'] ? "" : ""); if (PLUGIN_SHOW_REFRESH && !varsettrue($plug_vars['plugin_php'])) { $text .= "

"; } } else { // $text .= ""; // $text .= ""; $text .= "".ADMIN_INSTALLPLUGIN_ICON.""; } } else { if ($plug_vars['menuName']) { $text .= EPL_NOINSTALL.str_replace("..", "", e_PLUGIN.$plug['plugin_path'])."/ ".EPL_DIRECTORY; } else { $text .= EPL_NOINSTALL_1.str_replace("..", "", e_PLUGIN.$plug['plugin_path'])."/ ".EPL_DIRECTORY; if($plug['plugin_installflag'] == false) { e107::getDb()->db_Delete('plugin', "plugin_installflag=0 AND (plugin_path='{$plug['plugin_path']}' OR plugin_path='{$plug['plugin_path']}/' ) "); } } } if ($plug['plugin_version'] != $plug_vars['@attributes']['version'] && $plug['plugin_installflag']) { // $text .= "
"; $text .= "".ADMIN_UPGRADEPLUGIN_ICON.""; } $text .="
"; // $text .= ""; */ } } return $text; } // ----------------------------------------------------------------------------- function pluginConfirmUninstall() { global $plugin; $frm = e107::getForm(); $tp = e107::getParser(); $mes = e107::getMessage(); $plug = $plugin->getinfo($this->id); if ($plug['plugin_installflag'] == true ) { if($plugin->parse_plugin($plug['plugin_path'])) { $plug_vars = $plugin->plug_vars; } else { return FALSE; } } else { return FALSE; } $userclasses = ''; $eufields = ''; if (isset($plug_vars['userClasses'])) { if (isset($plug_vars['userclass']['@attributes'])) { $plug_vars['userclass'][0]['@attributes'] = $plug_vars['userclass']['@attributes']; unset($plug_vars['userclass']['@attributes']); } $spacer = ''; foreach ($plug_vars['userClasses']['class'] as $uc) { $userclasses .= $spacer.$uc['@attributes']['name'].' - '.$uc['@attributes']['description']; $spacer = '
'; } } if (isset($plug_vars['extendedFields'])) { if (isset($plug_vars['extendedFields']['@attributes'])) { $plug_vars['extendedField'][0]['@attributes'] = $plug_vars['extendedField']['@attributes']; unset($plug_vars['extendedField']['@attributes']); } $spacer = ''; foreach ($plug_vars['extendedFields']['field'] as $eu) { $eufields .= $spacer.'plugin_'.$plug_vars['folder'].'_'.$eu['@attributes']['name']; $spacer = '
'; } } if(is_writable(e_PLUGIN.$plug['plugin_path'])) { $del_text = $frm->select('delete_files','yesno',0); } else { $del_text = " ".EPL_ADLAN_53." "; } $text = "
".EPL_ADLAN_54." ".$tp->toHtml($plug_vars['@attributes']['name'], "", "defs,emotes_off, no_make_clickable")." "; $opts = array(); $opts['delete_tables'] = array( 'label' => EPL_ADLAN_57, 'helpText' => EPL_ADLAN_58, 'itemList' => array(1=>LAN_YES,0=>LAN_NO), 'itemDefault' => 1 ); if ($userclasses) { $opts['delete_userclasses'] = array( 'label' => EPL_ADLAN_78, 'preview' => $userclasses, 'helpText' => EPL_ADLAN_79, 'itemList' => array(1=>LAN_YES,0=>LAN_NO), 'itemDefault' => 1 ); } if ($eufields) { $opts['delete_xfields'] = array( 'label' => EPL_ADLAN_80, 'preview' => $eufields, 'helpText' => EPL_ADLAN_79, 'itemList' => array(1=>LAN_YES,0=>LAN_NO), 'itemDefault' => 0 ); } $med = e107::getMedia(); $icons = $med->listIcons(e_PLUGIN.$plug['plugin_path']); if(count($icons)>0) { foreach($icons as $key=>$val) { $iconText .= ""; } $opts['delete_ipool'] = array( 'label' =>'Remove icons from Media-Manager', 'preview' => $iconText, 'helpText' => EPL_ADLAN_79, 'itemList' => array(1=>LAN_YES,0=>LAN_NO), 'itemDefault' => 1 ); } if(is_readable(e_PLUGIN.$plug['plugin_path']."/".$plug['plugin_path']."_setup.php")) { include_once(e_PLUGIN.$plug['plugin_path']."/".$plug['plugin_path']."_setup.php"); $mes->add("Loading ".e_PLUGIN.$plug['plugin_path']."/".$plug['plugin_path']."_setup.php", E_MESSAGE_DEBUG); $class_name = $plug['plugin_path']."_setup"; if(class_exists($class_name)) { $obj = new $class_name; if(method_exists($obj,'uninstall_options')) { $arr = call_user_func(array($obj,'uninstall_options'), $this); foreach($arr as $key=>$val) { $newkey = $plug['plugin_path']."_".$key; $opts[$newkey] = $val; } } } } foreach($opts as $key=>$val) { $text .= "\n\n\n\n"; } $text .="
".EPL_ADLAN_55." ".LAN_YES."
".$tp->toHTML($val['label'],FALSE,'TITLE'); $text .= varset($val['preview']) ? "
".$val['preview']."
" : ""; $text .= "
".$frm->select($key,$val['itemList'],$val['itemDefault']); $text .= varset($val['helpText']) ? "
".$val['helpText']."
" : ""; $text .= "
".EPL_ADLAN_59." {$del_text}
".EPL_ADLAN_60."
"; $text .= $frm->admin_button('uninstall_confirm',EPL_ADLAN_3,'submit'); $text .= $frm->admin_button('uninstall_cancel',EPL_ADLAN_62,'cancel'); /* $text .= "   "; */ // $frm->admin_button($name, $value, $action = 'submit', $label = '', $options = array()); $text .= "
"; e107::getRender()->tablerender(EPL_ADLAN_63.SEP.$tp->toHtml($plug_vars['@attributes']['name'], "", "defs,emotes_off, no_make_clickable"),$mes->render(). $text); } function show_message($message, $type = E_MESSAGE_INFO, $session = false) { // ##### Display comfort --------- $mes = e107::getMessage(); $mes->add($message, $type, $session); } function pluginMenuOptions() { // $e107 = &e107::getInstance(); $var['installed']['text'] = EPL_ADLAN_22; $var['installed']['link'] = e_SELF; $var['avail']['text'] = EPL_ADLAN_23; $var['avail']['link'] = e_SELF."?avail"; // $var['upload']['text'] = EPL_ADLAN_38; // $var['upload']['link'] = e_SELF."?upload"; $var['online']['text'] = "Find Plugins"; $var['online']['link'] = e_SELF."?mode=online"; $var['create']['text'] = "Plugin Builder"; $var['create']['link'] = e_SELF."?mode=create"; $keys = array_keys($var); $action = (in_array($this->action,$keys)) ? $this->action : "installed"; e107::getNav()->admin(ADLAN_98, $action, $var); } } // end of Class. function plugin_adminmenu() { global $pman; $pman -> pluginMenuOptions(); } /** * Plugin Admin Generator by CaMer0n. //TODO - Added dummy template and shortcode creation, plus e_search, e_cron, e_xxxxx etc. */ class pluginBuilder { var $fields = array(); var $table = ''; var $pluginName = ''; var $special = array(); var $tableCount = 0; var $tableList = array(); var $createFiles = false; function __construct() { $this->special['checkboxes'] = array('title'=> '','type' => null, 'data' => null, 'width'=>'5%', 'thclass' =>'center', 'forced'=> TRUE, 'class'=>'center', 'toggle' => 'e-multiselect', 'fieldpref'=>true); $this->special['options'] = array( 'title'=> LAN_OPTIONS, 'type' => null, 'data' => null, 'width' => '10%', 'thclass' => 'center last', 'class' => 'center last', 'forced'=>TRUE, 'fieldpref'=>true); if(vartrue($_GET['newplugin'])) { $this->pluginName = $_GET['newplugin']; } if(vartrue($_GET['createFiles'])) { $this->createFiles = true; } if(vartrue($_POST['step']) == 3) { $this->step3(); return; } if(vartrue($_GET['newplugin']) && $_GET['step']==2) { return $this->step2(); } return $this->step1(); } function step1() { $fl = e107::getFile(); $frm = e107::getForm(); $ns = e107::getRender(); $mes = e107::getMessage(); $plugFolders = $fl->get_dirs(e_PLUGIN); foreach($plugFolders as $dir) { if(file_exists(e_PLUGIN.$dir."/admin_config.php")) { continue; } $newDir[$dir] = $dir; } $mes->addInfo("This Wizard will build an admin area for your plugin and generate a plugin.xml meta file. Before you start: "); $text = $frm->open('createPlugin','get'); $text .= ""; $text .= " "; /* NOT a good idea - requires the use of $_POST which would prevent browser 'go Back' navigation. if(e_DOMAIN == FALSE) // localhost. { $text .= ""; } */ $text .= "
Select your plugin's folder ".$frm->select("newplugin",$newDir)."
Create Files ".$frm->checkbox('createFiles',1,1)."
Pasted MySql Dump Here ".$frm->textarea('mysql','', 10,80)." eg.
".$frm->admin_button('step', 2,'other','Go')."
"; $text .= $frm->close(); $ns->tablerender(ADLAN_98.SEP."Plugin Builder", $mes->render() . $text); } function enterMysql() { $frm = e107::getForm(); return "
".$frm->textarea('mysql','', 10,80)."
"; } function step2() { require_once(e_HANDLER."db_verify_class.php"); $dv = new db_verify; $frm = e107::getForm(); $ns = e107::getRender(); $mes = e107::getMessage(); $newplug = $_GET['newplugin']; $this->pluginName = $newplug; // $data = e107::getXml()->loadXMLfile(e_PLUGIN.'links_page/plugin.xml', 'advanced'); // print_a($data); // echo "
".var_export($data,true)."
"; $sqlFile = e_PLUGIN.$newplug."/".$newplug."_sql.php"; $ret = array(); if(file_exists($sqlFile)) { $data = file_get_contents($sqlFile); $ret = $dv->getTables($data); } $text = $frm->open('newplugin-step3','post', e_SELF.'?mode=create&newplugin='.$newplug.'&createFiles='.$this->createFiles.'&step=3'); $text .= ""; $text .= "
\n"; $text .= "
\n"; $text .= $this->pluginXml(); $text .= "
"; foreach($ret['tables'] as $key=>$table) { $text .= "
\n"; $fields = $dv->getFields($ret['data'][$key]); $text .= $this->form($table,$fields); $text .= "
"; } $text .= "
\n"; $text .= $this->prefs(); $text .= "
"; $text .= "
"; $text .= "
".$frm->hidden('newplugin', $this->pluginName)." ".$frm->admin_button('step', 3,'other','Generate')."
"; $text .= $frm->close(); $mes->addInfo("Review all fields and modify if necessary."); $mes->addInfo("Review ALL tabs before clicking 'Generate'."); $ns->tablerender(ADLAN_98.SEP."Plugin Builder".SEP."Step 2", $mes->render() . $text); } function prefs() { $frm = e107::getForm(); $text = ''; $options = array( 'text' => "Text Box", 'bbarea' => "Rich-Text Area", 'boolean' => "Text Area", "method" => "Custom Function", "image" => "Image", ); for ($i=0; $i < 10; $i++) { $text .= "
". $frm->text("pluginPrefs[".$i."][index]", '',40,'placeholder=Preference Name')." ". $frm->text("pluginPrefs[".$i."][value]", '',40,'placeholder=Default Value')." ". $frm->select("pluginPrefs[".$i."][type]", $options, '', 'class=null', 'Field Type...'). "
"; } return $text; } function pluginXml() { //TODO Plugin.xml Form Fields. . $data = array( 'main' => array('name','lang','version','date', 'compatibility'), 'author' => array('name','url'), 'summary' => array('summary'), 'description' => array('description'), 'keywords' => array('one','two'), 'category' => array('category'), 'copyright' => array('copyright'), // 'adminLinks' => array('url','description','icon','iconSmall','primary'), // 'sitelinks' => array('url','description','icon','iconSmall') ); // Load old plugin.php file if it exists; $legacyFile = e_PLUGIN.$this->pluginName."/plugin.php"; if(file_exists($legacyFile)) { require_once($legacyFile); $mes = e107::getMessage(); $mes->addInfo("Loading plugin.php file"); $defaults = array( "main-name" => $eplug_name, "author-name" => $eplug_author, "author-url" => $eplug_url, "description-description" => $eplug_description, "summary-summary" => $eplug_description ); if(count($eplug_tables) && !file_exists(e_PLUGIN.$this->pluginName."/".$this->pluginName."_sql.php")) { $cont = ''; foreach($eplug_tables as $tab) { if(strpos($tab,"INSERT INTO")!==FALSE) { continue; } $cont .= "\n".str_replace("\t"," ",$tab); } if(file_put_contents(e_PLUGIN.$this->pluginName."/".$this->pluginName."_sql.php",$cont)) { $mes->addInfo($this->pluginName."_sql.php as been generated",'default',true); $red = e107::getRedirect(); $red->redirect(e_REQUEST_URL,true); // $red->redirect(e_SELF."?mode=create&newplugin=".$this->pluginName."&createFiles=1&step=2",true); } else { $msg = $this->pluginName."_sql.php is missing!
"; $msg .= "Please create ".$this->pluginName."_sql.php in your plugin directory with the following content:
".$cont."
"; $mes->addWarning($msg); } } } $text = ""; foreach($data as $key=>$val) { $text.= ""; } $text .= "
$key
"; foreach($val as $type) { $nm = $key.'-'.$type; $name = "xml[$nm]"; $size = (count($val)==1) ? 'span7' : 'span2'; $text .= "
".$this->xmlInput($name, $key."-". $type, vartrue($defaults[$nm]))."
"; } $text .= "
"; return $text; } function xmlInput($name, $info, $default='') { $frm = e107::getForm(); list($cat,$type) = explode("-",$info); $size = 30; $help = ''; $pattern = ""; $required = false; switch ($info) { case 'main-name': $help = "The name of your plugin. (Must be written in English)"; $required = true; $pattern = "[A-Za-z0-9 ]*"; break; case 'main-lang': $help = "If you have a language file, enter the LAN_XXX value for the plugin's name"; $required = false; $placeholder= " "; $pattern = "[A-Z0-9_]*"; break; case 'main-date': $help = "Creation date of your plugin"; $required = true; break; case 'main-version': $default = '1.0'; $required = true; $help = "The version of your plugin. Format: x.x"; $pattern = "^[\d]{1,2}\.[\d]{1,2}$"; break; case 'main-compatibility': $default = '2.0'; $required = true; $help = "Compatible with this version of e107"; $pattern = "^[\d]{1,2}\.[\d]{1,2}$"; break; case 'author-name': $default = (vartrue($default)) ? $default : USERNAME; $required = true; $help = "Author Name"; $pattern = "[A-Za-z \.0-9]*"; break; case 'author-url': $required = true; $help = "Author Website Url"; // $pattern = "https?://.+"; break; //case 'main-installRequired': // return "Installation required: ".$frm->radio_switch($name,'',LAN_YES, LAN_NO); //break; case 'summary-summary': $help = "A short one-line description of the plugin
(Must be written in English)"; $required = true; $size = 100; $placeholder= " "; $pattern = "[A-Za-z \.0-9]*"; break; case 'keywords-one': case 'keywords-two': $help = "Keyword/Tag for this plugin
(Must be written in English)"; $required = true; $size = 20; $placeholder= " "; $pattern = '^[a-z]*$'; break; case 'description-description': $help = "A full description of the plugin
(Must be written in English)"; $required = true; $size = 100; $placeholder = " "; $pattern = "[A-Za-z \.0-9]*"; break; case 'category-category': $help = "What category of plugin is this?"; $required = true; $size = 20; break; default: break; } $req = ($required == true) ? "&required=1" : ""; $placeholder = (varset($placeholder)) ? $placeholder : $type; $pat = ($pattern) ? "&pattern=".$pattern : ""; switch ($type) { case 'date': $text = $frm->datepicker($name, time(), 'format=yyyy-mm-dd'.$req); break; case 'description': $text = $frm->textarea($name,$default, 3, 100, $req); // pattern not supported. break; case 'category': $options = array( 'settings' => 'settings', 'users' => 'users', 'content' => 'content', 'tools' => 'tools', 'manage' => 'manage', 'misc' => 'misc', 'menu' => 'menu', 'about' => 'about' ); $text = $frm->select($name, $options,'','required=1&class=null', true); break; default: $text = $frm->text($name, $default, $size, 'placeholder='.$placeholder . $req. $pat); break; } $text .= ($help) ? "".$help."" : ""; return $text; } function createXml($data) { // print_a($_POST); $ns = e107::getRender(); $mes = e107::getMessage(); $tp = e107::getParser(); foreach($data as $key=>$val) { $key = strtoupper(str_replace("-","_",$key)); $newArray[$key] = $val; } $newArray['DESCRIPTION_DESCRIPTION'] = strip_tags($tp->toHtml($newArray['DESCRIPTION_DESCRIPTION'],true)); foreach($_POST['pluginPrefs'] as $val) { if(vartrue($val['index'])) { $id = $val['index']; $plugPref[$id] = $val['value']; } } // print_a($_POST['pluginPrefs']); if(count($plugPref)) { $xmlPref = "\n"; foreach($plugPref as $k=>$v) { $xmlPref .= " ".$v."\n"; } $xmlPref .= " "; $newArray['PLUGINPREFS'] = $xmlPref; } // print_a($newArray); // print_a($this); $template = <<