You are here

public function SVG::flush in Forena Reports 8

Write the output to disk.

Return value

mixed

Overrides DocumentBase::flush

File

src/FrxPlugin/Document/SVG.php, line 34
SVG Embedded SVG Graph as it's own document. @author davidmetzler

Class

SVG
Provides SVG file exports

Namespace

Drupal\forena\FrxPlugin\Document

Code

public function flush() {
  $output = '';
  $svg = NULL;
  $doc = new \DomDocument();
  $xml_body = '<html><body>' . $this->write_buffer . '</body></html>';
  $doc->formatOutput = FALSE;
  $doc->strictErrorChecking = FALSE;
  libxml_use_internal_errors(true);
  $doc
    ->loadXML($xml_body);
  libxml_clear_errors();
  $xml = simplexml_import_dom($doc);

  // Extract first SVG from document.
  $xml
    ->registerXPathNamespace('__empty_ns', 'http://www.w3.org/2000/svg');
  if ($xml) {
    $svg = $xml
      ->xpath('//__empty_ns:svg');
    if (!$svg) {
      $svg = $xml
        ->xpath('//svg');
    }
  }
  if ($svg) {
    $output .= $svg[0]
      ->asXML();
  }
  else {
    $output = '<svg/>';
  }

  // Add in namespaces
  if (!strpos($output, 'xmlns')) {
    $output = str_replace('<svg', '<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"', $output);
  }
  return $output;
}