openrat-cms

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

commit 34c026f6037a8a6cdcae6218be53243400c209e8
parent 48bd7ee010e5cd9aa535496cdc37f0ccd5e98603
Author: Jan Dankert <develop@jandankert.de>
Date:   Wed,  1 Jun 2022 01:05:34 +0200

New: Element types for "coordinates" and "data"

Diffstat:
Mmodules/cms/action/PageelementAction.class.php | 20+++++++++++++++++++-
Mmodules/cms/action/element/ElementAdvancedAction.class.php | 1+
Mmodules/cms/action/page/PageAllAction.class.php | 4++++
Mmodules/cms/action/pageelement/PageelementAllAction.class.php | 3+++
Mmodules/cms/generator/ValueGenerator.class.php | 89++++++++++++++++++++++++++++++++++++++++++++++++++-----------------------------
Mmodules/cms/model/Element.class.php | 4++--
Mmodules/cms/ui/themes/default/html/views/page/all.php | 11+++++++++++
Mmodules/cms/ui/themes/default/html/views/page/all.tpl.src.xml | 5+++++
Mmodules/cms/ui/themes/default/html/views/pageelement/all.php | 11+++++++++++
Mmodules/cms/ui/themes/default/html/views/pageelement/all.tpl.src.xml | 5+++++
Mmodules/cms/ui/themes/default/html/views/pageelement/value.php | 11+++++++++++
Mmodules/cms/ui/themes/default/html/views/pageelement/value.tpl.src.xml | 5+++++
12 files changed, 134 insertions(+), 35 deletions(-)

diff --git a/modules/cms/action/PageelementAction.class.php b/modules/cms/action/PageelementAction.class.php @@ -310,6 +310,14 @@ class PageelementAction extends BaseAction } + protected function editData() { + $this->editText(); + } + + protected function editCoord() { + $this->editText(); + } + /** * Ein Element der Seite bearbeiten @@ -321,7 +329,17 @@ class PageelementAction extends BaseAction $this->setTemplateVar( 'text',$this->value->text ); } - /** + protected function saveData() + { + $this->saveText(); + } + + protected function saveCoord() + { + $this->saveText(); + } + + /** * Element speichern * * Der Inhalt eines Elementes wird abgespeichert diff --git a/modules/cms/action/element/ElementAdvancedAction.class.php b/modules/cms/action/element/ElementAdvancedAction.class.php @@ -351,6 +351,7 @@ class ElementAdvancedAction extends ElementAction implements Method { break; case Element::ELEMENT_TYPE_NUMBER: + case Element::ELEMENT_TYPE_DATA: $this->setTemplateVar('code',$this->element->code); } break; diff --git a/modules/cms/action/page/PageAllAction.class.php b/modules/cms/action/page/PageAllAction.class.php @@ -168,6 +168,8 @@ class PageAllAction extends PageAction implements Method { break; case Element::ELEMENT_TYPE_TEXT: + case Element::ELEMENT_TYPE_DATA: + case Element::ELEMENT_TYPE_COORD: $content = $value->text; break; @@ -217,6 +219,8 @@ class PageAllAction extends PageAction implements Method { switch ($element->typeid) { case Element::ELEMENT_TYPE_TEXT: + case Element::ELEMENT_TYPE_DATA: + case Element::ELEMENT_TYPE_COORD: $value->text = $this->request->getText($element->name); break; case Element::ELEMENT_TYPE_LONGTEXT: diff --git a/modules/cms/action/pageelement/PageelementAllAction.class.php b/modules/cms/action/pageelement/PageelementAllAction.class.php @@ -165,6 +165,8 @@ class PageelementAllAction extends PageelementAction implements Method { break; case Element::ELEMENT_TYPE_TEXT: + case Element::ELEMENT_TYPE_DATA: + case Element::ELEMENT_TYPE_COORD: $content = $value->text; break; @@ -217,6 +219,7 @@ class PageelementAllAction extends PageelementAction implements Method { case Element::ELEMENT_TYPE_TEXT: case Element::ELEMENT_TYPE_DATA: + case Element::ELEMENT_TYPE_COORD: $value->text = $this->request->getText($language->isoCode); break; case Element::ELEMENT_TYPE_LONGTEXT: diff --git a/modules/cms/generator/ValueGenerator.class.php b/modules/cms/generator/ValueGenerator.class.php @@ -43,6 +43,7 @@ use util\Http; use util\Request; use util\Text; use util\Transformer; +use util\YAML; /** @@ -615,8 +616,6 @@ class ValueGenerator extends BaseGenerator case Element::ELEMENT_TYPE_LONGTEXT: case Element::ELEMENT_TYPE_TEXT: case Element::ELEMENT_TYPE_SELECT: - case Element::ELEMENT_TYPE_DATA: - case Element::ELEMENT_TYPE_COORD: $inhalt = $value->text; $format = $value->format; @@ -742,37 +741,8 @@ class ValueGenerator extends BaseGenerator $inhalt = number_format( $number,$element->decimals,$element->decPoint,$element->thousandSep ); - $executor = new DslInterpreter(); - $executor->addContext( [ - 'console' => new DslConsole(), - 'document' => new DslDocument(), - 'value' => $inhalt, - 'http' => new DslHttp(), - 'json' => new DslJson(), - 'write' => new DslWrite(), - 'alert' => new DslAlert(), - 'page' => new DslPage( $page ), - ]); - - try { - //echo "###"; - $result = $executor->runCode( $element->code ); - //echo "*result*";var_export($result); - } - catch( DslException $e ) { - if ( $pageContext->scheme == Producer::SCHEME_PREVIEW ) - $inhalt = $e->getMessage(); - else - $inhalt = ''; - Logger::warn( $e ); - break; - } + $inhalt = $this->filterValue( $inhalt, $element->code ); - // any output will be discarded - - - if ( $result != null ) - $inhalt = $result; break; @@ -1084,6 +1054,26 @@ class ValueGenerator extends BaseGenerator break; + case Element::ELEMENT_TYPE_COORD: + $inhalt = $value->text; + break; + + case Element::ELEMENT_TYPE_DATA: + + try { + $data = YAML::parse( $value->text ); + } catch ( \Exception $e ) { + if ( $this->context->pageContext->scheme == Producer::SCHEME_PREVIEW ) + $inhalt = 'Invalid YAML: '.$e->getMessage(); + break; + } + + $inhalt = $this->filterValue( $data, $element->code ); + + if ( is_array($inhalt) ) + $inhalt = YAML::dump( $inhalt ); + + break; default: // this should never happen in production. // inform the user. @@ -1181,4 +1171,39 @@ class ValueGenerator extends BaseGenerator return $mimeType == 'text/html'; } + /** + * @param $inhalt mixed + * @param $code string + * @return mixed|string + */ + protected function filterValue( $inhalt, $code) + { + $executor = new DslInterpreter(); + + $executor->addContext( [ + 'console' => new DslConsole(), + 'document' => new DslDocument(), + 'value' => $inhalt, + 'http' => new DslHttp(), + 'json' => new DslJson(), + 'write' => new DslWrite(), + ]); + + try { + $result = $executor->runCode( $code ); + } + catch( DslException $e ) { + Logger::warn($e); + if ( $this->context->pageContext->scheme == Producer::SCHEME_PREVIEW ) + return $e->getMessage(); + else + return ''; + } + + if ( $result != null ) + return $result; + else + return $inhalt; + } + } \ No newline at end of file diff --git a/modules/cms/model/Element.class.php b/modules/cms/model/Element.class.php @@ -450,8 +450,8 @@ SQL self::ELEMENT_TYPE_DYNAMIC => ['subtype','code'], self::ELEMENT_TYPE_INFO => ['subtype'], self::ELEMENT_TYPE_INFODATE => ['subtype','dateformat'], - self::ELEMENT_TYPE_DATA => ['code'], - self::ELEMENT_TYPE_COORD => ['subtype'], + self::ELEMENT_TYPE_DATA => ['inherit','withIcon','allLanguages','writable','code'], + self::ELEMENT_TYPE_COORD => ['inherit','withIcon','allLanguages','writable','subtype'], ]; return $relatedProperties[ $this->typeid ]; } diff --git a/modules/cms/ui/themes/default/html/views/page/all.php b/modules/cms/ui/themes/default/html/views/page/all.php @@ -39,6 +39,17 @@ </div> </section> <?php } ?> + <?php $if5=($type=='data'); if($if5) { ?> + <section class="<?php echo O::escapeHtml('or-fieldset') ?>"><?php echo O::escapeHtml('') ?> + <h3 class="<?php echo O::escapeHtml('or-fieldset-label') ?>"><?php echo O::escapeHtml('') ?></h3> + <div class="<?php echo O::escapeHtml('or-fieldset-value') ?>"><?php echo O::escapeHtml('') ?> + <div><?php echo O::escapeHtml('') ?> + <textarea name="<?php echo O::escapeHtml(''.@$name.'') ?>" data-extension="<?php echo O::escapeHtml('') ?>" data-mimetype="<?php echo O::escapeHtml('') ?>" data-mode="<?php echo O::escapeHtml('yaml') ?>" class="<?php echo O::escapeHtml('or-input or-editor or-code-editor') ?>"><?php echo O::escapeHtml(''.@$value.'') ?></textarea> + <trix-editor input="<?php echo O::escapeHtml(''.@$name.'') ?>"><?php echo O::escapeHtml('') ?></trix-editor> + </div> + </div> + </section> + <?php } ?> <?php $if5=($type=='longtext'); if($if5) { ?> <input type="<?php echo O::escapeHtml('hidden') ?>" name="<?php echo O::escapeHtml('format') ?>" value="<?php echo O::escapeHtml(''.@$format.'') ?>" /><?php echo O::escapeHtml('') ?> <?php $if6=($editor=='markdown'); if($if6) { ?> diff --git a/modules/cms/ui/themes/default/html/views/page/all.tpl.src.xml b/modules/cms/ui/themes/default/html/views/page/all.tpl.src.xml @@ -22,6 +22,11 @@ <input size="50" maxlength="255" class="text" name="${name}" default="${value}" /> </fieldset> </if> + <if value="${type}" equals="data"> + <fieldset> + <editor type="code" mode="yaml" name="${name}" default="${value}" /> + </fieldset> + </if> <if value="${type}" equals="longtext"> <hidden name="format"/> <if value="${editor}" equals="markdown"> diff --git a/modules/cms/ui/themes/default/html/views/pageelement/all.php b/modules/cms/ui/themes/default/html/views/pageelement/all.php @@ -40,6 +40,17 @@ </div> </section> <?php } ?> + <?php $if5=($type=='data'); if($if5) { ?> + <section class="<?php echo O::escapeHtml('or-fieldset') ?>"><?php echo O::escapeHtml('') ?> + <h3 class="<?php echo O::escapeHtml('or-fieldset-label') ?>"><?php echo O::escapeHtml('') ?></h3> + <div class="<?php echo O::escapeHtml('or-fieldset-value') ?>"><?php echo O::escapeHtml('') ?> + <div><?php echo O::escapeHtml('') ?> + <textarea name="<?php echo O::escapeHtml(''.@$name.'') ?>" data-extension="<?php echo O::escapeHtml('') ?>" data-mimetype="<?php echo O::escapeHtml('') ?>" data-mode="<?php echo O::escapeHtml('yaml') ?>" class="<?php echo O::escapeHtml('or-input or-editor or-code-editor') ?>"><?php echo O::escapeHtml(''.@$value.'') ?></textarea> + <trix-editor input="<?php echo O::escapeHtml(''.@$name.'') ?>"><?php echo O::escapeHtml('') ?></trix-editor> + </div> + </div> + </section> + <?php } ?> <?php $if5=($type=='longtext'); if($if5) { ?> <input type="<?php echo O::escapeHtml('hidden') ?>" name="<?php echo O::escapeHtml('format') ?>" value="<?php echo O::escapeHtml(''.@$format.'') ?>" /><?php echo O::escapeHtml('') ?> <?php $if6=($editor=='markdown'); if($if6) { ?> diff --git a/modules/cms/ui/themes/default/html/views/pageelement/all.tpl.src.xml b/modules/cms/ui/themes/default/html/views/pageelement/all.tpl.src.xml @@ -18,6 +18,11 @@ <input size="50" maxlength="255" class="text" name="text" default="${value}" /> </fieldset> </if> + <if value="${type}" equals="data"> + <fieldset> + <editor type="code" mode="yaml" name="${name}" default="${value}" /> + </fieldset> + </if> <if value="${type}" equals="longtext"> <hidden name="format"/> <if value="${editor}" equals="markdown"> diff --git a/modules/cms/ui/themes/default/html/views/pageelement/value.php b/modules/cms/ui/themes/default/html/views/pageelement/value.php @@ -46,6 +46,17 @@ </div> </section> <?php } ?> + <?php $if4=($type=='data'); if($if4) { ?> + <section class="<?php echo O::escapeHtml('or-fieldset') ?>"><?php echo O::escapeHtml('') ?> + <h3 class="<?php echo O::escapeHtml('or-fieldset-label') ?>"><?php echo O::escapeHtml('') ?></h3> + <div class="<?php echo O::escapeHtml('or-fieldset-value') ?>"><?php echo O::escapeHtml('') ?> + <div><?php echo O::escapeHtml('') ?> + <textarea name="<?php echo O::escapeHtml('text') ?>" data-extension="<?php echo O::escapeHtml('') ?>" data-mimetype="<?php echo O::escapeHtml('') ?>" data-mode="<?php echo O::escapeHtml('yaml') ?>" class="<?php echo O::escapeHtml('or-input or-editor or-code-editor') ?>"><?php echo O::escapeHtml(''.@$value.'') ?></textarea> + <trix-editor input="<?php echo O::escapeHtml('text') ?>"><?php echo O::escapeHtml('') ?></trix-editor> + </div> + </div> + </section> + <?php } ?> <?php $if4=($type=='longtext'); if($if4) { ?> <input type="<?php echo O::escapeHtml('hidden') ?>" name="<?php echo O::escapeHtml('format') ?>" value="<?php echo O::escapeHtml(''.@$format.'') ?>" /><?php echo O::escapeHtml('') ?> <?php $if5=($editor=='markdown'); if($if5) { ?> diff --git a/modules/cms/ui/themes/default/html/views/pageelement/value.tpl.src.xml b/modules/cms/ui/themes/default/html/views/pageelement/value.tpl.src.xml @@ -18,6 +18,11 @@ <input size="50" maxlength="255" class="text" name="text"/> </fieldset> </if> + <if value="${type}" equals="data"> + <fieldset> + <editor type="code" mode="yaml" name="text" default="${value}" /> + </fieldset> + </if> <if value="${type}" equals="longtext"> <hidden name="format"/> <if value="${editor}" equals="markdown">