From 648db37e68bc1a3944d32b0fd62f65ea0d07cc7e Mon Sep 17 00:00:00 2001
From: alecpl <alec@alec.pl>
Date: Fri, 04 Jun 2010 09:29:48 -0400
Subject: [PATCH] - Fix related parts aren't displayed when got mimetype other than image/* (#1486432)
---
program/include/rcube_plugin_api.php | 51 +++++++++++++++++++++++++++++++++++++++++++++++----
1 files changed, 47 insertions(+), 4 deletions(-)
diff --git a/program/include/rcube_plugin_api.php b/program/include/rcube_plugin_api.php
index c895578..9053a0d 100644
--- a/program/include/rcube_plugin_api.php
+++ b/program/include/rcube_plugin_api.php
@@ -22,7 +22,7 @@
/**
* The plugin loader and global API
*
- * @package Core
+ * @package PluginAPI
*/
class rcube_plugin_api
{
@@ -34,6 +34,7 @@
public $handlers = array();
private $plugins = array();
+ private $tasks = array();
private $actions = array();
private $actionmap = array();
private $objectsmap = array();
@@ -69,7 +70,7 @@
/**
* Load and init all enabled plugins
*
- * This has to be done after rcmail::load_gui() or rcmail::init_json()
+ * This has to be done after rcmail::load_gui() or rcmail::json_init()
* was called because plugins need to have access to rcmail->output
*/
public function init()
@@ -206,11 +207,14 @@
* @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
@@ -272,6 +276,45 @@
/**
+ * 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.
*
--
Gitblit v1.9.1