mirror of
				https://github.com/gtbu/Typesetter-5.3-p8.git
				synced 2025-11-04 14:58:28 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			360 lines
		
	
	
	
		
			8.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			360 lines
		
	
	
	
		
			8.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
 | 
						|
namespace gp{
 | 
						|
 | 
						|
	defined('is_running') or die('Not an entry point...');
 | 
						|
 | 
						|
 | 
						|
	/**
 | 
						|
	 *	Objects of this class handle the display of standard CMS pages
 | 
						|
	 *  The classes for admin pages and special pages extend the display class
 | 
						|
	 *
 | 
						|
	 */
 | 
						|
	class Page extends Base{
 | 
						|
		public $pagetype			= 'display';
 | 
						|
		public $gp_index;
 | 
						|
		public $requested;
 | 
						|
		public $title;
 | 
						|
		public $label;
 | 
						|
		public $file;
 | 
						|
		public $contentBuffer;
 | 
						|
		public $TitleInfo;
 | 
						|
		public $fileType			= '';
 | 
						|
		public $ajaxReplace			= array('#gpx_content');
 | 
						|
		public $admin_links			= array();
 | 
						|
		public $visibility			= null;
 | 
						|
		public $file_sections		= array();
 | 
						|
		public $meta_data			= array();
 | 
						|
		public $lang;
 | 
						|
		public $language;
 | 
						|
 | 
						|
		public $file_stats			= array();
 | 
						|
		public $fileModTime			= 0;
 | 
						|
 | 
						|
		//layout & theme
 | 
						|
		public $theme_name			= false;
 | 
						|
		public $theme_color			= false;
 | 
						|
		public $get_theme_css		= true;
 | 
						|
		public $theme_dir;
 | 
						|
		public $theme_path;
 | 
						|
		public $theme_rel;
 | 
						|
		public $theme_addon_id		= false;
 | 
						|
		public $menu_css_ordered	= true;
 | 
						|
		public $menu_css_indexed	= true;
 | 
						|
		public $gpLayout;
 | 
						|
 | 
						|
 | 
						|
		//<head> content
 | 
						|
		public $head				= '';
 | 
						|
		public $head_js				= array();
 | 
						|
		public $head_script			= '';
 | 
						|
		public $jQueryCode			= false;
 | 
						|
		public $admin_js			= false;
 | 
						|
		public $head_force_inline	= false;
 | 
						|
		public $meta_description	= '';
 | 
						|
		public $meta_keywords		= array();
 | 
						|
 | 
						|
		//css arrays
 | 
						|
		public $css_user			= array();
 | 
						|
		public $css_admin			= array();
 | 
						|
 | 
						|
 | 
						|
 | 
						|
		/* @deprecated 3.5 */
 | 
						|
		public $theme_is_addon		= false;
 | 
						|
 | 
						|
 | 
						|
		public function __construct($title, $type){
 | 
						|
			global $config, $languages;
 | 
						|
 | 
						|
			$this->requested	= $title;
 | 
						|
			$this->title		= $title;
 | 
						|
			$this->lang			= $config['language'];
 | 
						|
 | 
						|
			if( isset($languages[$this->lang]) ){
 | 
						|
				$this->language		= $languages[$this->lang];
 | 
						|
			}
 | 
						|
 | 
						|
			$this->head			.= '<link rel="canonical" href="'.\gp\tool::GetUrl($title).'" />'."\n";
 | 
						|
		}
 | 
						|
 | 
						|
 | 
						|
		/**
 | 
						|
		 * Get page content or do redirect for non-existant titles
 | 
						|
		 * see special_missing.php and /Admin/Settings/Missing
 | 
						|
		 */
 | 
						|
		public function Error_404(){
 | 
						|
			ob_start();
 | 
						|
 | 
						|
			$args		= array('page'=>$this);
 | 
						|
			$missing	= new \gp\special\Missing($args);
 | 
						|
			$missing->RunScript();
 | 
						|
 | 
						|
			$this->contentBuffer = ob_get_clean();
 | 
						|
		}
 | 
						|
 | 
						|
		public function SetVars(){
 | 
						|
			global $gp_index, $gp_titles, $gp_menu;
 | 
						|
 | 
						|
			if( !isset($gp_index[$this->title]) ){
 | 
						|
				$this->Error_404();
 | 
						|
				return false;
 | 
						|
			}
 | 
						|
 | 
						|
			$this->gp_index		= $gp_index[$this->title];
 | 
						|
			$this->TitleInfo	=& $gp_titles[$this->gp_index]; //so changes made by rename are seen
 | 
						|
			$this->label		= \gp\tool::GetLabel($this->title);
 | 
						|
			$this->file			= \gp\tool\Files::PageFile($this->title);
 | 
						|
 | 
						|
			if( !$this->CheckVisibility() ){
 | 
						|
				return false;
 | 
						|
			}
 | 
						|
 | 
						|
			\gp\tool\Plugins::Action('PageSetVars');
 | 
						|
 | 
						|
			return true;
 | 
						|
		}
 | 
						|
 | 
						|
 | 
						|
 | 
						|
		/**
 | 
						|
		 * Check the page's visibility
 | 
						|
		 *
 | 
						|
		 */
 | 
						|
		public function CheckVisibility(){
 | 
						|
			global $gp_titles;
 | 
						|
 | 
						|
			if( isset($gp_titles[$this->gp_index]['vis']) ){
 | 
						|
				$this->visibility = $gp_titles[$this->gp_index]['vis'];
 | 
						|
			}
 | 
						|
			if( !\gp\tool::LoggedIn() && $this->visibility ){
 | 
						|
				$this->Error_404();
 | 
						|
				return false;
 | 
						|
			}
 | 
						|
 | 
						|
			return true;
 | 
						|
		}
 | 
						|
 | 
						|
 | 
						|
		public function RunScript(){
 | 
						|
 | 
						|
			if( !$this->SetVars() ){
 | 
						|
				return;
 | 
						|
			}
 | 
						|
 | 
						|
			//allow addons to effect page actions and how a page is displayed
 | 
						|
			$cmd = \gp\tool::GetCommand();
 | 
						|
			$cmd_after = \gp\tool\Plugins::Filter('PageRunScript',array($cmd));
 | 
						|
			if( $cmd !== $cmd_after ){
 | 
						|
				$cmd = $cmd_after;
 | 
						|
				if( $cmd === 'return' ){
 | 
						|
					return;
 | 
						|
				}
 | 
						|
			}
 | 
						|
 | 
						|
			$this->GetFile();
 | 
						|
 | 
						|
			$this->contentBuffer = \gp\tool\Output\Sections::Render($this->file_sections,$this->title,$this->file_stats);
 | 
						|
		}
 | 
						|
 | 
						|
		/**
 | 
						|
		 * Retreive the data file for the current title and update the data if necessary
 | 
						|
		 *
 | 
						|
		 */
 | 
						|
		public function GetFile(){
 | 
						|
 | 
						|
			$this->file_sections	= \gp\tool\Files::Get($this->file,'file_sections');
 | 
						|
			$this->meta_data		= \gp\tool\Files::$last_meta;
 | 
						|
			$this->fileModTime		= \gp\tool\Files::$last_modified;
 | 
						|
			$this->file_stats		= \gp\tool\Files::$last_stats;
 | 
						|
 | 
						|
			if( count($this->file_sections) == 0 ){
 | 
						|
				$this->file_sections[0] = array(
 | 
						|
					'type' => 'text',
 | 
						|
					'content' => '<p>Oops, this page no longer has any content.</p>',
 | 
						|
					);
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
 | 
						|
		/**
 | 
						|
		 * Set the page's theme name and path information according to the specified $layout
 | 
						|
		 * If $layout is not found, use the installation's default theme
 | 
						|
		 *
 | 
						|
		 */
 | 
						|
		public function SetTheme($layout=false){
 | 
						|
			global $dataDir;
 | 
						|
 | 
						|
			if( $layout === false ){
 | 
						|
				$layout = self::OrConfig($this->gp_index,'gpLayout');
 | 
						|
			}
 | 
						|
 | 
						|
			$layout_info = \gp\tool::LayoutInfo($layout);
 | 
						|
 | 
						|
 | 
						|
			if( !$layout_info ){
 | 
						|
				$default_theme		= explode('/',gp_default_theme);
 | 
						|
				$this->gpLayout		= false;
 | 
						|
				$this->theme_name	= $default_theme[0];
 | 
						|
				$this->theme_color	= $default_theme[1];
 | 
						|
				$this->theme_rel	= '/themes/'.$this->theme_name.'/'.$this->theme_color;
 | 
						|
				$this->theme_dir	= $dataDir.'/themes/'.$this->theme_name;
 | 
						|
 | 
						|
			}else{
 | 
						|
				$this->gpLayout		= $layout;
 | 
						|
				$this->theme_name	= $layout_info['theme_name'];
 | 
						|
				$this->theme_color	= $layout_info['theme_color'];
 | 
						|
				$this->theme_rel	= $layout_info['path'];
 | 
						|
				$this->theme_dir	= $layout_info['dir'];
 | 
						|
 | 
						|
				if( isset($layout_info['addon_id']) ){
 | 
						|
					$this->theme_addon_id = $layout_info['addon_id'];
 | 
						|
				}
 | 
						|
				$this->theme_is_addon = $layout_info['is_addon'];//if installed in /themes or /data/_themes
 | 
						|
 | 
						|
				//css preferences
 | 
						|
				if( isset($layout_info['menu_css_ordered']) && !$layout_info['menu_css_ordered'] ){
 | 
						|
					$this->menu_css_ordered = false;
 | 
						|
				}
 | 
						|
				if( isset($layout_info['menu_css_indexed']) && !$layout_info['menu_css_indexed'] ){
 | 
						|
					$this->menu_css_indexed = false;
 | 
						|
				}
 | 
						|
			}
 | 
						|
 | 
						|
			$this->theme_path = \gp\tool::GetDir($this->theme_rel);
 | 
						|
 | 
						|
		}
 | 
						|
 | 
						|
 | 
						|
		/**
 | 
						|
		 * Return the most relevant configuration value for a configuration option ($var)
 | 
						|
		 * Check configuration for a page ($id) first, then parent pages (determined by main menu), then the site $config
 | 
						|
		 *
 | 
						|
		 * @return mixed
 | 
						|
		 *
 | 
						|
		 */
 | 
						|
		public static function OrConfig($id,$var){
 | 
						|
			global $config, $gp_titles;
 | 
						|
 | 
						|
			if( $id ){
 | 
						|
				if( !empty($gp_titles[$id][$var]) ){
 | 
						|
					return $gp_titles[$id][$var];
 | 
						|
				}
 | 
						|
 | 
						|
				if( self::ParentConfig($id,$var,$value) ){
 | 
						|
					return $value;
 | 
						|
				}
 | 
						|
			}
 | 
						|
 | 
						|
			if( isset($config[$var]) ){
 | 
						|
				return $config[$var];
 | 
						|
			}
 | 
						|
 | 
						|
			return false;
 | 
						|
		}
 | 
						|
 | 
						|
		/**
 | 
						|
		 * Traverse the main menu upwards looking for a configuration setting for $var
 | 
						|
		 * Start at the title represented by $checkId
 | 
						|
		 * Set $value to the configuration setting if a parent page has the configuration setting
 | 
						|
		 *
 | 
						|
		 * @return bool
 | 
						|
		 */
 | 
						|
		public static function ParentConfig($checkId,$var,&$value){
 | 
						|
			global $gp_titles,$gp_menu;
 | 
						|
 | 
						|
			$parents = \gp\tool::Parents($checkId,$gp_menu);
 | 
						|
			foreach($parents as $parent_index){
 | 
						|
				if( !empty($gp_titles[$parent_index][$var]) ){
 | 
						|
					$value = $gp_titles[$parent_index][$var];
 | 
						|
					return true;
 | 
						|
				}
 | 
						|
			}
 | 
						|
			return false;
 | 
						|
		}
 | 
						|
 | 
						|
 | 
						|
 | 
						|
		/*
 | 
						|
		 * Get functions
 | 
						|
		 *
 | 
						|
		 * Missing:
 | 
						|
		 *		$#sitemap#$
 | 
						|
		 * 		different menu output
 | 
						|
		 *
 | 
						|
		 */
 | 
						|
 | 
						|
		public function GetSiteLabel(){
 | 
						|
			global $config;
 | 
						|
			echo $config['title'];
 | 
						|
		}
 | 
						|
		public function GetSiteLabelLink(){
 | 
						|
			global $config;
 | 
						|
			echo \gp\tool::Link('',$config['title']);
 | 
						|
		}
 | 
						|
		public function GetPageLabel(){
 | 
						|
			echo $this->label;
 | 
						|
		}
 | 
						|
 | 
						|
		public function GetContent(){
 | 
						|
 | 
						|
			$this->GetGpxContent();
 | 
						|
 | 
						|
			echo '<div id="gpAfterContent">';
 | 
						|
			\gp\tool\Output::Get('AfterContent');
 | 
						|
			\gp\tool\Plugins::Action('GetContent_After');
 | 
						|
			echo '</div>';
 | 
						|
		}
 | 
						|
 | 
						|
		public function GetGpxContent(){
 | 
						|
			$class = '';
 | 
						|
			if( isset($this->meta_data['file_number']) ){
 | 
						|
				$class = 'filenum-'.$this->meta_data['file_number'];
 | 
						|
			}
 | 
						|
 | 
						|
			if( $this->pagetype == 'display' ){
 | 
						|
				$class .= ' gp_page_display';
 | 
						|
			}
 | 
						|
 | 
						|
			echo '<div id="gpx_content" class="'.$class.' cf">';
 | 
						|
 | 
						|
			echo $this->contentBuffer;
 | 
						|
 | 
						|
 | 
						|
			echo '</div>';
 | 
						|
		}
 | 
						|
 | 
						|
		/* Deprecated functions
 | 
						|
		 */
 | 
						|
		public function GetHead(){
 | 
						|
			trigger_error('deprecated functions');
 | 
						|
			\gp\tool\Output::GetHead();
 | 
						|
		}
 | 
						|
		public function GetExtra($area,$info=array()){
 | 
						|
			trigger_error('deprecated functions');
 | 
						|
			echo \gp\tool\Output\Extra::GetExtra($area);
 | 
						|
		}
 | 
						|
		public function GetMenu(){
 | 
						|
			trigger_error('deprecated functions');
 | 
						|
			\gp\tool\Output::GetMenu();
 | 
						|
		}
 | 
						|
		public function GetFullMenu(){
 | 
						|
			trigger_error('deprecated functions');
 | 
						|
			\gp\tool\Output::GetFullMenu();
 | 
						|
		}
 | 
						|
		public function GetAllGadgets(){
 | 
						|
			trigger_error('deprecated functions');
 | 
						|
			\gp\tool\Output::GetAllGadgets();
 | 
						|
		}
 | 
						|
		public function GetAdminLink(){
 | 
						|
			trigger_error('deprecated functions');
 | 
						|
			\gp\tool\Output::GetAdminLink();
 | 
						|
		}
 | 
						|
 | 
						|
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
namespace{
 | 
						|
	class display extends \gp\Page{}
 | 
						|
}
 |