summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG2
-rw-r--r--program/include/rcube_plugin.php29
-rw-r--r--program/include/rcube_plugin_api.php16
3 files changed, 41 insertions, 6 deletions
diff --git a/CHANGELOG b/CHANGELOG
index 99e34b81d..802eb2a6e 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -54,6 +54,8 @@ CHANGELOG Roundcube Webmail
- Fix handling of URLs with tilde (~) or semicolon (;) character (#1487087, #1487088)
- Plugin API: added 'contact_form' hook
- Add SORT=DISPLAY support (RFC 5957)
+- Plugin API: add possibility to disable plugin in AJAX mode, 'noajax' property
+- Plugin API: add possibility to disable plugin in framed mode, 'noframe' property
RELEASE 0.4.2
-------------
diff --git a/program/include/rcube_plugin.php b/program/include/rcube_plugin.php
index b356c2239..8ac874597 100644
--- a/program/include/rcube_plugin.php
+++ b/program/include/rcube_plugin.php
@@ -26,19 +26,46 @@
*/
abstract class rcube_plugin
{
+ /**
+ * Class name of the plugin instance
+ *
+ * @var string
+ */
public $ID;
/**
- * Holds an istance of Plugin API
+ * Instance of Plugin API
*
* @var rcube_plugin_api
*/
public $api;
+
+ /**
+ * Regular expression defining task(s) to bind with
+ *
+ * @var string
+ */
public $task;
+
+ /**
+ * Disables plugin in AJAX requests
+ *
+ * @var boolean
+ */
+ public $noajax = false;
+
+ /**
+ * Disables plugin in framed mode
+ *
+ * @var boolean
+ */
+ public $noframe = false;
+
protected $home;
protected $urlbase;
private $mytask;
+
/**
* Default constructor.
*
diff --git a/program/include/rcube_plugin_api.php b/program/include/rcube_plugin_api.php
index da171ecf4..f0fe8c20e 100644
--- a/program/include/rcube_plugin_api.php
+++ b/program/include/rcube_plugin_api.php
@@ -122,10 +122,16 @@ class rcube_plugin_api
// instantiate class if exists
if (class_exists($plugin_name, false)) {
$plugin = new $plugin_name($this);
- // check inheritance and task specification
- if (is_subclass_of($plugin, 'rcube_plugin') && (!$plugin->task || preg_match('/^('.$plugin->task.')$/i', $rcmail->task))) {
- $plugin->init();
- $this->plugins[] = $plugin;
+ // check inheritance...
+ 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($this->output, 'rcube_template'))
+ && (!$plugin->noframe || empty($_REQUEST['_framed']))
+ ) {
+ $plugin->init();
+ $this->plugins[] = $plugin;
+ }
}
}
else {
@@ -256,7 +262,7 @@ class rcube_plugin_api
$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
if (!isset($this->actionmap[$action]) || $this->actionmap[$action] == $owner) {
$this->actions[$action] = $callback;