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:
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'