openrat-cms

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

commit 8fd638da20d18ca498c1b08f6660eb09ac9ab179
parent 2a424146f34841a8a76296a81e575882b4da5663
Author: dankert <devnull@localhost>
Date:   Tue,  8 Dec 2009 01:08:24 +0100

Funktionen für das automatische Bereinigen von Inhalten aus dem Archiv.

Diffstat:
objectClasses/Folder.class.php | 23+++++++++++++++++++++--
objectClasses/Project.class.php | 36++++++++++++++++++++++++++++++++++--
objectClasses/Value.class.php | 42++++++++++++++++++++++++------------------
3 files changed, 79 insertions(+), 22 deletions(-)

diff --git a/objectClasses/Folder.class.php b/objectClasses/Folder.class.php @@ -344,6 +344,15 @@ class Folder extends Object } + + /** + * Ermittelt alle Objekte vom gewünschten Typ, die sic in + * diesem Projekt befinden. + * + * @see objectClasses/Object#getAllObjectIds() + * @param types Array + * @return Liste von Object-Ids + */ function getAllObjectIds( $types=array('folder','page','link','file') ) { // Html::debug($types,'Typen'); @@ -357,8 +366,18 @@ class Folder extends Object ' OR is_page ={is_page}' . ' OR is_link ={is_link} )' . ' ORDER BY orderid ASC' ); - $project = Session::getProject(); - $sql->setInt('projectid',$project->projectid); + + if (isset($this->projectid)) + { + $projectid = $this->projectid; + } + else + { + $project = Session::getProject(); + $projectid = $project->projectid; + } + + $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); diff --git a/objectClasses/Project.class.php b/objectClasses/Project.class.php @@ -208,7 +208,12 @@ class Project /** - * Ermitteln des Root-Ordners zu diesem Projekt + * Ermitteln des Wurzel-Ordners fuer dieses Projekt. + * + * Der Wurzelordner ist der einzige Ordnerhat in diesem + * Projekt, der kein Elternelement besitzt. + * + * @return Objekt-Id des Wurzelordners */ function getRootObjectId() { @@ -450,9 +455,36 @@ SQL + /** + * Entfernt nicht mehr notwendige Inhalte aus dem Archiv. + */ function checkLimit() { - // TODO + $root = new Folder( $this->getRootObjectId() ); + $root->projectid = $this->projectid; + + $pages = $root->getAllObjectIds( array('page') ); + $languages = $this->getLanguageIds(); + + foreach( $pages as $objectid ) + { + $page = new Page( $objectid ); + $page->load(); + foreach( $page->getElementIds() as $eid ) + { + foreach( $languages as $lid ) + { + //Html::debug($lid,'lid'); + $value = new Value(); + $value->element = new Element($eid); + $value->pageid = $page->pageid; + $value->languageid = $lid; + + $value->checkLimit(); + } + } + } + } diff --git a/objectClasses/Value.class.php b/objectClasses/Value.class.php @@ -419,7 +419,10 @@ SQL $db->query( $sql ); - $this->checkLimit(); + // Nur ausfuehren, wenn in Konfiguration aktiviert. + $limit = config('content','revision-limit'); + if ( $limit['enabled'] ) + $this->checkLimit(); } @@ -430,20 +433,17 @@ SQL function checkLimit() { $limit = config('content','revision-limit'); - - // Nur ausfuehren, wenn in Konfiguration aktiviert. - if ( !$limit['enabled'] ) - return; $db = db_connection(); $sql = new Sql( <<<SQL - SELECT valueid FROM {t_value} + SELECT id FROM {t_value} WHERE elementid = {elementid} AND pageid = {pageid} AND languageid = {languageid} - AND active = 0 - AND publish = 0 + AND active = 0 + AND publish = 0 + ORDER BY id SQL ); $sql->setInt( 'elementid' ,$this->element->elementid ); @@ -458,15 +458,18 @@ SQL WHERE elementid = {elementid} AND pageid = {pageid} AND languageid = {languageid} - AND active = 0 - AND publish = 0 + AND active = 0 + AND publish = 0 AND lastchange_date < {min_date} AND id < {min_id} SQL ); - $sql->setInt('min_date',$limit['max-age']); - $sql->setInt('min_id' ,$values[$limit['min-revisions']-1]); - $sql->query(); + $sql->setInt( 'elementid' ,$this->element->elementid ); + $sql->setInt( 'pageid' ,$this->pageid ); + $sql->setInt( 'languageid',$this->languageid ); + $sql->setInt( 'min_date' ,$limit['max-age']*24*60*60); + $sql->setInt( 'min_id' ,$values[count($values)-$limit['min-revisions']]); + $db->query($sql); } if ( count($values) > $limit['max-revisions'] ) @@ -476,15 +479,18 @@ SQL WHERE elementid = {elementid} AND pageid = {pageid} AND languageid = {languageid} - AND active = 0 - AND publish = 0 + AND active = 0 + AND publish = 0 AND lastchange_date < {min_date} AND id < {min_id} SQL ); - $sql->setInt('min_date',$limit['min-age']); - $sql->setInt('min_id' ,$values[$limit['max-revisions']-1]); - $sql->query(); + $sql->setInt( 'elementid' ,$this->element->elementid ); + $sql->setInt( 'pageid' ,$this->pageid ); + $sql->setInt( 'languageid',$this->languageid ); + $sql->setInt( 'min_date' ,$limit['min-age']*24*60*60); + $sql->setInt( 'min_id' ,$values[count($values)-$limit['max-revisions']]); + $db->query($sql); } }