]> git.donarmstrong.com Git - roundcube.git/blobdiff - plugins/database_attachments/database_attachments.php
Imported Upstream version 0.6+dfsg
[roundcube.git] / plugins / database_attachments / database_attachments.php
index 919beacbfdecfd6c1770e26a5494d4d41f3a1f0f..32461cff6c7fe66ffe5a418fa51edb1368acf366 100644 (file)
@@ -22,9 +22,10 @@ class database_attachments extends filesystem_attachments
     /**
      * Helper method to generate a unique key for the given attachment file
      */
-    private function _key($filepath)
+    private function _key($args)
     {
-        return  $this->cache_prefix.md5(mktime().$filepath.$_SESSION['user_id']); 
+        $uname = $args['path'] ? $args['path'] : $args['name'];
+        return  $this->cache_prefix . $args['group'] . md5(mktime() . $uname . $_SESSION['user_id']);
     }
 
     /**
@@ -34,8 +35,14 @@ class database_attachments extends filesystem_attachments
     {
         $args['status'] = false;
         $rcmail = rcmail::get_instance();
-        $key = $this->_key($args['path']);
-        $data = base64_encode(file_get_contents($args['path']));
+        $key = $this->_key($args);
+
+        $data = file_get_contents($args['path']);
+
+        if ($data === false)
+            return $args;
+
+        $data = base64_encode($data);
 
         $status = $rcmail->db->query(
             "INSERT INTO ".get_table_name('cache')."
@@ -44,13 +51,13 @@ class database_attachments extends filesystem_attachments
             $_SESSION['user_id'],
             $key,
             $data);
-            
+
         if ($status) {
             $args['id'] = $key;
             $args['status'] = true;
             unset($args['path']);
         }
-        
+
         return $args;
     }
 
@@ -62,10 +69,14 @@ class database_attachments extends filesystem_attachments
         $args['status'] = false;
         $rcmail = rcmail::get_instance();
 
-        $key = $this->_key($args['name']);
+        $key = $this->_key($args);
+
+        if ($args['path']) {
+            $args['data'] = file_get_contents($args['path']);
 
-       if ($args['path'])
-           $args['data'] = file_get_contents($args['path']);
+            if ($args['data'] === false)
+                return $args;
+        }
 
         $data = base64_encode($args['data']);
 
@@ -76,7 +87,7 @@ class database_attachments extends filesystem_attachments
             $_SESSION['user_id'],
             $key,
             $data);
-        
+
         if ($status) {
             $args['id'] = $key;
             $args['status'] = true;
@@ -99,11 +110,11 @@ class database_attachments extends filesystem_attachments
              AND    cache_key=?",
             $_SESSION['user_id'],
             $args['id']);
-    
+
         if ($status) {
             $args['status'] = true;
         }
-        
+
         return $args;
     }
 
@@ -124,7 +135,7 @@ class database_attachments extends filesystem_attachments
     function get($args)
     {
         $rcmail = rcmail::get_instance();
-        
+
         $sql_result = $rcmail->db->query(
             "SELECT cache_id, data
              FROM ".get_table_name('cache')."
@@ -137,20 +148,21 @@ class database_attachments extends filesystem_attachments
             $args['data'] = base64_decode($sql_arr['data']);
             $args['status'] = true;
         }
-        
+
         return $args;
     }
-    
+
     /**
      * Delete all temp files associated with this user
      */
     function cleanup($args)
     {
+        $prefix = $this->cache_prefix . $args['group'];
         $rcmail = rcmail::get_instance();
         $rcmail->db->query(
             "DELETE FROM ".get_table_name('cache')."
              WHERE  user_id=?
-             AND cache_key like '{$this->cache_prefix}%'",
+             AND cache_key like '{$prefix}%'",
             $_SESSION['user_id']);
     }
 }