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