====== Mypage Plugin ====== ---- plugin ---- description: Adds an action (do=mypage) which renders a user page from a page template author : Viktor Söderqvist email : viktor@zuiderkwast.se type : Action lastupdate : 2009-09-27 compatible : Anteater depends : conflicts : similar : userhomepage tags : users, userpage ---- ===== Download and Installation ===== Download the ''action.php'' below from [[mypage#source code]] section and save that file as ''lib/plugins/mypage/action.php''. No download package available at the moment. ===== Dependencies ===== No other plugins are required, but any plugins capable of displaying information related to a specific user are useful, such as * The [[editor]] plugin, to show a list of pages edited by the currently logged in user. ===== How to use it ===== - Add an action link in you template My page - Create a page template for the page "My page"\\ Two options: * Create a page with the name **''mypagetemplate''** * or a file called **''_mypage.txt''** in the ''data/pages'' directory. This example uses the [[editor]] plugin to display a list of pages edited by the current user. ====== My page ====== Hello @NAME@! Here is a list of your contributions. {{editor>?@USER@&header&table&firsthl&desc&comments}} * See [[:Namespace_templates]] for supported macros in the page template.\\ Some examples: @NS@, @NAME@, @USER@, @MAIL@ and @DATE@. * As this page is only a template, you can choose to make it invisible using the ACL. To display the personalized user page, you add ''do=mypage'' on any page URL.\\ Examples:\\ http://wiki.example.com/doku.php?id=start&do=mypage\\ http://wiki.example.com/start?do=mypage ===== Source code ===== For manual installation, save this file as ''lib/plugins/mypage/action.php''. * * Mypage - a user page created from a template where users can their * recent contributions etc. * */ // must be run within DokuWiki if(!defined('DOKU_INC')) die(); if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/'); require_once(DOKU_PLUGIN.'action.php'); class action_plugin_mypage extends DokuWiki_Action_Plugin { /** * return some info */ function getInfo() { return array( 'author' => 'Viktor Söderqvist', 'email' => 'viktor@zuiderkwast.se', 'date' => '2009-09-26', 'name' => 'Mypage Plugin', 'desc' => 'Provides an new action that shows a user page, generated '. 'from a template, where users can their recent contributions etc', 'url' => 'http://www.dokuwiki.org/plugin:mypage', ); } /** * register the eventhandlers */ function register(&$contr) { $contr->register_hook('TPL_ACT_UNKNOWN', 'BEFORE', $this, 'handleTplActUnknown'); $contr->register_hook('ACTION_ACT_PREPROCESS', 'BEFORE', $this, 'handleActPreprocess'); } /** * Hook for event ACTION_ACT_PREPROCESS, action 'mypage'. Just accepts the action. */ function handleActPreprocess(&$event, $param) { $act = $event->data; if (is_array($act)) list($act) = array_keys($act); if ($act != 'mypage') return; // Not handled here if (empty($_SERVER['REMOTE_USER'])) { $event->data = 'login'; return; // Not logged in } // Accept the action $event->preventDefault(); $event->stopPropagation(); } /** * Hook for event TPL_ACT_UNKNOWN, action 'mypage' * Show the page "My page" */ function handleTplActUnknown(&$event, $param) { if ($event->data == 'mypage') { $event->preventDefault(); $event->stopPropagation(); // get wikitext $wikitext = $this->_getMypageWikitext(); // parse and render. TODO: cache $ret = p_render('xhtml',p_get_instructions($wikitext),$info); echo $ret; } } function _getMypageWikitext() { global $conf, $INFO; // Is there a localized mypage template? $namespaces = array($conf['lang'], ''); $filenames = array('_mypage.txt', 'mypagetemplate.txt'); $file = null; foreach ($namespaces as $ns) { $dir = dirname(wikiFN($ns.':'.'dummy')); foreach ($filenames as $filename) { if (@file_exists($dir.'/'.$filename)) { $file = $dir.'/'.$filename; // OK! break 2; } } } if ($file) { $tpl = io_readFile($file); } else { msg('My Page template not found (_mypage.txt or mypagetemplate.txt)'); $tpl = "====== My page example ======\n". "@NAME@ <@MAIL@> (@USER@) @DATE@"; } $tpl = str_replace( array( '@NS@', '@USER@', '@NAME@', '@MAIL@', '@DATE@', ), array( $ns, //utf8_ucfirst($page), //utf8_ucwords($page), //utf8_strtoupper($page), $_SERVER['REMOTE_USER'], $INFO['userinfo']['name'], $INFO['userinfo']['mail'], $conf['dformat'], ), $tpl); // we need the callback to work around strftime's char limit $tpl = preg_replace('/%./e','strftime($0)',$tpl); return $tpl; } } // vim:ts=4:sw=4:et:enc=utf-8: ===== Bugs ===== ===== Comments ====