/** * Print a simple listing table * * @param array $data * @param float $max * @param string $title * @param bool $istraffic * @return void */ private function listtable(&$data, $max, $title, $istraffic = false) { if (!$data) { $data = array(); } arsort($data); $row = 1; $this->R->table_open(); $this->R->tablerow_open(); $this->head($title, 4); $this->R->tablerow_close(); $this->R->tablerow_open(); $this->head('#'); $this->head($this->getLang('name')); if ($istraffic) { $this->head($this->getLang('traffic'), 2); } else { $this->head($this->getLang('hits'), 2); } $this->R->tablerow_close(); foreach ($data as $key => $count) { if ($istraffic) { $val = filesize_h($count); } else { $val = $count; } $this->R->tablerow_open(); $this->cell($row); $this->hcell($key); $this->cell($val); $this->cell($this->pct($count, $max)); $this->R->tablerow_close(); $row++; if ($row > $this->log->top_limit) { break; } } $this->R->table_close(); }
/** * Renders activity report to the page * @param string $mode Name of the format mode * @param Doku_Renderer $renderer ref to the Doku_Renderer * @param array $params Parameter object returned by handle() */ function renderActivityByNamespaceReport($mode, Doku_Renderer $renderer, $params) { global $CHUNKPROGRESS_STATUS_TAGS; $renderer->table_open(); $renderer->tablerow_open(); $renderer->tablecell_open(); $renderer->strong_open(); $renderer->unformatted("Namespace"); $renderer->strong_close(); $renderer->tablecell_close(); foreach ($CHUNKPROGRESS_STATUS_TAGS as $status) { $renderer->tablecell_open(); $renderer->strong_open(); $renderer->unformatted($status); $renderer->strong_close(); $renderer->tablecell_close(); } $renderer->tablerow_close(); $count_by_sub_namespace_then_status = $params["count_by_sub_namespace_then_status"]; foreach ($count_by_sub_namespace_then_status as $sub_namespace => $statuses) { $renderer->tablerow_open(); $renderer->tablecell_open(); $renderer->unformatted($sub_namespace); $renderer->tablecell_close(); foreach ($CHUNKPROGRESS_STATUS_TAGS as $status) { $renderer->tablecell_open(); if (array_key_exists($status, $statuses)) { $renderer->unformatted($statuses[$status]); } $renderer->tablecell_close(); } $renderer->tablerow_close(); } $renderer->table_close(); }
/** * Create output */ function render($mode, Doku_Renderer &$renderer, $opt) { if ($mode == 'metadata') { return false; } // load file data if ($opt['file']) { if (preg_match('/^https?:\\/\\//i', $opt['file'])) { require_once DOKU_INC . 'inc/HTTPClient.php'; $http = new DokuHTTPClient(); $opt['content'] = $http->get($opt['file']); if ($opt['content'] === false) { $renderer->cdata('Failed to fetch remote CSV data'); return true; } } else { $renderer->info['cache'] = false; if (auth_quickaclcheck(getNS($opt['file']) . ':*') < AUTH_READ) { $renderer->cdata('Access denied to CSV data'); return true; } else { $file = mediaFN($opt['file']); $opt['content'] = io_readFile($file); } } // if not valid UTF-8 is given we assume ISO-8859-1 if (!utf8_check($opt['content'])) { $opt['content'] = utf8_encode($opt['content']); } } // check if there is content $content =& $opt['content']; $content = trim($content); if ($content === '') { $renderer->cdata('No csv data found'); return true; } // Export the csv file $targetfile = ''; $export = $opt['export']; if ($export != '') { $targetfile = htmlspecialchars(trim($export)); if (auth_quickaclcheck(getNS($targetfile . ':*')) < AUTH_EDIT) { $renderer->cdata('Access denied: Could not create download link.'); $targetfile = ''; return true; } else { $file = mediaFN($targetfile); if (file_put_contents($file, $content, LOCK_EX) > 0) { $linkname = $opt['linkname']; if ($linkname == '') { $linkname = 'Download CSV file'; } } else { $targetfile = ''; $renderer->cdata('Failed to write ' . $file . ': Could not create download link.'); return true; } } } // get the first row - it will define the structure $row = $this->csv_explode_row($content, $opt['delim'], $opt['enclosure'], $opt['escape']); $maxcol = count($row); $line = 0; // create the table and start rendering $renderer->table_open($maxcol); while ($row !== false) { // make sure we have enough columns $row = array_pad($row, $maxcol, ''); // render $renderer->tablerow_open(); for ($i = 0; $i < $maxcol;) { $span = 1; // lookahead to find spanning cells if ($opt['span_empty_cols']) { for ($j = $i + 1; $j < $maxcol; $j++) { if ($row[$j] === '') { $span++; } else { break; } } } // open cell if ($line < $opt['hdr_rows'] || $i < $opt['hdr_cols']) { $renderer->tableheader_open($span); } else { $renderer->tablecell_open($span); } // print cell content, call linebreak() for newlines $lines = explode("\n", $row[$i]); $cnt = count($lines); for ($k = 0; $k < $cnt; $k++) { $renderer->cdata($lines[$k]); if ($k < $cnt - 1) { $renderer->linebreak(); } } // close cell if ($line < $opt['hdr_rows'] || $i < $opt['hdr_cols']) { $renderer->tableheader_close(); } else { $renderer->tablecell_close(); } $i += $span; } $renderer->tablerow_close(); // get next row $row = $this->csv_explode_row($content, $opt['delim'], $opt['enclosure'], $opt['escape']); $line++; } $renderer->table_close(); if ($targetfile != '') { $renderer->internalmedia($targetfile, $linkname); } return true; }
/** * @param string $mode Name of the format mode * @param Doku_Renderer $renderer ref to the Doku_Renderer * @param array $params Parameter object returned by handle() */ function renderActivityByUserReport($mode, Doku_Renderer $renderer, $params) { global $CHUNKPROGRESS_STATUS_TAGS; $renderer->table_open(); $renderer->tablerow_open(); $renderer->tablecell_open(); $renderer->strong_open(); $renderer->unformatted("User"); $renderer->strong_close(); $renderer->tablecell_close(); foreach ($CHUNKPROGRESS_STATUS_TAGS as $status) { $renderer->tablecell_open(); $renderer->strong_open(); $renderer->unformatted($status); $renderer->strong_close(); $renderer->tablecell_close(); } $renderer->tablerow_close(); $user_status_count = $params["user_status_count"]; foreach ($user_status_count as $user => $statuses) { $renderer->tablerow_open(); $renderer->tablecell_open(); $renderer->unformatted($user); $renderer->tablecell_close(); foreach ($CHUNKPROGRESS_STATUS_TAGS as $status) { $renderer->tablecell_open(); if (array_key_exists($status, $statuses)) { $renderer->unformatted($statuses[$status]); } $renderer->tablecell_close(); } $renderer->tablerow_close(); } $renderer->table_close(); }
/** * Create table footer * * @param array $data instruction by handler() * @param int $rowcnt number of rows * @param Doku_Renderer $R the current DokuWiki renderer */ function postList($data, $rowcnt, Doku_Renderer $R) { global $ID; $text = ''; // if summarize was set, add sums if ($data['summarize']) { $text .= '<tr>'; $len = count($data['cols']); if ($data['rownumbers']) { $text .= '<td></td>'; } for ($i = 0; $i < $len; $i++) { $text .= '<td class="' . $data['align'][$i] . 'align">'; if (!empty($this->sums[$i])) { $text .= '∑ ' . $this->sums[$i]; } else { $text .= ' '; } $text .= '</td>'; } $text .= '<tr>'; } // if limit was set, add control if ($data['limit']) { $text .= '<tr><th colspan="' . (count($data['cols']) + ($data['rownumbers'] ? 1 : 0)) . '">'; $offset = (int) $_REQUEST['dataofs']; if ($offset) { $prev = $offset - $data['limit']; if ($prev < 0) { $prev = 0; } // keep url params $params = $this->dthlp->_a2ua('dataflt', $_REQUEST['dataflt']); if (isset($_REQUEST['datasrt'])) { $params['datasrt'] = $_REQUEST['datasrt']; } $params['dataofs'] = $prev; $text .= '<a href="' . wl($ID, $params) . '" title="' . $this->getLang('prev') . '" class="prev">' . $this->getLang('prev') . '</a>'; } $text .= ' '; if ($rowcnt > $data['limit']) { $next = $offset + $data['limit']; // keep url params $params = $this->dthlp->_a2ua('dataflt', $_REQUEST['dataflt']); if (isset($_REQUEST['datasrt'])) { $params['datasrt'] = $_REQUEST['datasrt']; } $params['dataofs'] = $next; $text .= '<a href="' . wl($ID, $params) . '" title="' . $this->getLang('next') . '" class="next">' . $this->getLang('next') . '</a>'; } $text .= '</th></tr>'; } $text .= '</table></div>'; switch ($R->getFormat()) { case 'xhtml': $R->doc .= $text; break; case 'odt': $R->table_close(); break; } }