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'])) . '">✔</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