]> git.donarmstrong.com Git - roundcube.git/blobdiff - plugins/database_attachments/database_attachments.php
Fix symlink mess
[roundcube.git] / plugins / database_attachments / database_attachments.php
index a8ac62e2630a15b8cca3d1043f4cd196cef486fe..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,32 +110,32 @@ class database_attachments extends filesystem_attachments
              AND    cache_key=?",
             $_SESSION['user_id'],
             $args['id']);
-    
+
         if ($status) {
             $args['status'] = true;
         }
-        
+
         return $args;
     }
 
     /**
      * When composing an html message, image attachments may be shown
-     * For this plugin, $this->get_attachment will check the file and
+     * For this plugin, $this->get() will check the file and
      * return it's contents
      */
     function display($args)
     {
-        return $this->get_attachment($args);
+        return $this->get($args);
     }
 
     /**
      * When displaying or sending the attachment the file contents are fetched
-     * using this method. This is also called by the display_attachment hook.
+     * using this method. This is also called by the attachment_display hook.
      */
-    function get_attachment($args)
+    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']);
     }
 }