Table of Contents
Filter recent changes
Negatively filter recent changes by (private) namespace
Suppose your wiki has a private namespace like the namespace user:
for user homepages. Now you want to hide those page edits from the list of recent changes. Just go to /dokuwiki/inc/changelog.php
and add the following line of code to the function _handleRecent($line,$ns,$flags,&$seen){ }
at about half ways:
// ********* hide private namespace from the list of recent changes ********* if ( explode(':', $recent['id'])[0] == 'user' ) return false;
Filter recent changes by user
My first second attempt at hacking DokuWiki, so apologies for any rough edges or bad coding practices!
I ( l u r c h (at) d u r g e (dot) o r g ) wanted to be able to filter the list of recent changes by username (the wiki installation I've setup is only accessible by registered users), and I found it surprisingly easy
Before making the changes below, make a backup copy in case it doesn't work or you make a typo which stops your wiki working
- Edit
inc/changelog.php
and update function _handleRecent to support filtering by user. Changefunction _handleRecent($line,$ns,$flags,&$seen){
to
function _handleRecent($line,$ns,$flags,&$seen,$user){
and then inside the function just before
// filter namespace
add the following two lines
// filter user if (($user) && ($recent['user'] != $user)) return false;
- Still in
inc/changelog.php
, update function getRecents to support (optional) filtering by user. Changefunction getRecents($first,$num,$ns='',$flags=0){
to
function getRecents($first,$num,$ns='',$flags=0,$user=''){
and then change
$rec = _handleRecent($lines[$i], $ns, $flags, $seen);
to
$rec = _handleRecent($lines[$i], $ns, $flags, $seen, $user);
- Still in
inc/changelog.php
, update function getRecentsSince to support (optional) filtering by user. Changefunction getRecentsSince($from,$to=null,$ns='',$flags=0){
to
function getRecentsSince($from,$to=null,$ns='',$flags=0,$user=''){
and then change
$rec = _handleRecent($lines[$i], $ns, $flags, $seen);
to
$rec = _handleRecent($lines[$i], $ns, $flags, $seen, $user);
- Now we need to edit
inc/html.php
. Find function html_recent and then just after the line that saysglobal $ID;
add the following$user = isset($_REQUEST['user']) ? $_REQUEST['user'] : null;
Then scroll down a few lines and change both the getRecents lines to say
$recents = getRecents($first,$conf['recent'] + 1,getNS($ID),0,$user);
(i.e. append
,0,$user
to the argument lists)
That's it! Now you can filter the list of recent changes page by appending a user=<username> parameter to the URL e.g. ?do=recent&user=myusername
to show just changes by myusername
. Without any user parameter specified, it displays recent changes by all users, just as before.