frm = new e_form(); $this->fl = e107::getFile(); if(isset($_POST['upload'])) { $this->themeUpload(); } if(vartrue($_POST['installContent'])) { $this->installContent($_POST['installContent']); } $this->themeArray = (defined('E107_INSTALL')) ? $this->getThemes('xml') : $this->getThemes(); // print_a($this -> themeArray); foreach ($_POST as $key=>$post) { if(strstr($key, "preview")) { // $this -> id = str_replace("preview_", "", $key); $this->id = key($post); $this->themePreview(); } if(strstr($key, "selectmain")) { // $this -> id = str_replace("selectmain_", "", $key); $this->id = key($post); $this->setTheme(); } if(strstr($key, "selectadmin")) { $this->id = key($post); $this->setAdminTheme(); $this->refreshPage('admin'); } } if(isset($_POST['submit_adminstyle'])) { $this->id = $_POST['curTheme']; if($this->setAdminStyle()) { eMessage::getInstance()->add(TPVLAN_43, E_MESSAGE_SUCCESS); } e107::getConfig()->save(true); } if(isset($_POST['submit_style'])) { $this->id = $_POST['curTheme']; $this->SetCustomPages($_POST['custompages']); $this->setStyle(); e107::getConfig()->save(true); } if(isset($_POST['installplugin'])) { $key = key($_POST['installplugin']); include_lan(e_LANGUAGEDIR.e_LANGUAGE."/admin/lan_plugin.php"); require_once (e_HANDLER."plugin_class.php"); $eplug = new e107plugin; $message = $eplug->install_plugin($key); $mes->add($message, E_MESSAGE_SUCCESS); } if(isset($_POST['setMenuPreset'])) { $key = key($_POST['setMenuPreset']); include_lan(e_LANGUAGEDIR.e_LANGUAGE."/admin/lan_menus.php"); require_once (e_HANDLER."menumanager_class.php"); $men = new e_menuManager(); $men->curLayout = $key; //menu_layout is left blank when it's default. $men->dbLayout = ($men->curLayout != $pref['sitetheme_deflayout']) ? $men->curLayout : ""; if($areas = $men->menuSetPreset()) { foreach ($areas as $val) { $ar[$val['menu_location']][] = $val['menu_name']; } foreach ($ar as $k=>$v) { $message .= MENLAN_14." ".$k." : ".implode(", ", $v)."
"; } $mes->add(MENLAN_43." : ".$key."
".$message, E_MESSAGE_SUCCESS); } } } function getThemes($mode = FALSE) { $themeArray = array(); $tloop = 1; $fl = e107::getFile(); $array = $fl->get_dirs(e_THEME); foreach($array as $file) { if(($mode == 'xml') && !is_readable(e_THEME.$file."/theme.xml")) { continue; } if($file != "." && $file != ".." && $file != "CVS" && $file != "templates" && is_dir(e_THEME.$file) && is_readable(e_THEME.$file."/theme.php")) { if($mode == "id") { $themeArray[$tloop] = $file; } else { $themeArray[$file] = $this->getThemeInfo($file); $themeArray[$file]['id'] = $tloop; } $tloop++; } } // echo "
";
	//	 print_r($themeArray);
	//	 echo "
"; return $themeArray; } function getThemeInfo($file) { $STYLESHEET = FALSE; $reject = array('$.', '$..', '/', 'CVS', 'thumbs.db', '*._$', 'index', 'null*', 'e_*'); $handle2 = $this->fl->get_files(e_THEME.$file."/", ".php|.css|.xml|preview.jpg|preview.png", $reject, 1); foreach ($handle2 as $fln) { $file2 = str_replace(e_THEME.$file."/", "", $fln['path']).$fln['fname']; $themeArray[$file]['files'][] = $file2; if(strstr($file2, "preview.")) { $themeArray[$file]['preview'] = e_THEME.$file."/".$file2; } // ---------------- get information string for css file if(strstr($file2, "css") && !strstr($file2, "menu.css") && strpos($file2, "e_") !== 0) { if($fp = fopen(e_THEME.$file."/".$file2, "r")) { // FIXME: use info from theme.xml alternateStyleSheet instead $cssContents = fread($fp, filesize(e_THEME.$file."/".$file2)); fclose($fp); $nonadmin = preg_match('/\* Non-Admin(.*?)\*\//', $cssContents) ? true : false; preg_match('/\* info:(.*?)\*\//', $cssContents, $match); $match[1] = varset($match[1], ''); $themeArray[$file]['css'][] = array("name"=>$file2, "info"=>$match[1], "nonadmin"=>$nonadmin); if($STYLESHEET) { $themeArray[$file]['multipleStylesheets'] = TRUE; } else { $STYLESHEET = TRUE; } } } } // end while.. // echo "
"; // closedir($handle2); // Load Theme information and merge with existing array. theme.xml (0.8 themes) is given priority over theme.php (0.7). if(in_array("theme.xml", $themeArray[$file]['files'])) { $themeArray[$file] = array_merge($themeArray[$file], $this->parse_theme_xml($file)); } elseif(in_array("theme.php", $themeArray[$file]['files'])) { $themeArray[$file] = array_merge($themeArray[$file], $this->parse_theme_php($file)); } return $themeArray[$file]; } /** * Validate and return the name of the categories. * * @param string [optional] $categoryfromXML * @return string */ function getThemeCategory($categoryfromXML = '') { if(!$categoryfromXML) { return 'generic'; } $tmp = explode(",", $categoryfromXML); $category = array(); foreach ($tmp as $cat) { $cat = trim($cat); if(in_array($cat, $this->allowedCategories)) { $category[] = $cat; } else { $category[] = 'generic'; } } return implode(', ', $category); } function themeUpload() { if(!$_POST['ac'] == md5(ADMINPWCHANGE)) { exit; } $mes = e107::getMessage(); $ns = e107::getRender(); extract($_FILES); if(!is_writable(e_THEME)) { // $ns->tablerender(TPVLAN_16, TPVLAN_20); $mes->add(TPVLAN_20, E_MESSAGE_INFO); return FALSE; } else { 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 { $mes->add(TPVLAN_17, E_MESSAGE_ERROR); // $ns->tablerender(TPVLAN_16, TPVLAN_17); // require_once("footer.php"); return FALSE; } if($fileSize) { $uploaded = file_upload(e_THEME); $archiveName = $uploaded[0]['name']; if($fileType == "zip") { require_once (e_HANDLER."pclzip.lib.php"); $archive = new PclZip(e_THEME.$archiveName); $unarc = ($fileList = $archive->extract(PCLZIP_OPT_PATH, e_THEME, PCLZIP_OPT_SET_CHMOD, 0666)); } else { require_once (e_HANDLER."pcltar.lib.php"); $unarc = ($fileList = PclTarExtract($archiveName, e_THEME)); } if(!$unarc) { if($fileType == "zip") { $error = TPVLAN_46." '".$archive->errorName(TRUE)."'"; } else { $error = TPVLAN_47.PclErrorString().", ".TPVLAN_48.intval(PclErrorCode()); } $mes->add(TPVLAN_18." ".$archiveName." ".$error, E_MESSAGE_ERROR); // $ns->tablerender(TPVLAN_16, TPVLAN_18." ".$archiveName." ".$error); return FALSE; } $folderName = substr($fileList[0]['stored_filename'], 0, (strpos($fileList[0]['stored_filename'], "/"))); $mes->add(TPVLAN_19, E_MESSAGE_SUCCESS); if(varset($_POST['setUploadTheme'])) { $themeArray = $this->getThemes(); $this->id = $themeArray[$folderName]['id']; $this->setTheme(); } // $ns->tablerender(TPVLAN_16, "
".TPVLAN_19."
"); @unlink(e_THEME.$archiveName); } } } function showThemes($mode = 'main') { global $pref; $mes = e107::getMessage(); $ns = e107::getRender(); $tp = e107::getParser(); $frm = e107::getForm(); $srch = preg_replace('/[^\w]/','', vartrue($_GET['srch'])); echo "
"; if($mode == "main" || !$mode) // Show Main Configuration { foreach ($this->themeArray as $key=>$theme) { if($key == $pref['sitetheme']) { $text = $this->renderTheme(1, $theme); } } echo "
\n"; $ns->tablerender(TPVLAN_26.SEP.TPVLAN_33, $mes->render().$text); } // Show Admin Configuration if($mode == "admin") { foreach ($this->themeArray as $key=>$theme) { if($key == $pref['admintheme']) { $text = $this->renderTheme(2, $theme); } } echo "\n"; $ns->tablerender(TPVLAN_26.SEP.TPVLAN_34, $mes->render().$text); } // Show Upload Form if($mode == "upload") { $this->renderUploadForm(); } // Show All Themes if($mode == "choose") { $text = ""; foreach ($this->themeArray as $key=>$theme) { $text .= $this->renderTheme(FALSE, $theme); // print_a($theme); } $text .= "
 
"; echo "\n"; $ns->tablerender(TPVLAN_26.SEP.TPVLAN_39, $mes->render().$text); } if($mode == "online") { $e107 = e107::getInstance(); $xml = e107::getXml(); $mes = e107::getMessage(); // $mes->addWarning("This area is experimental."); $from = intval(varset($_GET['frm'])); $limit = 18; // $file = SITEURLBASE.e_PLUGIN_ABS."release/release.php"; // temporary testing $file = "http://e107.org/feed?type=theme&frm=".$from."&srch=".$srch."&limit=".$limit; $mes->addDebug("File = ".$file); $xml->setOptArrayTags('theme,screenshots/image'); // make sure 'theme' tag always returns an array // $xdata = $xml->loadXMLfile($file,'advanced',true); $xdata = $xml->loadXMLfile($file,true,false); $total = $xdata['@attributes']['total']; $text = "
"; // print_a($xdata); //TODO use admin_ui including filter capabilities by sending search queries back to the xml script. // XML data array. $c = 1; if(is_array($xdata['theme'] )) { foreach($xdata['theme'] as $r) { if(E107_DBG_PATH) { $mes->addDebug(print_a($r,true)); } $theme = array( 'name' => stripslashes($r['@attributes']['name']), 'category' => $r['category'], 'preview' => $r['screenshots']['image'], 'date' => $r['@attributes']['date'], 'version' => $r['@attributes']['version'], 'thumbnail' => $r['@attributes']['thumbnail'], 'url' => $r['@attributes']['url'], 'author' => $r['@attributes']['author'], 'website' => $r['@attributes']['authorUrl'], 'compatibility' => $r['@attributes']['compatibility'], 'description' => varset($r['description']), ); $text .= $this->renderTheme(FALSE, $theme); /* [author] => e107 Inc [summary] => Bootstrap e107 admin theme [category] => generic [keywords] => Array ( [word] => Array ( [0] => bootstrap [1] => clean ) ) [name] => bootstrap [version] => 1.0 [date] => 2012-12-01 [compatibility] => 2.0 [releaseUrl] => [email] => e107inc@something.com [website] => http://e107.org [info] => Bootstrap e107 admin theme [compliance] => Array ( [@attributes] => Array ( [xhtml] => [css] => ) ) [xhtmlcompliant] => [csscompliant] => [path] => bootstrap */ } $text .= "
 
"; } else { $mes->addInfo("No Themes found which match your search criteria"); } $amount =$limit; $ns->tablerender(TPVLAN_26.SEP."Available for Download", $text. $mes->render()); if($total > $amount) { $parms = $total.",".$amount.",".$from.",".e_SELF.'?mode='.$_GET['mode'].'&frm=[FROM]'; echo"
".$tp->parseTemplate("{NEXTPREV=$parms}",TRUE)."
"; } } echo "\n
\n"; } function renderUploadForm() { $mes = e107::getMessage(); $ns = e107::getRender(); $sql = e107::getDb(); if(!is_writable(e_THEME)) { $ns->tablerender(TPVLAN_16, TPVLAN_15); $text = ""; } else { require_once (e_HANDLER.'upload_handler.php'); $max_file_size = get_user_max_upload(); $text = "
".TPVLAN_13."
".TPVLAN_10."
"; $text .= $this->frm->admin_button('upload', TPVLAN_14, 'submit'); $text .= "
\n"; } $ns->tablerender(TPVLAN_26.SEP.TPVLAN_38, $mes->render().$text); } function renderThemeInfo($theme) { global $pref; $author = ($theme['email'] ? "".$theme['author']."" : $theme['author']); $website = ($theme['website'] ? "".$theme['website']."" : ""); $preview = "".($theme['preview'] ? "" : "").""; $description = vartrue($theme['description'],''); $compat = (intval($theme['compatibility']) == 2) ? "".number_format($theme['compatibility'], 1, '.','')." Recommended!": vartrue(number_format($theme['compatibility'], 1, '.',''),'1.0'); $text = ""; // $text .= ""; $text .= $author ? "" : ""; $text .= $website ? "" : ""; $text .= $theme['date'] ? "" : ""; $text .= $compat ? "" : ""; $text .= $description ? "" : ""; // $text .= " // "; if(vartrue($theme['category'])) { $text .= ""; } // New in 0.8 WORK IN PROGRESS ---- if($theme['layouts']) { $itext .= ""; } // $text .= ""; $text .= $itext."

".$theme['name']." ".$theme['version']."

".TPVLAN_4.":".$author."
".TPVLAN_5.":".$website."
".TPVLAN_6.":".$theme['date']."
".TPVLAN_57.":".$compat."
Description:".$description."
".TPVLAN_49.":XHTML "; // $text .= ($theme['xhtmlcompliant']) ? ADMIN_TRUE_ICON : ADMIN_FALSE_ICON; // $text .= "    CSS "; // $text .= ($theme['csscompliant']) ? ADMIN_TRUE_ICON : ADMIN_FALSE_ICON; // $text .= "
Category".$theme['category']."
".TPVLAN_50.": "; $itext .= ($mode == 1) ? "" : ""; $itext .= " \n"; foreach ($theme['layouts'] as $key=>$val) { $itext .= " "; if($mode == 1) { if(!$pref['sitetheme_deflayout']) { $pref['sitetheme_deflayout'] = ($val['@attributes']['default'] == 'true') ? $key : ""; // echo "------------- NODEFAULT"; } $itext .= " "; } $itext .= ""; } $itext .= "
DefaultTitle Requirements Menu Preset
"; $itext .= ($val['@attributes']['previewFull']) ? "" : ""; $itext .= $val['@attributes']['title']; $itext .= ($val['@attributes']['previewFull']) ? "" : ""; $itext .= ($pref['sitetheme_deflayout'] == $key) ? " (default)" : ""; $itext .= " ".$val['@attributes']['plugins']."  "; $itext .= ($val['menuPresets']) ? ADMIN_TRUE_ICON : " "; $itext .= "
".TPVLAN_22.": "; // foreach ($theme['css'] as $val) // { // $text .= $val['name']."
"; // } // $text .= "
"; if(count($theme['preview'])) { $text .= ""; foreach($theme['preview'] as $pic) { $picFull = (substr($pic,0,4) == 'http') ? $pic : e_THEME.$theme['path']."/".$pic; $text .= "
\"".$theme['name']."\"
"; } // $text .= " // "; } // $text .= "
Close
"; if(E107_DEBUG_LEVEL > 0) { $text .= print_a($theme, true); } return $text; } function loadThemeConfig() { $mes = e107::getMessage(); $confile = e_THEME.$this->id."/".$this->id."_config.php"; if(($this->themeConfigObj === null) && is_readable($confile)) { $mes->addDebug("Loading : ".$confile); include ($confile); $className = 'theme_'.$this->id; if(class_exists($className)) { $this->themeConfigObj = new $className(); } else { $this->themeConfigObj = FALSE; } } } // TODO process custom theme configuration - . function renderThemeConfig() { $mes = e107::getMessage(); $mes->addDebug("Rendering Theme Config"); $this->loadThemeConfig(); if($this->themeConfigObj) { $var = call_user_func(array(&$this->themeConfigObj, 'config')); foreach ($var as $val) { $text = "".$val['caption'].":".$val['html'].""; } return $text; } } function renderThemeHelp() { if($this->themeConfigObj) { return call_user_func(array(&$this->themeConfigObj, 'help')); } } function setThemeConfig() { $this->loadThemeConfig(); if($this->themeConfigObj) { return call_user_func(array(&$this->themeConfigObj, 'process')); } } /** mode = 0 :: normal mode = 1 :: selected site theme mode = 2 :: selected admin theme */ function renderTheme($mode = FALSE, $theme) { $ns = e107::getRender(); $pref = e107::getPref(); $frm = e107::getForm(); $author = ($theme['email'] ? "".$theme['author']."" : $theme['author']); $website = ($theme['website'] ? "".$theme['website']."" : ""); $preview = "".($theme['preview'] ? "" : "").""; $main_icon = ($pref['sitetheme'] != $theme['path']) ? "" : E_32_TRUE; // $info_icon = ""; $info_icon = "".E_32_CAT_ABOUT.""; $preview_icon = "".E_32_SEARCH.""; $admin_icon = ($pref['admintheme'] != $theme['path'] ) ? "\n" : E_32_TRUE; if($_GET['mode'] == 'online') { $d = http_build_query($theme,false,'&'); $url = e_SELF."?src=".base64_encode($d); $id = $frm->name2id($theme['name']); $main_icon = " "; $info_icon = "".E_32_CAT_ABOUT.""; //XXX modal-Cache is currently enabled by default. Awaiting inclusion of data-cache feature. // See here: https://github.com/twitter/bootstrap/pull/4224 } if(!in_array($theme['path'], $this->approvedAdminThemes)) { $admin_icon = ""; } if($theme['name'] == 'bootstrap') { // print_a($theme); } // // $thumbPath = (substr($theme['thumbnail'],0,4) == 'http') ? $theme['thumbnail'] : e_THEME.$theme['path'] ."/".$theme['preview'][0]; // $thumbnail = ""; if(substr($theme['thumbnail'],0,4) == 'http') { $thumbPath = $theme['thumbnail']; $previewPath = $theme['preview'][0]; } elseif(vartrue($theme['preview'][0])) { $thumbPath = e_THEME.$theme['path'] ."/".$theme['preview'][0]; $previewPath = e_THEME.$theme['path'] ."/".$theme['preview'][0]; } else { $thumbPath = e_IMAGE_ABS."admin_images/nopreview.png"; $previewPath = e_BASE."index.php?themepreview.".$theme['id']; } $thumbnail = ""; $preview_icon = "".E_32_SEARCH.""; // $thumbnail .= ""; // Choose a Theme to Install. if(!$mode) { // styles NEED to be put into style.css if($pref['sitetheme'] == $theme['path']) { $borderStyle = "admin-theme-cell-site"; } elseif($pref['admintheme'] == $theme['path']) { $borderStyle = "admin-theme-cell-admin"; } else { $borderStyle = "admin-theme-cell-default"; } $borderStyle = 'well'; $text = "
".$thumbnail."
".$main_icon.$admin_icon.$info_icon.$preview_icon."
".$theme['name']." ".$theme['version']."
"; return $text; } $this->id = $theme['path']; // load customn theme configuration fields. $this->loadThemeConfig(); $text = "

".$theme['name']."

"; $text .= ""; $text .= ""; $text .= ""; $text .= ""; $text .= ""; $text .= ""; // site theme.. if($mode == 1) { $text .= " "; $text .= " "; } // New in 0.8 ---- site theme. if($mode == 1) { $itext = ""; } // $itext .= !$mode ? "" : ""; if($mode == 2) { $astext = ""; $file = e107::getFile(); $adminstyles = $file->get_files(e_ADMIN."includes"); $astext = "\n"; $text .= " \n"; } $text .= $itext; if(array_key_exists("multipleStylesheets", $theme) && $mode) { $text .= " "; } if($mode == 1) { $text .= $this->renderThemeConfig(); } $text .= "
".TPVLAN_11." ".$theme['version']." ".$thumbnail."
".TPVLAN_4.":".$author."
".TPVLAN_5.":".$website."
".TPVLAN_6.":".$theme['date']."
".TPVLAN_7.":".strip_tags($theme['info'],'b')."
".LAN_CATEGORY.":".$theme['category']."
".TPVLAN_49.": "; $text .= ($theme['xhtmlcompliant']) ? "W3C XHTML ".$theme['xhtmlcompliant'] : "Not Specified"; $text .= ($theme['csscompliant']) ? " & CSS ".$theme['csscompliant'] : ""; $text .= "
".TPVLAN_53." "; if(varset($theme['plugins'])) { foreach ($theme['plugins'] as $key=>$val) { $text .= $this->renderPlugins($theme['plugins']); $text .= " "; } } $text .= " 
".TPVLAN_30." ".TPVLAN_28."   ".TPVLAN_29."
".TPVLAN_50.": "; $itext .= ($mode == 1) ? "" : ""; $itext .= " \n"; foreach ($theme['layouts'] as $key=>$val) { $itext .= " "; if($mode == 1) { if(!$pref['sitetheme_deflayout']) { $pref['sitetheme_deflayout'] = ($val['@attributes']['default'] == 'true') ? $key : ""; } $itext .= ""; } $itext .= ""; $itext .= ""; } $itext .= "
".TPVLAN_55."".TPVLAN_52." ".TPVLAN_56." ".TPVLAN_54."
\n"; $itext .= " "; // $itext .= ($val['@attributes']['previewFull']) ? "" : ""; $itext .= $val['@attributes']['title']; // $itext .= ($val['@attributes']['previewFull']) ? "" : ""; $custompage_count = (isset($pref['sitetheme_custompages'][$key])) ? " [".count($pref['sitetheme_custompages'][$key])."]" : ""; $custompage_diz = ""; $count = 1; if(isset($pref['sitetheme_custompages'][$key]) && count($pref['sitetheme_custompages'][$key]) > 0) { foreach ($pref['sitetheme_custompages'][$key] as $cp) { $custompage_diz .= "".trim($cp)." "; if($count > 4) { $custompage_diz .= "..."; break; } $count++; } } else { $custompage_diz = "None "; } $itext .= " "; // Default $itext .= ($pref['sitetheme_deflayout'] != $key) ? $custompage_diz."
\n" : TPVLAN_55; $itext .= "
"; $itext .= (varset($val['menuPresets'])) ? $this->frm->admin_button("setMenuPreset[".$key."]", "Use Preset") : ""; $itext .= "
".TPVLAN_8.":".$previewbutton.$selectmainbutton.$selectadminbutton."
".TPVLAN_41.": ".$astext."
".TPVLAN_22.": "; foreach ($theme['css'] as $css) { $text2 = ""; if($mode == 2) // ADMIN MODE { if($css['name'] == "style.css" || !vartrue($css['info'])) // Hide the admin css unless it has a header. eg. /* info: Default stylesheet */ { continue; } if(!$css['nonadmin']) { $text2 = " \n"; } } if($mode == 1) // SITE-THEME Mode { if(substr($css['name'], 0, 6) == "admin_" || !strstr($css['name'],'style')) { continue; } $text2 = " \n"; } $text .= ($text2) ? "".$text2."" : ""; } $text .= "
".TPVLAN_55." ".TPVLAN_52." ".TPVLAN_7."
". $frm->radio('admincss', $css['name'], vartrue($pref['admincss'])== $css['name'])." ".($css['info'] ? $css['info'] : ($css['name'] == "admin_style.css" ? TPVLAN_23 : TPVLAN_24))." ".$css['name']." ".($css['info'] ? $css['info'] : ($css['name'] == "style.css" ? TPVLAN_23 : TPVLAN_24))."
"; if($mode == 2) // admin { $mainid = "selectmain[".$theme['id']."]"; $text .= $this->frm->admin_button('submit_adminstyle', TPVLAN_35, 'update'); //$text .= $this->frm->admin_button($mainid, TPVLAN_10, 'other'); } else // main { $adminid = "selectadmin[".$theme['id']."]"; $text .= $this->frm->admin_button('submit_style', TPVLAN_35, 'update'); //$text .= $this->frm->admin_button($adminid, TPVLAN_32, 'other'); } $text .= ""; $text .= "
".$this->renderThemeHelp()."
\n"; return $text; } function renderPlugins($pluginOpts) { global $frm,$sql; // if there is 1 entry, then it's not the same array. $tmp = (varset($pluginOpts['plugin'][1])) ? $pluginOpts['plugin'] : $pluginOpts; $text = ""; foreach ($tmp as $p) { $plug = trim($p['@attributes']['name']); if(plugInstalled($plug)) { $text .= $plug." ".ADMIN_TRUE_ICON; } else { // echo $plug; if($sql->db_Select("plugin", "plugin_id", " plugin_path = '".$plug."' LIMIT 1 ")) { $row = $sql->db_Fetch(MYSQL_ASSOC); $name = "installplugin[".$row['plugin_id']."]"; $text .= $this->frm->admin_button($name, ADLAN_121." ".$plug."", 'delete'); } else { $text .= (varset($p['@attributes']['url']) && ($p['@attributes']['url'] != 'core')) ? "".$plug." " : "".$plug.""; $text .= ADMIN_FALSE_ICON; } } $text .= "   "; } return $text; } function refreshPage($page = e_QUERY ) { header("Location: ".e_SELF."?".$page); exit; } function themePreview() { echo "\n"; exit; } function showPreview() { include_lan(e_LANGUAGEDIR.e_LANGUAGE."/admin/lan_theme.php"); $text = "
".TPVLAN_1.".

"; global $ns; $ns->tablerender(TPVLAN_2, $text); } /** * Set Theme as Main Theme. * * @param string $name [optional] name (folder) of the theme to set. * @return boolean TRUE on success, FALSE otherwise */ function setTheme($name = '') { $core = e107::getConfig('core'); $sql = e107::getDb(); $mes = e107::getMessage(); $themeArray = $this->getThemes("id"); $name = ($name) ? $name : vartrue($themeArray[$this->id]); $layout = $pref['sitetheme_layouts'] = is_array($this->themeArray[$name]['layouts']) ? $this->themeArray[$name]['layouts'] : array(); $deflayout = $this->findDefault($name); $customPages = $this->themeArray[$name]['custompages']; $version = $this->themeArray[$name]['version']; $core->set('sitetheme', $name); $core->set('themecss', 'style.css'); $core->set('sitetheme_layouts', $layout); $core->set('sitetheme_deflayout', $deflayout); $core->set('sitetheme_custompages', $customPages); $core->set('sitetheme_version', $version); // $core->set('sitetheme_releaseUrl', $this->themeArray[$name]['releaseUrl']); $sql->db_Delete("menus", "menu_layout !='' "); e107::getCache()->clear_sys(); if($core->save()) { //TODO LANs $mes->add(TPVLAN_3." '".$name." v".$version."'", E_MESSAGE_SUCCESS); $mes->add("Default Layout: ".$deflayout, E_MESSAGE_SUCCESS); $mes->addDebug("Custom Pages: ".print_a($customPages,true)); $med = e107::getMedia(); $med->import('_common_image', e_THEME.$name, "^.*?logo.*?(\.png|\.jpeg|\.jpg|\.JPG|\.GIF|\.PNG)$"); $med->import('_common_image', e_THEME.$name, '', 'min-size=20000'); $this->installContentCheck($name); $this->theme_adminlog('01', $name.', style.css'); return TRUE; } else { $mes->add(TPVLAN_3." '".$name."'", E_MESSAGE_ERROR); return FALSE; } } function installContentCheck($name) { $file = e_THEME.$name."/install/install.xml"; $frm = e107::getForm(); if(!is_readable($file)) { return false; } $mes = e107::getMessage(); $xmlArray = e107::getXml()-> loadXMLfile($file, 'advanced'); $text = "
This theme would like to make the following changes to your database: ".$frm->admin_button('installContent',$name, 'warning', "Agree")." ".$frm->admin_button('dismiss',0, 'cancel', 'Dismiss')."
"; // $text .= print_a($xmlArray, true); $mes->addWarning($text); } function installContent($name) { $mes = e107::getMessage(); $file = e_THEME.$name."/install/install.xml"; e107::getXml()->e107Import($file, 'replace', true, false); // Overwrite specific core pref and tables entries. $mes->addSuccess(LAN_UPDATED); } function findDefault($theme) { if(varset($_POST['layout_default'])) { return $_POST['layout_default']; } $l = $this->themeArray[$theme]; if(!$l) { $l = $this->getThemeInfo($theme); } if($l['layouts']) { foreach ($l['layouts'] as $key=>$val) { if(isset($val['@attributes']['default']) && ($val['@attributes']['default'] == "true")) { return $key; } } } else { return ""; } } function setAdminTheme() { global $pref,$e107cache; $ns = e107::getRender(); $mes = e107::getMessage(); $themeArray = $this->getThemes("id"); $pref['admintheme'] = $themeArray[$this->id]; $pref['admincss'] = file_exists(e_THEME.$pref['admintheme'].'/dark_style.css') ? 'dark_style.css' : 'light_style.css'; $e107cache->clear_sys(); if(save_prefs()) { // Default Message $mes->add(TPVLAN_40." '".$themeArray[$this->id]."'", E_MESSAGE_SUCCESS); $this->theme_adminlog('02', $pref['admintheme'].', '.$pref['admincss']); } // $ns->tablerender("Admin Message", "
".TPVLAN_40." '".$themeArray[$this -> id]."'.

"); // $this->showThemes('admin'); } function setStyle() { global $pref,$e107cache; $sql = e107::getDb(); $ns = e107::getRender(); $mes = e107::getMessage(); //TODO adminlog e107::getConfig()->setPosted('themecss', $_POST['themecss'])->setPosted('image_preload', $_POST['image_preload'])->setPosted('sitetheme_deflayout', $_POST['layout_default']); $msg = $this->setThemeConfig(); if($msg) { $mes->add(TPVLAN_37, E_MESSAGE_SUCCESS); if(is_array($msg)) $mes->add($msg[0], $msg[1]); } } function setAdminStyle() { global $pref,$e107cache; $ns = e107::getRender(); $mes = e107::getMessage(); /*$pref['admincss'] = $_POST['admincss']; $pref['adminstyle'] = $_POST['adminstyle']; $e107cache->clear_sys(); if(save_prefs()) { $mes->add(TPVLAN_43, E_MESSAGE_SUCCESS); $this->theme_adminlog('04',$pref['adminstyle'].', '.$pref['admincss']); } else { $mes->add(TPVLAN_43, E_MESSAGE_ERROR); }*/ //TODO adminlog e107::getConfig()->setPosted('admincss', $_POST['admincss'])->setPosted('adminstyle', $_POST['adminstyle']); return (e107::getConfig()->dataHasChangedFor('admincss') || e107::getConfig()->dataHasChangedFor('adminstyle')); } function SetCustomPages($array) { if(!is_array($array)) { return; } $newprefs = array(); foreach ($array as $key => $newpref) { $newpref = trim(str_replace("\r\n", "\n", $newpref)); $newprefs[$key] = array_filter(explode("\n", $newpref)); $newprefs[$key] = array_unique($newprefs[$key]); } if(e107::getPref('sitetheme_deflayout') == 'legacyCustom') { $newprefs['legacyCustom'] = array(); } //setPosted couldn't be used here - sitetheme_custompages structure is not defined e107::getConfig()->set('sitetheme_custompages', e107::getParser()->toDB($newprefs)); } // Log event to admin log function theme_adminlog($msg_num = '00', $woffle = '') { if($this->noLog) { return; } global $pref,$admin_log; // if (!varset($pref['admin_log_log']['admin_banlist'],0)) return; $admin_log->log_event('THEME_'.$msg_num, $woffle, E_LOG_INFORMATIVE, ''); } function parse_theme_php($path) { $CUSTOMPAGES = ""; $fp = fopen(e_THEME.$path."/theme.php", "r"); $themeContents = fread($fp, filesize(e_THEME.$path."/theme.php")); fclose($fp); preg_match('/themename(\s*?=\s*?)("|\')(.*?)("|\');/si', $themeContents, $match); $themeArray['name'] = varset($match[3], ''); preg_match('/themeversion(\s*?=\s*?)("|\')(.*?)("|\');/si', $themeContents, $match); $themeArray['version'] = varset($match[3], ''); preg_match('/themeauthor(\s*?=\s*?)("|\')(.*?)("|\');/si', $themeContents, $match); $themeArray['author'] = varset($match[3], ''); preg_match('/themeemail(\s*?=\s*?)("|\')(.*?)("|\');/si', $themeContents, $match); $themeArray['email'] = varset($match[3], ''); preg_match('/themewebsite(\s*?=\s*?)("|\')(.*?)("|\');/si', $themeContents, $match); $themeArray['website'] = varset($match[3], ''); preg_match('/themedate(\s*?=\s*?)("|\')(.*?)("|\');/si', $themeContents, $match); $themeArray['date'] = varset($match[3], ''); preg_match('/themeinfo(\s*?=\s*?)("|\')(.*?)("|\');/si', $themeContents, $match); $themeArray['info'] = varset($match[3], ''); preg_match('/xhtmlcompliant(\s*?=\s*?)(\S*?);/si', $themeContents, $match); $xhtml = strtolower($match[2]); $themeArray['xhtmlcompliant'] = ($xhtml == "true" ? "1.1" : false); preg_match('/csscompliant(\s*?=\s*?)(\S*?);/si', $themeContents, $match); $css = strtolower($match[2]); $themeArray['csscompliant'] = ($css == "true" ? "2.1" : false); /* preg_match('/CUSTOMPAGES(\s*?=\s*?)("|\')(.*?)("|\');/si', $themeContents, $match); $themeArray['custompages'] = array_filter(explode(" ",$match[3]));*/ $themeContentsArray = explode("\n", $themeContents); preg_match_all("#\\$"."CUSTOMHEADER\[(\"|')(.*?)('|\")\].*?#",$themeContents,$match); $customHeaderArray = $match[2]; preg_match_all("#\\$"."CUSTOMFOOTER\[(\"|')(.*?)('|\")\].*?#",$themeContents,$match); $customFooterArray = $match[2]; if(!$themeArray['name']) { unset($themeArray); } $lays['legacyDefault']['@attributes'] = array('title'=>'Default', 'plugins'=>'', 'default'=>'true'); // load custompages from theme.php only when theme.xml doesn't exist. if(!file_exists(e_THEME.$path."theme.xml")) { foreach ($themeContentsArray as $line) { if(strstr($line, "CUSTOMPAGES")) { eval(str_replace("$", "\$", $line)); // detect arrays also. } } if(is_array($CUSTOMPAGES)) { foreach ($CUSTOMPAGES as $key=>$val) { $themeArray['custompages'][$key] = explode(" ", $val); } } elseif($CUSTOMPAGES) { $themeArray['custompages']['legacyCustom'] = explode(" ", $CUSTOMPAGES); $lays['legacyCustom']['@attributes'] = array('title'=>'Custom', 'plugins'=>''); } foreach($customHeaderArray as $tm) { $lays[$tm]['@attributes'] = array('title'=>str_replace("_"," ",$tm), 'plugins'=>''); } foreach($customFooterArray as $tm) { $lays[$tm]['@attributes'] = array('title'=>str_replace("_"," ",$tm), 'plugins'=>''); } } $themeArray['path'] = $path; $themeArray['layouts'] = $lays; if(file_exists(e_THEME.$path."/preview.jpg")) { $themeArray['preview'] = array("preview.jpg"); $themeArray['thumbnail'] = "preview.jpg"; } if(file_exists(e_THEME.$path."/preview.png")) { $themeArray['preview'] = array("preview.png"); $themeArray['thumbnail'] = "preview.png"; } // echo "

".$themeArray['name']."

"; // print_a($lays); return $themeArray; } function parse_theme_xml($path) { $tp = e107::getParser(); $xml = e107::getXml(); // loadLanFiles($path, 'admin'); // Look for LAN files on default paths // layout should always be an array. $xml->setOptArrayTags('layout,screenshots/image'); $xml->setOptStringTags('menuPresets,customPages'); $vars = $xml->loadXMLfile(e_THEME.$path.'/theme.xml', true, true); $vars['name'] = varset($vars['@attributes']['name']); $vars['version'] = varset($vars['@attributes']['version']); $vars['date'] = varset($vars['@attributes']['date']); $vars['compatibility'] = varset($vars['@attributes']['compatibility']); $vars['releaseUrl'] = varset($vars['@attributes']['releaseUrl']); $vars['email'] = varset($vars['author']['@attributes']['email']); $vars['website'] = varset($vars['author']['@attributes']['url']); $vars['author'] = varset($vars['author']['@attributes']['name']); $vars['info'] = varset($vars['description']); $vars['category'] = $this->getThemeCategory(varset($vars['category'])); $vars['xhtmlcompliant'] = varset($vars['compliance']['@attributes']['xhtml']); $vars['csscompliant'] = varset($vars['compliance']['@attributes']['css']); $vars['path'] = $path; $vars['@attributes']['default'] = (varset($vars['@attributes']['default']) && strtolower($vars['@attributes']['default']) == 'true') ? 1 : 0; $vars['preview'] = varset($vars['screenshots']['image']); $vars['thumbnail'] = $vars['preview'][0]; unset($vars['authorEmail'], $vars['authorUrl'], $vars['xhtmlCompliant'], $vars['cssCompliant'], $vars['description'],$vars['screenshots']); // Compile layout information into a more usable format. $custom = array(); /* foreach ($vars['layouts'] as $layout) { foreach ($layout as $key=>$val) { $name = $val['@attributes']['name']; unset($val['@attributes']['name']); $lays[$name] = $val; if(isset($val['customPages'])) { $cusArray = explode(" ", $val['customPages']); $custom[$name] = array_filter($cusArray); } if(isset($val['custompages'])) { $cusArray = explode(" ", $val['custompages']); $custom[$name] = array_filter(explode(" ", $val['custompages'])); } } } */ foreach($vars['layouts']['layout'] as $k=>$val) { $name = $val['@attributes']['name']; unset($val['@attributes']['name']); $lays[$name] = $val; if(is_string($val['custompages'])) { $custom[$name] = array_filter(explode(" ", $val['custompages'])); } } $vars['layouts'] = $lays; $vars['path'] = $path; $vars['custompages'] = $custom; $mes = e107::getMessage(); // DEBUG if($path == "bootstrap" ) { $mes->addDebug("

".$path."

"); $mes->addDebug(print_a($vars,true)); $mes->addDebug("
"); } return $vars; } } interface e_theme_config { /** * Triggered on theme settings submit * Catch and save theme configuration */ public function process(); /** * Theme configuration user interface * Print out config fields */ public function config(); /** * Theme help tab * Print out theme help content */ public function help(); }