openrat-cms

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

commit 1a101ddf683921676a313195d5275a751d9742bd
parent 94a5c5a2f014b0173c0bcf67e1089ef45e908849
Author: Jan Dankert <develop@jandankert.de>
Date:   Sat,  4 May 2019 21:56:21 +0200

Für Elemente wird zwischen dem Anzeige-Namen (Label) und dem technischen Namen unterschieden. Dadurch kann das Label geändert werden, ohne die Templates anzupassen.

Diffstat:
modules/cms-core/action/ElementAction.class.php | 9+++++++--
modules/cms-core/action/PageAction.class.php | 3++-
modules/cms-core/action/PageelementAction.class.php | 2+-
modules/cms-core/model/Element.class.php | 19+++++++++++++++----
modules/cms-core/model/Template.class.php | 1+
modules/cms-ui/themes/default/html/views/element/edit.php | 18+++++++++++++-----
modules/cms-ui/themes/default/html/views/element/edit.tpl.src.xml | 15++++++++++++---
modules/database-update/DbUpdate.class.php | 6+++---
modules/database-update/update/DBVersion000018.class.php | 34++++++++++++++++++++++++++++++++++
modules/language/lang-cn.php | 2++
modules/language/lang-de.php | 2++
modules/language/lang-en.php | 2++
modules/language/lang-es.php | 2++
modules/language/lang-fr.php | 2++
modules/language/lang-it.php | 2++
modules/language/lang-ru.php | 2++
modules/language/language.yml | 10++++++++--
17 files changed, 110 insertions(+), 21 deletions(-)

diff --git a/modules/cms-core/action/ElementAction.class.php b/modules/cms-core/action/ElementAction.class.php @@ -36,8 +36,11 @@ use Text; class ElementAction extends Action { public $security = SECURITY_USER; - - var $element; + + /** + * @var Element + */ + private $element; private $template; @@ -70,6 +73,7 @@ class ElementAction extends Action function editPost() { $this->element->name = $this->getRequestVar('name' ,OR_FILTER_ALPHANUM); + $this->element->label= $this->getRequestVar('label' ,OR_FILTER_ALPHANUM); $this->element->desc = $this->getRequestVar('description','all' ); $this->element->save(); @@ -142,6 +146,7 @@ class ElementAction extends Action // Name und Beschreibung $this->setTemplateVar('name' ,$this->element->name); + $this->setTemplateVar('label' ,$this->element->label); $this->setTemplateVar('description',$this->element->desc); } diff --git a/modules/cms-core/action/PageAction.class.php b/modules/cms-core/action/PageAction.class.php @@ -442,7 +442,7 @@ class PageAction extends ObjectAction if ( $value->element->isWritable() ) { $list[$id] = array(); - $list[$id]['name'] = $value->element->name; + $list[$id]['name'] = $value->element->label; $list[$id]['pageelementid' ] = $this->page->objectid.'_'.$id; $list[$id]['desc'] = $value->element->desc; $list[$id]['languageid'] = $this->page->languageid; @@ -581,6 +581,7 @@ class PageAction extends ObjectAction // The output is only shown in an iframe, so there is no security impact to the CMS. // But if the template is using inline JS or CSS, we would break this with a CSP-header. header('Content-Security-Policy:'); + // TODO: Read CSP from root folder settings. // Seite definieren if ( $this->hasRequestVar('withIcons') ) diff --git a/modules/cms-core/action/PageelementAction.class.php b/modules/cms-core/action/PageelementAction.class.php @@ -233,7 +233,7 @@ class PageelementAction extends Action $this->value->element->load(); $this->value->publisher = new PublishEdit(); - $this->setTemplateVar('name' ,$this->value->element->name ); + $this->setTemplateVar('name' ,$this->value->element->label ); $this->setTemplateVar('description',$this->value->element->desc ); $this->setTemplateVar('elementid' ,$this->value->element->elementid); $this->setTemplateVar('type' ,$this->value->element->getTypeName() ); diff --git a/modules/cms-core/model/Element.class.php b/modules/cms-core/model/Element.class.php @@ -88,6 +88,12 @@ class Element var $name; /** + * Eingabefeld-Bezeichnung für dieses Element. + * @type String + */ + var $label; + + /** * Beschreibung zu diesem Element * Zu jedem Element kann eine Beschreibung hinterlegt werden, die dem Redakteur bei der Bearbeitung * der Inhalte als Bearbeitungshilfe dienen kann. @@ -186,6 +192,7 @@ class Element $sql->setInt ( 'elementid' ,$this->elementid ); $sql->setString ( 'name' ,$this->name ); + $sql->setString ( 'label' ,$this->label ); $sql->setInt ( 'typeid' ,$this->typeid ); $sql->setInt ( 'templateid' ,$this->templateid ); $sql->setBoolean( 'flags' ,$flags ); @@ -228,6 +235,7 @@ SQL $this->elementid = $prop['id' ]; $this->templateid = $prop['templateid']; $this->name = $prop['name' ]; + $this->label = $prop['label' ]; $this->desc = $prop['descr' ]; $this->typeid = $prop['typeid' ]; $this->type = Element::getAvailableTypes()[ $this->typeid ]; // name of type @@ -266,6 +274,7 @@ SQL $sql = $db->sql( 'UPDATE {{element}}'. ' SET templateid = {templateid},'. ' name = {name},'. + ' label = {label},'. ' descr = {desc},'. ' typeid = {typeid},'. ' subtype = {subtype},'. @@ -291,6 +300,7 @@ SQL $sql->setInt ( 'elementid' ,$this->elementid ); $sql->setInt ( 'templateid' ,$this->templateid ); $sql->setString ( 'name' ,$this->name ); + $sql->setString ( 'label' ,$this->label ); $sql->setString ( 'desc' ,$this->desc ); $sql->setInt ( 'typeid' ,$this->typeid ); $sql->setString ( 'subtype' ,$this->subtype ); @@ -357,14 +367,15 @@ SQL /** * Loeschen des Elementes und aller Inhalte */ - function delete() + public function delete() { $db = db_connection(); - // Inhalte l?schen + // Inhalte loeschen. + // notwendig, damit die Fremdschlüsselbeziehungen auf diesen Element aufgehoben werden. $this->deleteValues(); - // Element l?schen + // Element loeschen $sql = $db->sql('DELETE FROM {{element}} '. ' WHERE id={elementid}' ); $sql->setInt( 'elementid',$this->elementid ); @@ -377,7 +388,7 @@ SQL * L?schen aller Seiteninhalte mit diesem Element * Das Element wird nicht gel?scht. */ - function deleteValues() + public function deleteValues() { $db = db_connection(); diff --git a/modules/cms-core/model/Template.class.php b/modules/cms-core/model/Template.class.php @@ -277,6 +277,7 @@ SQL { $element = new Element(); $element->name = $name; + $element->label = $name; $element->desc = $description; $element->typeid = $typeid; $element->templateid = $this->templateid; diff --git a/modules/cms-ui/themes/default/html/views/element/edit.php b/modules/cms-ui/themes/default/html/views/element/edit.php @@ -1,15 +1,23 @@ - - <form name="" target="_self" data-target="view" action="./" data-method="edit" data-action="element" data-id="<?php echo OR_ID ?>" method="POST" enctype="application/x-www-form-urlencoded" class="or-form element" data-async="" data-autosave=""><input type="hidden" name="<?php echo REQ_PARAM_EMBED ?>" value="1" /><input type="hidden" name="<?php echo REQ_PARAM_TOKEN ?>" value="<?php echo token() ?>" /><input type="hidden" name="<?php echo REQ_PARAM_ACTION ?>" value="element" /><input type="hidden" name="<?php echo REQ_PARAM_SUBACTION ?>" value="edit" /><input type="hidden" name="<?php echo REQ_PARAM_ID ?>" value="<?php echo OR_ID ?>" /> <div class="line"> <div class="label"> - <span><?php echo nl2br(encodeHtml(htmlentities(lang('ELEMENT_NAME')))); ?></span> + <span><?php echo nl2br(encodeHtml(htmlentities(lang(''.'LABEL'.'')))); ?></span> </div> <div class="input"> - <div class="inputholder"><input id="<?php echo REQUEST_ID ?>_name" name="<?php if ('') echo ''.'_' ?>name<?php if ('') echo '_disabled' ?>" required="required" autofocus="autofocus" type="text" maxlength="50" class="" value="<?php echo Text::encodeHtml(@$name) ?>" /><?php if ('') { ?><input type="hidden" name="name" value="<?php $name ?>"/><?php } ?></div> + <div class="inputholder"><input id="<?php echo REQUEST_ID ?>_label" name="<?php if ('') echo ''.'_' ?>label<?php if ('') echo '_disabled' ?>" required="required" autofocus="autofocus" type="text" maxlength="100" class="" value="<?php echo Text::encodeHtml(@$label) ?>" /><?php if ('') { ?><input type="hidden" name="label" value="<?php $label ?>"/><?php } ?></div> + + </div> + </div> + <div class="line"> + <div class="label"> + <span><?php echo nl2br(encodeHtml(htmlentities(lang(''.'NAME'.'')))); ?></span> + + </div> + <div class="input"> + <div class="inputholder"><input id="<?php echo REQUEST_ID ?>_name" name="<?php if ('') echo ''.'_' ?>name<?php if ('') echo '_disabled' ?>" required="required" type="text" maxlength="50" class="" value="<?php echo Text::encodeHtml(@$name) ?>" /><?php if ('') { ?><input type="hidden" name="name" value="<?php $name ?>"/><?php } ?></div> </div> </div> @@ -23,5 +31,5 @@ </div> </div> - <div class="or-form-actionbar"><input type="submit" class="or-form-btn or-form-btn--primary" value="OK" /></div></form> + <div class="or-form-actionbar"><input type="button" class="or-form-btn or-form-btn--secondary or-form-btn--cancel" value="<?php echo lang("CANCEL") ?>" /><input type="submit" class="or-form-btn or-form-btn--primary" value="OK" /></div></form> \ No newline at end of file diff --git a/modules/cms-ui/themes/default/html/views/element/edit.tpl.src.xml b/modules/cms-ui/themes/default/html/views/element/edit.tpl.src.xml @@ -1,13 +1,22 @@ <output xmlns="http://www.openrat.de/template" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.openrat.de/template ../../../../../../template-engine/components/template.xsd"> - <header views="advanced,remove"></header> + <form> <part class="line"> <part class="label"> - <text text="ELEMENT_NAME"></text> + <text key="LABEL"></text> + </part> + <part class="input"> + <input name="label" focus="true" required="true" maxlength="100" /> + </part> + </part> + + <part class="line"> + <part class="label"> + <text key="NAME"></text> </part> <part class="input"> - <input name="name" focus="true" required="true" maxlength="50" /> + <input name="name" required="true" maxlength="50" /> </part> </part> diff --git a/modules/database-update/DbUpdate.class.php b/modules/database-update/DbUpdate.class.php @@ -2,7 +2,7 @@ use database\Database; -define('OR_DB_SUPPORTED_VERSION' ,17); +define('OR_DB_SUPPORTED_VERSION' ,18); define('OR_DB_STATUS_UPDATE_PROGRESS', 0); define('OR_DB_STATUS_UPDATE_SUCCESS' , 1); @@ -22,10 +22,10 @@ class DbUpdate if ( $version > OR_DB_SUPPORTED_VERSION ) // Oh oh, in der Datenbank ist eine neue Version, als wir unterstüzten. - throw new \LogicException('Actual DB version is not supported.',"DB-Version is $version, but this is OpenRat ".OR_VERSION." which only supports version ".OR_DB_SUPPORTED_VERSION ); + throw new \LogicException('Actual DB version is not supported. '."DB-Version is $version, but this is OpenRat ".OR_VERSION." which only supports version ".OR_DB_SUPPORTED_VERSION ); if ( ! $db->conf['auto_update']) - throw new \LogicException('DB Update necessary.',"DB-Version is $version. Auto-Update is disabled, but this is OpenRat ".OR_VERSION." needs the version ".OR_DB_SUPPORTED_VERSION ); + throw new \LogicException('DB Update necessary. '."DB-Version is $version. Auto-Update is disabled, but this is OpenRat ".OR_VERSION." needs the version ".OR_DB_SUPPORTED_VERSION ); for( $installVersion = $version + 1; $installVersion <= OR_DB_SUPPORTED_VERSION; $installVersion++ ) { diff --git a/modules/database-update/update/DBVersion000018.class.php b/modules/database-update/update/DBVersion000018.class.php @@ -0,0 +1,34 @@ +<?php + +use database\DbVersion; +use security\Password; + +/** + * Elements should have a name and a separate label. + * + * @author dankert + * + */ +class DBVersion000018 extends DbVersion +{ + /** + * + */ + public function update() + { + $this->addColumn('element','label' ,OR_DB_COLUMN_TYPE_VARCHAR,100,'',OR_DB_COLUMN_NOT_NULLABLE); + + // Initial Value for Labels is the element name. + $tableElement = $this->getTableName('element'); + + $updateStmt = $this->getDb()->sql(<<<SQL +UPDATE $tableElement + SET label=name +SQL + ); + $updateStmt->query(); + + $this->addUniqueIndex('element','templateid,label'); + } +} + diff --git a/modules/language/lang-cn.php b/modules/language/lang-cn.php @@ -1279,4 +1279,6 @@ function language() { return array( 'CMS'=>"Content Management System", 'SEARCH_FILTER'=>"Filter", 'QRCODE_SHOW'=>"Show QR-Code", +'LABEL'=>"Label", +'NAME'=>"Name", );} \ No newline at end of file diff --git a/modules/language/lang-de.php b/modules/language/lang-de.php @@ -1279,4 +1279,6 @@ function language() { return array( 'CMS'=>"Redaktionssystem", 'SEARCH_FILTER'=>"Filter", 'QRCODE_SHOW'=>"QR-Code anzeigen", +'LABEL'=>"Anzeigename", +'NAME'=>"Name", );} \ No newline at end of file diff --git a/modules/language/lang-en.php b/modules/language/lang-en.php @@ -1279,4 +1279,6 @@ function language() { return array( 'CMS'=>"Content Management System", 'SEARCH_FILTER'=>"Filter", 'QRCODE_SHOW'=>"Show QR-Code", +'LABEL'=>"Label", +'NAME'=>"Name", );} \ No newline at end of file diff --git a/modules/language/lang-es.php b/modules/language/lang-es.php @@ -1303,4 +1303,6 @@ MENU_INDEX_ADMINISTRATION_DESC =", 'CMS'=>"Content Management System", 'SEARCH_FILTER'=>"Filter", 'QRCODE_SHOW'=>"Show QR-Code", +'LABEL'=>"Label", +'NAME'=>"Name", );} \ No newline at end of file diff --git a/modules/language/lang-fr.php b/modules/language/lang-fr.php @@ -1279,4 +1279,6 @@ function language() { return array( 'CMS'=>"Content Management System", 'SEARCH_FILTER'=>"Filter", 'QRCODE_SHOW'=>"Show QR-Code", +'LABEL'=>"Label", +'NAME'=>"Name", );} \ No newline at end of file diff --git a/modules/language/lang-it.php b/modules/language/lang-it.php @@ -1279,4 +1279,6 @@ function language() { return array( 'CMS'=>"Content Management System", 'SEARCH_FILTER'=>"Filter", 'QRCODE_SHOW'=>"Show QR-Code", +'LABEL'=>"Label", +'NAME'=>"Name", );} \ No newline at end of file diff --git a/modules/language/lang-ru.php b/modules/language/lang-ru.php @@ -1279,4 +1279,6 @@ function language() { return array( 'CMS'=>"Content Management System", 'SEARCH_FILTER'=>"Filter", 'QRCODE_SHOW'=>"Show QR-Code", +'LABEL'=>"Label", +'NAME'=>"Name", );} \ No newline at end of file diff --git a/modules/language/language.yml b/modules/language/language.yml @@ -6124,4 +6124,10 @@ SEARCH_FILTER: en: Filter QRCODE_SHOW: de: QR-Code anzeigen - en: Show QR-Code- \ No newline at end of file + en: Show QR-Code +LABEL: + de: Anzeigename + en: Label +NAME: + de: Name + en: Name+ \ No newline at end of file