| | |
| | | | program/include/rcube_plugin_api.php | |
| | | | | |
| | | | This file is part of the Roundcube Webmail client | |
| | | | Copyright (C) 2008-2009, The Roundcube Dev Team | |
| | | | Licensed under the GNU GPL | |
| | | | Copyright (C) 2008-2011, The Roundcube Dev Team | |
| | | | | |
| | | | Licensed under the GNU General Public License version 3 or | |
| | | | any later version with exceptions for skins & plugins. | |
| | | | See the README file for a full license statement. | |
| | | | | |
| | | | PURPOSE: | |
| | | | Plugins repository | |
| | |
| | | class rcube_plugin_api |
| | | { |
| | | static private $instance; |
| | | |
| | | |
| | | public $dir; |
| | | public $url = 'plugins/'; |
| | | public $output; |
| | | public $config; |
| | | |
| | | public $allowed_prefs = array(); |
| | | public $allowed_session_prefs = array(); |
| | | |
| | | public $handlers = array(); |
| | | private $plugins = array(); |
| | | private $tasks = array(); |
| | |
| | | private $actionmap = array(); |
| | | private $objectsmap = array(); |
| | | private $template_contents = array(); |
| | | private $required_plugins = array('filesystem_attachments'); |
| | | private $required_plugins = array('filesystem_attachments', 'jqueryui'); |
| | | private $active_hook = false; |
| | | |
| | | // Deprecated names of hooks, will be removed after 0.5-stable release |
| | |
| | | 'delete_identity' => 'identity_delete', |
| | | 'save_identity' => 'identity_update', |
| | | 'identity_save' => 'identity_update', |
| | | // to be removed after 0.8 |
| | | 'imap_init' => 'storage_init', |
| | | 'mailboxes_list' => 'storage_folders', |
| | | ); |
| | | |
| | | /** |
| | |
| | | if (is_subclass_of($plugin, 'rcube_plugin')) { |
| | | // ... task, request type and framed mode |
| | | if ((!$plugin->task || preg_match('/^('.$plugin->task.')$/i', $rcmail->task)) |
| | | && (!$plugin->noajax || is_a($rcmail->output, 'rcube_template')) |
| | | && (!$plugin->noajax || (is_object($rcmail->output) && is_a($rcmail->output, 'rcube_template'))) |
| | | && (!$plugin->noframe || empty($_REQUEST['_framed'])) |
| | | ) { |
| | | $plugin->init(); |
| | | $this->plugins[$plugin_name] = $plugin; |
| | | } |
| | | if (!empty($plugin->allowed_prefs)) { |
| | | $this->allowed_prefs = array_merge($this->allowed_prefs, $plugin->allowed_prefs); |
| | | } |
| | | return true; |
| | | } |
| | |
| | | raise_error(array('code' => 521, 'type' => 'php', |
| | | 'file' => __FILE__, 'line' => __LINE__, |
| | | 'message' => "Invalid callback function for $hook"), true, false); |
| | | } |
| | | |
| | | /** |
| | | * Allow a plugin object to unregister a callback. |
| | | * |
| | | * @param string $hook Hook name |
| | | * @param mixed $callback String with global function name or array($obj, 'methodname') |
| | | */ |
| | | public function unregister_hook($hook, $callback) |
| | | { |
| | | $callback_id = array_search($callback, $this->handlers[$hook]); |
| | | if ($callback_id !== false) { |
| | | unset($this->handlers[$hook][$callback_id]); |
| | | } |
| | | } |
| | | |
| | | |
| | |
| | | |
| | | |
| | | /** |
| | | * Returns list of loaded plugins names |
| | | * |
| | | * @return array List of plugin names |
| | | */ |
| | | public function loaded_plugins() |
| | | { |
| | | return array_keys($this->plugins); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * Callback for template_container hooks |
| | | * |
| | | * @param array $attrib |