commit 0c16624882676c069382ff504f38dfcf00c86bd5
parent ca93e6b2de6d430c3f83fad66553d147d761987f
Author: Jan Dankert <develop@jandankert.de>
Date: Tue, 23 Feb 2021 22:59:12 +0100
New: Use a default value from a linked page.
Diffstat:
5 files changed, 108 insertions(+), 22 deletions(-)
diff --git a/modules/cms/generator/BaseGenerator.class.php b/modules/cms/generator/BaseGenerator.class.php
@@ -4,8 +4,15 @@
namespace cms\generator;
+use util\cache\Cache;
use util\cache\FileCache;
+
+/**
+ * Base class for generators.
+ *
+ * @package cms\generator
+ */
abstract class BaseGenerator implements Generator
{
/**
@@ -14,7 +21,8 @@ abstract class BaseGenerator implements Generator
protected $context;
/**
- * @return FileCache
+ * Every generator has a cache for its value.
+ * @return Cache
*/
public function getCache() {
@@ -23,5 +31,11 @@ abstract class BaseGenerator implements Generator
}, 0 );
}
+
+ /**
+ * Generates a value.
+ *
+ * @return mixed
+ */
protected abstract function generate();
}
\ No newline at end of file
diff --git a/modules/cms/generator/ValueGenerator.class.php b/modules/cms/generator/ValueGenerator.class.php
@@ -24,6 +24,7 @@ use logger\Logger;
use LogicException;
use util\Code;
use util\exception\GeneratorException;
+use util\exception\ObjectNotFoundException;
use util\exception\PublisherException;
use util\Html;
use util\Http;
@@ -31,11 +32,15 @@ use util\Text;
use util\Transformer;
+/**
+ * Generates a value.
+ */
class ValueGenerator extends BaseGenerator
{
/**
- * PageGenerator constructor.
+ * Constructor.
+ *
* @param $valueContext ValueContext
*/
public function __construct($valueContext )
@@ -57,7 +62,7 @@ class ValueGenerator extends BaseGenerator
* Hier findet die eigentliche Bereitstellung des Inhaltes statt, zu
* jedem Elementtyp wird ein Inhalt ermittelt.
*
- * @return void (aber Eigenschaft 'value' wird gesetzt).
+ * @return string
*/
private function generateValue()
{
@@ -73,23 +78,28 @@ class ValueGenerator extends BaseGenerator
$value->elementid = $this->context->elementid;
$value->languageid = $pageContext->languageId;
$value->load();
+ $value->element = $element;
- $inhalt = '';
-
- // Inhalt ist mit anderer Seite verkn�pft.
- if ( in_array($element->typeid,[Element::ELEMENT_TYPE_TEXT,Element::ELEMENT_TYPE_LONGTEXT,Element::ELEMENT_TYPE_DATE,Element::ELEMENT_TYPE_NUMBER]) && intval($value->linkToObjectId) != 0 && !$value->isLink )
+ if ( ! $this->isValueHasContent( $value ) )
{
- $pageContext = clone $this->context->pageContext;
- $pageContext->objectId = $value->linkToObjectId;
+ $pageForDefaultValue = $page->getPageAsDefault();
- $valueContext = clone $this->context;
- $valueContext->pageContext = $pageContext;
+ if ( $pageForDefaultValue ) {
- $generator = new ValueGenerator( $valueContext );
+ $pageContext = clone $this->context->pageContext;
+ $pageContext->objectId = $pageForDefaultValue->objectid;
- return $generator->getCache()->get();
+ $valueContext = clone $this->context;
+ $valueContext->pageContext = $pageContext;
+
+ $generator = new ValueGenerator( $valueContext );
+
+ return $generator->getCache()->get();
+ }
}
+ $inhalt = '';
+
switch( $element->typeid )
{
case Element::ELEMENT_TYPE_INSERT:
@@ -1012,6 +1022,41 @@ class ValueGenerator extends BaseGenerator
return $inhalt;
}
+
+ /**
+ * Determines if the value has meaningful content
+ *
+ * @param $value Value
+ */
+ protected function isValueHasContent( $value ) {
+
+ return in_array($value->element->typeid,[
+ Element::ELEMENT_TYPE_TEXT,
+ Element::ELEMENT_TYPE_LONGTEXT,
+ Element::ELEMENT_TYPE_SELECT,
+ ]) && $value->text != '' && $value->text != null ||
+ in_array($value->element->typeid,[
+ Element::ELEMENT_TYPE_NUMBER
+ ]) && $value->number != null ||
+ in_array($value->element->typeid,[
+ Element::ELEMENT_TYPE_LINK,
+ Element::ELEMENT_TYPE_INSERT,
+ ]) && $value->linkToObjectId != null && $value->linkToObjectId != 0 ||
+ in_array($value->element->typeid,[
+ Element::ELEMENT_TYPE_DATE,
+ ]) && $value->date != null && $value->date != 0 ||
+ in_array($value->element->typeid,[
+ Element::ELEMENT_TYPE_CODE,
+ Element::ELEMENT_TYPE_COPY,
+ Element::ELEMENT_TYPE_DYNAMIC,
+ Element::ELEMENT_TYPE_INFO,
+ Element::ELEMENT_TYPE_INFODATE,
+ Element::ELEMENT_TYPE_LINKDATE,
+ Element::ELEMENT_TYPE_LINKINFO,
+ ]);
+ }
+
+
/**
* A pure value does not have a public filename. Therefor, this method returns nothing.
* @return string
diff --git a/modules/cms/model/Page.class.php b/modules/cms/model/Page.class.php
@@ -364,10 +364,42 @@ SQL
{
parent::setTimestamp();
}
-
-
-
+
+ /**
+ * Returns a page with default values.
+ *
+ * If a value is empty, then the value should be loaded from this referenced object.
+ *
+ * @return Page|null
+ */
+ public function getPageAsDefault() {
+
+ $defaultObjectId = $this->getPageIdForDefault();
+
+ if ( $defaultObjectId ) {
+ $page = new Page( $defaultObjectId );
+ return $page;
+ }
+
+ return null;
+ }
+
+ /**
+ * Returns a pageid with default values.
+ *
+ * If a value is empty, then the value should be loaded from this referenced object.
+ *
+ * @return int|null
+ */
+ public function getPageIdForDefault() {
+
+ $settings = $this->getTotalSettings();
+ return @$settings['copy-default-values-from'];
+ }
+
+
+
/**
* Stellt fest, ob diese Seite im HTML-Format veröffentlicht wird.
* @return boolean
diff --git a/modules/cms/model/Value.class.php b/modules/cms/model/Value.class.php
@@ -64,12 +64,6 @@ class Value extends ModelBase
var $pageid;
/**
- * Kennzeichen, ob der Inhalt mit dem Inhalt einer anderern Seite verkn�pft wird.
- * @type BaseObject
- */
- var $isLink = false;
-
- /**
* Objekt-ID, auf die verlinkt wird
* @type Integer
*/
diff --git a/modules/util/cache/Cache.class.php b/modules/util/cache/Cache.class.php
@@ -17,6 +17,7 @@ interface Cache
/**
* Get the content. Loads the value if nessecary.
+ * @return string
*/
public function get();