====== 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 ====