You are here

class FrxSVGDoc in Forena Reports 7.4

Same name and namespace in other branches
  1. 7.3 docformats/FrxSVGDoc.inc \FrxSVGDoc

@file FrxSVGDoc Embedded SVG Graph as it's own document. @author davidmetzler

Hierarchy

Expanded class hierarchy of FrxSVGDoc

1 string reference to 'FrxSVGDoc'
forena_forena_document_types in ./forena.module
Self register document formats with Forena

File

docformats/FrxSVGDoc.inc, line 8
FrxSVGDoc Embedded SVG Graph as it's own document. @author davidmetzler

View source
class FrxSVGDoc extends FrxDocument {
  public function __construct() {
    $this->content_type = 'image/svg+xml';
  }
  public function header($r, $print = TRUE) {
    $r->html = '';
    if ($print && $this->content_type) {
      header('Content-Type: ' . $this->content_type);
    }
  }
  public function render($r, $format, $options = array()) {
    $output = '';
    $doc = new DomDocument();
    $xml_body = '<html><body>' . $r->html . '</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);
    $xml
      ->registerXPathNamespace('__empty_ns', 'http://www.w3.org/2000/svg');
    if ($xml) {
      $svg = $xml
        ->xpath('//__empty_ns:svg');
    }
    if ($xml && !$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;
  }

  /**
   * Output SVG content type headers.
   */
  public function output(&$output) {
    if ($this->content_type) {
      print $output;
      return TRUE;
    }
    else {
      return FALSE;
    }
  }

}

Members

Namesort descending Modifiers Type Description Overrides
FrxDocument::$allowDirectOutput public property
FrxDocument::$charset public property
FrxDocument::$content_type public property
FrxDocument::$format public property
FrxDocument::$print public property
FrxDocument::check_markup public function Wrapper function for check output to default the right type.
FrxDocument::convertCharset public function
FrxDocument::loadCSSFiles public function
FrxSVGDoc::header public function Overrides FrxDocument::header
FrxSVGDoc::output public function Output SVG content type headers. Overrides FrxDocument::output
FrxSVGDoc::render public function Overrides FrxDocument::render
FrxSVGDoc::__construct public function