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