openrat-cms

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

commit a953fa3d5ced5e73a764364e15b9289f817a75df
parent acc18085155bbc8696959c8fd0525eb949d4e830
Author: Jan Dankert <develop@jandankert.de>
Date:   Tue, 14 Jun 2022 01:11:09 +0200

New: Support for ESI templates; some bugfixes while generating the 'insert' element type.

Diffstat:
Mmodules/cms/action/element/ElementAdvancedAction.class.php | 1+
Mmodules/cms/generator/BaseContext.class.php | 4++++
Mmodules/cms/generator/PageContext.class.php | 4++++
Mmodules/cms/generator/ValueGenerator.class.php | 165++++++++++++++++++++++++++++---------------------------------------------------
Mmodules/cms/model/ModelBase.class.php | 5+++++
Mmodules/language/Language_CN.class.php | 1+
Mmodules/language/Language_DE.class.php | 1+
Mmodules/language/Language_EN.class.php | 1+
Mmodules/language/Language_ES.class.php | 1+
Mmodules/language/Language_FR.class.php | 1+
Mmodules/language/Language_IT.class.php | 1+
Mmodules/language/Language_RU.class.php | 1+
Mmodules/language/Messages.class.php | 1+
Mmodules/language/language.yml | 3+++
14 files changed, 84 insertions(+), 106 deletions(-)

diff --git a/modules/cms/action/element/ElementAdvancedAction.class.php b/modules/cms/action/element/ElementAdvancedAction.class.php @@ -179,6 +179,7 @@ class ElementAdvancedAction extends ElementAction implements Method { $subtypes = [ ValueGenerator::INSERT_INLINE, ValueGenerator::INSERT_SSI, + ValueGenerator::INSERT_ESI, ]; $convertToLang = true; break; diff --git a/modules/cms/generator/BaseContext.class.php b/modules/cms/generator/BaseContext.class.php @@ -4,6 +4,7 @@ namespace cms\generator; +use cms\generator\link\LinkFormat; use cms\generator\link\PreviewLink; use cms\generator\link\PublicLink; @@ -20,6 +21,9 @@ abstract class BaseContext public abstract function getObjectId(); + /** + * @return LinkFormat + */ public function getLinkScheme() { switch( $this->scheme ) { diff --git a/modules/cms/generator/PageContext.class.php b/modules/cms/generator/PageContext.class.php @@ -20,6 +20,10 @@ class PageContext extends BaseContext */ public $sourceObjectId; + /** + * The page which should be generated. + * @var int + */ public $objectId; /** diff --git a/modules/cms/generator/ValueGenerator.class.php b/modules/cms/generator/ValueGenerator.class.php @@ -99,6 +99,7 @@ class ValueGenerator extends BaseGenerator const INFO_DATE_SAVED = 'date_saved'; const INFO_DATE_CREATED = 'date_created'; + const INSERT_ESI = 'esi'; const INSERT_SSI = 'ssi'; const INSERT_INLINE = 'inline'; @@ -191,123 +192,76 @@ class ValueGenerator extends BaseGenerator { case Element::ELEMENT_TYPE_INSERT: - $objectid = $value->linkToObjectId; - - if ( intval($objectid) == 0 ) - $objectid = $element->defaultObjectId; - if ( ! BaseObject::available( $objectid) ) - return; + /** + * @param $pageContext PageContext + * @param $element Element + * @param $oid integer + * @return string + */ + function generatePageValue($pageContext, $element, $oid ) { - $object = new BaseObject( $objectid ); - $object->objectLoadRaw(); + $o = new BaseObject( $oid ); + $o->load(); - if ( $object->isFolder ) - { - if ( false&&$value->publisher->isSimplePreview() ) // FIXME - { - $f = new Folder( $objectid ); - $f->load(); - $inhalt = $f->filename; - unset( $f ); - } - else + switch( $o->typeid ) { - if ( $objectid != $page->objectid ) // Rekursion vermeiden - { - $f = new Folder( $objectid ); - foreach( $f->getObjectIds() as $oid ) - { - if ( $oid != $page->objectid ) // Rekursion vermeiden - { - switch( $element->subtype ) - { - case '': - case self::INSERT_INLINE: - $o = new BaseObject( $oid ); - $o->load(); - switch( $o->typeid ) - { - case BaseObject::TYPEID_PAGE: - $newPageContext = clone $pageContext; - $newPageContext->objectId = $oid; - $pageGenerator = new PageGenerator( $newPageContext ); - - $inhalt = $pageGenerator->getCache()->get(); - //$inhalt = $oid; - - break; - case BaseObject::TYPEID_LINK: - $l = new Link( $oid ); - $l->load(); - $op = new BaseObject( $l->linkedObjectId ); - $op->load(); - if ( $op->isPage ) - { - $newPageContext = clone $pageContext; - $newPageContext->objectId = $l->linkedObjectId; - $pageGenerator = new PageGenerator( $newPageContext ); - - $inhalt .= $pageGenerator->getCache()->get(); - } - break; - } - break; - - case self::INSERT_SSI: - $linkScheme = $pageContext->getLinkScheme(); - $inhalt .= '<!--#include virtual="'.$linkScheme->linkToObject( $page,new BaseObject($oid)).'" -->'; - break; - - default: - $inhalt = '?'.$element->subtype.'?'; - } - } - else throw new \LogicException('FATAL: recursion detected'); + case BaseObject::TYPEID_FOLDER: + $f = new Folder( $oid ); + $value = ''; + foreach( $f->getObjectIds() as $childOid ) { + $value .= generatePageValue( $pageContext,$element,$childOid ); } - } - else throw new LogicException('FATAL: recursion detected'); - } - } - elseif ( $object->isPage ) - { - if ( false&&$value->publisher->isSimplePreview() ) - { - $p = new Page( $objectid ); - $p->load(); - $inhalt = $p->filename; - unset( $p ); - } - else - { - if ( $objectid != $page->objectid ) // Rekursion vermeiden - { - switch( $element->subtype ) + return $value; + + case BaseObject::TYPEID_PAGE: + + $subtype = $element->subtype; + if ( $pageContext->scheme == Producer::SCHEME_PREVIEW ) + $subtype = null; // In preview the SSI/ESI are not available. + + switch( $subtype ) { - case '': - case 'inline': + case ValueGenerator::INSERT_INLINE: + default: + $newPageContext = clone $pageContext; - $newPageContext->objectId = $objectid; + $newPageContext->objectId = $oid; $pageGenerator = new PageGenerator( $newPageContext ); - $inhalt = $pageGenerator->getCache()->get(); - unset( $p ); - break; + return $pageGenerator->getCache()->get(); - case 'ssi': + case ValueGenerator::INSERT_SSI: $linkScheme = $pageContext->getLinkScheme(); - $inhalt = '<!--#include virtual="'.$linkScheme->linkToObject( $page,new BaseObject($objectid)).'" -->'; - break; + return '<!--#include virtual="'.$linkScheme->linkToObject( new BaseObject($pageContext->sourceObjectId),(new BaseObject($oid))->load()).'" -->'; - default: - $inhalt = '?'.$element->subtype.'?'; - break; + case ValueGenerator::INSERT_ESI: + $linkScheme = $pageContext->getLinkScheme(); + return '<esi:include src="'.$linkScheme->linkToObject( new BaseObject($pageContext->sourceObjectId),(new BaseObject($oid))->load()).'"/>'; } - } - else throw new LogicException('FATAL: recursion detected'); + + case BaseObject::TYPEID_LINK: + $l = new Link( $oid ); + $l->load(); + + return generatePageValue( $pageContext,$element,$l->linkedObjectId ); + default: + return ''; } + } + + $objectid = $value->linkToObjectId; + + if ( ! $objectid ) + $objectid = $element->defaultObjectId; + + if ( ! BaseObject::available( $objectid) ) + break; + + $inhalt = generatePageValue( $pageContext,$element,$objectid ); + if ( false&& $value->publisher->isSimplePreview() ) { $inhalt = strip_tags( $inhalt ); @@ -409,9 +363,8 @@ class ValueGenerator extends BaseGenerator $template = new Template( $page->templateid ); $elementId = array_search( $linkElementName, $template->getElementNames() ); - - $element = new Element($elementId); - $element->load(); + $linkedElement = new Element($elementId); + $linkedElement->load(); $pageContent = new PageContent(); $pageContent->pageId = $page->pageid; @@ -434,7 +387,7 @@ class ValueGenerator extends BaseGenerator $linkedObject = new BaseObject( $objectid ); $linkedObject->load(); - switch( $element->subtype ) + switch( $linkedElement->subtype ) { case self::LINKINFO_WIDTH: $f = new Image( $objectid ); @@ -611,7 +564,7 @@ class ValueGenerator extends BaseGenerator default: $inhalt = ''; - Logger::error('Subtype for linkinfo not implemented:'.$element->subtype); // should not happen + Logger::warn('Subtype \''.$linkedElement->subtype.'\' for element \''.$linkedElement.'\' not implemented'); // should not happen } break; diff --git a/modules/cms/model/ModelBase.class.php b/modules/cms/model/ModelBase.class.php @@ -88,4 +88,9 @@ abstract class ModelBase $this->save(); } + + + public function __toString() { + return $this->getId().':'.$this->getName(); + } } diff --git a/modules/language/Language_CN.class.php b/modules/language/Language_CN.class.php @@ -225,6 +225,7 @@ public function get() { return [ 'EL_INSERT'=>'Insert', 'EL_INSERT_INLINE'=>'Internal Insert while publishing', 'EL_INSERT_SSI'=>'Insert via Serverside-Include (SSI)', +'EL_INSERT_ESI'=>'Insert via Edge Side Include (ESI)', 'EL_LINKDATE_DATE_CREATED'=>'liànjiē duìxiàng: Creation-Date/Time', 'EL_LINKDATE_DATE_PUBLISHED'=>'liànjiē duìxiàng: Rìqí/shíjiān qù chūbǎn', 'EL_LINKDATE_DATE_SAVED'=>'liànjiē duìxiàng: Rìqí/shíjiān qù wǎnjiù', diff --git a/modules/language/Language_DE.class.php b/modules/language/Language_DE.class.php @@ -225,6 +225,7 @@ public function get() { return [ 'EL_INSERT'=>'Einfügen', 'EL_INSERT_INLINE'=>'Internes Einfügen bei Veröffentlichung', 'EL_INSERT_SSI'=>'Einfügen per Serverside-Include (SSI)', +'EL_INSERT_ESI'=>'Einfügen per Edge Side Include (ESI)', 'EL_LINKDATE_DATE_CREATED'=>'Verlinktes Objekt: Datum/Zeit der Erstellung', 'EL_LINKDATE_DATE_PUBLISHED'=>'Verlinktes Objekt: Datum/Zeit der Veröffentlichung', 'EL_LINKDATE_DATE_SAVED'=>'Verlinktes Objekt: Datum/Zeit der letzten Speicherung', diff --git a/modules/language/Language_EN.class.php b/modules/language/Language_EN.class.php @@ -225,6 +225,7 @@ public function get() { return [ 'EL_INSERT'=>'Insert', 'EL_INSERT_INLINE'=>'Internal Insert while publishing', 'EL_INSERT_SSI'=>'Insert via Serverside-Include (SSI)', +'EL_INSERT_ESI'=>'Insert via Edge Side Include (ESI)', 'EL_LINKDATE_DATE_CREATED'=>'Linked object: Creation-Date/Time', 'EL_LINKDATE_DATE_PUBLISHED'=>'Linked object: Date/Time of last publishing', 'EL_LINKDATE_DATE_SAVED'=>'Linked object: Date/Time of last save', diff --git a/modules/language/Language_ES.class.php b/modules/language/Language_ES.class.php @@ -225,6 +225,7 @@ public function get() { return [ 'EL_INSERT'=>'Insert', 'EL_INSERT_INLINE'=>'Internal Insert while publishing', 'EL_INSERT_SSI'=>'Insert via Serverside-Include (SSI)', +'EL_INSERT_ESI'=>'Insert via Edge Side Include (ESI)', 'EL_LINKDATE_DATE_CREATED'=>'Linked object: Creation-Date/Time', 'EL_LINKDATE_DATE_PUBLISHED'=>'Linked object: Date/Time of last publishing', 'EL_LINKDATE_DATE_SAVED'=>'Linked object: Date/Time of last save', diff --git a/modules/language/Language_FR.class.php b/modules/language/Language_FR.class.php @@ -225,6 +225,7 @@ public function get() { return [ 'EL_INSERT'=>'Insert', 'EL_INSERT_INLINE'=>'Internal Insert while publishing', 'EL_INSERT_SSI'=>'Insert via Serverside-Include (SSI)', +'EL_INSERT_ESI'=>'Insert via Edge Side Include (ESI)', 'EL_LINKDATE_DATE_CREATED'=>'Linked object: Creation-Date/Time', 'EL_LINKDATE_DATE_PUBLISHED'=>'Linked object: Date/Time of last publishing', 'EL_LINKDATE_DATE_SAVED'=>'Linked object: Date/Time of last save', diff --git a/modules/language/Language_IT.class.php b/modules/language/Language_IT.class.php @@ -225,6 +225,7 @@ public function get() { return [ 'EL_INSERT'=>'Insert', 'EL_INSERT_INLINE'=>'Internal Insert while publishing', 'EL_INSERT_SSI'=>'Insert via Serverside-Include (SSI)', +'EL_INSERT_ESI'=>'Insert via Edge Side Include (ESI)', 'EL_LINKDATE_DATE_CREATED'=>'Linked object: Creation-Date/Time', 'EL_LINKDATE_DATE_PUBLISHED'=>'Linked object: Date/Time of last publishing', 'EL_LINKDATE_DATE_SAVED'=>'Linked object: Date/Time of last save', diff --git a/modules/language/Language_RU.class.php b/modules/language/Language_RU.class.php @@ -225,6 +225,7 @@ public function get() { return [ 'EL_INSERT'=>'Insert', 'EL_INSERT_INLINE'=>'Internal Insert while publishing', 'EL_INSERT_SSI'=>'Insert via Serverside-Include (SSI)', +'EL_INSERT_ESI'=>'Insert via Edge Side Include (ESI)', 'EL_LINKDATE_DATE_CREATED'=>'Linked object: Creation-Date/Time', 'EL_LINKDATE_DATE_PUBLISHED'=>'Linked object: Date/Time of last publishing', 'EL_LINKDATE_DATE_SAVED'=>'Linked object: Date/Time of last save', diff --git a/modules/language/Messages.class.php b/modules/language/Messages.class.php @@ -225,6 +225,7 @@ class Messages { const EL_INSERT = 'EL_INSERT'; const EL_INSERT_INLINE = 'EL_INSERT_INLINE'; const EL_INSERT_SSI = 'EL_INSERT_SSI'; + const EL_INSERT_ESI = 'EL_INSERT_ESI'; const EL_LINKDATE_DATE_CREATED = 'EL_LINKDATE_DATE_CREATED'; const EL_LINKDATE_DATE_PUBLISHED = 'EL_LINKDATE_DATE_PUBLISHED'; const EL_LINKDATE_DATE_SAVED = 'EL_LINKDATE_DATE_SAVED'; diff --git a/modules/language/language.yml b/modules/language/language.yml @@ -1078,6 +1078,9 @@ EL_INSERT_INLINE: EL_INSERT_SSI: de: Einfügen per Serverside-Include (SSI) en: Insert via Serverside-Include (SSI) +EL_INSERT_ESI: + de: Einfügen per Edge Side Include (ESI) + en: Insert via Edge Side Include (ESI) EL_LINKDATE_DATE_CREATED: de: 'Verlinktes Objekt: Datum/Zeit der Erstellung' en: 'Linked object: Creation-Date/Time'