X-Git-Url: https://git.donarmstrong.com/?p=roundcube.git;a=blobdiff_plain;f=plugins%2Fdatabase_attachments%2Fdatabase_attachments.php;h=32461cff6c7fe66ffe5a418fa51edb1368acf366;hp=919beacbfdecfd6c1770e26a5494d4d41f3a1f0f;hb=a2dd2e41259a5e90016efcd7d083020b95e25527;hpb=fe4a852cd4335d3d2089b13e10d409fa2fa816d8 diff --git a/plugins/database_attachments/database_attachments.php b/plugins/database_attachments/database_attachments.php index 919beac..32461cf 100644 --- a/plugins/database_attachments/database_attachments.php +++ b/plugins/database_attachments/database_attachments.php @@ -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']); } }