You are here

class views_pdf_plugin_style_table in Views PDF 7.3

Same name and namespace in other branches
  1. 6 views_pdf_plugin_style_table.inc \views_pdf_plugin_style_table
  2. 7 views_pdf_plugin_style_table.inc \views_pdf_plugin_style_table
  3. 7.2 plugins/views_pdf_plugin_style_table.inc \views_pdf_plugin_style_table

Style plugin to render each item as a row in a table.

Hierarchy

Expanded class hierarchy of views_pdf_plugin_style_table

2 string references to 'views_pdf_plugin_style_table'
views_pdf_plugin_style_table::options_form in ./views_pdf_plugin_style_table.inc
Options form
views_pdf_views_plugins in ./views_pdf.views.inc
Implements hook_views_plugins().

File

./views_pdf_plugin_style_table.inc, line 14
Table PDF style plugin

View source
class views_pdf_plugin_style_table extends views_plugin_style {

  /**
   * Render the style
   */
  function render() {
    $this->view->numberOfRecords = count($this->view->result);
    $this->view->pdf
      ->drawTable($this->view, $this->options);
  }

  /**
   * Option definitions
   */
  function option_definition() {
    $options = parent::option_definition();

    // Grouping not supported.
    $this->definition['uses grouping'] = FALSE;
    $options['info'] = array(
      'default' => array(),
    );
    $options['position'] = array(
      'default' => array(),
    );
    return $options;
  }

  /**
   * Options form
   */
  function options_form(&$form, &$form_state) {
    parent::options_form($form, $form_state);
    $handlers = $this->display->handler
      ->get_handlers('field');
    if (empty($handlers)) {
      $form['error_markup'] = array(
        '#markup' => '<div class="error messages">' . t('You need at least one field before you can configure your table settings') . '</div>',
      );
      return;
    }
    $attached = array(
      'css' => array(
        drupal_get_path('module', 'views_pdf') . '/theme/admin.css',
      ),
    );
    $form['#theme'] = 'views_pdf_plugin_style_table';
    $form['#attached'] = $attached;
    $columns = array(
      '_default_' => '',
    );
    $columns += $this->display->handler
      ->get_field_labels();
    $fields = $this->display->handler
      ->get_option('fields');
    $fonts = array_merge(array(
      'default' => t('-- Default --'),
    ), views_pdf_get_font_list());
    $font_styles = array(
      'b' => t('Bold'),
      'i' => t('Italic'),
      'u' => t('Underline'),
      'd' => t('Line through'),
      'o' => t('Overline'),
    );
    $align = array(
      'L' => t('Left'),
      'C' => t('Center'),
      'R' => t('Right'),
      'J' => t('Justify'),
    );
    $hyphenate = array(
      'none' => t('None'),
      'auto' => t('Detect automatically'),
    );
    $hyphenate = array_merge($hyphenate, views_pdf_get_hyphenations());
    foreach ($columns as $field => $column) {

      // Skip excluded fields and the page-break field.
      if (!empty($fields[$field]['exclude']) || $field == 'page_break') {
        continue;
      }
      $safe = str_replace(array(
        '][',
        '_',
        ' ',
      ), '-', $field);

      // the $id of the column for dependency checking.
      $id = 'edit-style-options-columns-' . $safe;

      // markup for the field name
      $form['info'][$field]['name'] = array(
        '#markup' => $column,
      );
      foreach (array(
        'header_style',
        'body_style',
      ) as $style) {
        $info_text = empty($this->options['info'][$field][$style]['text']) ? NULL : $this->options['info'][$field][$style]['text'];
        $form['info'][$field][$style]['text'] = array(
          '#type' => 'fieldset',
          '#title' => t('Text Settings'),
          '#collapsed' => TRUE,
          '#collapsible' => TRUE,
        );
        $form['info'][$field][$style]['text']['font_size'] = array(
          '#type' => 'textfield',
          '#size' => 10,
          '#title' => t('Font Size'),
          '#default_value' => empty($info_text['font_size']) ? '' : $info_text['font_size'],
        );
        $form['info'][$field][$style]['text']['font_family'] = array(
          '#type' => 'select',
          '#title' => t('Font Family'),
          '#required' => TRUE,
          '#options' => $fonts,
          '#size' => 5,
          '#default_value' => empty($info_text['font_family']) ? 'default' : $info_text['font_family'],
        );
        $form['info'][$field][$style]['text']['font_style'] = array(
          '#type' => 'checkboxes',
          '#title' => t('Font Style'),
          '#options' => $font_styles,
          '#size' => 10,
          '#default_value' => empty($info_text['font_style']) ? $this->display->handler
            ->get_option('default_font_style') : $info_text['font_style'],
        );
        $form['info'][$field][$style]['text']['align'] = array(
          '#type' => 'radios',
          '#title' => t('Alignment'),
          '#options' => $align,
          '#default_value' => empty($info_text['align']) ? $this->display->handler
            ->get_option('default_text_align') : $info_text['align'],
        );
        $form['info'][$field][$style]['text']['hyphenate'] = array(
          '#type' => 'select',
          '#title' => t('Text Hyphenation'),
          '#options' => $hyphenate,
          '#description' => t('upload patterns from <a href="@url">ctan.org</a> to <br />sites/libraries/tcpdf/hyphenate_patterns', array(
            '@url' => 'http://www.ctan.org/tex-archive/language/hyph-utf8/tex/generic/hyph-utf8/patterns/tex',
          )),
          '#default_value' => empty($info_text['hyphenate']) ? $this->display->handler
            ->get_option('default_text_hyphenate') : $info_text['hyphenate'],
        );
        $form['info'][$field][$style]['text']['color'] = array(
          '#type' => 'textfield',
          '#title' => t('Text Color'),
          '#description' => t('Enter Any format: <br />000000 (HexRGB) - 000,000,000 (RGB) - 000,000,000,000 (CMYK)'),
          '#size' => 10,
          '#default_value' => empty($info_text['color']) ? $this->display->handler
            ->get_option('default_text_color') : $info_text['color'],
        );
        $form['info'][$field][$style]['text']['vpad'] = array(
          '#type' => 'textfield',
          '#title' => t('Vertical padding'),
          '#description' => t('Padding space to apply above and below text in each row (within borders if used)'),
          '#size' => 6,
          '#default_value' => empty($info_text['vpad']) ? '' : $info_text['vpad'],
        );
        $form['info'][$field][$style]['text']['border'] = array(
          '#type' => 'textfield',
          '#title' => t('Border'),
          '#description' => t('1 = full border, or any combination of letters L, R, T, B'),
          '#size' => 6,
          '#default_value' => empty($info_text['border']) ? '' : $info_text['border'],
        );
        if ($field != '_default_' && user_access('use PHP for settings') && VIEWS_PDF_PHP) {
          $info_render = empty($this->options['info'][$field][$style]['render']) ? NULL : $this->options['info'][$field][$style]['render'];
          $form['info'][$field][$style]['render'] = array(
            '#type' => 'fieldset',
            '#title' => t('Render Settings'),
            '#collapsed' => TRUE,
            '#collapsible' => TRUE,
          );
          $form['info'][$field][$style]['render']['eval_before'] = array(
            '#type' => 'textarea',
            '#title' => t('PHP Code Before Output'),
            '#description' => t('Please avoid direct PHP here, this feature is deprecated in favour of hook_views_pdf_custom_layout()'),
            '#default_value' => empty($info_render['eval_before']) ? '' : $info_render['eval_before'],
          );
          $form['info'][$field][$style]['render']['bypass_eval_before'] = array(
            '#type' => 'checkbox',
            '#title' => t('Use the PHP eval function instead php_eval.'),
            '#description' => t("WARNING: If you don't know the risk of using eval leave unckecked."),
            '#default_value' => empty($info_render['bypass_eval_before']) ? FALSE : $info_render['bypass_eval_before'],
          );
          $form['info'][$field][$style]['render']['eval_after'] = array(
            '#type' => 'textarea',
            '#title' => t('PHP Code After Output'),
            '#description' => t('Please avoid direct PHP here, this feature is deprecated in favour of hook_views_pdf_custom_post()'),
            '#default_value' => empty($info_render['eval_after']) ? '' : $info_render['eval_after'],
          );
          $form['info'][$field][$style]['render']['bypass_eval_after'] = array(
            '#type' => 'checkbox',
            '#title' => t('Use the PHP eval function instead php_eval.'),
            '#description' => t("WARNING: If you don't know the risk of using eval leave unckecked."),
            '#default_value' => empty($info_render['bypass_eval_after']) ? FALSE : $info_render['bypass_eval_after'],
          );
        }
      }
      if ($field != '_default_') {
        $form['info'][$field]['position']['width'] = array(
          '#type' => 'textfield',
          '#size' => 10,
          '#default_value' => isset($this->options['info'][$field]['position']['width']) ? $this->options['info'][$field]['position']['width'] : '',
        );
        $form['info'][$field]['empty']['hide_empty'] = array(
          '#type' => 'checkbox',
          '#default_value' => isset($this->options['info'][$field]['empty']['hide_empty']) ? $this->options['info'][$field]['empty']['hide_empty'] : 'FALSE',
        );
      }
    }

    // Some general options
    $form['position'] = array(
      '#type' => 'fieldset',
      '#title' => t('Layout'),
      '#collapsed' => FALSE,
      '#collapsible' => TRUE,
    );
    $form['position']['use_header'] = array(
      '#type' => 'checkbox',
      '#title' => t('Include column headings'),
      '#default_value' => isset($this->options['position']['use_header']) ? $this->options['position']['use_header'] : 1,
    );
    $form['position']['h'] = array(
      '#type' => 'textfield',
      '#size' => 10,
      '#title' => t('Header spacing'),
      '#description' => t('Vertical space between column headings and table data'),
      '#default_value' => isset($this->options['position']['h']) ? $this->options['position']['h'] : '',
      '#states' => array(
        'invisible' => array(
          ':input[name="style_options[position][use_header]"]' => array(
            'checked' => FALSE,
          ),
        ),
      ),
    );
    $form['position']['row_height'] = array(
      '#type' => 'textfield',
      '#size' => 10,
      '#title' => t('Row Height'),
      '#description' => t('Height will always be enough for one line of text. A larger value will create space, and/or allow for multiple lines'),
      '#default_value' => isset($this->options['position']['row_height']) ? $this->options['position']['row_height'] : '',
    );
  }

  /**
   * Options form storage
   */
  function options_submit(&$form, &$form_state) {
    $default_font_style = $this->display->handler
      ->get_option('default_font_style');
    foreach ($form_state['values']['style_options']['info'] as $id => $field) {
      foreach (array(
        'header_style',
        'body_style',
      ) as $style) {

        // Reset to default, if the elements are equal to the default settings.
        if (count(array_diff($default_font_style, $field[$style]['text']['font_style'])) == 0 && count(array_diff($field[$style]['text']['font_style'], $default_font_style)) == 0) {
          $form_state['values']['style_options']['info'][$id][$style]['text']['font_style'] = NULL;
        }
        if ($field[$style]['text']['font_family'] == 'default') {
          $form_state['values']['style_options']['info'][$id][$style]['text']['font_family'] = NULL;
        }
        if ($field[$style]['text']['align'] == $this->display->handler
          ->get_option('default_text_align')) {
          $form_state['values']['style_options']['info'][$id][$style]['text']['align'] = NULL;
        }
        if ($field[$style]['text']['hyphenate'] == $this->display->handler
          ->get_option('default_text_hyphenate')) {
          $form_state['values']['style_options']['info'][$id][$style]['text']['hyphenate'] = NULL;
        }

        // Strip all empty values.
        $form_state['values']['style_options']['info'][$id][$style] = _array_filter_recursive($form_state['values']['style_options']['info'][$id][$style]);
      }
    }
  }

  /**
   * Attach this view to another display.
   */
  function attach_to($display_id, $path, $title) {
    $display = $this->view->display[$display_id]->handler;
    $url_options = array();
    $input = $this->view
      ->get_exposed_input();
    if ($input) {
      $url_options['query'] = $input;
    }
    if (empty($this->view->feed_icon)) {
      $this->view->feed_icon = '';
    }
    $this->view->feed_icon .= theme('views_pdf_icon', array(
      'path' => $this->view
        ->get_url(NULL, $path),
      'title' => $title,
      'options' => $url_options,
    ));
  }

}

Members

Namesort descending Modifiers Type Description Overrides
views_object::$definition public property Handler's definition.
views_object::$options public property Except for displays, options for the object will be held here. 1
views_object::altered_option_definition function Collect this handler's option definition and alter them, ready for use.
views_object::construct public function Views handlers use a special construct function. 4
views_object::export_option public function 1
views_object::export_options public function
views_object::export_option_always public function Always exports the option, regardless of the default value.
views_object::options Deprecated public function Set default options on this object. 1
views_object::set_default_options public function Set default options.
views_object::set_definition public function Let the handler know what its full definition is.
views_object::unpack_options public function Unpack options over our existing defaults, drilling down into arrays so that defaults don't get totally blown away.
views_object::unpack_translatable public function Unpack a single option definition.
views_object::unpack_translatables public function Unpacks each handler to store translatable texts.
views_object::_set_option_defaults public function
views_pdf_plugin_style_table::attach_to function Attach this view to another display.
views_pdf_plugin_style_table::options_form function Options form Overrides views_plugin_style::options_form
views_pdf_plugin_style_table::options_submit function Options form storage Overrides views_plugin::options_submit
views_pdf_plugin_style_table::option_definition function Option definitions Overrides views_plugin_style::option_definition
views_pdf_plugin_style_table::render function Render the style Overrides views_plugin_style::render
views_plugin::$display public property The current used views display.
views_plugin::$plugin_name public property The plugin name of this plugin, for example table or full.
views_plugin::$plugin_type public property The plugin type of this plugin, for example style or query.
views_plugin::$view public property The top object of a view. Overrides views_object::$view 1
views_plugin::additional_theme_functions public function Provide a list of additional theme functions for the theme info page.
views_plugin::plugin_title public function Return the human readable name of the display.
views_plugin::summary_title public function Returns the summary of the settings in the display. 8
views_plugin::theme_functions public function Provide a full list of possible theme templates used by this style.
views_plugin_style::$row_plugin public property The row plugin, if it's initialized and the style itself supports it.
views_plugin_style::$row_tokens public property Store all available tokens row rows.
views_plugin_style::build_sort public function Called by the view builder to see if this style handler wants to interfere with the sorts. If so it should build; if it returns any non-TRUE value, normal sorting will NOT be added to the query. 1
views_plugin_style::build_sort_post public function Called by the view builder to let the style build a second set of sorts that will come after any other sorts in the view. 1
views_plugin_style::destroy public function Destructor. Overrides views_object::destroy
views_plugin_style::even_empty public function Should the output of the style plugin be rendered even if it's empty. 1
views_plugin_style::get_field public function Get a rendered field.
views_plugin_style::get_field_value public function Get the raw field value.
views_plugin_style::get_row_class public function Return the token replaced row class for the specified row.
views_plugin_style::init public function Initialize a style plugin.
views_plugin_style::options_validate public function Validate the options form. Overrides views_plugin::options_validate
views_plugin_style::pre_render public function Allow the style to do stuff before each row is rendered.
views_plugin_style::query public function Add anything to the query that we might need to. Overrides views_plugin::query 2
views_plugin_style::render_fields public function Render all of the fields for a given style and store them on the object.
views_plugin_style::render_grouping public function Group records as needed for rendering.
views_plugin_style::render_grouping_sets public function Render the grouping sets.
views_plugin_style::tokenize_value public function Take a value and apply token replacement logic to it.
views_plugin_style::uses_fields public function Return TRUE if this style also uses fields.
views_plugin_style::uses_row_class public function Return TRUE if this style also uses a row plugin.
views_plugin_style::uses_row_plugin public function Return TRUE if this style also uses a row plugin.
views_plugin_style::uses_tokens public function Return TRUE if this style uses tokens.
views_plugin_style::validate public function Validate that the plugin is correct and can be saved. Overrides views_plugin::validate