- 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.6
alecpl 14 years ago
parent f0638be52a
commit 2cd443315d

@ -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
-------------

@ -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.
*

@ -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;

Loading…
Cancel
Save