xref: /plugin/lastseen/action.php (revision 34b8413f371c8ced24cf179370bf6a8907b81994)
1*34b8413fStracker-user<?php
2*34b8413fStracker-user/**
3*34b8413fStracker-user * Last Seen plugin — activity tracker.
4*34b8413fStracker-user *
5*34b8413fStracker-user * Records the timestamp of each authenticated request so the admin component
6*34b8413fStracker-user * can show when every registered user was last active.
7*34b8413fStracker-user */
8*34b8413fStracker-user
9*34b8413fStracker-userclass action_plugin_lastseen extends DokuWiki_Action_Plugin
10*34b8413fStracker-user{
11*34b8413fStracker-user    public function register(Doku_Event_Handler $controller)
12*34b8413fStracker-user    {
13*34b8413fStracker-user        // DOKUWIKI_STARTED fires on essentially every request, after
14*34b8413fStracker-user        // authentication has resolved. By this point REMOTE_USER is set for
15*34b8413fStracker-user        // any logged-in user — whether they just submitted the login form or
16*34b8413fStracker-user        // arrived with a persistent ("remember me") cookie. Hooking here
17*34b8413fStracker-user        // therefore records last *activity*, the superset of last *login*.
18*34b8413fStracker-user        $controller->register_hook('DOKUWIKI_STARTED', 'AFTER', $this, 'recordActivity');
19*34b8413fStracker-user    }
20*34b8413fStracker-user
21*34b8413fStracker-user    /**
22*34b8413fStracker-user     * @param Doku_Event $event  unused (DOKUWIKI_STARTED carries no data)
23*34b8413fStracker-user     */
24*34b8413fStracker-user    public function recordActivity(Doku_Event $event)
25*34b8413fStracker-user    {
26*34b8413fStracker-user        global $INPUT;
27*34b8413fStracker-user
28*34b8413fStracker-user        $user = $INPUT->server->str('REMOTE_USER');
29*34b8413fStracker-user        if ($user === '') {
30*34b8413fStracker-user            return; // anonymous request — nothing to record
31*34b8413fStracker-user        }
32*34b8413fStracker-user
33*34b8413fStracker-user        /** @var helper_plugin_lastseen $hlp */
34*34b8413fStracker-user        $hlp = plugin_load('helper', 'lastseen');
35*34b8413fStracker-user        if ($hlp === null) {
36*34b8413fStracker-user            return;
37*34b8413fStracker-user        }
38*34b8413fStracker-user
39*34b8413fStracker-user        // record() is internally throttled — for most requests this is a
40*34b8413fStracker-user        // cheap read-and-return with no disk write.
41*34b8413fStracker-user        $hlp->record($user);
42*34b8413fStracker-user    }
43*34b8413fStracker-user}
44