xref: /plugin/acknowledge/action.php (revision ef3ab392f1294956892e162b1b47539c91a789f3)
1<?php
2/**
3 * DokuWiki Plugin acknowledge (Action Component)
4 *
5 * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html
6 * @author  Andreas Gohr, Anna Dabrowska <dokuwiki@cosmocode.de>
7 */
8
9// must be run within Dokuwiki
10if (!defined('DOKU_INC')) {
11    die();
12}
13
14class action_plugin_acknowledge extends DokuWiki_Action_Plugin
15{
16
17    /** @inheritDoc */
18    public function register(Doku_Event_Handler $controller)
19    {
20        $controller->register_hook('COMMON_WIKIPAGE_SAVE', 'AFTER', $this, 'handlePageSave');
21        $controller->register_hook('AJAX_CALL_UNKNOWN', 'BEFORE', $this, 'handleAjax');
22    }
23
24    /**
25     * Manage page meta data
26     *
27     * Store page last modified date
28     * Handle page deletions
29     * Remove assignments on page save, they get readded on rendering if needed
30     *
31     * @param Doku_Event $event
32     * @param $param
33     */
34    public function handlePageSave(Doku_Event $event, $param)
35    {
36        /** @var helper_plugin_acknowledge $helper */
37        $helper = plugin_load('helper', 'acknowledge');
38
39        if ($event->data['changeType'] === DOKU_CHANGE_TYPE_DELETE) {
40            $helper->removePage($event->data['id']);
41        } elseif ($event->data['changeType'] !== DOKU_CHANGE_TYPE_MINOR_EDIT) {
42            $helper->storePageDate($event->data['id'], $event->data['newRevision']);
43        }
44
45        $helper->clearAssignments($event->data['id']);
46    }
47
48    /**
49     * @param Doku_Event $event
50     * @param $param
51     */
52    public function handleAjax(Doku_Event $event, $param)
53    {
54        if ($event->data === 'plugin_acknowledge_html') {
55            echo $this->html();
56            $event->stopPropagation();
57            $event->preventDefault();
58        }
59    }
60
61    /**
62     * Returns the acknowledgment form/confirmation
63     *
64     * @return string The HTML to display
65     */
66    protected function html()
67    {
68        global $INPUT;
69        global $USERINFO;
70        $id = $INPUT->str('id');
71        $user = $INPUT->server->str('REMOTE_USER');
72        if ($id === '' || $user === '') return '';
73
74        /** @var helper_plugin_acknowledge $helper */
75        $helper = plugin_load('helper', 'acknowledge');
76
77        $html = '';
78
79        $ack = $helper->hasUserAcknowledged($id, $user);
80        if ($ack) {
81
82            $html .= '<div>';
83            $html .= 'You acknowledged this page ' . sprintf('%f', $ack);
84            $html .= '</div>';
85        } elseif ($helper->isUserAssigned($id, $user, $USERINFO['grps'])) {
86            $html .= '<div>';
87            $html .= 'You need to acknowledge this';
88            $html .= '</div>';
89        }
90
91        return $html;
92    }
93}
94
95