You are here

private function FrxReport::parse_ids in Forena Reports 7.3

Same name and namespace in other branches
  1. 6.2 FrxReport.inc \FrxReport::parse_ids()
  2. 6 FrxReport.inc \FrxReport::parse_ids()
  3. 7 FrxReport.inc \FrxReport::parse_ids()
  4. 7.2 FrxReport.inc \FrxReport::parse_ids()
  5. 7.4 FrxReport.inc \FrxReport::parse_ids()

Make sure all xml elements have ids

1 call to FrxReport::parse_ids()
FrxReport::get_attributes_by_id in ./FrxReport.inc
Get the attributes by

File

./FrxReport.inc, line 537
Basic report provider. Controls the rendering of the report.

Class

FrxReport

Code

private function parse_ids() {
  $i = 0;
  if ($this->rpt_xml) {
    $this->rpt_xml
      ->registerXPathNamespace('frx', FRX_NS);
    $frx_attributes = array();
    $frx_nodes = $this->rpt_xml
      ->xpath('body//*[@frx:*]');
    if ($frx_nodes) {
      foreach ($frx_nodes as $node) {
        $attr_nodes = $node
          ->attributes(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(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;
  }
}