commit 9352e2dfe484d3e24d40b0cf1d225488263a45a8
parent 20861a34238a0dee0d2e44be7d97ceda733a0448
Author: Jan Dankert <devnull@localhost>
Date: Mon, 26 Nov 2018 23:39:01 +0100
Name/Beschreibung von Objekten wird über eine eigene Model-Klasse gelesen und geschrieben. Dadurch soll das BaseObject unabhängig von der Sprache werden und es ist möglich, zu einem BaseObject die Namen für alle Sprachen bequem zu ermitteln.
Diffstat:
9 files changed, 259 insertions(+), 55 deletions(-)
diff --git a/modules/cms-core/action/FolderAction.class.php b/modules/cms-core/action/FolderAction.class.php
@@ -3,6 +3,7 @@
namespace cms\action;
use ArchiveTar;
+use cms\model\Language;
use cms\model\Project;
use cms\model\Template;
use cms\model\Page;
@@ -48,6 +49,9 @@ class FolderAction extends ObjectAction
{
public $security = SECURITY_USER;
+ /**
+ * @var Folder
+ */
private $folder;
public function __construct()
@@ -274,8 +278,7 @@ class FolderAction extends ObjectAction
/**
- * Abspeichern der Ordner-Eigenschaften. Ist der Schalter "delete" gesetzt, wird
- * der Ordner stattdessen gel?scht.
+ * Abspeichern der Ordner-Eigenschaften.
*/
public function propPost()
{
@@ -295,6 +298,22 @@ class FolderAction extends ObjectAction
$this->folder->filename = $this->getRequestVar('filename' ,OR_FILTER_ALPHANUM);
$this->folder->desc = $this->getRequestVar('description','full' );
$this->folder->save();
+
+
+ // Name/Beschreibung für alle Sprachen speichern.
+ foreach( $this->folder->getNames() as $name )
+ {
+ $language = new Language( $name->languageid );
+ $language->load();
+
+ if ( $this->hasRequestVar( 'name_'.$language->name ) )
+ $name->name = $this->getRequestVar( 'name_'.$language->name );
+ if ( $this->hasRequestVar( 'description_'.$language->name ) )
+ $name->description = $this->getRequestVar( 'description_'.$language->name );
+
+ $name->save();
+ }
+
$this->addNotice($this->folder->getType(),$this->folder->name,'PROP_SAVED','ok');
}
@@ -1285,6 +1304,20 @@ class FolderAction extends ObjectAction
public function propView()
{
$this->setTemplateVars( $this->folder->getProperties() );
+
+ $nameProps = array();
+ foreach( $this->folder->getNames() as $name )
+ {
+ $nameProps[ $name->languageid ] = get_object_vars( $name );
+ $language = new Language( $name->languageid );
+ $language->load();
+ $nameProps[ $name->languageid ]['languageName' ] = $language->name;
+ $nameProps[ $name->languageid ]['languageIsDefault'] = $language->isDefault;
+ $nameProps[ $name->languageid ]['languageIsoCode' ] = $language->isoCode;
+ }
+ $this->setTemplateVar('names',$nameProps);
+
+
}
/**
diff --git a/modules/cms-core/model/BaseObject.class.php b/modules/cms-core/model/BaseObject.class.php
@@ -19,11 +19,10 @@ namespace cms\model {
/**
* Superklasse fuer Objekte im Projektbaum.
*
- * Dieses Objekt ist die Oberklasse fuer die 4 Klassen Ordner, Datei,
- * Link oder Seite dar.
+ * Dieses Objekt ist die Oberklasse fuer die Klassen Ordner, Datei,
+ * Link, Seite usw.
*
* @author Jan Dankert
- * @package openrat.objects
*/
class BaseObject
{
@@ -1415,6 +1414,24 @@ SQL
{
return 'Object-Id '.$this->objectid.' (type='.$this->getType().',filename='.$this->filename.',language='.$this->languageid.', modelid='.$this->modelid.')';
}
+
+
+ public function getNames()
+ {
+ $names = array();
+
+ foreach( $this->getProject()->getLanguages() as $languageId=>$languageName )
+ {
+ $name = new Name();
+ $name->objectid = $this->objectid;
+ $name->languageid = $languageId;
+ $name->load();
+
+ $names[] = $name;
+ }
+
+ return $names;
+ }
}
diff --git a/modules/cms-core/model/Language.class.php b/modules/cms-core/model/Language.class.php
@@ -27,13 +27,12 @@ namespace cms\model;
*/
class Language
{
- var $languageid = 0;
- var $error = '';
- var $projectid;
+ public $languageid;
+ public $projectid;
- var $name = '';
- var $isoCode = '';
- var $isDefault = false;
+ public $name;
+ public $isoCode;
+ public $isDefault = false;
// Konstruktor
diff --git a/modules/cms-core/model/Name.class.php b/modules/cms-core/model/Name.class.php
@@ -0,0 +1,158 @@
+<?php
+
+
+namespace cms\model {
+
+ /**
+ * Darstellung von Name und Beschreibung eines Objektes.
+ *
+ * @author Jan Dankert
+ * @package openrat.objects
+ */
+ class Name
+ {
+ /** eindeutige ID dieses Objektes
+ * @type Integer
+ */
+ public $nameid;
+
+ public $objectid;
+
+ /** Logischer (sprachabhaengiger) Name des Objektes
+ * (wird in Tabelle <code>name</code> abgelegt)
+ * @type String
+ */
+ public $name = '';
+
+ /** Logische (sprachabhaengige) Beschreibung des Objektes
+ * (wird in Tabelle <code>name</code> abgelegt)
+ * @type String
+ */
+ public $description;
+
+ /** Sprach-ID
+ * @see Language
+ * @type Integer
+ */
+ public $languageid;
+
+ /** <strong>Konstruktor</strong>
+ *
+ * @param Integer Objekt-ID
+ */
+ function __construct($nameid=0 )
+ {
+ $this->nameid = $nameid;
+ }
+
+
+ /**
+ * Lesen der Eigenschaften aus der Datenbank
+ * Es werden
+ * - die sprachabh?ngigen Daten wie Name und Beschreibung geladen
+ * @throws \ObjectNotFoundException
+ */
+ public function load()
+ {
+ $db = db_connection();
+
+ $stmt = $db->sql( <<<SQL
+ SELECT id,objectid,name,descr,languageid
+ FROM {{name}}
+ WHERE languageid = {languageid}
+ AND objectid = {objectid}
+SQL
+ );
+
+ $stmt->setInt('languageid', $this->languageid);
+ $stmt->setInt('objectid' , $this->objectid );
+
+ $row = $stmt->getRow();
+
+ if (count($row) > 0)
+ $this->setDatabaseRow( $row );
+ }
+
+
+
+
+ /**
+ * Setzt die Eigenschaften des Objektes mit einer Datenbank-Ergebniszeile
+ *
+ * @param array Ergebniszeile aus Datenbanktabelle
+ */
+ private function setDatabaseRow( $row )
+ {
+ $this->nameid = $row['id' ];
+ $this->objectid = $row['objectid' ];
+ $this->languageid = $row['languageid'];
+ $this->name = $row['name' ];
+ $this->description = $row['descr'];
+ }
+
+
+
+ /**
+ * Logischen Namen und Beschreibung des Objektes in Datenbank speichern
+ *
+ */
+ public function save()
+ {
+ $db = db_connection();
+
+ if ( intval($this->nameid) > 0)
+ {
+ $sql = $db->sql( <<<SQL
+ UPDATE {{name}} SET
+ name = {name},
+ descr = {desc}
+ WHERE objectid ={objectid}
+ AND languageid={languageid}
+SQL
+ );
+ $sql->setString('name', $this->name);
+ $sql->setString('desc', $this->description);
+ $sql->setInt( 'objectid' , $this->objectid );
+ $sql->setInt( 'languageid', $this->languageid );
+ $sql->query();
+ }
+ else
+ {
+ $sql = $db->sql('SELECT MAX(id) FROM {{name}}');
+ $this->nameid = intval($sql->getOne())+1;
+
+ $sql = $db->sql('INSERT INTO {{name}}'.' (id,objectid,languageid,name,descr)'.' VALUES( {nameid},{objectid},{languageid},{name},{desc} )');
+ $sql->setInt ('nameid' , $this->nameid );
+ $sql->setInt ('objectid' , $this->objectid );
+ $sql->setInt ('languageid', $this->languageid );
+ $sql->setString('name' , $this->name);
+ $sql->setString('desc' , $this->description);
+ $sql->query();
+ }
+ }
+
+ /**
+ */
+ public function objectDelete()
+ {
+ // not necessary, because names are deleted by BaseObject::delete()
+ }
+
+
+ /**
+ * Eigenschaften des Objektes.
+ * @return array
+ */
+ public function getProperties()
+ {
+ return get_object_vars( $this );
+
+ }
+
+
+ }
+
+
+
+
+}?>+
\ No newline at end of file
diff --git a/modules/cms-core/model/require.php b/modules/cms-core/model/require.php
@@ -7,7 +7,8 @@ require_once( __DIR__.'/Value.class.php' );
require_once( __DIR__.'/Acl.class.php' );
require_once( __DIR__.'/Template.class.php' );
require_once( __DIR__.'/TemplateModel.class.php' );
-require_once(__DIR__ . '/BaseObject.class.php');
+require_once( __DIR__ .'/BaseObject.class.php');
+require_once( __DIR__ .'/Name.class.php');
require_once( __DIR__.'/Folder.class.php' );
require_once( __DIR__.'/Link.class.php' );
require_once( __DIR__.'/Url.class.php' );
@@ -22,4 +23,3 @@ require_once( __DIR__.'/Language.class.php' );
require_once( __DIR__.'/Model.class.php' );
require_once( __DIR__.'/Element.class.php' );
-?>-
\ No newline at end of file
diff --git a/modules/cms-ui/themes/default/html/views/file/edit.php b/modules/cms-ui/themes/default/html/views/file/edit.php
@@ -9,7 +9,7 @@
<div class="input">
<br/>
- <input size="40" id="req1543263821943001488_file" type="file" name="file" class="upload" />
+ <input size="40" id="req1543270168648183047_file" type="file" name="file" class="upload" />
<br/>
diff --git a/modules/cms-ui/themes/default/html/views/folder/prop.php b/modules/cms-ui/themes/default/html/views/folder/prop.php
@@ -11,29 +11,25 @@
</label>
</div>
<div class="input">
- <div class="inputholder"><input id="<?php echo REQUEST_ID ?>_name" name="name<?php if ('') echo '_disabled' ?>" type="text" maxlength="256" class="name,focus" 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 ?>_name" name="<?php if ('') echo ''.'_' ?>name<?php if ('') echo '_disabled' ?>" type="text" maxlength="256" class="name,focus" value="<?php echo Text::encodeHtml(@$name) ?>" /><?php if ('') { ?><input type="hidden" name="name" value="<?php $name ?>"/><?php } ?></div>
</div>
</div>
- <div class="line">
- <div class="label">
- <label for="<?php echo REQUEST_ID ?>_filename" class="label"><?php echo lang('global_filename') ?>
- </label>
- </div>
- <div class="input">
- <div class="inputholder"><input id="<?php echo REQUEST_ID ?>_filename" name="filename<?php if ('') echo '_disabled' ?>" type="text" maxlength="150" class="filename" value="<?php echo Text::encodeHtml(@$filename) ?>" /><?php if ('') { ?><input type="hidden" name="filename" value="<?php $filename ?>"/><?php } ?></div>
+ <label class="or-form-row"><span class="or-form-label">Dateiname</span><span class="or-form-input"><div class="inputholder"><input id="<?php echo REQUEST_ID ?>_filename" name="<?php if ('') echo ''.'_' ?>filename<?php if ('') echo '_disabled' ?>" autofocus="autofocus" type="text" maxlength="150" class="filename" value="<?php echo Text::encodeHtml(@$filename) ?>" /><?php if ('') { ?><input type="hidden" name="filename" value="<?php $filename ?>"/><?php } ?></div></span></label>
+
+ <label class="or-form-row"><span class="or-form-label">Beschreibung</span><span class="or-form-input"><div class="inputholder"><textarea class="description" name="<?php if ('') echo ''.'_' ?>description<?php if ('') echo '_disabled' ?>"><?php echo Text::encodeHtml($description) ?></textarea></div></span></label>
+
+ <?php foreach($names as $list_key=>$list_value){ ?><?php extract($list_value) ?>
+ <fieldset class="toggle-open-close<?php echo $languageIsDefault?" open":" closed" ?><?php echo '1'?" show":"" ?>"><legend class="on-click-open-close"><div class="arrow arrow-right on-closed"></div><div class="arrow arrow-down on-open"></div><?php echo $languageName ?></legend><div>
+ <?php $$languageName= $name; ?>
- </div>
- </div>
- <div class="line">
- <div class="label">
- <label for="<?php echo REQUEST_ID ?>_description" class="label"><?php echo lang('global_description') ?>
- </label>
- </div>
- <div class="input">
- <div class="inputholder"><textarea class="description" name="description"><?php echo Text::encodeHtml($description) ?></textarea></div>
+ <label class="or-form-row"><span class="or-form-label">Name</span><span class="or-form-input"><div class="inputholder"><input id="<?php echo REQUEST_ID ?>_<?php echo $languageName ?>" name="<?php if ('name') echo 'name'.'_' ?><?php echo $languageName ?><?php if ('') echo '_disabled' ?>" type="text" maxlength="255" class="filename" value="<?php echo Text::encodeHtml(@$$languageName) ?>" /><?php if ('') { ?><input type="hidden" name="<?php echo $languageName ?>" value="<?php $$languageName ?>"/><?php } ?></div></span></label>
- </div>
- </div>
+ <?php $$languageName= $description; ?>
+
+ <label class="or-form-row"><span class="or-form-label">Beschreibung</span><span class="or-form-input"><div class="inputholder"><textarea class="description" name="<?php if ('description') echo 'description'.'_' ?><?php echo $languageName ?><?php if ('') echo '_disabled' ?>" maxlength="255"><?php echo Text::encodeHtml($$languageName) ?></textarea></div></span></label>
+
+ </div></fieldset>
+ <?php } ?>
<div class="or-form-actionbar"><input type="submit" class="or-form-btn or-form-btn--primary" value="<?php echo lang('global_save') ?>" /></div></form>
\ No newline at end of file
diff --git a/modules/cms-ui/themes/default/html/views/folder/prop.tpl.src.xml b/modules/cms-ui/themes/default/html/views/folder/prop.tpl.src.xml
@@ -12,22 +12,24 @@
<input name="name" class="name,focus"></input>
</part>
</part>
- <part class="line">
- <part class="label">
- <label for="filename" key="global_filename" />
- </part>
- <part class="input">
- <input name="filename" class="filename" maxlength="150" />
- </part>
- </part>
- <part class="line">
- <part class="label">
- <label for="description" key="global_description">
- </label>
- </part>
- <part class="input">
- <inputarea name="description" class="description"></inputarea>
- </part>
- </part>
+
+ <input name="filename" label="global_filename" class="filename" maxlength="150" focus="true" />
+
+ <inputarea label="global_description" name="description" class="description"></inputarea>
+
+
+ <list list="names" extract="true">
+
+ <group title="var:languageName" open="var:languageIsDefault">
+
+ <set var="var:languageName" value="var:name" />
+ <input label="global_name" name="var:languageName" class="filename" prefix="name" maxlength="255" />
+
+ <set var="var:languageName" value="var:description" />
+ <inputarea label="global_description" prefix="description" name="var:languageName" class="description" maxlength="255" />
+
+ </group>
+ </list>
+
</form>
</output>
\ No newline at end of file
diff --git a/modules/template-engine/components/html/inputarea/Inputarea.class.php b/modules/template-engine/components/html/inputarea/Inputarea.class.php
@@ -2,11 +2,9 @@
namespace template_engine\components;
-class InputareaComponent extends Component
+class InputareaComponent extends FieldComponent
{
- public $name;
-
public $rows = 10;
public $cols = 40;
@@ -37,7 +35,8 @@ class InputareaComponent extends Component
echo '<div class="inputholder">';
echo '<textarea';
echo ' class="'.$this->htmlvalue($this->class).'"';
- echo ' name="'.$this->htmlvalue($this->name).'"';
+
+ echo $this->outputNameAttribute();
if (!empty($this->maxlength))
echo ' maxlength="'.intval($this->maxlength).'"';