summaryrefslogtreecommitdiff
path: root/lib/plugins/admin.php
diff options
context:
space:
mode:
authorchris <chris@teacherscpd.co.uk>2005-08-25 00:47:18 +0200
committerchris <chris@teacherscpd.co.uk>2005-08-25 00:47:18 +0200
commit11e2ce226d64ac98b82ddc93a81eea66160bcc21 (patch)
treef19de21e96f8952161903dd34e01821b2e0ccb45 /lib/plugins/admin.php
parentf00151b4e3d17bcf50767f821c0e3834d36e7b4f (diff)
downloadrpg-11e2ce226d64ac98b82ddc93a81eea66160bcc21.tar.gz
rpg-11e2ce226d64ac98b82ddc93a81eea66160bcc21.tar.bz2
admin plugin i/face + acl plugin
darcs-hash:20050824224718-50fdc-6d27ff70e60e6fe547aff6c2b305507c4ab3f669.gz
Diffstat (limited to 'lib/plugins/admin.php')
-rw-r--r--lib/plugins/admin.php151
1 files changed, 151 insertions, 0 deletions
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 @@
+<?php
+/**
+ * Admin Plugin Prototype
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Christopher Smith <chris@jalakai.co.uk>
+ */
+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 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:''); }
+
+ 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 "<a href='mailto:$email' $class title='$email' $more>$name</a>";
+ }
+
+ 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 "<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 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 :