openrat-cms

OpenRat Content Management System
git clone http://git.code.weiherhei.de/openrat-cms.git
Log | Files | Refs | README

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:
Mmodules/cms/generator/BaseGenerator.class.php | 16+++++++++++++++-
Mmodules/cms/generator/ValueGenerator.class.php | 69+++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------
Mmodules/cms/model/Page.class.php | 38+++++++++++++++++++++++++++++++++++---
Mmodules/cms/model/Value.class.php | 6------
Mmodules/util/cache/Cache.class.php | 1+
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();