]> source.dussan.org Git - nextcloud-server.git/commitdiff
expire files in trash bin after 30 days
authorBjörn Schießle <schiessle@owncloud.com>
Fri, 18 Jan 2013 14:12:38 +0000 (15:12 +0100)
committerBjörn Schießle <schiessle@owncloud.com>
Fri, 18 Jan 2013 14:12:38 +0000 (15:12 +0100)
apps/files_trashbin/lib/trash.php

index 322f5679b7d5bb44c6e4b885f17bb574a65142e1..1b0b9cef4bdbf7ac67ae3f78646a7a3c9077d05e 100644 (file)
@@ -23,6 +23,8 @@
 namespace OCA_Trash;\r
 \r
 class Trashbin {
+       
+       const DELETEAFTER=30; // how long do we keep files in the trash bin (number of days)
 
        /**
         * move file to the trash bin
@@ -124,9 +126,33 @@ class Trashbin {
        /**\r
         * clean up the trash bin\r
         */\r
-       private static function expire() {\r
-               //TODO: implement expire function
-               return true;\r
+       private static function expire() {
+               
+               $view = new \OC_FilesystemView('/'.\OCP\User::getUser());
+               $user = \OCP\User::getUser();
+               
+               $query = \OC_DB::prepare('SELECT location,type,id,timestamp FROM *PREFIX*files_trash WHERE user=?');\r
+               $result = $query->execute(array($user))->fetchAll();
+               
+               $limit = time() - (self::DELETEAFTER * 86400);
+
+               foreach ( $result as $r ) {
+                       $timestamp = $r['timestamp'];
+                       $filename = $r['id'];
+                       if ( $r['timestamp'] < $limit ) {
+                               $view->unlink('files_trashbin/'.$filename.'.d'.$timestamp);
+                               if ($r['type'] == 'dir') {
+                                       $view->unlink('versions_trashbin/'.$filename.'.d'.$timestamp);
+                               } else if ( $versions = self::getVersionsFromTrash($filename, $timestamp) ) {
+                                       foreach ($versions as $v) {
+                                               $view->unlink('versions_trashbin/'.$filename.'.v'.$v.'.d'.$timestamp);
+                                       }                       
+                               }
+                       }
+               }
+               
+               $query = \OC_DB::prepare('DELETE FROM *PREFIX*files_trash WHERE user=? AND timestamp<?');\r
+               $query->execute(array($user,$limit));\r
        }
        
        /**