Adds an action (do=mypage) which renders a user page from a page template
Compatible with DokuWiki
Anteater
The missing download url means that this extension cannot be installed via the Extension Manager. Please see Publishing a Plugin on dokuwiki.org. Recommended are public repository hosts like GitHub, GitLab or Bitbucket.
This extension has not been updated in over 2 years. It may no longer be maintained or supported and may have compatibility issues.
Similar to userhomepage, userpage
Download the action.php below from source code section and save that file as lib/plugins/mypage/action.php.
No download package available at the moment.
No other plugins are required, but any plugins capable of displaying information related to a specific user are useful, such as
<a href="<?php wl($ID, 'do=mypage')?>" class="action mypage" rel="nofollow" accesskey="m">My page</a>
mypagetemplate _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}}
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
For manual installation, save this file as lib/plugins/mypage/action.php.
<?php /** * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) * @author Viktor Söderqvist <[email protected]> * * 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' => '[email protected]', '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: