[ Index ]

PHP Cross Reference of DokuWiki

title

Body

[close]

/inc/ -> pluginutils.php (source)

   1  <?php
   2  
   3  /**
   4   * Utilities for handling plugins
   5   *
   6   * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
   7   * @author     Andreas Gohr <andi@splitbrain.org>
   8   */
   9  
  10  // plugin related constants
  11  use dokuwiki\Extension\AdminPlugin;
  12  use dokuwiki\Extension\PluginController;
  13  use dokuwiki\Extension\PluginInterface;
  14  
  15  if (!defined('DOKU_PLUGIN'))  define('DOKU_PLUGIN', DOKU_INC . 'lib/plugins/');
  16  // note that only [a-z0-9]+ is officially supported,
  17  // this is only to support plugins that don't follow these conventions, too
  18  if (!defined('DOKU_PLUGIN_NAME_REGEX')) define('DOKU_PLUGIN_NAME_REGEX', '[a-zA-Z0-9\x7f-\xff]+');
  19  
  20  /**
  21   * Original plugin functions, remain for backwards compatibility
  22   */
  23  
  24  /**
  25   * Return list of available plugins
  26   *
  27   * @param string $type type of plugins; empty string for all
  28   * @param bool $all; true to retrieve all, false to retrieve only enabled plugins
  29   * @return array with plugin names or plugin component names
  30   */
  31  function plugin_list($type = '', $all = false)
  32  {
  33      /** @var $plugin_controller PluginController */
  34      global $plugin_controller;
  35      $plugins = $plugin_controller->getList($type, $all);
  36      sort($plugins, SORT_NATURAL | SORT_FLAG_CASE);
  37      return $plugins;
  38  }
  39  
  40  /**
  41   * Returns plugin object
  42   * Returns only new instances of a plugin when $new is true or if plugin is not Singleton,
  43   * otherwise an already loaded instance.
  44   *
  45   * @param  $type     string type of plugin to load
  46   * @param  $name     string name of the plugin to load
  47   * @param  $new      bool   true to return a new instance of the plugin, false to use an already loaded instance
  48   * @param  $disabled bool   true to load even disabled plugins
  49   * @return PluginInterface|null  the plugin object or null on failure
  50   */
  51  function plugin_load($type, $name, $new = false, $disabled = false)
  52  {
  53      /** @var $plugin_controller PluginController */
  54      global $plugin_controller;
  55      return $plugin_controller->load($type, $name, $new, $disabled);
  56  }
  57  
  58  /**
  59   * Whether plugin is disabled
  60   *
  61   * @param string $plugin name of plugin
  62   * @return bool true disabled, false enabled
  63   */
  64  function plugin_isdisabled($plugin)
  65  {
  66      /** @var $plugin_controller PluginController */
  67      global $plugin_controller;
  68      return !$plugin_controller->isEnabled($plugin);
  69  }
  70  
  71  /**
  72   * Enable the plugin
  73   *
  74   * @param string $plugin name of plugin
  75   * @return bool true saving succeed, false saving failed
  76   */
  77  function plugin_enable($plugin)
  78  {
  79      /** @var $plugin_controller PluginController */
  80      global $plugin_controller;
  81      return $plugin_controller->enable($plugin);
  82  }
  83  
  84  /**
  85   * Disable the plugin
  86   *
  87   * @param string $plugin name of plugin
  88   * @return bool  true saving succeed, false saving failed
  89   */
  90  function plugin_disable($plugin)
  91  {
  92      /** @var $plugin_controller PluginController */
  93      global $plugin_controller;
  94      return $plugin_controller->disable($plugin);
  95  }
  96  
  97  /**
  98   * Returns directory name of plugin
  99   *
 100   * @param string $plugin name of plugin
 101   * @return string name of directory
 102   * @deprecated 2018-07-20
 103   */
 104  function plugin_directory($plugin)
 105  {
 106      dbg_deprecated('$plugin directly');
 107      return $plugin;
 108  }
 109  
 110  /**
 111   * Returns cascade of the config files
 112   *
 113   * @return array with arrays of plugin configs
 114   */
 115  function plugin_getcascade()
 116  {
 117      /** @var $plugin_controller PluginController */
 118      global $plugin_controller;
 119      return $plugin_controller->getCascade();
 120  }
 121  
 122  
 123  /**
 124   * Return the currently operating admin plugin or null
 125   * if not on an admin plugin page
 126   *
 127   * @return Doku_Plugin_Admin
 128   */
 129  function plugin_getRequestAdminPlugin()
 130  {
 131      static $admin_plugin = false;
 132      global $ACT,$INPUT,$INFO;
 133  
 134      if ($admin_plugin === false) {
 135          if (($ACT == 'admin') && ($page = $INPUT->str('page', '', true)) != '') {
 136              $pluginlist = plugin_list('admin');
 137              if (in_array($page, $pluginlist)) {
 138                  // attempt to load the plugin
 139                  /** @var $admin_plugin AdminPlugin */
 140                  $admin_plugin = plugin_load('admin', $page);
 141                  // verify
 142                  if ($admin_plugin && !$admin_plugin->isAccessibleByCurrentUser()) {
 143                      $admin_plugin = null;
 144                      $INPUT->remove('page');
 145                      msg('For admins only', -1);
 146                  }
 147              }
 148          }
 149      }
 150  
 151      return $admin_plugin;
 152  }