233 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			233 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| namespace Zotlabs\Module\Admin;
 | |
| 
 | |
| 
 | |
| class Themes {
 | |
| 
 | |
| 	function post() {
 | |
| 
 | |
| 		$theme = argv(2);
 | |
| 		if (is_file("view/theme/$theme/php/config.php")){
 | |
| 			require_once("view/theme/$theme/php/config.php");
 | |
| 			// fixme add parent theme if derived
 | |
| 			if (function_exists("theme_admin_post")){
 | |
| 				theme_admin_post($a);
 | |
| 			}
 | |
| 		}
 | |
| 		info(t('Theme settings updated.'));
 | |
| 		if(is_ajax()) 
 | |
| 			return;
 | |
| 	
 | |
| 		goaway(z_root() . '/admin/themes/' . $theme );
 | |
| 	}
 | |
| 
 | |
| 
 | |
| 	
 | |
| 
 | |
| 	
 | |
| 	/**
 | |
| 	 * @brief Themes admin page.
 | |
| 	 *
 | |
| 	 * @return string
 | |
| 	 */
 | |
| 
 | |
| 	function get(){
 | |
| 	
 | |
| 		$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_supported = 1-(intval(file_exists($file . '/.unsupported'))); // Is not used yet
 | |
| 				$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 (\App::$argc == 3){
 | |
| 			$theme = \App::$argv[2];
 | |
| 			if(! is_dir("view/theme/$theme")){
 | |
| 				notice( t("Item not found.") );
 | |
| 				return '';
 | |
| 			}
 | |
| 	
 | |
| 			if (x($_GET,"a") && $_GET['a']=="t"){
 | |
| 				check_form_security_token_redirectOnErr('/admin/themes', 'admin_themes', 't');
 | |
| 	
 | |
| 				// Toggle theme status
 | |
| 	
 | |
| 				$this->toggle_theme($themes, $theme, $result);
 | |
| 				$s = $this->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(z_root() . '/admin/themes' );
 | |
| 			}
 | |
| 	
 | |
| 			// display theme details
 | |
| 			require_once('library/markdown.php');
 | |
| 	
 | |
| 			if ($this->theme_status($themes,$theme)) {
 | |
| 				$status="on"; $action= t("Disable");
 | |
| 			} else {
 | |
| 				$status="off"; $action= t("Enable");
 | |
| 			}
 | |
| 	
 | |
| 			$readme=Null;
 | |
| 			if (is_file("view/theme/$theme/README.md")){
 | |
| 				$readme = file_get_contents("view/theme/$theme/README.md");
 | |
| 				$readme = Markdown($readme);
 | |
| 			} else if (is_file("view/theme/$theme/README")){
 | |
| 				$readme = "<pre>". file_get_contents("view/theme/$theme/README") ."</pre>";
 | |
| 			}
 | |
| 	
 | |
| 			$admin_form = '';
 | |
| 			if (is_file("view/theme/$theme/php/config.php")){
 | |
| 				require_once("view/theme/$theme/php/config.php");
 | |
| 				if(function_exists("theme_admin")){
 | |
| 					$admin_form = theme_admin($a);
 | |
| 				}
 | |
| 			}
 | |
| 	
 | |
| 			$screenshot = array( get_theme_screenshot($theme), t('Screenshot'));
 | |
| 			if(! stristr($screenshot[0],$theme))
 | |
| 				$screenshot = null;
 | |
| 	
 | |
| 			$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' => z_root(),
 | |
| 			
 | |
| 				'$plugin' => $theme,
 | |
| 				'$status' => $status,
 | |
| 				'$action' => $action,
 | |
| 				'$info' => get_theme_info($theme),
 | |
| 				'$function' => 'themes',
 | |
| 				'$admin_form' => $admin_form,
 | |
| 				'$str_author' => t('Author: '),
 | |
| 				'$str_maintainer' => t('Maintainer: '),
 | |
| 				'$screenshot' => $screenshot,
 | |
| 				'$readme' => $readme,
 | |
| 	
 | |
| 				'$form_security_token' => get_form_security_token('admin_themes'),
 | |
| 			));
 | |
| 		}
 | |
| 	
 | |
| 		/*
 | |
| 		 * List themes
 | |
| 		 */
 | |
| 	
 | |
| 		$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' => z_root(),
 | |
| 			'$function' => 'themes',
 | |
| 			'$plugins' => $xthemes,
 | |
| 			'$experimental' => t('[Experimental]'),
 | |
| 			'$unsupported' => t('[Unsupported]'),
 | |
| 			'$form_security_token' => get_form_security_token('admin_themes'),
 | |
| 		));
 | |
| 	}
 | |
| 	
 | |
| 
 | |
| 
 | |
| 	/**
 | |
| 	 * @param array $themes
 | |
| 	 * @param string $th
 | |
| 	 * @param int $result
 | |
| 	 */
 | |
| 	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;
 | |
| 				}
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| 	
 | |
| 	/**
 | |
| 	 * @param array $themes
 | |
| 	 * @param string $th
 | |
| 	 * @return int
 | |
| 	 */
 | |
| 	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;
 | |
| 	}
 | |
| 	
 | |
| 	
 | |
| 	/**
 | |
| 	 * @param array $themes
 | |
| 	 * @return string
 | |
| 	 */
 | |
| 	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;
 | |
| 	}
 | |
| 	
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| } |