openrat-cms

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

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:
modules/cms-core/action/FolderAction.class.php | 37+++++++++++++++++++++++++++++++++++--
modules/cms-core/model/BaseObject.class.php | 23++++++++++++++++++++---
modules/cms-core/model/Language.class.php | 11+++++------
modules/cms-core/model/Name.class.php | 159+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
modules/cms-core/model/require.php | 5++---
modules/cms-ui/themes/default/html/views/file/edit.php | 2+-
modules/cms-ui/themes/default/html/views/folder/prop.php | 34+++++++++++++++-------------------
modules/cms-ui/themes/default/html/views/folder/prop.tpl.src.xml | 36+++++++++++++++++++-----------------
modules/template-engine/components/html/inputarea/Inputarea.class.php | 7+++----
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).'"';