openrat-cms

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

commit 48bd7ee010e5cd9aa535496cdc37f0ccd5e98603
parent b1b95b1d1dda75735df503f64aed56258235c694
Author: Jan Dankert <develop@jandankert.de>
Date:   Wed,  1 Jun 2022 00:11:40 +0200

New: DSL as a filter for number values

Diffstat:
Mmodules/cms/action/element/ElementAdvancedAction.class.php | 17++++++++++++++++-
Mmodules/cms/action/page/PageAllAction.class.php | 8++++++++
Mmodules/cms/action/pageelement/PageelementAllAction.class.php | 1+
Mmodules/cms/generator/ValueGenerator.class.php | 38++++++++++++++++++++++++++++++++++++++
Mmodules/cms/model/Element.class.php | 93++++++++++++++++++++++++++++++++++++++++++++++---------------------------------
Mmodules/cms/ui/themes/default/html/views/element/advanced.php | 2+-
Mmodules/cms/ui/themes/default/html/views/element/advanced.tpl.src.xml | 2+-
Mmodules/dsl/DslAstParser.class.php | 2+-
Mmodules/dsl/ast/DslAssignment.class.php | 2++
Dmodules/dsl/ast/DslBlock.class.php | 65-----------------------------------------------------------------
Dmodules/dsl/ast/DslCreation.class.php | 29-----------------------------
Mmodules/dsl/ast/DslElement.class.php | 13+++++++++----
Dmodules/dsl/ast/DslGroup.class.php | 17-----------------
Mmodules/dsl/ast/DslIf.class.php | 4++--
Mmodules/dsl/ast/DslStatementList.class.php | 2++
Mmodules/dsl/executor/DslInterpreter.class.php | 8++++++--
Mmodules/language/Language_CN.class.php | 2++
Mmodules/language/Language_DE.class.php | 2++
Mmodules/language/Language_EN.class.php | 2++
Mmodules/language/Language_ES.class.php | 2++
Mmodules/language/Language_FR.class.php | 2++
Mmodules/language/Language_IT.class.php | 2++
Mmodules/language/Language_RU.class.php | 2++
Mmodules/language/Messages.class.php | 2++
Mmodules/language/language.yml | 5+++++
25 files changed, 162 insertions(+), 162 deletions(-)

diff --git a/modules/cms/action/element/ElementAdvancedAction.class.php b/modules/cms/action/element/ElementAdvancedAction.class.php @@ -13,6 +13,7 @@ use cms\model\Template; use language\Messages; use ReflectionClass; use ReflectionProperty; +use util\FileUtils; use util\Text; @@ -141,10 +142,21 @@ class ElementAdvancedAction extends ElementAction implements Method { $convertToLang = true; break; + case Element::ELEMENT_TYPE_DATA: + break; + + case Element::ELEMENT_TYPE_COORD: + $subtypes = [ + 'olc', + 'coordinates', + ]; + $convertToLang = true; + break; + case Element::ELEMENT_TYPE_DYNAMIC: $files = Array(); - $macroFiles = \util\FileUtils::readDir(__DIR__ . '/../../../cms/macros/macro'); + $macroFiles = FileUtils::readDir(__DIR__ . '/../../../cms/macros/macro'); foreach( $macroFiles as $macroFile ) { $file = substr($macroFile,0,strlen($macroFile)-10); @@ -337,6 +349,9 @@ class ElementAdvancedAction extends ElementAction implements Method { $this->setTemplateVar('code',$this->element->code); break; + + case Element::ELEMENT_TYPE_NUMBER: + $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 @@ -223,6 +223,14 @@ class PageAllAction extends PageAction implements Method { $value->text = $this->compactOIDs($this->request->getText($element->name)); break; + case Element::ELEMENT_TYPE_COORD: + $value->text = $this->request->getText($element->name); + break; + + case Element::ELEMENT_TYPE_DATA: + $value->text = $this->request->getText($element->name); + break; + case Element::ELEMENT_TYPE_DATE: $value->date = strtotime($this->request->getText($element->name . '_date') . $this->request->getText($element->name . '_time')); break; diff --git a/modules/cms/action/pageelement/PageelementAllAction.class.php b/modules/cms/action/pageelement/PageelementAllAction.class.php @@ -216,6 +216,7 @@ class PageelementAllAction extends PageelementAction implements Method { switch ($element->typeid) { case Element::ELEMENT_TYPE_TEXT: + case Element::ELEMENT_TYPE_DATA: $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 @@ -615,6 +615,8 @@ 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; @@ -728,6 +730,7 @@ class ValueGenerator extends BaseGenerator // wird im entsprechenden Format angezeigt. case Element::ELEMENT_TYPE_NUMBER: + if ( $value->number == 0 ) { // Zahl ist gleich 0, dann Default-Text @@ -738,6 +741,39 @@ class ValueGenerator extends BaseGenerator $number = $value->number / pow(10,$element->decimals); $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; + } + + // any output will be discarded + + + if ( $result != null ) + $inhalt = $result; + break; @@ -1096,6 +1132,8 @@ class ValueGenerator extends BaseGenerator Element::ELEMENT_TYPE_TEXT, Element::ELEMENT_TYPE_LONGTEXT, Element::ELEMENT_TYPE_SELECT, + Element::ELEMENT_TYPE_DATA, + Element::ELEMENT_TYPE_COORD, ]) && $value->text != '' && $value->text != null || in_array($element->typeid,[ Element::ELEMENT_TYPE_NUMBER diff --git a/modules/cms/model/Element.class.php b/modules/cms/model/Element.class.php @@ -35,6 +35,16 @@ class Element extends ModelBase const ELEMENT_TYPE_LINKDATE = 13; const ELEMENT_TYPE_INSERT = 14; + /** + * Data. + */ + const ELEMENT_TYPE_DATA = 15; + + /** + * Coordinates. + */ + const ELEMENT_TYPE_COORD = 16; + const ELEMENT_FORMAT_TEXT = 0; const ELEMENT_FORMAT_HTML = 1; const ELEMENT_FORMAT_WIKI = 2; @@ -421,26 +431,29 @@ SQL /** * Abhaengig vom Element-Typ werden die zur Darstellung notwendigen Eigenschaften ermittelt. - * @return array + * @return string[] */ - function getRelatedProperties() + public function getRelatedProperties() { - $prp = array('text' =>array('inherit','withIcon','allLanguages','writable','html','defaultText','format'), - 'longtext'=>array('inherit','withIcon','allLanguages','writable','html','defaultText','format'), - 'select' =>array('inherit','withIcon','allLanguages','writable','defaultText','code'), - 'number' =>array('inherit','withIcon','allLanguages','writable','decPoint','decimals','thousandSep'), - 'link' =>array('inherit','subtype','withIcon','allLanguages','writable','linktype','folderObjectId','defaultObjectId'), - 'date' =>array('inherit','withIcon','allLanguages','writable','dateformat','defaultText'), - 'list' =>array('inherit','subtype','withIcon','allLanguages','writable','folderObjectId','defaultObjectId'), - 'insert' =>array('inherit','subtype','withIcon','allLanguages','writable','folderObjectId','defaultObjectId'), - 'copy' =>array('inherit','prefix','name','defaultText'), - 'linkinfo'=>array('prefix','subtype','defaultText'), - 'linkdate'=>array('prefix','subtype','dateformat'), - 'code' =>array('code','subtype'), - 'dynamic' =>array('subtype','code'), - 'info' =>array('subtype'), - 'infodate'=>array('subtype','dateformat') ); - return $prp[ $this->getTypeName() ]; + $relatedProperties = [ + self::ELEMENT_TYPE_TEXT => ['inherit','withIcon','allLanguages','writable','html','defaultText','format'], + self::ELEMENT_TYPE_LONGTEXT => ['inherit','withIcon','allLanguages','writable','html','defaultText','format'], + self::ELEMENT_TYPE_SELECT => ['inherit','withIcon','allLanguages','writable','defaultText','code'], + self::ELEMENT_TYPE_NUMBER => ['inherit','withIcon','allLanguages','writable','decPoint','decimals','thousandSep','code'], + self::ELEMENT_TYPE_LINK => ['inherit','subtype','withIcon','allLanguages','writable','linktype','folderObjectId','defaultObjectId'], + self::ELEMENT_TYPE_DATE => ['inherit','withIcon','allLanguages','writable','dateformat','defaultText'], + self::ELEMENT_TYPE_INSERT => ['inherit','subtype','withIcon','allLanguages','writable','folderObjectId','defaultObjectId'], + self::ELEMENT_TYPE_COPY => ['inherit','prefix','name','defaultText'], + self::ELEMENT_TYPE_LINKINFO => ['prefix','subtype','defaultText'], + self::ELEMENT_TYPE_LINKDATE => ['prefix','subtype','dateformat'], + self::ELEMENT_TYPE_CODE => ['code','subtype'], + 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'], + ]; + return $relatedProperties[ $this->typeid ]; } @@ -488,45 +501,47 @@ SQL } /** - * Ermitteln aller benutzbaren Elementtypen. + * a textual representation for all element types. * * @return array id->name */ public static function getAvailableTypes() { - return array( - self::ELEMENT_TYPE_TEXT => 'text', + return [ + self::ELEMENT_TYPE_TEXT => 'text', self::ELEMENT_TYPE_LONGTEXT => 'longtext', - self::ELEMENT_TYPE_SELECT => 'select', - self::ELEMENT_TYPE_NUMBER => 'number', - self::ELEMENT_TYPE_LINK => 'link', - self::ELEMENT_TYPE_DATE => 'date', - self::ELEMENT_TYPE_INSERT => 'insert', - self::ELEMENT_TYPE_COPY => 'copy', + self::ELEMENT_TYPE_SELECT => 'select', + self::ELEMENT_TYPE_NUMBER => 'number', + self::ELEMENT_TYPE_LINK => 'link', + self::ELEMENT_TYPE_DATE => 'date', + self::ELEMENT_TYPE_INSERT => 'insert', + self::ELEMENT_TYPE_COPY => 'copy', self::ELEMENT_TYPE_LINKINFO => 'linkinfo', self::ELEMENT_TYPE_LINKDATE => 'linkdate', - self::ELEMENT_TYPE_CODE => 'code', - self::ELEMENT_TYPE_DYNAMIC => 'dynamic', - self::ELEMENT_TYPE_INFO => 'info', - self::ELEMENT_TYPE_INFODATE => 'infodate' - ); + self::ELEMENT_TYPE_CODE => 'code', + self::ELEMENT_TYPE_DYNAMIC => 'dynamic', + self::ELEMENT_TYPE_INFO => 'info', + self::ELEMENT_TYPE_INFODATE => 'infodate', + self::ELEMENT_TYPE_DATA => 'data', + self::ELEMENT_TYPE_COORD => 'coord' + ]; } /** - * Ermitteln aller benutzbaren Elementtypen. + * all available formats for text elements. * * @return array id->name */ public static function getAvailableFormats() { - return array( - self::ELEMENT_FORMAT_TEXT => 'text', - self::ELEMENT_FORMAT_WIKI => 'wiki', - self::ELEMENT_FORMAT_HTML => 'html', + return [ + self::ELEMENT_FORMAT_TEXT => 'text', + self::ELEMENT_FORMAT_WIKI => 'wiki', + self::ELEMENT_FORMAT_HTML => 'html', self::ELEMENT_FORMAT_MARKDOWN => 'markdown', - self::ELEMENT_FORMAT_HTML_SOURCE => 'htmlsource' - ); + self::ELEMENT_FORMAT_HTML_SOURCE => 'htmlsource', + ]; } diff --git a/modules/cms/ui/themes/default/html/views/element/advanced.php b/modules/cms/ui/themes/default/html/views/element/advanced.php @@ -128,7 +128,7 @@ <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(''.@O::lang('EL_PROP_DECIMALS').'') ?></h3> <div class="<?php echo O::escapeHtml('or-fieldset-value') ?>"><?php echo O::escapeHtml('') ?> - <input name="<?php echo O::escapeHtml('decimals') ?>" type="<?php echo O::escapeHtml('text') ?>" maxlength="<?php echo O::escapeHtml('2') ?>" value="<?php echo O::escapeHtml(''.@$decimals.'') ?>" class="<?php echo O::escapeHtml('or-input') ?>" /><?php echo O::escapeHtml('') ?> + <input name="<?php echo O::escapeHtml('decimals') ?>" type="<?php echo O::escapeHtml('number') ?>" maxlength="<?php echo O::escapeHtml('2') ?>" value="<?php echo O::escapeHtml(''.@$decimals.'') ?>" class="<?php echo O::escapeHtml('or-input') ?>" /><?php echo O::escapeHtml('') ?> </div> </section> <?php } ?> diff --git a/modules/cms/ui/themes/default/html/views/element/advanced.tpl.src.xml b/modules/cms/ui/themes/default/html/views/element/advanced.tpl.src.xml @@ -60,7 +60,7 @@ </if> <if present="decimals"> <fieldset class="line" label="${message:EL_PROP_DECIMALS}"> - <input size="10" maxlength="2" name="decimals"/> + <input type="number" size="10" maxlength="2" name="decimals"/> </fieldset> </if> <if present="dec_point"> diff --git a/modules/dsl/DslAstParser.class.php b/modules/dsl/DslAstParser.class.php @@ -28,7 +28,7 @@ class DslAstParser public function execute($context) { - $this->rootStatement->execute( $context ); + return $this->rootStatement->execute( $context ); } diff --git a/modules/dsl/ast/DslAssignment.class.php b/modules/dsl/ast/DslAssignment.class.php @@ -38,6 +38,8 @@ class DslAssignment implements DslStatement throw new DslRuntimeException('variable \''.$this->target->name.'\' does not exist'); $context[ $this->target->name ] = $value; + + return $value; } public function parse($tokens) diff --git a/modules/dsl/ast/DslBlock.class.php b/modules/dsl/ast/DslBlock.class.php @@ -1,64 +0,0 @@ -<?php - -namespace dsl\ast; - -use dsl\DslParserException; -use dsl\DslToken; - -class DslBlock implements DslStatement -{ - private $statements; - - public function execute( & $context) - { - foreach( $this->statements as $statement ) - $statement->execute( $context ); - } - - - /** - * @throws DslParserException - */ - public function parse($tokens) - { - $lastTokens = []; - $depth = 0; - - foreach( $tokens as $token ) { - - if ( $token->type == DslToken::T_BLOCK_BEGIN ) { - $depth++; - if ( $depth == 1 ) { - $statements = new DslStatementList(); - $statements->parse( $lastTokens ); - $this->statements[] = $statements; - $lastTokens = []; - continue; - } - } - - if ( $token->type == DslToken::T_BLOCK_END ) { - $depth--; - - if ( $depth < 0 ) - throw new DslParserException('Unmatched closing block',$token->lineNumber); - - if ( $depth == 0 ) { - $block = new DslBlock(); - $block->parse($lastTokens); - $this->statements[] = $block; - $lastTokens = []; // clear - continue; - } - } - - $lastTokens[] = $token; - } - if ( $depth > 0 ) - throw new DslParserException('Unclosed block at the end'); - - $statements = new DslStatementList(); - $statements->parse( $lastTokens ); - $this->statements[] = $statements; - } -} -\ No newline at end of file diff --git a/modules/dsl/ast/DslCreation.class.php b/modules/dsl/ast/DslCreation.class.php @@ -1,28 +0,0 @@ -<?php - -namespace dsl\ast; - -use dsl\DslRuntimeException; - -class DslCreation implements DslStatement -{ - private $name; - private $value; - - public function __construct( $name, $parameters ) - { - $this->name = $name; - $this->value = new DslExpression( $parameters ); - } - - public function execute( & $context ) { - if ( array_key_exists( $this->name, $context ) ) - throw new DslRuntimeException('variable '.$this->name.' is already initialised'); - - $context[ $this->name ] = $this->value->execute( $context ); - } - - public function parse($tokens) - { - } -} -\ No newline at end of file diff --git a/modules/dsl/ast/DslElement.class.php b/modules/dsl/ast/DslElement.class.php @@ -87,28 +87,33 @@ class DslElement if ($firstToken->type == DslToken::T_BLOCK_BEGIN) return $this->getBlock($tokens); else - return $this->getSingleStatement($tokens); + return $this->getSingleStatement($tokens,true); } /** - * parse single statement + * Gets the first single statement out of the tokens. * * @param $tokens DslToken[] * @return DslToken[] * @throws DslParserException */ - protected function getSingleStatement(&$tokens) + protected function getSingleStatement(&$tokens, $withEnd = false) { $depth = 0; $statementTokens = []; while (true) { $nextToken = array_shift($tokens); if ($nextToken == null) + var_export( $statementTokens ); + if ($nextToken == null) throw new DslParserException('unrecognized statement'); - if ($depth == 0 && $nextToken->type == DslToken::T_STATEMENT_END) + if ($depth == 0 && $nextToken->type == DslToken::T_STATEMENT_END) { + if ( $withEnd ) + $statementTokens[] = $nextToken; return $statementTokens; + } if ($nextToken->type == DslToken::T_BLOCK_BEGIN) $depth++; diff --git a/modules/dsl/ast/DslGroup.class.php b/modules/dsl/ast/DslGroup.class.php @@ -1,16 +0,0 @@ -<?php - -namespace dsl\ast; - -class DslGroup implements DslStatement -{ - private $statements; - - public function execute( & $context ) { - - } - - public function parse($tokens) - { - } -} -\ No newline at end of file diff --git a/modules/dsl/ast/DslIf.class.php b/modules/dsl/ast/DslIf.class.php @@ -26,9 +26,9 @@ class DslIf implements DslStatement $conditionValue = $this->condition->execute( $context ); if ( $conditionValue ) - $this->pos->execute( $context ); + return $this->pos->execute( $context ); else - $this->neg->execute( $context ); + return $this->neg->execute( $context ); } public function __construct( $condition, $positive,$negative ) { diff --git a/modules/dsl/ast/DslStatementList.class.php b/modules/dsl/ast/DslStatementList.class.php @@ -37,6 +37,8 @@ class DslStatementList extends DslElement implements DslStatement if ($statement instanceof DslReturn) return $value; // Return to the caller } + + return null; } diff --git a/modules/dsl/executor/DslInterpreter.class.php b/modules/dsl/executor/DslInterpreter.class.php @@ -3,7 +3,9 @@ namespace dsl\executor; use dsl\DslAstParser; +use dsl\DslException; use dsl\DslLexer; +use dsl\DslParserException; use dsl\standard\StandardArray; use dsl\standard\StandardDate; use dsl\standard\StandardMath; @@ -33,7 +35,9 @@ class DslInterpreter /** - * @throws \Exception + * Parses and runs the DSL code. + * + * @throws DslException */ public function runCode( $code ) { $lexer = new DslLexer(); @@ -42,6 +46,6 @@ class DslInterpreter $parser = new DslAstParser(); $parser->parse( $token ); - $parser->execute( $this->context ); + return $parser->execute( $this->context ); } } \ No newline at end of file diff --git a/modules/language/Language_CN.class.php b/modules/language/Language_CN.class.php @@ -163,6 +163,8 @@ public function get() { return [ 'EL_CODE'=>'Code', 'EL_CODE_PHP'=>'PHP', 'EL_CODE_JS'=>'Javascript', +'EL_COORD_OLC'=>'Open location code', +'EL_COORD_COORDINATES'=>'Coordinates', 'EL_COPY_DESC'=>'Copy a Value out of an element of a linked page', 'EL_COPY'=>'Copy', 'EL_DATE'=>'Date', diff --git a/modules/language/Language_DE.class.php b/modules/language/Language_DE.class.php @@ -163,6 +163,8 @@ public function get() { return [ 'EL_CODE'=>'Code', 'EL_CODE_PHP'=>'PHP', 'EL_CODE_JS'=>'Javascript', +'EL_COORD_OLC'=>'Open location code', +'EL_COORD_COORDINATES'=>'Koordinaten', 'EL_COPY_DESC'=>'Einen Wert aus einem Platzhalter einer verlinkten Seite kopieren', 'EL_COPY'=>'Kopie', 'EL_DATE'=>'Datum', diff --git a/modules/language/Language_EN.class.php b/modules/language/Language_EN.class.php @@ -163,6 +163,8 @@ public function get() { return [ 'EL_CODE'=>'Code', 'EL_CODE_PHP'=>'PHP', 'EL_CODE_JS'=>'Javascript', +'EL_COORD_OLC'=>'Open location code', +'EL_COORD_COORDINATES'=>'Coordinates', 'EL_COPY_DESC'=>'Copy a Value out of an element of a linked page', 'EL_COPY'=>'Copy', 'EL_DATE'=>'Date', diff --git a/modules/language/Language_ES.class.php b/modules/language/Language_ES.class.php @@ -163,6 +163,8 @@ public function get() { return [ 'EL_CODE'=>'Código', 'EL_CODE_PHP'=>'PHP', 'EL_CODE_JS'=>'Javascript', +'EL_COORD_OLC'=>'Open location code', +'EL_COORD_COORDINATES'=>'Coordinates', 'EL_COPY_DESC'=>'Copy a Value out of an element of a linked page', 'EL_COPY'=>'Copy', 'EL_DATE'=>'Fecha', diff --git a/modules/language/Language_FR.class.php b/modules/language/Language_FR.class.php @@ -163,6 +163,8 @@ public function get() { return [ 'EL_CODE'=>'Code', 'EL_CODE_PHP'=>'PHP', 'EL_CODE_JS'=>'Javascript', +'EL_COORD_OLC'=>'Open location code', +'EL_COORD_COORDINATES'=>'Coordinates', 'EL_COPY_DESC'=>'Copy a Value out of an element of a linked page', 'EL_COPY'=>'Copy', 'EL_DATE'=>'Date', diff --git a/modules/language/Language_IT.class.php b/modules/language/Language_IT.class.php @@ -163,6 +163,8 @@ public function get() { return [ 'EL_CODE'=>'codice', 'EL_CODE_PHP'=>'PHP', 'EL_CODE_JS'=>'Javascript', +'EL_COORD_OLC'=>'Open location code', +'EL_COORD_COORDINATES'=>'Coordinates', 'EL_COPY_DESC'=>'Copy a Value out of an element of a linked page', 'EL_COPY'=>'La data del copy', 'EL_DATE'=>'Date', diff --git a/modules/language/Language_RU.class.php b/modules/language/Language_RU.class.php @@ -163,6 +163,8 @@ public function get() { return [ 'EL_CODE'=>'Code', 'EL_CODE_PHP'=>'PHP', 'EL_CODE_JS'=>'Javascript', +'EL_COORD_OLC'=>'Open location code', +'EL_COORD_COORDINATES'=>'Coordinates', 'EL_COPY_DESC'=>'Copy a Value out of an element of a linked page', 'EL_COPY'=>'Copy', 'EL_DATE'=>'Дата', diff --git a/modules/language/Messages.class.php b/modules/language/Messages.class.php @@ -163,6 +163,8 @@ class Messages { const EL_CODE = 'EL_CODE'; const EL_CODE_PHP = 'EL_CODE_PHP'; const EL_CODE_JS = 'EL_CODE_JS'; + const EL_COORD_OLC = 'EL_COORD_OLC'; + const EL_COORD_COORDINATES = 'EL_COORD_COORDINATES'; const EL_COPY_DESC = 'EL_COPY_DESC'; const EL_COPY = 'EL_COPY'; const EL_DATE = 'EL_DATE'; diff --git a/modules/language/language.yml b/modules/language/language.yml @@ -703,6 +703,11 @@ EL_CODE_PHP: en: PHP EL_CODE_JS: en: Javascript +EL_COORD_OLC: + en: Open location code +EL_COORD_COORDINATES: + de: Koordinaten + en: Coordinates EL_COPY_DESC: de: Einen Wert aus einem Platzhalter einer verlinkten Seite kopieren en: Copy a Value out of an element of a linked page