xref: /plugin/acknowledge/syntax/listing.php (revision ba917e3310e630013b2322a022ecb8eae04163fc)
174126d4bSAnna Dabrowska<?php
23b76424dSannda
33b76424dSanndause dokuwiki\Extension\SyntaxPlugin;
43b76424dSannda
574126d4bSAnna Dabrowska/**
674126d4bSAnna Dabrowska * DokuWiki Plugin acknowledge (Syntax Component)
774126d4bSAnna Dabrowska *
874126d4bSAnna Dabrowska * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html
974126d4bSAnna Dabrowska * @author  Andreas Gohr, Anna Dabrowska <dokuwiki@cosmocode.de>
1074126d4bSAnna Dabrowska */
113b76424dSanndaclass syntax_plugin_acknowledge_listing extends SyntaxPlugin
1274126d4bSAnna Dabrowska{
1374126d4bSAnna Dabrowska    /** @inheritDoc */
1474126d4bSAnna Dabrowska    public function getType()
1574126d4bSAnna Dabrowska    {
1674126d4bSAnna Dabrowska        return 'substition';
1774126d4bSAnna Dabrowska    }
1874126d4bSAnna Dabrowska
1974126d4bSAnna Dabrowska    /** @inheritDoc */
2074126d4bSAnna Dabrowska    public function getPType()
2174126d4bSAnna Dabrowska    {
2274126d4bSAnna Dabrowska        return 'block';
2374126d4bSAnna Dabrowska    }
2474126d4bSAnna Dabrowska
2574126d4bSAnna Dabrowska    /** @inheritDoc */
2674126d4bSAnna Dabrowska    public function getSort()
2774126d4bSAnna Dabrowska    {
2874126d4bSAnna Dabrowska        return 155;
2974126d4bSAnna Dabrowska    }
3074126d4bSAnna Dabrowska
3174126d4bSAnna Dabrowska    /** @inheritDoc */
3274126d4bSAnna Dabrowska    public function connectTo($mode)
3374126d4bSAnna Dabrowska    {
34833123deSAnna Dabrowska        $this->Lexer->addSpecialPattern('~~ACKNOWLEDGE.*?~~', $mode, 'plugin_acknowledge_listing');
3574126d4bSAnna Dabrowska    }
3674126d4bSAnna Dabrowska
3774126d4bSAnna Dabrowska    /** @inheritDoc */
3873d53d5bSAnna Dabrowska    public function handle($match, $state, $pos, Doku_Handler $handler)
3973d53d5bSAnna Dabrowska    {
40833123deSAnna Dabrowska        // check for 'all' parameter
41833123deSAnna Dabrowska        $includeDone = strtolower(substr($match, strlen('~~ACKNOWLEDGE '), -2)) === 'all';
42833123deSAnna Dabrowska        return ['includeDone' => $includeDone];
4373d53d5bSAnna Dabrowska    }
4473d53d5bSAnna Dabrowska
4573d53d5bSAnna Dabrowska    /** @inheritDoc */
4674126d4bSAnna Dabrowska    public function render($mode, Doku_Renderer $renderer, $data)
4774126d4bSAnna Dabrowska    {
4874126d4bSAnna Dabrowska        if ($mode !== 'xhtml') {
4974126d4bSAnna Dabrowska            return false;
5074126d4bSAnna Dabrowska        }
5174126d4bSAnna Dabrowska
5274126d4bSAnna Dabrowska        $renderer->info['cache'] = false;
5374126d4bSAnna Dabrowska
5474126d4bSAnna Dabrowska        $renderer->doc .= '<div class="plugin-acknowledge-listing">';
55833123deSAnna Dabrowska        $renderer->doc .= $this->getListing($data['includeDone']);
5674126d4bSAnna Dabrowska        $renderer->doc .= '</div>';
5774126d4bSAnna Dabrowska        return true;
5874126d4bSAnna Dabrowska    }
5974126d4bSAnna Dabrowska
6074126d4bSAnna Dabrowska    /**
61833123deSAnna Dabrowska     * Returns the list of pages to be acknowledged by the user,
62833123deSAnna Dabrowska     * optionally including past acknowledgments.
63833123deSAnna Dabrowska     *
64833123deSAnna Dabrowska     * @param bool $includeDone
6574126d4bSAnna Dabrowska     *
6674126d4bSAnna Dabrowska     * @return string
6774126d4bSAnna Dabrowska     */
68833123deSAnna Dabrowska    protected function getListing($includeDone)
6974126d4bSAnna Dabrowska    {
7074126d4bSAnna Dabrowska        global $INPUT;
718c50976eSAnna Dabrowska        global $USERINFO;
728c50976eSAnna Dabrowska
7374126d4bSAnna Dabrowska        $user = $INPUT->server->str('REMOTE_USER');
7474126d4bSAnna Dabrowska        if ($user === '') return '';
7574126d4bSAnna Dabrowska
768c50976eSAnna Dabrowska        $groups = $USERINFO['grps'];
778c50976eSAnna Dabrowska
7874126d4bSAnna Dabrowska        /** @var helper_plugin_acknowledge $helper */
7974126d4bSAnna Dabrowska        $helper = plugin_load('helper', 'acknowledge');
80833123deSAnna Dabrowska        $items = $helper->getUserAssignments($user, $groups, $includeDone);
8174126d4bSAnna Dabrowska
8274126d4bSAnna Dabrowska        $html =  $this->getLang('ackNotFound');
8374126d4bSAnna Dabrowska
84833123deSAnna Dabrowska        if (!empty($items)) {
8574126d4bSAnna Dabrowska            $html = '<ul>';
86833123deSAnna Dabrowska            foreach ($items as $item) {
87833123deSAnna Dabrowska                $done = $item['ack'] ?
88*ba917e33SAnna Dabrowska                    ' <span title="'
89*ba917e33SAnna Dabrowska                    . sprintf($this->getLang('ackGranted'), dformat($item['ack']))
90*ba917e33SAnna Dabrowska                    . '">&#x2714;</span>'
91833123deSAnna Dabrowska                    : '';
92833123deSAnna Dabrowska                $html .= '<li>' . html_wikilink(':' . $item['page']) . $done . '</li>';
9374126d4bSAnna Dabrowska            }
9474126d4bSAnna Dabrowska            $html .= '</ul>';
9574126d4bSAnna Dabrowska        }
9674126d4bSAnna Dabrowska
9774126d4bSAnna Dabrowska        return $html;
9874126d4bSAnna Dabrowska    }
9974126d4bSAnna Dabrowska}
100