Folder.class.php

gehe zur Dokumentation dieser Datei
00001 <?php
00002 // ---------------------------------------------------------------------------
00003 // $Id$
00004 // ---------------------------------------------------------------------------
00005 // OpenRat Content Management System
00006 // Copyright (C) 2002-2004 Jan Dankert, jandankert@jandankert.de
00007 //
00008 // This program is free software; you can redistribute it and/or
00009 // modify it under the terms of the GNU General Public License
00010 // as published by the Free Software Foundation; either version 2
00011 // of the License, or (at your option) any later version.
00012 //
00013 // This program is distributed in the hope that it will be useful,
00014 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00015 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00016 // GNU General Public License for more details.
00017 //
00018 // You should have received a copy of the GNU General Public License
00019 // along with this program; if not, write to the Free Software
00020 // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
00021 // ---------------------------------------------------------------------------
00022 // $Log$
00023 // Revision 1.13  2007-11-30 23:38:41  dankert
00024 // nur ein Kommentar erg?nzt
00025 //
00026 // Revision 1.12  2007-10-25 22:29:11  dankert
00027 // Neue Methoden f?r Filemanager.
00028 //
00029 // Revision 1.11  2007-05-02 21:28:47  dankert
00030 // Beim Lesen aller Objekte bereits in der Datenbank nach Typ filtern.
00031 //
00032 // Revision 1.10  2006/07/19 21:30:12  dankert
00033 // Verbesserung "getParentObjectNames()"
00034 //
00035 // Revision 1.9  2005/11/07 22:34:51  dankert
00036 // Einen Sql-Befehl in ein "here-document" ausgelagert.
00037 //
00038 // Revision 1.8  2005/01/04 19:58:56  dankert
00039 // neue Methoden getFirst/LastPageOrLink()
00040 //
00041 // Revision 1.7  2004/12/19 15:22:17  dankert
00042 // Anpassung Session-Funktionen
00043 //
00044 // Revision 1.6  2004/12/15 23:18:36  dankert
00045 // Anpassung an Session-Funktionen
00046 //
00047 // Revision 1.5  2004/11/29 21:10:29  dankert
00048 // publish() mit 3 Parametern
00049 //
00050 // Revision 1.4  2004/11/24 22:05:45  dankert
00051 // Korrektur getObjects()
00052 //
00053 // Revision 1.3  2004/11/10 22:45:56  dankert
00054 // *** empty log message ***
00055 //
00056 // Revision 1.2  2004/05/02 14:41:31  dankert
00057 // Einf?gen package-name (@package)
00058 //
00059 // ---------------------------------------------------------------------------
00060 
00061 
00069 class Folder extends Object
00070 {
00071      var $folderid;
00072      var $projectid;
00073      var $parentfolders = array();
00074      var $subfolders    = array();
00075      var $filenames     = true;
00076      var $name     = '';
00077      var $filename = '';
00078      var $desc     = '';
00079      var $publish  = null;
00080      
00081 
00082      function Folder( $objectid='' )
00083      {
00084           $this->Object( $objectid );
00085           $this->isFolder = true;
00086      }
00087 
00088 
00089      function add()
00090      {
00091           $this->objectAdd();
00092 
00093           $db = db_connection();
00094 
00095           $sql = new Sql('SELECT MAX(id) FROM {t_folder}');
00096           $this->folderid = intval($db->getOne($sql->query))+1;
00097 
00098           $sql = new Sql('INSERT INTO {t_folder}'.
00099                          ' (id,objectid)'.
00100                          ' VALUES( {folderid},{objectid} )' );
00101           $sql->setInt   ('folderid'    ,$this->folderid );
00102           $sql->setInt   ('objectid'    ,$this->objectid );
00103           
00104           $db->query( $sql->query );
00105      }    
00106      
00107 
00108 
00109      function getRootFolderId()
00110      {
00111           global $SESS;
00112           $db = db_connection();
00113 
00114           $sql = new SQL('SELECT id FROM {t_object}'.
00115                          '  WHERE parentid IS NULL'.
00116                          '    AND is_folder=1'.
00117                          '    AND projectid={projectid}' );
00118 
00119           // Wenn Methode statisch aufgerufen wird, ist $this nicht vorhanden
00120           if   ( isset($this) && isset($this->projectid) )
00121           {
00122                $sql->setInt('projectid',$this->projectid );
00123           }
00124           else
00125           {
00126                $project = Session::getProject();
00127                $sql->setInt('projectid',$project->projectid );
00128           }
00129           
00130           // Datenbankabfrage ausfuehren
00131           return $db->getOne( $sql->query );
00132      }
00133 
00134 
00135      function hasFilename( $filename )
00136      {
00137           $db = db_connection();
00138 
00139           $sql = new Sql('SELECT COUNT(*) FROM {t_object}'.'  WHERE parentid={objectid} AND filename={filename}');
00140 
00141           if   ( intval($this->objectid)== 0 )
00142                $sql->setNull('objectid');
00143           else
00144                $sql->setString('objectid', $this->objectid);
00145 
00146           $sql->setString('filename', $filename      );
00147 
00148           return( $db->getOne($sql->query) > 0 );
00149      }
00150 
00151 
00152      function load()
00153      {
00154 //        $db = db_connection();
00155 //
00156 //        $sql = new Sql('SELECT * FROM {t_folder} WHERE objectid={objectid}');
00157 //        $sql->setInt('objectid',$this->objectid);
00158 //
00159 //        $row = $db->getRow( $sql->query );
00160 //
00161           $this->objectLoad();
00162           
00163 //        $this->folderid = $row['id' ];
00164      }
00165 
00166 
00167 
00168      function save()
00169      {
00170           $this->objectSave();
00171      }
00172 
00173 
00174      
00175      function setOrderId( $orderid )
00176      {
00177           $db = db_connection();
00178 
00179           $sql = new Sql('UPDATE {t_folder} '.
00180                          '  SET orderid={orderid}'.
00181                          '  WHERE id={folderid}');
00182           $sql->setInt('folderid',$this->folderid);
00183           $sql->setInt('orderid' ,$orderid       );
00184 
00185           $db->query( $sql->query );
00186      }
00187 
00188 
00189 
00190 //   function getSubFolders()
00191 //   {
00192 //        global $SESS;
00193 //        $db = db_connection();
00194 //        
00195 //        $sql = new Sql('SELECT id FROM {t_folder}'.
00196 //                       '  WHERE parentid={folderid}'.
00197 //                       '    AND projectid={projectid}'.
00198 //                       '  ORDER BY orderid ASC' );
00199 //        $sql->setInt('folderid' ,$SESS['folderid' ]);
00200 //        $sql->setInt('projectid',$SESS['projectid']);
00201 //        
00202 //        return( $db->getCol( $sql->query ));
00203 //   }
00204 
00205      
00206      // Liest alle Objekte in diesem Ordner
00207      function getObjectIds()
00208      {
00209           $db = db_connection();
00210 
00211           $sql = new Sql('SELECT id FROM {t_object}'.
00212                          '  WHERE parentid={objectid}'.
00213                          '  ORDER BY orderid ASC' );
00214           $sql->setInt('projectid',$this->projectid );
00215           $sql->setInt('objectid' ,$this->objectid  );
00216           
00217           return( $db->getCol( $sql->query ) );
00218      }
00219 
00220 
00221 
00226      function getObjects()
00227      {
00228           $db = db_connection();
00229 
00230           $sql = new Sql('SELECT {t_object}.*,{t_name}.name,{t_name}.descr'.
00231                          '  FROM {t_object}'.
00232                          ' LEFT JOIN {t_name} '.
00233                          '   ON {t_object}.id={t_name}.objectid AND {t_name}.languageid={languageid} '.
00234                          '  WHERE parentid={objectid}'.
00235                          '  ORDER BY orderid ASC' );
00236           $sql->setInt('languageid',$this->languageid );
00237           $sql->setInt('objectid'  ,$this->objectid   );
00238           
00239           $liste = array();
00240           $res = $db->getAll( $sql->query );
00241           foreach( $res as $row )
00242           {
00243                $o = new Object( $row['id'] );
00244                $o->setDatabaseRow( $row );
00245                $liste[] = $o;
00246           }
00247 
00248           return $liste;
00249      }
00250 
00251 
00252      // Liest alle Objekte in diesem Ordner
00253      function getObjectIdsByType()
00254      {
00255           $db = db_connection();
00256 
00257           $sql = new Sql('SELECT id FROM {t_object}'.
00258                          '  WHERE parentid={objectid}'.
00259                          '  ORDER BY is_link,is_page,is_file,is_folder,orderid ASC' );
00260           $sql->setInt('projectid',$this->projectid );
00261           $sql->setInt('objectid' ,$this->objectid  );
00262           
00263           return( $db->getCol( $sql->query ) );
00264      }
00265 
00266 
00267      // Liest alle Objekte in diesem Ordner sortiert nach dem Namen (nicht Dateinamen!)
00268      function getObjectIdsByName()
00269      {
00270           $db = db_connection();
00271 
00272           $sql = new Sql('SELECT {t_object}.id FROM {t_object}'.
00273                          '  LEFT JOIN {t_name} ON {t_object}.id={t_name}.objectid AND {t_name}.languageid={languageid} '.
00274                        ' WHERE parentid={objectid}'.
00275                        ' ORDER BY {t_name}.name,{t_object}.filename ASC');
00276           $sql->setInt('objectid'  , $this->objectid  );
00277           $sql->setInt('languageid', $this->languageid);
00278           return( $db->getCol( $sql->query ) );
00279      }
00280 
00281 
00282      // Liest alle Objekte in diesem Ordner
00283      function getObjectIdsByLastChange()
00284      {
00285           $db = db_connection();
00286 
00287           $sql = new Sql('SELECT id FROM {t_object}'.
00288                          '  WHERE parentid={objectid}'.
00289                          '  ORDER BY lastchange_date,orderid ASC' );
00290           $sql->setInt('projectid',$this->projectid );
00291           $sql->setInt('objectid' ,$this->objectid  );
00292           
00293           return( $db->getCol( $sql->query ) );
00294      }
00295 
00296 
00297      function publish( $withPages,$withFiles,$subdirs = false )
00298      {
00299           if   ( ! is_object($this->publish) )
00300                $this->publish = new Publish();
00301 
00302           foreach( $this->getObjectIds() as $oid )
00303           {
00304                $o = new Object( $oid );
00305                $o->objectLoadRaw();
00306 
00307                if   ( $o->isPage && $withPages )
00308                {
00309                     $p = new Page( $oid );
00310                     $p->load();
00311                     $p->publish = &$this->publish;
00312                     $p->publish();
00313                }
00314 
00315                if   ( $o->isFile && $withFiles )
00316                {
00317                     $f = new File( $oid );
00318                     $f->load();
00319                     $f->publish = &$this->publish;
00320                     $f->publish();
00321                }
00322 
00323                if   ( $o->isFolder && $subdirs )
00324                {
00325                     $f = new Folder( $oid );
00326                     $f->load();
00327                     $f->publish = &$this->publish;
00328                     $f->publish( $withPages,$withFiles,true );             
00329                }
00330           }
00331      }
00332 
00333 
00334      function getObjectIdByFileName( $filename )
00335      {
00336           $db = db_connection();
00337           
00338           $sql = new Sql('SELECT id FROM {t_object}'.
00339                          '  WHERE parentid={objectid}'.
00340                          '    AND filename={filename}' );
00341           $sql->setInt   ('objectid' ,$this->objectid );
00342           $sql->setString('filename' ,$filename       );
00343           
00344           return( intval($db->getOne( $sql->query )) );
00345      }
00346 
00347 
00348      function getAllObjectIds( $types=array('folder','page','link','file') )
00349      {
00350 //        Html::debug($types,'Typen');
00351           global $SESS;
00352           $db = db_connection();
00353           
00354           $sql = new Sql('SELECT id FROM {t_object}'.
00355                          '  WHERE projectid={projectid}'.
00356                          '    AND (    is_folder={is_folder}' .
00357                          '          OR is_file  ={is_file}' .
00358                          '          OR is_page  ={is_page}' .
00359                          '          OR is_link  ={is_link} )' .
00360                          '  ORDER BY orderid ASC' );
00361           $project = Session::getProject();
00362           $sql->setInt('projectid',$project->projectid);
00363           $sql->setInt('is_folder',in_array('folder',$types)?1:2);
00364           $sql->setInt('is_file'  ,in_array('file'  ,$types)?1:2);
00365           $sql->setInt('is_page'  ,in_array('page'  ,$types)?1:2);
00366           $sql->setInt('is_link'  ,in_array('link'  ,$types)?1:2);
00367           
00368           return( $db->getCol( $sql->query ) );
00369      }
00370 
00371      
00372      function dgetRootObjectId()
00373      {
00374           global $SESS;
00375           $db = db_connection();
00376           
00377           $sql = new Sql('SELECT id FROM {t_object}'.
00378                          '  WHERE parentid IS NULL'.
00379                          '    AND projectid={projectid}' );
00380 
00381           if   ( isset($this->projectid) )
00382                $sql->setInt('projectid',$this->projectid   );
00383           else $sql->setInt('projectid',$SESS['projectid'] );
00384           
00385           return( $db->getOne( $sql->query ) );
00386      }
00387 
00388      
00389      function getOtherFolders()
00390      {
00391           global $SESS;
00392           $db = db_connection();
00393           
00394           $sql = new Sql('SELECT id FROM {t_object}'.
00395                          '  WHERE is_folder=1'.
00396                          '    and id != {objectid} '.
00397                          '    AND projectid={projectid}' );
00398           $sql->setInt( 'projectid',$this->projectid );
00399           $sql->setInt( 'objectid' ,$this->objectid  );
00400           
00401           return( $db->getCol( $sql->query ) );
00402      }
00403 
00404      
00405      function getAllFolders()
00406      {
00407           global $SESS;
00408           $db = db_connection();
00409           
00410           $sql = new Sql('SELECT id FROM {t_object}'.
00411                          '  WHERE is_folder=1'.
00412                          '    AND projectid={projectid}' );
00413                          
00414           if   ( !isset($this->projectid) )
00415           {
00416                $project = Session::getProject();
00417                $sql->setInt('projectid',$project->projectid);
00418           }
00419           else $sql->setInt( 'projectid',$this->projectid   );
00420           
00421           return( $db->getCol( $sql->query ) );
00422      }
00423 
00424      
00425      function getPages()
00426      {
00427           $db = db_connection();
00428 
00429           $sql = new Sql('SELECT id FROM {t_object} '.
00430                          '  WHERE parentid={objectid} AND is_page=1'.
00431                          '  ORDER BY orderid ASC' );
00432           $sql->setInt( 'objectid' ,$this->objectid  );
00433 
00434           return $db->getCol( $sql->query );
00435      }
00436 
00437      
00443      function getFirstPageOrLink()
00444      {
00445           $db = db_connection();
00446 
00447           $sql = new Sql('SELECT id FROM {t_object} '.
00448                          '  WHERE parentid={objectid}'.
00449                          '    AND (is_page=1 OR is_link=1)'.
00450                          '  ORDER BY orderid ASC' );
00451           $sql->setInt( 'objectid' ,$this->objectid  );
00452 
00453           $oid = intval($db->getOne( $sql->query ));
00454           
00455           if   ( $oid != 0 )
00456                $o = new Object($oid);
00457           else
00458                $o = null;
00459 
00460           return $o;
00461      }
00462 
00463 
00464      function getLastPageOrLink()
00465      {
00466           $db = db_connection();
00467 
00468           $sql = new Sql('SELECT id FROM {t_object} '.
00469                          '  WHERE parentid={objectid}'.
00470                          '    AND (is_page=1 OR is_link=1)'.
00471                          '  ORDER BY orderid DESC' );
00472           $sql->setInt( 'objectid' ,$this->objectid  );
00473 
00474           $oid = intval($db->getOne( $sql->query ));
00475           
00476           if   ( $oid != 0 )
00477                $o = new Object($oid);
00478           else
00479                $o = null;
00480 
00481           return $o;
00482      }
00483 
00484      
00485      function getFiles()
00486      {
00487           $db = db_connection();
00488 
00489           $sql = new Sql('SELECT id FROM {t_object} '.
00490                          '  WHERE parentid={objectid} AND is_file=1'.
00491                          '  ORDER BY orderid ASC' );
00492           $sql->setInt( 'objectid' ,$this->objectid  );
00493 
00494           return $db->getCol( $sql->query );
00495      }
00496 
00497 
00498      
00504      function getFileFilenames()
00505      {
00506           $db = db_connection();
00507 
00508           $sql = new Sql('SELECT id,filename FROM {t_object} '.
00509                          '  WHERE parentid={objectid} AND is_file=1'.
00510                          '  ORDER BY orderid ASC' );
00511           $sql->setInt( 'objectid' ,$this->objectid  );
00512 
00513           return $db->getAssoc( $sql->query );
00514      }
00515 
00516      
00517      function getLinks()
00518      {
00519           $db = db_connection();
00520 
00521           $sql = new Sql('SELECT id FROM {t_object} '.
00522                          '  WHERE parentid={objectid} AND is_link=1'.
00523                          '  ORDER BY orderid ASC' );
00524           $sql->setInt( 'objectid' ,$this->objectid  );
00525 
00526           return $db->getCol( $sql->query );
00527      }
00528 
00529      
00530      // Rechte f?r diesen Ordner hinzuf?gen
00531      function addrights( $rights,$inherit = true )
00532      {
00533           global $SESS;
00534 
00535           $SESS['rights'][$rights['projectid']][$this->folderid]['show'] = true;
00536 
00537           if   ($rights['read'] == '1')
00538                $SESS['rights'][$rights['projectid']][$this->folderid]['read'] = 1;
00539           if   ($rights['write'] == '1')
00540                $SESS['rights'][$rights['projectid']][$this->folderid]['write'] = 1;
00541           if   ($rights['create'] == '1')
00542                $SESS['rights'][$rights['projectid']][$this->folderid]['create'] = 1;
00543           if   ($rights['delete'] == '1')
00544                $SESS['rights'][$rights['projectid']][$this->folderid]['delete'] = 1;
00545           if   ($rights['publish'] == '1')
00546                $SESS['rights'][$rights['projectid']][$this->folderid]['publish'] = 1;
00547           
00548           // Rechte auf Unterordner vererben
00549           // sowie f?r ?bergeordnete Ordner die Anzeige erzwingen     
00550           if   ( $inherit )
00551           {
00552                // ?bergeordnete Ordner ermitteln
00553                $parentfolder = $this->parentObjectIds();
00554 
00555                // ?bergeordnete Ordner immer anzeigen (Schalter 'show'=true)
00556                foreach( $parentfolder as $folderid=>$name )
00557                {
00558                     $f = new Folder( $folderid );
00559                     $f->projectid = $this->projectid;
00560                     $f->addrights( array('projectid'=>$rights['projectid']),false );
00561                     unset($f);
00562                }
00563 
00564                $f = new Folder( 'null' );
00565                $f->projectid = $this->projectid;
00566                $f->addrights( array('projectid'=>$rights['projectid']),false );
00567                unset($f);
00568 
00569 
00570                // Unterordner ermitteln
00571                //echo "Kurz vor subfolderberechnung, folderid ist ".$this->folderid.'<br>';
00572                $subfolder = $this->subfolder();
00573 
00574                // Rechte weitergeben
00575                foreach( $subfolder as $folderid=>$name )
00576                {
00577                     $f = new Folder( $folderid );
00578                     $f->projectid = $this->projectid;
00579                     $f->addrights( $rights,false );
00580                     unset($f);
00581                }
00582           }
00583      }
00584 
00585 
00586      // Ermitteln aller ?bergeordneten Ordner
00587      //
00588      function parentfolder_bak( $with_root = false, $with_self = false )
00589      {
00590           $db = db_connection();
00591           $this->parentfolders = array();
00592           
00593           // ?bergeordneten Ordner lesen
00594           $sql = new Sql('SELECT parentid FROM {t_folder} WHERE id={folderid}');
00595 
00596           $sql->setInt('folderid',$this->folderid);
00597           $parentid = $db->getOne( $sql->query );
00598 
00599           // Ordner ist bereits h?chster Ordner
00600           if   ( !is_numeric($parentid))
00601           {
00602                // Falls Anzeige h?chster oder aktueller Ordner
00603                if   ( $with_root && $with_self )
00604                {
00605                     if   ( $this->filenames )
00606                          $this->parentfolders[ $this->folderid ] = $this->filename;
00607                     else $this->parentfolders[ $this->folderid ] = $this->name;
00608                }
00609 
00610                return $this->parentfolders;
00611           }
00612 
00613           // Aktuellen Ordner hinzuf?gen
00614           if   ( $with_self )
00615           {
00616                if   ( $this->filenames )
00617                     $this->parentfolders[ $this->folderid ] = $this->filename;
00618                else $this->parentfolders[ $this->folderid ] = $this->name;
00619           }
00620 
00621           // Schleife ?ber alle ?bergeordneten Ordner
00622           while( is_numeric($parentid) )
00623           {
00624                $sql = new Sql('SELECT * FROM {t_folder} WHERE id={folderid}');
00625                $sql->setInt('folderid',$parentid);
00626 
00627                $row_folder = $db->getRow( $sql->query );
00628 
00629                if   (is_numeric($row_folder['parentid']) || $with_root)
00630                {
00631                     if   ( $this->filenames )
00632                          $this->parentfolders[ $parentid ] = $row_folder['filename'];
00633                     else $this->parentfolders[ $parentid ] = $row_folder['name'];
00634                }
00635                
00636                $parentid = $row_folder['parentid'];
00637           }
00638 
00639      
00640           // Reihenfolge umdrehen
00641           $this->parentfolders = array_reverse($this->parentfolders,true);
00642           
00643           return $this->parentfolders;
00644      }
00645 
00646 
00647      function addParentFolder( $id,$name,$filename='' )
00648      {
00649           if  ( empty($name) )
00650                $name = $filename;
00651                
00652           if  ( empty($name) )
00653                $name = "($id)";
00654                
00655           if   ( intval($id) != 0 )
00656                $this->parentfolders[ $id ] = $name;
00657      }
00658 
00659 
00660      function checkParentFolders( $with_root, $with_self )
00661      {
00662           // Reihenfolge umdrehen
00663           $this->parentfolders = array_reverse($this->parentfolders,true);
00664 
00665           // Ordner ist bereits hoechster Ordner
00666 //        if   ( count($this->parentfolders) == 2 && $this->isRoot && $with_root && $with_self )
00667 //        {
00668 //             array_pop  ( $this->parentfolders );
00669 //             return;
00670 //        }
00671 
00672 
00673           if   ( !$with_root )
00674           {
00675                $keys = array_keys( $this->parentfolders );
00676                unset( $this->parentfolders[$keys[0]] );
00677           }
00678 
00679           if   ( !$with_self )
00680           {
00681                $keys = array_keys( $this->parentfolders );
00682                unset( $this->parentfolders[$keys[count($keys)-1]] );
00683           }
00684      }
00685 
00686 
00687      // Ermitteln aller ?bergeordneten Ordner
00688      //
00689      function parentObjectIds( $with_root = false, $with_self = false )
00690      {
00691           $db = Session::getDatabase();
00692           $this->parentfolders = array();
00693           
00694           // ?bergeordneten Ordner lesen
00695           //$sql = new Sql('SELECT parentid FROM {t_object} WHERE id={objectid}');
00696           $sql = new Sql('SELECT F0.id AS f0id,'.
00697                          '       F1.id AS f1id,'.
00698                          '       F2.id AS f2id,'.
00699                          '       F3.id AS f3id,'.
00700                          '       F4.id AS f4id,'.
00701                          '       F5.id AS f5id '.
00702                          '  FROM {t_object} AS F0'.
00703                          ' LEFT JOIN {t_object} AS F1 on F0.parentid=F1.id '.
00704                          ' LEFT JOIN {t_object} AS F2 on F1.parentid=F2.id '.
00705                          ' LEFT JOIN {t_object} AS F3 on F2.parentid=F3.id '.
00706                          ' LEFT JOIN {t_object} AS F4 on F3.parentid=F4.id '.
00707                          ' LEFT JOIN {t_object} AS F5 on F4.parentid=F5.id '.
00708                          ' WHERE F0.id={objectid}');
00709 
00710 //                       ' LEFT JOIN {t_name} '.
00711 //                       '   ON {t_object}.id={t_name}.objectid AND {t_name}.languageid={languageid} '.
00712 
00713           $sql->setInt('objectid',$this->objectid);
00714 
00715           $row = $db->getRow( $sql->query );
00716 
00717           $this->parentfolders = array();
00718           $this->addParentfolder( $row['f0id'],$row['f0id'] );
00719           $this->addParentfolder( $row['f1id'],$row['f1id'] );
00720           $this->addParentfolder( $row['f2id'],$row['f2id'] );
00721           $this->addParentfolder( $row['f3id'],$row['f3id'] );
00722           $this->addParentfolder( $row['f4id'],$row['f4id'] );
00723           $this->addParentfolder( $row['f5id'],$row['f5id'] );
00724 
00725           $this->checkParentFolders($with_root,$with_self);
00726      
00727           return $this->parentfolders;
00728      }
00729 
00730 
00731      function parentObjectFileNames(  $with_root = false, $with_self = false  )
00732      {
00733           $db = Session::getDatabase();
00734 
00735           $sql = new Sql( <<<EOF
00736 SELECT F0.id       AS f0id,
00737       F0.filename AS f0filename,
00738       F1.id       AS f1id,
00739       F1.filename AS f1filename,
00740       F2.id       AS f2id,
00741       F2.filename AS f2filename,
00742       F3.id       AS f3id,
00743       F3.filename AS f3filename,
00744       F4.id       AS f4id,
00745       F4.filename AS f4filename,
00746       F5.id       AS f5id,
00747       F5.filename AS f5filename
00748  FROM {t_object} AS F0
00749 LEFT JOIN {t_object} AS F1 on F0.parentid=F1.id 
00750 LEFT JOIN {t_object} AS F2 on F1.parentid=F2.id 
00751 LEFT JOIN {t_object} AS F3 on F2.parentid=F3.id 
00752 LEFT JOIN {t_object} AS F4 on F3.parentid=F4.id 
00753 LEFT JOIN {t_object} AS F5 on F4.parentid=F5.id 
00754 WHERE F0.id={objectid}
00755 EOF
00756  );
00757 
00758           $sql->setInt('objectid'  ,$this->objectid  );
00759           $sql->setInt('languageid',$this->languageid);
00760 
00761           $row = $db->getRow( $sql->query );
00762 
00763           $this->addParentfolder( $row['f0id'],$row['f0filename'] );
00764           $this->addParentfolder( $row['f1id'],$row['f1filename'] );
00765           $this->addParentfolder( $row['f2id'],$row['f2filename'] );
00766           $this->addParentfolder( $row['f3id'],$row['f3filename'] );
00767           $this->addParentfolder( $row['f4id'],$row['f4filename'] );
00768           $this->addParentfolder( $row['f5id'],$row['f5filename'] );
00769 
00770           $this->checkParentFolders($with_root,$with_self);
00771           
00772           return $this->parentfolders;
00773      }
00774 
00775      function parentObjectNames( $with_root = false, $with_self = false )
00776      {
00777           $db = Session::getDatabase();
00778 
00779           $sql = new Sql( <<<EOF
00780 SELECT F0.id       AS f0id,
00781       F0.filename AS f0filename,
00782       F1.filename AS f1filename,
00783       F2.filename AS f2filename,
00784       F3.filename AS f3filename,
00785       F4.filename AS f4filename,
00786       F5.filename AS f5filename,
00787                                 F0NAME.name AS f0name,
00788                                 F1.id       AS f1id,
00789                                 F1NAME.name AS f1name,
00790                                 F2.id       AS f2id,
00791                                 F2NAME.name AS f2name,
00792                                 F3.id       AS f3id,
00793                                 F3NAME.name AS f3name,
00794                                 F4.id       AS f4id,
00795                                 F4NAME.name AS f4name,
00796                                 F5.id       AS f5id, 
00797                                 F5NAME.name AS f5name
00798                            FROM {t_object} AS F0
00799                           LEFT JOIN {t_name}   AS F0NAME ON F0NAME.objectid=F0.id AND F0NAME.languageid={languageid} 
00800                           LEFT JOIN {t_object} AS F1 on F0.parentid=F1.id 
00801                           LEFT JOIN {t_name}   AS F1NAME ON F1NAME.objectid=F1.id AND F1NAME.languageid={languageid} 
00802                           LEFT JOIN {t_object} AS F2 on F1.parentid=F2.id 
00803                           LEFT JOIN {t_name}   AS F2NAME ON F2NAME.objectid=F2.id AND F2NAME.languageid={languageid} 
00804                           LEFT JOIN {t_object} AS F3 on F2.parentid=F3.id 
00805                           LEFT JOIN {t_name}   AS F3NAME ON F3NAME.objectid=F3.id AND F3NAME.languageid={languageid} 
00806                           LEFT JOIN {t_object} AS F4 on F3.parentid=F4.id 
00807                           LEFT JOIN {t_name}   AS F4NAME ON F4NAME.objectid=F4.id AND F4NAME.languageid={languageid} 
00808                           LEFT JOIN {t_object} AS F5 on F4.parentid=F5.id 
00809                           LEFT JOIN {t_name}   AS F5NAME ON F5NAME.objectid=F5.id AND F5NAME.languageid={languageid} 
00810                           WHERE F0.id={objectid}
00811 EOF
00812  );
00813           $sql->setInt('objectid'  ,$this->objectid  );
00814           $sql->setInt('languageid',$this->languageid);
00815 
00816           $row = $db->getRow( $sql->query );
00817 
00818           $this->addParentfolder( $row['f0id'],$row['f0name'],$row['f0filename'] );
00819           $this->addParentfolder( $row['f1id'],$row['f1name'],$row['f1filename'] );
00820           $this->addParentfolder( $row['f2id'],$row['f2name'],$row['f2filename'] );
00821           $this->addParentfolder( $row['f3id'],$row['f3name'],$row['f3filename'] );
00822           $this->addParentfolder( $row['f4id'],$row['f4name'],$row['f4filename'] );
00823           $this->addParentfolder( $row['f5id'],$row['f5name'],$row['f5filename'] );
00824 
00825           $this->checkParentFolders($with_root,$with_self);
00826           
00827           return $this->parentfolders;
00828      }
00829 
00830 
00831      // Ermitteln aller Unterordner
00832      //
00833      function subfolder()
00834      {
00835           $db = db_connection();
00836 
00837           $sql = new Sql('SELECT id FROM {t_object} '.
00838                          '  WHERE parentid={objectid} AND is_folder=1'.
00839                          '  ORDER BY orderid ASC' );
00840           $sql->setInt( 'objectid' ,$this->objectid  );
00841 
00842           $this->subfolders = $db->getCol( $sql->query );
00843 
00844           return $this->subfolders;
00845      }
00846 
00847      
00848      
00849      function getSubfolderFilenames()
00850      {
00851           $db = db_connection();
00852 
00853           $sql = new Sql('SELECT id,filename FROM {t_object} '.
00854                          '  WHERE parentid={objectid} AND is_folder=1'.
00855                          '  ORDER BY orderid ASC' );
00856           $sql->setInt( 'objectid' ,$this->objectid  );
00857 
00858           return $db->getAssoc( $sql->query );
00859      }
00860      
00861      
00862      // Ermitteln aller Unterordner (rekursives Absteigen)
00863      //
00864      function getAllSubFolderIds()
00865      {
00866           global $SESS;
00867 
00868           $ids = array();
00869 
00870           foreach( $this->getSubFolderIds() as $id )
00871           {
00872 //             echo "durchlaufe $id";
00873                $ids[] = $id;
00874 
00875                $f = new Folder( $id );
00876                if   ( !empty($this->projectid) )
00877                     $f->projectid = $this->projectid;
00878 
00879                foreach( $f->getAllSubFolderIds() as $xid )
00880                {
00881                     $ids[] = $xid;
00882                }
00883           }
00884 
00885 //        print_r( $ids );
00886           return $ids;
00887      }
00888 
00889 
00895      function delete()
00896      {
00897           $db = db_connection();
00898 
00899           // Nur loeschen, wenn es keine Unterelemente gibt
00900           if   ( count( $this->getObjectIds() ) == 0 )
00901           {
00902                $sql = new Sql( 'UPDATE {t_element} '.
00903                                '  SET folderobjectid=NULL '.
00904                                '  WHERE folderobjectid={objectid}' );
00905                $sql->setInt('objectid',$this->objectid);
00906                $db->query( $sql->query );
00907      
00908                $sql = new Sql( 'DELETE FROM {t_folder} '.
00909                                '  WHERE objectid={objectid}' );
00910                $sql->setInt('objectid',$this->objectid);
00911                $db->query( $sql->query );
00912      
00913                $this->objectDelete();
00914           }
00915      }
00916 
00917      
00924      function deleteAll()
00925      {
00926           $db = db_connection();
00927 
00928           // L?schen aller Unterordner
00929           foreach( $this->subfolder() as $folderid )
00930           {
00931                $folder = new Folder( $folderid );
00932                {
00933                     $folder->deleteAll();
00934                }
00935           }
00936           
00937           // L?schen aller Seiten,Verknuepfungen und Dateien in
00938           // diesem Ordner
00939           foreach( $this->getObjectIds() as $oid )
00940           {
00941                $object = new Object( $oid );
00942                {
00943                     $object->load();
00944 
00945                     if   ( $object->isPage )
00946                     {
00947                          $page = new Page( $oid );
00948                          $page->load();
00949                          $page->delete();
00950                     }
00951 
00952                     if   ( $object->isLink )
00953                     {
00954                          $link = new Link( $oid );
00955                          $link->load();
00956                          $link->delete();
00957                     }
00958 
00959                     if   ( $object->isFile )
00960                     {
00961                          $file = new File( $oid );
00962                          $file->load();
00963                          $file->delete();
00964                     }
00965                }
00966           }
00967 
00968           // Zum Abschluss den aktuellen Ordner loeschen
00969           $this->delete();
00970      }
00971 
00972      
00973      function getSubFolderIds()
00974      {
00975           return $this->subfolder();
00976      }
00977 }
00978 
00979 
00980 ?>

Erzeugt am Thu May 14 00:55:48 2009 für OpenRat von  doxygen 1.5.8