You are here

function sheetnode_handler_field_named_range::render in Sheetnode 7

Same name and namespace in other branches
  1. 6 views/sheetnode_handler_field_named_range.inc \sheetnode_handler_field_named_range::render()
  2. 7.2 views/sheetnode_handler_field_named_range.inc \sheetnode_handler_field_named_range::render()

Render the field.

Parameters

array $values: The values retrieved from the database.

Overrides views_handler_field::render

File

views/sheetnode_handler_field_named_range.inc, line 37
Views handler for sheetnode named ranges.

Class

sheetnode_handler_field_named_range
@file Views handler for sheetnode named ranges.

Code

function render($values) {
  module_load_include('inc', 'sheetnode', 'socialcalc');
  $sheet = $values->{$this->field_alias};
  if (empty($sheet)) {
    return NULL;
  }
  $sc = socialcalc_parse_sheet($sheet);
  if (!empty($sc['names'])) {
    foreach ($sc['names'] as $name => $info) {
      if (strcasecmp($name, $this->options['named_range']) == 0) {
        $reference = $info['definition'];

        // Is it a literal value?
        if (substr($reference, 0, 1) == '=') {
          return substr($reference, 1);
        }
        else {
          if (strpos($reference, ':') === FALSE) {
            return isset($sc['cells'][$reference]) ? $sc['cells'][$reference]['datavalue'] : NULL;
          }
          else {
            $range = preg_split('/:/', $reference, 2);
            $start = socialcalc_coord_to_cr($range[0]);
            $end = socialcalc_coord_to_cr(isset($range[1]) ? $range[1] : $range[0]);
            if (empty($end[0])) {
              $end[0] = $sc['attribs']['lastcol'];
            }
            if (empty($end[1])) {
              $end[1] = $sc['attribs']['lastrow'];
            }

            // Build the range of values.
            $range = array();
            for ($r = $start[1]; $r <= $end[1]; $r++) {
              for ($c = $start[0]; $c <= $end[0]; $c++) {
                $coord = socialcalc_cr_to_coord($c, $r);
                $range[$coord] = !empty($sc['cells'][$coord]['datavalue']) ? $sc['cells'][$coord]['datavalue'] : NULL;
              }
            }
            return theme('sheetnode_range', array(
              'range' => $range,
              'labels' => $this->options['labels'],
            ));
          }
        }
      }
    }
  }
  return '';
}