PageShowAction.class.php (1908B)
1 <?php 2 namespace cms\action\page; 3 use cms\action\Method; 4 use cms\action\PageAction; 5 use cms\base\Configuration; 6 use cms\generator\PageGenerator; 7 use cms\generator\Producer; 8 use cms\model\Language; 9 use cms\model\Template; 10 use configuration\Config; 11 use logger\Logger; 12 13 class PageShowAction extends PageAction implements Method { 14 public function view() { 15 // We must overwrite the CSP here. 16 // The output is only shown in an iframe, so there is no security impact to the CMS. 17 // But if the template is using inline JS or CSS, we would break this with a CSP-header. 18 $pageSettingsConfig = new Config( $this->page->getTotalSettings() ); 19 $this->setContentSecurityPolicy($pageSettingsConfig->get('content-security-policy',[]) ); 20 21 $this->page->load(); 22 23 24 Logger::debug("Preview page: ".$this->page->__toString() ); 25 26 $pageContext = $this->createPageContext( Producer::SCHEME_PREVIEW ); 27 28 // HTTP-Header mit Sprachinformation setzen. 29 $language = new Language( $pageContext->languageId); 30 $language->load(); 31 $this->addHeader('Content-Language',$language->isoCode); 32 33 $generator = new PageGenerator( $pageContext ); 34 35 $this->setContentType( $generator->getMimeType() ); 36 37 38 $template = new Template( $this->page->templateid ); 39 $templateModel = $template->loadTemplateModelFor( $pageContext->modelId ); 40 $templateModel->load(); 41 42 // Executing PHP in Pages. 43 $enablePHP = Configuration::subset('publish')->get('enable_php_in_page_content'); 44 if ( ( $enablePHP=='auto' && $templateModel->extension == 'php') || 45 $enablePHP===true ) 46 { 47 ob_start(); 48 require( $generator->getCache()->load()->getFilename() ); 49 $this->setTemplateVar('value',ob_get_contents() ); 50 ob_end_clean(); 51 } 52 else 53 $this->setTemplateVar('value',$generator->getCache()->get()); 54 } 55 56 public function post() { 57 } 58 }