DokuWiki

It's better when it's simple

User Tools

Site Tools


tips:recent_changes_by_user_2009-02-14

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 :!:

  1. 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;
  2. 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);
  3. 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);
  4. 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=<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.

tips/recent_changes_by_user_2009-02-14.txt · Last modified: by Chris75

Except where otherwise noted, content on this wiki is licensed under the following license: CC Attribution-Share Alike 4.0 International
CC Attribution-Share Alike 4.0 International Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki