diff options
| author | thomasb <thomasb@208e9e7b-5314-0410-a742-e7e81cd9613c> | 2012-03-31 12:25:48 +0000 |
|---|---|---|
| committer | thomasb <thomasb@208e9e7b-5314-0410-a742-e7e81cd9613c> | 2012-03-31 12:25:48 +0000 |
| commit | e6d8f97bf2e0bbb4d95df0c4e030eb7ec6ef75a5 (patch) | |
| tree | 4f6fdadb51cbe1a2bb3b2b06c9bcabb0429d1a84 /plugins/redundant_attachments | |
| parent | 868c169e2a64c1d19a9b6bbcd98f268808dfd173 (diff) | |
Move plugins repository into roundcubemail root folder; svn:externals are not defined anymore
git-svn-id: https://svn.roundcube.net/trunk@6034 208e9e7b-5314-0410-a742-e7e81cd9613c
Diffstat (limited to 'plugins/redundant_attachments')
| -rw-r--r-- | plugins/redundant_attachments/config.inc.php.dist | 13 | ||||
| -rw-r--r-- | plugins/redundant_attachments/package.xml | 63 | ||||
| -rw-r--r-- | plugins/redundant_attachments/redundant_attachments.php | 232 |
3 files changed, 0 insertions, 308 deletions
diff --git a/plugins/redundant_attachments/config.inc.php.dist b/plugins/redundant_attachments/config.inc.php.dist deleted file mode 100644 index 6c317ead1..000000000 --- a/plugins/redundant_attachments/config.inc.php.dist +++ /dev/null @@ -1,13 +0,0 @@ -<?php - -// By default this plugin stores attachments in filesystem -// and copies them into sql database. -// In environments with replicated database it is possible -// to use memcache as a fallback when write-master is unavailable. -$rcmail_config['redundant_attachments_memcache'] = false; - -// When memcache is used, attachment data expires after -// specied TTL time in seconds (max.2592000). Default is 12 hours. -$rcmail_config['redundant_attachments_memcache_ttl'] = 12 * 60 * 60; - -?> diff --git a/plugins/redundant_attachments/package.xml b/plugins/redundant_attachments/package.xml deleted file mode 100644 index 939cf12bd..000000000 --- a/plugins/redundant_attachments/package.xml +++ /dev/null @@ -1,63 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<package xmlns="http://pear.php.net/dtd/package-2.0" xmlns:tasks="http://pear.php.net/dtd/tasks-1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" packagerversion="1.9.0" version="2.0" xsi:schemaLocation="http://pear.php.net/dtd/tasks-1.0 - http://pear.php.net/dtd/tasks-1.0.xsd - http://pear.php.net/dtd/package-2.0 - http://pear.php.net/dtd/package-2.0.xsd"> - <name>redundant_attachments</name> - <channel>pear.roundcube.net</channel> - <summary>Redundant storage for uploaded attachments</summary> - <description> - This plugin provides a redundant storage for temporary uploaded - attachment files. They are stored in both the database backend - as well as on the local file system. - It provides also memcache store as a fallback. - </description> - <lead> - <name>Aleksander Machniak</name> - <user>alec</user> - <email>alec@alec.pl</email> - <active>yes</active> - </lead> - <lead> - <name>Thomas Bruederli</name> - <user>thomasb</user> - <email>roundcube@gmail.com</email> - <active>yes</active> - </lead> - <date>2011-11-21</date> - <version> - <release>1.0</release> - <api>1.0</api> - </version> - <stability> - <release>stable</release> - <api>stable</api> - </stability> - <license uri="http://www.gnu.org/licenses/gpl-2.0.html">GNU GPLv2</license> - <notes>-</notes> - <contents> - <dir baseinstalldir="/" name="/"> - <file name="redundant_attachments.php" role="php"> - <tasks:replace from="@name@" to="name" type="package-info"/> - <tasks:replace from="@package_version@" to="version" type="package-info"/> - </file> - <file name="config.inc.php.dist" role="data"/> - </dir> - <!-- / --> - </contents> - <dependencies> - <required> - <php> - <min>5.2.1</min> - </php> - <pearinstaller> - <min>1.7.0</min> - </pearinstaller> - <package> - <name>filesystem_attachments</name> - <channel>pear.roundcube.net</channel> - </package> - </required> - </dependencies> - <phprelease/> -</package> diff --git a/plugins/redundant_attachments/redundant_attachments.php b/plugins/redundant_attachments/redundant_attachments.php deleted file mode 100644 index 3c71dcb40..000000000 --- a/plugins/redundant_attachments/redundant_attachments.php +++ /dev/null @@ -1,232 +0,0 @@ -<?php -/** - * Redundant attachments - * - * This plugin provides a redundant storage for temporary uploaded - * attachment files. They are stored in both the database backend - * as well as on the local file system. - * - * It provides also memcache store as a fallback (see config file). - * - * This plugin relies on the core filesystem_attachments plugin - * and combines it with the functionality of the database_attachments plugin. - * - * @author Thomas Bruederli <roundcube@gmail.com> - * @author Aleksander Machniak <machniak@kolabsys.com> - * - * Copyright (C) 2011, The Roundcube Dev Team - * Copyright (C) 2011, Kolab Systems AG - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -require_once(INSTALL_PATH . 'plugins/filesystem_attachments/filesystem_attachments.php'); - -class redundant_attachments extends filesystem_attachments -{ - // A prefix for the cache key used in the session and in the key field of the cache table - private $prefix = "ATTACH"; - - // rcube_cache instance for SQL DB - private $cache; - - // rcube_cache instance for memcache - private $mem_cache; - - private $loaded; - - /** - * Default constructor - */ - function init() - { - parent::init(); - } - - /** - * Loads plugin configuration and initializes cache object(s) - */ - private function _load_drivers() - { - if ($this->loaded) { - return; - } - - $rcmail = rcmail::get_instance(); - - // load configuration - $this->load_config(); - - // Init SQL cache (disable cache data serialization) - $this->cache = $rcmail->get_cache($this->prefix, 'db', 0, false); - - // Init memcache (fallback) cache - if ($rcmail->config->get('redundant_attachments_memcache')) { - $ttl = 12 * 60 * 60; // 12 hours - $ttl = (int) $rcmail->config->get('redundant_attachments_memcache_ttl', $ttl); - $this->mem_cache = $rcmail->get_cache($this->prefix, 'memcache', $ttl, false); - } - - $this->loaded = true; - } - - /** - * Helper method to generate a unique key for the given attachment file - */ - private function _key($args) - { - $uname = $args['path'] ? $args['path'] : $args['name']; - return $args['group'] . md5(mktime() . $uname . $_SESSION['user_id']); - } - - /** - * Save a newly uploaded attachment - */ - function upload($args) - { - $args = parent::upload($args); - - $this->_load_drivers(); - - $key = $this->_key($args); - $data = base64_encode(file_get_contents($args['path'])); - - $status = $this->cache->write($key, $data); - - if (!$status && $this->mem_cache) { - $status = $this->mem_cache->write($key, $data); - } - - if ($status) { - $args['id'] = $key; - $args['status'] = true; - } - - return $args; - } - - /** - * Save an attachment from a non-upload source (draft or forward) - */ - function save($args) - { - $args = parent::save($args); - - $this->_load_drivers(); - - if ($args['path']) - $args['data'] = file_get_contents($args['path']); - - $key = $this->_key($args); - $data = base64_encode($args['data']); - - $status = $this->cache->write($key, $data); - - if (!$status && $this->mem_cache) { - $status = $this->mem_cache->write($key, $data); - } - - if ($status) { - $args['id'] = $key; - $args['status'] = true; - } - - return $args; - } - - /** - * Remove an attachment from storage - * This is triggered by the remove attachment button on the compose screen - */ - function remove($args) - { - parent::remove($args); - - $this->_load_drivers(); - - $status = $this->cache->remove($args['id']); - - if (!$status && $this->mem_cache) { - $status = $this->cache->remove($args['id']); - } - - // we cannot trust the result of any of the methods above - // assume true, attachments will be removed on cleanup - $args['status'] = true; - - return $args; - } - - /** - * When composing an html message, image attachments may be shown - * For this plugin, $this->get() will check the file and - * return it's contents - */ - function display($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 attachment_display hook. - */ - function get($args) - { - // attempt to get file from local file system - $args = parent::get($args); - - if ($args['path'] && ($args['status'] = file_exists($args['path']))) - return $args; - - $this->_load_drivers(); - - // fetch from database if not found on FS - $data = $this->cache->read($args['id']); - - // fetch from memcache if not found on FS and DB - if (($data === false || $data === null) && $this->mem_cache) { - $data = $this->mem_cache->read($args['id']); - } - - if ($data) { - $args['data'] = base64_decode($data); - $args['status'] = true; - } - - return $args; - } - - /** - * Delete all temp files associated with this user - */ - function cleanup($args) - { - $this->_load_drivers(); - - if ($this->cache) { - $this->cache->remove($args['group'], true); - } - - if ($this->mem_cache) { - $this->mem_cache->remove($args['group'], true); - } - - parent::cleanup($args); - - $args['status'] = true; - - return $args; - } -} |
