xref: /plugin/acknowledge/syntax/listing.php (revision c8f8e8a12c08995223c4cf7a6575139d0c988a94)
174126d4bSAnna Dabrowska<?php
274126d4bSAnna Dabrowska/**
374126d4bSAnna Dabrowska * DokuWiki Plugin acknowledge (Syntax Component)
474126d4bSAnna Dabrowska *
574126d4bSAnna Dabrowska * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html
674126d4bSAnna Dabrowska * @author  Andreas Gohr, Anna Dabrowska <dokuwiki@cosmocode.de>
774126d4bSAnna Dabrowska */
874126d4bSAnna Dabrowska
974126d4bSAnna Dabrowskaclass syntax_plugin_acknowledge_listing extends DokuWiki_Syntax_Plugin
1074126d4bSAnna Dabrowska{
1174126d4bSAnna Dabrowska    /** @inheritDoc */
1274126d4bSAnna Dabrowska    public function getType()
1374126d4bSAnna Dabrowska    {
1474126d4bSAnna Dabrowska        return 'substition';
1574126d4bSAnna Dabrowska    }
1674126d4bSAnna Dabrowska
1774126d4bSAnna Dabrowska    /** @inheritDoc */
1874126d4bSAnna Dabrowska    public function getPType()
1974126d4bSAnna Dabrowska    {
2074126d4bSAnna Dabrowska        return 'block';
2174126d4bSAnna Dabrowska    }
2274126d4bSAnna Dabrowska
2374126d4bSAnna Dabrowska    /** @inheritDoc */
2474126d4bSAnna Dabrowska    public function getSort()
2574126d4bSAnna Dabrowska    {
2674126d4bSAnna Dabrowska        return 155;
2774126d4bSAnna Dabrowska    }
2874126d4bSAnna Dabrowska
2974126d4bSAnna Dabrowska    /** @inheritDoc */
3074126d4bSAnna Dabrowska    public function connectTo($mode)
3174126d4bSAnna Dabrowska    {
32833123deSAnna Dabrowska        $this->Lexer->addSpecialPattern('~~ACKNOWLEDGE.*?~~', $mode, 'plugin_acknowledge_listing');
3374126d4bSAnna Dabrowska    }
3474126d4bSAnna Dabrowska
3574126d4bSAnna Dabrowska    /** @inheritDoc */
3673d53d5bSAnna Dabrowska    public function handle($match, $state, $pos, Doku_Handler $handler)
3773d53d5bSAnna Dabrowska    {
38833123deSAnna Dabrowska        // check for 'all' parameter
39833123deSAnna Dabrowska        $includeDone = strtolower(substr($match, strlen('~~ACKNOWLEDGE '), -2)) === 'all';
40833123deSAnna Dabrowska        return ['includeDone' => $includeDone];
4173d53d5bSAnna Dabrowska    }
4273d53d5bSAnna Dabrowska
4373d53d5bSAnna Dabrowska    /** @inheritDoc */
4474126d4bSAnna Dabrowska    public function render($mode, Doku_Renderer $renderer, $data)
4574126d4bSAnna Dabrowska    {
4674126d4bSAnna Dabrowska        if ($mode !== 'xhtml') {
4774126d4bSAnna Dabrowska            return false;
4874126d4bSAnna Dabrowska        }
4974126d4bSAnna Dabrowska
5074126d4bSAnna Dabrowska        $renderer->info['cache'] = false;
5174126d4bSAnna Dabrowska
5274126d4bSAnna Dabrowska        $renderer->doc .= '<div class="plugin-acknowledge-listing">';
53833123deSAnna Dabrowska        $renderer->doc .= $this->getListing($data['includeDone']);
5474126d4bSAnna Dabrowska        $renderer->doc .= '</div>';
5574126d4bSAnna Dabrowska        return true;
5674126d4bSAnna Dabrowska    }
5774126d4bSAnna Dabrowska
5874126d4bSAnna Dabrowska    /**
59833123deSAnna Dabrowska     * Returns the list of pages to be acknowledged by the user,
60833123deSAnna Dabrowska     * optionally including past acknowledgments.
61833123deSAnna Dabrowska     *
62833123deSAnna Dabrowska     * @param bool $includeDone
6374126d4bSAnna Dabrowska     *
6474126d4bSAnna Dabrowska     * @return string
6574126d4bSAnna Dabrowska     */
66833123deSAnna Dabrowska    protected function getListing($includeDone)
6774126d4bSAnna Dabrowska    {
6874126d4bSAnna Dabrowska        global $INPUT;
698c50976eSAnna Dabrowska        global $USERINFO;
708c50976eSAnna Dabrowska
7174126d4bSAnna Dabrowska        $user = $INPUT->server->str('REMOTE_USER');
7274126d4bSAnna Dabrowska        if ($user === '') return '';
7374126d4bSAnna Dabrowska
748c50976eSAnna Dabrowska        $groups = $USERINFO['grps'];
758c50976eSAnna Dabrowska
7674126d4bSAnna Dabrowska        /** @var helper_plugin_acknowledge $helper */
7774126d4bSAnna Dabrowska        $helper = plugin_load('helper', 'acknowledge');
78833123deSAnna Dabrowska        $items = $helper->getUserAssignments($user, $groups, $includeDone);
7974126d4bSAnna Dabrowska
8074126d4bSAnna Dabrowska        $html =  $this->getLang('ackNotFound');
8174126d4bSAnna Dabrowska
82833123deSAnna Dabrowska        if (!empty($items)) {
8374126d4bSAnna Dabrowska            $html = '<ul>';
84833123deSAnna Dabrowska            foreach ($items as $item) {
85833123deSAnna Dabrowska                $done = $item['ack'] ?
86*c8f8e8a1SAnna Dabrowska                    ' <span title="' . sprintf($this->getLang('ackGranted'), dformat($item['ack'])) . '">&#x2714;</span>'
87833123deSAnna Dabrowska                    : '';
88833123deSAnna Dabrowska                $html .= '<li>' . html_wikilink(':' . $item['page']) . $done . '</li>';
8974126d4bSAnna Dabrowska            }
9074126d4bSAnna Dabrowska            $html .= '</ul>';
9174126d4bSAnna Dabrowska        }
9274126d4bSAnna Dabrowska
9374126d4bSAnna Dabrowska        return $html;
9474126d4bSAnna Dabrowska    }
9574126d4bSAnna Dabrowska}
9674126d4bSAnna Dabrowska
97