openrat-cms

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

commit d4fdafce11f3f92140dfd8835dd828a32863fcde
parent 98dd79b1c48cfddd210b45b458ac91ec29386fa6
Author: Jan Dankert <develop@jandankert.de>
Date:   Sat, 25 Jun 2022 14:26:33 +0200

New: Many Enhancements for the internal script language: More access to the data structure of pages, folders, templates, ...

Diffstat:
Mmodules/cms/action/element/ElementAdvancedAction.class.php | 23+++++++++++------------
Mmodules/cms/generator/PageContext.class.php | 5-----
Mmodules/cms/generator/ValueContext.class.php | 3+++
Mmodules/cms/generator/ValueGenerator.class.php | 53+++++++++++++++++++++++++++++++++++++++++++++++------
Mmodules/cms/generator/dsl/DslDate.class.php | 48+++++++++++++++++++++++++++---------------------
Amodules/cms/generator/dsl/DslElement.class.php | 34++++++++++++++++++++++++++++++++++
Dmodules/cms/generator/dsl/DslFolder.class.php | 33---------------------------------
Mmodules/cms/generator/dsl/DslObject.class.php | 77++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---
Dmodules/cms/generator/dsl/DslPage.class.php | 31-------------------------------
Amodules/cms/generator/dsl/DslPageContext.class.php | 77+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mmodules/cms/generator/dsl/DslProject.class.php | 7++++---
Mmodules/cms/generator/dsl/DslSystem.class.php | 21+++++++++++++++++++--
Amodules/cms/generator/dsl/DslTemplate.class.php | 34++++++++++++++++++++++++++++++++++
Mmodules/cms/model/BaseObject.class.php | 2+-
Mmodules/cms/model/Language.class.php | 2++
Mmodules/cms/model/Model.class.php | 2++
Mmodules/dsl/ast/DslOperation.class.php | 2+-
17 files changed, 336 insertions(+), 118 deletions(-)

diff --git a/modules/cms/action/element/ElementAdvancedAction.class.php b/modules/cms/action/element/ElementAdvancedAction.class.php @@ -392,8 +392,7 @@ class ElementAdvancedAction extends ElementAction implements Method { $this->setTemplateVar('code',$this->element->code); break; - case Element::ELEMENT_TYPE_NUMBER: - case Element::ELEMENT_TYPE_DATA: + default: $this->setTemplateVar('code',$this->element->code); } break; @@ -576,23 +575,23 @@ class ElementAdvancedAction extends ElementAction implements Method { protected function getRelatedProperties() { $relatedProperties = [ - Element::ELEMENT_TYPE_TEXT => [self::PROP_INHERIT,self::PROP_WITHICON,self::PROP_ALL_LANGUAGES,self::PROP_WRITABLE,self::PROP_HTML,self::PROP_DEFAULT_TEXT,self::PROP_FORMAT], - Element::ELEMENT_TYPE_LONGTEXT => [self::PROP_INHERIT,self::PROP_WITHICON,self::PROP_ALL_LANGUAGES,self::PROP_WRITABLE,self::PROP_HTML,self::PROP_DEFAULT_TEXT,self::PROP_FORMAT], + Element::ELEMENT_TYPE_TEXT => [self::PROP_INHERIT,self::PROP_WITHICON,self::PROP_ALL_LANGUAGES,self::PROP_WRITABLE,self::PROP_HTML,self::PROP_DEFAULT_TEXT,self::PROP_FORMAT,self::PROP_CODE], + Element::ELEMENT_TYPE_LONGTEXT => [self::PROP_INHERIT,self::PROP_WITHICON,self::PROP_ALL_LANGUAGES,self::PROP_WRITABLE,self::PROP_HTML,self::PROP_DEFAULT_TEXT,self::PROP_FORMAT,self::PROP_CODE], Element::ELEMENT_TYPE_SELECT => [self::PROP_INHERIT,self::PROP_WITHICON,self::PROP_ALL_LANGUAGES,self::PROP_WRITABLE,self::PROP_DEFAULT_TEXT,self::PROP_CODE], Element::ELEMENT_TYPE_NUMBER => [self::PROP_INHERIT,self::PROP_WITHICON,self::PROP_ALL_LANGUAGES,self::PROP_WRITABLE,self::PROP_DECPOINT,self::PROP_DECIMALS,self::PROP_THOUSANDSEP,self::PROP_CODE], - Element::ELEMENT_TYPE_CHECKBOX => [self::PROP_INHERIT,self::PROP_WITHICON,self::PROP_ALL_LANGUAGES,self::PROP_WRITABLE], - Element::ELEMENT_TYPE_LINK => [self::PROP_INHERIT,self::PROP_SUBTYPE,self::PROP_WITHICON,self::PROP_ALL_LANGUAGES,self::PROP_WRITABLE,self::PROP_LINKTYPE,self::PROP_FOLDER_OBJECTID,self::PROP_DEFAULT_OBJECTID], - Element::ELEMENT_TYPE_DATE => [self::PROP_INHERIT,self::PROP_WITHICON,self::PROP_ALL_LANGUAGES,self::PROP_WRITABLE,self::PROP_DATEFORMAT,self::PROP_DEFAULT_TEXT], + Element::ELEMENT_TYPE_CHECKBOX => [self::PROP_INHERIT,self::PROP_WITHICON,self::PROP_ALL_LANGUAGES,self::PROP_WRITABLE,self::PROP_CODE], + Element::ELEMENT_TYPE_LINK => [self::PROP_INHERIT,self::PROP_SUBTYPE,self::PROP_WITHICON,self::PROP_ALL_LANGUAGES,self::PROP_WRITABLE,self::PROP_LINKTYPE,self::PROP_FOLDER_OBJECTID,self::PROP_DEFAULT_OBJECTID,self::PROP_CODE], + Element::ELEMENT_TYPE_DATE => [self::PROP_INHERIT,self::PROP_WITHICON,self::PROP_ALL_LANGUAGES,self::PROP_WRITABLE,self::PROP_DATEFORMAT,self::PROP_DEFAULT_TEXT,self::PROP_CODE], Element::ELEMENT_TYPE_INSERT => [self::PROP_INHERIT,self::PROP_SUBTYPE,self::PROP_WITHICON,self::PROP_ALL_LANGUAGES,self::PROP_WRITABLE,self::PROP_FOLDER_OBJECTID,self::PROP_DEFAULT_OBJECTID], Element::ELEMENT_TYPE_COPY => [self::PROP_INHERIT,self::PROP_PREFIX,self::PROP_NAME,self::PROP_DEFAULT_TEXT], - Element::ELEMENT_TYPE_LINKINFO => [self::PROP_PREFIX,self::PROP_SUBTYPE,self::PROP_DEFAULT_TEXT], - Element::ELEMENT_TYPE_LINKDATE => [self::PROP_PREFIX,self::PROP_SUBTYPE,self::PROP_DATEFORMAT], - Element::ELEMENT_TYPE_CODE => [self::PROP_CODE,self::PROP_SUBTYPE], + Element::ELEMENT_TYPE_LINKINFO => [self::PROP_PREFIX,self::PROP_SUBTYPE,self::PROP_DEFAULT_TEXT,self::PROP_CODE], + Element::ELEMENT_TYPE_LINKDATE => [self::PROP_PREFIX,self::PROP_SUBTYPE,self::PROP_DATEFORMAT,self::PROP_CODE], + Element::ELEMENT_TYPE_CODE => [self::PROP_SUBTYPE,self::PROP_CODE], Element::ELEMENT_TYPE_DYNAMIC => [self::PROP_SUBTYPE,self::PROP_CODE], Element::ELEMENT_TYPE_INFO => [self::PROP_SUBTYPE], - Element::ELEMENT_TYPE_INFODATE => [self::PROP_SUBTYPE,self::PROP_DATEFORMAT], + Element::ELEMENT_TYPE_INFODATE => [self::PROP_SUBTYPE,self::PROP_DATEFORMAT,self::PROP_CODE], Element::ELEMENT_TYPE_DATA => [self::PROP_INHERIT,self::PROP_WITHICON,self::PROP_ALL_LANGUAGES,self::PROP_WRITABLE,self::PROP_CODE], - Element::ELEMENT_TYPE_COORD => [self::PROP_INHERIT,self::PROP_WITHICON,self::PROP_ALL_LANGUAGES,self::PROP_WRITABLE,self::PROP_SUBTYPE], + Element::ELEMENT_TYPE_COORD => [self::PROP_INHERIT,self::PROP_WITHICON,self::PROP_ALL_LANGUAGES,self::PROP_WRITABLE,self::PROP_SUBTYPE,self::PROP_CODE], ]; return $relatedProperties[ $this->element->typeid ]; diff --git a/modules/cms/generator/PageContext.class.php b/modules/cms/generator/PageContext.class.php @@ -38,11 +38,6 @@ class PageContext extends BaseContext */ public $modelId; - /** - * @var link\PreviewLink|link\PublicLink - */ - public $linkFormat; - public function __construct($objectId, $scheme ) { $this->objectId = $objectId; diff --git a/modules/cms/generator/ValueContext.class.php b/modules/cms/generator/ValueContext.class.php @@ -16,6 +16,9 @@ class ValueContext extends BaseContext */ public $pageContext; + /** + * @param $pageContext PageContext + */ public function __construct($pageContext ) { $this->pageContext = $pageContext; diff --git a/modules/cms/generator/ValueGenerator.class.php b/modules/cms/generator/ValueGenerator.class.php @@ -12,7 +12,10 @@ use cms\generator\dsl\DslConsole; use cms\generator\dsl\DslDocument; use cms\generator\dsl\DslHttp; use cms\generator\dsl\DslJson; +use cms\generator\dsl\DslObject; use cms\generator\dsl\DslPage; +use cms\generator\dsl\DslPageContext; +use cms\generator\dsl\DslProject; use cms\generator\dsl\DslWrite; use cms\macros\MacroRunner; use cms\model\BaseObject; @@ -247,8 +250,15 @@ class ValueGenerator extends BaseGenerator $target = new BaseObject( $objectid ); $target->load(); - $linkScheme = $pageContext->getLinkScheme(); - $inhalt = $linkScheme->linkToObject( $sourcePage, $target ); + $filteredValue = $this->filterValue( new DslObject($target), $element->code ); + + if ( is_string($inhalt) ) { + $inhalt = $filteredValue; + } + else { + $linkScheme = $pageContext->getLinkScheme(); + $inhalt = $linkScheme->linkToObject( $sourcePage, $target ); + } } break; @@ -570,6 +580,9 @@ class ValueGenerator extends BaseGenerator $inhalt = strftime( $element->dateformat,$date ); else $inhalt = date ( $element->dateformat,$date ); + + $inhalt = $this->filterValue( $inhalt, $element->code ); + break; case Element::ELEMENT_TYPE_LONGTEXT: @@ -680,7 +693,20 @@ class ValueGenerator extends BaseGenerator $inhalt = str_replace($match,$url,$inhalt); } - break; + switch ($element->typeid) { + + case Element::ELEMENT_TYPE_TEXT: + case Element::ELEMENT_TYPE_LONGTEXT: + + $inhalt = $this->filterValue($inhalt, $element->code); + break; + + case Element::ELEMENT_TYPE_SELECT: + // not for selects, because the code contains the select items. + default: + } + + break; // Zahl @@ -689,6 +715,9 @@ class ValueGenerator extends BaseGenerator case Element::ELEMENT_TYPE_CHECKBOX: $inhalt = boolval($value->number); + + $inhalt = $this->filterValue( $inhalt, $element->code ); + break; case Element::ELEMENT_TYPE_NUMBER: @@ -707,7 +736,6 @@ class ValueGenerator extends BaseGenerator $inhalt = $this->filterValue( $inhalt, $element->code ); - break; @@ -728,6 +756,9 @@ class ValueGenerator extends BaseGenerator $inhalt = strftime( $element->dateformat,$date ); else $inhalt = date ( $element->dateformat,$date ); + + $inhalt = $this->filterValue( $inhalt, $element->code ); + break; @@ -771,7 +802,9 @@ class ValueGenerator extends BaseGenerator 'console' => new DslConsole(), 'http' => new DslHttp(), 'json' => new DslJson(), - 'page' => new DslPage( $page ), + 'page' => new DslObject( $page ), + 'context' => new DslPageContext( $pageContext ), + 'project' => new DslProject( $page->getProject() ), 'Mqtt' => new class{ public static function open( $url ) { return new Mqtt( $url ); @@ -863,6 +896,8 @@ class ValueGenerator extends BaseGenerator else $inhalt = date ( $element->dateformat,$date ); + $inhalt = $this->filterValue( $inhalt, $element->code ); + break; @@ -1025,6 +1060,8 @@ class ValueGenerator extends BaseGenerator case Element::ELEMENT_TYPE_COORD: $inhalt = $value->text; + $inhalt = $this->filterValue( $inhalt, $element->code ); + break; case Element::ELEMENT_TYPE_DATA: @@ -1150,6 +1187,9 @@ class ValueGenerator extends BaseGenerator $executor = new DslInterpreter(); $executor->addContext( [ + 'page' => new DslObject( (new BaseObject($this->context->pageContext->objectId))->load() ), + 'context' => new DslPageContext( $this->context->pageContext ), + 'project' => new DslProject( (new BaseObject($this->context->pageContext->objectId))->load()->getProject() ), 'console' => new DslConsole(), 'value' => $inhalt, 'http' => new DslHttp(), @@ -1157,7 +1197,8 @@ class ValueGenerator extends BaseGenerator ]); try { - $result = $executor->runCode( $code ); + $executor->runCode( $code ); + $result = $executor->getOutput(); } catch( DslException $e ) { Logger::warn($e); diff --git a/modules/cms/generator/dsl/DslDate.class.php b/modules/cms/generator/dsl/DslDate.class.php @@ -6,14 +6,20 @@ use cms\model\Page; use cms\model\Project; use dsl\context\DslObject; + +/** + * Date. + * + * Similar to the javascript Date object + */ class DslDate implements DslObject { private $time; /** - * DslPage constructor. + * @param integer $time unix timestamp */ - public function __construct($time=null) + public function __construct( $time = null ) { if ( $time = null ) $time = time(); @@ -22,23 +28,23 @@ class DslDate implements DslObject } - public function getDate() { return date('d',$this->time); } - public function getDay() { return date('w',$this->time); } - public function getFullYear() { return date('Y',$this->time); } - public function getHours() { return date('H',$this->time); } - public function getMilliseconds() { return 0; } - public function getMinutes() { return date('i',$this->time); } - public function getMonth() { return date('m',$this->time); } - public function getSeconds() { return date('s',$this->time); } - public function getTime() { return $this->time * 1000; } - public function getTimezoneOffset() {return date('y',$this->time)/60;} - public function getUTCDate() {return date('d',$this->time);} - public function getUTCDay() {return date('w',$this->time);} - public function getUTCFullYear() {return date('Y',$this->time);} - public function getUTCHours() {return date('H',$this->time);} - public function getUTCMilliseconds() {return 0;} - public function getUTCMinutes() {return date('i',$this->time);} - public function getUTCMonth() {return date('m',$this->time);} - public function getUTCSeconds() {return date('s',$this->time);} - public function getYear() { return date('y',$this->time); } + public function getDate() { return date('d',$this->time); } + public function getDay() { return date('w',$this->time); } + public function getFullYear() { return date('Y',$this->time); } + public function getHours() { return date('H',$this->time); } + public function getMilliseconds() { return 0; } + public function getMinutes() { return date('i',$this->time); } + public function getMonth() { return date('m',$this->time); } + public function getSeconds() { return date('s',$this->time); } + public function getTime() { return $this->time * 1000; } + public function getTimezoneOffset() { return date('y',$this->time)/60;} + public function getUTCDate() { return date('d',$this->time);} + public function getUTCDay() { return date('w',$this->time);} + public function getUTCFullYear() { return date('Y',$this->time);} + public function getUTCHours() { return date('H',$this->time);} + public function getUTCMilliseconds() { return 0;} + public function getUTCMinutes() { return date('i',$this->time);} + public function getUTCMonth() { return date('m',$this->time);} + public function getUTCSeconds() { return date('s',$this->time);} + public function getYear() { return date('y',$this->time); } } \ No newline at end of file diff --git a/modules/cms/generator/dsl/DslElement.class.php b/modules/cms/generator/dsl/DslElement.class.php @@ -0,0 +1,33 @@ +<?php + +namespace cms\generator\dsl; + +use cms\model\BaseObject; +use cms\model\Element; +use cms\model\Folder; +use cms\model\Page; +use cms\model\Template; +use dsl\context\DslObject as DslContextObject; + +class DslElement implements DslContextObject +{ + private $element; + + public $name; + public $label; + public $type; + + /** + * @param Element $element + */ + public function __construct($element) + { + $this->element = $element; + + $this->name = $element->name; + $this->label = $element->label; + $this->type = $element->getTypeName(); + } + + +} +\ No newline at end of file diff --git a/modules/cms/generator/dsl/DslFolder.class.php b/modules/cms/generator/dsl/DslFolder.class.php @@ -1,32 +0,0 @@ -<?php - -namespace cms\generator\dsl; - -use cms\model\Folder; -use dsl\context\DslObject as DslContextObject; - - -class DslFolder extends DslObject implements DslContextObject -{ - /** - * @var Folder - */ - private $folder; - - /** - * DslPage constructor. - * @param Folder $folder - */ - public function __construct($folder) - { - $this->folder = $folder; - - parent::__construct( $folder ); - } - - public function children() { - return array_map( function($object) { - return new DslObject( $object ); - }, $this->folder->getObjects() ); - } -} -\ No newline at end of file diff --git a/modules/cms/generator/dsl/DslObject.class.php b/modules/cms/generator/dsl/DslObject.class.php @@ -4,6 +4,8 @@ namespace cms\generator\dsl; use cms\model\BaseObject; use cms\model\Folder; +use cms\model\Page; +use cms\model\Template; use dsl\context\DslObject as DslContextObject; class DslObject implements DslContextObject @@ -11,6 +13,8 @@ class DslObject implements DslContextObject private $object; public $id; + public $type; + public $name; /** * DslPage constructor. @@ -20,7 +24,9 @@ class DslObject implements DslContextObject { $this->object = $object; - $this->id = $object->getId(); + $this->id = $object->getId(); + $this->type = $object->getType(); + $this->name = $this->getDefaultName(); } @@ -29,6 +35,11 @@ class DslObject implements DslContextObject return $this->object->getType(); } + public function filename() { + + return $this->object->filename(); + } + public function getNameForLanguage( $languageid ) { return $this->object->getNameForLanguage( $languageid )->getProperties(); @@ -36,7 +47,7 @@ class DslObject implements DslContextObject public function getDefaultName() { - return $this->object->getDefaultName()->getProperties(); + return $this->object->getDefaultName()->getName(); } public function parent() { @@ -44,7 +55,67 @@ class DslObject implements DslContextObject if ( $this->object->parentid == null ) return null; - return new DslFolder( new Folder( $this->object->parentid ) ); + return new DslObject( new Folder( $this->object->parentid ) ); + } + + + public function children() { + if ( $this->object->isFolder ) + { + $folder = new Folder( $this->object->objectid ); + + return array_map( function($child) { + return new DslObject($child); + }, + $folder->getObjects()); + } else { + return []; + } + } + + + + /** + * @return DslTemplate + * @throws \util\exception\ObjectNotFoundException + */ + public function getTemplate() { + if ( $this->object->isPage ) + { + $page = new Page( $this->object->objectid ); + return new DslTemplate( $page->getTemplate() ); + } else { + return null; + } + } + + + public function __toString() + { + return "Object:".$this->id; + } + + + + public function getValue( $elementName ) { + // TODO + return ; + } + + + + /** + * @return array + * @throws \util\exception\ObjectNotFoundException + */ + public function elements() { + if ( $this->object->isPage ) + { + $page = new Page( $this->object->objectid ); + return $page->getElementIds(); + } else { + return null; + } } } \ No newline at end of file diff --git a/modules/cms/generator/dsl/DslPage.class.php b/modules/cms/generator/dsl/DslPage.class.php @@ -1,30 +0,0 @@ -<?php - -namespace cms\generator\dsl; - -use cms\model\Page; -use dsl\context\DslObject as DslContextObject; - -class DslPage extends DslObject implements DslContextObject -{ - private $page; - - /** - * DslPage constructor. - * @param Page $page - */ - public function __construct($page) - { - $this->page = $page; - parent::__construct( $page ); - } - - /** - * @return array - * @throws \util\exception\ObjectNotFoundException - */ - public function elements() { - return $this->page->getElementIds(); - } - -} -\ No newline at end of file diff --git a/modules/cms/generator/dsl/DslPageContext.class.php b/modules/cms/generator/dsl/DslPageContext.class.php @@ -0,0 +1,76 @@ +<?php + +namespace cms\generator\dsl; + +use cms\generator\PageContext; +use cms\model\BaseObject; +use cms\model\Language; +use cms\model\Model; +use dsl\context\DslObject as DslContextObject; +use dsl\DslRuntimeException; + +class DslPageContext implements DslContextObject +{ + private $pageContext; + + /** + * DslPageContext constructor. + * @param $pageContext PageContext + */ + public function __construct( $pageContext ) { + + $this->pageContext = clone $pageContext; // the original must no be changed + + $this->language = ( new Language( $pageContext->languageId ) )->load()->getName(); + $this->model = ( new Model ( $pageContext->modelId ) )->load()->getName(); + } + + + /** + * Language name. + * @var string + */ + public $language; + + + /** + * Model name. + * @var string + */ + public $model; + + + protected function getProject() { + return (new BaseObject($this->pageContext->sourceObjectId))->load()->getProject(); + } + + public function setLanguage( $name ) { + if ( $languageId = array_search( $name,$this->getProject()->getLanguages() ) ) + $this->pageContext->languageId = $languageId; + else + throw new DslRuntimeException("language with name '".$this->language."' does not exist."); + + } + + + public function setModel( $name ) { + if ( $modelId = array_search( $name,$this->getProject()->getModels() ) ) + $this->pageContext->modelId = $modelId; + else + throw new DslRuntimeException("model with name '".$this->model."' does not exist."); + } + + + /** + * Creates a link to an object. + * + * @param $object DslObject + */ + public function linkTo( $object ) { + + $from = (new BaseObject( $this->pageContext->sourceObjectId ))->load(); + $to = (new BaseObject( $object->id ))->load(); + return $this->pageContext->getLinkScheme()->linkToObject( $from, $to ); + } + +} +\ No newline at end of file diff --git a/modules/cms/generator/dsl/DslProject.class.php b/modules/cms/generator/dsl/DslProject.class.php @@ -4,9 +4,8 @@ namespace cms\generator\dsl; use cms\model\Folder; use cms\model\Project; -use dsl\context\DslObject; -class DslProject implements DslObject +class DslProject implements \dsl\context\DslObject { private $project; @@ -37,6 +36,7 @@ class DslProject implements DslObject return get_object_vars($language); } ,$this->project->getLanguages() ); } + /** * @return array * @throws \util\exception\ObjectNotFoundException @@ -47,6 +47,7 @@ class DslProject implements DslObject return get_object_vars($model); } ,$this->project->getModels() ); } + /** * @return DslObject * @throws \util\exception\ObjectNotFoundException @@ -55,7 +56,7 @@ class DslProject implements DslObject $oid = $this->project->getRootObjectId(); $folder = new Folder( $oid ); - return new DslFolder( $folder->load() ); + return new DslObject( $folder->load() ); } } \ No newline at end of file diff --git a/modules/cms/generator/dsl/DslSystem.class.php b/modules/cms/generator/dsl/DslSystem.class.php @@ -49,6 +49,23 @@ class DslSystem implements DslObject $this->os = PHP_OS; } - public function now() { return new DslDate(); } - public function env( $name ) { if ( substr($name,0,8) == 'CMS_DSL_') return getenv($name); else return null; } + + /** + * Gets the current date object. + * @return DslDate + */ + public function now() { + + return new DslDate(); + } + + + /** + * @param $name + * @return array|false|string + */ + public function env( $name ) { + + return getenv('CMS_DSL_'.$name); + } } \ No newline at end of file diff --git a/modules/cms/generator/dsl/DslTemplate.class.php b/modules/cms/generator/dsl/DslTemplate.class.php @@ -0,0 +1,33 @@ +<?php + +namespace cms\generator\dsl; + +use cms\model\BaseObject; +use cms\model\Folder; +use cms\model\Page; +use cms\model\Template; +use dsl\context\DslObject as DslContextObject; + +class DslTemplate implements DslContextObject +{ + private $template; + + public $name; + + /** + * @param Template $template + */ + public function __construct($template) + { + $this->template = $template; + + $this->name = $template->name; + } + + + public function elements() { + return array_map( function($element) { + return new DslElement( $element ); + },$this->template->getElements()); + } +} +\ No newline at end of file diff --git a/modules/cms/model/BaseObject.class.php b/modules/cms/model/BaseObject.class.php @@ -331,7 +331,7 @@ SQL self::TYPEID_MACRO => 'macro' , ]; - return $mapTypeIdToName[ $this->getTypeid() ]; + return @$mapTypeIdToName[ $this->getTypeid() ] ?: 'unknown'; } diff --git a/modules/cms/model/Language.class.php b/modules/cms/model/Language.class.php @@ -101,6 +101,8 @@ class Language extends ModelBase $this->isDefault = ( $row['is_default'] == '1' ); } + + return $this; } diff --git a/modules/cms/model/Model.class.php b/modules/cms/model/Model.class.php @@ -85,6 +85,8 @@ class Model extends ModelBase if ( $row['is_default'] == '1' ) $this->isDefault = true; else $this->isDefault = false; + + return $this; } diff --git a/modules/dsl/ast/DslOperation.class.php b/modules/dsl/ast/DslOperation.class.php @@ -37,7 +37,7 @@ class DslOperation implements DslStatement switch( $this->operator ) { case '+': if ( is_string($left) ) - return $left . $right; + return $left . (string)$right; else return intval($left) + intval($right);