1*ce9be9e9SSzymon Olewniczak<?php 2*ce9be9e9SSzymon Olewniczak 3*ce9be9e9SSzymon Olewniczak// must be run within DokuWiki 4*ce9be9e9SSzymon Olewniczakif(!defined('DOKU_INC')) die(); 5*ce9be9e9SSzymon Olewniczak 6*ce9be9e9SSzymon Olewniczak 7*ce9be9e9SSzymon Olewniczakclass syntax_plugin_ireadit_list extends DokuWiki_Syntax_Plugin { 8*ce9be9e9SSzymon Olewniczak 9*ce9be9e9SSzymon Olewniczak function getType() { 10*ce9be9e9SSzymon Olewniczak return 'substition'; 11*ce9be9e9SSzymon Olewniczak } 12*ce9be9e9SSzymon Olewniczak 13*ce9be9e9SSzymon Olewniczak function getSort() { 14*ce9be9e9SSzymon Olewniczak return 20; 15*ce9be9e9SSzymon Olewniczak } 16*ce9be9e9SSzymon Olewniczak 17*ce9be9e9SSzymon Olewniczak function PType() { 18*ce9be9e9SSzymon Olewniczak return 'block'; 19*ce9be9e9SSzymon Olewniczak } 20*ce9be9e9SSzymon Olewniczak 21*ce9be9e9SSzymon Olewniczak function connectTo($mode) { 22*ce9be9e9SSzymon Olewniczak $this->Lexer->addSpecialPattern('----+ *ireadit list *-+\n.*?----+', $mode,'plugin_ireadit_list'); 23*ce9be9e9SSzymon Olewniczak } 24*ce9be9e9SSzymon Olewniczak 25*ce9be9e9SSzymon Olewniczak function handle($match, $state, $pos, Doku_Handler $handler){ 26*ce9be9e9SSzymon Olewniczak $lines = explode("\n", $match); 27*ce9be9e9SSzymon Olewniczak array_shift($lines); 28*ce9be9e9SSzymon Olewniczak array_pop($lines); 29*ce9be9e9SSzymon Olewniczak 30*ce9be9e9SSzymon Olewniczak $params = [ 31*ce9be9e9SSzymon Olewniczak 'user' => '$USER$', 32*ce9be9e9SSzymon Olewniczak 'state' => 'all' 33*ce9be9e9SSzymon Olewniczak ]; 34*ce9be9e9SSzymon Olewniczak 35*ce9be9e9SSzymon Olewniczak foreach ($lines as $line) { 36*ce9be9e9SSzymon Olewniczak $pair = explode(':', $line, 2); 37*ce9be9e9SSzymon Olewniczak if (count($pair) < 2) { 38*ce9be9e9SSzymon Olewniczak continue; 39*ce9be9e9SSzymon Olewniczak } 40*ce9be9e9SSzymon Olewniczak $key = trim($pair[0]); 41*ce9be9e9SSzymon Olewniczak $value = trim($pair[1]); 42*ce9be9e9SSzymon Olewniczak if ($key == 'states') { 43*ce9be9e9SSzymon Olewniczak $states = ['read', 'not read', 'all']; 44*ce9be9e9SSzymon Olewniczak $value = strtolower($value); 45*ce9be9e9SSzymon Olewniczak if (!in_array($state, $states)) { 46*ce9be9e9SSzymon Olewniczak msg('ireadit plugin: unknown state "'.$state.'" should be: ' . 47*ce9be9e9SSzymon Olewniczak implode(', ', $states), -1); 48*ce9be9e9SSzymon Olewniczak return false; 49*ce9be9e9SSzymon Olewniczak } 50*ce9be9e9SSzymon Olewniczak } 51*ce9be9e9SSzymon Olewniczak $params[$key] = $value; 52*ce9be9e9SSzymon Olewniczak } 53*ce9be9e9SSzymon Olewniczak return $params; 54*ce9be9e9SSzymon Olewniczak } 55*ce9be9e9SSzymon Olewniczak 56*ce9be9e9SSzymon Olewniczak /** 57*ce9be9e9SSzymon Olewniczak * Render xhtml output or metadata 58*ce9be9e9SSzymon Olewniczak * 59*ce9be9e9SSzymon Olewniczak * @param string $mode Renderer mode (supported modes: xhtml) 60*ce9be9e9SSzymon Olewniczak * @param Doku_Renderer $renderer The renderer 61*ce9be9e9SSzymon Olewniczak * @param array $data The data from the handler() function 62*ce9be9e9SSzymon Olewniczak * 63*ce9be9e9SSzymon Olewniczak * @return bool If rendering was successful. 64*ce9be9e9SSzymon Olewniczak */ 65*ce9be9e9SSzymon Olewniczak 66*ce9be9e9SSzymon Olewniczak public function render($mode, Doku_Renderer $renderer, $data) 67*ce9be9e9SSzymon Olewniczak { 68*ce9be9e9SSzymon Olewniczak $method = 'render' . ucfirst($mode); 69*ce9be9e9SSzymon Olewniczak if (method_exists($this, $method)) { 70*ce9be9e9SSzymon Olewniczak call_user_func([$this, $method], $renderer, $data); 71*ce9be9e9SSzymon Olewniczak return true; 72*ce9be9e9SSzymon Olewniczak } 73*ce9be9e9SSzymon Olewniczak return false; 74*ce9be9e9SSzymon Olewniczak } 75*ce9be9e9SSzymon Olewniczak 76*ce9be9e9SSzymon Olewniczak /** 77*ce9be9e9SSzymon Olewniczak * Render metadata 78*ce9be9e9SSzymon Olewniczak * 79*ce9be9e9SSzymon Olewniczak * @param Doku_Renderer $renderer The renderer 80*ce9be9e9SSzymon Olewniczak * @param array $params The data from the handler() function 81*ce9be9e9SSzymon Olewniczak */ 82*ce9be9e9SSzymon Olewniczak public function renderMetadata(Doku_Renderer $renderer, $params) 83*ce9be9e9SSzymon Olewniczak { 84*ce9be9e9SSzymon Olewniczak $renderer->meta['plugin']['ireadit_list'] = []; 85*ce9be9e9SSzymon Olewniczak 86*ce9be9e9SSzymon Olewniczak if ($params['user'] == '$USER$') { 87*ce9be9e9SSzymon Olewniczak $renderer->meta['plugin']['ireadit_list']['dynamic_user'] = true; 88*ce9be9e9SSzymon Olewniczak } 89*ce9be9e9SSzymon Olewniczak } 90*ce9be9e9SSzymon Olewniczak 91*ce9be9e9SSzymon Olewniczak public function renderXhtml(Doku_Renderer $renderer, $params) 92*ce9be9e9SSzymon Olewniczak { 93*ce9be9e9SSzymon Olewniczak global $INFO; 94*ce9be9e9SSzymon Olewniczak 95*ce9be9e9SSzymon Olewniczak global $conf; 96*ce9be9e9SSzymon Olewniczak /** @var DokuWiki_Auth_Plugin $auth */ 97*ce9be9e9SSzymon Olewniczak global $auth; 98*ce9be9e9SSzymon Olewniczak 99*ce9be9e9SSzymon Olewniczak /** @var \helper_plugin_ireadit_db $db_helper */ 100*ce9be9e9SSzymon Olewniczak $db_helper = plugin_load('helper', 'ireadit_db'); 101*ce9be9e9SSzymon Olewniczak $sqlite = $db_helper->getDB(); 102*ce9be9e9SSzymon Olewniczak 103*ce9be9e9SSzymon Olewniczak if ($params['user'] == '$USER$') { 104*ce9be9e9SSzymon Olewniczak $params['user'] = $INFO['client']; 105*ce9be9e9SSzymon Olewniczak } 106*ce9be9e9SSzymon Olewniczak 107*ce9be9e9SSzymon Olewniczak $where_query = []; 108*ce9be9e9SSzymon Olewniczak $query_args = []; 109*ce9be9e9SSzymon Olewniczak if ($params['user']) { 110*ce9be9e9SSzymon Olewniczak $where_query[] = "ireadit.user=?"; 111*ce9be9e9SSzymon Olewniczak $query_args[] = $params['user']; 112*ce9be9e9SSzymon Olewniczak } 113*ce9be9e9SSzymon Olewniczak 114*ce9be9e9SSzymon Olewniczak if ($params['state'] == 'read') { 115*ce9be9e9SSzymon Olewniczak $where_query[] = "ireadit.timestamp IS NOT NULL"; 116*ce9be9e9SSzymon Olewniczak } elseif($params['state'] == 'not read') { 117*ce9be9e9SSzymon Olewniczak $where_query[] = "ireadit.timestamp IS NULL"; 118*ce9be9e9SSzymon Olewniczak } 119*ce9be9e9SSzymon Olewniczak 120*ce9be9e9SSzymon Olewniczak $where_query_string = ''; 121*ce9be9e9SSzymon Olewniczak if ($where_query) { 122*ce9be9e9SSzymon Olewniczak $where_query_string = 'WHERE ' . implode(' AND ', $where_query); 123*ce9be9e9SSzymon Olewniczak } 124*ce9be9e9SSzymon Olewniczak 125*ce9be9e9SSzymon Olewniczak $q = "SELECT ireadit.page 126*ce9be9e9SSzymon Olewniczak FROM ireadit INNER JOIN meta 127*ce9be9e9SSzymon Olewniczak ON (ireadit.page=meta.page AND ireadit.rev=meta.last_change_date) 128*ce9be9e9SSzymon Olewniczak $where_query_string 129*ce9be9e9SSzymon Olewniczak ORDER BY ireadit.page"; 130*ce9be9e9SSzymon Olewniczak 131*ce9be9e9SSzymon Olewniczak $res = $sqlite->query($q, $query_args); 132*ce9be9e9SSzymon Olewniczak 133*ce9be9e9SSzymon Olewniczak // Output List 134*ce9be9e9SSzymon Olewniczak $renderer->doc .= '<ul>'; 135*ce9be9e9SSzymon Olewniczak while ($row = $sqlite->res_fetch_assoc($res)) { 136*ce9be9e9SSzymon Olewniczak $page = $row['page']; 137*ce9be9e9SSzymon Olewniczak $link = '<a class="wikilink1" href="' . wl($page) . '">'; 138*ce9be9e9SSzymon Olewniczak if (useHeading('content')) { 139*ce9be9e9SSzymon Olewniczak $heading = p_get_first_heading($page); 140*ce9be9e9SSzymon Olewniczak if (!blank($heading)) { 141*ce9be9e9SSzymon Olewniczak $link .= $heading; 142*ce9be9e9SSzymon Olewniczak } else { 143*ce9be9e9SSzymon Olewniczak $link .= noNSorNS($page); 144*ce9be9e9SSzymon Olewniczak } 145*ce9be9e9SSzymon Olewniczak } else { 146*ce9be9e9SSzymon Olewniczak $link .= noNSorNS($page); 147*ce9be9e9SSzymon Olewniczak } 148*ce9be9e9SSzymon Olewniczak $link .= '</a>'; 149*ce9be9e9SSzymon Olewniczak $renderer->doc .= '<div class="li">' . $link . '</div>'; 150*ce9be9e9SSzymon Olewniczak } 151*ce9be9e9SSzymon Olewniczak $renderer->doc .= '</ul>'; 152*ce9be9e9SSzymon Olewniczak } 153*ce9be9e9SSzymon Olewniczak} 154