Table of Contents
Mypage Plugin
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 and Installation
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.
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
<a href="<?php wl($ID, 'do=mypage')?>" class="action mypage" rel="nofollow" accesskey="m">My page</a>
- 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 thedata/pages
directory.
This example uses the editor plugin to display a list of pages edited by the current user.
- _mypage.txt
====== 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
.
- action.php
<?php /** * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) * @author Viktor Söderqvist <viktor@zuiderkwast.se> * * 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: