openrat-cms

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

commit 5024fe88928772a1c9c7f062bb745fe7f02c0d17
parent e2c3c15843daccb51aba059560b5b311f9670112
Author: dankert <devnull@localhost>
Date:   Wed, 14 Oct 2009 23:45:08 +0200

Übergeordnete Ordner rekursiv ermitteln.

Diffstat:
objectClasses/Folder.class.php | 73++++++++++++++++++++++++++++---------------------------------------------
1 file changed, 28 insertions(+), 45 deletions(-)

diff --git a/objectClasses/Folder.class.php b/objectClasses/Folder.class.php @@ -775,53 +775,36 @@ EOF function parentObjectNames( $with_root = false, $with_self = false ) { $db = Session::getDatabase(); + + $foid = $this->id; + $idCache = array(); + + while( intval($foid)!=0 ) + { + $sql = new Sql( <<<SQL + +SELECT {t_object}.parentid,{t_object}.id,{t_object}.filename,{t_name}.name FROM {t_object} + LEFT JOIN {t_name} + ON {t_object}.id = {t_name}.objectid + AND {t_name}.languageid = {languageid} + WHERE {t_object}.id={parentid} - $sql = new Sql( <<<EOF -SELECT F0.id AS f0id, - F0.filename AS f0filename, - F1.filename AS f1filename, - F2.filename AS f2filename, - F3.filename AS f3filename, - F4.filename AS f4filename, - F5.filename AS f5filename, - F0NAME.name AS f0name, - F1.id AS f1id, - F1NAME.name AS f1name, - F2.id AS f2id, - F2NAME.name AS f2name, - F3.id AS f3id, - F3NAME.name AS f3name, - F4.id AS f4id, - F4NAME.name AS f4name, - F5.id AS f5id, - F5NAME.name AS f5name - FROM {t_object} AS F0 - LEFT JOIN {t_name} AS F0NAME ON F0NAME.objectid=F0.id AND F0NAME.languageid={languageid} - LEFT JOIN {t_object} AS F1 on F0.parentid=F1.id - LEFT JOIN {t_name} AS F1NAME ON F1NAME.objectid=F1.id AND F1NAME.languageid={languageid} - LEFT JOIN {t_object} AS F2 on F1.parentid=F2.id - LEFT JOIN {t_name} AS F2NAME ON F2NAME.objectid=F2.id AND F2NAME.languageid={languageid} - LEFT JOIN {t_object} AS F3 on F2.parentid=F3.id - LEFT JOIN {t_name} AS F3NAME ON F3NAME.objectid=F3.id AND F3NAME.languageid={languageid} - LEFT JOIN {t_object} AS F4 on F3.parentid=F4.id - LEFT JOIN {t_name} AS F4NAME ON F4NAME.objectid=F4.id AND F4NAME.languageid={languageid} - LEFT JOIN {t_object} AS F5 on F4.parentid=F5.id - LEFT JOIN {t_name} AS F5NAME ON F5NAME.objectid=F5.id AND F5NAME.languageid={languageid} - WHERE F0.id={objectid} -EOF +SQL ); - $sql->setInt('objectid' ,$this->objectid ); - $sql->setInt('languageid',$this->languageid); - - $row = $db->getRow( $sql ); - - $this->addParentfolder( $row['f0id'],$row['f0name'],$row['f0filename'] ); - $this->addParentfolder( $row['f1id'],$row['f1name'],$row['f1filename'] ); - $this->addParentfolder( $row['f2id'],$row['f2name'],$row['f2filename'] ); - $this->addParentfolder( $row['f3id'],$row['f3name'],$row['f3filename'] ); - $this->addParentfolder( $row['f4id'],$row['f4name'],$row['f4filename'] ); - $this->addParentfolder( $row['f5id'],$row['f5name'],$row['f5filename'] ); - + $sql->setInt('languageid',$this->languageid); + $sql->setInt('parentid' ,$foid ); + + $row = $db->getRow( $sql ); + + if ( in_array($row['id'],$idCache)) + Http::serverError('fatal: parent-rekursion in object-id: '.$this->objectid.', double-parent-id: '.$row['id']); + else + $idCache[] = $row['id']; + + $this->addParentfolder( $row['id'],$row['name'],$row['filename'] ); + $foid = $row['parentid']; + } + $this->checkParentFolders($with_root,$with_self); return $this->parentfolders;