openrat-cms

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

commit c1df0efc29420e9834c85db2ad5eae252595771c
parent 9bc335abbfee4a03f7aa3d8cf455830af687932b
Author: Jan Dankert <devnull@localhost>
Date:   Sat, 13 Apr 2013 00:39:18 +0200

Ausdruck "Dynamische Klasse" umbenannt in "Makro".

Diffstat:
action/ElementAction.class.php | 1-
init.php | 2+-
language/de.ini.php | 8+++++---
model/Page.class.php | 12+++++++++++-
model/Value.class.php | 35+++++++++++++++++++++++++++++------
util/Dynamic.class.php | 169++++++-------------------------------------------------------------------------
util/include.inc.php | 1+
7 files changed, 59 insertions(+), 169 deletions(-)

diff --git a/action/ElementAction.class.php b/action/ElementAction.class.php @@ -262,7 +262,6 @@ class ElementAction extends Action $convertToLang = true; break; - case 'macro' : case 'dynamic': $files = Array(); diff --git a/init.php b/init.php @@ -38,7 +38,7 @@ define('OR_FORMCLASSES_DIR' ,'./formClasses/' ); define('OR_OBJECTCLASSES_DIR' ,'./model/' ); define('OR_LANGUAGE_DIR' ,'./language/' ); define('OR_DBCLASSES_DIR' ,'./db/' ); -define('OR_DYNAMICCLASSES_DIR','./dynamicClasses/' ); +define('OR_DYNAMICCLASSES_DIR','./macro/' ); define('OR_TEXTCLASSES_DIR' ,'./textClasses/' ); define('OR_PREFERENCES_DIR' ,defined('OR_EXT_CONFIG_DIR')?OR_EXT_CONFIG_DIR:'./config/'); define('OR_CONFIG_DIR' ,OR_PREFERENCES_DIR ); diff --git a/language/de.ini.php b/language/de.ini.php @@ -174,8 +174,8 @@ EL_COPY_DESC = "Einen Wert aus einem Platzhalter einer verlinkten Seite kopieren EL_COPY =Kopie EL_DATE = Datum EL_DATE_DESC = "Dieses Platzhalter enthält ein Datum" -EL_DYNAMIC_DESC = "Das dynamische Platzhalter bietet fertige, dynamische Scriptelemente, die während der Seitenerzeugung ausgeführt werden und z.B. komplexe Menüstrukturen erzeugen können. Die erzeugte Seite bleibt weiterhin statisch." -EL_DYNAMIC = "Dynamisch" +EL_DYNAMIC_DESC = "Ein Makro bietet fertige Skriptelemente, die während der Seitenerzeugung ausgeführt werden und z.B. komplexe Menüstrukturen erzeugen können. Die erzeugte Seite bleibt weiterhin statisch." +EL_DYNAMIC = "Makro" ELEMENT_DELETE_DESC = "Löschen des Platzhalters. <strong>Achtung</strong>, alle Seiteninhalte, die auf diesem Element basieren, werden unwiederbringlich gelöscht!" ELEMENT_DELETE_VALUES_DESC = "Alle Inhalte von diesem Platzhalter werden (incl. Archiven!) gelöscht" ELEMENT_DELETE_VALUES = "Inhalte löschen" @@ -283,7 +283,7 @@ EL_PROP_DEFAULT_OBJECT_DESC = "Vorbelegtes Objekt" EL_PROP_DEFAULT_OBJECT = "Vorbelegtes Objekt" EL_PROP_DEFAULT_TEXT_DESC = "Dieser Text wird benutzt, wenn der Redakteur das Seitenelement leer lässt" EL_PROP_DEFAULT_TEXT = "Text Vorbelegung" -EL_PROP_DYNAMIC_PARAMETERS_DESC = "Fü den dynamischen Platzhalter können Parameter gesetzt werden. Geben Sie diese hier an.<br/>Format: 1 Parameter pro Zeile, Name/Wert mit Doppelpunkt (:) getrennt.<br/>Beispiel:<br/><tt>a:1<br/>b:2</tt>" +EL_PROP_DYNAMIC_PARAMETERS_DESC = "Für das Makro können Parameter gesetzt werden. Geben Sie diese hier an.<br/>Format: 1 Parameter pro Zeile, Name/Wert mit Doppelpunkt (:) getrennt.<br/>Beispiel:<br/><tt>a:1<br/>b:2</tt>" EL_PROP_DYNAMIC_PARAMETERS = "Parameter" EL_PROP_DYN_PARAM_DESC = "keine Beschreibung" EL_PROP_DYN_PARAM = "Parameter" @@ -1186,3 +1186,4 @@ SELECT_PROJECT=Projekt auswählen SELECT_LANGUAGE=Sprache auswählen SELECT_MODEL=Variante auswählen PWCHANGE_NOT_ALLOWED=Eine Kennwortänderung ist nicht möglich +ERROR_IN_ELEMENT="Dieses Seitenelement konnte nicht erzeugt werden"+ \ No newline at end of file diff --git a/model/Page.class.php b/model/Page.class.php @@ -885,7 +885,17 @@ class Page extends Object $this->withModel = config('publish','filename_type' ) == 'always' || count(Model::count() ) > 1; return $this->full_filename(); - } + } + + + /** + * Stellt fest, ob diese Seite im HTML-Format veröffentlicht wird. + * @return boolean + */ + public function isHtml() + { + return $this->mimeType()=='text/html'; + } } diff --git a/model/Value.class.php b/model/Value.class.php @@ -1165,11 +1165,16 @@ SQL if ( $this->page->simple ) break; + // Die Ausführung von benutzer-erzeugtem PHP-Code kann in der + // Konfiguration aus Sicherheitsgründen deaktiviert sein. if ( $conf['security']['disable_dynamic_code'] ) break; $this->page->load(); + // Das Ausführen geschieht über die Klasse "Code". + // In dieser wird der Code in eine Datei geschrieben und + // von dort eingebunden. $code = new Code(); $code->page = &$this->page; $code->setObjectId( $this->page->objectid ); @@ -1179,12 +1184,13 @@ SQL // Jetzt ausfuehren des temporaeren PHP-Codes $code->execute(); + // Ausgabe ermitteln. $inhalt = $code->getOutput(); break; - // Programmcode (PHP) + // Makros (dynamische Klassen) case 'dynamic': if ( $this->page->simple ) @@ -1192,7 +1198,7 @@ SQL $this->page->load(); $className = $this->element->subtype; - $fileName = './macro/'.$className.'.class.php'; + $fileName = OR_DYNAMICCLASSES_DIR.$className.'.class.php'; if ( is_file( $fileName ) ) { // Fuer den Fall, dass ein Makro mehrmals pro Vorlage auftritt @@ -1226,22 +1232,29 @@ SQL { Logger::warn('element:'.$this->element->name.', '. 'class:'.$className.', no method: execute()'); + if ( !$this->publish ) + $inhalt = lang('ERROR_IN_ELEMENT').' (missing method: execute())'; } } else { Logger::warn('element:'.$this->element->name.', '. 'class not found:'.$className); + if ( !$this->publish ) + $inhalt = lang('ERROR_IN_ELEMENT').' (class not found:'.$className.')'; } } else { Logger::warn('element:'.$this->element->name.', '. 'file not found:'.$fileName); + if ( !$this->publish ) + $inhalt = lang('ERROR_IN_ELEMENT').' (file not found:'.$fileName.')'; + } // Wenn HTML-Ausgabe, dann Sonderzeichen in HTML �bersetzen - if ( $this->page->mimeType()=='text/html' ) + if ( $this->page->isHtml() ) $inhalt = Text::encodeHtmlSpecialChars( $inhalt ); break; @@ -1273,6 +1286,8 @@ SQL Logger::warn('element:'.$this->element->name.', '. 'type:'.$this->element->type.', '. 'unknown subtype:'.$this->element->subtype); + if ( !$this->publish ) + $inhalt = lang('ERROR_IN_ELEMENT'); } if ( strpos($this->element->dateformat,'%')!==FALSE ) @@ -1443,6 +1458,10 @@ SQL Logger::error('element:'.$this->element->name.', '. 'unknown type:'.$this->element->type); + if ( !$this->publish ) + $inhalt = lang('ERROR_IN_ELEMENT').' ('.$this->element->name.':'. + 'unknown type:'.$this->element->type.')'; + } @@ -1454,7 +1473,7 @@ SQL if ( $conf['publish']['encode_utf8_in_html'] ) // Wenn HTML-Ausgabe, dann UTF-8-Zeichen als HTML-Code uebersetzen - if ( $this->page->mimeType()=='text/html' ) + if ( $this->page->isHtml() ) $inhalt = translateutf8tohtml($inhalt); break; @@ -1463,8 +1482,12 @@ SQL - if ( $this->page->icons && $this->element->withIcon ) - $inhalt = '<a href="javascript:parent.openNewAction(\''.$this->element->name.'\',\'pageelement\',\''.$this->page->objectid.'_'.$this->element->elementid.'\');" title="'.$this->element->desc.'"><img src="'.OR_THEMES_EXT_DIR.$conf['interface']['theme'].'/images/icon_el_'.$this->element->type.IMG_ICON_EXT.'" border="0" align="left"></a>'.$inhalt; + if ( $this->page->icons && $this->element->withIcon && $this->page->isHtml() ) + { + // Anklickbaren Link voranstellen. + $iconLink = '<a href="javascript:parent.openNewAction(\''.$this->element->name.'\',\'pageelement\',\''.$this->page->objectid.'_'.$this->element->elementid.'\');" title="'.$this->element->desc.'"><img src="'.OR_THEMES_EXT_DIR.$conf['interface']['theme'].'/images/icon_el_'.$this->element->type.IMG_ICON_EXT.'" border="0" align="left"></a>'; + $inhalt = $iconLink.$inhalt; + } $this->value = $inhalt; diff --git a/util/Dynamic.class.php b/util/Dynamic.class.php @@ -1,6 +1,6 @@ <?php // OpenRat Content Management System -// Copyright (C) 2002-2012 Jan Dankert, cms@jandankert.de +// Copyright (C) 2002-2013 Jan Dankert, cms@jandankert.de // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -18,162 +18,17 @@ /** - * Service-Klasse fuer allgemeine Interface-Methoden. Insbesondere - * in Code-Elementen kann und soll auf diese Methoden zurueckgegriffen - * werden. - * @author $Author$ - * @version $Revision$ + * Oberklasse für dynamische Klassen ("Makros"). + * + * Diese Klasse dient nur der Abwärtskompabilität. Neue dynamische Klassen + * (ab jetzt "Makros") sollten von der Klasse Macro erben. + * + * @author Jan Dankert * @package openrat.services */ -class Dynamic +class Dynamic extends Macro { - var $project; - var $output = ''; - var $objectid = 0; - var $page; - var $parameters = array(); - var $description = ''; + // Keine weitere Implementierung +} - - /** - * Ausführen des Makros. Diese Methode sollte durch die Unterklasse überschrieben werden. - */ - public function execute() - { - // overwrite this in subclasses - } - - - /** - * Holt die aktuellen Datenbankverbindung. - */ - public function db() - { - return db_connection(); - } - - - /** - * Holt die aktuelle Objekt-Id. - * @return number - */ - public function getObjectId() - { - return $this->objectid; - } - - - /** - * Holt das aktuelle Objekt. - * @return Object - */ - public function &getObject() - { - return Session::getObject(); - } - - - /** - * Setzt eine Objekt-Id. - * @param unknown_type $objectid - */ - public function setObjectId( $objectid ) - { - $this->objectid = $objectid; - } - - - /** - * Ermittelt die Id des Wurzelordners im aktuellen Projekt. - */ - public function getRootObjectId() - { - $project = Session::getProject(); - return $project->getRootObjectId(); - } - - - /** - * DO NOT USE. - */ - public function folderid() - { - global $SESS; - return $SESS['folderid']; - } - - - /** - * Löscht die bisher erzeugte Ausgabe. - */ - public function delOutput() - { - $this->output = ''; - } - - /** - * Ergänzt die Standardausgabe um den gewünschten Wert. - */ - public function output( $text ) - { - $this->output .= $text; - } - - - /** - * Ergänzt die Standardausgabe um den gewünschten Wert. Es wird ein Zeilenendezeichen ergänzt. - */ - public function outputLn( $text ) - { - $this->output .= $text."\n"; - } - - - /** - * Ermittelt die bisher erstellte Ausgabe. - * @return string - */ - public function getOutput() - { - return $this->output; - } - - - /** - * Setzt eine Sitzungsvariable. - * - * @param String $var - * @param Object $value - */ - public function setSessionVar( $var,$value ) - { - Session::set( $var,$value ); - } - - - /** - * Ermittelt eine Sitzungsvariable. - * - * @param String $var - * @return string - */ - public function getSessionVar( $var ) - { - return Session::get( $var ); - } - - - - /** - * Ermittelt den Pfad auf ein Objekt. - * @param Objekt oder Objekt-Id - */ - public function pathToObject( $obj ) - { - if ( is_object($obj) ) - return $this->page->path_to_object($obj->objectid); - else - return $this->page->path_to_object($obj); - } - -}- \ No newline at end of file +?>+ \ No newline at end of file diff --git a/util/include.inc.php b/util/include.inc.php @@ -32,6 +32,7 @@ require_once( OR_SERVICECLASSES_DIR."Password.class.".PHP_EXT ); //if ( !empty($REQ[REQ_PARAM_ACTION]) && in_array($REQ[REQ_PARAM_ACTION],array('pageelement','page','folder','element')) ) { require_once( OR_SERVICECLASSES_DIR."Macro.class.".PHP_EXT ); + require_once( OR_SERVICECLASSES_DIR."Dynamic.class.".PHP_EXT ); } // Nur bei der Erzeugung von Seiten notwendig.