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