Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 6 |
CRAP | |
0.00% |
0 / 108 |
Rearrange | |
0.00% |
0 / 1 |
|
0.00% |
0 / 6 |
342 | |
0.00% |
0 / 108 |
__construct | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
getFormKey | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
getForm | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 3 |
|||
getFormId | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
buildForm | |
0.00% |
0 / 1 |
72 | |
0.00% |
0 / 80 |
|||
submitForm | |
0.00% |
0 / 1 |
42 | |
0.00% |
0 / 19 |
<?php | |
/** | |
* @file | |
* Contains \Drupal\views_ui\Form\Ajax\Rearrange. | |
*/ | |
namespace Drupal\views_ui\Form\Ajax; | |
use Drupal\Component\Utility\SafeMarkup; | |
use Drupal\Core\Form\FormStateInterface; | |
use Drupal\Core\Url; | |
use Drupal\views\ViewEntityInterface; | |
use Drupal\views\ViewExecutable; | |
/** | |
* Provides a rearrange form for Views handlers. | |
*/ | |
class Rearrange extends ViewsFormBase { | |
/** | |
* Constructs a new Rearrange object. | |
*/ | |
public function __construct($type = NULL) { | |
$this->setType($type); | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function getFormKey() { | |
return 'rearrange'; | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function getForm(ViewEntityInterface $view, $display_id, $js, $type = NULL) { | |
$this->setType($type); | |
return parent::getForm($view, $display_id, $js); | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function getFormId() { | |
return 'views_ui_rearrange_form'; | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function buildForm(array $form, FormStateInterface $form_state) { | |
$view = $form_state->get('view'); | |
$display_id = $form_state->get('display_id'); | |
$type = $form_state->get('type'); | |
$types = ViewExecutable::getHandlerTypes(); | |
$executable = $view->getExecutable(); | |
if (!$executable->setDisplay($display_id)) { | |
$form['markup'] = array('#markup' => $this->t('Invalid display id @display', array('@display' => $display_id))); | |
return $form; | |
} | |
$display = &$executable->displayHandlers->get($display_id); | |
$form['#title'] = $this->t('Rearrange @type', array('@type' => $types[$type]['ltitle'])); | |
$form['#section'] = $display_id . 'rearrange-item'; | |
if ($display->defaultableSections($types[$type]['plural'])) { | |
$section = $types[$type]['plural']; | |
$form_state->set('section', $section); | |
views_ui_standard_display_dropdown($form, $form_state, $section); | |
} | |
$count = 0; | |
// Get relationship labels | |
$relationships = array(); | |
foreach ($display->getHandlers('relationship') as $id => $handler) { | |
$relationships[$id] = $handler->adminLabel(); | |
} | |
$form['fields'] = array( | |
'#type' => 'table', | |
'#header' => array('', $this->t('Weight'), $this->t('Remove')), | |
'#empty' => $this->t('No fields available.'), | |
'#tabledrag' => array( | |
array( | |
'action' => 'order', | |
'relationship' => 'sibling', | |
'group' => 'weight', | |
) | |
), | |
'#tree' => TRUE, | |
'#prefix' => '<div class="scroll" data-drupal-views-scroll>', | |
'#suffix' => '</div>', | |
); | |
foreach ($display->getOption($types[$type]['plural']) as $id => $field) { | |
$form['fields'][$id] = array(); | |
$form['fields'][$id]['#attributes'] = array('class' => array('draggable'), 'id' => 'views-row-' . $id); | |
$handler = $display->getHandler($type, $id); | |
if ($handler) { | |
$name = $handler->adminLabel() . ' ' . $handler->adminSummary(); | |
if (!empty($field['relationship']) && !empty($relationships[$field['relationship']])) { | |
$name = '(' . $relationships[$field['relationship']] . ') ' . $name; | |
} | |
$markup = $name; | |
} | |
else { | |
$name = $id; | |
$markup = $this->t('Broken field @id', array('@id' => $id)); | |
} | |
$form['fields'][$id]['name'] = array('#markup' => $markup); | |
$form['fields'][$id]['weight'] = array( | |
'#type' => 'textfield', | |
'#default_value' => ++$count, | |
'#attributes' => array('class' => array('weight')), | |
'#title' => t('Weight for @title', array('@title' => $name)), | |
'#title_display' => 'invisible', | |
); | |
$form['fields'][$id]['removed'] = array( | |
'#type' => 'checkbox', | |
'#title' => t('Remove @title', array('@title' => $name)), | |
'#title_display' => 'invisible', | |
'#id' => 'views-removed-' . $id, | |
'#attributes' => array('class' => array('views-remove-checkbox')), | |
'#default_value' => 0, | |
'#suffix' => \Drupal::l(SafeMarkup::format('<span>@text</span>', array('@text' => $this->t('Remove'))), | |
Url::fromRoute('<none>', array(), array('attributes' => array( | |
'id' => 'views-remove-link-' . $id, | |
'class' => array('views-hidden', 'views-button-remove', 'views-remove-link'), | |
'alt' => $this->t('Remove this item'), | |
'title' => $this->t('Remove this item')), | |
)) | |
), | |
); | |
} | |
$view->getStandardButtons($form, $form_state, 'views_ui_rearrange_form'); | |
return $form; | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function submitForm(array &$form, FormStateInterface $form_state) { | |
$view = $form_state->get('view'); | |
$display_id = $form_state->get('display_id'); | |
$type = $form_state->get('type'); | |
$types = ViewExecutable::getHandlerTypes(); | |
$display = &$view->getExecutable()->displayHandlers->get($display_id); | |
$old_fields = $display->getOption($types[$type]['plural']); | |
$new_fields = $order = array(); | |
// Make an array with the weights | |
foreach ($form_state->getValue('fields') as $field => $info) { | |
// add each value that is a field with a weight to our list, but only if | |
// it has had its 'removed' checkbox checked. | |
if (is_array($info) && isset($info['weight']) && empty($info['removed'])) { | |
$order[$field] = $info['weight']; | |
} | |
} | |
// Sort the array | |
asort($order); | |
// Create a new list of fields in the new order. | |
foreach (array_keys($order) as $field) { | |
$new_fields[$field] = $old_fields[$field]; | |
} | |
$display->setOption($types[$type]['plural'], $new_fields); | |
// Store in cache | |
$view->cacheSet(); | |
} | |
} |