commit 114ac289429a47e485b68c9bf369bb2704195948
parent 3b1e8c3c3a28e9db710a47911d3808c4e7186a29
Author: Jan Dankert <devnull@localhost>
Date: Thu, 7 Dec 2017 23:01:31 +0100
Den Objekt-Typ in der Datenbank auf eine Id umgestelt. Die Spalten "is_file", "is_folder", "is_page", "is_link" entfallen. Dadurch können neue Typen einfacher angelegt werden.
Diffstat:
7 files changed, 1560 insertions(+), 1506 deletions(-)
diff --git a/db/DbUpdate.class.php b/db/DbUpdate.class.php
@@ -2,7 +2,7 @@
use database\Database;
-define('OR_DB_SUPPORTED_VERSION',7);
+define('OR_DB_SUPPORTED_VERSION',8);
define('OR_DB_STATUS_UPDATE_PROGRESS', 0);
define('OR_DB_STATUS_UPDATE_SUCCESS' , 1);
@@ -21,16 +21,17 @@ class DbUpdate
return;
if ( $version > OR_DB_SUPPORTED_VERSION )
- // Oh oh, in der Datenbank ist eine neue Version, also wir unterstüzten.
+ // Oh oh, in der Datenbank ist eine neue Version, als wir unterstüzten.
Http::serverError('Actual DB version is not supported.',"DB-Version is $version, but this is OpenRat ".OR_VERSION." which only supports version ".OR_DB_SUPPORTED_VERSION );
if ( ! $db->conf['auto_update'])
- Http::serverError('DB Update necessary.',"DB-Version is $version, but this is OpenRat ".OR_VERSION." which needs the version ".OR_DB_SUPPORTED_VERSION );
+ Http::serverError('DB Update necessary.',"DB-Version is $version. Auto-Update is disabled, but this is OpenRat ".OR_VERSION." needs the version ".OR_DB_SUPPORTED_VERSION );
for( $installVersion = $version + 1; $installVersion <= OR_DB_SUPPORTED_VERSION; $installVersion++ )
{
- if ( $installVersion > 2 )
+ if ( $installVersion > 2 ) // Up to version 2 there was no table 'version'.
{
+ $db->start();
$sql = $db->sql('INSERT INTO {{version}} (id,version,status,installed) VALUES( {id},{version},{status},{time} )',$db->id);
$sql->setInt('id' , $installVersion);
$sql->setInt('version', $installVersion);
@@ -43,13 +44,16 @@ class DbUpdate
$updaterClassName = 'DBVersion'.str_pad($installVersion, 6, '0', STR_PAD_LEFT);
require(OR_DBCLASSES_DIR.'update/'.$updaterClassName.'.class.php');
+ $db->start();
/** @var \database\DbVersion $updater */
$updater = new $updaterClassName( $db );
$updater->update();
+ $db->commit();
if ( $installVersion > 2 )
{
+ $db->start();
$sql = $db->sql('UPDATE {{version}} SET status={status},installed={time} WHERE version={version}',$db->id);
$sql->setInt('status' , OR_DB_STATUS_UPDATE_SUCCESS);
$sql->setInt('version', $installVersion);
@@ -58,32 +62,10 @@ class DbUpdate
$db->commit();
}
}
-
- $this->afterUpdate( $db );
}
- /**
- * Initialisieren der frisch aktualisierten Datenbank.
- *
- * @param DB $db
- */
- private function afterUpdate( Database $db )
- {
- // Benutzer zählen.
- $sql = $db->sql('SELECT COUNT(*) From {{user}}',$db->id);
- $countUsers = $sql->getOne( $sql );
-
- // Wenn noch kein Benutzer vorhanden, dann einen anlegen.
- if ( $countUsers == 0 )
- {
- $sql = $db->sql("INSERT INTO {{user}} (id,name,password,ldap_dn,fullname,tel,mail,descr,style,is_admin) VALUES(1,'admin','admin','','Administrator','','','Account for administration tasks.','default',1)",$db->id);
- $sql->query( $sql );
- $db->commit();
- }
- }
-
-
+
private function getDbVersion( Database $db )
{
diff --git a/db/update/DBVersion000001.class.php b/db/update/DBVersion000001.class.php
@@ -1,5 +1,6 @@
<?php
+use database\Database;
use database\DbVersion;
@@ -320,8 +321,33 @@ class DBVersion000001 extends DbVersion
$this->addIndex('acl','languageid');
$this->addIndex('acl','objectid');
$this->addIndex('acl','is_transmit');
-
+
+ $this->afterUpdate( $this->getDb() );
}
+
+
+
+ /**
+ * Initialisieren der frisch aktualisierten Datenbank.
+ *
+ * @param DB $db
+ */
+ private function afterUpdate( Database $db )
+ {
+ // Benutzer zählen.
+ $sql = $db->sql('SELECT COUNT(*) From {{user}}',$db->id);
+ $countUsers = $sql->getOne( $sql );
+
+ // Wenn noch kein Benutzer vorhanden, dann einen anlegen.
+ if ( $countUsers == 0 )
+ {
+ $sql = $db->sql("INSERT INTO {{user}} (id,name,password,ldap_dn,fullname,tel,mail,descr,style,is_admin) VALUES(1,'admin','admin','','Administrator','','','Account for administration tasks.','default',1)",$db->id);
+ $sql->query( $sql );
+ $db->commit();
+ }
+ }
+
+
}
?>
\ No newline at end of file
diff --git a/db/update/DBVersion000008.class.php b/db/update/DBVersion000008.class.php
@@ -0,0 +1,55 @@
+<?php
+use database\DbVersion;
+use security\Password;
+
+/**
+ * Creates a type column in table OBJECT. Now added types have no need for new table columns.
+ *
+ * @author dankert
+ *
+ */
+class DBVersion000008 extends DbVersion
+{
+ /**
+ *
+ */
+ public function update()
+ {
+ $not_nullable = false;
+ $nullable = true;
+
+ $this->addColumn('object','typeid','INT',2,0,$not_nullable);
+ $this->addIndex('object','typeid');
+
+ // Converting old values...
+ $db = $this->getDb();
+ $table = $this->getTableName('object');
+
+ $updateStmt = $db->sql('UPDATE '.$table.
+ ' SET typeid=1 WHERE is_folder=1'
+ );
+ $updateStmt->query();
+
+ $updateStmt = $db->sql('UPDATE '.$table.
+ ' SET typeid=2 WHERE is_file=1'
+ );
+ $updateStmt->query();
+
+ $updateStmt = $db->sql('UPDATE '.$table.
+ ' SET typeid=3 WHERE is_page=1'
+ );
+ $updateStmt->query();
+
+ $updateStmt = $db->sql('UPDATE '.$table.
+ ' SET typeid=4 WHERE is_link=1'
+ );
+ $updateStmt->query();
+
+ $this->dropColumn('object','is_folder');
+ $this->dropColumn('object','is_file');
+ $this->dropColumn('object','is_page');
+ $this->dropColumn('object','is_link');
+ }
+}
+
+?>+
\ No newline at end of file
diff --git a/model/File.class.php b/model/File.class.php
@@ -1,4 +1,4 @@
-<?php
+<?php
namespace cms\model;
// OpenRat Content Management System
// Copyright (C) 2002-2012 Jan Dankert, cms@jandankert.de
@@ -50,8 +50,8 @@ class File extends Object
* Hoehe eines Bildes. Ist nur verfuegbar, wenn vorher
* #getImageSize() aufgerufen wurde.
*/
- var $height = null;
-
+ var $height = null;
+
var $tmpfile;
var $content_negotiation = false;
@@ -159,11 +159,11 @@ class File extends Object
$ext = explode(',',$extension);
$sqlquery .= implode( "' OR extension='",$ext );
- $sqlquery .= "' AND is_file=1 AND projectid={projectid}";
+ $sqlquery .= "' AND typeid=".OR_TYPEID_FILE." AND projectid={projectid}";
}
else
{
- $sqlquery .= " WHERE is_file=1 AND projectid={projectid}";
+ $sqlquery .= " WHERE typeid=".OR_TYPEID_FILE." AND projectid={projectid}";
}
$sql = $db->sql( $sqlquery );
@@ -265,7 +265,7 @@ class File extends Object
$this->write(); // Datei schreiben
// Bildinformationen ermitteln
- $size = getimagesize( $this->tmpfile() );
+ $size = getimagesize( $this->tmpfile() );
// Breite und Hoehe des aktuellen Bildes
$oldWidth = $size[0];
@@ -544,15 +544,15 @@ EOF
}
- /**
+ /**
* Lesen des Inhaltes der Datei aus der Datenbank.
*
- * @return String Inhalt der Datei
+ * @return String Inhalt der Datei
*/
function loadValue()
- {
- if ( is_file($this->tmpfile()))
- return implode('',file($this->tmpfile())); // From cache
+ {
+ if ( is_file($this->tmpfile()))
+ return implode('',file($this->tmpfile())); // From cache
$db = db_connection();
@@ -560,28 +560,28 @@ EOF
' FROM {{file}}'.
' WHERE objectid={objectid}' );
$sql->setInt( 'objectid',$this->objectid );
- $row = $sql->getRow( $sql );
-
- if ( count($row) != 0 )
+ $row = $sql->getRow( $sql );
+
+ if ( count($row) != 0 )
{
- $this->value = $row['value'];
+ $this->value = $row['value'];
$this->size = $row['size' ];
}
if ( $this->storeValueAsBase64 )
$this->value = base64_decode( $this->value );
-
- // Store in cache.
- $f = fopen( $this->tmpfile(),'w' );
- fwrite( $f,$this->value );
- fclose( $f );
+
+ // Store in cache.
+ $f = fopen( $this->tmpfile(),'w' );
+ fwrite( $f,$this->value );
+ fclose( $f );
return $this->value;
}
- /**
- * Speichert den Inhalt in der Datenbank.
+ /**
+ * Speichert den Inhalt in der Datenbank.
*/
function saveValue( $value = '' )
{
@@ -599,20 +599,20 @@ EOF
if ( $this->storeValueAsBase64 )
$sql->setString( 'value',base64_encode($this->value) );
- else
+ else
$sql->setString( 'value',$this->value );
$sql->query( $sql );
}
- /**
- * Lesen der Datei aus der Datenbank und schreiben in temporaere Datei
+ /**
+ * Lesen der Datei aus der Datenbank und schreiben in temporaere Datei
*/
function write()
- {
- if ( !is_file($this->tmpfile()) )
- $this->loadValue();
+ {
+ if ( !is_file($this->tmpfile()) )
+ $this->loadValue();
}
@@ -650,35 +650,35 @@ EOF
$this->publish->copy( $this->tmpfile(),$this->full_filename(),$this->lastchangeDate );
$this->publish->publishedObjects[] = $this->getProperties();
- }
-
-
- /**
- * Ermittelt einen tempor�ren Dateinamen f�r diese Datei.
- */
- function tmpfile()
- {
- if ( $this->tmpfile == '' )
- {
- $db = db_connection();
- $this->tmpfile = $this->getTempFileName( array('db'=>$db->id,'o'.$this->objectid) );
- }
- return $this->tmpfile;
- }
+ }
+
+
+ /**
+ * Ermittelt einen tempor�ren Dateinamen f�r diese Datei.
+ */
+ function tmpfile()
+ {
+ if ( $this->tmpfile == '' )
+ {
+ $db = db_connection();
+ $this->tmpfile = $this->getTempFileName( array('db'=>$db->id,'o'.$this->objectid) );
+ }
+ return $this->tmpfile;
+ }
/**
* Setzt den Zeitstempel der Datei auf die aktuelle Zeit.
*
* @see objectClasses/Object#setTimestamp()
- */
-
- function setTimestamp()
- {
- @unlink( $this->tmpfile() );
-
- parent::setTimestamp();
- }
+ */
+
+ function setTimestamp()
+ {
+ @unlink( $this->tmpfile() );
+
+ parent::setTimestamp();
+ }
diff --git a/model/Folder.class.php b/model/Folder.class.php
@@ -1,4 +1,4 @@
-<?php
+<?php
namespace cms\model;
// OpenRat Content Management System
// Copyright (C) 2002-2012 Jan Dankert, cms@jandankert.de
@@ -72,17 +72,17 @@ class Folder extends Object
$sql = $db->sql('SELECT id FROM {{object}}'.
' WHERE parentid IS NULL'.
- ' AND is_folder=1'.
+ ' AND typeid=1'.
' AND projectid={projectid}' );
// Wenn Methode statisch aufgerufen wird, ist $this nicht vorhanden
- if ( isset($this) && isset($this->projectid) )
- {
+ if ( isset($this) && isset($this->projectid) )
+ {
$sql->setInt('projectid',$this->projectid );
}
else
{
- $project = \Session::getProject();
+ $project = \Session::getProject();
$sql->setInt('projectid',$project->projectid );
}
@@ -214,7 +214,7 @@ class Folder extends Object
$sql = $db->sql('SELECT id FROM {{object}}'.
' WHERE parentid={objectid}'.
- ' ORDER BY is_link,is_page,is_file,is_folder,orderid ASC' );
+ ' ORDER BY typeid,orderid ASC' );
$sql->setInt('projectid',$this->projectid );
$sql->setInt('objectid' ,$this->objectid );
@@ -321,10 +321,10 @@ class Folder extends Object
$sql = $db->sql('SELECT id FROM {{object}}'.
' WHERE projectid={projectid}'.
- ' AND ( is_folder={is_folder}' .
- ' OR is_file ={is_file}' .
- ' OR is_page ={is_page}' .
- ' OR is_link ={is_link} )' .
+ ' AND ( typeid ={is_folder}' .
+ ' OR typeid ={is_file}' .
+ ' OR typeid ={is_page}' .
+ ' OR typeid ={is_link} )' .
' ORDER BY orderid ASC' );
if (isset($this) && isset($this->projectid))
@@ -338,16 +338,16 @@ class Folder extends Object
}
$sql->setInt('projectid',$projectid);
- $sql->setInt('is_folder',in_array('folder',$types)?1:2);
- $sql->setInt('is_file' ,in_array('file' ,$types)?1:2);
- $sql->setInt('is_page' ,in_array('page' ,$types)?1:2);
- $sql->setInt('is_link' ,in_array('link' ,$types)?1:2);
+ $sql->setInt('is_folder',in_array('folder',$types)?OR_TYPEID_FOLDER:0);
+ $sql->setInt('is_file' ,in_array('file' ,$types)?OR_TYPEID_FILE:0);
+ $sql->setInt('is_page' ,in_array('page' ,$types)?OR_TYPEID_PAGE:0);
+ $sql->setInt('is_link' ,in_array('link' ,$types)?OR_TYPEID_LINK:0);
return( $sql->getCol( $sql ) );
}
- function dgetRootObjectId()
+ public function getRootObjectId()
{
global $SESS;
$db = db_connection();
@@ -364,13 +364,13 @@ class Folder extends Object
}
- function getOtherFolders()
+ public function getOtherFolders()
{
global $SESS;
$db = db_connection();
$sql = $db->sql('SELECT id FROM {{object}}'.
- ' WHERE is_folder=1'.
+ ' WHERE typeid='.OR_TYPEID_FOLDER.
' and id != {objectid} '.
' AND projectid={projectid}' );
$sql->setInt( 'projectid',$this->projectid );
@@ -386,7 +386,7 @@ class Folder extends Object
$db = db_connection();
$sql = $db->sql('SELECT id FROM {{object}}'.
- ' WHERE is_folder=1'.
+ ' WHERE typeid='.OR_TYPEID_FOLDER.
' AND projectid={projectid}' );
if ( !isset($this) || !isset($this->projectid) )
@@ -405,18 +405,18 @@ class Folder extends Object
$db = db_connection();
$sql = $db->sql('SELECT id FROM {{object}} '.
- ' WHERE parentid={objectid} AND is_page=1'.
+ ' WHERE parentid={objectid} AND typeid='.OR_TYPEID_PAGE.
' ORDER BY orderid ASC' );
$sql->setInt( 'objectid' ,$this->objectid );
return $sql->getCol( $sql );
}
-
- /**
- * Ermittelt die erste Seite oder Verkn�pfung in diesem Ordner.
- *
- * @return Object Objekt
+
+ /**
+ * Ermittelt die erste Seite oder Verkn�pfung in diesem Ordner.
+ *
+ * @return Object Objekt
*/
public function getFirstPage()
{
@@ -424,7 +424,7 @@ class Folder extends Object
$sql = $db->sql('SELECT id FROM {{object}} '.
' WHERE parentid={objectid}'.
- ' AND (is_page=1)'.
+ ' AND (typeid='.OR_TYPEID_PAGE.')'.
' ORDER BY orderid ASC' );
$sql->setInt( 'objectid' ,$this->objectid );
@@ -450,7 +450,7 @@ class Folder extends Object
$sql = $db->sql('SELECT id FROM {{object}} '.
' WHERE parentid={objectid}'.
- ' AND (is_page=1 OR is_link=1)'.
+ ' AND (typeid='.OR_TYPEID_PAGE.' OR typeid='.OR_TYPEID_LINK.')'.
' ORDER BY orderid ASC' );
$sql->setInt( 'objectid' ,$this->objectid );
@@ -471,7 +471,7 @@ class Folder extends Object
$sql = $db->sql('SELECT id FROM {{object}} '.
' WHERE parentid={objectid}'.
- ' AND (is_page=1 OR is_link=1)'.
+ ' AND (typeid='.OR_TYPEID_PAGE.' OR typeid='.OR_TYPEID_LINK.')'.
' ORDER BY orderid DESC' );
$sql->setInt( 'objectid' ,$this->objectid );
@@ -491,26 +491,26 @@ class Folder extends Object
$db = db_connection();
$sql = $db->sql('SELECT id FROM {{object}} '.
- ' WHERE parentid={objectid} AND is_file=1'.
+ ' WHERE parentid={objectid} AND typeid='.OR_TYPEID_FILE.
' ORDER BY orderid ASC' );
$sql->setInt( 'objectid' ,$this->objectid );
return $sql->getCol( $sql );
}
-
-
- /**
- * Liefert eine Liste von allen Dateien in diesem Ordner.
- *
- * @return Array Schl�ssel=Objekt-Id, Wert=Dateiname
+
+
+ /**
+ * Liefert eine Liste von allen Dateien in diesem Ordner.
+ *
+ * @return Array Schl�ssel=Objekt-Id, Wert=Dateiname
*/
function getFileFilenames()
{
$db = db_connection();
$sql = $db->sql('SELECT id,filename FROM {{object}} '.
- ' WHERE parentid={objectid} AND is_file=1'.
+ ' WHERE parentid={objectid} AND typeid='.OR_TYPEID_FILE.
' ORDER BY orderid ASC' );
$sql->setInt( 'objectid' ,$this->objectid );
@@ -523,7 +523,7 @@ class Folder extends Object
$db = db_connection();
$sql = $db->sql('SELECT id FROM {{object}} '.
- ' WHERE parentid={objectid} AND is_link=1'.
+ ' WHERE parentid={objectid} AND typeid='.OR_TYPEID_LINK.
' ORDER BY orderid ASC' );
$sql->setInt( 'objectid' ,$this->objectid );
@@ -709,7 +709,7 @@ SQL
$db = db_connection();
$sql = $db->sql('SELECT id FROM {{object}} '.
- ' WHERE parentid={objectid} AND is_folder=1'.
+ ' WHERE parentid={objectid} AND typeid='.OR_TYPEID_FOLDER.
' ORDER BY orderid ASC' );
$sql->setInt( 'objectid' ,$this->objectid );
@@ -717,15 +717,15 @@ SQL
return $this->subfolders;
}
-
-
-
+
+
+
function getSubfolderFilenames()
{
$db = db_connection();
$sql = $db->sql('SELECT id,filename FROM {{object}} '.
- ' WHERE parentid={objectid} AND is_folder=1'.
+ ' WHERE parentid={objectid} AND typeid='.OR_TYPEID_FOLDER.
' ORDER BY orderid ASC' );
$sql->setInt( 'objectid' ,$this->objectid );
@@ -853,47 +853,44 @@ SQL
- /**
- * Ermittelt die letzten Änderung in diesem Ordner.
- * @return Array[Objektid]=Array())
- */
- public function getLastChanges()
- {
-
- $db = db_connection();
-
- $sql = $db->sql( <<<SQL
- SELECT {{object}}.id as objectid,
- {{object}}.lastchange_date as lastchange_date,
- {{object}}.filename as filename,
- {{object}}.is_folder as is_folder,
- {{object}}.is_file as is_file,
- {{object}}.is_link as is_link,
- {{object}}.is_page as is_page,
- {{name}}.name as name,
- {{user}}.name as username,
- {{user}}.id as userid,
- {{user}}.mail as usermail,
- {{user}}.fullname as userfullname
- FROM {{object}}
- LEFT JOIN {{name}}
- ON {{name}}.objectid = {{object}}.id
- AND {{name}}.languageid = {languageid}
- LEFT JOIN {{user}}
- ON {{user}}.id = {{object}}.lastchange_userid
- WHERE {{object}}.parentid = {folderid}
- ORDER BY {{object}}.lastchange_date DESC
-SQL
- );
-
- // Variablen setzen.
- $sql->setInt( 'folderid', $this->objectid );
-
- $language = \Session::getProjectLanguage();
- $sql->setInt( 'languageid', $language->languageid );
-
- return $sql->getAll( $sql );
- }
+ /**
+ * Ermittelt die letzten Änderung in diesem Ordner.
+ * @return Array[Objektid]=Array())
+ */
+ public function getLastChanges()
+ {
+
+ $db = db_connection();
+
+ $sql = $db->sql( <<<SQL
+ SELECT {{object}}.id as objectid,
+ {{object}}.lastchange_date as lastchange_date,
+ {{object}}.filename as filename,
+ {{object}}.typeid as typeid,
+ {{name}}.name as name,
+ {{user}}.name as username,
+ {{user}}.id as userid,
+ {{user}}.mail as usermail,
+ {{user}}.fullname as userfullname
+ FROM {{object}}
+ LEFT JOIN {{name}}
+ ON {{name}}.objectid = {{object}}.id
+ AND {{name}}.languageid = {languageid}
+ LEFT JOIN {{user}}
+ ON {{user}}.id = {{object}}.lastchange_userid
+ WHERE {{object}}.parentid = {folderid}
+ ORDER BY {{object}}.lastchange_date DESC
+SQL
+ );
+
+ // Variablen setzen.
+ $sql->setInt( 'folderid', $this->objectid );
+
+ $language = \Session::getProjectLanguage();
+ $sql->setInt( 'languageid', $language->languageid );
+
+ return $sql->getAll( $sql );
+ }
}
diff --git a/model/Object.class.php b/model/Object.class.php
@@ -1,269 +1,265 @@
<?php
-namespace cms\model;
-// OpenRat Content Management System
-// Copyright (C) 2002-2012 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
-// as published by the Free Software Foundation; either version 2
-// of the License, or (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// 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.
-
-/**
- * Superklasse fuer Objekte im Projektbaum.
- *
- * Dieses Objekt ist die Oberklasse fuer die 4 Klassen Ordner, Datei,
- * Link oder Seite dar.
- *
- * @author Jan Dankert
- * @package openrat.objects
- */
-class Object
-{
- /** eindeutige ID dieses Objektes
- * @see #$objectid
- * @type Integer
- */
- var $id;
-
- /** eindeutige ID dieses Objektes
- * @type Integer
- */
- var $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
- */
- var $parentid;
-
- /** Physikalischer Dateiname des Objektes (bei Links nicht gef?llt)
- * <em>enth?lt nicht die Dateinamen-Erweiterung</em>
- * @type String
- */
- var $filename = '';
-
- /** Logischer (sprachabhaengiger) Name des Objektes
- * (wird in Tabelle <code>name</code> abgelegt)
- * @type String
- */
- var $name = '';
-
- /** Logische (sprachabhaengige) Beschreibung des Objektes
- * (wird in Tabelle <code>name</code> abgelegt)
- * @type String
- */
- var $description = 'none';
- 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 Integer
- */
- var $createUser;
-
- /** Benutzer, welcher dieses Objekt zuletzt geaendert hat.
- * @type Integer
- */
- var $lastchangeUser;
-
- /**
- * 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 eine Seite ist
- * @type Boolean
- */
- var $isPage = false;
-
- /**
- * Kennzeichen, ob Objekt eine Verknuepfung (Link) ist
- * @type Boolean
- */
- var $isLink = 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;
-
- /** <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;
-
- if ( is_numeric($objectid) )
- {
- $this->objectid = $objectid;
- $this->id = $objectid;
- }
-
-
- $language = \Session::getProjectLanguage();
- if ( is_object($language) )
- $this->languageid = $language->languageid;
-
- $model = \Session::getProjectModel();
- if ( is_object($model) )
- $this->modelid = $model->modelid;
-
- $project = \Session::getProject();
- if ( is_object($project) )
- $this->projectid = $project->projectid;
- }
-
-
- /**
- * Lesen aller Objekte aus dem aktuellen Projekt
- * @return Array Alle Objekt-IDs des aktuellen Projektes
- */
- function getAllObjectIds()
- {
- global $SESS;
- $db = db_connection();
-
- if ( ! isset($this->projectid) )
- {
- $project = \Session::getProject();
- $projectid = $project->projectid;
- }
- else
- {
- $projectid = $this->projectid;
- }
-
- $sql = $db->sql('SELECT id from {{object}} '.
- ' WHERE projectid={projectid}');
- $sql->setInt('projectid', $projectid);
-
- return $sql->getCol($sql);
- }
-
-
- // Kompletten Dateinamen des Objektes erzeugen
- function full_filename()
- {
- $path = $this->path();
-
- if ($path != '')
- $path.= '/';
-
- $path.= $this->filename();
-
- return $path;
- }
-
- /**
- * Pr?fen einer Berechtigung zu diesem Objekt
- */
- function checkRight( $type )
- {
- return true;
- }
-
-
- /**
- * Pruefen einer Berechtigung zu diesem Objekt
- */
- function hasRight( $type )
- {
- if ( is_null($this->aclMask) )
- {
- $project = \Session::getProject();
- $language = \Session::getProjectLanguage();
- $user = \Session::getUser();
-
- 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;
-
- $sqlGroupClause = $user->getGroupClause();
- $sql = $db->sql( <<<SQL
+
+namespace {
+ define('OR_TYPEID_FOLDER',1);
+ define('OR_TYPEID_FILE',2);
+ define('OR_TYPEID_PAGE',3);
+ define('OR_TYPEID_LINK',4);
+
+}
+
+namespace cms\model {
+
+ /**
+ * Superklasse fuer Objekte im Projektbaum.
+ *
+ * Dieses Objekt ist die Oberklasse fuer die 4 Klassen Ordner, Datei,
+ * Link oder Seite dar.
+ *
+ * @author Jan Dankert
+ * @package openrat.objects
+ */
+ class Object
+ {
+ /** eindeutige ID dieses Objektes
+ * @see #$objectid
+ * @type Integer
+ */
+ var $id;
+
+ /** eindeutige ID dieses Objektes
+ * @type Integer
+ */
+ var $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
+ */
+ var $parentid;
+
+ /** Physikalischer Dateiname des Objektes (bei Links nicht gef?llt)
+ * <em>enth?lt nicht die Dateinamen-Erweiterung</em>
+ * @type String
+ */
+ var $filename = '';
+
+ /** Logischer (sprachabhaengiger) Name des Objektes
+ * (wird in Tabelle <code>name</code> abgelegt)
+ * @type String
+ */
+ var $name = '';
+
+ /** Logische (sprachabhaengige) Beschreibung des Objektes
+ * (wird in Tabelle <code>name</code> abgelegt)
+ * @type String
+ */
+ var $description = 'none';
+ 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;
+
+ /**
+ * 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 eine Seite ist
+ * @type Boolean
+ */
+ var $isPage = false;
+
+ /**
+ * Kennzeichen, ob Objekt eine Verknuepfung (Link) ist
+ * @type Boolean
+ */
+ var $isLink = 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;
+
+ /** <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;
+
+ if ( is_numeric($objectid) )
+ {
+ $this->objectid = $objectid;
+ $this->id = $objectid;
+ }
+
+
+ $language = \Session::getProjectLanguage();
+ if ( is_object($language) )
+ $this->languageid = $language->languageid;
+
+ $model = \Session::getProjectModel();
+ if ( is_object($model) )
+ $this->modelid = $model->modelid;
+
+ $project = \Session::getProject();
+ if ( is_object($project) )
+ $this->projectid = $project->projectid;
+ }
+
+
+ /**
+ * Lesen aller Objekte aus dem aktuellen Projekt
+ * @return array Alle Objekt-IDs des aktuellen Projektes
+ */
+ function getAllObjectIds()
+ {
+ global $SESS;
+ $db = db_connection();
+
+ if ( ! isset($this->projectid) )
+ {
+ $project = \Session::getProject();
+ $projectid = $project->projectid;
+ }
+ else
+ {
+ $projectid = $this->projectid;
+ }
+
+ $sql = $db->sql('SELECT id from {{object}} '.
+ ' WHERE projectid={projectid}');
+ $sql->setInt('projectid', $projectid);
+
+ return $sql->getCol($sql);
+ }
+
+
+ // Kompletten Dateinamen des Objektes erzeugen
+ function full_filename()
+ {
+ $path = $this->path();
+
+ if ($path != '')
+ $path.= '/';
+
+ $path.= $this->filename();
+
+ return $path;
+ }
+
+ /**
+ * Pr?fen einer Berechtigung zu diesem Objekt
+ */
+ function checkRight( $type )
+ {
+ return true;
+ }
+
+
+ /**
+ * Pruefen einer Berechtigung zu diesem Objekt
+ */
+ function hasRight( $type )
+ {
+ if ( is_null($this->aclMask) )
+ {
+ $project = \Session::getProject();
+ $language = \Session::getProjectLanguage();
+ $user = \Session::getUser();
+
+ 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;
+
+ $db = db_connection();
+ $sqlGroupClause = $user->getGroupClause();
+ $sql = $db->sql( <<<SQL
SELECT {{acl}}.* FROM {{acl}}
LEFT JOIN {{object}}
ON {{object}}.id={{acl}}.objectid
@@ -272,404 +268,404 @@ SELECT {{acl}}.* FROM {{acl}}
AND ( {{acl}}.userid={userid} OR $sqlGroupClause
OR ({{acl}}.userid IS NULL AND {{acl}}.groupid IS NULL) )
SQL
-);
-
- $sql->setInt ( 'languageid' ,$language->languageid );
- $sql->setInt ( 'objectid' ,$this->objectid );
- $sql->setInt ( 'userid' ,$user->userid );
-
- $db = db_connection();
- foreach( $sql->getAll( $sql ) as $row )
- {
- $acl = new Acl();
- $acl->setDatabaseRow( $row );
-
- $this->aclMask |= $acl->getMask();
- }
- }
- }
-
- if ( readonly() )
- // System ist im Nur-Lese-Zustand
- return $type == ACL_READ && $this->aclMask & $type;
- else
- // Ermittelte Maske auswerten
- return $this->aclMask & $type;
- }
-
-
- /**
- * 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->isPage)
- return OR_TYPE_PAGE;
- if ($this->isLink)
- return OR_TYPE_LINK;
-
- return 'unknown';
- }
-
-
- 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(),
- 'isFolder' =>$this->isFolder,
- 'isFile' =>$this->isFile,
- 'isLink' =>$this->isLink,
- 'isPage' =>$this->isPage,
- 'isRoot' =>$this->isRoot,
- 'languageid' =>$this->languageid,
- 'modelid' =>$this->modelid,
- 'projectid' =>$this->projectid,
- 'type' =>$this->getType() );
- }
-
-
- /**
- * 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);
-
- return implode('/', $folder->parentObjectFileNames(false, true));
- }
-
-
-
- /**
- * Ueberpruft einen Dateinamen auf Gueltigkeit.
- */
- function goodFilename( $filename )
- {
- // Dateiname muss gueltig sein,
- // ungueltige Zeichen werden entfernt
- $gueltig = 'abcdefghijklmnopqrstuvwxyz0123456789.-_';
- $tmp = strtr($filename, $gueltig, str_repeat('#', strlen($gueltig)));
- return( strtr($this->filename, $tmp, str_repeat('-', strlen($tmp))) );
- }
-
-
-
- /**
- * Ermitteln des Dateinamens und Rueckgabe desselben
- * @return String Dateiname
- */
- function filename()
- {
-
- global $conf;
-
- if ( $conf['filename']['edit'] && $this->filename != '' && $this->filename != $this->objectid )
- {
- $this->filename = $this->goodFilename(trim(strtolower($this->name)));
- return $this->filename;
- }
-
- 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
- {
- 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 'id':
- // Einfach die Objekt-Id als Dateinamen verwenden.
- $this->filename = $this->objectid;
- 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.
- $this->filename = $this->goodFilename(trim(strtolower($this->name)));
- break;
-
- default:
- // Als Fallback die Objekt-Id als Dateinamen verwenden.
- $this->filename = $this->objectid;
- }
- }
-
- return $this->filename;
- }
-
-
-
- /**
- * Stellt fest, ob das Objekt mit der angegebenen Id existiert.
- */
- function available( $objectid )
- {
- $db = db_connection();
-
- // 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 );
-
- return intval($sql->getOne($sql)) == 1;
- }
-
-
- /**
- * 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
- */
- function objectLoad()
- {
- global $SESS;
- $db = db_connection();
-
- $sql = $db->sql('SELECT {{object}}.*,' .
- ' {{name}}.name,{{name}}.descr,'.
- ' lastchangeuser.name as lastchange_username, '.
- ' lastchangeuser.fullname as lastchange_userfullname, '.
- ' lastchangeuser.mail as lastchange_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 createuser '.
- ' ON {{object}}.create_userid=createuser.id '.
- ' WHERE {{object}}.id={objectid}');
- $sql->setInt('languageid', $this->languageid);
- $sql->setInt('objectid' , $this->objectid );
-
- $row = $sql->getRow($sql);
-
- if (count($row) == 0)
- throw new \ObjectNotFoundException('object '.$this->objectid.' not found');
-
- $this->setDatabaseRow( $row );
- }
-
-
- /**
- * 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();
-
- $sql = $db->sql('SELECT * FROM {{object}}'.
- ' WHERE {{object}}.id={objectid}');
- $sql->setInt('objectid' , $this->objectid );
- $row = $sql->getRow($sql);
-
- if (count($row) == 0)
- die('fatal: Object::objectLoadRaw(): objectid not found: '.$this->objectid.', SQL='.$sql->raw);
-
- $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';
-
- $this->create_date = $row['create_date'];
- $this->create_userid = $row['create_userid'];
- $this->lastchange_date = $row['lastchange_date'];
- $this->lastchange_userid = $row['lastchange_userid'];
-
-
- $this->isFolder = ( $row['is_folder'] == '1' );
- $this->isFile = ( $row['is_file' ] == '1' );
- $this->isPage = ( $row['is_page' ] == '1' );
- $this->isLink = ( $row['is_link' ] == '1' );
- }
-
-
- /**
- * Setzt die Eigenschaften des Objektes mit einer Datenbank-Ergebniszeile
- *
- * @param row Ergebniszeile aus Datenbanktabelle
- */
- function setDatabaseRow( $row )
- {
- if ( count($row)==0 )
- die('setDatabaseRow() got empty array, oid='.$this->objectid);
-
- $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;
-
- $this->createDate = $row['create_date' ];
- $this->lastchangeDate = $row['lastchange_date'];
-
- $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->lastchangeUser = new User();
- $this->lastchangeUser->userid = $row['lastchange_userid' ];
-
- if ( !empty($row['lastchange_username']) )
- {
- $this->lastchangeUser->name = $row['lastchange_username' ];
- $this->lastchangeUser->fullname = $row['lastchange_userfullname'];
- $this->lastchangeUser->mail = $row['lastchange_usermail' ];
- }
-
- $this->isFolder = ( $row['is_folder'] == '1' );
- $this->isFile = ( $row['is_file' ] == '1' );
- $this->isPage = ( $row['is_page' ] == '1' );
- $this->isLink = ( $row['is_link' ] == '1' );
-
- if ( $this->isRoot )
- {
- $project = \Session::getProject();
- $this->name = $project->name;
- $this->desc = '';
- $this->description = '';
- }
- else
- {
- $this->name = $row['name' ];
- $this->desc = $row['descr'];
- $this->description = $row['descr'];
- }
-
- $this->checkName();
- }
-
-
-
- /**
- * Laden des Objektes
- * @deprecated bitte objectLoad() benutzen
- */
- function load()
- {
- $this->objectLoad();
- }
-
- /**
- * Lesen von logischem Namen und Beschreibung
- * Diese Eigenschaften sind sprachabhaengig und stehen deswegen in einer
- * separaten Tabelle
- * @access private
- */
- function objectLoadName()
- {
- die();
- global $SESS;
- $db = db_connection();
-
- $sql = $db->sql('SELECT *'.' FROM {{name}}'.' WHERE objectid={objectid}'.' AND languageid={languageid}');
- $sql->setInt('objectid' , $this->objectid );
- $sql->setInt('languageid', $this->languageid);
- $res = $sql->query($sql);
-
- if ($res->numRows() == 0)
- {
- // Wenn Name in dieser Sprache nicht vorhanden, dann irgendeinen Namen lesen
- $sql = $db->sql('SELECT *'.' FROM {{name}}'.' WHERE objectid={objectid}'.' AND name != {blank}');
- $sql->setInt ('objectid' , $this->objectid );
- $sql->setInt ('languageid', $this->languageid);
- $sql->setString('blank' , '' );
-
- $res = $sql->execute();
- }
- $row = $res->fetchRow();
-
- $this->name = $row['name'];
- $this->desc = $row['description'];
-
- // Falls leer, id<objectnr> als Dateinamen verwenden
- if ($this->name == '')
- $this->name = $this->filename;
- }
-
- /**
- * Eigenschaften des Objektes in Datenbank speichern
- */
- function objectSave( $withName = true )
- {
- global $SESS;
- $db = db_connection();
-
- $this->checkFilename();
-
- $sql = $db->sql( <<<SQL
+ );
+
+ $sql->setInt ( 'languageid' ,$language->languageid );
+ $sql->setInt ( 'objectid' ,$this->objectid );
+ $sql->setInt ( 'userid' ,$user->userid );
+
+ foreach( $sql->getAll( $sql ) as $row )
+ {
+ $acl = new Acl();
+ $acl->setDatabaseRow( $row );
+
+ $this->aclMask |= $acl->getMask();
+ }
+ }
+ }
+
+ if ( readonly() )
+ // System ist im Nur-Lese-Zustand
+ return $type == ACL_READ && $this->aclMask & $type;
+ else
+ // Ermittelte Maske auswerten
+ return $this->aclMask & $type;
+ }
+
+
+ /**
+ * 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->isPage)
+ return OR_TYPE_PAGE;
+ if ($this->isLink)
+ return OR_TYPE_LINK;
+
+ return 'unknown';
+ }
+
+
+ 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(),
+ 'isFolder' =>$this->isFolder,
+ 'isFile' =>$this->isFile,
+ 'isLink' =>$this->isLink,
+ 'isPage' =>$this->isPage,
+ 'isRoot' =>$this->isRoot,
+ 'languageid' =>$this->languageid,
+ 'modelid' =>$this->modelid,
+ 'projectid' =>$this->projectid,
+ 'type' =>$this->getType() );
+ }
+
+
+ /**
+ * 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);
+
+ return implode('/', $folder->parentObjectFileNames(false, true));
+ }
+
+
+
+ /**
+ * Ueberpruft einen Dateinamen auf Gueltigkeit.
+ */
+ function goodFilename( $filename )
+ {
+ // Dateiname muss gueltig sein,
+ // ungueltige Zeichen werden entfernt
+ $gueltig = 'abcdefghijklmnopqrstuvwxyz0123456789.-_';
+ $tmp = strtr($filename, $gueltig, str_repeat('#', strlen($gueltig)));
+ return( strtr($this->filename, $tmp, str_repeat('-', strlen($tmp))) );
+ }
+
+
+
+ /**
+ * Ermitteln des Dateinamens und Rueckgabe desselben
+ * @return String Dateiname
+ */
+ function filename()
+ {
+
+ global $conf;
+
+ if ( $conf['filename']['edit'] && $this->filename != '' && $this->filename != $this->objectid )
+ {
+ $this->filename = $this->goodFilename(trim(strtolower($this->name)));
+ return $this->filename;
+ }
+
+ 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
+ {
+ 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 'id':
+ // Einfach die Objekt-Id als Dateinamen verwenden.
+ $this->filename = $this->objectid;
+ 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.
+ $this->filename = $this->goodFilename(trim(strtolower($this->name)));
+ break;
+
+ default:
+ // Als Fallback die Objekt-Id als Dateinamen verwenden.
+ $this->filename = $this->objectid;
+ }
+ }
+
+ return $this->filename;
+ }
+
+
+
+ /**
+ * Stellt fest, ob das Objekt mit der angegebenen Id existiert.
+ */
+ function available( $objectid )
+ {
+ $db = db_connection();
+
+ // 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 );
+
+ return intval($sql->getOne($sql)) == 1;
+ }
+
+
+ /**
+ * 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()
+ {
+ global $SESS;
+ $db = db_connection();
+
+ $sql = $db->sql('SELECT {{object}}.*,' .
+ ' {{name}}.name,{{name}}.descr,'.
+ ' lastchangeuser.name as lastchange_username, '.
+ ' lastchangeuser.fullname as lastchange_userfullname, '.
+ ' lastchangeuser.mail as lastchange_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 createuser '.
+ ' ON {{object}}.create_userid=createuser.id '.
+ ' WHERE {{object}}.id={objectid}');
+ $sql->setInt('languageid', $this->languageid);
+ $sql->setInt('objectid' , $this->objectid );
+
+ $row = $sql->getRow($sql);
+
+ if (count($row) == 0)
+ throw new \ObjectNotFoundException('object '.$this->objectid.' not found');
+
+ $this->setDatabaseRow( $row );
+ }
+
+
+ /**
+ * 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();
+
+ $sql = $db->sql('SELECT * FROM {{object}}'.
+ ' WHERE {{object}}.id={objectid}');
+ $sql->setInt('objectid' , $this->objectid );
+ $row = $sql->getRow($sql);
+
+ if (count($row) == 0)
+ die('fatal: Object::objectLoadRaw(): objectid not found: '.$this->objectid.', SQL='.$sql->raw);
+
+ $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';
+
+ $this->create_date = $row['create_date'];
+ $this->create_userid = $row['create_userid'];
+ $this->lastchange_date = $row['lastchange_date'];
+ $this->lastchange_userid = $row['lastchange_userid'];
+
+ $this->isFolder = ( $row['typeid'] == OR_TYPEID_FOLDER );
+ $this->isFile = ( $row['typeid'] == OR_TYPEID_FILE );
+ $this->isPage = ( $row['typeid'] == OR_TYPEID_PAGE );
+ $this->isLink = ( $row['typeid'] == OR_TYPEID_LINK );
+
+ }
+
+
+ /**
+ * Setzt die Eigenschaften des Objektes mit einer Datenbank-Ergebniszeile
+ *
+ * @param row Ergebniszeile aus Datenbanktabelle
+ */
+ function setDatabaseRow( $row )
+ {
+ if ( count($row)==0 )
+ die('setDatabaseRow() got empty array, oid='.$this->objectid);
+
+ $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;
+
+ $this->createDate = $row['create_date' ];
+ $this->lastchangeDate = $row['lastchange_date'];
+
+ $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->lastchangeUser = new User();
+ $this->lastchangeUser->userid = $row['lastchange_userid' ];
+
+ if ( !empty($row['lastchange_username']) )
+ {
+ $this->lastchangeUser->name = $row['lastchange_username' ];
+ $this->lastchangeUser->fullname = $row['lastchange_userfullname'];
+ $this->lastchangeUser->mail = $row['lastchange_usermail' ];
+ }
+
+ $this->isFolder = ( $row['typeid'] == OR_TYPEID_FOLDER );
+ $this->isFile = ( $row['typeid'] == OR_TYPEID_FILE );
+ $this->isPage = ( $row['typeid'] == OR_TYPEID_PAGE );
+ $this->isLink = ( $row['typeid'] == OR_TYPEID_LINK );
+
+ if ( $this->isRoot )
+ {
+ $project = \Session::getProject();
+ $this->name = $project->name;
+ $this->desc = '';
+ $this->description = '';
+ }
+ else
+ {
+ $this->name = $row['name' ];
+ $this->desc = $row['descr'];
+ $this->description = $row['descr'];
+ }
+
+ $this->checkName();
+ }
+
+
+
+ /**
+ * Laden des Objektes
+ * @deprecated bitte objectLoad() benutzen
+ */
+ function load()
+ {
+ $this->objectLoad();
+ }
+
+ /**
+ * Lesen von logischem Namen und Beschreibung
+ * Diese Eigenschaften sind sprachabhaengig und stehen deswegen in einer
+ * separaten Tabelle
+ * @access private
+ */
+ function objectLoadName()
+ {
+ die();
+ global $SESS;
+ $db = db_connection();
+
+ $sql = $db->sql('SELECT *'.' FROM {{name}}'.' WHERE objectid={objectid}'.' AND languageid={languageid}');
+ $sql->setInt('objectid' , $this->objectid );
+ $sql->setInt('languageid', $this->languageid);
+ $res = $sql->query($sql);
+
+ if ($res->numRows() == 0)
+ {
+ // Wenn Name in dieser Sprache nicht vorhanden, dann irgendeinen Namen lesen
+ $sql = $db->sql('SELECT *'.' FROM {{name}}'.' WHERE objectid={objectid}'.' AND name != {blank}');
+ $sql->setInt ('objectid' , $this->objectid );
+ $sql->setInt ('languageid', $this->languageid);
+ $sql->setString('blank' , '' );
+
+ $res = $sql->execute();
+ }
+ $row = $res->fetchRow();
+
+ $this->name = $row['name'];
+ $this->desc = $row['description'];
+
+ // Falls leer, id<objectnr> als Dateinamen verwenden
+ if ($this->name == '')
+ $this->name = $this->filename;
+ }
+
+ /**
+ * Eigenschaften des Objektes in Datenbank speichern
+ */
+ function objectSave( $withName = true )
+ {
+ global $SESS;
+ $db = db_connection();
+
+ $this->checkFilename();
+
+ $sql = $db->sql( <<<SQL
UPDATE {{object}} SET
parentid = {parentid},
lastchange_date = {time} ,
@@ -677,460 +673,457 @@ UPDATE {{object}} SET
filename = {filename}
WHERE id={objectid}
SQL
-);
-
-
- if ( $this->isRoot )
- $sql->setNull('parentid');
- else $sql->setInt ('parentid',$this->parentid );
-
-
- $user = \Session::getUser();
- $this->lastchangeUser = $user;
- $this->lastchangeDate = now();
- $sql->setInt ('time' ,$this->lastchangeDate );
- $sql->setInt ('userid' ,$this->lastchangeUser->userid );
- $sql->setString('filename', $this->filename);
- $sql->setInt ('objectid', $this->objectid);
-
-
- $sql->query($sql);
-
- // Nur wenn nicht Wurzelordner
- if ( !$this->isRoot && $withName )
- {
- if ( $this->name == '' )
- $this->name = $this->filename;
-
- $this->objectSaveName();
- }
- }
-
-
-
- /**
- * Aenderungsdatum auf Systemzeit setzen
- */
- function setTimestamp()
- {
- $db = db_connection();
-
- $sql = $db->sql('UPDATE {{object}} SET '.
- ' lastchange_date = {time} ,'.
- ' lastchange_userid = {userid} '.
- ' WHERE id={objectid}');
-
- $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 );
-
- $sql->query( $sql );
-
- }
-
-
- public function setCreationTimestamp()
- {
- $db = db_connection();
-
- $sql = $db->sql('UPDATE {{object}} SET '.
- ' create_date = {time} '.
- ' WHERE id={objectid}');
-
- $sql->setInt ('objectid',$this->objectid );
- $sql->setInt ('time' ,$this->createDate );
-
- $sql->query( $sql );
- }
-
-
- /**
- * Logischen Namen und Beschreibung des Objektes in Datenbank speichern
- * (wird von objectSave() automatisch aufgerufen)
- *
- * @access private
- */
- function ObjectSaveName()
- {
- global $SESS;
- $db = db_connection();
-
- $sql = $db->sql(<<<SQL
+ );
+
+
+ if ( $this->isRoot )
+ $sql->setNull('parentid');
+ else $sql->setInt ('parentid',$this->parentid );
+
+
+ $user = \Session::getUser();
+ $this->lastchangeUser = $user;
+ $this->lastchangeDate = now();
+ $sql->setInt ('time' ,$this->lastchangeDate );
+ $sql->setInt ('userid' ,$this->lastchangeUser->userid );
+ $sql->setString('filename', $this->filename);
+ $sql->setInt ('objectid', $this->objectid);
+
+
+ $sql->query($sql);
+
+ // Nur wenn nicht Wurzelordner
+ if ( !$this->isRoot && $withName )
+ {
+ if ( $this->name == '' )
+ $this->name = $this->filename;
+
+ $this->objectSaveName();
+ }
+ }
+
+
+
+ /**
+ * Aenderungsdatum auf Systemzeit setzen
+ */
+ function setTimestamp()
+ {
+ $db = db_connection();
+
+ $sql = $db->sql('UPDATE {{object}} SET '.
+ ' lastchange_date = {time} ,'.
+ ' lastchange_userid = {userid} '.
+ ' WHERE id={objectid}');
+
+ $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 );
+
+ $sql->query( $sql );
+
+ }
+
+
+ public function setCreationTimestamp()
+ {
+ $db = db_connection();
+
+ $sql = $db->sql('UPDATE {{object}} SET '.
+ ' create_date = {time} '.
+ ' WHERE id={objectid}');
+
+ $sql->setInt ('objectid',$this->objectid );
+ $sql->setInt ('time' ,$this->createDate );
+
+ $sql->query( $sql );
+ }
+
+
+ /**
+ * Logischen Namen und Beschreibung des Objektes in Datenbank speichern
+ * (wird von objectSave() automatisch aufgerufen)
+ *
+ * @access private
+ */
+ function ObjectSaveName()
+ {
+ global $SESS;
+ $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);
-
- if ($count > 0)
- {
- $sql = $db->sql( <<<SQL
+ );
+ $sql->setInt( 'objectid' , $this->objectid );
+ $sql->setInt( 'languageid', $this->languageid );
+ $count = $sql->getOne($sql);
+
+ 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($sql);
- }
- else
- {
- $sql = $db->sql('SELECT MAX(id) FROM {{name}}');
- $nameid = intval($sql->getOne($sql))+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);
- }
- }
-
- /**
- * Objekt loeschen. Es muss sichergestellt sein, dass auch das Unterobjekt geloeschet wird.
- * Diese Methode wird daher normalerweise nur vom Unterobjekt augerufen
- * @access protected
- */
- 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 );
-
- $sql = $db->sql( 'UPDATE {{value}} '.
- ' SET linkobjectid=NULL '.
- ' WHERE linkobjectid={objectid}' );
- $sql->setInt('objectid',$this->objectid);
- $sql->query( $sql );
-
- $sql = $db->sql( 'UPDATE {{link}} '.
- ' SET link_objectid=NULL '.
- ' WHERE link_objectid={objectid}' );
- $sql->setInt('objectid',$this->objectid);
- $sql->query( $sql );
-
-
- // Objekt-Namen l?schen
- $sql = $db->sql('DELETE FROM {{name}} WHERE objectid={objectid}');
- $sql->setInt('objectid', $this->objectid);
- $sql->query($sql);
-
- // ACLs loeschen
- $this->deleteAllACLs();
-
- // Objekt l?schen
- $sql = $db->sql('DELETE FROM {{object}} WHERE id={objectid}');
- $sql->setInt('objectid', $this->objectid);
- $sql->query($sql);
- }
-
-
- /**
- * Objekt hinzufuegen
- */
- function objectAdd()
- {
- global $SESS;
- $db = db_connection();
-
- // Neue Objekt-Id bestimmen
- $sql = $db->sql('SELECT MAX(id) FROM {{object}}');
- $this->objectid = intval($sql->getOne($sql))+1;
-
- $this->checkFilename();
- $sql = $db->sql('INSERT INTO {{object}}'.
- ' (id,parentid,projectid,filename,orderid,create_date,create_userid,lastchange_date,lastchange_userid,is_folder,is_file,is_page,is_link)'.
- ' VALUES( {objectid},{parentid},{projectid},{filename},{orderid},{time},{createuserid},{createtime},{userid},{is_folder},{is_file},{is_page},{is_link} )');
-
- 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->setBoolean('is_folder',$this->isFolder);
- $sql->setBoolean('is_file', $this->isFile);
- $sql->setBoolean('is_page', $this->isPage);
- $sql->setBoolean('is_link', $this->isLink);
-
- $sql->query($sql);
-
- if ( !empty($this->name) )
- $this->objectSaveName();
-
- // Standard-Rechte fuer dieses neue Objekt setzen.
- // Der angemeldete Benutzer erhaelt Lese- und Schreibrechte auf
- // das neue Objekt.
- $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;
- if ( $this->isFolder )
- {
- $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.
- $folder = new Folder( $this->parentid );
- foreach( $folder->getAclIds() as $aclid )
- {
- $acl = new Acl( $aclid );
- $acl->load();
-
- if ( $acl->transmit ) // ACL is vererbbar, also kopieren.
- {
- $acl->objectid = $this->objectid;
- $acl->add(); // ... und hinzufuegen.
- }
- }
- }
-
-
- /**
- * Pruefung auf Gueltigkeit des Dateinamens
- */
- function checkFilename()
- {
- if ( empty($this->filename) )
- $this->filename = $this->objectid;
+ );
+ $sql->setString('name', $this->name);
+ $sql->setString('desc', $this->desc);
+ $sql->setInt( 'objectid' , $this->objectid );
+ $sql->setInt( 'languageid', $this->languageid );
+ $sql->query($sql);
+ }
+ else
+ {
+ $sql = $db->sql('SELECT MAX(id) FROM {{name}}');
+ $nameid = intval($sql->getOne($sql))+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);
+ }
+ }
+
+ /**
+ * Objekt loeschen. Es muss sichergestellt sein, dass auch das Unterobjekt geloeschet wird.
+ * Diese Methode wird daher normalerweise nur vom Unterobjekt augerufen
+ * @access protected
+ */
+ 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 );
+
+ $sql = $db->sql( 'UPDATE {{value}} '.
+ ' SET linkobjectid=NULL '.
+ ' WHERE linkobjectid={objectid}' );
+ $sql->setInt('objectid',$this->objectid);
+ $sql->query( $sql );
+
+ $sql = $db->sql( 'UPDATE {{link}} '.
+ ' SET link_objectid=NULL '.
+ ' WHERE link_objectid={objectid}' );
+ $sql->setInt('objectid',$this->objectid);
+ $sql->query( $sql );
+
+
+ // Objekt-Namen l?schen
+ $sql = $db->sql('DELETE FROM {{name}} WHERE objectid={objectid}');
+ $sql->setInt('objectid', $this->objectid);
+ $sql->query($sql);
+
+ // ACLs loeschen
+ $this->deleteAllACLs();
+
+ // Objekt l?schen
+ $sql = $db->sql('DELETE FROM {{object}} WHERE id={objectid}');
+ $sql->setInt('objectid', $this->objectid);
+ $sql->query($sql);
+ }
+
+
+ /**
+ * Objekt hinzufuegen
+ */
+ function objectAdd()
+ {
+ global $SESS;
+ $db = db_connection();
+
+ // Neue Objekt-Id bestimmen
+ $sql = $db->sql('SELECT MAX(id) FROM {{object}}');
+ $this->objectid = intval($sql->getOne($sql))+1;
+
+ $this->checkFilename();
+ $sql = $db->sql('INSERT INTO {{object}}'.
+ ' (id,parentid,projectid,filename,orderid,create_date,create_userid,lastchange_date,lastchange_userid,typeid)'.
+ ' 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($sql);
+
+ if ( !empty($this->name) )
+ $this->objectSaveName();
+
+ // Standard-Rechte fuer dieses neue Objekt setzen.
+ // Der angemeldete Benutzer erhaelt Lese- und Schreibrechte auf
+ // das neue Objekt.
+ $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;
+ if ( $this->isFolder )
+ {
+ $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.
+ $folder = new Folder( $this->parentid );
+ foreach( $folder->getAclIds() as $aclid )
+ {
+ $acl = new Acl( $aclid );
+ $acl->load();
+
+ if ( $acl->transmit ) // ACL is vererbbar, also kopieren.
+ {
+ $acl->objectid = $this->objectid;
+ $acl->add(); // ... und hinzufuegen.
+ }
+ }
+ }
+
+
+ /**
+ * Pruefung auf Gueltigkeit des Dateinamens
+ */
+ function checkFilename()
+ {
+ if ( empty($this->filename) )
+ $this->filename = $this->objectid;
// $this->filename = trim(strtolower($this->filename));
// $this->filename = $this->goodFilename( $this->filename);
- if ( $this->isRoot )
- return;
+ if ( $this->isRoot )
+ return;
- if ( !$this->filenameIsUnique( $this->filename ) )
- {
+ if ( !$this->filenameIsUnique( $this->filename ) )
+ {
// $this->filename = $this->objectid;
//
// if ( !$this->filenameIsUnique( $this->filename ) )
- $this->filename = $this->filename.'.'.md5(microtime());
- }
- }
+ $this->filename = $this->filename.'.'.md5(microtime());
+ }
+ }
- function filenameIsUnique( $filename )
- {
- $db = db_connection();
+ function filenameIsUnique( $filename )
+ {
+ $db = db_connection();
- $sql = $db->sql( <<<SQL
+ $sql = $db->sql( <<<SQL
SELECT COUNT(*) FROM {{object}}
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);
-
-
- return( intval($sql->getOne($sql)) == 0 );
- }
-
-
- /**
- * Pruefung auf Gueltigkeit des logischen Namens
- */
- function checkName()
- {
- if ( empty($this->name) )
- $this->name = $this->filename;
-
- if ( empty($this->name) )
- $this->name = $this->objectid;
- }
-
-
- function getAclIds()
- {
- $db = db_connection();
-
- $sql = $db->sql( 'SELECT id FROM {{acl}} '.
- ' WHERE objectid={objectid}'.
- ' AND ( languageid IS NULL OR '.
- ' languageid = {languageid} )'.
- ' ORDER BY userid,groupid ASC' );
- $sql->setInt('languageid',$this->languageid);
- $sql->setInt('objectid' ,$this->objectid);
-
- return $sql->getCol( $sql );
- }
-
-
- 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);
-
- return $sql->getCol( $sql );
- }
-
-
- function getInheritedAclIds()
- {
- $acls = array();
-
- if ( $this->getType() == 'unknown' )
- $this->load();
-
- // Root-Ordner erhaelt keine Vererbungen
- if ( $this->isRoot )
- return $acls;
-
- $db = db_connection();
- $folder = new Folder( $this->parentid );
-
- foreach( $folder->parentObjectFileNames(true,true) as $oid=>$filename )
- {
- $sql = $db->sql( 'SELECT id FROM {{acl}} '.
- ' WHERE objectid={objectid}'.
- ' AND is_transmit = 1'.
- ' AND ( languageid IS NULL OR '.
- ' languageid = {languageid} )'.
- ' ORDER BY userid,groupid ASC' );
- $sql->setInt('objectid' ,$oid);
- $sql->setInt('languageid',$this->languageid);
- $acls = array_merge( $acls,$sql->getCol( $sql ) );
- }
-
- return $acls;
- }
-
-
- function getAllInheritedAclIds()
- {
- $acls = array();
-
- if ( $this->getType() == 'unknown' )
- $this->load();
-
- // Root-Ordner erhaelt keine Vererbungen
- if ( $this->isRoot )
- return $acls;
-
- $db = db_connection();
- $folder = new Folder( $this->parentid );
-
- foreach( $folder->parentObjectFileNames(true,true) as $oid=>$filename )
- {
- $sql = $db->sql( 'SELECT id FROM {{acl}} '.
- ' WHERE objectid={objectid}'.
- ' AND is_transmit = 1'.
- ' ORDER BY userid,groupid ASC' );
- $sql->setInt('objectid' ,$oid);
- $acls = array_merge( $acls,$sql->getCol( $sql ) );
- }
-
- return $acls;
- }
-
-
- /**
- * Ermitteln aller Berechtigungsstufen, die fuer diesen Objekttyp wichtig sind
- */
- function getRelatedAclTypes()
- {
- if ( $this->isFolder )
- return( array('read','write','delete','prop','release','publish','create_folder','create_file','create_page','create_link','grant','transmit') );
- if ( $this->isFile )
- return( array('read','write','delete','prop','release','publish','grant') );
- if ( $this->isPage )
- return( array('read','write','delete','prop','release','publish','grant') );
- if ( $this->isLink )
- return( array('read','write','delete','prop','grant') );
- }
-
-
- /**
- * Ermitteln aller Berechtigungsstufen, die fuer diesen Objekttyp wichtig sind
- */
- function getAssocRelatedAclTypes()
- {
- $rights = array('read','write','delete','prop','release','publish','create_folder','create_file','create_page','create_link','grant','transmit');
- $types = array();
- foreach( $rights as $r )
- $types[$r] = false;
-
- foreach( $this->getRelatedAclTypes() as $t )
- $types[$t] = true;
-
- return $types;
- }
-
- /**
- * Entfernen aller ACLs zu diesem Objekt
- * @access private
- */
- function deleteAllACLs()
- {
- foreach( $this->getAllAclIds() as $aclid )
- {
- $acl = new Acl( $aclid );
- $acl->load();
- $acl->delete();
- }
- }
-
-
-
- /**
- * Liefert einen temporären Dateinamen.
- * @param $attr Attribute fuer den Dateinamen, um diesen eindeutig zu gestalten.
- * @return unknown_type
- */
- public function getTempFileName( $attr = array() )
- {
- global $conf;
-
+ );
+
+ $sql->setString('parentid', $this->parentid);
+ $sql->setString('filename', $filename );
+ $sql->setString('objectid', $this->objectid);
+
+
+ return( intval($sql->getOne($sql)) == 0 );
+ }
+
+
+ /**
+ * Pruefung auf Gueltigkeit des logischen Namens
+ */
+ function checkName()
+ {
+ if ( empty($this->name) )
+ $this->name = $this->filename;
+
+ if ( empty($this->name) )
+ $this->name = $this->objectid;
+ }
+
+
+ function getAclIds()
+ {
+ $db = db_connection();
+
+ $sql = $db->sql( 'SELECT id FROM {{acl}} '.
+ ' WHERE objectid={objectid}'.
+ ' AND ( languageid IS NULL OR '.
+ ' languageid = {languageid} )'.
+ ' ORDER BY userid,groupid ASC' );
+ $sql->setInt('languageid',$this->languageid);
+ $sql->setInt('objectid' ,$this->objectid);
+
+ return $sql->getCol( $sql );
+ }
+
+
+ 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);
+
+ return $sql->getCol( $sql );
+ }
+
+
+ function getInheritedAclIds()
+ {
+ $acls = array();
+
+ if ( $this->getType() == 'unknown' )
+ $this->load();
+
+ // Root-Ordner erhaelt keine Vererbungen
+ if ( $this->isRoot )
+ return $acls;
+
+ $db = db_connection();
+ $folder = new Folder( $this->parentid );
+
+ foreach( $folder->parentObjectFileNames(true,true) as $oid=>$filename )
+ {
+ $sql = $db->sql( 'SELECT id FROM {{acl}} '.
+ ' WHERE objectid={objectid}'.
+ ' AND is_transmit = 1'.
+ ' AND ( languageid IS NULL OR '.
+ ' languageid = {languageid} )'.
+ ' ORDER BY userid,groupid ASC' );
+ $sql->setInt('objectid' ,$oid);
+ $sql->setInt('languageid',$this->languageid);
+ $acls = array_merge( $acls,$sql->getCol( $sql ) );
+ }
+
+ return $acls;
+ }
+
+
+ function getAllInheritedAclIds()
+ {
+ $acls = array();
+
+ if ( $this->getType() == 'unknown' )
+ $this->load();
+
+ // Root-Ordner erhaelt keine Vererbungen
+ if ( $this->isRoot )
+ return $acls;
+
+ $db = db_connection();
+ $folder = new Folder( $this->parentid );
+
+ foreach( $folder->parentObjectFileNames(true,true) as $oid=>$filename )
+ {
+ $sql = $db->sql( 'SELECT id FROM {{acl}} '.
+ ' WHERE objectid={objectid}'.
+ ' AND is_transmit = 1'.
+ ' ORDER BY userid,groupid ASC' );
+ $sql->setInt('objectid' ,$oid);
+ $acls = array_merge( $acls,$sql->getCol( $sql ) );
+ }
+
+ return $acls;
+ }
+
+
+ /**
+ * Ermitteln aller Berechtigungsstufen, die fuer diesen Objekttyp wichtig sind
+ */
+ function getRelatedAclTypes()
+ {
+ if ( $this->isFolder )
+ return( array('read','write','delete','prop','release','publish','create_folder','create_file','create_page','create_link','grant','transmit') );
+ if ( $this->isFile )
+ return( array('read','write','delete','prop','release','publish','grant') );
+ if ( $this->isPage )
+ return( array('read','write','delete','prop','release','publish','grant') );
+ if ( $this->isLink )
+ return( array('read','write','delete','prop','grant') );
+ }
+
+
+ /**
+ * Ermitteln aller Berechtigungsstufen, die fuer diesen Objekttyp wichtig sind
+ */
+ function getAssocRelatedAclTypes()
+ {
+ $rights = array('read','write','delete','prop','release','publish','create_folder','create_file','create_page','create_link','grant','transmit');
+ $types = array();
+ foreach( $rights as $r )
+ $types[$r] = false;
+
+ foreach( $this->getRelatedAclTypes() as $t )
+ $types[$t] = true;
+
+ return $types;
+ }
+
+ /**
+ * Entfernen aller ACLs zu diesem Objekt
+ * @access private
+ */
+ function deleteAllACLs()
+ {
+ foreach( $this->getAllAclIds() as $aclid )
+ {
+ $acl = new Acl( $aclid );
+ $acl->load();
+ $acl->delete();
+ }
+ }
+
+
+
+ /**
+ * Liefert einen temporären Dateinamen.
+ * @param $attr Attribute fuer den Dateinamen, um diesen eindeutig zu gestalten.
+ * @return unknown_type
+ */
+ public function getTempFileName( $attr = array() )
+ {
+ global $conf;
+
// if ( $conf['cache']['enable_cache'] )
// {
- $filename = \FileUtils::getTempDir().'/openrat';
- foreach( $attr as $a=>$w )
- $filename .= '_'.$a.$w;
-
- $filename .= '.tmp';
- return $filename;
+ $filename = \FileUtils::getTempDir().'/openrat';
+ foreach( $attr as $a=>$w )
+ $filename .= '_'.$a.$w;
+
+ $filename .= '.tmp';
+ return $filename;
// }
// else
// {
@@ -1139,221 +1132,227 @@ SQL
//
// return $tmpfile;
// }
- }
-
-
-
- /**
- * Gibt ein fertiges Dateihandle fuer eine temporaere Datei zurück.
- * @return Resource
- */
- protected function getTempFile()
- {
- return tmpfile();
- }
-
-
- public function getTempDir()
- {
- \FileUtils::getTempDir();
- }
-
- /**
- * Reihenfolge-Sequenznr. dieses Objektes neu speichern
- * die Nr. wird sofort in der Datenbank gespeichert.
- *
- * @param Integer neue Sequenz-Nr.
- */
- function setOrderId( $orderid )
- {
- $db = db_connection();
-
- $sql = $db->sql('UPDATE {{object}} '.' SET orderid={orderid}'.' WHERE id={objectid}');
- $sql->setInt('objectid', $this->objectid);
- $sql->setInt('orderid', $orderid);
-
- $sql->query($sql);
- }
-
-
- /**
- * ?bergeordnete Objekt-ID dieses Objektes neu speichern
- * die Nr. wird sofort in der Datenbank gespeichert.
- *
- * @param Integer ?bergeordnete Objekt-ID
- */
- 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->query($sql);
- }
-
-
- 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 );
-
- return $sql->getCol( $sql );
- }
-
-
- /**
- * Es werden Objekte mit einem bestimmten Namen ermittelt
- * @param String Suchbegriff
- * @return Array Liste der gefundenen Objekt-IDs
- */
- function getObjectIdsByFileName( $text )
- {
- $db = db_connection();
-
- $sql = $db->sql( 'SELECT id FROM {{object}} '.
- ' WHERE filename LIKE {filename}'.
- ' AND projectid={projectid}'.
- ' ORDER BY lastchange_date DESC' );
- $sql->setInt ( 'projectid',$this->projectid );
- $sql->setString( 'filename','%'.$text.'%' );
-
- return $sql->getCol( $sql );
- }
-
-
- /**
- * Es werden Objekte mit einem Namen ermittelt
- * @param String Suchbegriff
- * @return Array Liste der gefundenen Objekt-IDs
- */
- function getObjectIdsByName( $text )
- {
- $db = db_connection();
-
- $sql = $db->sql( 'SELECT {{object}}.id FROM {{object}} '.
- ' LEFT JOIN {{name}} '.
- ' ON {{object}}.id={{name}}.objectid'.
- ' WHERE {{name}}.name LIKE {name}'.
- ' AND {{name}}.languageid={languageid}'.
- ' AND {{object}}.projectid={projectid}'.
- ' ORDER BY lastchange_date DESC' );
- $sql->setInt ( 'projectid' ,$this->projectid );
- $sql->setInt ( 'languageid',$this->languageid );
- $sql->setString( 'name' ,'%'.$text.'%' );
-
- return $sql->getCol( $sql );
- }
-
-
- /**
- * Es werden Objekte mit einer Beschreibung ermittelt
- * @param String Suchbegriff
- * @return Array Liste der gefundenen Objekt-IDs
- */
- function getObjectIdsByDescription( $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}'.
- ' AND {{name}}.languageid={languageid}'.
- ' AND {{object}}.projectid={projectid}'.
- ' ORDER BY lastchange_date DESC' );
- $sql->setInt ( 'projectid' ,$this->projectid );
- $sql->setInt ( 'languageid',$this->languageid );
- $sql->setString( 'desc' ,'%'.$text.'%' );
-
- return $sql->getCol( $sql );
- }
-
-
- /**
- * Es werden Objekte mit einer UserId ermittelt
- * @param Integer Benutzer-Id der Erstellung
- * @return Array Liste der gefundenen Objekt-IDs
- */
- function getObjectIdsByCreateUserId( $userid )
- {
- $db = db_connection();
-
- $sql = $db->sql( 'SELECT id FROM {{object}} '.
- ' WHERE create_userid={userid}'.
- ' AND projectid={projectid}'.
- ' ORDER BY lastchange_date DESC' );
- $sql->setInt ( 'projectid',$this->projectid );
- $sql->setInt ( 'userid' ,$userid );
-
- return $sql->getCol( $sql );
- }
-
-
- /**
- * Es werden Objekte mit einer UserId ermittelt
- * @param Integer Benutzer-Id der letzten ?nderung
- * @return Array Liste der gefundenen Objekt-IDs
- */
- function getObjectIdsByLastChangeUserId( $userid )
- {
- $db = db_connection();
-
- $sql = $db->sql( 'SELECT id FROM {{object}} '.
- ' WHERE lastchange_userid={userid}'.
- ' AND projectid={projectid}'.
- ' ORDER BY lastchange_date DESC' );
- $sql->setInt ( 'projectid',$this->projectid );
- $sql->setInt ( 'userid' ,$userid );
-
- return $sql->getCol( $sql );
- }
-
-
- /**
- * Gibt true zur?ck, wenn die angegebene Objekt-ID existiert
- * @param Integer Objekt-ID
- * @return Boolean
- */
- function isObjectId( $id )
- {
- $db = db_connection();
-
- $sql = $db->sql( 'SELECT id FROM {{object}} '.
- ' WHERE id={objectid}'.
- ' AND projectid={projectid}' );
- $sql->setInt ( 'projectid' ,$this->projectid );
- $sql->setInt ( 'objectid' ,$id );
-
- return ($sql->getOne($sql) == intval($id) );
- }
-
-
-
- /**
- * 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 );
-
- return $sql->getCol( $sql );
- }
-
-
-
-
-}
-
-?>-
\ No newline at end of file
+ }
+
+
+
+ /**
+ * Gibt ein fertiges Dateihandle fuer eine temporaere Datei zurück.
+ * @return Resource
+ */
+ protected function getTempFile()
+ {
+ return tmpfile();
+ }
+
+
+ public function getTempDir()
+ {
+ \FileUtils::getTempDir();
+ }
+
+ /**
+ * Reihenfolge-Sequenznr. dieses Objektes neu speichern
+ * die Nr. wird sofort in der Datenbank gespeichert.
+ *
+ * @param Integer neue Sequenz-Nr.
+ */
+ function setOrderId( $orderid )
+ {
+ $db = db_connection();
+
+ $sql = $db->sql('UPDATE {{object}} '.' SET orderid={orderid}'.' WHERE id={objectid}');
+ $sql->setInt('objectid', $this->objectid);
+ $sql->setInt('orderid', $orderid);
+
+ $sql->query($sql);
+ }
+
+
+ /**
+ * ?bergeordnete Objekt-ID dieses Objektes neu speichern
+ * die Nr. wird sofort in der Datenbank gespeichert.
+ *
+ * @param Integer ?bergeordnete Objekt-ID
+ */
+ 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->query($sql);
+ }
+
+
+ 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 );
+
+ return $sql->getCol( $sql );
+ }
+
+
+ /**
+ * Es werden Objekte mit einem bestimmten Namen ermittelt
+ * @param String Suchbegriff
+ * @return Array Liste der gefundenen Objekt-IDs
+ */
+ function getObjectIdsByFileName( $text )
+ {
+ $db = db_connection();
+
+ $sql = $db->sql( 'SELECT id FROM {{object}} '.
+ ' WHERE filename LIKE {filename}'.
+ ' AND projectid={projectid}'.
+ ' ORDER BY lastchange_date DESC' );
+ $sql->setInt ( 'projectid',$this->projectid );
+ $sql->setString( 'filename','%'.$text.'%' );
+
+ return $sql->getCol( $sql );
+ }
+
+
+ /**
+ * Es werden Objekte mit einem Namen ermittelt
+ * @param String Suchbegriff
+ * @return Array Liste der gefundenen Objekt-IDs
+ */
+ function getObjectIdsByName( $text )
+ {
+ $db = db_connection();
+
+ $sql = $db->sql( 'SELECT {{object}}.id FROM {{object}} '.
+ ' LEFT JOIN {{name}} '.
+ ' ON {{object}}.id={{name}}.objectid'.
+ ' WHERE {{name}}.name LIKE {name}'.
+ ' AND {{name}}.languageid={languageid}'.
+ ' AND {{object}}.projectid={projectid}'.
+ ' ORDER BY lastchange_date DESC' );
+ $sql->setInt ( 'projectid' ,$this->projectid );
+ $sql->setInt ( 'languageid',$this->languageid );
+ $sql->setString( 'name' ,'%'.$text.'%' );
+
+ return $sql->getCol( $sql );
+ }
+
+
+ /**
+ * Es werden Objekte mit einer Beschreibung ermittelt
+ * @param String Suchbegriff
+ * @return Array Liste der gefundenen Objekt-IDs
+ */
+ function getObjectIdsByDescription( $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}'.
+ ' AND {{name}}.languageid={languageid}'.
+ ' AND {{object}}.projectid={projectid}'.
+ ' ORDER BY lastchange_date DESC' );
+ $sql->setInt ( 'projectid' ,$this->projectid );
+ $sql->setInt ( 'languageid',$this->languageid );
+ $sql->setString( 'desc' ,'%'.$text.'%' );
+
+ return $sql->getCol( $sql );
+ }
+
+
+ /**
+ * Es werden Objekte mit einer UserId ermittelt
+ * @param Integer Benutzer-Id der Erstellung
+ * @return Array Liste der gefundenen Objekt-IDs
+ */
+ function getObjectIdsByCreateUserId( $userid )
+ {
+ $db = db_connection();
+
+ $sql = $db->sql( 'SELECT id FROM {{object}} '.
+ ' WHERE create_userid={userid}'.
+ ' AND projectid={projectid}'.
+ ' ORDER BY lastchange_date DESC' );
+ $sql->setInt ( 'projectid',$this->projectid );
+ $sql->setInt ( 'userid' ,$userid );
+
+ return $sql->getCol( $sql );
+ }
+
+
+ /**
+ * Es werden Objekte mit einer UserId ermittelt
+ * @param Integer Benutzer-Id der letzten ?nderung
+ * @return Array Liste der gefundenen Objekt-IDs
+ */
+ function getObjectIdsByLastChangeUserId( $userid )
+ {
+ $db = db_connection();
+
+ $sql = $db->sql( 'SELECT id FROM {{object}} '.
+ ' WHERE lastchange_userid={userid}'.
+ ' AND projectid={projectid}'.
+ ' ORDER BY lastchange_date DESC' );
+ $sql->setInt ( 'projectid',$this->projectid );
+ $sql->setInt ( 'userid' ,$userid );
+
+ return $sql->getCol( $sql );
+ }
+
+
+ /**
+ * Gibt true zur?ck, wenn die angegebene Objekt-ID existiert
+ * @param Integer Objekt-ID
+ * @return Boolean
+ */
+ function isObjectId( $id )
+ {
+ $db = db_connection();
+
+ $sql = $db->sql( 'SELECT id FROM {{object}} '.
+ ' WHERE id={objectid}'.
+ ' AND projectid={projectid}' );
+ $sql->setInt ( 'projectid' ,$this->projectid );
+ $sql->setInt ( 'objectid' ,$id );
+
+ return ($sql->getOne($sql) == intval($id) );
+ }
+
+
+
+ /**
+ * 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 );
+
+ return $sql->getCol( $sql );
+ }
+
+ private function getTypeid()
+ {
+ if ($this->isFolder) return OR_TYPEID_FOLDER;
+ if ($this->isFile) return OR_TYPEID_FILE;
+ if ($this->isPage) return OR_TYPEID_PAGE;
+ if ($this->isLink) return OR_TYPEID_LINK;
+ }
+
+
+ }
+
+}?>+
\ No newline at end of file
diff --git a/model/Project.class.php b/model/Project.class.php
@@ -1,4 +1,4 @@
-<?php
+<?php
namespace cms\model;
// OpenRat Content Management System
// Copyright (C) 2002-2012 Jan Dankert, cms@jandankert.de
@@ -46,21 +46,21 @@ class Project
if ( intval($projectid) != 0 )
$this->projectid = $projectid;
}
-
-
- /**
- * Stellt fest, ob die angegebene Id existiert.
- */
- function available( $id )
- {
- $db = db_connection();
-
- $sql = $db->sql('SELECT 1 FROM {{project}} '.
- ' WHERE id={id}');
- $sql->setInt('id' ,$id );
-
- return intval($sql->getOne($sql)) == 1;
- }
+
+
+ /**
+ * Stellt fest, ob die angegebene Id existiert.
+ */
+ function available( $id )
+ {
+ $db = db_connection();
+
+ $sql = $db->sql('SELECT 1 FROM {{project}} '.
+ ' WHERE id={id}');
+ $sql->setInt('id' ,$id );
+
+ return intval($sql->getOne($sql)) == 1;
+ }
// Liefert alle verf?gbaren Projekte
@@ -783,7 +783,7 @@ SQL
/**
* Ermittelt projektübergreifend die letzten Änderungen des angemeldeten Benutzers.
*
- * @return Ambigous <string, unknown>
+ * @return array <string, unknown>
*/
public function getMyLastChanges()
{
@@ -794,10 +794,7 @@ SQL
$sql = $db->sql( <<<SQL
SELECT {{object}}.id as objectid,
{{object}}.filename as filename,
- {{object}}.is_folder as is_folder,
- {{object}}.is_file as is_file,
- {{object}}.is_link as is_link,
- {{object}}.is_page as is_page,
+ {{object}}.typeid as typeid,
{{object}}.lastchange_date as lastchange_date,
{{name}}.name as name
FROM {{object}}
@@ -866,16 +863,13 @@ SQL
public function getLastChanges()
{
- $db = db_connection();
-
- $sql = $db->sql( <<<SQL
+ $db = db_connection();
+
+ $sql = $db->sql( <<<SQL
SELECT {{object}}.id as objectid,
{{object}}.lastchange_date as lastchange_date,
{{object}}.filename as filename,
- {{object}}.is_folder as is_folder,
- {{object}}.is_file as is_file,
- {{object}}.is_link as is_link,
- {{object}}.is_page as is_page,
+ {{object}}.typeid as typeid,
{{name}}.name as name,
{{user}}.name as username,
{{user}}.id as userid,
@@ -888,17 +882,17 @@ SQL
LEFT JOIN {{user}}
ON {{user}}.id = {{object}}.lastchange_userid
WHERE {{object}}.projectid = {projectid}
- ORDER BY {{object}}.lastchange_date DESC
-SQL
+ ORDER BY {{object}}.lastchange_date DESC
+SQL
);
- // Variablen setzen.
+ // Variablen setzen.
$sql->setInt( 'projectid', $this->projectid );
- $language = \Session::getProjectLanguage();
- $sql->setInt( 'languageid', $language->languageid );
-
- return $sql->getAll( $sql );
+ $language = \Session::getProjectLanguage();
+ $sql->setInt( 'languageid', $language->languageid );
+
+ return $sql->getAll( $sql );
}
}