function render($mode, Doku_Renderer $renderer, $data) { $renderer->linebreak(); return true; }
/** * 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; }