summaryrefslogtreecommitdiff
path: root/lib/plugins/admin.php
diff options
context:
space:
mode:
authorchris <chris@jalakai.co.uk>2006-04-14 21:37:37 +0200
committerchris <chris@jalakai.co.uk>2006-04-14 21:37:37 +0200
commitf65bfee1954d6697e5002f4253d0a7d2d1940eb6 (patch)
tree9dcac5e578987a6aea9a4ea043f25a9b0fabaaa3 /lib/plugins/admin.php
parentc4e0e4a153fee5f985668670a91b2cd94a17dd75 (diff)
downloadrpg-f65bfee1954d6697e5002f4253d0a7d2d1940eb6.tar.gz
rpg-f65bfee1954d6697e5002f4253d0a7d2d1940eb6.tar.bz2
action plugins
This patch adds events and a third plugin type, "action" plugins, to DokuWiki. The patch doesn't include any event signalling, that will be added in later patches. Action plugins are loaded before most Dokuwiki processing takes place and at the same time are given the opportunity to register handlers (or hooks) to receive specific dokuwiki events. Other parts of Dokuwiki (e.g. templates and syntax plugins) can also register handlers to receive events. Any part of Dokuwiki can create and signal events, including templates and plugins. This patch also revises the admin plugin class by making it an extension of a new class, DokuWiki_Plugin. The DokuWiki_Plugin_Action class also extends this new class. Further details of events, their signalling and handling, and of action plugins will be added to wiki.splitbrain.org in due course :-) darcs-hash:20060414193737-9b6ab-f23d3d9b93e4c50a3ad97ced03eabc6c0363650b.gz
Diffstat (limited to 'lib/plugins/admin.php')
-rw-r--r--lib/plugins/admin.php176
1 files changed, 2 insertions, 174 deletions
diff --git a/lib/plugins/admin.php b/lib/plugins/admin.php
index 7245a73eb..0cf12ad93 100644
--- a/lib/plugins/admin.php
+++ b/lib/plugins/admin.php
@@ -9,32 +9,13 @@
if(!defined('DOKU_INC')) die();
if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
+require_once(DOKU_PLUGIN.'base.php');
/**
* All DokuWiki plugins to extend the admin function
* need to inherit from this class
*/
-class DokuWiki_Admin_Plugin {
-
- var $localised = false; // set to true by setupLocale() after loading language dependent strings
- var $lang = array(); // array to hold language dependent strings, best accessed via ->getLang()
- var $configloaded = false; // set to true by loadConfig() after loading plugin configuration variables
-
- /**
- * General Info
- *
- * Needs to return a associative array with the following values:
- *
- * author - Author of the plugin
- * email - Email address to contact the author
- * date - Last modified date of the plugin in YYYY-MM-DD format
- * name - Name of the plugin
- * desc - Short description of the plugin (Text only)
- * url - Website with more information on the plugin (eg. syntax description)
- */
- function getInfo(){
- trigger_error('getInfo() not implemented in '.get_class($this), E_USER_WARNING);
- }
+class DokuWiki_Admin_Plugin extends DokuWiki_Plugin {
function getMenuText($language) {
$menutext = $this->getLang('menu');
@@ -56,160 +37,7 @@ class DokuWiki_Admin_Plugin {
function html() {
trigger_error('html() not implemented in '.get_class($this), E_USER_WARNING);
}
-
- // private methods (maybe a dokuwiki plugin base class is required for these)
-
- // plugin introspection methods
- // extract from class name, format = <plugin type>_plugin_<name>[_<component name>]
- function getPluginType() { list($t) = explode('_', get_class($this), 2); return $t; }
- function getPluginName() { list($t, $p, $n) = explode('_', get_class($this), 4); return $n; }
- function getPluginComponent() { list($t, $p, $n, $c) = explode('_', get_class($this), 4); return (isset($c)?$c:''); }
-
- // localisation methods
- /**
- * getLang($id)
- * use this function to access plugin language strings
- * to try to minimise unnecessary loading of the strings when the plugin doesn't require them
- * e.g. when info plugin is querying plugins for information about themselves.
- *
- * @param $id id of the string to be retrieved
- * @return string string in appropriate language or english if not available
- */
- function getLang($id) {
- if (!$this->localised) $this->setupLocale();
-
- return (isset($this->lang[$id]) ? $this->lang[$id] : '');
- }
-
- /**
- * locale_xhtml($id)
- *
- * retrieve a language dependent file and pass to xhtml renderer for display
- * plugin equivalent of p_locale_xhtml()
- *
- * @param $id id of language dependent wiki page
- * @return string parsed contents of the wiki page in xhtml format
- */
- function locale_xhtml($id) {
- return p_cached_xhtml($this->localFN($id));
- }
-
- /**
- * localFN($id)
- * prepends appropriate path for a language dependent filename
- * plugin equivalent of localFN()
- */
- function localFN($id) {
- global $conf;
- $plugin = $this->getPluginName();
- $file = DOKU_PLUGIN.$plugin.'/lang/'.$conf['lang'].'/'.$id.'.txt';
- if(!@file_exists($file)){
- //fall back to english
- $file = DOKU_PLUGIN.$plugin.'/lang/en/'.$id.'.txt';
- }
- return $file;
- }
-
- /**
- * setupLocale()
- * reads all the plugins language dependent strings into $this->lang
- * this function is automatically called by getLang()
- */
- function setupLocale() {
- if ($this->localised) return;
-
- global $conf; // definitely don't invoke "global $lang"
- $path = DOKU_PLUGIN.$this->getPluginName().'/lang/';
-
- $lang = array();
-
- // don't include once, in case several plugin components require the same language file
- @include($path.'en/lang.php');
- if ($conf['lang'] != 'en') @include($path.$conf['lang'].'/lang.php');
-
- $this->lang = $lang;
- $this->localised = true;
- }
-
- // configuration methods
- /**
- * getConf($id)
- *
- * use this function to access plugin configuration variables
- */
- function getConf($id){
- global $conf;
- $plugin = $this->getPluginName();
-
- if (!$this->configloaded){
- if ($pconf = $this->loadConfig() !== false){
- foreach ($pconf as $key => $value){
- if (isset($conf['plugin'][$plugin][$key])) continue;
- $conf['plugin'][$plugin][$key] = $value;
- }
- $this->configloaded = true;
- }
- }
-
- return $conf['plugin'][$plugin][$id];
- }
-
- /**
- * loadConfig()
- * reads all plugin configuration variables into $this->conf
- * this function is automatically called by getConf()
- */
- function loadConfig(){
-
- $path = DOKU_PLUGIN.$this->getPluginName().'/conf/';
- $conf = array();
-
- if (!@file_exists($path.'default.php')) return false;
-
- // load default config file
- include($path.'default.php');
-
- return $conf;
- }
-
- // standard functions for outputing email addresses and links
- // use these to avoid having to duplicate code to produce links in line with the installation configuration
- function email($email, $name='', $class='', $more='') {
- if (!$email) return $name;
- $email = obfuscate($email);
- if (!$name) $name = $email;
- $class = "class='".($class ? $class : 'mail')."'";
- return "<a href='mailto:$email' $class title='$email' $more>$name</a>";
- }
-
- function external_link($link, $title='', $class='', $target='', $more='') {
- global $conf;
-
- $link = htmlentities($link);
- if (!$title) $title = $link;
- if (!$target) $target = $conf['target']['extern'];
- if ($conf['relnofollow']) $more .= ' rel="nofollow"';
-
- if ($class) $class = " class='$class'";
- if ($target) $target = " target='$target'";
- if ($more) $more = " ".trim($more);
-
- return "<a href='$link'$class$target$more>$title</a>";
- }
-
- // output text string through the parser, allows dokuwiki markup to be used
- // very ineffecient for small pieces of data - try not to use
- function render($text, $format='xhtml') {
- return p_render($format, p_get_instructions($text),$info);
- }
-
- // deprecated functions
- function plugin_localFN($id) { return $this->localFN($id); }
- function plugin_locale_xhtml($id) { return $this->locale_xhtml($id); }
- function plugin_email($e, $n='', $c='', $m='') { return $this->email($e, $n, $c, $m); }
- function plugin_link($l, $t='', $c='', $to='', $m='') { return $this->external_link($l, $t, $c, $to, $m); }
- function plugin_render($t, $f='xhtml') { return $this->render($t, $f); }
}
//Setup VIM: ex: et ts=4 enc=utf-8 : \ No newline at end of file