info['struct_table_hash']) || $this->info['struct_table_hash'] != $INPUT->str('hash') ) { return false; } if (!empty($this->info['struct_table_meta'])) { return false; } return true; } /** * Our own format * * @return string */ public function getFormat() { return 'struct_csv'; } /** * Set proper headers */ public function document_start() { global $ID; $filename = noNS($ID ?? 'data') . '.csv'; $headers = [ 'Content-Type' => 'text/csv', 'Content-Disposition' => 'attachment; filename="' . $filename . '";' ]; p_set_metadata($ID, ['format' => ['struct_csv' => $headers]]); // don't cache $this->nocache(); } /** * Opening a table row prevents the separator for the first following cell */ public function tablerow_open() { if (!$this->doOutput()) return; $this->first = true; } /** * Output the delimiter (unless it's the first cell of this row) and the text wrapper * * @param int $colspan ignored * @param null $align ignored * @param int $rowspan ignored * */ public function tablecell_open($colspan = 1, $align = null, $rowspan = 1) { if (!$this->doOutput()) return; if (!$this->first) { $this->doc .= ","; } $this->first = false; $this->doc .= '"'; } /** * Close the text wrapper */ public function tablecell_close() { if (!$this->doOutput()) return; $this->doc .= '"'; } /** * Alias for tablecell_open * * @param int $colspan ignored * @param null $align ignored * @param int $rowspan ignored */ public function tableheader_open($colspan = 1, $align = null, $rowspan = 1) { $this->tablecell_open($colspan, $align, $rowspan); } /** * Alias for tablecell_close */ public function tableheader_close() { $this->tablecell_close(); } /** * Add CRLF newline at the end of one line */ public function tablerow_close() { if (!$this->doOutput()) return; $this->doc .= "\r\n"; } /** * Outputs cell content * * @param string $text */ public function cdata($text) { if (!$this->doOutput()) return; if ($text === '') return; $this->doc .= str_replace('"', '""', $text); } #region overrides using cdata for output public function internallink($link, $title = null) { if (is_null($title) || is_array($title) || $title == '') { $title = $this->_simpleTitle($link); } $this->cdata($title); } public function externallink($link, $title = null) { if (is_null($title) || is_array($title) || $title == '') { $title = $link; } $this->cdata($title); } public function emaillink($address, $name = null) { $this->cdata($address); } public function plugin($name, $args, $state = '', $match = '') { if (substr($name, 0, 7) == 'struct_') { parent::plugin($name, $args, $state, $match); } else { $this->cdata($match); } } public function acronym($acronym) { $this->cdata($acronym); } public function code($text, $lang = null, $file = null) { $this->cdata($text); } public function header($text, $level, $pos) { $this->cdata($text); } public function linebreak() { $this->cdata("\r\n"); } public function unformatted($text) { $this->cdata($text); } public function php($text) { $this->cdata($text); } public function phpblock($text) { $this->cdata($text); } public function html($text) { $this->cdata($text); } public function htmlblock($text) { $this->cdata($text); } public function preformatted($text) { $this->cdata($text); } public function file($text, $lang = null, $file = null) { $this->cdata($text); } public function smiley($smiley) { $this->cdata($smiley); } public function entity($entity) { $this->cdata($entity); } public function multiplyentity($x, $y) { $this->cdata($x . 'x' . $y); } public function locallink($hash, $name = null) { if (is_null($name) || is_array($name) || $name == '') { $name = $hash; } $this->cdata($name); } public function interwikilink($link, $title, $wikiName, $wikiUri) { if (is_array($title) || $title == '') { $title = $wikiName . '>' . $link; } $this->cdata($title); } public function filelink($link, $title = null) { if (is_null($title) || is_array($title) || $title == '') { $title = $link; } $this->cdata($title); } public function windowssharelink($link, $title = null) { if (is_null($title) || is_array($title) || $title == '') { $title = $link; } $this->cdata($title); } public function internalmedia( $src, $title = null, $align = null, $width = null, $height = null, $cache = null, $linking = null ) { $this->cdata($src); } public function externalmedia( $src, $title = null, $align = null, $width = null, $height = null, $cache = null, $linking = null ) { $this->cdata($src); } public function internalmedialink( $src, $title = null, $align = null, $width = null, $height = null, $cache = null ) { $this->cdata($src); } public function externalmedialink( $src, $title = null, $align = null, $width = null, $height = null, $cache = null ) { $this->cdata($src); } #endregion }