| | |
| | | /** |
| | | * The plugin loader and global API |
| | | * |
| | | * @package Core |
| | | * @package PluginAPI |
| | | */ |
| | | class rcube_plugin_api |
| | | { |
| | |
| | | |
| | | public $handlers = array(); |
| | | private $plugins = array(); |
| | | private $tasks = array(); |
| | | private $actions = array(); |
| | | private $actionmap = array(); |
| | | private $objectsmap = array(); |
| | |
| | | * @param string Action name (_task=mail&_action=plugin.foo) |
| | | * @param string Plugin name that registers this action |
| | | * @param mixed Callback: string with global function name or array($obj, 'methodname') |
| | | * @param string Task name registered by this plugin |
| | | */ |
| | | public function register_action($action, $owner, $callback) |
| | | public function register_action($action, $owner, $callback, $task = null) |
| | | { |
| | | // check action name |
| | | if (strpos($action, 'plugin.') !== 0) |
| | | if ($task) |
| | | $action = $task.'.'.$action; |
| | | else if (strpos($action, 'plugin.') !== 0) |
| | | $action = 'plugin.'.$action; |
| | | |
| | | // can register action only if it's not taken or registered by myself |
| | |
| | | |
| | | |
| | | /** |
| | | * Register this plugin to be responsible for a specific task |
| | | * |
| | | * @param string Task name (only characters [a-z0-9_.-] are allowed) |
| | | * @param string Plugin name that registers this action |
| | | */ |
| | | public function register_task($task, $owner) |
| | | { |
| | | if ($task != asciiwords($task)) { |
| | | raise_error(array('code' => 526, 'type' => 'php', |
| | | 'file' => __FILE__, 'line' => __LINE__, |
| | | 'message' => "Invalid task name: $task. Only characters [a-z0-9_.-] are allowed"), true, false); |
| | | } |
| | | else if (in_array($task, rcmail::$main_tasks)) { |
| | | raise_error(array('code' => 526, 'type' => 'php', |
| | | 'file' => __FILE__, 'line' => __LINE__, |
| | | 'message' => "Cannot register taks $task; already taken by another plugin or the application itself"), true, false); |
| | | } |
| | | else { |
| | | $this->tasks[$task] = $owner; |
| | | rcmail::$main_tasks[] = $task; |
| | | return true; |
| | | } |
| | | |
| | | return false; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * Checks whether the given task is registered by a plugin |
| | | * |
| | | * @return boolean True if registered, otherwise false |
| | | */ |
| | | public function is_plugin_task($task) |
| | | { |
| | | return $this->tasks[$task] ? true : false; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * Check if a plugin hook is currently processing. |
| | | * Mainly used to prevent loops and recursion. |
| | | * |