alecpl
2010-10-26 10a6fc58e6e8a40388ffda43f949f69f5ec804dc
program/include/rcube_plugin_api.php
@@ -4,8 +4,8 @@
 +-----------------------------------------------------------------------+
 | program/include/rcube_plugin_api.php                                  |
 |                                                                       |
 | This file is part of the RoundCube Webmail client                     |
 | Copyright (C) 2008-2009, RoundCube Dev. - Switzerland                 |
 | This file is part of the Roundcube Webmail client                     |
 | Copyright (C) 2008-2009, Roundcube Dev. - Switzerland                 |
 | Licensed under the GNU GPL                                            |
 |                                                                       |
 | PURPOSE:                                                              |
@@ -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;
@@ -58,7 +58,8 @@
    'address_sources'   => 'addressbooks_list',
    'get_address_book'  => 'addressbook_get',
    'create_contact'    => 'contact_create',
    'save_contact'      => 'contact_save',
    'save_contact'      => 'contact_update',
    'contact_save'      => 'contact_update',
    'delete_contact'    => 'contact_delete',
    'manage_folders'    => 'folders_list',
    'list_mailboxes'    => 'mailboxes_list',
@@ -67,13 +68,15 @@
    'list_prefs_sections' => 'preferences_sections_list',
    'list_identities'   => 'identities_list',
    'create_identity'   => 'identity_create',
    'save_identity'     => 'identity_save',
    'delete_identity'   => 'identity_delete',
    'save_identity'     => 'identity_update',
    'identity_save'     => 'identity_update',
  );
  /**
   * This implements the 'singleton' design pattern
   *
   * @return object rcube_plugin_api The one and only instance if this class
   * @return rcube_plugin_api The one and only instance if this class
   */
  static function get_instance()
  {
@@ -104,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);
@@ -186,18 +190,16 @@
  /**
   * Allows a plugin object to register a callback for a certain hook
   *
   * @param string Hook name
   * @param mixed String with global function name or array($obj, 'methodname')
   * @param string $hook Hook name
   * @param mixed  $callback String with global function name or array($obj, 'methodname')
   */
  public function register_hook($hook, $callback)
  {
    if (is_callable($callback)) {
      if (isset($this->deprecated_hooks[$hook])) {
        /* Uncoment after 0.4-stable release
        raise_error(array('code' => 522, 'type' => 'php',
          'file' => __FILE__, 'line' => __LINE__,
          'message' => "Deprecated hook name. ".$hook.' -> '.$this->deprecated_hooks[$hook]), true, false);
        */
        $hook = $this->deprecated_hooks[$hook];
      }
      $this->handlers[$hook][] = $callback;
@@ -213,8 +215,8 @@
   * Triggers a plugin hook.
   * This is called from the application and executes all registered handlers
   *
   * @param string Hook name
   * @param array Named arguments (key->value pairs)
   * @param string $hook Hook name
   * @param array $args Named arguments (key->value pairs)
   * @return array The (probably) altered hook arguments
   */
  public function exec_hook($hook, $args = array())
@@ -242,10 +244,10 @@
  /**
   * Let a plugin register a handler for a specific request
   *
   * @param string Action name (_task=mail&_action=plugin.foo)
   * @param string Plugin name that registers this action
   * @param mixed Callback: string with global function name or array($obj, 'methodname')
   * @param string Task name registered by this plugin
   * @param string $action Action name (_task=mail&_action=plugin.foo)
   * @param string $owner Plugin name that registers this action
   * @param mixed  $callback Callback: string with global function name or array($obj, 'methodname')
   * @param string $task Task name registered by this plugin
   */
  public function register_action($action, $owner, $callback, $task = null)
  {
@@ -272,7 +274,7 @@
   * This method handles requests like _task=mail&_action=plugin.foo
   * It executes the callback function that was registered with the given action.
   *
   * @param string Action name
   * @param string $action Action name
   */
  public function exec_action($action)
  {
@@ -290,9 +292,9 @@
  /**
   * Register a handler function for template objects
   *
   * @param string Object name
   * @param string Plugin name that registers this action
   * @param mixed Callback: string with global function name or array($obj, 'methodname')
   * @param string $name Object name
   * @param string $owner Plugin name that registers this action
   * @param mixed  $callback Callback: string with global function name or array($obj, 'methodname')
   */
  public function register_handler($name, $owner, $callback)
  {
@@ -316,8 +318,8 @@
  /**
   * Register this plugin to be responsible for a specific task
   *
   * @param string Task name (only characters [a-z0-9_.-] are allowed)
   * @param string Plugin name that registers this action
   * @param string $task Task name (only characters [a-z0-9_.-] are allowed)
   * @param string $owner Plugin name that registers this action
   */
  public function register_task($task, $owner)
  {
@@ -344,6 +346,7 @@
  /**
   * Checks whether the given task is registered by a plugin
   *
   * @param string $task Task name
   * @return boolean True if registered, otherwise false
   */
  public function is_plugin_task($task)
@@ -356,7 +359,7 @@
   * Check if a plugin hook is currently processing.
   * Mainly used to prevent loops and recursion.
   *
   * @param string Hook to check (optional)
   * @param string $hook Hook to check (optional)
   * @return boolean True if any/the given hook is currently processed, otherwise false
   */
  public function is_processing($hook = null)
@@ -366,6 +369,8 @@
  
  /**
   * Include a plugin script file in the current HTML page
   *
   * @param string $fn Path to script
   */
  public function include_script($fn)
  {
@@ -377,6 +382,8 @@
  /**
   * Include a plugin stylesheet in the current HTML page
   *
   * @param string $fn Path to stylesheet
   */
  public function include_stylesheet($fn)
  {
@@ -388,6 +395,9 @@
  
  /**
   * Save the given HTML content to be added to a template container
   *
   * @param string $html HTML content
   * @param string $container Template container identifier
   */
  public function add_content($html, $container)
  {
@@ -396,6 +406,9 @@
  
  /**
   * Callback for template_container hooks
   *
   * @param array $attrib
   * @return array
   */
  private function template_container_hook($attrib)
  {
@@ -405,6 +418,9 @@
  
  /**
   * Make the given file name link into the plugins directory
   *
   * @param string $fn Filename
   * @return string
   */
  private function resource_url($fn)
  {