commit 033306a3b109cd0ac4e22d2996c4a77f12ce1f52
parent 2c9056034609d1c0eabddd9d67134c67fd8ff5d4
Author: dankert <devnull@localhost>
Date: Mon, 7 Dec 2009 09:50:20 +0100
Funktionen für das automatische Bereinigen von Inhalten aus dem Archiv.
Diffstat:
5 files changed, 99 insertions(+), 20 deletions(-)
diff --git a/actionClasses/ProjectAction.class.php b/actionClasses/ProjectAction.class.php
@@ -205,26 +205,24 @@ class ProjectAction extends Action
/**
* Wartung durchfuehren.
- * @return unknown_type
*/
function maintenanceAction()
{
- if ( !$this->getRequestVar('type')=='check_files' )
+ switch( $this->getRequestVar('type') )
{
- $this->project->checkLostFiles();
- $this->addNotice('project',$this->project->name,'DONE');
- $this->setTemplateVar('done',true);
- }
- elseif ( !$this->getRequestVar('type')=='clean_old_values' )
- {
- $this->project->checkLostFiles();
- $this->addNotice('project',$this->project->name,'DONE');
- $this->setTemplateVar('done',true);
- }
- else
- {
- $this->addValidationError('type');
- return;
+ case 'check_files':
+ $this->project->checkLostFiles();
+ $this->addNotice('project',$this->project->name,'DONE');
+ break;
+
+ case 'check_limit':
+ $this->project->checkLimit();
+ $this->addNotice('project',$this->project->name,'DONE');
+ break;
+
+ default:
+ $this->addValidationError('type');
+ return;
}
}
diff --git a/language/de.ini.php b/language/de.ini.php
@@ -1040,3 +1040,5 @@ USER_USERNAME_DESC = "Mit diesem Namen meldet sich der Benutzer am System an"
USER_YOURPROFILE = "Persönliche Einstellungen"
VALUE = Inhalt
WEEK="Woche"
+PROJECT_CHECK_FILES="Integritätsprüfung der Ordnerstruktur"
+PROJECT_CHECK_LIMIT="Entfernen von alten Inhalten aus dem Archiv"
diff --git a/language/en.ini.php b/language/en.ini.php
@@ -1061,3 +1061,5 @@ MENU_LINK_EDIT_DESC = "Edit target"
MENU_SEARCH_PROP = "Property"
MENU_USER_ADD_DESC = "Add new user"
SETTING="Setting"
+PROJECT_CHECK_FILES="Folder Integritycheck"
+PROJECT_CHECK_LIMIT="Remove old values from archives"
diff --git a/objectClasses/Value.class.php b/objectClasses/Value.class.php
@@ -418,9 +418,78 @@ SQL
$sql->setInt ( 'lastchange_userid',$user->userid );
$db->query( $sql );
+
+ $this->checkLimit();
}
+
+ /**
+ * Pruefen, ob maximale Anzahl von Versionen erreicht.
+ * In diesem Fall die zu alten Versionen löschen.
+ */
+ 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}
+ WHERE elementid = {elementid}
+ AND pageid = {pageid}
+ AND languageid = {languageid}
+ AND active = 0
+ AND publish = 0
+SQL
+ );
+ $sql->setInt( 'elementid' ,$this->element->elementid );
+ $sql->setInt( 'pageid' ,$this->pageid );
+ $sql->setInt( 'languageid',$this->languageid );
+ $values = $db->getCol( $sql );
+
+ if ( count($values) > $limit['min-revisions'] )
+ {
+ $sql = new Sql( <<<SQL
+ DELETE FROM {t_value}
+ WHERE elementid = {elementid}
+ AND pageid = {pageid}
+ AND languageid = {languageid}
+ 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();
+ }
+
+ if ( count($values) > $limit['max-revisions'] )
+ {
+ $sql = new Sql( <<<SQL
+ DELETE FROM {t_value}
+ WHERE elementid = {elementid}
+ AND pageid = {pageid}
+ AND languageid = {languageid}
+ 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();
+ }
+ }
+
+
+
/**
* Diesen Inhalt loeschen
*/
diff --git a/themes/default/templates/project/maintenance.tpl.src.php b/themes/default/templates/project/maintenance.tpl.src.php
@@ -3,9 +3,17 @@ page
window icon:project name:GLOBAL_PROJECT
row
cell colspan:2
- label for:check_files
- checkbox name:check_files
+ fieldset title:message:options
+ row
+ cell colspan:2
+ label for:type_check_limit
+ radio name:type value:check_limit
+ text key:project_check_limit
+ row
+ cell colspan:2
+ label for:type_check_files
+ radio name:type value:check_files
text key:project_check_files
row
cell colspan:2 class:act
- button type:OK-
\ No newline at end of file
+ button type:ok+
\ No newline at end of file