You are here

function views_php_form_element in Views PHP 8

Same name and namespace in other branches
  1. 6 views_php.module \views_php_form_element()
  2. 7.2 views_php.module \views_php_form_element()
  3. 7 views_php.module \views_php_form_element()

Helper function; builds form for PHP code options of views handlers/plugins.

6 calls to views_php_form_element()
ViewsPhp::buildOptionsForm in src/Plugin/views/area/ViewsPhp.php
Provide a form to edit options for this plugin.
ViewsPhp::buildOptionsForm in src/Plugin/views/filter/ViewsPhp.php
Provide the basic form which calls through to subforms. If overridden, it is best to call through to the parent, or to at least make sure all of the functions in this form are called.
ViewsPhp::buildOptionsForm in src/Plugin/views/sort/ViewsPhp.php
Basic options for all sort criteria
ViewsPhp::buildOptionsForm in src/Plugin/views/access/ViewsPhp.php
Provide a form to edit options for this plugin.
ViewsPhp::buildOptionsForm in src/Plugin/views/cache/ViewsPhp.php
Provide a form to edit options for this plugin.

... See full list

File

./views_php.module, line 38
Allows to use PHP in views.

Code

function views_php_form_element($handler, $checkbox = NULL, $input, $variables = array()) {
  static $default_variables;
  $user = \Drupal::currentUser();
  if (!isset($default_variables)) {
    $default_variables = array(
      '$view' => t('The view object.'),
      '$handler' => t('The handler object.'),
      '$plugin' => t('The plugin object.'),
      '$static' => t('A variable that can be used to store reusable data per row.'),
      '$row' => t('Contains the retrieved record from the database per row.'),
      '$data' => t('Contains the retrieved record from the database for all rows.'),
      '$results' => t('Array containing the view\'s result.'),
      '$cache' => t('The cache object.'),
    );
  }
  list($name, $title, $description, $use_delimiters) = $input;
  $container = array(
    '#type' => 'container',
    // @todo #tree => FALSE doesn't work here.
    '#parents' => array(
      'options',
    ),
  );
  if (!empty($checkbox)) {
    list($checkbox_name, $checkbox_title, $checkbox_description) = $checkbox;
    $checkbox = array(
      '#type' => 'checkbox',
      '#title' => $checkbox_title,
      '#description' => $checkbox_description,
      '#default_value' => $handler->options[$checkbox_name] && !empty($handler->options[$name]),
    );
    $container['#states'] = array(
      'invisible' => array(
        'input[name="options[use_' . $name . ']"]' => array(
          'checked' => FALSE,
        ),
      ),
    );
  }
  $container[$name] = array(
    '#type' => 'textarea',
    '#id' => Html::getId('edit-options-' . $name),
    '#title' => $title,
    '#default_value' => $handler->options[$name],
    '#rows' => 5,
    '#description' => $description . ' <strong>' . ($use_delimiters ? t('Use &lt;?php ?&gt; delimiters to enclose PHP code.') : t('Do not use &lt;?php ?&gt; delimiters.')) . '</strong>',
  );

  // Only users with use PHP permission can set/modify input.
  if (!$user
    ->hasPermission('use PHP for settings')) {
    $container[$name]['#disabled'] = TRUE;
    $container[$name]['#value'] = $container[$name]['#default_value'];
    $container[$name]['#description'] .= ' <strong>' . t('You do not have permission to modify this.') . '</strong>';
  }
  $items = array();
  foreach ($variables as $variable_name => $description) {
    if (is_int($variable_name)) {
      $variable_name = $description;
      $description = isset($default_variables[$description]) ? $default_variables[$description] : '';
    }
    $url = Url::fromUri('internal:', array(
      'fragment' => $container[$name]['#id'],
    ));
    $url
      ->setOption('external', TRUE);
    $link = \Drupal::l($variable_name, $url);
    $items[] = SafeMarkup::format('!link: @description', array(
      '!link' => $link,
      '@description' => $description,
    ));
    if (strpos($variable_name, '$row') === 0) {
      $php_value = $input[0] == 'php_value' ? TRUE : FALSE;
      foreach ($handler->view->display_handler
        ->getHandlers('field') as $field => $field_handler) {

        // Do not add fields that will not have data when evaluating the value code. This occurs because
        // the value code is evaluated in hook_views_post_execute(), but field data is made available in hook_views_pre_render(),
        // which is called after hook_views_post_execute().
        if ($php_value && $field_handler->table != $field_handler->view->base_table) {
          continue;
        }
        $url = Url::fromUri('internal:', array(
          'fragment' => $container[$name]['#id'],
        ));
        $url
          ->setOption('external', TRUE);
        $link = \Drupal::l($variable_name . '->' . $field, $url);
        $items[] = SafeMarkup::format('!link: @description', array(
          '!link' => $link,
          '@description' => $field_handler
            ->adminLabel(),
        ));
      }
    }
  }
  $container[$name . '_variables'] = array(
    '#type' => 'fieldset',
    '#title' => t('Available variables'),
    '#collapsible' => TRUE,
    '#collapsed' => TRUE,
    '#attributes' => array(
      'class' => array(
        'views-php-variables',
      ),
    ),
  );
  $container[$name . '_variables']['variables'] = array(
    '#theme' => 'item_list',
    '#items' => $items,
  );
  if (!empty($checkbox)) {
    return array(
      $checkbox_name => $checkbox,
      $name => $container,
    );
  }
  return array(
    $name => $container,
  );
}