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