You are here

public function Table::buildOptionsForm in Views PDF 8

@inheritDoc

Overrides StylePluginBase::buildOptionsForm

File

src/Plugin/views/style/Table.php, line 42

Class

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

Namespace

Drupal\tardis\Plugin\views\style

Code

public function buildOptionsForm(&$form, FormStateInterface $form_state) {
  parent::buildOptionsForm($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 = $this->display->handler
    ->get_field_labels();
  $fields = $this->display->handler
    ->get_option('fields');
  $fonts = array_merge(array(
    'default' => t('-- Default --'),
  ), ViewsPdfBase::getAvailableFontsCleanList());
  $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, ViewsPdfBase::getAvailableHyphenatePatterns());
  foreach ($columns as $field => $column) {
    if ($fields[$field]['exclude'] == 1) {
      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,
    );
    $form['info'][$field]['header_style']['text'] = array(
      '#type' => 'fieldset',
      '#title' => t('Text Settings'),
      '#collapsed' => FALSE,
      '#collapsible' => TRUE,
    );
    $form['info'][$field]['header_style']['text']['font_size'] = array(
      '#type' => 'textfield',
      '#size' => 10,
      '#title' => t('Font Size'),
      '#title' => t('Alignment'),
      '#options' => $align,
      '#default_value' => $this->options['info'][$field]['header_style']['text']['align'] == NULL ? $this->display->handler
        ->get_option('default_text_align') : $this->options['info'][$field]['header_style']['text']['align'],
    );
    $form['info'][$field]['header_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' => $this->options['info'][$field]['header_style']['text']['hyphenate'] == NULL ? $this->display->handler
        ->get_option('default_text_hyphenate') : $this->options['info'][$field]['header_style']['text']['hyphenate'],
    );
    $form['info'][$field]['header_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' => $this->options['info'][$field]['header_style']['text']['color'] == NULL ? $this->display->handler
        ->get_option('default_text_color') : $this->options['info'][$field]['header_style']['text']['color'],
    );
    $form['info'][$field]['header_style']['render'] = array(
      '#type' => 'fieldset',
      '#title' => t('Render Settings'),
      '#collapsed' => FALSE,
      '#collapsible' => TRUE,
    );
    $form['info'][$field]['header_style']['render']['is_html'] = array(
      '#type' => 'checkbox',
      '#title' => t('Render As HTML'),
      '#default_value' => isset($this->options['info'][$field]['header_style']['render']['is_html']) ? $this->options['info'][$field]['header_style']['render']['is_html'] : 1,
    );
    $form['info'][$field]['header_style']['render']['eval_before'] = array(
      '#type' => 'textarea',
      '#title' => t('PHP Code Before Output'),
      '#default_value' => isset($this->options['info'][$field]['header_style']['render']['eval_before']) ? $this->options['info'][$field]['header_style']['render']['eval_before'] : '',
    );
    $form['info'][$field]['header_style']['render']['eval_after'] = array(
      '#type' => 'textarea',
      '#title' => t('PHP Code After Output'),
      '#default_value' => isset($this->options['info'][$field]['header_style']['render']['eval_after']) ? $this->options['info'][$field]['header_style']['render']['eval_after'] : '',
    );
    $form['info'][$field]['body_style']['text'] = array(
      '#type' => 'fieldset',
      '#title' => t('Text Settings'),
      '#collapsed' => FALSE,
      '#collapsible' => TRUE,
    );
    $form['info'][$field]['body_style']['text']['font_size'] = array(
      '#type' => 'textfield',
      '#size' => 10,
      '#title' => t('Font Size'),
      '#default_value' => isset($this->options['info'][$field]['body_style']['text']['font_size']) ? $this->options['info'][$field]['body_style']['text']['font_size'] : '',
    );
    $form['info'][$field]['body_style']['text']['font_family'] = array(
      '#type' => 'select',
      '#title' => t('Font Family'),
      '#required' => TRUE,
      '#options' => $fonts,
      '#size' => 5,
      '#default_value' => !empty($this->options['info'][$field]['body_style']['text']['font_family']) ? $this->options['info'][$field]['body_style']['text']['font_family'] : 'default',
    );
    $form['info'][$field]['body_style']['text']['font_style'] = array(
      '#type' => 'checkboxes',
      '#title' => t('Font Style'),
      '#options' => $font_styles,
      '#size' => 10,
      '#default_value' => $this->options['info'][$field]['body_style']['text']['font_style'] == NULL ? $this->display->handler
        ->get_option('default_font_style') : $this->options['info'][$field]['body_style']['text']['font_style'],
    );
    $form['info'][$field]['body_style']['text']['align'] = array(
      '#type' => 'radios',
      '#title' => t('Alignment'),
      '#options' => $align,
      '#default_value' => $this->options['info'][$field]['body_style']['text']['align'] == NULL ? $this->display->handler
        ->get_option('default_text_align') : $this->options['info'][$field]['body_style']['text']['align'],
    );
    $form['info'][$field]['body_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' => $this->options['info'][$field]['body_style']['text']['hyphenate'] == NULL ? $this->display->handler
        ->get_option('default_text_hyphenate') : $this->options['info'][$field]['body_style']['text']['hyphenate'],
    );
    $form['info'][$field]['body_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' => 20,
      '#default_value' => $this->options['info'][$field]['body_style']['text']['color'] == NULL ? $this->display->handler
        ->get_option('default_text_color') : $this->options['info'][$field]['body_style']['text']['color'],
    );
    $form['info'][$field]['body_style']['render'] = array(
      '#type' => 'fieldset',
      '#title' => t('Render Settings'),
      '#collapsed' => FALSE,
      '#collapsible' => TRUE,
    );
    $form['info'][$field]['body_style']['render']['is_html'] = array(
      '#type' => 'checkbox',
      '#title' => t('Render As HTML'),
      '#default_value' => isset($this->options['info'][$field]['body_style']['render']['is_html']) ? $this->options['info'][$field]['body_style']['render']['is_html'] : 1,
    );
    $form['info'][$field]['body_style']['render']['eval_before'] = array(
      '#type' => 'textarea',
      '#title' => t('PHP Code Before Output'),
      '#default_value' => isset($this->options['info'][$field]['body_style']['render']['eval_before']) ? $this->options['info'][$field]['body_style']['render']['eval_before'] : '',
    );
    $form['info'][$field]['body_style']['render']['eval_after'] = array(
      '#type' => 'textarea',
      '#title' => t('PHP Code After Output'),
      '#default_value' => isset($this->options['info'][$field]['body_style']['render']['eval_after']) ? $this->options['info'][$field]['body_style']['render']['eval_after'] : '',
    );
    $form['info'][$field]['position']['width'] = array(
      '#type' => 'textfield',
      '#size' => 10,
      '#title' => t('Width'),
      '#default_value' => isset($this->options['info'][$field]['position']['width']) ? $this->options['info'][$field]['position']['width'] : '',
    );
  }

  // Some general options.
  $form['position'] = array(
    '#type' => 'fieldset',
    '#title' => t('Table Position'),
    '#collapsed' => FALSE,
    '#collapsible' => TRUE,
  );
  $form['position']['last_writing_position'] = array(
    '#type' => 'checkbox',
    '#title' => t('Relative to last writing position'),
    '#default_value' => isset($this->options['position']['last_writing_position']) ? $this->options['position']['last_writing_position'] : 1,
  );
  $form['position']['x'] = array(
    '#type' => 'textfield',
    '#size' => 10,
    '#title' => t('X'),
    '#description' => t('X Coordinate (relative to page with margins)'),
    '#default_value' => isset($this->options['position']['x']) ? $this->options['position']['x'] : '',
  );
  $form['position']['y'] = array(
    '#type' => 'textfield',
    '#size' => 10,
    '#title' => t('Y'),
    '#description' => t('Y Coordinate (relative to page with margins)'),
    '#default_value' => isset($this->options['position']['y']) ? $this->options['position']['y'] : '',
  );
  $form['position']['width'] = array(
    '#type' => 'textfield',
    '#size' => 10,
    '#title' => t('Table Width'),
    '#default_value' => isset($this->options['position']['width']) ? $this->options['position']['width'] : '',
  );
  $form['position']['row_height'] = array(
    '#type' => 'textfield',
    '#size' => 10,
    '#title' => t('Row Height'),
    '#default_value' => isset($this->options['position']['row_height']) ? $this->options['position']['row_height'] : '',
  );
}