You are here

private function ReportEditor::parse_ids in Forena Reports 8

Same name and namespace in other branches
  1. 7.5 src/Editor/ReportEditor.php \Drupal\forena\Editor\ReportEditor::parse_ids()

Make sure all xml elements have ids

1 call to ReportEditor::parse_ids()
ReportEditor::get_attributes_by_id in src/Editor/ReportEditor.php
Get the attributes by

File

src/Editor/ReportEditor.php, line 703
ReportEditor.inc Wrapper XML class for working with DOM object. It provides helper Enter description here ... @author metzlerd

Class

ReportEditor

Namespace

Drupal\forena\Editor

Code

private function parse_ids() {
  $i = 0;
  if ($this->simplexml) {
    $this->simplexml
      ->registerXPathNamespace('frx', Report::FRX_NS);
    $frx_attributes = array();
    $frx_nodes = $this->simplexml
      ->xpath('body//*[@frx:*]');
    if ($frx_nodes) {
      foreach ($frx_nodes as $node) {
        $attr_nodes = $node
          ->attributes(Report::FRX_NS);
        if ($attr_nodes) {

          // Make sure every element has an id
          $i++;
          $id = 'forena-' . $i;
          if (!(string) $node['id']) {
            $node
              ->addAttribute('id', $id);
          }
          else {
            if (strpos((string) $node['id'], 'forena-') === 0) {

              // Reset the id to the numerically generated one
              $node['id'] = $id;
            }
            else {

              // Use the id of the element
              $id = (string) $node['id'];
            }
          }

          // Save away the frx attributes in case we need them later.
          $attr_nodes = $node
            ->attributes(Report::FRX_NS);
          $attrs = array();
          if ($attr_nodes) {
            foreach ($attr_nodes as $key => $value) {
              $attrs[$key] = (string) $value;
            }
          }

          // Save away the attributes
          $frx_attributes[$id] = $attrs;
        }
      }
    }
    $this->frx_attributes = $frx_attributes;
  }
}