Issue #1830822 by tim.plunkett, xjm: Split the Views UI listing into two tables for enabled and disabled.

8.0.x
webchick 2012-11-26 11:00:41 -08:00
parent f14f63cc11
commit feaddcd0a8
3 changed files with 67 additions and 9 deletions

View File

@ -115,6 +115,37 @@ class DefaultViewsTest extends UITestBase {
$this->assertNoLinkByHref($edit_href);
}
/**
* Tests that enabling views moves them to the correct table.
*/
function testSplitListing() {
// Build a re-usable xpath query.
$xpath = '//div[@id="views-entity-list"]/div[@class = :status]/table//tr[@title = :title]';
$arguments = array(
':status' => 'views-list-section enabled',
':title' => t('Machine name: test_view_status'),
);
$this->drupalGet('admin/structure/views');
$elements = $this->xpath($xpath, $arguments);
$this->assertIdentical(count($elements), 0, 'A disabled view is not found in the enabled views table.');
$arguments[':status'] = 'views-list-section disabled';
$elements = $this->xpath($xpath, $arguments);
$this->assertIdentical(count($elements), 1, 'A disabled view is found in the disabled views table.');
// Enable the view.
$this->clickViewsOperationLink(t('Enable'), '/test_view_status/');
$elements = $this->xpath($xpath, $arguments);
$this->assertIdentical(count($elements), 0, 'After enabling a view, it is not found in the disabled views table.');
$arguments[':status'] = 'views-list-section enabled';
$elements = $this->xpath($xpath, $arguments);
$this->assertIdentical(count($elements), 1, 'After enabling a view, it is found in the enabled views table.');
}
/**
* Click a link to perform an operation on a view.
*

View File

@ -1158,3 +1158,7 @@ div.messages {
}
/* @end */
.views-list-section {
margin-bottom: 2em;
}

View File

@ -19,15 +19,18 @@ class ViewListController extends EntityListController {
* Overrides Drupal\Core\Entity\EntityListController::load();
*/
public function load() {
$entities = parent::load();
uasort($entities, function ($a, $b) {
$a_enabled = $a->isEnabled();
$b_enabled = $b->isEnabled();
if ($a_enabled != $b_enabled) {
return $a_enabled < $b_enabled;
$entities = array(
'enabled' => array(),
'disabled' => array(),
);
foreach (parent::load() as $entity) {
if ($entity->isEnabled()) {
$entities['enabled'][] = $entity;
}
return $a->id() > $b->id();
});
else {
$entities['disabled'][] = $entity;
}
}
return $entities;
}
@ -156,10 +159,30 @@ class ViewListController extends EntityListController {
* Overrides Drupal\Core\Entity\EntityListController::render();
*/
public function render() {
$list = parent::render();
$entities = $this->load();
$list['#type'] = 'container';
$list['#attached']['css'] = ViewFormControllerBase::getAdminCSS();
$list['#attached']['library'][] = array('system', 'drupal.ajax');
$list['#attributes']['id'] = 'views-entity-list';
$list['enabled']['heading']['#markup'] = '<h2>' . t('Enabled') . '</h2>';
$list['disabled']['heading']['#markup'] = '<h2>' . t('Disabled') . '</h2>';
foreach (array('enabled', 'disabled') as $status) {
$list[$status]['#type'] = 'container';
$list[$status]['#attributes'] = array('class' => array('views-list-section', $status));
$list[$status]['table'] = array(
'#theme' => 'table',
'#header' => $this->buildHeader(),
'#rows' => array(),
);
foreach ($entities[$status] as $entity) {
$list[$status]['table']['#rows'][$entity->id()] = $this->buildRow($entity);
}
}
// @todo Use a placeholder for the entity label if this is abstracted to
// other entity types.
$list['enabled']['table']['#empty'] = t('There are no enabled views.');
$list['disabled']['table']['#empty'] = t('There are no disabled views.');
return $list;
}