*/ use dokuwiki\Extension\ActionPlugin; use dokuwiki\Extension\EventHandler; use dokuwiki\Extension\Event; use dokuwiki\Form\Form; class action_plugin_acknowledge_ajax extends ActionPlugin { /** @inheritDoc */ public function register(EventHandler $controller) { $controller->register_hook('AJAX_CALL_UNKNOWN', 'BEFORE', $this, 'handleAjaxAcknowledge'); $controller->register_hook('AJAX_CALL_UNKNOWN', 'BEFORE', $this, 'handleAjaxAutocomplete'); } /** * @param Event $event * @param $param */ public function handleAjaxAcknowledge(Event $event, $param) { if ($event->data === 'plugin_acknowledge_acknowledge') { $event->stopPropagation(); $event->preventDefault(); global $INPUT; $id = $INPUT->str('id'); if (page_exists($id)) { echo $this->html(); } } } /** * @param Event $event * @return void */ public function handleAjaxAutocomplete(Event $event) { if ($event->data === 'plugin_acknowledge_autocomplete') { if (!checkSecurityToken()) return; global $INPUT; $event->stopPropagation(); $event->preventDefault(); /** @var helper_plugin_acknowledge $hlp */ $hlp = $this->loadHelper('acknowledge'); $found = []; if ($INPUT->has('user')) { $search = $INPUT->str('user'); $knownUsers = $hlp->getUsers(); $found = array_filter($knownUsers, function ($user) use ($search) { return (strstr(strtolower($user['label']), strtolower($search))) !== false ? $user : null; }); } if ($INPUT->has('pg')) { $search = $INPUT->str('pg'); $pages = ft_pageLookup($search, true); $found = array_map(function ($id, $title) { return ['value' => $id, 'label' => $title ?? $id]; }, array_keys($pages), array_values($pages)); } header('Content-Type: application/json'); echo json_encode($found); } } /** * Returns the acknowledgment form/confirmation * * @return string The HTML to display */ protected function html() { global $INPUT; global $USERINFO; $id = $INPUT->str('id'); $ackSubmitted = $INPUT->bool('ack'); $user = $INPUT->server->str('REMOTE_USER'); if ($id === '' || $user === '') return ''; /** @var helper_plugin_acknowledge $helper */ $helper = plugin_load('helper', 'acknowledge'); // only display for users assigned to the page if (!$helper->isUserAssigned($id, $user, $USERINFO['grps'])) { return ''; } if ($ackSubmitted) { $helper->saveAcknowledgement($id, $user); } $ack = $helper->hasUserAcknowledged($id, $user); $html = '