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