Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
| Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 8 |
CRAP | |
0.00% |
0 / 76 |
| DataFieldRow | |
0.00% |
0 / 1 |
|
11.11% |
1 / 9 |
600 | |
0.00% |
0 / 76 |
| init | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 8 |
|||
| defineOptions | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 4 |
|||
| buildOptionsForm | |
0.00% |
0 / 1 |
42 | |
0.00% |
0 / 32 |
|||
| validateAliasName | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 4 |
|||
| validateOptionsForm | |
0.00% |
0 / 1 |
12 | |
0.00% |
0 / 5 |
|||
| render | |
0.00% |
0 / 1 |
20 | |
0.00% |
0 / 15 |
|||
| getFieldKeyAlias | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 5 |
|||
| extractFromOptionsArray | |
100.00% |
1 / 1 |
2 | |
100.00% |
0 / 0 |
|||
| anonymous function | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 2 |
|||
| <?php | |
| /** | |
| * @file | |
| * Contains \Drupal\rest\Plugin\views\row\DataFieldRow. | |
| */ | |
| namespace Drupal\rest\Plugin\views\row; | |
| use Drupal\Core\Form\FormStateInterface; | |
| use Drupal\views\ViewExecutable; | |
| use Drupal\views\Plugin\views\display\DisplayPluginBase; | |
| use Drupal\views\Plugin\views\row\RowPluginBase; | |
| /** | |
| * Plugin which displays fields as raw data. | |
| * | |
| * @ingroup views_row_plugins | |
| * | |
| * @ViewsRow( | |
| * id = "data_field", | |
| * title = @Translation("Fields"), | |
| * help = @Translation("Use fields as row data."), | |
| * display_types = {"data"} | |
| * ) | |
| */ | |
| class DataFieldRow extends RowPluginBase { | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| protected $usesFields = TRUE; | |
| /** | |
| * Stores an array of prepared field aliases from options. | |
| * | |
| * @var array | |
| */ | |
| protected $replacementAliases = array(); | |
| /** | |
| * Stores an array of options to determine if the raw field output is used. | |
| * | |
| * @var array | |
| */ | |
| protected $rawOutputOptions = array(); | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function init(ViewExecutable $view, DisplayPluginBase $display, array &$options = NULL) { | |
| parent::init($view, $display, $options); | |
| if (!empty($this->options['field_options'])) { | |
| $options = (array) $this->options['field_options']; | |
| // Prepare a trimmed version of replacement aliases. | |
| $aliases = static::extractFromOptionsArray('alias', $options); | |
| $this->replacementAliases = array_filter(array_map('trim', $aliases)); | |
| // Prepare an array of raw output field options. | |
| $this->rawOutputOptions = static::extractFromOptionsArray('raw_output', $options); | |
| } | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| protected function defineOptions() { | |
| $options = parent::defineOptions(); | |
| $options['field_options'] = array('default' => array()); | |
| return $options; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function buildOptionsForm(&$form, FormStateInterface $form_state) { | |
| parent::buildOptionsForm($form, $form_state); | |
| $form['field_options'] = array( | |
| '#type' => 'table', | |
| '#header' => array($this->t('Field'), $this->t('Alias'), $this->t('Raw output')), | |
| '#empty' => $this->t('You have no fields. Add some to your view.'), | |
| '#tree' => TRUE, | |
| ); | |
| $options = $this->options['field_options']; | |
| if ($fields = $this->view->display_handler->getOption('fields')) { | |
| foreach ($fields as $id => $field) { | |
| // Don't show the field if it has been excluded. | |
| if (!empty($field['exclude'])) { | |
| continue; | |
| } | |
| $form['field_options'][$id]['field'] = array( | |
| '#markup' => $id, | |
| ); | |
| $form['field_options'][$id]['alias'] = array( | |
| '#title' => $this->t('Alias for @id', array('@id' => $id)), | |
| '#title_display' => 'invisible', | |
| '#type' => 'textfield', | |
| '#default_value' => isset($options[$id]['alias']) ? $options[$id]['alias'] : '', | |
| '#element_validate' => array(array($this, 'validateAliasName')), | |
| ); | |
| $form['field_options'][$id]['raw_output'] = array( | |
| '#title' => $this->t('Raw output for @id', array('@id' => $id)), | |
| '#title_display' => 'invisible', | |
| '#type' => 'checkbox', | |
| '#default_value' => isset($options[$id]['raw_output']) ? $options[$id]['raw_output'] : '', | |
| ); | |
| } | |
| } | |
| } | |
| /** | |
| * Form element validation handler for \Drupal\rest\Plugin\views\row\DataFieldRow::buildOptionsForm(). | |
| */ | |
| public function validateAliasName($element, FormStateInterface $form_state) { | |
| if (preg_match('@[^A-Za-z0-9_-]+@', $element['#value'])) { | |
| $form_state->setError($element, $this->t('The machine-readable name must contain only letters, numbers, dashes and underscores.')); | |
| } | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function validateOptionsForm(&$form, FormStateInterface $form_state) { | |
| // Collect an array of aliases to validate. | |
| $aliases = static::extractFromOptionsArray('alias', $form_state->getValue(array('row_options', 'field_options'))); | |
| // If array filter returns empty, no values have been entered. Unique keys | |
| // should only be validated if we have some. | |
| if (($filtered = array_filter($aliases)) && (array_unique($filtered) !== $filtered)) { | |
| $form_state->setErrorByName('aliases', $this->t('All field aliases must be unique')); | |
| } | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function render($row) { | |
| $output = array(); | |
| foreach ($this->view->field as $id => $field) { | |
| // Don't render anything if this field is excluded. | |
| if (!empty($field->options['exclude'])) { | |
| continue; | |
| } | |
| // If the raw output option has been set, just get the raw value. | |
| if (!empty($this->rawOutputOptions[$id])) { | |
| $value = $field->getValue($row); | |
| } | |
| // Otherwise, pass this through the field advancedRender() method. | |
| else { | |
| $value = $field->advancedRender($row); | |
| } | |
| $output[$this->getFieldKeyAlias($id)] = $value; | |
| } | |
| return $output; | |
| } | |
| /** | |
| * Return an alias for a field ID, as set in the options form. | |
| * | |
| * @param string $id | |
| * The field id to lookup an alias for. | |
| * | |
| * @return string | |
| * The matches user entered alias, or the original ID if nothing is found. | |
| */ | |
| public function getFieldKeyAlias($id) { | |
| if (isset($this->replacementAliases[$id])) { | |
| return $this->replacementAliases[$id]; | |
| } | |
| return $id; | |
| } | |
| /** | |
| * Extracts a set of option values from a nested options array. | |
| * | |
| * @param string $key | |
| * The key to extract from each array item. | |
| * @param array $options | |
| * The options array to return values from. | |
| * | |
| * @return array | |
| * A regular one dimensional array of values. | |
| */ | |
| protected static function extractFromOptionsArray($key, $options) { | |
| return array_map(function($item) use ($key) { | |
| return isset($item[$key]) ? $item[$key] : NULL; | |
| }, $options); | |
| } | |
| } |