function views_php_form_element in Views PHP 8
Same name and namespace in other branches
- 6 views_php.module \views_php_form_element()
- 7.2 views_php.module \views_php_form_element()
- 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.
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 <?php ?> delimiters to enclose PHP code.') : t('Do not use <?php ?> 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,
);
}