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