array( 'controller' => 'eurl_admin_ui', 'path' => null, 'ui' => 'eurl_admin_form_ui', 'uipath' => null ) ); protected $adminMenu = array( 'main/config' => array('caption'=> LAN_EURL_MENU_PROFILES, 'perm' => 'L', 'icon'=>'fas-list'), 'main/alias' => array('caption'=> LAN_EURL_MENU_ALIASES, 'perm' => 'L', 'icon'=>'fas-edit'), 'main/simple' => array('caption'=> LAN_EURL_MENU_CONFIG, 'perm' => 'L', 'icon'=>'fas-sliders-h'), 'main/settings' => array('caption'=> LAN_EURL_MENU_SETTINGS, 'perm' => 'L'), // 'main/help' => array('caption'=> LAN_EURL_MENU_HELP, 'perm' => 'L'), ); protected $adminMenuAliases = array(); protected $defaultAction = 'config'; protected $menuTitle = LAN_EURL_MENU; protected $adminMenuIcon = 'e-eurl-24'; } class eurl_admin_ui extends e_admin_controller_ui { public $api; protected $prefs = array( 'url_disable_pathinfo' => array('title'=>LAN_EURL_SETTINGS_PATHINFO, 'type'=>'boolean', 'help'=>LAN_EURL_MODREWR_DESCR), 'url_main_module' => array('title'=>LAN_EURL_SETTINGS_MAINMODULE, 'type'=>'dropdown', 'data' => 'string', 'help'=>LAN_EURL_SETTINGS_MAINMODULE_HELP), 'url_error_redirect' => array('title'=>LAN_EURL_SETTINGS_REDIRECT, 'type'=>'boolean', 'help'=>LAN_EURL_SETTINGS_REDIRECT_HELP), 'url_sef_translate' => array('title'=>LAN_EURL_SETTINGS_SEFTRANSLATE, 'type'=>'dropdown', 'data' => 'string', 'help'=>LAN_EURL_SETTINGS_SEFTRANSLATE_HELP), ); public function init() { if(e_AJAX_REQUEST) { $tp = e107::getParser(); if(!empty($_POST['pk']) && !empty($_POST['value'])) { $cfg = e107::getConfig(); list($plug,$key) = explode("|", $_POST['pk']); if(is_string($cfg->get('e_url_alias'))) { $cfg->setPostedData('e_url_alias', array(e_LAN => array($plug => array($key => $tp->filter($_POST['value']))) ), false); } else { $cfg->setPref('e_url_alias/'.e_LAN.'/'.$plug."/".$key, $tp->filter($_POST['value'])); } $cfg->save(true, true, true); } // file_put_contents(e_LOG."e_url.log", print_r($cfg->get('e_url_alias'),true)); exit; } $htaccess = file_exists(e_BASE.".htaccess"); if(function_exists('apache_get_modules')) { $modules = apache_get_modules(); $modRewrite = in_array('mod_rewrite', $modules ); } else { $modRewrite = true; //we don't really know. } if($modRewrite === false) { e107::getMessage()->addInfo("Apache mod_rewrite was not found on this server and is required to use this feature. "); e107::getMessage()->addDebug(print_a($modules,true)); } if($htaccess && $modRewrite && !deftrue('e_MOD_REWRITE')) { e107::getMessage()->addInfo("Mod-rewrite is disabled. To enable, please add the following line to your e107_config.php file:
define('e_MOD_REWRITE',true);
"); } if(isset($_POST['rebuild']) && is_array($_POST['rebuild'])) { $table = key($_POST['rebuild']); list($primary, $input, $output) = explode("::",$_POST['rebuild'][$table]); $this->rebuild($table, $primary, $input, $output); } $this->api = e107::getInstance(); $this->addTitle(LAN_EURL_NAME); if($this->getAction() != 'settings') return; } /** * Rebuild SEF Urls for a particular table * @param $table * @param primary field id. * @param input field (title) * @param output field (sef) */ private function rebuild($table, $primary='', $input='',$output='') { if(empty($table) || empty($input) || empty($output) || empty($primary)) { e107::getMessage()->addError("Missing Generator data"); return; } $sql = e107::getDb(); $data = $sql->retrieve($table, $primary.",".$input, $input ." != '' ", true); $success = 0; $failed = 0; foreach($data as $row) { $sef = eHelper::title2sef($row[$input]); if($sql->update($table, $output ." = '".$sef."' WHERE ".$primary. " = ".intval($row[$primary]). " LIMIT 1")!==false) { $success++; } else { $failed++; } // echo $row[$input]." => ".$output ." = '".$sef."' WHERE ".$primary. " = ".intval($row[$primary]). " LIMIT 1
"; } if($success) { e107::getMessage()->addSuccess(LAN_EURL_TABLE.": ".$table."
".$success. LAN_EURL_SURL_UPD); } if($failed) { e107::getMessage()->addError(LAN_EURL_TABLE.": ".$table."
".$failed. LAN_EURL_SURL_NUPD); } } public function HelpObserver() { } public function HelpPage() { $this->addTitle(LAN_EURL_NAME_HELP); return LAN_EURL_UC; } //TODO Checkbox for each plugin to enable/disable protected function simplePage() { // $this->addTitle("Simple Redirects"); $eUrl =e107::getUrlConfig(); $frm = e107::getForm(); $tp = e107::getParser(); $cfg = e107::getConfig(); if(!empty($_POST['saveSimpleSef'])) { /*if(is_string($this->getConfig()->get('e_url_alias'))) { $cfg->setPostedData('e_url_alias', array(e_LAN => $_POST['e_url_alias']), false); } else { $cfg->setPref('e_url_alias/'.e_LAN, $_POST['e_url_alias']); }*/ foreach($_POST['urlstatus'] as $k=>$v) { $val = (!empty($v)) ? $tp->filter($k,'w') : 0; $cfg->setPref('e_url_list/'.$k, $val); } $cfg->save(true, true, true); } $pref = e107::getPref('e_url_alias'); $sefActive = e107::getPref('e_url_list'); if(empty($eUrl)) { e107::getMessage()->addDebug("Unable to load e_url configurations."); return false; } $text = "
"; $text .= $frm->open('simpleSef'); $multilan = "".$tp->toGlyph('fa-language').""; $home = "".SITEURL.''; // e107::getDebug()->log($sefActive); $plg = e107::getPlug(); foreach($eUrl as $plug=>$val) { $plg->load($plug); $active = !empty($sefActive[$plug]) ? true : false; $text .= ""; $name = 'urlstatus['.$plug.']'; $switch = $frm->radio_switch($name, $active, LAN_ON, LAN_OFF, array( 'switch' => 'mini', )); $text .= ""; $text .= ""; foreach($val as $k=>$v) { if(!isset($v['alias'])) { $v['alias'] = ''; } if(!isset($v['regex'])) { $v['regex'] = ''; } if(!isset($v['redirect'])) { $v['redirect'] = ''; } $alias = vartrue($pref[e_LAN][$plug][$k], $v['alias']); // $sefurl = (!empty($alias)) ? str_replace('{alias}', $alias, $v['sef']) : $v['sef']; $pid = $plug."|".$k; $v['regex'] = preg_replace("/^\^/",$home,$v['regex']); $aliasForm = $frm->renderInline('e_url_alias['.$plug.']['.$k.']', $pid, 'e_url_alias['.$plug.']['.$k.']', $alias, $alias,'text',null,array('title'=>LAN_EDIT." (Language-specific)", 'url'=>e_REQUEST_SELF)); $aliasRender = str_replace('{alias}', $aliasForm, $v['regex']); $text .= ""; } $text .= "

" . $plg->getName() . "

" . $switch . "
".LAN_EURL_KEY."".LAN_EURL_REGULAR_EXPRESSION." ".LAN_URL."
".$k." ".$aliasRender." ". $v['redirect']."
"; } $text .= "
".$frm->button('saveSimpleSef',LAN_SAVE, 'submit')."
"; $text .= $frm->token(); $text .= $frm->close(); $text .= "
"; return $text; } public function SettingsObserver() { // main module pref dropdown $this->prefs['url_main_module']['writeParms'][''] = 'None'; // e_url.php aliases $tmp = e107::getUrlConfig('alias'); foreach($tmp as $plugin=>$alias) { $this->prefs['url_main_module']['writeParms'][$alias] = eHelper::labelize($plugin); } // legacy URL (news, pages ) $modules = e107::getPref('url_config', array()); foreach ($modules as $module => $location) { $labels = array(); $obj = eDispatcher::getConfigObject($module, $location); if(!$obj) continue; $config = $obj->config(); if(!$config || !vartrue($config['config']['allowMain'])) continue; $admin = $obj->admin(); $labels = vartrue($admin['labels'], array()); $this->prefs['url_main_module']['writeParms'][$module] = eHelper::labelize($module); // vartrue($section['name'], eHelper::labelize($module)); } ksort($this->prefs['url_main_module']['writeParms']); // title2sef transform type pref $types = explode('|', 'none|dashl|dashc|dash|underscorel|underscorec|underscore|plusl|plusc|plus'); $this->prefs['url_sef_translate']['writeParms'] = array(); foreach ($types as $type) { $this->prefs['url_sef_translate']['writeParms'][$type] = deftrue('LAN_EURL_SETTINGS_SEFTRTYPE_'.strtoupper($type), ucfirst($type)); } if(isset($_POST['etrigger_save'])) { $this->getConfig() ->setPostedData($this->getPosted(), null, false) //->setPosted('not_existing_pref_test', 1) ->save(true); $this->getConfig()->setMessages(); } } protected function SettingsPage() { //$this->addTitle(LAN_EURL_NAME_SETTINGS); return $this->getUI()->urlSettings(); } public function AliasObserver() { if(isset($_POST['update'])) { $posted = is_array($_POST['eurl_aliases']) ? e107::getParser()->post_toForm($_POST['eurl_aliases']) : ''; $locations = array_keys(e107::getPref('url_locations', array())); $aliases = array(); $message = e107::getMessage(); foreach ($posted as $lan => $als) { foreach ($als as $module => $alias) { $alias = trim($alias); $module = trim($module); if($module !== $alias) { $cindex = array_search($module, $locations); $sarray = $locations; unset($sarray[$cindex]); if(!in_array(strtolower($alias), $sarray)) $aliases[$lan][$alias] = $module; else $message->addError(sprintf(LAN_EURL_ERR_ALIAS_MODULE, $alias, $module)); } } } e107::getConfig()->set('url_aliases', e107::getParser()->post_toForm($aliases))->save(false); } } protected function AliasPage() { // $this->addTitle(LAN_EURL_NAME_ALIASES); $aliases = e107::getPref('url_aliases', array()); $form = $this->getUI(); $text = "
".LAN_EURL_LEGEND_ALIASES." "; $text .= $this->renderAliases($aliases); $text .= "
".$form->admin_button('update', LAN_UPDATE, 'update'). $form->token()."
"; return $text; } public function ConfigObserver() { if(!empty($_POST['generate'])) { $gen = e107::getUrlConfig('generate'); $id = key($_POST['generate']); if(empty($gen[$id])) { e107::getMessage()->addDebug("Empty"); return null; } foreach($gen[$id] as $conf) { $this->rebuild($conf['table'], $conf['primary'], $conf['input'], $conf['output']); } } if(isset($_POST['update'])) { $config = is_array($_POST['eurl_config']) ? e107::getParser()->post_toForm($_POST['eurl_config']) : ''; $modules = eRouter::adminReadModules(); $locations = eRouter::adminBuildLocations($modules); $aliases = eRouter::adminSyncAliases(e107::getPref('url_aliases'), $config); if(!empty($_POST['eurl_profile'])) { e107::getConfig()->set('url_profiles', $_POST['eurl_profile']); // unset($locations['download']); // unset($config['download']); } e107::getConfig() ->set('url_aliases', $aliases) ->set('url_config', $config) ->set('url_modules', $modules) ->set('url_locations', $locations) ->save(); if(!empty($_POST['eurl_config']['gallery'])) // disabled, so disable e_url on index also. { $val = ($_POST['eurl_config']['gallery'] === 'plugin') ? 0 : 'gallery'; e107::getConfig()->setPref('e_url_list/gallery', $val)->save(false,true,false); } if(!empty($_POST['eurl_config']['news'])) // disabled, so disable e_url on index also. { $val = ($_POST['eurl_config']['news'] === 'core') ? 0 : 'news'; e107::getConfig()->setPref('e_url_list/news', $val)->save(false,true,false); } // var_dump($_POST['eurl_config']); eRouter::clearCache(); e107::getCache()->clearAll('content'); // clear content - it may be using old url scheme. } } protected function ConfigPage() { // $this->addTitle(LAN_EURL_NAME_CONFIG); $active = e107::getPref('url_config'); $set = array(); // all available URL modules $set['url_modules'] = eRouter::adminReadModules(); // set by user URL config locations $set['url_config'] = eRouter::adminBuildConfig($active, $set['url_modules']); // all available URL config locations $set['url_locations'] = eRouter::adminBuildLocations($set['url_modules']); $form = $this->getUI(); $text = "
".LAN_EURL_LEGEND_CONFIG." "; $text .= $this->renderProfiles(); $text .= $this->renderConfig($set['url_config'], $set['url_locations']); $text .= "
".LAN_TYPE." ".LAN_URL." ".LAN_OPTIONS."
".$form->admin_button('update', LAN_UPDATE, 'update'). $form->token()."
"; return $text; } /** * New in v2.1.6 */ private function renderProfiles() { $PLUGINS_DIRECTORY = e107::getFolder("PLUGINS"); $srch = array("{SITEURL}","{e_PLUGIN_ABS}"); $repl = array(SITEURL,SITEURL.$PLUGINS_DIRECTORY); $profiles = e107::getUrlConfig('profiles'); $generate = e107::getUrlConfig('generate'); $form = $this->getUI(); $text = ''; $active = e107::getPref('url_profiles'); foreach($profiles as $plug=>$prof) { $arr = array(); foreach($prof as $id=>$val) { $arr[$id] = $val['label'].": ". str_replace($srch,$repl,$val['examples'][0]); } $sel = $active[$plug]; $selector = $form->select('eurl_profile['.$plug.']',$arr,$sel, array('size'=>'block-level')); $label = e107::getPlugLan($plug,'name'); $text .= "".$label."".$selector.""; $text .= (!empty($generate[$plug])) ? $form->admin_button('generate['.$plug.']', $plug,'delete', LAN_EURL_REBUILD) : ""; $text .= ""; } return $text; } public function renderConfig($current, $locations) { $ret = array(); $url = e107::getUrl(); ksort($locations); unset($locations['forum'],$locations['faqs'], $locations['pm']); // using new system so hide from here. foreach ($locations as $module => $l) { $data = new e_vars(array( 'current' => $current, )); $obj = eDispatcher::getConfigObject($module, $l[0]); if(null === $obj) $obj = new eurlAdminEmptyConfig; $data->module = $module; $data->locations = $l; $data->defaultLocation = $l[0]; $data->config = $obj; $ret[] = $data; } return $this->getUI()->moduleRows($ret); } public function renderAliases($aliases) { $ret = array(); $lans = array(); $lng = e107::getLanguage(); $lanList = $lng->installed(); sort($lanList); $lanDef = e107::getPref('sitelanguage') ? e107::getPref('sitelanguage') : e_LANGUAGE; $lanDef = array($lng->convert($lanDef), $lanDef); foreach ($lanList as $index => $lan) { $lanCode = $lng->convert($lan); if($lanDef[0] == $lanCode) continue; $lans[$lanCode] = $lan; } $modules = e107::getPref('url_config'); if(!$modules) { $modules = array(); e107::getConfig()->set('url_aliases', array())->save(false); // do not output message e107::getMessage()->reset(false, 'default'); } foreach ($modules as $module => $location) { $data = new e_vars(); $obj = eDispatcher::getConfigObject($module, $location); if(null === $obj) $obj = new eurlAdminEmptyConfig; $data->module = $module; $data->location = $location; $data->config = $obj; $modules[$module] = $data; } return $this->getUI()->aliasesRows($aliases, $modules, $lanDef, $lans); } /** * Set extended (UI) Form instance * @return eurl_admin_ui */ public function _setUI() { $this->_ui = $this->getParam('ui'); $this->setParam('ui', null); return $this; } /** * Set Config object * @return eurl_admin_ui */ protected function _setConfig() { $this->_pref = e107::getConfig(); $dataFields = $validateRules = array(); foreach ($this->prefs as $key => $att) { // create dataFields array $dataFields[$key] = vartrue($att['data'], 'string'); // create validation array if(vartrue($att['validate'])) { $validateRules[$key] = array((true === $att['validate'] ? 'required' : $att['validate']), varset($att['rule']), $att['title'], varset($att['error'], $att['help'])); } /* Not implemented in e_model yet elseif(vartrue($att['check'])) { $validateRules[$key] = array($att['check'], varset($att['rule']), $att['title'], varset($att['error'], $att['help'])); }*/ } $this->_pref->setDataFields($dataFields)->setValidationRules($validateRules); return $this; } } class eurl_admin_form_ui extends e_admin_form_ui { public function urlSettings() { return $this->getSettings(); } public function moreInfo($title,$info) { $tp = e107::getParser(); $id = 'eurl_'.$this->name2id($title); $text = ""; $text .= $title; $text .= ''; $text .= ' '; return $text; } public function moduleRows($data) { $text = ''; $tp = e107::getParser(); $frm = e107::getForm(); if(empty($data)) { return " ".LAN_EURL_EMPTY." "; } $PLUGINS_DIRECTORY = e107::getFolder("PLUGINS"); $srch = array("{SITEURL}","{e_PLUGIN_ABS}"); $repl = array(SITEURL,SITEURL.$PLUGINS_DIRECTORY); foreach ($data as $obj) { $admin = $obj->config->admin(); $section = vartrue($admin['labels'], array()); $rowspan = count($obj->locations)+1; $module = $obj->module; $generate = vartrue($admin['generate'], array()); /* $info .= " ".vartrue($section['name'], eHelper::labelize($obj->module))." "; */ $opt = ""; $info = ""; foreach ($obj->locations as $index => $location) { $objSub = $obj->defaultLocation != $location ? eDispatcher::getConfigObject($obj->module, $location) : false; if($objSub) { $admin = $objSub->admin(); $section = vartrue($admin['labels'], array()); } elseif($obj->defaultLocation != $location) $section = array(); $id = 'eurl-'.str_replace('_', '-', $obj->module).'-'.$index; $checked = (isset($obj->current[$module]) && $obj->current[$module] == $location) ? ' checked="checked"' : ''; $path = eDispatcher::getConfigPath($module, $location, false); if(!is_readable($path)) { $path = str_replace('/url.php', '/', $tp->replaceConstants(eDispatcher::getConfigPath($module, $location, true), true)).' ('.LAN_EURL_LOCATION_NONE.')'; $diz = LAN_EURL_DEFAULT; } else { $path = $tp->replaceConstants(eDispatcher::getConfigPath($module, $location, true), true); $diz = (basename($path) != 'url.php' ) ? LAN_EURL_FRIENDLY : LAN_EURL_DEFAULT; } $label = vartrue($section['label'], $index == 0 ? LAN_EURL_DEFAULT : eHelper::labelize(ltrim(strstr($location, '/'), '/'))); // $cssClass = $checked ? 'e-showme' : 'e-hideme'; $cssClass = 'e-hideme'; // always hidden for now, some interface changes could come after pre-alpha $exampleUrl = array(); if(!empty($section['examples'])) { foreach($section['examples'] as $ex) { $exampleUrl[] = str_replace($srch,$repl,$ex); } } /* if(strpos($path,'noid')!==false) { $exampleUrl .= "   ‡"; //XXX Add footer - denotes more CPU required. ? } */ $selected = (isset($obj->current[$module]) && ($obj->current[$module] == $location)) ? "selected='selected'" : ''; $opt .= ""; $info .= " "; } $info .= "
".$label." ".LAN_EURL_LOCATION.": ".$path."

".vartrue($section['description'], LAN_EURL_PROFILE_INFO)."

".implode("
", $exampleUrl)."
"; $title = vartrue($section['name'], eHelper::labelize($obj->module)); $text .= " ".$this->moreInfo($title, $info)." "; $bTable = varset($admin['generate']['table']); $bInput = varset($admin['generate']['input']); $bOutput = varset($admin['generate']['output']); $bPrimary = varset($admin['generate']['primary']); $text .= (is_array($admin['generate'])) ? $frm->admin_button('rebuild['.$bTable.']', $bPrimary."::".$bInput."::".$bOutput,'delete', LAN_EURL_REBUILD) : ""; $text .= " "; } /* For Miro - intuitive interface example. All configs are contained within one e_url.php file. Root namespacing automatically calculated based on selection. ie. choosing option 1 below will set root namespacing for news. Known bug (example): News title: Nothing's Gonna Change my World! Currently becomes: /Nothing%26%23039%3Bs%20Gonna%20Change%20my%20World%21 Should become: /nothings-gonna-change-my-world Good SEF reference: http://davidwalsh.name/generate-search-engine-friendly-urls-php-function [Miro] Solution comes from the module itself, not related with URL assembling in anyway (as per latest Skype discussion) */ // Global On/Off Switch Example // [Miro] there is no reason of switch, everything could go through single entry point at any time, without a need of .htaccess (path info) // Control is coming per configuration file. $example = " Enable Search-Engine-Friendly URLs "; //Entry Example (Hidden unless the above global switch is active) $example .= " News "; // For 0.8 Beta $example .= " "; $example .= "
Default/news.php?item.1
News Namespace and News Title/news/news-item-title
Year and News Title/2011/news-item-title
Year/Month and News Title/2011/08/news-item-title
Year/Month/Day and News Title/2011/08/27/news-item-title
News Category and News Title/news-category/news-item-title
Custom
"; $example .= " "; return $text; } public function aliasesRows($currentAliases, $modules, $lanDef, $lans) { if(empty($modules)) { return " ".LAN_EURL_EMPTY." "; } $text = ''; $tp = e107::getParser(); $text .= " Module "; $lng = e107::getLanguage(); foreach ($modules as $module => $obj) { $cfg = $obj->config->config(); if(isset($cfg['config']['noSingleEntry']) && $cfg['config']['noSingleEntry']) continue; if($module == 'index') { $text .= " ".LAN_EURL_CORE_INDEX."
".LAN_EURL_CORE_INDEX_INFO." ".e107::getUrl()->create('/', '', array('full' => 1))."
"; continue; } $help = array(); $admin = $obj->config->admin(); $lan = $lanDef[0]; $url = e107::getUrl()->create($module, '', array('full' => 1, 'encode' => 0)); $defVal = isset($currentAliases[$lan]) && in_array($module, $currentAliases[$lan]) ? array_search($module, $currentAliases[$lan]) : $module; $section = vartrue($admin['labels'], array()); $text .= " ".vartrue($section['name'], ucfirst(str_replace('_', ' ', $obj->module)))."
".LAN_EURL_FORM_HELP_ALIAS_0." {$module}
"; // default language $text .= ""; $text .= ""; $text .= ""; $text .= ""; $text .= ""; // $help[] = '['.$lanDef[1].'] '.LAN_EURL_FORM_HELP_EXAMPLE.':
'.$url.''; $text .= ""; if(e107::getUrl()->router()->isMainModule($module)) { $help = " ".$tp->toGlyph('fa-home').""; //$readonly = 1; // may be used later. $readonly = 0; } else { $help = ''; $readonly=0; } if($lans) { foreach ($lans as $code => $lan) { $url = e107::getUrl()->create($module, '', array('lan' => $code, 'full' => 1, 'encode' => 0)); $defVal = isset($currentAliases[$code]) && in_array($module, $currentAliases[$code]) ? array_search($module, $currentAliases[$code]) : $module; // $help .= '['.$lan.'] '.LAN_EURL_FORM_HELP_EXAMPLE.':
'.$url.''; $text .= ""; $text .= ""; $text .= ""; $text .= ""; // $text .= ""; $text .= ""; } } $text .= "
".ADLAN_132." ".LAN_EURL_NAME_ALIASES." ".LAN_EURL_FORM_HELP_EXAMPLE."
".$lanDef[1].$this->help(LAN_EURL_FORM_HELP_DEFAULT).""; $text .= $this->text('eurl_aliases['.$lanDef[0].']['.$module.']', $defVal, 255, 'size=xlarge'); // $text .= ' ['.$lanDef[1].']'; $text .= ""; $text .= "
".$lan."". $this->text('eurl_aliases['.$code.']['.$module.']', $defVal, 255, array('size' => 'xlarge', 'readonly'=>$readonly)); $text .= $help; $text .= ""; // $text .= $this->help(LAN_EURL_FORM_HELP_ALIAS_1.' '.$lan.''); // $text .= $this->help(LAN_EURL_FORM_HELP_ALIAS_1.' '.$lan.''); $url = $lng->subdomainUrl($lan,$url); $text .= $url; $text .= "". // $text .= '['.$lan.'] '.LAN_EURL_FORM_HELP_EXAMPLE.':
'.$url.''; // $text .= "
"; /*$text .= " ".implode("
", $help)." ";*/ // $text .= ""; } return $text; } } class eurlAdminEmptyConfig extends eUrlConfig { public function config() { return array(); } } new eurl_admin(); require_once(e_ADMIN.'auth.php'); e107::getAdminUI()->runPage(); require_once(e_ADMIN.'footer.php');