openrat-cms

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

commit a1c94eefa2ec40b7eef440d8ec6ece7ed72dfc4f
parent 1b35ba3d9bc04b050430a8a5e4ce152498090a23
Author: dankert <devnull@localhost>
Date:   Sat, 20 Mar 2004 02:47:33 +0100

*** empty log message ***

Diffstat:
functions/object.class.php | 470+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 470 insertions(+), 0 deletions(-)

diff --git a/functions/object.class.php b/functions/object.class.php @@ -0,0 +1,469 @@ +<?php +// --------------------------------------------------------------------------- +// $Id$ +// --------------------------------------------------------------------------- +// DaCMS Content Management System +// Copyright (C) 2002 Jan Dankert, jandankert@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. +// --------------------------------------------------------------------------- +// $Log$ +// Revision 1.1 2004-03-20 01:47:33 dankert +// *** empty log message *** +// +// --------------------------------------------------------------------------- + +/** + * Darstellung eines Objektes im Projektbaum. + * Dieses Objekt stellt eines der 4 Unterobjekte Ordner,Datei,Link oder Seite dar. + * + * @version $Revision$ + * @author $Author$ + */ +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 $desc = ''; + + // Datum/Benutzer Erstellung + var $create_date; + var $create_userid; + + // Datum/Benutzer letzte Aenderung + var $lastchange_date; + var $lastchange_userid; + + // Flags für den Objekttyp + var $isFolder = false; + var $isFile = false; + var $isPage = false; + var $isLink = false; + + /** 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; + + /** 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 Object($objectid = '') + { + global $SESS; + + if (is_numeric($objectid)) + { + $this->objectid = $objectid; + $this->id = $objectid; + } + + $this->languageid = $SESS['languageid']; + $this->modelid = $SESS['projectmodelid']; + $this->projectid = $SESS['projectid']; + } + + + /** + * Lesen aller Objekte aus dem aktuellen Projekt + * @return Array Alle Objekt-IDs des aktuellen Projektes + */ + function getAllObjectIds() + { + global $SESS; + $db = db_connection(); + + $sql = new Sql('SELECT id from {t_object} '. + ' WHERE projectid={projectid}'); + $sql->setInt('projectid', $this->projectid); + + return $db->getCol($sql->query); + } + + + // Kompletten Dateinamen des Objektes erzeugen + function full_filename() + { + $path = $this->path(); + + if ($path != '') + $path.= '/'; + + $path.= $this->filename(); + +// if ($this->extension() != '') +// $path.= '.'.$this->extension(); + + return $path; + } + + function checkRight($type) + { + return true; + global $SESS; + + if ($SESS['user']['is_admin'] == '1') + return true; + + if ($SESS['rights'][$this->projectid][$this->objectid][$type] == '1') + return true; + + return false; + } + + function getType() + { + if ($this->isFolder) + return 'folder'; + if ($this->isFile) + return 'file'; + if ($this->isPage) + return 'page'; + if ($this->isLink) + return 'link'; + + return 'unknown'; + } + + function path() + { + $folder = new Folder($this->parentid); + + return implode('/', $folder->parentObjectFileNames(false, true)); + } + + function filename() + { + if ($this->filename != '') + return $this->filename; + + $this->load(); + + return $this->filename; + } + + /** + * 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 = new Sql('SELECT {t_object}.*,{t_name}.name,{t_name}.description'.' FROM {t_object}'.' LEFT JOIN {t_name} ON {t_object}.id={t_name}.objectid AND {t_name}.languageid={languageid} '.' WHERE {t_object}.id={objectid}'); + $sql->setInt('objectid' , $this->objectid ); + $sql->setInt('languageid', $this->languageid); + $row = $db->getRow($sql->query); + + if (count($row) == 0) + die('fatal: objectid not found: '.$this->objectid); + + $this->parentid = $row['parentid']; + + if ( intval($this->parentid) == 0 ) + $this->isRoot = true; + else $this->isroot = false; + + $this->filename = trim(strtolower($row['filename'])); + + // Dateiname muss gueltig sein, + // ungueltige Zeichen werden entfernt + $gueltig = 'abcdefghijklmnopqrstuvwxyz0123456789-_.'; + $tmp = strtr($this->filename, $gueltig, str_repeat('#', strlen($gueltig))); + $this->filename = strtr($this->filename, $tmp, str_repeat('_', strlen($tmp))); + + // Falls leer, id<objectnr> als Dateinamen verwenden + if ($this->filename == '') + $this->filename = $this->objectid; + + $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 = false; + $this->isFile = false; + $this->isPage = false; + $this->isLink = false; + + $this->projectid = $row['projectid']; + + if ($row['is_folder'] == '1') + $this->isFolder = true; + + if ($row['is_file'] == '1') + $this->isFile = true; + + if ($row['is_page'] == '1') + $this->isPage = true; + + if ($row['is_link'] == '1') + $this->isLink = true; + + if ( $this->isRoot ) + { + $project = new Project( $this->projectid ); + $project->load(); + $this->name = $project->name; + $this->desc = ''; + } + else + { + $this->name = $row['name']; + $this->desc = $row['description']; + } + + + // Falls leer, id<objectnr> als Dateinamen verwenden + if ($this->name == '') + $this->name = $this->filename; + } + + function load() + { + $this->objectLoad(); + } + + // Lesen von logischem Namen und Beschreibung + // + // Diese Eigenschaften sind sprachabhaengig und stehen deswegen in einer + // separaten Tabelle + function objectLoadName() + { + die(); + global $SESS; + $db = db_connection(); + + $sql = new Sql('SELECT *'.' FROM {t_name}'.' WHERE objectid={objectid}'.' AND languageid={languageid}'); + $sql->setInt('objectid' , $this->objectid ); + $sql->setInt('languageid', $this->languageid); + $res = $db->query($sql->query); + + if ($res->numRows() == 0) + { + // Wenn Name in dieser Sprache nicht vorhanden, dann irgendeinen Namen lesen + $sql->setQuery('SELECT *'.' FROM {t_name}'.' WHERE objectid={objectid}'.' AND name != {blank}'); + $sql->setString('blank', ''); + $res = $db->query($sql->query); + } + $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 in Datenbank speichern + function objectSave() + { + global $SESS; + $db = db_connection(); + + $sql = new Sql('UPDATE {t_object} SET '. + ' parentid={parentid},'. + ' lastchange_date = {time} ,'. + ' lastchange_userid = {userid},'. + ' filename = {filename}'. + ' WHERE id={objectid}'); + + if ( $this->isRoot ) + $sql->setNull('parentid'); + else $sql->setInt ('parentid',$this->parentid ); + + $sql->setInt('objectid', $this->objectid); + $sql->setString('filename', $this->filename); + $sql->setInt('time', time()); + $sql->setInt('userid', $SESS['user']['id']); + + $db->query($sql->query); + + $this->objectSaveName(); + } + + function ObjectSaveName() + { + global $SESS; + $db = db_connection(); + + $sql = new Sql('SELECT COUNT(*) FROM {t_name} '.' WHERE objectid ={objectid}'.' AND languageid={languageid}'); + $sql->setInt('objectid', $this->objectid); + $sql->setInt('languageid', $SESS['languageid']); + $count = $db->getOne($sql->query); + + if ($count > 0) + { + $sql->setQuery('UPDATE {t_name} SET '.' name = {name} ,'.' description = {desc} '.' WHERE objectid ={objectid}'.' AND languageid={languageid}'); + $sql->setString('name', $this->name); + $sql->setString('desc', $this->desc); + $db->query($sql->query); + } + else + { + $sql->setQuery('INSERT INTO {t_name}'.' (objectid,languageid,name,description)'.' VALUES( {objectid},{languageid},{name},{desc} )'); + $sql->setString('name', $this->name); + $sql->setString('desc', $this->desc); + $db->query($sql->query); + } + } + + function objectDelete() + { + $db = db_connection(); + + // Objekt-Namen löschen + $sql = new Sql('DELETE FROM {t_name} WHERE objectid={objectid}'); + $sql->setInt('objectid', $this->objectid); + $db->query($sql->query); + + // Objekt löschen + $sql = new Sql('DELETE FROM {t_object} WHERE id={objectid}'); + $sql->setInt('objectid', $this->objectid); + $db->query($sql->query); + + } + + function objectAdd() + { + global $SESS; + $db = db_connection(); + + $sql = new Sql('SELECT COUNT(*) FROM {t_object}'.' WHERE parentid={parentid} AND filename={filename}'); + $sql->setString('filename', $this->filename); + $sql->setInt('parentid', $this->parentid); + + // Falls Objekt mit diesem Dateinamen bereits existiert, dann Dateinamen aendern + if ($db->getOne($sql->query) > 0) + { + $this->filename .= time(); + } + + $sql = new Sql('INSERT INTO {t_object}'. + ' (parentid,projectid,filename,orderid,create_date,create_userid,lastchange_date,lastchange_userid,is_folder,is_file,is_page,is_link)'. + ' VALUES( {parentid},{projectid},{filename},{orderid},{time},{userid},{time},{userid},{is_folder},{is_file},{is_page},{is_link} )'); + + if ( $this->isRoot ) + $sql->setNull('parentid'); + else $sql->setInt ('parentid',$this->parentid ); + + $sql->setString('filename', $this->filename); + $sql->setString('projectid',$this->projectid); + $sql->setInt('orderid', 99999 ); + $sql->setInt('time' , time() ); + $sql->setInt('userid' , $SESS['user']['id']); + + $sql->setBoolean('is_folder',$this->isFolder); + $sql->setBoolean('is_file', $this->isFile); + $sql->setBoolean('is_page', $this->isPage); + $sql->setBoolean('is_link', $this->isLink); + + $db->query($sql->query); + + // Hinzugefügte Objekt-ID bestimmen + if ( $this->isRoot ) + $sql->setQuery('SELECT id FROM {t_object}'.' WHERE parentid IS NULL AND filename={filename}'); + else $sql->setQuery('SELECT id FROM {t_object}'.' WHERE parentid={parentid} AND filename={filename}'); + + $this->objectid = $db->getOne($sql->query); + + $this->objectSaveName(); + } + + function tmpfile() + { + global $conf_tmpdir; + + $this->tmpfile = $conf_tmpdir.'/tmp_file'.$this->fileid.'.tmp'; + //$this->tmpfile = $conf_tmpdir.'/'.md5('f'.$this->fileid).'.tmp'; + + return $this->tmpfile; + } + + function setOrderId($orderid) + { + $db = db_connection(); + + $sql = new Sql('UPDATE {t_object} '.' SET orderid={orderid}'.' WHERE id={objectid}'); + $sql->setInt('objectid', $this->objectid); + $sql->setInt('orderid', $orderid); + + $db->query($sql->query); + } +} + +?>+ \ No newline at end of file