openrat-cms

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

Folder.class.php (18324B)


      1 <?php
      2 
      3 namespace cms\model;
      4 
      5 use cms\publish\Publish;
      6 use Exception;
      7 
      8 
      9 /**
     10  * Darstellen eines Ordners.
     11  *
     12  * @author Jan Dankert
     13  */
     14 class Folder extends BaseObject
     15 {
     16 	public $folderid;
     17 
     18 	var $subfolders    = array();
     19 	var $filenames     = true;
     20 
     21 
     22 	function __construct( $objectid='' )
     23 	{
     24 		parent::__construct( $objectid );
     25 		$this->isFolder = true;
     26 		$this->typeid = BaseObject::TYPEID_FOLDER;
     27 	}
     28 
     29 
     30 	public function add()
     31 	{
     32 		parent::add();
     33 
     34 		$db = db_connection();
     35 
     36 		$sql = $db->sql('SELECT MAX(id) FROM {{folder}}');
     37 		$this->folderid = intval($sql->getOne())+1;
     38 
     39 		$sql = $db->sql('INSERT INTO {{folder}}'.
     40 		               ' (id,objectid)'.
     41 		               ' VALUES( {folderid},{objectid} )' );
     42 		$sql->setInt   ('folderid'    ,$this->folderid );
     43 		$sql->setInt   ('objectid'    ,$this->objectid );
     44 		
     45 		$sql->query();
     46 	}	
     47 	
     48 
     49 
     50 	public function hasFilename( $filename )
     51 	{
     52 		$db = db_connection();
     53 
     54 		$sql = $db->sql('SELECT COUNT(*) FROM {{object}}'.'  WHERE parentid={objectid} AND filename={filename}');
     55 
     56 		if	( intval($this->objectid)== 0 )
     57 			$sql->setNull('objectid');
     58 		else
     59 			$sql->setString('objectid', $this->objectid);
     60 
     61 		$sql->setString('filename', $filename      );
     62 
     63 		return( $sql->getOne() > 0 );
     64 	}
     65 
     66 
     67 	public function load()
     68 	{
     69 //		$db = db_connection();
     70 //
     71 //		$sql = $db->sql('SELECT * FROM {{folder}} WHERE objectid={objectid}');
     72 //		$sql->setInt('objectid',$this->objectid);
     73 //
     74 //		$row = $sql->getRow( $sql );
     75 //
     76 		$this->objectLoad();
     77 		
     78 //		$this->folderid = $row['id' ];
     79 	}
     80 
     81 
     82 
     83 	function save()
     84 	{
     85 		$this->objectSave();
     86 	}
     87 
     88 
     89 	
     90 	function setOrderId( $orderid )
     91 	{
     92 		$db = db_connection();
     93 
     94 		$sql = $db->sql('UPDATE {{folder}} '.
     95 		               '  SET orderid={orderid}'.
     96 		               '  WHERE id={folderid}');
     97 		$sql->setInt('folderid',$this->folderid);
     98 		$sql->setInt('orderid' ,$orderid       );
     99 
    100 		$sql->query();
    101 	}
    102 
    103 
    104 
    105 //	function getSubFolders()
    106 //	{
    107 //		global $SESS;
    108 //		$db = db_connection();
    109 //		
    110 //		$sql = $db->sql('SELECT id FROM {{folder}}'.
    111 //		               '  WHERE parentid={folderid}'.
    112 //		               '    AND projectid={projectid}'.
    113 //		               '  ORDER BY orderid ASC' );
    114 //		$sql->setInt('folderid' ,$SESS['folderid' ]);
    115 //		$sql->setInt('projectid',$SESS['projectid']);
    116 //		
    117 //		return( $sql->getCol( $sql ));
    118 //	}
    119 
    120 	
    121 	// Liest alle Objekte in diesem Ordner
    122 	function getObjectIds()
    123 	{
    124 		$db = db_connection();
    125 
    126 		$sql = $db->sql('SELECT id FROM {{object}}'.
    127 		               '  WHERE parentid={objectid}'.
    128 		               '  ORDER BY orderid ASC' );
    129 		$sql->setInt('objectid' ,$this->objectid  );
    130 		
    131 		return( $sql->getCol() );
    132 	}
    133 
    134 
    135 
    136 	/**
    137 	 * Liest alle Objekte in diesem Ordner
    138      * @return array[Object] Objekte
    139 	 */
    140 	function getObjects()
    141 	{
    142 		$db = db_connection();
    143 
    144 		$sql = $db->sql('SELECT {{object}}.*,{{name}}.name,{{name}}.descr'.
    145 		               '  FROM {{object}}'.
    146 		               ' LEFT JOIN {{name}} '.
    147 		               '   ON {{object}}.id={{name}}.objectid AND {{name}}.languageid={languageid} '.
    148 		               '  WHERE parentid={objectid}'.
    149 		               '  ORDER BY orderid ASC' );
    150 		$sql->setInt('languageid',$this->languageid );
    151 		$sql->setInt('objectid'  ,$this->objectid   );
    152 		
    153 		$liste = array();
    154 		$res = $sql->getAll();
    155 		foreach( $res as $row )
    156 		{
    157 			$o = new BaseObject( $row['id'] );
    158 			$o->setDatabaseRow( $row );
    159 			$liste[] = $o;
    160 		}
    161 
    162 		return $liste;
    163 	}
    164 
    165 
    166 	// Liest alle Objekte in diesem Ordner
    167 	function getObjectIdsByType()
    168 	{
    169 		$db = db_connection();
    170 
    171 		$sql = $db->sql('SELECT id FROM {{object}}'.
    172 		               '  WHERE parentid={objectid}'.
    173 		               '  ORDER BY typeid,orderid ASC' );
    174 		$sql->setInt('objectid' ,$this->objectid  );
    175 		
    176 		return( $sql->getCol() );
    177 	}
    178 
    179 
    180 	// Liest alle Objekte in diesem Ordner sortiert nach dem Namen (nicht Dateinamen!)
    181 	function getChildObjectIdsByName()
    182 	{
    183 		$db = db_connection();
    184 
    185 		$sql = $db->sql('SELECT {{object}}.id FROM {{object}}'.
    186 		               '  LEFT JOIN {{name}} ON {{object}}.id={{name}}.objectid AND {{name}}.languageid={languageid} '.
    187                        ' WHERE parentid={objectid}'.
    188                        ' ORDER BY {{name}}.name,{{object}}.filename ASC');
    189 		$sql->setInt('objectid'  , $this->objectid  );
    190 		$sql->setInt('languageid', $this->languageid);
    191 		return( $sql->getCol() );
    192 	}
    193 
    194 
    195 	// Liest alle Objekte in diesem Ordner
    196 	function getObjectIdsByLastChange()
    197 	{
    198 		$db = db_connection();
    199 
    200 		$sql = $db->sql('SELECT id FROM {{object}}'.
    201 		               '  WHERE parentid={objectid}'.
    202 		               '  ORDER BY lastchange_date,orderid ASC' );
    203 		$sql->setInt('projectid',$this->projectid );
    204 		$sql->setInt('objectid' ,$this->objectid  );
    205 		
    206 		return( $sql->getCol() );
    207 	}
    208 
    209 
    210 	public function publish( $withPages,$withFiles,$subdirs = false )
    211 	{
    212 		set_time_limit(300);
    213 
    214 		foreach( $this->getObjectIds() as $oid )
    215 		{
    216 		    try {
    217                 $o = new BaseObject($oid);
    218                 $o->objectLoadRaw();
    219 
    220                 if ($o->isPage && $withPages) {
    221                     $p = new Page($oid);
    222                     $p->load();
    223                     $p->publisher = &$this->publisher;
    224                     $p->publish();
    225                 }
    226 
    227                 if ($o->isFile && $withFiles) {
    228                     $f = new File($oid);
    229                     $f->load();
    230                     $f->publisher = &$this->publisher;
    231                     $f->publish();
    232                 }
    233 
    234                 if ($o->isImage && $withFiles) {
    235                     $f = new Image($oid);
    236                     $f->load();
    237                     $f->publisher = &$this->publisher;
    238                     $f->publish();
    239                 }
    240 
    241                 if ($o->isText && $withFiles) {
    242                     $f = new Text($oid);
    243                     $f->load();
    244                     $f->publisher = &$this->publisher;
    245                     $f->publish();
    246                 }
    247 
    248                 if ($o->isFolder && $subdirs) {
    249                     $f = new Folder($oid);
    250                     $f->load();
    251                     $f->publisher = &$this->publisher;
    252                     $f->publish($withPages, $withFiles, true);
    253                 }
    254             }
    255             catch( Exception $e)
    256             {
    257                 // Maybe it is possible to start on with the next one?
    258                 // But we have to throw an exception here to inform the UI...
    259 
    260                 // Lets wrap it.
    261                 throw new \LogicException("Could not publish ".$o->__toString().": ".$e->getMessage(),$e->getCode(),$e);
    262             }
    263 		}
    264 	}
    265 
    266 
    267 	function getObjectIdByFileName( $filename )
    268 	{
    269 		$db = db_connection();
    270 		
    271 		$sql = $db->sql('SELECT id FROM {{object}}'.
    272 		               '  WHERE parentid={objectid}'.
    273 		               '    AND filename={filename}' );
    274 		$sql->setInt   ('objectid' ,$this->objectid );
    275 		$sql->setString('filename' ,$filename       );
    276 		
    277 		return( intval($sql->getOne()) );
    278 	}
    279 
    280 
    281 	
    282 	public function getPages()
    283 	{
    284 		$db = db_connection();
    285 
    286 		$sql = $db->sql('SELECT id FROM {{object}} '.
    287 		               '  WHERE parentid={objectid} AND typeid='.BaseObject::TYPEID_PAGE.
    288 		               '  ORDER BY orderid ASC' );
    289 		$sql->setInt( 'objectid' ,$this->objectid  );
    290 
    291 		return $sql->getCol();
    292 	}
    293 
    294 	
    295 	/**
    296 	 * Ermittelt die erste Seite oder Verkn�pfung in diesem Ordner.
    297 	 *
    298 	 * @return BaseObject Objekt
    299 	 */
    300 	public function getFirstPage()
    301 	{
    302 		$db = db_connection();
    303 
    304 		$sql = $db->sql('SELECT id FROM {{object}} '.
    305 		               '  WHERE parentid={objectid}'.
    306 		               '    AND (typeid='.BaseObject::TYPEID_PAGE.')'.
    307 		               '  ORDER BY orderid ASC' );
    308 		$sql->setInt( 'objectid' ,$this->objectid  );
    309 
    310 		$oid = intval($sql->getOne());
    311 		
    312 		if	( $oid != 0 )
    313 			$o = new BaseObject($oid);
    314 		else
    315 			$o = null;
    316 
    317 		return $o;
    318 	}
    319 
    320 
    321 	/**
    322 	 * Ermittelt die erste Seite oder Verkn�pfung in diesem Ordner.
    323 	 *
    324 	 * @return BaseObject Objekt
    325 	 */
    326 	function getFirstPageOrLink()
    327 	{
    328 		$db = db_connection();
    329 
    330 		$sql = $db->sql('SELECT id FROM {{object}} '.
    331 		               '  WHERE parentid={objectid}'.
    332 		               '    AND (typeid='.BaseObject::TYPEID_PAGE.' OR typeid='.BaseObject::TYPEID_LINK.')'.
    333 		               '  ORDER BY orderid ASC' );
    334 		$sql->setInt( 'objectid' ,$this->objectid  );
    335 
    336 		$oid = intval($sql->getOne());
    337 		
    338 		if	( $oid != 0 )
    339 			$o = new BaseObject($oid);
    340 		else
    341 			$o = null;
    342 
    343 		return $o;
    344 	}
    345 
    346 
    347 	function getLastPageOrLink()
    348 	{
    349 		$db = db_connection();
    350 
    351 		$sql = $db->sql('SELECT id FROM {{object}} '.
    352 		               '  WHERE parentid={objectid}'.
    353 		               '    AND (typeid='.BaseObject::TYPEID_PAGE.' OR typeid='.BaseObject::TYPEID_LINK.')'.
    354 		               '  ORDER BY orderid DESC' );
    355 		$sql->setInt( 'objectid' ,$this->objectid  );
    356 
    357 		$oid = intval($sql->getOne());
    358 		
    359 		if	( $oid != 0 )
    360 			$o = new BaseObject($oid);
    361 		else
    362 			$o = null;
    363 
    364 		return $o;
    365 	}
    366 
    367 	
    368 	function getFiles()
    369 	{
    370 		$db = db_connection();
    371 
    372 		$sql = $db->sql('SELECT id FROM {{object}} '.
    373 		               '  WHERE parentid={objectid} AND typeid='.BaseObject::TYPEID_FILE.
    374 		               '  ORDER BY orderid ASC' );
    375 		$sql->setInt( 'objectid' ,$this->objectid  );
    376 
    377 		return $sql->getCol();
    378 	}
    379 
    380 
    381 	
    382 	/**
    383 	 * Liefert eine Liste von allen Dateien in diesem Ordner.
    384 	 *
    385 	 * @return Array Schl�ssel=Objekt-Id, Wert=Dateiname
    386 	 */
    387 	function getFileFilenames()
    388 	{
    389 		$db = db_connection();
    390 
    391 		$sql = $db->sql('SELECT id,filename FROM {{object}} '.
    392 		               '  WHERE parentid={objectid} AND typeid='.BaseObject::TYPEID_FILE.
    393 		               '  ORDER BY orderid ASC' );
    394 		$sql->setInt( 'objectid' ,$this->objectid  );
    395 
    396 		return $sql->getAssoc();
    397 	}
    398 
    399 	
    400 	function getLinks()
    401 	{
    402 		$db = db_connection();
    403 
    404 		$sql = $db->sql('SELECT id FROM {{object}} '.
    405 		               '  WHERE parentid={objectid} AND typeid='.BaseObject::TYPEID_LINK.
    406 		               '  ORDER BY orderid ASC' );
    407 		$sql->setInt( 'objectid' ,$this->objectid  );
    408 
    409 		return $sql->getCol();
    410 	}
    411 
    412 	
    413 	// Rechte f?r diesen Ordner hinzuf?gen
    414 	function addrights( $rights,$inherit = true )
    415 	{
    416 		global $SESS;
    417 
    418 		$SESS['rights'][$rights['projectid']][$this->folderid]['show'] = true;
    419 
    420 		if   ($rights['read'] == '1')
    421 			$SESS['rights'][$rights['projectid']][$this->folderid]['read'] = 1;
    422 		if   ($rights['write'] == '1')
    423 			$SESS['rights'][$rights['projectid']][$this->folderid]['write'] = 1;
    424 		if   ($rights['create'] == '1')
    425 			$SESS['rights'][$rights['projectid']][$this->folderid]['create'] = 1;
    426 		if   ($rights['delete'] == '1')
    427 			$SESS['rights'][$rights['projectid']][$this->folderid]['delete'] = 1;
    428 		if   ($rights['publish'] == '1')
    429 			$SESS['rights'][$rights['projectid']][$this->folderid]['publish'] = 1;
    430 		
    431 		// Rechte auf Unterordner vererben
    432 		// sowie f?r ?bergeordnete Ordner die Anzeige erzwingen 	
    433 		if   ( $inherit )
    434 		{
    435 			// ?bergeordnete Ordner ermitteln
    436 			$parentfolder = $this->parentObjectFileNames();
    437 
    438 			// ?bergeordnete Ordner immer anzeigen (Schalter 'show'=true)
    439 			foreach( $parentfolder as $folderid=>$name )
    440 			{
    441 				$f = new Folder( $folderid );
    442 				$f->projectid = $this->projectid;
    443 				$f->addrights( array('projectid'=>$rights['projectid']),false );
    444 				unset($f);
    445 			}
    446 
    447 			$f = new Folder( 'null' );
    448 			$f->projectid = $this->projectid;
    449 			$f->addrights( array('projectid'=>$rights['projectid']),false );
    450 			unset($f);
    451 
    452 
    453 			// Unterordner ermitteln
    454 			//echo "Kurz vor subfolderberechnung, folderid ist ".$this->folderid.'<br>';
    455 			$subfolder = $this->subfolder();
    456 
    457 			// Rechte weitergeben
    458 			foreach( $subfolder as $folderid=>$name )
    459 			{
    460 				$f = new Folder( $folderid );
    461 				$f->projectid = $this->projectid;
    462 				$f->addrights( $rights,false );
    463 				unset($f);
    464 			}
    465 		}
    466 	}
    467 
    468 
    469     /**
    470      * Ermitteln des Dateinamens.
    471      * @return String Dateiname
    472      */
    473     public function filename()
    474     {
    475         $filenameConfig = config('filename');
    476 
    477         if	( $filenameConfig['edit'] )
    478         {
    479             if   ( $this->filename == '' )
    480                 // Filename ist eigentlich ein Pflichtfeld, daher kann dies nahezu nie auftreten.
    481                 // Rein technisch kann der Filename aber leer sein.
    482                 return $this->objectid;
    483             else
    484                 return BaseObject::urlify($this->name);
    485         }
    486         else
    487         {
    488             // Filename is not edited, so we are generating a pleasant filename.
    489             switch( $filenameConfig['style'] )
    490             {
    491                 case 'longid':
    492                     // Eine etwas laengere ID als Dateinamen benutzen
    493                     return base_convert(str_pad($this->objectid,6,'a'),11,10);
    494 
    495                 case 'short':
    496                     // So kurz wie moeglich: Erhoehen der Basis vom 10 auf 36.
    497                     // Beispiele:
    498                     // 1  -> 1
    499                     // 10 -> a
    500                     return base_convert($this->objectid,10,36);
    501 
    502                 case 'md5':
    503                     // MD5-Summe als Dateinamen verwenden
    504                     // Achtung: Kollisionen sind unwahrscheinlich, aber theoretisch möglich.
    505                     return  md5(md5($this->objectid));
    506 
    507                 case  'ss':
    508                     // Imitieren von "StoryServer" URLs. Wers braucht.
    509                     return $this->objectid;
    510 
    511                 case  'title':
    512                     // Achtung: Kollisionen sind möglich.
    513                     // COLLISION ALARM! THIS IS NOT A GOOD IDEA!
    514                     return  BaseObject::urlify($this->name);
    515 
    516                 case 'id':
    517                 default:
    518                     // Einfach die Objekt-Id als Dateinamen verwenden.
    519                     return $this->objectid;
    520 
    521             }
    522         }
    523     }
    524 
    525 
    526 
    527 
    528 	// Ermitteln aller Unterordner
    529 	//
    530 	public function subfolder()
    531 	{
    532 		$stmt = db()->sql(<<<SQL
    533 
    534 SELECT id FROM {{object}}
    535 		                 WHERE parentid={objectid} AND typeid={typeid}
    536 		                 ORDER BY orderid ASC
    537 SQL
    538         );
    539 
    540 		$stmt->setInt( 'objectid' ,$this->objectid        );
    541 		$stmt->setInt( 'typeid'   ,BaseObject::TYPEID_FOLDER );
    542 
    543 		$this->subfolders = $stmt->getCol();
    544 
    545 		return $this->subfolders;
    546 	}
    547 
    548 	
    549 	
    550 	public function getSubfolderFilenames()
    551 	{
    552 		$stmt = db()->sql(<<<SQL
    553 SELECT id,filename FROM {{object}}
    554 		                 WHERE parentid={objectid} AND typeid={typeid}
    555 		                 ORDER BY orderid ASC
    556 SQL
    557         );
    558 
    559 		$stmt->setInt( 'objectid' ,$this->objectid        );
    560         $stmt->setInt( 'typeid'   ,BaseObject::TYPEID_FOLDER );
    561 
    562 		return $stmt->getAssoc();
    563 	}
    564 
    565 	
    566 	
    567 	/**
    568 	 * Ermitteln aller Unterordner (rekursives Absteigen).
    569 	 * 
    570 	 */
    571 	function getAllSubFolderIds()
    572 	{
    573 		$ids = array();
    574 
    575 		foreach( $this->getSubFolderIds() as $id )
    576 		{
    577 			$ids[] = $id;
    578 
    579 			$f = new Folder( $id );
    580 			if	( !empty($this->projectid) )
    581 				$f->projectid = $this->projectid;
    582 
    583 			// Rekursiver Aufruf für alle Unterordner
    584 			foreach( $f->getAllSubFolderIds() as $xid )
    585 			{
    586 				$ids[] = $xid;
    587 			}
    588 		}
    589 
    590 		return $ids;
    591 	}
    592 
    593 
    594 	/**
    595 	 * Loeschen dieses Ordners.
    596 	 * Der Ordner wird nur geloescht, wenn er keine Unterelemente mehr enth?lt.
    597 	 * Zum Loeschen inklusive Unterelemente dient die Methode deleteAll()
    598      *
    599      * @throws \Exception if folder contains elements
    600 	 */
    601 	function delete()
    602 	{
    603 		$db = db_connection();
    604 
    605 		// Nur loeschen, wenn es keine Unterelemente gibt
    606 		if	( count( $this->getObjectIds() ) == 0 )
    607 		{
    608 			$sql = $db->sql( 'UPDATE {{element}} '.
    609 			                '  SET folderobjectid=NULL '.
    610 			                '  WHERE folderobjectid={objectid}' );
    611 			$sql->setInt('objectid',$this->objectid);
    612 			$sql->query();
    613 	
    614 			$sql = $db->sql( 'DELETE FROM {{folder}} '.
    615 			                '  WHERE objectid={objectid}' );
    616 			$sql->setInt('objectid',$this->objectid);
    617 			$sql->query();
    618 	
    619 			$this->objectDelete();
    620 		}
    621 		else {
    622 		    throw new \RuntimeException('There are children in the folder '.$this->objectid.'.');
    623         }
    624 	}
    625 
    626 	
    627 	/**
    628 	 * Rekursives loeschen aller Inhalte
    629 	 *
    630 	 * Loeschen aller Inhalte dieses Ordners
    631 	 * inclusive aller Unterelemente
    632 	 */
    633 	function deleteAll()
    634 	{
    635 		$db = db_connection();
    636 
    637 		// L?schen aller Unterordner
    638 		foreach( $this->subfolder() as $folderid )
    639 		{
    640 			$folder = new Folder( $folderid );
    641 			{
    642 				$folder->deleteAll();
    643 			}
    644 		}
    645 		
    646 		// L?schen aller Seiten,Verknuepfungen und Dateien in
    647 		// diesem Ordner
    648 		foreach( $this->getObjectIds() as $oid )
    649 		{
    650 			$object = new BaseObject( $oid );
    651 			{
    652 				$object->load();
    653 
    654 				if	( $object->isPage )
    655 				{
    656 					$page = new Page( $oid );
    657 					$page->load();
    658 					$page->delete();
    659 				}
    660 
    661 				if	( $object->isLink )
    662 				{
    663 					$link = new Link( $oid );
    664 					$link->load();
    665 					$link->delete();
    666 				}
    667 
    668 				if	( $object->isUrl )
    669 				{
    670 					$url = new Url( $oid );
    671                     $url->load();
    672                     $url->delete();
    673 				}
    674 
    675 				if	( $object->isFile )
    676 				{
    677 					$file = new File( $oid );
    678 					$file->load();
    679 					$file->delete();
    680 				}
    681 				if	( $object->isImage )
    682 				{
    683 					$file = new Image( $oid );
    684 					$file->load();
    685 					$file->delete();
    686 				}
    687 				if	( $object->isText )
    688 				{
    689 					$file = new Text( $oid );
    690 					$file->load();
    691 					$file->delete();
    692 				}
    693 			}
    694 		}
    695 
    696 		// Zum Abschluss den aktuellen Ordner loeschen
    697 		$this->delete();
    698 	}
    699 
    700 	
    701 	function getSubFolderIds()
    702 	{
    703 		return $this->subfolder();
    704 	}
    705 	
    706 	
    707 	
    708 	/**
    709 	 * Ermittelt die letzten Änderung in diesem Ordner.
    710 	 * @return Array[Objektid]=Array())
    711 	 */
    712 	public function getLastChanges()
    713 	{
    714 	
    715 		$db = db_connection();
    716 	
    717 		$sql = $db->sql( <<<SQL
    718 		SELECT {{object}}.id       as objectid,
    719 		       {{object}}.lastchange_date as lastchange_date,
    720 		       {{object}}.filename as filename,
    721 		       {{object}}.typeid   as typeid,
    722 		       {{name}}.name       as name,
    723 		       {{user}}.name       as username,
    724 		       {{user}}.id         as userid,
    725 		       {{user}}.mail       as usermail,
    726 		       {{user}}.fullname   as userfullname
    727 		  FROM {{object}}
    728 		  LEFT JOIN {{name}}
    729 		         ON {{name}}.objectid = {{object}}.id
    730 				AND {{name}}.languageid = {languageid}
    731 		  LEFT JOIN {{user}}
    732 		         ON {{user}}.id = {{object}}.lastchange_userid
    733 			  WHERE {{object}}.parentid = {folderid}
    734 		   ORDER BY {{object}}.lastchange_date DESC
    735 SQL
    736 		);
    737 	
    738 		// Variablen setzen.
    739 		$sql->setInt( 'folderid', $this->objectid );
    740 	
    741 		$sql->setInt( 'languageid', $this->languageid );
    742 	
    743 		return $sql->getAll();
    744 	}
    745 
    746 
    747     /**
    748      * Stellt fest, ob der Ordner Unterelemente besitzt.
    749      * @return bool
    750      */
    751 	public function hasChildren()
    752     {
    753         return count($this->getObjectIds()) > 0;
    754     }
    755 
    756 }
    757