X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=mod%2Fadmin.php;h=0f600e3126b1b123e5cb4befe1f26de078147eb1;hb=bbebb4c2a050f22e9aa51cb123359b169bcb3b3c;hp=e444040973a996812daa8e65d8de834b043b5285;hpb=8aa25523721303b6883e1a793f20997f8a33ec0a;p=friendica.git diff --git a/mod/admin.php b/mod/admin.php index e444040973..0f600e3126 100755 --- a/mod/admin.php +++ b/mod/admin.php @@ -6,10 +6,19 @@ require_once("include/remoteupdate.php"); function admin_post(&$a){ + + if(!is_site_admin()) { return; } + + // do not allow a page manager to access the admin panel at all. + + if(x($_SESSION,'submanage') && intval($_SESSION['submanage'])) + return; + + // urls if ($a->argc > 1){ switch ($a->argv[1]){ @@ -50,6 +59,9 @@ function admin_content(&$a) { return login(false); } + if(x($_SESSION,'submanage') && intval($_SESSION['submanage'])) + return; + /** * Side bar links */ @@ -59,6 +71,7 @@ function admin_content(&$a) { 'site' => Array($a->get_baseurl()."/admin/site/", t("Site") , "site"), 'users' => Array($a->get_baseurl()."/admin/users/", t("Users") , "users"), 'plugins'=> Array($a->get_baseurl()."/admin/plugins/", t("Plugins") , "plugins"), + 'themes' => Array($a->get_baseurl()."/admin/themes/", t("Themes") , "themes"), 'update' => Array($a->get_baseurl()."/admin/update/", t("Update") , "update") ); @@ -101,6 +114,9 @@ function admin_content(&$a) { case 'plugins': $o = admin_page_plugins($a); break; + case 'themes': + $o = admin_page_themes($a); + break; case 'logs': $o = admin_page_logs($a); break; @@ -557,7 +573,7 @@ function admin_page_plugins(&$a){ '$info' => get_plugin_info($plugin), '$admin_form' => $admin_form, - + '$function' => 'plugins', '$readme' => $readme )); } @@ -586,11 +602,179 @@ function admin_page_plugins(&$a){ '$page' => t('Plugins'), '$submit' => t('Submit'), '$baseurl' => $a->get_baseurl(), - + '$function' => 'plugins', '$plugins' => $plugins )); } +function toggle_theme(&$themes,$th,&$result) { + for($x = 0; $x < count($themes); $x ++) { + if($themes[$x]['name'] === $th) { + if($themes[$x]['allowed']) { + $themes[$x]['allowed'] = 0; + $result = 0; + } + else { + $themes[$x]['allowed'] = 1; + $result = 1; + } + } + } +} + +function theme_status($themes,$th) { + for($x = 0; $x < count($themes); $x ++) { + if($themes[$x]['name'] === $th) { + if($themes[$x]['allowed']) { + return 1; + } + else { + return 0; + } + } + } + return 0; +} + + + +function rebuild_theme_table($themes) { + $o = ''; + if(count($themes)) { + foreach($themes as $th) { + if($th['allowed']) { + if(strlen($o)) + $o .= ','; + $o .= $th['name']; + } + } + } + return $o; +} + + +/* + * Themes admin page + */ + +function admin_page_themes(&$a){ + + $allowed_themes_str = get_config('system','allowed_themes'); + $allowed_themes_raw = explode(',',$allowed_themes_str); + $allowed_themes = array(); + if(count($allowed_themes_raw)) + foreach($allowed_themes_raw as $x) + if(strlen(trim($x))) + $allowed_themes[] = trim($x); + + $themes = array(); + $files = glob('view/theme/*'); + if($files) { + foreach($files as $file) { + $f = basename($file); + $is_experimental = intval(file_exists($file . '/experimental')); + $is_unsupported = 1-(intval(file_exists($file . '/unsupported'))); + $is_allowed = intval(in_array($f,$allowed_themes)); + $themes[] = array('name' => $f, 'experimental' => $is_experimental, 'supported' => $is_supported, 'allowed' => $is_allowed); + } + } + + if(! count($themes)) { + notice( t('No themes found.')); + return; + } + + /** + * Single theme + */ + + if ($a->argc == 3){ + $theme = $a->argv[2]; + if(! is_dir("view/theme/$theme")){ + notice( t("Item not found.") ); + return; + } + + if (x($_GET,"a") && $_GET['a']=="t"){ + + // Toggle theme status + + toggle_theme($themes,$theme,$result); + $s = rebuild_theme_table($themes); + if($result) + info( sprintf('Theme %s enabled.',$theme)); + else + info( sprintf('Theme %s disabled.',$theme)); + + set_config('system','allowed_themes',$s); + goaway($a->get_baseurl() . '/admin/themes' ); + return; // NOTREACHED + } + + // display theme details + require_once('library/markdown.php'); + + if (theme_status($themes,$theme)) { + $status="on"; $action= t("Disable"); + } else { + $status="off"; $action= t("Enable"); + } + + $readme=Null; + if (is_file("view/$theme/README.md")){ + $readme = file_get_contents("view/$theme/README.md"); + $readme = Markdown($readme); + } else if (is_file("view/$theme/README")){ + $readme = "
". file_get_contents("view/$theme/README") ."
"; + } + + $admin_form=""; + + $t = get_markup_template("admin_plugins_details.tpl"); + return replace_macros($t, array( + '$title' => t('Administration'), + '$page' => t('Themes'), + '$toggle' => t('Toggle'), + '$settings' => t('Settings'), + '$baseurl' => $a->get_baseurl(), + + '$plugin' => $theme, + '$status' => $status, + '$action' => $action, + '$info' => get_theme_info($theme), + '$function' => 'themes', + '$admin_form' => $admin_form, + + '$readme' => $readme + )); + } + + + + /** + * List plugins + */ + + $xthemes = array(); + if($themes) { + foreach($themes as $th) { + $xthemes[] = array($th['name'],(($th['allowed']) ? "on" : "off"), get_theme_info($th['name'])); + } + } + + $t = get_markup_template("admin_plugins.tpl"); + return replace_macros($t, array( + '$title' => t('Administration'), + '$page' => t('Themes'), + '$submit' => t('Submit'), + '$baseurl' => $a->get_baseurl(), + '$function' => 'themes', + '$plugins' => $xthemes, + '$experimental' => t('[Experimental]'), + '$unsupported' => t('[Unsupported]') + )); +} + /** * Logs admin page @@ -628,23 +812,36 @@ function admin_page_logs(&$a){ $t = get_markup_template("admin_logs.tpl"); $f = get_config('system','logfile'); - $size = filesize($f); - if($size > 5000000 || $size < 0) - $size = 5000000; $data = ''; - $fp = fopen($f,'r'); - if($fp) { - $seek = fseek($fp,0-$size,SEEK_END); - if($seek === 0) { - fgets($fp); // throw away the first partial line - $data = escape_tags(fread($fp,$size)); - while(! feof($fp)) - $data .= escape_tags(fread($fp,4096)); - } - fclose($fp); - } + if(!file_exists($f)) { + $data = t("Error trying to open $f log file.\r\n
Check to see if file $f exist and is +readable."); + } + else { + $fp = fopen($f, 'r'); + if(!$fp) { + $data = t("Couldn't open $f log file.\r\n
Check to see if file $f is readable."); + } + else { + $fstat = fstat($fp); + $size = $fstat['size']; + if($size != 0) + { + if($size > 5000000 || $size < 0) + $size = 5000000; + $seek = fseek($fp,0-$size,SEEK_END); + if($seek === 0) { + fgets($fp); // throw away the first partial line + $data = escape_tags(fread($fp,$size)); + while(! feof($fp)) + $data .= escape_tags(fread($fp,4096)); + } + } + fclose($fp); + } + } return replace_macros($t, array( '$title' => t('Administration'),