You are here

class FrxTable in Forena Reports 7.5

Hierarchy

Expanded class hierarchy of FrxTable

4 string references to 'FrxTable'
forena_data_block_preview in ./forena.data.inc
forena_report_data_block_form in ./forena.report.inc
A form to preview and add data blocks to an existing report
FrxTable::generate in src/Renderer/FrxTable.php
Generate the template from the configuration.
ReportEditor::addBlock in src/Editor/ReportEditor.php
Add a data blcok

File

src/Renderer/FrxTable.php, line 7
FrxTable Template that lays out a report in a particular table format.

Namespace

Drupal\forena\Renderer
View source
class FrxTable extends RendererBase {
  public $templateName = 'Simple Table';

  /**
   * Extract table configuration from the HTML
   * @see FrxRenderer::scrapeConfig()
   */
  public function scrapeConfig() {
    $config = array();
    $caption = $this
      ->extractXPath('*//caption', $this->reportDocDomNode);
    $this
      ->extractTemplateHTML($this->reportDocDomNode, $config, array(
      'table',
    ));
    $tds = $this
      ->extractXPathInnerHTML('*//td', $this->reportDocDomNode, FALSE);
    $ths = $this
      ->extractXPathInnerHTML('*//th', $this->reportDocDomNode, FALSE);
    $columns = array_combine($ths, $tds);
    $weight = 0;
    foreach ($columns as $label => $token) {
      $key = trim($token, '{}');
      $weight++;
      $config['columns'][$key] = array(
        'contents' => $token,
        'label' => $label,
        'include' => 1,
        'weight' => $weight,
      );
    }
    return $config;
  }
  public function generate($xml, &$config) {
    $block = @$config['block'];
    $id = @$config['id'];
    if ($block) {
      $id = $this
        ->idFromBlock($block);
      $config['id'] = $id . '_block';
    }
    $config['class'] = @$config['class'] ? $config['class'] . ' FrxTable' : 'FrxTable';
    $div = $this
      ->blockDiv($config);

    // PUt on the header
    $this
      ->removeChildren($div);
    if (isset($config['header']['value'])) {
      $this
        ->addFragment($div, $config['header']['value']);
    }

    // Decide to inlcude columns
    $found_columns = $this
      ->columns($xml);
    if (!$found_columns) {
      $found_columns = $this
        ->columns($xml, '/*');
      $attrs = array();
    }
    $include_column = 0;
    $weight = 0;
    if (!@$config['columns']) {
      $include_column = 1;
    }
    else {
      $weight = count($config['columns']);
    }
    foreach ($found_columns as $column => $label) {
      $token = '{' . $column . '}';
      if (!isset($config['columns'][$column])) {
        $weight++;
        $config['columns'][$column] = array(
          'contents' => $token,
          'include' => $include_column,
          'label' => $label,
          'weight' => $weight,
        );
      }
    }
    $attrs = array(
      'foreach' => '*',
    );
    $table = $this
      ->setFirstNode($div, 4, 'table');
    if (@$config['caption']) {
      $this
        ->setFirstNode($table, 6, 'caption', $config['caption']);
    }
    $thead = $this
      ->setFirstNode($table, 6, 'thead');
    $throw = $this
      ->setFirstNode($thead, 8, 'tr');
    $tbody = $this
      ->setFirstNode($table, 6, 'tbody');
    $tdrow = $this
      ->setFirstNode($tbody, 8, 'tr', NULL, array(
      'id' => $id,
    ), $attrs);
    if (isset($config['columns'])) {
      foreach ($config['columns'] as $key => $col) {
        if ($col['include']) {
          $this
            ->addNode($throw, 10, 'th', $col['label']);
          $this
            ->addNode($tdrow, 10, 'td', $col['contents']);
        }
      }
    }
    if (isset($config['footer']['value'])) {
      $this
        ->addFragment($div, $config['footer']['value']);
    }
  }
  public function configForm($config) {

    // Load header informationi from parent config.
    $form = parent::configForm($config);
    $this
      ->weight_sort($config['columns']);
    $form['columns'] = array(
      '#theme' => 'forena_element_draggable',
      '#draggable_id' => 'FrxTable-columns',
    );
    $form['caption'] = array(
      '#type' => 'textfield',
      '#title' => t('Caption'),
      '#default_value' => @$config['caption'],
    );
    foreach ($config['columns'] as $key => $col) {
      $ctl = array();
      $ctl['label'] = array(
        '#type' => 'textfield',
        '#size' => 30,
        '#title' => t('Label'),
        '#default_value' => $col['label'],
      );
      $ctl['contents'] = array(
        '#type' => 'textfield',
        '#size' => '30',
        '#title' => t('Data'),
        '#default_value' => $col['contents'],
      );
      $ctl['include'] = array(
        '#type' => 'checkbox',
        '#title' => t('Include'),
        '#default_value' => $col['include'],
      );
      $ctl['weight'] = array(
        "#type" => 'weight',
        '#title' => t('Weight'),
        "#delta" => 50,
        '#default_value' => $col['weight'],
      );
      $form['columns'][$key] = $ctl;
    }
    return $form;
  }
  public function configValidate(&$config) {
    parent::configValidate($config);
    $this
      ->weight_sort($config['columns']);
  }

}

Members

Namesort descending Modifiers Type Description Overrides
FrxTable::$templateName public property
FrxTable::configForm public function Returns the section Enter description here ... Overrides RendererBase::configForm
FrxTable::configValidate public function Default configuration validator. Simply validates header and footer attributes. Overrides RendererBase::configValidate
FrxTable::generate public function Generate the template from the configuration. Overrides RendererBase::generate
FrxTable::scrapeConfig public function Extract table configuration from the HTML Overrides RendererBase::scrapeConfig
RendererBase::$blockName public property
RendererBase::$blockParms public property
RendererBase::$columns public property
RendererBase::$dataProvider public property
RendererBase::$doc_types public property
RendererBase::$format public property
RendererBase::$frxAttributes public property
RendererBase::$frxReport public property
RendererBase::$htmlAttributes public property
RendererBase::$id public property
RendererBase::$input_format public property
RendererBase::$name public property
RendererBase::$numeric_columns public property
RendererBase::$reportDocDomNode public property
RendererBase::$reportDocNode public property
RendererBase::$xmlns public property
RendererBase::$xpathQuery public property
RendererBase::addAttributes public static function Helper function for convergint methods to a standard associated array.
RendererBase::addFragment function Append a textual XHTML fragment to the dom. We do not use the DOMDocumentFragment optioin because they don't properly import namespaces. .
RendererBase::addNode function Add a node to the existing dom element with attributes
RendererBase::addText function Add a text node to the current dom node.
RendererBase::arrayAttributes public function Puts attributes back in array format prior to rendering.
RendererBase::blockDiv public function Generate generic div tag.
RendererBase::columns public function Extract a list of columns from the data context.
RendererBase::configAjax public function Generate ajax configuration attributes for use in template configurtion forms.
RendererBase::drupalRender public function Render a drupal form in a forena template
RendererBase::extract public function Extract a configuration var removing it from the array
RendererBase::extractChildSource public function Get the textual representations of html for the configuration engine.
RendererBase::extractSource public function Get the textual representations of html for the configuration engine.
RendererBase::extractTemplateHTML public function Get the textual representations of html for the configuration engine.
RendererBase::extractXPath public function Extracts the inner html of all nodes that match a particular xpath expression.
RendererBase::extractXPathInnerHTML public function Extracts the inner html of all nodes that match a particular xpath expression.
RendererBase::idFromBlock public function Simple function to get id from node.
RendererBase::initReportNode public function This function is called to give the renderer the current conetxt in report rendering. It makes sure the renderer has the current DOM nodes dom documnent, and other attributes.
RendererBase::innerXML public function Return the inside xml of the current node
RendererBase::mergedAttributes public function Standard php array containing merged attributes Enter description here ...
RendererBase::removeChildren public function Rmove all the children of a dom node in the current report.
RendererBase::removeChildrenExcept public function Removes all chidren from the dome node expect those with a tagname specified by the the $tags argurment
RendererBase::render public function Default Render action, which simply does normal forena rendering. You can use renderDomNode at any time to generate the default forena rendering methods. 8
RendererBase::renderChildren public function
RendererBase::renderDomNode public function Recursive report renderer Walks the nodes rendering the report.
RendererBase::replacedAttributes public function Gives the token replaced attributes of a node.
RendererBase::replaceTokens public function A helper function to allow replacement of tokens from inside a renderer wihout needing to understand the object
RendererBase::resetTemplate public function Starting at the current report node, this function removes all child nodes. It aso removes any FRX attributes on the current as well.
RendererBase::setAttributes public function Set FRX attributes.
RendererBase::setFirstNode public function Sets the first child element to a node and returns it. IF the node
RendererBase::validateTextFormats public function Helper funciton for validating text_format type controls.
RendererBase::weight_sort public function Sort a column list by weight.
RendererBase::weight_sort_comp public static function
RendererBase::xmlToValues public function Convert XML to key value pairs. This is used in support of graping to get specific key/value pairs in an array format suitable for passing off to php libraries.
RendererBase::__construct public function 2