alecpl
2010-10-29 2cd443315dbd0b3d7fdec78f0042f22d20e57ede
- Plugin API: add possibility to disable plugin in AJAX mode, 'noajax' property
- Plugin API: add possibility to disable plugin in framed mode, 'noframe' property


3 files modified
47 ■■■■ changed files
CHANGELOG 2 ●●●●● patch | view | raw | blame | history
program/include/rcube_plugin.php 29 ●●●●● patch | view | raw | blame | history
program/include/rcube_plugin_api.php 16 ●●●●● patch | view | raw | blame | history
CHANGELOG
@@ -54,6 +54,8 @@
- 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
-------------
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.
   *
program/include/rcube_plugin_api.php
@@ -122,10 +122,16 @@
        // 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 @@
      $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;