forena-8.x-1.x-dev/src/FrxPlugin/Template/TemplateBase.php

src/FrxPlugin/Template/TemplateBase.php
<?php
/**
 * @file FrxRenderer.php
 * Base class for FrxAPI custom Renderer
 * @author davidmetzler
 *
 */
namespace Drupal\forena\Template;
use Drupal\forena\AppService;
use Drupal\forena\DataManager;
use DOMXPath;
use DOMElement;
use Drupal\forena\FrxAPI;
use Drupal\forena\Report;
use DOMNode;
abstract class TemplateBase implements TemplateInterface {
  use FrxAPI;
  /** @var  array Confiuration of template */
  public $configuration;
  public $name;
  public $id;
  public $columns;
  public $numeric_columns;
  public $xmlns = 'urn:FrxReports';

  public function configure($config) {
    $this->configuration = $config;
  }


  /**
   * Return the inside xml of the current node
   * @param \SimpleXMLElement $xml
   *   XML Node of report containing block.
   * @return string 
   *   String representation of node children. 
   */
  public function innerXML(\SimpleXMLElement $xml) {
    $tag = $xml->getName();
    $text = '';
    if (is_object($xml) && is_object($xml->$tag)) {
      $text = $xml->asXML();
      $text = preg_replace("/<\/?" . $tag . "(.|\s)*?>/", "", $text);
    }
    return $text;
  }


  /**
   * Extract a list of columns from the data context.
   * @param \SimpleXMLElement $xml The xml data
   * @param string $path
   *   Xpath used to determine the columns
   * @return array 
   *   Data columns or fields found in data. 
   */
  public function columns(\SimpleXMLElement $xml, $path='/*/*') {
    //create an array of columns
    if (!is_object($xml)) return array();
    // Use xpath if possible otherwise iterate.
    if (method_exists($xml, 'xpath')) {
      $rows = $xml->xpath($path);
    }
    else {
      $rows = $xml;
    }
    $column_array = array();
    $numeric_columns = array();
    foreach ($rows as $columns) {
      foreach ($columns as $name => $value) {
        $label = str_replace('_', ' ', $name);
        $column_array[$name] = $label;
        if (is_numeric((string)$value)) {
          $numeric_columns[$name] = $label;
        }
        else {
          if (isset($numeric_columns[$name])) unset($numeric_columns[$name]);
        }
      }
      if (is_object($xml) && method_exists($xml, 'attributes')) {
        foreach ($xml->attributes() as $name => $value) {
          $column_array['@' . $name] = '@' . $name;
        }
      }
    }
    $this->columns = $column_array;
    $this->numeric_columns = $numeric_columns;
    return $column_array;
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc