From 11e2ce226d64ac98b82ddc93a81eea66160bcc21 Mon Sep 17 00:00:00 2001 From: chris Date: Thu, 25 Aug 2005 00:47:18 +0200 Subject: admin plugin i/face + acl plugin darcs-hash:20050824224718-50fdc-6d27ff70e60e6fe547aff6c2b305507c4ab3f669.gz --- lib/plugins/admin.php | 151 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 151 insertions(+) create mode 100644 lib/plugins/admin.php (limited to 'lib/plugins/admin.php') diff --git a/lib/plugins/admin.php b/lib/plugins/admin.php new file mode 100644 index 000000000..805689f2a --- /dev/null +++ b/lib/plugins/admin.php @@ -0,0 +1,151 @@ + + */ +if(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../../').'/'); +if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/'); + +/** + * All DokuWiki plugins to extend the admin function + * need to inherit from this class + */ +class DokuWiki_Admin_Plugin { + + var $localised = false; + var $lang = array(); + + /** + * 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); + } + + function getMenuText($language) { + return $this->getLang('menu'); + } + + function getMenuSort() { + return 1000; + } + + function handle() { + trigger_error('handle() not implemented in '.get_class($this), E_USER_WARNING); + } + + 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_[_] + 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:''); } + + function setupLocale() { + global $conf; // definitely don't invoke "global $lang" + $path = DOKU_PLUGIN.$this->getPluginName().'/lang/'; + + // 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; + } + + // plugin equivalent of localFN() + function plugin_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.'inc/lang/en/'.$id.'.txt'; + } + return $file; + } + + // 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. + function getLang($id) { + if (!$this->localised) $this->setupLocale(); + + return (isset($this->lang[$id]) ? $this->lang[$id] : ''); + } + + // plugin equivalent of p_locale_xhtml() + function plugin_locale_xhtml($id) { + return p_cached_xhtml($this->plugin_localFN($id)); + } + + // 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 plugin_email($email, $name='', $class='', $more='') { + if (!$email) return $name; + $email = $this->obfuscate($email); + if (!$name) $name = $email; + $class = "class='".($class ? $class : 'mail')."'"; + return "$name"; + } + + function plugin_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 "$title"; + } + + // output text string through the parser, allows dokuwiki markup to be used + // very ineffecient for small pieces of data - try not to use + function plugin_render($text, $format='xhtml') { + return p_render($format, p_get_instructions($text),$info); + } + + // return an obfuscated email address in line with $conf['mailguard'] setting + // FIXME?? this should really be a common function, used by the renderer as well - no point maintaining two! + function obfuscate($email) { + global $conf; + + switch ($conf['mailguard']) { + case 'visible' : + $obfuscate = array('@' => '[at]', '.' => '[dot]', '-' => '[dash]'); + return strtr($email, $obfuscate); + + case 'hex' : + $encode = ''; + for ($x=0; $x < strlen($email); $x++) $encode .= '&#x' . bin2hex($email{$x}).';'; + return $encode; + + case 'none' : + default : + return $email; + } + } + +} +//Setup VIM: ex: et ts=4 enc=utf-8 : -- cgit v1.2.3