diff options
| author | alec <alec@208e9e7b-5314-0410-a742-e7e81cd9613c> | 2010-10-29 08:42:28 +0000 |
|---|---|---|
| committer | alec <alec@208e9e7b-5314-0410-a742-e7e81cd9613c> | 2010-10-29 08:42:28 +0000 |
| commit | 14666961f7ea8511dbd1a67d791359c9b78cb6b3 (patch) | |
| tree | 8849909b6dd2824dcc57dc80453b5f4ed8303eb9 /roundcubemail/program/include | |
| parent | 983ddf4b2b1e927386fa5a4551677942adfd9ac0 (diff) | |
- Plugin API: add possibility to disable plugin in AJAX mode, 'noajax' property
- Plugin API: add possibility to disable plugin in framed mode, 'noframe' property
git-svn-id: https://svn.roundcube.net/trunk@4154 208e9e7b-5314-0410-a742-e7e81cd9613c
Diffstat (limited to 'roundcubemail/program/include')
| -rw-r--r-- | roundcubemail/program/include/rcube_plugin.php | 29 | ||||
| -rw-r--r-- | roundcubemail/program/include/rcube_plugin_api.php | 16 |
2 files changed, 39 insertions, 6 deletions
diff --git a/roundcubemail/program/include/rcube_plugin.php b/roundcubemail/program/include/rcube_plugin.php index b356c2239..8ac874597 100644 --- a/roundcubemail/program/include/rcube_plugin.php +++ b/roundcubemail/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/roundcubemail/program/include/rcube_plugin_api.php b/roundcubemail/program/include/rcube_plugin_api.php index da171ecf4..f0fe8c20e 100644 --- a/roundcubemail/program/include/rcube_plugin_api.php +++ b/roundcubemail/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; |
