xref: /plugin/lastseen/action.php (revision e85c7321f150460107d896943a23fbe3faffced1)
134b8413fStracker-user<?php
2*e85c7321Stracker-user
3*e85c7321Stracker-userif (!defined('DOKU_INC')) die();
4*e85c7321Stracker-user
5*e85c7321Stracker-useruse dokuwiki\Extension\ActionPlugin;
6*e85c7321Stracker-useruse dokuwiki\Extension\EventHandler;
7*e85c7321Stracker-useruse dokuwiki\Extension\Event;
8*e85c7321Stracker-user
934b8413fStracker-user/**
1034b8413fStracker-user * Last Seen plugin — activity tracker.
1134b8413fStracker-user *
1234b8413fStracker-user * Records the timestamp of each authenticated request so the admin component
1334b8413fStracker-user * can show when every registered user was last active.
1434b8413fStracker-user */
1534b8413fStracker-user
16*e85c7321Stracker-userclass action_plugin_lastseen extends ActionPlugin
1734b8413fStracker-user{
18*e85c7321Stracker-user    /**
19*e85c7321Stracker-user     * @param EventHandler $controller
20*e85c7321Stracker-user     * @return void
21*e85c7321Stracker-user     */
22*e85c7321Stracker-user    public function register(EventHandler $controller)
2334b8413fStracker-user    {
2434b8413fStracker-user        // DOKUWIKI_STARTED fires on essentially every request, after
2534b8413fStracker-user        // authentication has resolved. By this point REMOTE_USER is set for
2634b8413fStracker-user        // any logged-in user — whether they just submitted the login form or
2734b8413fStracker-user        // arrived with a persistent ("remember me") cookie. Hooking here
2834b8413fStracker-user        // therefore records last *activity*, the superset of last *login*.
2934b8413fStracker-user        $controller->register_hook('DOKUWIKI_STARTED', 'AFTER', $this, 'recordActivity');
3034b8413fStracker-user    }
3134b8413fStracker-user
3234b8413fStracker-user    /**
33*e85c7321Stracker-user     * @param Event $event  unused (DOKUWIKI_STARTED carries no data)
34*e85c7321Stracker-user     * @return void
3534b8413fStracker-user     */
36*e85c7321Stracker-user    public function recordActivity(Event $event)
3734b8413fStracker-user    {
3834b8413fStracker-user        global $INPUT;
3934b8413fStracker-user
4034b8413fStracker-user        $user = $INPUT->server->str('REMOTE_USER');
4134b8413fStracker-user        if ($user === '') {
4234b8413fStracker-user            return; // anonymous request — nothing to record
4334b8413fStracker-user        }
4434b8413fStracker-user
4534b8413fStracker-user        /** @var helper_plugin_lastseen $hlp */
4634b8413fStracker-user        $hlp = plugin_load('helper', 'lastseen');
4734b8413fStracker-user        if ($hlp === null) {
4834b8413fStracker-user            return;
4934b8413fStracker-user        }
5034b8413fStracker-user
5134b8413fStracker-user        // record() is internally throttled — for most requests this is a
5234b8413fStracker-user        // cheap read-and-return with no disk write.
5334b8413fStracker-user        $hlp->record($user);
5434b8413fStracker-user    }
5534b8413fStracker-user}
56