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:
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);
}
}