openrat-cms

# OpenRat Content Management System
git clone http://git.code.weiherhei.de/openrat-cms.git
Log | Files | Refs

commit 007f23032d386966da0858484b04eb0412f2142c
parent dc1b0080df80bbf63050ad72a1b41aed0c0cb3e7
Author: Jan Dankert <develop@jandankert.de>
Date:   Wed,  8 May 2019 21:49:08 +0200

Statt globalen Konstanten Klassenkonstanten verwenden.

Diffstat:
modules/cms-core/action/ElementAction.class.php | 4++--
modules/cms-core/model/BaseObject.class.php | 2480+++++++++++++++++++++++++++++++++++++++----------------------------------------
modules/cms-core/model/File.class.php | 4++--
modules/cms-core/model/Folder.class.php | 18+++++++++---------
modules/cms-core/model/Project.class.php | 16++++++++--------
modules/cms-macros/macro/LastChanges.class.php | 9+++++----
modules/cms-publish/PublishPreview.class.php | 18+++++++++---------
modules/cms-publish/PublishPublic.class.php | 16++++++++--------
modules/database-update/update/DBVersion000009.class.php | 2+-
9 files changed, 1282 insertions(+), 1285 deletions(-)

diff --git a/modules/cms-core/action/ElementAction.class.php b/modules/cms-core/action/ElementAction.class.php @@ -552,12 +552,12 @@ class ElementAction extends Action switch( $this->element->typeid ) { case ELEMENT_TYPE_LINK: - if ( ! in_array( $o->typeid, array(OR_TYPEID_PAGE,OR_TYPEID_IMAGE,OR_TYPEID_FILE,OR_TYPEID_LINK,OR_TYPEID_URL,OR_TYPEID_TEXT ) ) ) + if ( ! in_array( $o->typeid, array(BaseObject::TYPEID_PAGE,BaseObject::TYPEID_IMAGE,BaseObject::TYPEID_FILE,BaseObject::TYPEID_LINK,BaseObject::TYPEID_URL,BaseObject::TYPEID_TEXT ) ) ) continue 2; break; //Change tobias case ELEMENT_TYPE_INSERT: - if ( ! in_array( $o->typeid, array(OR_TYPEID_FOLDER,OR_TYPEID_PAGE,OR_TYPEID_IMAGE,OR_TYPEID_FILE,OR_TYPEID_LINK,OR_TYPEID_URL,OR_TYPEID_TEXT ) ) ) + if ( ! in_array( $o->typeid, array(BaseObject::TYPEID_FOLDER,BaseObject::TYPEID_PAGE,BaseObject::TYPEID_IMAGE,BaseObject::TYPEID_FILE,BaseObject::TYPEID_LINK,BaseObject::TYPEID_URL,BaseObject::TYPEID_TEXT ) ) ) continue 2; break; //Change tobias end diff --git a/modules/cms-core/model/BaseObject.class.php b/modules/cms-core/model/BaseObject.class.php @@ -1,1529 +1,1526 @@ <?php -namespace { - define('OR_TYPEID_FOLDER',1); - define('OR_TYPEID_FILE',2); - define('OR_TYPEID_PAGE',3); - define('OR_TYPEID_LINK',4); - define('OR_TYPEID_URL',5); - define('OR_TYPEID_IMAGE',6); - define('OR_TYPEID_TEXT',7); -} +namespace cms\model; + +use cms\publish\Publish; +use phpseclib\Math\BigInteger; +use Spyc; + +/** + * Superklasse fuer Objekte im Projektbaum. + * + * Dieses Objekt ist die Oberklasse fuer die Klassen Ordner, Datei, + * Link, Seite usw. + * + * @author Jan Dankert + */ +class BaseObject +{ + const TYPEID_FOLDER = 1; + const TYPEID_FILE = 2; + const TYPEID_PAGE = 3; + const TYPEID_LINK = 4; + const TYPEID_URL = 5; + const TYPEID_IMAGE = 6; + const TYPEID_TEXT = 7; + + /** eindeutige ID dieses Objektes + * @see #$objectid + * @type Integer + */ + public $id; + + /** eindeutige ID dieses Objektes + * @type Integer + */ + public $objectid; + + /** Objekt-ID des Ordners, in dem sich dieses Objekt befindet + * Kann "null" oder "0" sein, wenn es sich um den Wurzelordner des Projektes handelt + * @see #$isRoot + * @type Integer + */ + public $parentid; + + /** Physikalischer Dateiname des Objektes (bei Links nicht gef?llt) + * <em>enth?lt nicht die Dateinamen-Erweiterung</em> + * @type String + */ + public $filename = ''; -namespace cms\model { + /** Logischer (sprachabhaengiger) Name des Objektes + * (wird in Tabelle <code>name</code> abgelegt) + * @type String + * @deprecated use modelclass Name instead + */ + var $name = ''; - use cms\publish\Publish; - use phpseclib\Math\BigInteger; - use Spyc; + /** Logische (sprachabhaengige) Beschreibung des Objektes + * (wird in Tabelle <code>name</code> abgelegt) + * @type String + * @deprecated use modelclass Name instead + */ + var $description = 'none'; /** - * Superklasse fuer Objekte im Projektbaum. - * - * Dieses Objekt ist die Oberklasse fuer die Klassen Ordner, Datei, - * Link, Seite usw. - * - * @author Jan Dankert + * @var string + * @deprecated */ - class BaseObject - { - /** eindeutige ID dieses Objektes - * @see #$objectid - * @type Integer - */ - public $id; - - /** eindeutige ID dieses Objektes - * @type Integer - */ - public $objectid; - - /** Objekt-ID des Ordners, in dem sich dieses Objekt befindet - * Kann "null" oder "0" sein, wenn es sich um den Wurzelordner des Projektes handelt - * @see #$isRoot - * @type Integer - */ - public $parentid; - - /** Physikalischer Dateiname des Objektes (bei Links nicht gef?llt) - * <em>enth?lt nicht die Dateinamen-Erweiterung</em> - * @type String - */ - public $filename = ''; - - /** Logischer (sprachabhaengiger) Name des Objektes - * (wird in Tabelle <code>name</code> abgelegt) - * @type String - * @deprecated use modelclass Name instead - */ - var $name = ''; - - /** Logische (sprachabhaengige) Beschreibung des Objektes - * (wird in Tabelle <code>name</code> abgelegt) - * @type String - * @deprecated use modelclass Name instead - */ - var $description = 'none'; - - /** - * @var string - * @deprecated - */ - var $desc = ''; - - /** Zeitpunkt der Erstellung. Die Variable beinhaltet den Unix-Timestamp. - * @type Integer - */ - var $createDate; - - /** Zeitpunkt der letzten Aenderung. Die Variable beinhaltet den Unix-Timestamp. - * @type Integer - */ - var $lastchangeDate; - - /** Benutzer, welcher dieses Objekt erstellt hat. - * @type User - */ - public $createUser; - - /** Benutzer, welcher dieses Objekt zuletzt geaendert hat. - * @type User - */ - public $lastchangeUser; - - /** - * Benutzer, der das Objekt zuletzt veröffentlicht hat. - * @var User - */ - public $publishedUser; - /** - * Zeitpunkt der letzten Veröffentlichung. - * @var Integer - */ - public $publishedDate; - - - public $validFromDate; - public $validToDate; - - /** - * Kennzeichen, ob Objekt ein Ordner ist - * @type Boolean - */ - var $isFolder = false; - - /** - * Kennzeichen, ob Objekt eine binaere Datei ist - * @type Boolean - */ - var $isFile = false; - - /** - * Kennzeichen, ob Objekt ein Bild ist - * @type Boolean - */ - var $isImage = false; - - /** - * Kennzeichen, ob Objekt ein Text ist - * @type Boolean - */ - var $isText = false; - - /** - * Kennzeichen, ob Objekt eine Seite ist - * @type Boolean - */ - var $isPage = false; - - /** - * Kennzeichen, ob Objekt eine Verknuepfung (Link) ist - * @type Boolean - */ - var $isLink = false; - - /** - * Kennzeichen, ob Objekt eine Verknuepfung (Url) ist - * @type Boolean - */ - var $isUrl = false; - - /** - * Kennzeichnet den Typ dieses Objektes. - * Muss den Inhalt OR_FILE, OR_FOLDER, OR_PAGE oder OR_LINK haben. - * Vorbelegung mit <code>null</code>. - * @type Integer - */ - var $type = null; - - /** Kennzeichen ob Objekt den Wurzelordner des Projektes darstellt (parentid ist dann NULL) - * @type Boolean - */ - var $isRoot = false; - - /** Sprach-ID - * @see Language - * @type Integer - */ - var $languageid; - - /** - * Projektmodell-ID - * @see Projectmodel - * @type Integer - */ - var $modelid; - - /** - * Projekt-ID - * @see Project - * @type Integer - */ - var $projectid; - - /** - * Dateiname der temporaeren Datei - * @type String - */ - var $tmpfile; - - var $aclMask = null; - - public $typeid; - - var $parentfolders = array(); - - /** - * @type String - */ - public $settings; - - /** - * Strategy for publishing objects. - * - * @var Publish - */ - public $publisher; - - /** <strong>Konstruktor</strong> - * F?llen des neuen Objektes mit Init-Werten - * Es werden die Standardwerte aus der Session benutzt, um - * Sprach-ID, Projektmodell-Id und Projekt-ID zu setzen - * - * @param Integer Objekt-ID (optional) - */ - function __construct($objectid = '') - { - global $SESS; + var $desc = ''; - if ( is_numeric($objectid) ) - { - $this->objectid = $objectid; - $this->id = $objectid; - } - } + /** Zeitpunkt der Erstellung. Die Variable beinhaltet den Unix-Timestamp. + * @type Integer + */ + var $createDate; + /** Zeitpunkt der letzten Aenderung. Die Variable beinhaltet den Unix-Timestamp. + * @type Integer + */ + var $lastchangeDate; - // Kompletten Dateinamen des Objektes erzeugen - function full_filename() - { - $path = $this->path(); + /** Benutzer, welcher dieses Objekt erstellt hat. + * @type User + */ + public $createUser; - if ($path != '') - $path.= '/'; + /** Benutzer, welcher dieses Objekt zuletzt geaendert hat. + * @type User + */ + public $lastchangeUser; - $path.= $this->filename(); + /** + * Benutzer, der das Objekt zuletzt veröffentlicht hat. + * @var User + */ + public $publishedUser; + /** + * Zeitpunkt der letzten Veröffentlichung. + * @var Integer + */ + public $publishedDate; - return $path; - } - /** - * Pruefen einer Berechtigung zu diesem Objekt - */ - public function hasRight( $type ) - { - if ( is_null($this->aclMask) ) - { - $user = \Session::getUser(); + public $validFromDate; + public $validToDate; - if ( $user->isAdmin ) - { - // Administratoren erhalten eine Maske mit allen Rechten - $this->aclMask = ACL_READ + - ACL_WRITE + - ACL_PROP + - ACL_DELETE + - ACL_RELEASE + - ACL_PUBLISH + - ACL_CREATE_FOLDER + - ACL_CREATE_FILE + - ACL_CREATE_LINK + - ACL_CREATE_PAGE + - ACL_GRANT + - ACL_TRANSMIT; - } - else - { - $this->aclMask = 0; + /** + * Kennzeichen, ob Objekt ein Ordner ist + * @type Boolean + */ + var $isFolder = false; - $db = db_connection(); - $sqlGroupClause = $user->getGroupClause(); - $sql = $db->sql( <<<SQL -SELECT {{acl}}.* FROM {{acl}} - LEFT JOIN {{object}} - ON {{object}}.id={{acl}}.objectid - WHERE objectid={objectid} - AND ( languageid={languageid} OR languageid IS NULL ) - AND ( {{acl}}.userid={userid} OR $sqlGroupClause - OR ({{acl}}.userid IS NULL AND {{acl}}.groupid IS NULL) ) -SQL - ); + /** + * Kennzeichen, ob Objekt eine binaere Datei ist + * @type Boolean + */ + var $isFile = false; - $sql->setInt ( 'languageid' ,$this->languageid ); - $sql->setInt ( 'objectid' ,$this->objectid ); - $sql->setInt ( 'userid' ,$user->userid ); + /** + * Kennzeichen, ob Objekt ein Bild ist + * @type Boolean + */ + var $isImage = false; - foreach($sql->getAll() as $row ) - { - $acl = new Acl(); - $acl->setDatabaseRow( $row ); + /** + * Kennzeichen, ob Objekt ein Text ist + * @type Boolean + */ + var $isText = false; - $this->aclMask |= $acl->getMask(); - } - } - } + /** + * Kennzeichen, ob Objekt eine Seite ist + * @type Boolean + */ + var $isPage = false; - if ( readonly() ) - // System ist im Nur-Lese-Zustand - return $type == ACL_READ && $this->aclMask & $type; - else - // Ermittelte Maske auswerten - return $this->aclMask & $type; - } + /** + * Kennzeichen, ob Objekt eine Verknuepfung (Link) ist + * @type Boolean + */ + var $isLink = false; + /** + * Kennzeichen, ob Objekt eine Verknuepfung (Url) ist + * @type Boolean + */ + var $isUrl = false; - /** - * Typ des Objektes ermitteln - * - * @return String der Typ des Objektes entweder 'folder','file','page' oder 'link'. - */ - function getType() - { - if ($this->isFolder) - return OR_TYPE_FOLDER; - if ($this->isFile) - return OR_TYPE_FILE; - if ($this->isImage) - return OR_TYPE_IMAGE; - if ($this->isText) - return OR_TYPE_TEXT; - if ($this->isPage) - return OR_TYPE_PAGE; - if ($this->isLink) - return OR_TYPE_LINK; - if ($this->isUrl) - return OR_TYPE_URL; - - return 'unknown'; - } + /** + * Kennzeichnet den Typ dieses Objektes. + * Muss den Inhalt OR_FILE, OR_FOLDER, OR_PAGE oder OR_LINK haben. + * Vorbelegung mit <code>null</code>. + * @type Integer + */ + var $type = null; + /** Kennzeichen ob Objekt den Wurzelordner des Projektes darstellt (parentid ist dann NULL) + * @type Boolean + */ + var $isRoot = false; - /** - * Eigenschaften des Objektes. Kann durch Unterklassen erweitert werden. - * @return array - */ - public function getProperties() - { - return Array( 'id' =>$this->objectid, - 'objectid' =>$this->objectid, - 'parentid' =>$this->parentid, - 'filename' =>$this->filename, - 'name' =>$this->name, - 'desc' =>$this->desc, - 'description' =>$this->desc, - 'create_date' =>$this->createDate, - 'create_user' =>$this->createUser->getProperties(), - 'lastchange_date' =>$this->lastchangeDate, - 'lastchange_user' =>$this->lastchangeUser->getProperties(), - 'published_date' =>$this->publishedDate, - 'published_user' =>$this->publishedUser->getProperties(), - 'isFolder' =>$this->isFolder, - 'isFile' =>$this->isFile, - 'isImage' =>$this->isImage, - 'isText' =>$this->isText, - 'isLink' =>$this->isLink, - 'isUrl' =>$this->isUrl, - 'isPage' =>$this->isPage, - 'isRoot' =>$this->isRoot, - 'languageid' =>$this->languageid, - 'modelid' =>$this->modelid, - 'projectid' =>$this->projectid, - 'settings' =>$this->settings, - 'type' =>$this->getType() ); - } + /** Sprach-ID + * @see Language + * @type Integer + */ + var $languageid; + /** + * Projektmodell-ID + * @see Projectmodel + * @type Integer + */ + var $modelid; - /** - * Ermitteln des physikalischen Dateipfades, in dem sich das Objekt befindet - * @return String Pfadangabe, z.B. 'pfad/zu/objekt' - */ - function path() - { - $folder = new Folder($this->parentid); + /** + * Projekt-ID + * @see Project + * @type Integer + */ + var $projectid; - return implode('/', $folder->parentObjectFileNames(false, true)); - } + /** + * Dateiname der temporaeren Datei + * @type String + */ + var $tmpfile; + var $aclMask = null; + public $typeid; - /** - * Creates a slug url out of the filename. - * - * @param $filename String Name - * @return string - */ - public static function urlify( $filename ) - { - $slug = $filename; - $slug = iconv('utf-8', 'ascii//TRANSLIT', $slug); - $slug = preg_replace('/[^A-Za-z0-9-]+/', '-', $slug); - $slug = trim($slug, '-'); - $slug = strtolower($slug); + var $parentfolders = array(); - return $slug; - } + /** + * @type String + */ + public $settings; + /** + * Strategy for publishing objects. + * + * @var Publish + */ + public $publisher; + /** <strong>Konstruktor</strong> + * F?llen des neuen Objektes mit Init-Werten + * Es werden die Standardwerte aus der Session benutzt, um + * Sprach-ID, Projektmodell-Id und Projekt-ID zu setzen + * + * @param Integer Objekt-ID (optional) + */ + function __construct($objectid = '') + { + global $SESS; - /** - * Ermitteln des Dateinamens und Rueckgabe desselben - * @return String Dateiname - */ - public function filename() + if ( is_numeric($objectid) ) { - global $conf; + $this->objectid = $objectid; + $this->id = $objectid; + } + } - if ( $conf['filename']['edit'] && $this->filename != '' && $this->filename != $this->objectid ) - { - $this->filename = BaseObject::urlify($this->filename); - return $this->filename; - } - if ( $this->type == OR_TYPE_FOLDER ) - { - $this->filename = $this->objectid; - } - elseif ( $this->orderid == 1 && - !empty($conf['filename']['default']) && - !$conf['filename']['edit'] ) + // Kompletten Dateinamen des Objektes erzeugen + function full_filename() + { + $path = $this->path(); + + if ($path != '') + $path.= '/'; + + $path.= $this->filename(); + + return $path; + } + + /** + * Pruefen einer Berechtigung zu diesem Objekt + */ + public function hasRight( $type ) + { + if ( is_null($this->aclMask) ) + { + $user = \Session::getUser(); + + if ( $user->isAdmin ) { - $this->filename = $conf['filename']['default']; + // Administratoren erhalten eine Maske mit allen Rechten + $this->aclMask = ACL_READ + + ACL_WRITE + + ACL_PROP + + ACL_DELETE + + ACL_RELEASE + + ACL_PUBLISH + + ACL_CREATE_FOLDER + + ACL_CREATE_FILE + + ACL_CREATE_LINK + + ACL_CREATE_PAGE + + ACL_GRANT + + ACL_TRANSMIT; } else { - // Filename is not edited, so we are generating a pleasant filename. - switch( $conf['filename']['style'] ) + $this->aclMask = 0; + + $db = db_connection(); + $sqlGroupClause = $user->getGroupClause(); + $sql = $db->sql( <<<SQL +SELECT {{acl}}.* FROM {{acl}} + LEFT JOIN {{object}} + ON {{object}}.id={{acl}}.objectid + WHERE objectid={objectid} + AND ( languageid={languageid} OR languageid IS NULL ) + AND ( {{acl}}.userid={userid} OR $sqlGroupClause + OR ({{acl}}.userid IS NULL AND {{acl}}.groupid IS NULL) ) +SQL + ); + + $sql->setInt ( 'languageid' ,$this->languageid ); + $sql->setInt ( 'objectid' ,$this->objectid ); + $sql->setInt ( 'userid' ,$user->userid ); + + foreach($sql->getAll() as $row ) { - case 'longid': - // Eine etwas laengere ID als Dateinamen benutzen - $this->filename = base_convert(str_pad($this->objectid,6,'a'),11,10); - break; - - case 'short': - // So kurz wie moeglich: Erhoehen der Basis vom 10 auf 36. - // Beispiele: - // 1 -> 1 - // 10 -> a - $this->filename = base_convert($this->objectid,10,36); - break; - - case 'md5': - // MD5-Summe als Dateinamen verwenden - // Achtung: Kollisionen sind unwahrscheinlich, aber theoretisch möglich. - $this->filename = md5(md5($this->objectid)); - break; - - case 'ss': - // Imitieren von "StoryServer" URLs. Wers braucht. - $this->filename = '0,'. - base_convert(str_pad($this->parentid,3,'a'),11,10). - ','. - base_convert(str_pad($this->objectid,7,'a'),11,10). - ',00'; - break; - - case 'title': - // Achtung: Kollisionen sind möglich. - // COLLISION ALARM! THIS IS NOT A GOOD IDEA! - $this->filename = BaseObject::urlify($this->name); - break; - - case 'id': - default: - // Einfach die Objekt-Id als Dateinamen verwenden. - $this->filename = $this->objectid; - break; + $acl = new Acl(); + $acl->setDatabaseRow( $row ); + $this->aclMask |= $acl->getMask(); } } - - return $this->filename; } + if ( readonly() ) + // System ist im Nur-Lese-Zustand + return $type == ACL_READ && $this->aclMask & $type; + else + // Ermittelte Maske auswerten + return $this->aclMask & $type; + } - /** - * Stellt fest, ob das Objekt mit der angegebenen Id existiert. - */ - public static function available( $objectid ) - { - $db = db_connection(); + /** + * Typ des Objektes ermitteln + * + * @return String der Typ des Objektes entweder 'folder','file','page' oder 'link'. + */ + function getType() + { + if ($this->isFolder) + return OR_TYPE_FOLDER; + if ($this->isFile) + return OR_TYPE_FILE; + if ($this->isImage) + return OR_TYPE_IMAGE; + if ($this->isText) + return OR_TYPE_TEXT; + if ($this->isPage) + return OR_TYPE_PAGE; + if ($this->isLink) + return OR_TYPE_LINK; + if ($this->isUrl) + return OR_TYPE_URL; + + return 'unknown'; + } - // Vielleicht k�nnen wir uns den DB-Zugriff auch ganz sparen. - if ( !is_numeric($objectid) || $objectid <= 0 ) - return false; // Objekt-Id ung�ltig. - $sql = $db->sql('SELECT 1 FROM {{object}} '. - ' WHERE id={objectid}'); - $sql->setInt('objectid' , $objectid ); + /** + * Eigenschaften des Objektes. Kann durch Unterklassen erweitert werden. + * @return array + */ + public function getProperties() + { + return Array( 'id' =>$this->objectid, + 'objectid' =>$this->objectid, + 'parentid' =>$this->parentid, + 'filename' =>$this->filename, + 'name' =>$this->name, + 'desc' =>$this->desc, + 'description' =>$this->desc, + 'create_date' =>$this->createDate, + 'create_user' =>$this->createUser->getProperties(), + 'lastchange_date' =>$this->lastchangeDate, + 'lastchange_user' =>$this->lastchangeUser->getProperties(), + 'published_date' =>$this->publishedDate, + 'published_user' =>$this->publishedUser->getProperties(), + 'isFolder' =>$this->isFolder, + 'isFile' =>$this->isFile, + 'isImage' =>$this->isImage, + 'isText' =>$this->isText, + 'isLink' =>$this->isLink, + 'isUrl' =>$this->isUrl, + 'isPage' =>$this->isPage, + 'isRoot' =>$this->isRoot, + 'languageid' =>$this->languageid, + 'modelid' =>$this->modelid, + 'projectid' =>$this->projectid, + 'settings' =>$this->settings, + 'type' =>$this->getType() ); + } - return intval($sql->getOne()) == 1; - } + /** + * Ermitteln des physikalischen Dateipfades, in dem sich das Objekt befindet + * @return String Pfadangabe, z.B. 'pfad/zu/objekt' + */ + function path() + { + $folder = new Folder($this->parentid); - /** - * Lesen der Eigenschaften aus der Datenbank - * Es werden - * - die sprachunabh?ngigen Daten wie Dateiname, Typ sowie Erstellungs- und ?nderungsdatum geladen - * - die sprachabh?ngigen Daten wie Name und Beschreibung geladen - * @throws \ObjectNotFoundException - */ - function objectLoad() + return implode('/', $folder->parentObjectFileNames(false, true)); + } + + + + /** + * Creates a slug url out of the filename. + * + * @param $filename String Name + * @return string + */ + public static function urlify( $filename ) + { + $slug = $filename; + $slug = iconv('utf-8', 'ascii//TRANSLIT', $slug); + $slug = preg_replace('/[^A-Za-z0-9-]+/', '-', $slug); + $slug = trim($slug, '-'); + $slug = strtolower($slug); + + return $slug; + } + + + + /** + * Ermitteln des Dateinamens und Rueckgabe desselben + * @return String Dateiname + */ + public function filename() + { + global $conf; + + if ( $conf['filename']['edit'] && $this->filename != '' && $this->filename != $this->objectid ) { - $db = db_connection(); - - $stmt = $db->sql('SELECT {{object}}.*,' . - ' {{name}}.name,{{name}}.descr,'. - ' lastchangeuser.name as lastchange_username, '. - ' lastchangeuser.fullname as lastchange_userfullname, '. - ' lastchangeuser.mail as lastchange_usermail, '. - ' publisheduser.name as published_username, '. - ' publisheduser.fullname as published_userfullname, '. - ' publisheduser.mail as published_usermail, '. - ' createuser.name as create_username, '. - ' createuser.fullname as create_userfullname, '. - ' createuser.mail as create_usermail '. - ' FROM {{object}}'. - ' LEFT JOIN {{name}} '. - ' ON {{object}}.id={{name}}.objectid AND {{name}}.languageid={languageid} '. - ' LEFT JOIN {{user}} as lastchangeuser '. - ' ON {{object}}.lastchange_userid=lastchangeuser.id '. - ' LEFT JOIN {{user}} as publisheduser '. - ' ON {{object}}.published_userid=publisheduser.id '. - ' LEFT JOIN {{user}} as createuser '. - ' ON {{object}}.create_userid=createuser.id '. - ' WHERE {{object}}.id={objectid}'); - $stmt->setInt('languageid', $this->languageid); - $stmt->setInt('objectid' , $this->objectid ); - - $row = $stmt->getRow(); - - if (count($row) == 0) - throw new \ObjectNotFoundException('object '.$this->objectid.' not found'); - - $this->setDatabaseRow( $row ); + $this->filename = self::urlify($this->filename); + return $this->filename; } - - /** - * Lesen der Eigenschaften aus der Datenbank - * Es werden - * - die sprachunabhaengigen Daten wie Dateiname, Typ sowie Erstellungs- und Aenderungsdatum geladen - */ - function objectLoadRaw() + if ( $this->type == OR_TYPE_FOLDER ) + { + $this->filename = $this->objectid; + } + elseif ( $this->orderid == 1 && + !empty($conf['filename']['default']) && + !$conf['filename']['edit'] ) + { + $this->filename = $conf['filename']['default']; + } + else { - global $SESS; - $db = db_connection(); + // Filename is not edited, so we are generating a pleasant filename. + switch( $conf['filename']['style'] ) + { + case 'longid': + // Eine etwas laengere ID als Dateinamen benutzen + $this->filename = base_convert(str_pad($this->objectid,6,'a'),11,10); + break; + + case 'short': + // So kurz wie moeglich: Erhoehen der Basis vom 10 auf 36. + // Beispiele: + // 1 -> 1 + // 10 -> a + $this->filename = base_convert($this->objectid,10,36); + break; + + case 'md5': + // MD5-Summe als Dateinamen verwenden + // Achtung: Kollisionen sind unwahrscheinlich, aber theoretisch möglich. + $this->filename = md5(md5($this->objectid)); + break; + + case 'ss': + // Imitieren von "StoryServer" URLs. Wers braucht. + $this->filename = '0,'. + base_convert(str_pad($this->parentid,3,'a'),11,10). + ','. + base_convert(str_pad($this->objectid,7,'a'),11,10). + ',00'; + break; + + case 'title': + // Achtung: Kollisionen sind möglich. + // COLLISION ALARM! THIS IS NOT A GOOD IDEA! + $this->filename = self::urlify($this->name); + break; + + case 'id': + default: + // Einfach die Objekt-Id als Dateinamen verwenden. + $this->filename = $this->objectid; + break; - $sql = $db->sql('SELECT * FROM {{object}}'. - ' WHERE {{object}}.id={objectid}'); - $sql->setInt('objectid' , $this->objectid ); - $row = $sql->getRow(); + } + } - if (count($row) == 0) - throw new \ObjectNotFoundException('objectid not found: '.$this->objectid); + return $this->filename; + } - $this->parentid = $row['parentid' ]; - $this->filename = $row['filename' ]; - $this->projectid = $row['projectid']; - if ( intval($this->parentid) == 0 ) - $this->isRoot = true; - else - $this->isRoot = false; - $this->name = 'n/a'; + /** + * Stellt fest, ob das Objekt mit der angegebenen Id existiert. + */ + public static function available( $objectid ) + { + $db = db_connection(); - $this->create_date = $row['create_date']; - $this->create_userid = $row['create_userid']; - $this->lastchange_date = $row['lastchange_date']; - $this->lastchange_userid = $row['lastchange_userid']; + // Vielleicht k�nnen wir uns den DB-Zugriff auch ganz sparen. + if ( !is_numeric($objectid) || $objectid <= 0 ) + return false; // Objekt-Id ung�ltig. - $this->isFolder = ( $row['typeid'] == OR_TYPEID_FOLDER ); - $this->isFile = ( $row['typeid'] == OR_TYPEID_FILE ); - $this->isImage = ( $row['typeid'] == OR_TYPEID_IMAGE ); - $this->isText = ( $row['typeid'] == OR_TYPEID_TEXT ); - $this->isPage = ( $row['typeid'] == OR_TYPEID_PAGE ); - $this->isLink = ( $row['typeid'] == OR_TYPEID_LINK ); - $this->isUrl = ( $row['typeid'] == OR_TYPEID_URL ); + $sql = $db->sql('SELECT 1 FROM {{object}} '. + ' WHERE id={objectid}'); + $sql->setInt('objectid' , $objectid ); - } + return intval($sql->getOne()) == 1; + } - /** - * Setzt die Eigenschaften des Objektes mit einer Datenbank-Ergebniszeile - * - * @param array Ergebniszeile aus Datenbanktabelle - */ - public function setDatabaseRow( $row ) - { - if ( count($row)==0 ) - throw new \LogicException('setDatabaseRow() got empty array, oid='.$this->objectid); + /** + * Lesen der Eigenschaften aus der Datenbank + * Es werden + * - die sprachunabh?ngigen Daten wie Dateiname, Typ sowie Erstellungs- und ?nderungsdatum geladen + * - die sprachabh?ngigen Daten wie Name und Beschreibung geladen + * @throws \ObjectNotFoundException + */ + function objectLoad() + { + $db = db_connection(); + + $stmt = $db->sql('SELECT {{object}}.*,' . + ' {{name}}.name,{{name}}.descr,'. + ' lastchangeuser.name as lastchange_username, '. + ' lastchangeuser.fullname as lastchange_userfullname, '. + ' lastchangeuser.mail as lastchange_usermail, '. + ' publisheduser.name as published_username, '. + ' publisheduser.fullname as published_userfullname, '. + ' publisheduser.mail as published_usermail, '. + ' createuser.name as create_username, '. + ' createuser.fullname as create_userfullname, '. + ' createuser.mail as create_usermail '. + ' FROM {{object}}'. + ' LEFT JOIN {{name}} '. + ' ON {{object}}.id={{name}}.objectid AND {{name}}.languageid={languageid} '. + ' LEFT JOIN {{user}} as lastchangeuser '. + ' ON {{object}}.lastchange_userid=lastchangeuser.id '. + ' LEFT JOIN {{user}} as publisheduser '. + ' ON {{object}}.published_userid=publisheduser.id '. + ' LEFT JOIN {{user}} as createuser '. + ' ON {{object}}.create_userid=createuser.id '. + ' WHERE {{object}}.id={objectid}'); + $stmt->setInt('languageid', $this->languageid); + $stmt->setInt('objectid' , $this->objectid ); + + $row = $stmt->getRow(); + + if (count($row) == 0) + throw new \ObjectNotFoundException('object '.$this->objectid.' not found'); + + $this->setDatabaseRow( $row ); + } - $this->parentid = $row['parentid' ]; - $this->projectid = $row['projectid']; - $this->filename = $row['filename' ]; - $this->orderid = $row['orderid' ]; - if ( intval($this->parentid) == 0 ) - $this->isRoot = true; - else - $this->isRoot = false; + /** + * Lesen der Eigenschaften aus der Datenbank + * Es werden + * - die sprachunabhaengigen Daten wie Dateiname, Typ sowie Erstellungs- und Aenderungsdatum geladen + */ + function objectLoadRaw() + { + global $SESS; + $db = db_connection(); - $this->createDate = $row['create_date' ]; - $this->lastchangeDate = $row['lastchange_date']; - $this->publishedDate = $row['published_date' ]; + $sql = $db->sql('SELECT * FROM {{object}}'. + ' WHERE {{object}}.id={objectid}'); + $sql->setInt('objectid' , $this->objectid ); + $row = $sql->getRow(); - $this->validFromDate = $row['valid_from' ]; - $this->validToDate = $row['valid_to' ]; + if (count($row) == 0) + throw new \ObjectNotFoundException('objectid not found: '.$this->objectid); - $this->createUser = new User(); - $this->createUser->userid = $row['create_userid' ]; - if ( !empty($row['create_username']) ) - { - $this->createUser->name = $row['create_username' ]; - $this->createUser->fullname = $row['create_userfullname' ]; - $this->createUser->mail = $row['create_usermail' ]; - } + $this->parentid = $row['parentid' ]; + $this->filename = $row['filename' ]; + $this->projectid = $row['projectid']; - $this->lastchangeUser = new User(); - $this->lastchangeUser->userid = $row['lastchange_userid' ]; + if ( intval($this->parentid) == 0 ) + $this->isRoot = true; + else + $this->isRoot = false; - if ( !empty($row['lastchange_username']) ) - { - $this->lastchangeUser->name = $row['lastchange_username' ]; - $this->lastchangeUser->fullname = $row['lastchange_userfullname']; - $this->lastchangeUser->mail = $row['lastchange_usermail' ]; - } + $this->name = 'n/a'; - $this->publishedUser = new User(); - $this->publishedUser->userid = $row['published_userid' ]; + $this->create_date = $row['create_date']; + $this->create_userid = $row['create_userid']; + $this->lastchange_date = $row['lastchange_date']; + $this->lastchange_userid = $row['lastchange_userid']; - if ( !empty($row['published_username']) ) - { - $this->publishedUser->name = $row['published_username' ]; - $this->publishedUser->fullname = $row['published_userfullname']; - $this->publishedUser->mail = $row['published_usermail' ]; - } + $this->isFolder = ( $row['typeid'] == self::TYPEID_FOLDER ); + $this->isFile = ( $row['typeid'] == self::TYPEID_FILE ); + $this->isImage = ( $row['typeid'] == self::TYPEID_IMAGE ); + $this->isText = ( $row['typeid'] == self::TYPEID_TEXT ); + $this->isPage = ( $row['typeid'] == self::TYPEID_PAGE ); + $this->isLink = ( $row['typeid'] == self::TYPEID_LINK ); + $this->isUrl = ( $row['typeid'] == self::TYPEID_URL ); - $this->typeid = $row['typeid']; + } - $this->isFolder = ( $row['typeid'] == OR_TYPEID_FOLDER ); - $this->isFile = ( $row['typeid'] == OR_TYPEID_FILE ); - $this->isImage = ( $row['typeid'] == OR_TYPEID_IMAGE ); - $this->isText = ( $row['typeid'] == OR_TYPEID_TEXT ); - $this->isPage = ( $row['typeid'] == OR_TYPEID_PAGE ); - $this->isLink = ( $row['typeid'] == OR_TYPEID_LINK ); - $this->isUrl = ( $row['typeid'] == OR_TYPEID_URL ); - if ( $this->isRoot ) - { - $this->name = $row['name' ]; - $this->desc = ''; - $this->description = ''; - } - else - { - $this->name = $row['name' ]; - $this->desc = $row['descr']; - $this->description = $row['descr']; - } + /** + * Setzt die Eigenschaften des Objektes mit einer Datenbank-Ergebniszeile + * + * @param array Ergebniszeile aus Datenbanktabelle + */ + public function setDatabaseRow( $row ) + { + if ( count($row)==0 ) + throw new \LogicException('setDatabaseRow() got empty array, oid='.$this->objectid); - $this->settings = $row['settings']; + $this->parentid = $row['parentid' ]; + $this->projectid = $row['projectid']; + $this->filename = $row['filename' ]; + $this->orderid = $row['orderid' ]; - $this->checkName(); - } + if ( intval($this->parentid) == 0 ) + $this->isRoot = true; + else + $this->isRoot = false; + $this->createDate = $row['create_date' ]; + $this->lastchangeDate = $row['lastchange_date']; + $this->publishedDate = $row['published_date' ]; + $this->validFromDate = $row['valid_from' ]; + $this->validToDate = $row['valid_to' ]; - /** - * Laden des Objektes - */ - public function load() + $this->createUser = new User(); + $this->createUser->userid = $row['create_userid' ]; + if ( !empty($row['create_username']) ) { - return self::objectLoad(); + $this->createUser->name = $row['create_username' ]; + $this->createUser->fullname = $row['create_userfullname' ]; + $this->createUser->mail = $row['create_usermail' ]; } + $this->lastchangeUser = new User(); + $this->lastchangeUser->userid = $row['lastchange_userid' ]; - /** - * Eigenschaften des Objektes in Datenbank speichern - * @deprecated - */ - public function objectSave( $ignored = true ) + if ( !empty($row['lastchange_username']) ) { - self::save(); + $this->lastchangeUser->name = $row['lastchange_username' ]; + $this->lastchangeUser->fullname = $row['lastchange_userfullname']; + $this->lastchangeUser->mail = $row['lastchange_usermail' ]; } - /** - * Eigenschaften des Objektes in Datenbank speichern - */ - public function save() + $this->publishedUser = new User(); + $this->publishedUser->userid = $row['published_userid' ]; + + if ( !empty($row['published_username']) ) { - $this->setTimestamp(); - $this->checkFilename(); + $this->publishedUser->name = $row['published_username' ]; + $this->publishedUser->fullname = $row['published_userfullname']; + $this->publishedUser->mail = $row['published_usermail' ]; + } - $stmt = db()->sql( <<<SQL -UPDATE {{object}} SET - parentid = {parentid}, - lastchange_date = {time} , - lastchange_userid = {userid} , - filename = {filename}, - valid_from = {validFrom}, - valid_to = {validTo}, - settings = {settings} - WHERE id={objectid} -SQL - ); + $this->typeid = $row['typeid']; + $this->isFolder = ( $row['typeid'] == self::TYPEID_FOLDER ); + $this->isFile = ( $row['typeid'] == self::TYPEID_FILE ); + $this->isImage = ( $row['typeid'] == self::TYPEID_IMAGE ); + $this->isText = ( $row['typeid'] == self::TYPEID_TEXT ); + $this->isPage = ( $row['typeid'] == self::TYPEID_PAGE ); + $this->isLink = ( $row['typeid'] == self::TYPEID_LINK ); + $this->isUrl = ( $row['typeid'] == self::TYPEID_URL ); - if ( $this->isRoot ) - $stmt->setNull('parentid'); - else $stmt->setInt ('parentid',$this->parentid ); + if ( $this->isRoot ) + { + $this->name = $row['name' ]; + $this->desc = ''; + $this->description = ''; + } + else + { + $this->name = $row['name' ]; + $this->desc = $row['descr']; + $this->description = $row['descr']; + } + $this->settings = $row['settings']; - $user = \Session::getUser(); - $this->lastchangeUser = $user; - $this->lastchangeDate = now(); - $stmt->setInt ('time' , $this->lastchangeDate ); - $stmt->setInt ('userid' , $this->lastchangeUser->userid ); - $stmt->setString('filename' , $this->filename ); - $stmt->setString('settings' , $this->settings ); - $stmt->setInt ('validFrom', $this->validFromDate ); - $stmt->setInt ('validTo' , $this->validToDate ); - $stmt->setInt ('objectid' , $this->objectid ); + $this->checkName(); + } - $stmt->query(); - $this->setTimestamp(); - } + /** + * Laden des Objektes + */ + public function load() + { + return self::objectLoad(); + } + /** + * Eigenschaften des Objektes in Datenbank speichern + * @deprecated + */ + public function objectSave( $ignored = true ) + { + self::save(); + } - /** - * Aenderungsdatum auf Systemzeit setzen - */ - public function setTimestamp() - { - $db = db_connection(); + /** + * Eigenschaften des Objektes in Datenbank speichern + */ + public function save() + { + $this->setTimestamp(); + $this->checkFilename(); - $sql = $db->sql('UPDATE {{object}} SET '. - ' lastchange_date = {time} ,'. - ' lastchange_userid = {userid} '. - ' WHERE id={objectid}'); + $stmt = db()->sql( <<<SQL +UPDATE {{object}} SET + parentid = {parentid}, + lastchange_date = {time} , + lastchange_userid = {userid} , + filename = {filename}, + valid_from = {validFrom}, + valid_to = {validTo}, + settings = {settings} +WHERE id={objectid} +SQL + ); - $user = \Session::getUser(); - $this->lastchangeUser = $user; - $this->lastchangeDate = now(); - $sql->setInt ('userid' ,$this->lastchangeUser->userid ); - $sql->setInt ('objectid',$this->objectid ); - $sql->setInt ('time' ,$this->lastchangeDate ); + if ( $this->isRoot ) + $stmt->setNull('parentid'); + else $stmt->setInt ('parentid',$this->parentid ); - $sql->query(); - } + $user = \Session::getUser(); + $this->lastchangeUser = $user; + $this->lastchangeDate = now(); + $stmt->setInt ('time' , $this->lastchangeDate ); + $stmt->setInt ('userid' , $this->lastchangeUser->userid ); + $stmt->setString('filename' , $this->filename ); + $stmt->setString('settings' , $this->settings ); + $stmt->setInt ('validFrom', $this->validFromDate ); + $stmt->setInt ('validTo' , $this->validToDate ); + $stmt->setInt ('objectid' , $this->objectid ); - public function setCreationTimestamp() - { - $db = db_connection(); + $stmt->query(); - $sql = $db->sql('UPDATE {{object}} SET '. - ' create_date = {time} '. - ' WHERE id={objectid}'); + $this->setTimestamp(); + } - $sql->setInt ('objectid',$this->objectid ); - $sql->setInt ('time' ,$this->createDate ); - $sql->query(); - } + /** + * Aenderungsdatum auf Systemzeit setzen + */ + public function setTimestamp() + { + $db = db_connection(); - public function setPublishedTimestamp() - { - $db = db_connection(); + $sql = $db->sql('UPDATE {{object}} SET '. + ' lastchange_date = {time} ,'. + ' lastchange_userid = {userid} '. + ' WHERE id={objectid}'); - $sql = $db->sql('UPDATE {{object}} SET '. - ' published_date = {time} ,'. - ' published_userid = {userid} '. - ' WHERE id={objectid}'); + $user = \Session::getUser(); + $this->lastchangeUser = $user; + $this->lastchangeDate = now(); - $user = \Session::getUser(); - $this->publishedUser = $user; - $this->publishedDate = now(); + $sql->setInt ('userid' ,$this->lastchangeUser->userid ); + $sql->setInt ('objectid',$this->objectid ); + $sql->setInt ('time' ,$this->lastchangeDate ); - $sql->setInt ('userid' ,$this->publishedUser->userid ); - $sql->setInt ('objectid',$this->objectid ); - $sql->setInt ('time' ,$this->publishedDate ); + $sql->query(); - $sql->query(); - } + } - /** - * Logischen Namen und Beschreibung des Objektes in Datenbank speichern - * (wird von objectSave() automatisch aufgerufen) - * - * @access private - */ - public function ObjectSaveName() - { - $db = db_connection(); + public function setCreationTimestamp() + { + $db = db_connection(); - $sql = $db->sql(<<<SQL -SELECT COUNT(*) FROM {{name}} WHERE objectid ={objectid} AND languageid={languageid} -SQL - ); - $sql->setInt( 'objectid' , $this->objectid ); - $sql->setInt( 'languageid', $this->languageid ); - $count = $sql->getOne(); + $sql = $db->sql('UPDATE {{object}} SET '. + ' create_date = {time} '. + ' WHERE id={objectid}'); - if ($count > 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->desc); - $sql->setInt( 'objectid' , $this->objectid ); - $sql->setInt( 'languageid', $this->languageid ); - $sql->query(); - } - else - { - $sql = $db->sql('SELECT MAX(id) FROM {{name}}'); - $nameid = intval($sql->getOne())+1; - - $sql = $db->sql('INSERT INTO {{name}}'.' (id,objectid,languageid,name,descr)'.' VALUES( {nameid},{objectid},{languageid},{name},{desc} )'); - $sql->setInt ('objectid' , $this->objectid ); - $sql->setInt ('languageid', $this->languageid ); - $sql->setInt ('nameid', $nameid ); - $sql->setString('name' , $this->name); - $sql->setString('desc' , $this->desc); - $sql->query(); - } - } + $sql->setInt ('objectid',$this->objectid ); + $sql->setInt ('time' ,$this->createDate ); - /** - * Objekt loeschen. Es muss sichergestellt sein, dass auch das Unterobjekt geloeschet wird. - * Diese Methode wird daher normalerweise nur vom Unterobjekt augerufen - * @access protected - */ - public function objectDelete() - { - $db = db_connection(); + $sql->query(); + } - $sql = $db->sql( 'UPDATE {{element}} '. - ' SET default_objectid=NULL '. - ' WHERE default_objectid={objectid}' ); - $sql->setInt('objectid',$this->objectid); - $sql->query(); - $sql = $db->sql( 'UPDATE {{value}} '. - ' SET linkobjectid=NULL '. - ' WHERE linkobjectid={objectid}' ); - $sql->setInt('objectid',$this->objectid); - $sql->query(); + public function setPublishedTimestamp() + { + $db = db_connection(); - $sql = $db->sql( 'UPDATE {{link}} '. - ' SET link_objectid=NULL '. - ' WHERE link_objectid={objectid}' ); - $sql->setInt('objectid',$this->objectid); - $sql->query(); + $sql = $db->sql('UPDATE {{object}} SET '. + ' published_date = {time} ,'. + ' published_userid = {userid} '. + ' WHERE id={objectid}'); + $user = \Session::getUser(); + $this->publishedUser = $user; + $this->publishedDate = now(); - // Objekt-Namen l?schen - $sql = $db->sql('DELETE FROM {{name}} WHERE objectid={objectid}'); - $sql->setInt('objectid', $this->objectid); - $sql->query(); + $sql->setInt ('userid' ,$this->publishedUser->userid ); + $sql->setInt ('objectid',$this->objectid ); + $sql->setInt ('time' ,$this->publishedDate ); - // ACLs loeschen - $this->deleteAllACLs(); + $sql->query(); + } - // Objekt l?schen - $sql = $db->sql('DELETE FROM {{object}} WHERE id={objectid}'); - $sql->setInt('objectid', $this->objectid); - $sql->query(); - } + /** + * Logischen Namen und Beschreibung des Objektes in Datenbank speichern + * (wird von objectSave() automatisch aufgerufen) + * + * @access private + */ + public function ObjectSaveName() + { + $db = db_connection(); + + $sql = $db->sql(<<<SQL +SELECT COUNT(*) FROM {{name}} WHERE objectid ={objectid} AND languageid={languageid} +SQL + ); + $sql->setInt( 'objectid' , $this->objectid ); + $sql->setInt( 'languageid', $this->languageid ); + $count = $sql->getOne(); - /** - * Objekt hinzufuegen. - * - * Standardrechte und vom Elternobjekt vererbbare Berechtigungen werden gesetzt. - */ - function objectAdd() + if ($count > 0) { - self::add(); + $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->desc); + $sql->setInt( 'objectid' , $this->objectid ); + $sql->setInt( 'languageid', $this->languageid ); + $sql->query(); } - - /** - * Objekt hinzufuegen. - * - * Standardrechte und vom Elternobjekt vererbbare Berechtigungen werden gesetzt. - */ - function add() + else { - // Neue Objekt-Id bestimmen - $sql = db()->sql('SELECT MAX(id) FROM {{object}}'); - $this->objectid = intval($sql->getOne())+1; - - $this->checkFilename(); - $sql = db()->sql('INSERT INTO {{object}}'. - ' (id,parentid,projectid,filename,orderid,create_date,create_userid,lastchange_date,lastchange_userid,typeid,settings)'. - ' VALUES( {objectid},{parentid},{projectid},{filename},{orderid},{time},{createuserid},{createtime},{userid},{typeid},\'\' )'); - - if ( $this->isRoot ) - $sql->setNull('parentid'); - else $sql->setInt ('parentid',$this->parentid ); - - $sql->setInt ('objectid' , $this->objectid ); - $sql->setString('filename' , $this->filename ); - $sql->setString('projectid', $this->projectid); - $sql->setInt ('orderid' , 99999 ); - $sql->setInt ('time' , now() ); - $user = \Session::getUser(); - $sql->setInt ('createuserid' , $user->userid ); - $sql->setInt ('createtime' , now() ); - $user = \Session::getUser(); - $sql->setInt ('userid' , $user->userid ); - - $sql->setInt( 'typeid',$this->getTypeid()); - + $sql = $db->sql('SELECT MAX(id) FROM {{name}}'); + $nameid = intval($sql->getOne())+1; + + $sql = $db->sql('INSERT INTO {{name}}'.' (id,objectid,languageid,name,descr)'.' VALUES( {nameid},{objectid},{languageid},{name},{desc} )'); + $sql->setInt ('objectid' , $this->objectid ); + $sql->setInt ('languageid', $this->languageid ); + $sql->setInt ('nameid', $nameid ); + $sql->setString('name' , $this->name); + $sql->setString('desc' , $this->desc); $sql->query(); + } + } - // Standard-Rechte fuer dieses neue Objekt setzen. - // Der angemeldete Benutzer erhaelt alle Rechte auf - // das neue Objekt. Legitim, denn er hat es ja angelegt. - $acl = new Acl(); - $acl->userid = $user->userid; - $acl->objectid = $this->objectid; - - $acl->read = true; - $acl->write = true; - $acl->prop = true; - $acl->delete = true; - $acl->grant = true; - - $acl->create_file = true; - $acl->create_page = true; - $acl->create_folder = true; - $acl->create_link = true; - - $acl->add(); - - // Aus dem Eltern-Ordner vererbbare Berechtigungen uebernehmen. - $parent = new BaseObject( $this->parentid ); - foreach( $parent->getAllAclIds() as $aclid ) - { - $acl = new Acl( $aclid ); - $acl->load(); + /** + * Objekt loeschen. Es muss sichergestellt sein, dass auch das Unterobjekt geloeschet wird. + * Diese Methode wird daher normalerweise nur vom Unterobjekt augerufen + * @access protected + */ + public function objectDelete() + { + $db = db_connection(); + + $sql = $db->sql( 'UPDATE {{element}} '. + ' SET default_objectid=NULL '. + ' WHERE default_objectid={objectid}' ); + $sql->setInt('objectid',$this->objectid); + $sql->query(); + + $sql = $db->sql( 'UPDATE {{value}} '. + ' SET linkobjectid=NULL '. + ' WHERE linkobjectid={objectid}' ); + $sql->setInt('objectid',$this->objectid); + $sql->query(); + + $sql = $db->sql( 'UPDATE {{link}} '. + ' SET link_objectid=NULL '. + ' WHERE link_objectid={objectid}' ); + $sql->setInt('objectid',$this->objectid); + $sql->query(); + + + // Objekt-Namen l?schen + $sql = $db->sql('DELETE FROM {{name}} WHERE objectid={objectid}'); + $sql->setInt('objectid', $this->objectid); + $sql->query(); + + // ACLs loeschen + $this->deleteAllACLs(); + + // Objekt l?schen + $sql = $db->sql('DELETE FROM {{object}} WHERE id={objectid}'); + $sql->setInt('objectid', $this->objectid); + $sql->query(); + } - if ( $acl->transmit ) // ACL is vererbbar, also kopieren. - { - $acl->objectid = $this->objectid; - $acl->add(); // ... und hinzufuegen. - } - } - } + /** + * Objekt hinzufuegen. + * + * Standardrechte und vom Elternobjekt vererbbare Berechtigungen werden gesetzt. + */ + function objectAdd() + { + self::add(); + } - /** - * Pruefung auf Gueltigkeit des Dateinamens - */ - private function checkFilename() + /** + * Objekt hinzufuegen. + * + * Standardrechte und vom Elternobjekt vererbbare Berechtigungen werden gesetzt. + */ + function add() + { + // Neue Objekt-Id bestimmen + $sql = db()->sql('SELECT MAX(id) FROM {{object}}'); + $this->objectid = intval($sql->getOne())+1; + + $this->checkFilename(); + $sql = db()->sql('INSERT INTO {{object}}'. + ' (id,parentid,projectid,filename,orderid,create_date,create_userid,lastchange_date,lastchange_userid,typeid,settings)'. + ' VALUES( {objectid},{parentid},{projectid},{filename},{orderid},{time},{createuserid},{createtime},{userid},{typeid},\'\' )'); + + if ( $this->isRoot ) + $sql->setNull('parentid'); + else $sql->setInt ('parentid',$this->parentid ); + + $sql->setInt ('objectid' , $this->objectid ); + $sql->setString('filename' , $this->filename ); + $sql->setString('projectid', $this->projectid); + $sql->setInt ('orderid' , 99999 ); + $sql->setInt ('time' , now() ); + $user = \Session::getUser(); + $sql->setInt ('createuserid' , $user->userid ); + $sql->setInt ('createtime' , now() ); + $user = \Session::getUser(); + $sql->setInt ('userid' , $user->userid ); + + $sql->setInt( 'typeid',$this->getTypeid()); + + $sql->query(); + + // Standard-Rechte fuer dieses neue Objekt setzen. + // Der angemeldete Benutzer erhaelt alle Rechte auf + // das neue Objekt. Legitim, denn er hat es ja angelegt. + $acl = new Acl(); + $acl->userid = $user->userid; + $acl->objectid = $this->objectid; + + $acl->read = true; + $acl->write = true; + $acl->prop = true; + $acl->delete = true; + $acl->grant = true; + + $acl->create_file = true; + $acl->create_page = true; + $acl->create_folder = true; + $acl->create_link = true; + + $acl->add(); + + // Aus dem Eltern-Ordner vererbbare Berechtigungen uebernehmen. + $parent = new BaseObject( $this->parentid ); + foreach( $parent->getAllAclIds() as $aclid ) { - if ( empty($this->filename) ) - $this->filename = $this->objectid; + $acl = new Acl( $aclid ); + $acl->load(); - if ( $this->isRoot ) // Beim Root-Ordner ist es egal, es gibt nur einen. - return; - - if ( !$this->filenameIsUnique( $this->filename ) ) + if ( $acl->transmit ) // ACL is vererbbar, also kopieren. { - // Append some string to filename. - $this->filename = $this->filename.'-'.base_convert(time(), 10, 36); + $acl->objectid = $this->objectid; + $acl->add(); // ... und hinzufuegen. } } + } + + + /** + * Pruefung auf Gueltigkeit des Dateinamens + */ + private function checkFilename() + { + if ( empty($this->filename) ) + $this->filename = $this->objectid; + if ( $this->isRoot ) // Beim Root-Ordner ist es egal, es gibt nur einen. + return; - /** - * Stellt fest, dass der Dateiname im aktuellen Ordner kein weiteres Mal vorkommt. - * Dies muss vor dem Speichern geprüft werden, ansonsten erfolgt eine Index-Verletzung - * und der Datensatz kann nicht gespeichert werde. - * - * @param $filename - * @return bool - */ - private function filenameIsUnique( $filename ) + if ( !$this->filenameIsUnique( $this->filename ) ) { - $sql = db()->sql( <<<SQL + // Append some string to filename. + $this->filename = $this->filename.'-'.base_convert(time(), 10, 36); + } + } + + + /** + * Stellt fest, dass der Dateiname im aktuellen Ordner kein weiteres Mal vorkommt. + * Dies muss vor dem Speichern geprüft werden, ansonsten erfolgt eine Index-Verletzung + * und der Datensatz kann nicht gespeichert werde. + * + * @param $filename + * @return bool + */ + private function filenameIsUnique( $filename ) + { + $sql = db()->sql( <<<SQL SELECT COUNT(*) FROM {{object}} - WHERE parentid={parentid} AND filename={filename} - AND NOT id = {objectid} +WHERE parentid={parentid} AND filename={filename} +AND NOT id = {objectid} SQL - ); + ); - $sql->setString('parentid', $this->parentid); - $sql->setString('filename', $filename ); - $sql->setString('objectid', $this->objectid); + $sql->setString('parentid', $this->parentid); + $sql->setString('filename', $filename ); + $sql->setString('objectid', $this->objectid); - return( intval($sql->getOne()) == 0 ); - } + return( intval($sql->getOne()) == 0 ); + } - /** - * Pruefung auf Gueltigkeit des logischen Namens - */ - function checkName() - { - if ( empty($this->name) ) - $this->name = $this->filename; + /** + * Pruefung auf Gueltigkeit des logischen Namens + */ + function checkName() + { + if ( empty($this->name) ) + $this->name = $this->filename; - if ( empty($this->name) ) - $this->name = $this->objectid; - } + if ( empty($this->name) ) + $this->name = $this->objectid; + } - function getAllAclIds() - { - $db = db_connection(); + function getAllAclIds() + { + $db = db_connection(); - $sql = $db->sql( 'SELECT id FROM {{acl}} '. - ' WHERE objectid={objectid}'. - ' ORDER BY userid,groupid ASC' ); - $sql->setInt('objectid' ,$this->objectid); + $sql = $db->sql( 'SELECT id FROM {{acl}} '. + ' WHERE objectid={objectid}'. + ' ORDER BY userid,groupid ASC' ); + $sql->setInt('objectid' ,$this->objectid); - return $sql->getCol(); - } + return $sql->getCol(); + } - /** - * Ermitteln aller Berechtigungsstufen. - */ - function getRelatedAclTypes() - { - return( array('read','write','delete','prop','release','publish','create_folder','create_file','create_page','create_link','grant','transmit') ); - } + /** + * Ermitteln aller Berechtigungsstufen. + */ + function getRelatedAclTypes() + { + return( array('read','write','delete','prop','release','publish','create_folder','create_file','create_page','create_link','grant','transmit') ); + } - /** - * Ermitteln aller Berechtigungsstufen. - */ - function getAssocRelatedAclTypes() - { - $types = array(); + /** + * Ermitteln aller Berechtigungsstufen. + */ + function getAssocRelatedAclTypes() + { + $types = array(); - foreach( $this->getRelatedAclTypes() as $t ) - $types[$t] = true; + foreach( $this->getRelatedAclTypes() as $t ) + $types[$t] = true; - return $types; - } + return $types; + } - /** - * Entfernen aller ACLs zu diesem Objekt - * @access private - */ - private function deleteAllACLs() + /** + * Entfernen aller ACLs zu diesem Objekt + * @access private + */ + private function deleteAllACLs() + { + foreach( $this->getAllAclIds() as $aclid ) { - foreach( $this->getAllAclIds() as $aclid ) - { - $acl = new Acl( $aclid ); - $acl->load(); - $acl->delete(); - } + $acl = new Acl( $aclid ); + $acl->load(); + $acl->delete(); } + } - /** - * Reihenfolge-Sequenznr. dieses Objektes neu speichern - * die Nr. wird sofort in der Datenbank gespeichert. - * - * @param Integer neue Sequenz-Nr. - */ - public function setOrderId( $orderid ) - { - $sql = db()->sql('UPDATE {{object}} '.' SET orderid={orderid}'.' WHERE id={objectid}'); - $sql->setInt('objectid', $this->objectid); - $sql->setInt('orderid', $orderid); + /** + * Reihenfolge-Sequenznr. dieses Objektes neu speichern + * die Nr. wird sofort in der Datenbank gespeichert. + * + * @param Integer neue Sequenz-Nr. + */ + public function setOrderId( $orderid ) + { + $sql = db()->sql('UPDATE {{object}} '.' SET orderid={orderid}'.' WHERE id={objectid}'); + $sql->setInt('objectid', $this->objectid); + $sql->setInt('orderid', $orderid); - $sql->query(); - } + $sql->query(); + } - /** - * ?bergeordnete Objekt-ID dieses Objektes neu speichern - * die Nr. wird sofort in der Datenbank gespeichert. - * - * @param Integer ?bergeordnete Objekt-ID - */ - public function setParentId( $parentid ) - { - $db = db_connection(); + /** + * ?bergeordnete Objekt-ID dieses Objektes neu speichern + * die Nr. wird sofort in der Datenbank gespeichert. + * + * @param Integer ?bergeordnete Objekt-ID + */ + public function setParentId( $parentid ) + { + $db = db_connection(); - $sql = $db->sql('UPDATE {{object}} '.' SET parentid={parentid}'.' WHERE id={objectid}'); - $sql->setInt('objectid', $this->objectid); - $sql->setInt('parentid', $parentid); + $sql = $db->sql('UPDATE {{object}} '.' SET parentid={parentid}'.' WHERE id={objectid}'); + $sql->setInt('objectid', $this->objectid); + $sql->setInt('parentid', $parentid); - $sql->query(); - } + $sql->query(); + } - public function getDependentObjectIds() - { - $db = db_connection(); + public function getDependentObjectIds() + { + $db = db_connection(); - $sql = $db->sql( 'SELECT {{page}}.objectid FROM {{value}}'. - ' LEFT JOIN {{page}} '. - ' ON {{value}}.pageid = {{page}}.id '. - ' WHERE linkobjectid={objectid}' ); - $sql->setInt( 'objectid',$this->objectid ); + $sql = $db->sql( 'SELECT {{page}}.objectid FROM {{value}}'. + ' LEFT JOIN {{page}} '. + ' ON {{value}}.pageid = {{page}}.id '. + ' WHERE linkobjectid={objectid}' ); + $sql->setInt( 'objectid',$this->objectid ); - return $sql->getCol(); - } + return $sql->getCol(); + } - /** - * Liefert die Link-Ids, die auf das aktuelle Objekt verweisen. - * @return array Liste der gefundenen Objekt-IDs - */ - public function getLinksToMe() - { - $db = db_connection(); + /** + * Liefert die Link-Ids, die auf das aktuelle Objekt verweisen. + * @return array Liste der gefundenen Objekt-IDs + */ + public function getLinksToMe() + { + $db = db_connection(); - $sql = $db->sql( 'SELECT objectid FROM {{link}} '. - ' WHERE link_objectid={myid}' ); - $sql->setInt ( 'myid' ,$this->objectid ); + $sql = $db->sql( 'SELECT objectid FROM {{link}} '. + ' WHERE link_objectid={myid}' ); + $sql->setInt ( 'myid' ,$this->objectid ); - return $sql->getCol(); - } + return $sql->getCol(); + } - private function getTypeid() - { - if ($this->isFolder) return OR_TYPEID_FOLDER; - if ($this->isFile) return OR_TYPEID_FILE; - if ($this->isImage) return OR_TYPEID_IMAGE; - if ($this->isText) return OR_TYPEID_TEXT; - if ($this->isPage) return OR_TYPEID_PAGE; - if ($this->isLink) return OR_TYPEID_LINK; - if ($this->isUrl) return OR_TYPEID_URL; - } + private function getTypeid() + { + if ($this->isFolder) return self::TYPEID_FOLDER; + if ($this->isFile ) return self::TYPEID_FILE; + if ($this->isImage ) return self::TYPEID_IMAGE; + if ($this->isText ) return self::TYPEID_TEXT; + if ($this->isPage ) return self::TYPEID_PAGE; + if ($this->isLink ) return self::TYPEID_LINK; + if ($this->isUrl ) return self::TYPEID_URL; + } - /** - * Local Settings. - * - * @return array - */ - public function getSettings() - { - return Spyc::YAMLLoad($this->settings); - } + /** + * Local Settings. + * + * @return array + */ + public function getSettings() + { + return Spyc::YAMLLoad($this->settings); + } - /** - * Inherited Settings. - * - * @return array - */ - public function getTotalSettings() - { - $totalSettings = array(); + /** + * Inherited Settings. + * + * @return array + */ + public function getTotalSettings() + { + $totalSettings = array(); - // cumulate settings of parent objects - $parentIds = array_keys( $this->parentObjectFileNames(true, false) ); - foreach( $parentIds as $id ) - { - $parentObject = new BaseObject( $id ); - $parentObject->objectLoad(); - $totalSettings = array_merge($totalSettings,$parentObject->getSettings()); - } + // cumulate settings of parent objects + $parentIds = array_keys( $this->parentObjectFileNames(true, false) ); + foreach( $parentIds as $id ) + { + $parentObject = new BaseObject( $id ); + $parentObject->objectLoad(); + $totalSettings = array_merge($totalSettings,$parentObject->getSettings()); + } - // add settings from this base object. - $totalSettings = array_merge($totalSettings,$this->getSettings()); + // add settings from this base object. + $totalSettings = array_merge($totalSettings,$this->getSettings()); - return $totalSettings; - } + return $totalSettings; + } - /** - * Liefert alle übergeordneten Ordner. - * - * @param bool $with_root Mit Root-Folder? - * @param bool $with_self Mit dem aktuellen Ordner? - * @return array - */ - public function parentObjectFileNames( $with_root = false, $with_self = false ) - { - $db = \Session::getDatabase(); + /** + * Liefert alle übergeordneten Ordner. + * + * @param bool $with_root Mit Root-Folder? + * @param bool $with_self Mit dem aktuellen Ordner? + * @return array + */ + public function parentObjectFileNames( $with_root = false, $with_self = false ) + { + $db = \Session::getDatabase(); - $foid = $this->id; - $idCache = array(); + $foid = $this->id; + $idCache = array(); - while( intval($foid)!=0 ) - { - $sql = $db->sql( <<<SQL - - SELECT parentid,id,filename - FROM {{object}} - WHERE {{object}}.id={parentid} + while( intval($foid)!=0 ) + { + $sql = $db->sql( <<<SQL + +SELECT parentid,id,filename + FROM {{object}} + WHERE {{object}}.id={parentid} SQL - ); - $sql->setInt('parentid' ,$foid ); + ); + $sql->setInt('parentid' ,$foid ); - $row = $sql->getRow(); + $row = $sql->getRow(); - if ( in_array($row['id'],$idCache)) - throw new \LogicException('fatal: parent-rekursion in object-id: '.$this->objectid.', double-parent-id: '.$row['id']); - else - $idCache[] = $row['id']; + if ( in_array($row['id'],$idCache)) + throw new \LogicException('fatal: parent-rekursion in object-id: '.$this->objectid.', double-parent-id: '.$row['id']); + else + $idCache[] = $row['id']; - $this->addParentfolder( $row['id'],$row['filename'] ); - $foid = $row['parentid']; - } + $this->addParentfolder( $row['id'],$row['filename'] ); + $foid = $row['parentid']; + } - $this->checkParentFolders($with_root,$with_self); + $this->checkParentFolders($with_root,$with_self); - return $this->parentfolders; - } + return $this->parentfolders; + } - public function parentObjectNames( $with_root = false, $with_self = false ) - { - $db = \Session::getDatabase(); + public function parentObjectNames( $with_root = false, $with_self = false ) + { + $db = \Session::getDatabase(); - $foid = $this->id; - $idCache = array(); + $foid = $this->id; + $idCache = array(); - while( intval($foid)!=0 ) - { - $sql = $db->sql( <<<SQL - - SELECT {{object}}.parentid,{{object}}.id,{{object}}.filename,{{name}}.name FROM {{object}} - LEFT JOIN {{name}} - ON {{object}}.id = {{name}}.objectid - AND {{name}}.languageid = {languageid} - WHERE {{object}}.id={parentid} + while( intval($foid)!=0 ) + { + $sql = $db->sql( <<<SQL + +SELECT {{object}}.parentid,{{object}}.id,{{object}}.filename,{{name}}.name FROM {{object}} + LEFT JOIN {{name}} + ON {{object}}.id = {{name}}.objectid + AND {{name}}.languageid = {languageid} + WHERE {{object}}.id={parentid} SQL - ); - $sql->setInt('languageid',$this->languageid); - $sql->setInt('parentid' ,$foid ); - - $row = $sql->getRow(); - - if ( in_array($row['id'],$idCache)) - throw new \LogicException('fatal: parent-rekursion in object-id: '.$this->objectid.', double-parent-id: '.$row['id']); - else - $idCache[] = $row['id']; + ); + $sql->setInt('languageid',$this->languageid); + $sql->setInt('parentid' ,$foid ); - $this->addParentfolder( $row['id'],$row['name'],$row['filename'] ); - $foid = $row['parentid']; - } + $row = $sql->getRow(); - $this->checkParentFolders($with_root,$with_self); + if ( in_array($row['id'],$idCache)) + throw new \LogicException('fatal: parent-rekursion in object-id: '.$this->objectid.', double-parent-id: '.$row['id']); + else + $idCache[] = $row['id']; - return $this->parentfolders; + $this->addParentfolder( $row['id'],$row['name'],$row['filename'] ); + $foid = $row['parentid']; } + $this->checkParentFolders($with_root,$with_self); - private function addParentFolder( $id,$name,$filename='' ) - { - if ( empty($name) ) - $name = $filename; + return $this->parentfolders; + } - if ( empty($name) ) - $name = "($id)"; - if ( intval($id) != 0 ) - $this->parentfolders[ $id ] = $name; - } + private function addParentFolder( $id,$name,$filename='' ) + { + if ( empty($name) ) + $name = $filename; + if ( empty($name) ) + $name = "($id)"; - private function checkParentFolders( $with_root, $with_self ) - { - // Reihenfolge umdrehen - $this->parentfolders = array_reverse($this->parentfolders,true); + if ( intval($id) != 0 ) + $this->parentfolders[ $id ] = $name; + } - // Ordner ist bereits hoechster Ordner - // if ( count($this->parentfolders) == 2 && $this->isRoot && $with_root && $with_self ) - // { - // array_pop ( $this->parentfolders ); - // return; - // } + private function checkParentFolders( $with_root, $with_self ) + { + // Reihenfolge umdrehen + $this->parentfolders = array_reverse($this->parentfolders,true); - if ( !$with_root && !empty($this->parentfolders) ) - { - $keys = array_keys( $this->parentfolders ); - unset( $this->parentfolders[$keys[0]] ); - } + // Ordner ist bereits hoechster Ordner +// if ( count($this->parentfolders) == 2 && $this->isRoot && $with_root && $with_self ) +// { +// array_pop ( $this->parentfolders ); +// return; +// } - if ( !$with_self && !empty($this->parentfolders) ) - { - $keys = array_keys( $this->parentfolders ); - unset( $this->parentfolders[$keys[count($keys)-1]] ); - } - } - - /** - * Liefert das Projekt-Objekt. - * - * @return Project - * @throws \ObjectNotFoundException - */ - public function getProject() { - return Project::create( $this->projectid ); + if ( !$with_root && !empty($this->parentfolders) ) + { + $keys = array_keys( $this->parentfolders ); + unset( $this->parentfolders[$keys[0]] ); } - - - - /** - * Es werden Objekte mit einem bestimmten Namen ermittelt - * @param String Suchbegriff - * @return array Liste der gefundenen Objekt-IDs - */ - public static function getObjectIdsByFileName( $text ) + if ( !$with_self && !empty($this->parentfolders) ) { - $db = db_connection(); - - $sql = $db->sql( 'SELECT id FROM {{object}} '. - ' WHERE filename LIKE {filename}'. - ' ORDER BY lastchange_date DESC' ); - $sql->setString( 'filename','%'.$text.'%' ); - - return $sql->getCol(); + $keys = array_keys( $this->parentfolders ); + unset( $this->parentfolders[$keys[count($keys)-1]] ); } + } - /** - * Es werden Objekte mit einem Namen ermittelt - * @param String Suchbegriff - * @return array Liste der gefundenen Objekt-IDs - */ - public static function getObjectIdsByName( $text ) - { - $db = db_connection(); + /** + * Liefert das Projekt-Objekt. + * + * @return Project + * @throws \ObjectNotFoundException + */ + public function getProject() { + return Project::create( $this->projectid ); + } - $sql = $db->sql( 'SELECT {{object}}.id FROM {{object}} '. - ' LEFT JOIN {{name}} '. - ' ON {{object}}.id={{name}}.objectid'. - ' WHERE {{name}}.name LIKE {name}'. - ' ORDER BY lastchange_date DESC' ); - $sql->setString( 'name' ,'%'.$text.'%' ); - return $sql->getCol(); - } - /** - * Es werden Objekte mit einer Beschreibung ermittelt - * @param String Suchbegriff - * @return array Liste der gefundenen Objekt-IDs - */ - public static function getObjectIdsByDescription( $text ) - { - $db = db_connection(); + /** + * Es werden Objekte mit einem bestimmten Namen ermittelt + * @param String Suchbegriff + * @return array Liste der gefundenen Objekt-IDs + */ + public static function getObjectIdsByFileName( $text ) + { + $db = db_connection(); - $sql = $db->sql( 'SELECT {{object}}.id FROM {{object}} '. - ' LEFT JOIN {{name}} '. - ' ON {{object}}.id={{name}}.objectid'. - ' WHERE {{name}}.descr LIKE {desc}'. - ' ORDER BY lastchange_date DESC' ); - $sql->setString( 'desc' ,'%'.$text.'%' ); + $sql = $db->sql( 'SELECT id FROM {{object}} '. + ' WHERE filename LIKE {filename}'. + ' ORDER BY lastchange_date DESC' ); + $sql->setString( 'filename','%'.$text.'%' ); - return $sql->getCol(); - } + return $sql->getCol(); + } - /** - * Es werden Objekte mit einer UserId ermittelt - * @param Integer Benutzer-Id der Erstellung - * @return array Liste der gefundenen Objekt-IDs - */ - public static function getObjectIdsByCreateUserId( $userid ) - { - $db = db_connection(); + /** + * Es werden Objekte mit einem Namen ermittelt + * @param String Suchbegriff + * @return array Liste der gefundenen Objekt-IDs + */ + public static function getObjectIdsByName( $text ) + { + $db = db_connection(); - $sql = $db->sql( 'SELECT id FROM {{object}} '. - ' WHERE create_userid={userid}'. - ' ORDER BY lastchange_date DESC' ); - $sql->setInt ( 'userid' ,$userid ); + $sql = $db->sql( 'SELECT {{object}}.id FROM {{object}} '. + ' LEFT JOIN {{name}} '. + ' ON {{object}}.id={{name}}.objectid'. + ' WHERE {{name}}.name LIKE {name}'. + ' ORDER BY lastchange_date DESC' ); + $sql->setString( 'name' ,'%'.$text.'%' ); - return $sql->getCol(); - } + return $sql->getCol(); + } - /** - * Es werden Objekte mit einer UserId ermittelt - * @param Integer Benutzer-Id der letzten ?nderung - * @return array Liste der gefundenen Objekt-IDs - */ - public static function getObjectIdsByLastChangeUserId( $userid ) - { - $db = db_connection(); + /** + * Es werden Objekte mit einer Beschreibung ermittelt + * @param String Suchbegriff + * @return array Liste der gefundenen Objekt-IDs + */ + public static function getObjectIdsByDescription( $text ) + { + $db = db_connection(); - $sql = $db->sql( 'SELECT id FROM {{object}} '. - ' WHERE lastchange_userid={userid}'. - ' ORDER BY lastchange_date DESC' ); - $sql->setInt ( 'userid' ,$userid ); + $sql = $db->sql( 'SELECT {{object}}.id FROM {{object}} '. + ' LEFT JOIN {{name}} '. + ' ON {{object}}.id={{name}}.objectid'. + ' WHERE {{name}}.descr LIKE {desc}'. + ' ORDER BY lastchange_date DESC' ); + $sql->setString( 'desc' ,'%'.$text.'%' ); - return $sql->getCol(); - } + return $sql->getCol(); + } - /** - * Stellt fest, ob das Objekt gueltig ist. - */ - public function isValid() - { - $now = time(); + /** + * Es werden Objekte mit einer UserId ermittelt + * @param Integer Benutzer-Id der Erstellung + * @return array Liste der gefundenen Objekt-IDs + */ + public static function getObjectIdsByCreateUserId( $userid ) + { + $db = db_connection(); - return - ($this->validFromDate == null || $this->validFromDate < $now) && - ($this->validToDate == null || $this->validToDate > $now); + $sql = $db->sql( 'SELECT id FROM {{object}} '. + ' WHERE create_userid={userid}'. + ' ORDER BY lastchange_date DESC' ); + $sql->setInt ( 'userid' ,$userid ); - } + return $sql->getCol(); + } - public function __toString() - { - return 'Object-Id '.$this->objectid.' (type='.$this->getType().',filename='.$this->filename.',language='.$this->languageid.', modelid='.$this->modelid.')'; - } + /** + * Es werden Objekte mit einer UserId ermittelt + * @param Integer Benutzer-Id der letzten ?nderung + * @return array Liste der gefundenen Objekt-IDs + */ + public static function getObjectIdsByLastChangeUserId( $userid ) + { + $db = db_connection(); - /** - * Liefert alle Name-Objekte. - * @return array - * @throws \ObjectNotFoundException - */ - public function getNames() - { - $names = array(); + $sql = $db->sql( 'SELECT id FROM {{object}} '. + ' WHERE lastchange_userid={userid}'. + ' ORDER BY lastchange_date DESC' ); + $sql->setInt ( 'userid' ,$userid ); - foreach( $this->getProject()->getLanguages() as $languageId=>$languageName ) - { - $name = new Name(); - $name->objectid = $this->objectid; - $name->languageid = $languageId; - $name->load(); + return $sql->getCol(); + } - $names[] = $name; - } - return $names; - } + /** + * Stellt fest, ob das Objekt gueltig ist. + */ + public function isValid() + { + $now = time(); + return + ($this->validFromDate == null || $this->validFromDate < $now) && + ($this->validToDate == null || $this->validToDate > $now); - /** - * @return Name - */ - public function getDefaultName() - { - $languageId = $this->getProject()->getDefaultLanguageId(); + } + + public function __toString() + { + return 'Object-Id '.$this->objectid.' (type='.$this->getType().',filename='.$this->filename.',language='.$this->languageid.', modelid='.$this->modelid.')'; + } - return $this->getNameForLanguage( $languageId ); - } + /** + * Liefert alle Name-Objekte. + * @return array + * @throws \ObjectNotFoundException + */ + public function getNames() + { + $names = array(); - /** - * @return Name - */ - public function getNameForLanguage( $languageid ) + foreach( $this->getProject()->getLanguages() as $languageId=>$languageName ) { $name = new Name(); $name->objectid = $this->objectid; - $name->languageid = $languageid; + $name->languageid = $languageId; $name->load(); - return $name; + $names[] = $name; } + return $names; + } - /** - * Name of the object. If not exist, the filename will be used. - * @return string Name - */ - public function getName() - { - $name = $this->getDefaultName()->name; - if ( empty($name)) - $name = $this->filename; + /** + * @return Name + */ + public function getDefaultName() + { + $languageId = $this->getProject()->getDefaultLanguageId(); - return $name; - } + return $this->getNameForLanguage( $languageId ); + } - /** - * Speichert Namen und Beschreibung für alle Sprachen. Das ist bei der Neuanlage von Objekten ganz praktisch. - * - * @param $nam string - * @param $description string - */ - public function setNameForAllLanguages($nam, $description) - { - foreach( $this->getProject()->getLanguages() as $languageId=>$languageName ) - { - $name = new Name(); - $name->objectid = $this->objectid; - $name->languageid = $languageId; - $name->load(); + /** + * @return Name + */ + public function getNameForLanguage( $languageid ) + { + $name = new Name(); + $name->objectid = $this->objectid; + $name->languageid = $languageid; + $name->load(); + + return $name; + } - $name->name = $nam; - $name->description = $description; - $name->save(); - } + /** + * Name of the object. If not exist, the filename will be used. + * @return string Name + */ + public function getName() + { + $name = $this->getDefaultName()->name; + + if ( empty($name)) + $name = $this->filename; + return $name; + } + + + /** + * Speichert Namen und Beschreibung für alle Sprachen. Das ist bei der Neuanlage von Objekten ganz praktisch. + * + * @param $nam string + * @param $description string + */ + public function setNameForAllLanguages($nam, $description) + { + foreach( $this->getProject()->getLanguages() as $languageId=>$languageName ) + { + $name = new Name(); + $name->objectid = $this->objectid; + $name->languageid = $languageId; + $name->load(); + + $name->name = $nam; + $name->description = $description; + + $name->save(); } } +} + -}- \ No newline at end of file diff --git a/modules/cms-core/model/File.class.php b/modules/cms-core/model/File.class.php @@ -167,11 +167,11 @@ class File extends BaseObject $ext = explode(',',$extension); $sqlquery .= implode( "' OR extension='",$ext ); - $sqlquery .= "' AND typeid=".OR_TYPEID_FILE." AND projectid={projectid}"; + $sqlquery .= "' AND typeid=".BaseObject::TYPEID_FILE." AND projectid={projectid}"; } else { - $sqlquery .= " WHERE typeid=".OR_TYPEID_FILE." AND projectid={projectid}"; + $sqlquery .= " WHERE typeid=".BaseObject::TYPEID_FILE." AND projectid={projectid}"; } $sql = $db->sql( $sqlquery ); diff --git a/modules/cms-core/model/Folder.class.php b/modules/cms-core/model/Folder.class.php @@ -284,7 +284,7 @@ class Folder extends BaseObject $db = db_connection(); $sql = $db->sql('SELECT id FROM {{object}} '. - ' WHERE parentid={objectid} AND typeid='.OR_TYPEID_PAGE. + ' WHERE parentid={objectid} AND typeid='.BaseObject::TYPEID_PAGE. ' ORDER BY orderid ASC' ); $sql->setInt( 'objectid' ,$this->objectid ); @@ -303,7 +303,7 @@ class Folder extends BaseObject $sql = $db->sql('SELECT id FROM {{object}} '. ' WHERE parentid={objectid}'. - ' AND (typeid='.OR_TYPEID_PAGE.')'. + ' AND (typeid='.BaseObject::TYPEID_PAGE.')'. ' ORDER BY orderid ASC' ); $sql->setInt( 'objectid' ,$this->objectid ); @@ -329,7 +329,7 @@ class Folder extends BaseObject $sql = $db->sql('SELECT id FROM {{object}} '. ' WHERE parentid={objectid}'. - ' AND (typeid='.OR_TYPEID_PAGE.' OR typeid='.OR_TYPEID_LINK.')'. + ' AND (typeid='.BaseObject::TYPEID_PAGE.' OR typeid='.BaseObject::TYPEID_LINK.')'. ' ORDER BY orderid ASC' ); $sql->setInt( 'objectid' ,$this->objectid ); @@ -350,7 +350,7 @@ class Folder extends BaseObject $sql = $db->sql('SELECT id FROM {{object}} '. ' WHERE parentid={objectid}'. - ' AND (typeid='.OR_TYPEID_PAGE.' OR typeid='.OR_TYPEID_LINK.')'. + ' AND (typeid='.BaseObject::TYPEID_PAGE.' OR typeid='.BaseObject::TYPEID_LINK.')'. ' ORDER BY orderid DESC' ); $sql->setInt( 'objectid' ,$this->objectid ); @@ -370,7 +370,7 @@ class Folder extends BaseObject $db = db_connection(); $sql = $db->sql('SELECT id FROM {{object}} '. - ' WHERE parentid={objectid} AND typeid='.OR_TYPEID_FILE. + ' WHERE parentid={objectid} AND typeid='.BaseObject::TYPEID_FILE. ' ORDER BY orderid ASC' ); $sql->setInt( 'objectid' ,$this->objectid ); @@ -389,7 +389,7 @@ class Folder extends BaseObject $db = db_connection(); $sql = $db->sql('SELECT id,filename FROM {{object}} '. - ' WHERE parentid={objectid} AND typeid='.OR_TYPEID_FILE. + ' WHERE parentid={objectid} AND typeid='.BaseObject::TYPEID_FILE. ' ORDER BY orderid ASC' ); $sql->setInt( 'objectid' ,$this->objectid ); @@ -402,7 +402,7 @@ class Folder extends BaseObject $db = db_connection(); $sql = $db->sql('SELECT id FROM {{object}} '. - ' WHERE parentid={objectid} AND typeid='.OR_TYPEID_LINK. + ' WHERE parentid={objectid} AND typeid='.BaseObject::TYPEID_LINK. ' ORDER BY orderid ASC' ); $sql->setInt( 'objectid' ,$this->objectid ); @@ -538,7 +538,7 @@ SQL ); $stmt->setInt( 'objectid' ,$this->objectid ); - $stmt->setInt( 'typeid' ,OR_TYPEID_FOLDER ); + $stmt->setInt( 'typeid' ,BaseObject::TYPEID_FOLDER ); $this->subfolders = $stmt->getCol(); @@ -557,7 +557,7 @@ SQL ); $stmt->setInt( 'objectid' ,$this->objectid ); - $stmt->setInt( 'typeid' ,OR_TYPEID_FOLDER ); + $stmt->setInt( 'typeid' ,BaseObject::TYPEID_FOLDER ); return $stmt->getAssoc(); } diff --git a/modules/cms-core/model/Project.class.php b/modules/cms-core/model/Project.class.php @@ -993,13 +993,13 @@ SQL ); $stmt->setInt('projectid',$this->projectid ); - $stmt->setInt('is_folder',in_array('folder',$types)?OR_TYPEID_FOLDER:0); - $stmt->setInt('is_file' ,in_array('file' ,$types)?OR_TYPEID_FILE :0); - $stmt->setInt('is_image' ,in_array('image' ,$types)?OR_TYPEID_IMAGE :0); - $stmt->setInt('is_text' ,in_array('text' ,$types)?OR_TYPEID_TEXT :0); - $stmt->setInt('is_page' ,in_array('page' ,$types)?OR_TYPEID_PAGE :0); - $stmt->setInt('is_link' ,in_array('link' ,$types)?OR_TYPEID_LINK :0); - $stmt->setInt('is_url' ,in_array('url' ,$types)?OR_TYPEID_URL :0); + $stmt->setInt('is_folder',in_array('folder',$types)?BaseObject::TYPEID_FOLDER:0); + $stmt->setInt('is_file' ,in_array('file' ,$types)?BaseObject::TYPEID_FILE :0); + $stmt->setInt('is_image' ,in_array('image' ,$types)?BaseObject::TYPEID_IMAGE :0); + $stmt->setInt('is_text' ,in_array('text' ,$types)?BaseObject::TYPEID_TEXT :0); + $stmt->setInt('is_page' ,in_array('page' ,$types)?BaseObject::TYPEID_PAGE :0); + $stmt->setInt('is_link' ,in_array('link' ,$types)?BaseObject::TYPEID_LINK :0); + $stmt->setInt('is_url' ,in_array('url' ,$types)?BaseObject::TYPEID_URL :0); return( $stmt->getCol() ); } @@ -1015,7 +1015,7 @@ SQL $db = db_connection(); $stmt = $db->sql('SELECT id FROM {{object}}'. - ' WHERE typeid='.OR_TYPEID_FOLDER. + ' WHERE typeid='.BaseObject::TYPEID_FOLDER. ' AND projectid={projectid}' ); $stmt->setInt( 'projectid',$this->projectid ); diff --git a/modules/cms-macros/macro/LastChanges.class.php b/modules/cms-macros/macro/LastChanges.class.php @@ -15,6 +15,7 @@ // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +use cms\model\BaseObject; use cms\model\Folder; use cms\model\Link; use cms\model\Page; @@ -79,16 +80,16 @@ class LastChanges extends Macro if ($o['objectid'] == $this->getObjectId() ) continue; - if ( ($o['typeid']==OR_TYPEID_PAGE && istrue($this->showPages)) || - ($o['typeid']==OR_TYPEID_LINK && istrue($this->showLinks)) ) // Nur wenn gewünschter Typ + if ( ($o['typeid']==BaseObject::TYPEID_PAGE && istrue($this->showPages)) || + ($o['typeid']==BaseObject::TYPEID_LINK && istrue($this->showLinks)) ) // Nur wenn gewünschter Typ { - if ( $o['typeid']==OR_TYPEID_LINK ) { + if ( $o['typeid']==BaseObject::TYPEID_LINK ) { $l = new Link( $o['objectid'] ); $l->load(); $p = new Page( $l->linkedObjectId ); } - elseif ( $o['typeid']==OR_TYPEID_PAGE ) + elseif ( $o['typeid']==BaseObject::TYPEID_PAGE ) { $p = new Page( $o['objectid'] ); } diff --git a/modules/cms-publish/PublishPreview.class.php b/modules/cms-publish/PublishPreview.class.php @@ -35,16 +35,16 @@ class PublishPreview extends Publish // Interne Verlinkungen in der Seitenvorschau switch( $to->typeid ) { - case OR_TYPEID_FILE: - case OR_TYPEID_IMAGE: - case OR_TYPEID_TEXT: + case BaseObject::TYPEID_FILE: + case BaseObject::TYPEID_IMAGE: + case BaseObject::TYPEID_TEXT: $inhalt = \Html::url('file','show',$to->objectid,$param); break; - case OR_TYPEID_PAGE: + case BaseObject::TYPEID_PAGE: $inhalt = \Html::url('page','show',$to->objectid,$param); break; - case OR_TYPEID_LINK: + case BaseObject::TYPEID_LINK: $link = new Link( $to->objectid ); $link->load(); @@ -53,20 +53,20 @@ class PublishPreview extends Publish switch( $linkedObject->typeid ) { - case OR_TYPEID_FILE: + case BaseObject::TYPEID_FILE: $inhalt = \Html::url('file','show',$link->linkedObjectId,$param); break; - case OR_TYPEID_PAGE: + case BaseObject::TYPEID_PAGE: $inhalt = \Html::url('page','show',$link->linkedObjectId,$param); break; - case OR_TYPEID_URL: + case BaseObject::TYPEID_URL: $inhalt = \Html::url('url','show',$link->linkedObjectId,$param); break; } break; - case OR_TYPEID_URL: + case BaseObject::TYPEID_URL: $url = new Url( $to->objectid ); $url->load(); $inhalt = $url->url; diff --git a/modules/cms-publish/PublishPublic.class.php b/modules/cms-publish/PublishPublic.class.php @@ -39,9 +39,9 @@ class PublishPublic extends Publish switch( $to->typeid ) { - case OR_TYPEID_FILE: - case OR_TYPEID_IMAGE: - case OR_TYPEID_TEXT: + case BaseObject::TYPEID_FILE: + case BaseObject::TYPEID_IMAGE: + case BaseObject::TYPEID_TEXT: $f = new File( $to->objectid ); @@ -54,7 +54,7 @@ class PublishPublic extends Publish $filename .= '.'.$f->extension; break; - case OR_TYPEID_PAGE: + case BaseObject::TYPEID_PAGE: $p = new Page( $to->objectid ); $p->languageid = $from->languageid; @@ -67,7 +67,7 @@ class PublishPublic extends Publish $filename = $p->getFilename(); break; - case OR_TYPEID_LINK: + case BaseObject::TYPEID_LINK: $link = new Link( $to->objectid ); $link->load(); @@ -76,7 +76,7 @@ class PublishPublic extends Publish switch( $linkedObject->typeid ) { - case OR_TYPEID_FILE: + case BaseObject::TYPEID_FILE: $f = new File( $link->linkedObjectId ); $f->load(); $f->content_negotiation = $from->content_negotiation; @@ -84,7 +84,7 @@ class PublishPublic extends Publish $to = $f; break; - case OR_TYPEID_PAGE: + case BaseObject::TYPEID_PAGE: $p = new Page( $link->linkedObjectId ); $p->languageid = $from->languageid; $p->modelid = $from->modelid; @@ -101,7 +101,7 @@ class PublishPublic extends Publish } break; - case OR_TYPEID_URL: + case BaseObject::TYPEID_URL: $url = new Url( $to->objectid ); $url->load(); return $url->url; diff --git a/modules/database-update/update/DBVersion000009.class.php b/modules/database-update/update/DBVersion000009.class.php @@ -41,7 +41,7 @@ class DBVersion000009 extends DbVersion // Updating the typeid for URL entrys in table 'object' $updateStmt = $db->sql('UPDATE '.$this->getTableName('object'). - ' SET typeid='.OR_TYPEID_URL.' WHERE id IN (SELECT objectid FROM '.$this->getTableName('url').')' + ' SET typeid='.BaseObject::TYPEID_URL.' WHERE id IN (SELECT objectid FROM '.$this->getTableName('url').')' ); $updateStmt->query();