states = [$this->getConf('sum approved'), $this->getConf('sum ready for approval'), $this->getConf('sum draft')]; } function getType() { return 'substition'; } function getSort() { return 20; } function PType() { return 'block'; } function connectTo($mode) { $this->Lexer->addSpecialPattern('----+ *approve table *-+\n.*?----+', $mode,'plugin_approve_table'); } function handle($match, $state, $pos, Doku_Handler $handler){ $lines = explode("\n", $match); array_shift($lines); array_pop($lines); $params = []; foreach ($lines as $line) { $pair = explode(':', $line, 2); if (count($pair) < 2) { continue; } $key = trim($pair[0]); $value = trim($pair[1]); if ($key == 'states') { $value = array_map('trim', explode(',', $value)); //normalize $value = array_map('strtolower', $value); $value = array_map('ucfirst', $value); foreach ($value as $state) { if (!in_array($state, $this->states)) { msg('approve plugin: unknown state "'.$state.'" should be: ' . implode(', ', $this->states), -1); return false; } } } elseif($key == 'filter' && preg_match($value, null) === false) { msg('approve plugin: invalid filter regex', -1); return false; } elseif ($key == 'summarize') { $value = $value == '0' ? false : true; } $params[$key] = $value; } return $params; } function render($mode, Doku_Renderer $renderer, $params) { global $conf; if ($mode != 'xhtml') return false; if ($params === false) return false; $pageSearch = new PageSearch(); $defaults = [ 'namespace' => '', 'filter' => false, 'states' => $this->states, 'summarize' => true, ]; $params = array_replace($defaults, $params); $namespace = cleanID(getNS($params['namespace'] . ":*")); $pages = $pageSearch->getPagesFromNamespace($namespace, $params['filter'], $params['states']); usort($pages, array($pageSearch, 'pageSorter')); // Output Table $renderer->doc .= '
' . $this->getLang('hdr_page') . ' | '; $renderer->doc .= '' . $this->getLang('hdr_state') . ' | '; $renderer->doc .= '' . $this->getLang('hdr_updated') . ' | '; $renderer->doc .= '
---|---|---|
'; $renderer->doc .= $name_ns; $renderer->doc .= ' '; $renderer->doc .= ' | ||
'; if ($conf['useheading'] === '1') { $heading = p_get_first_heading($page[0]); if ($heading != '') { $renderer->doc .= $heading; } else { $renderer->doc .= $page[0]; } } else { $renderer->doc .= $page[0]; } $renderer->doc .= ' | '; $renderer->doc .= ''.$state. ' '. $this->getLang('by'). ' ' . $page[4]; $renderer->doc .= ' | '; $renderer->doc .= $updated; $renderer->doc .= ' |
'; $renderer->doc .= $this->getLang('all_approved_ready'); $renderer->doc .= ' | '; $renderer->doc .= ''; $percent = 0; if($all > 0) { $percent = $all_approved_ready * 100 / $all; } $renderer->doc .= $all_approved_ready . ' / ' . $all . sprintf(" (%.0f%%)", $percent); $renderer->doc .= ' | |
'; $renderer->doc .= $this->getLang('all_approved'); $renderer->doc .= ' | '; $renderer->doc .= ''; $percent = 0; if($all > 0) { $percent = $all_approved * 100 / $all; } $renderer->doc .= $all_approved . ' / ' . $all . sprintf(" (%.0f%%)", $percent); $renderer->doc .= ' |