====== 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. Change function _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. Change function 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. Change function 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 says ''global $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=//// 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.