alecpl
2010-10-29 7bdd3e22b56b17df7f15d2179f7918c9a5d15da1
program/include/rcube_plugin_api.php
@@ -31,6 +31,7 @@
  public $dir;
  public $url = 'plugins/';
  public $output;
  public $config;
  
  public $handlers = array();
  private $plugins = array();
@@ -39,7 +40,6 @@
  private $actionmap = array();
  private $objectsmap = array();
  private $template_contents = array();
  private $required_plugins = array('filesystem_attachments');
  private $active_hook = false;
@@ -107,6 +107,7 @@
  {
    $rcmail = rcmail::get_instance();
    $this->output = $rcmail->output;
    $this->config = $rcmail->config;
    $plugins_dir = dir($this->dir);
    $plugins_dir = unslashify($plugins_dir->path);
@@ -121,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 {
@@ -255,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;