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