Commit e2be69f0 authored by git's avatar git Committed by Miro Dietiker
Browse files

Issue #2746069 by rfay, yongt9412: Needs tests: No pager on revisions listing

parent eb2ef698
Loading
Loading
Loading
Loading
+1 −0
Changes for config/install/diff.settings.yml: 1 added line, 0 removed lines.
Original line number Diff line number Diff line
@@ -3,3 +3,4 @@ general_settings:
  radio_behavior: simple
  context_lines_leading: 1
  context_lines_trailing: 1
  revision_pager_limit: 50
+3 −0
Changes for config/schema/diff.schema.yml: 3 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -18,6 +18,9 @@ diff.settings:
        context_lines_trailing:
          type: integer
          label: 'Number of trailing context lines'
        revision_pager_limit:
          type: integer
          label: 'Revisions per page to be displayed in diff pager'
    entity:
      type: sequence
      label: 'Entities'
+10 −0
Changes for diff.install: 10 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -15,3 +15,13 @@ function diff_update_8001() {
  $config->clear('field_types');
  $config->save();
}

/**
 * Update diff.settings to include general_settings.revision_pager_limit
 */
function diff_update_8002() {
  $config_factory = \Drupal::configFactory();
  $config = $config_factory->getEditable('diff.settings');
  $config->set('general_settings.revision_pager_limit', 50);
  $config->save(TRUE);
}
+16 −2
Changes for src/Form/RevisionOverviewForm.php: 16 added lines, 2 removed lines.
Original line number Diff line number Diff line
@@ -122,7 +122,17 @@ class RevisionOverviewForm extends FormBase {
    $has_translations = (count($languages) > 1);
    $node_storage = $this->entityManager->getStorage('node');
    $type = $node->getType();
    $vids = array_reverse($node_storage->revisionIds($node));

    $pagerLimit = $this->config->get('general_settings.revision_pager_limit');

    $query = \Drupal::entityQuery('node')
      ->condition($node->getEntityType()->getKey('id'), $node->id())
      ->pager($pagerLimit)
      ->allRevisions()
      ->sort($node->getEntityType()->getKey('revision'), 'DESC')
      ->execute();
    $vids = array_keys($query);

    $revision_count = count($vids);

    $build['#title'] = $has_translations ? $this->t('@langname revisions for %title', ['@langname' => $langname, '%title' => $node->label()]) : $this->t('Revisions for %title', ['%title' => $node->label()]);
@@ -163,7 +173,8 @@ class RevisionOverviewForm extends FormBase {
    $build['node_revisions_table']['#attached']['library'][] = 'diff/diff.general';
    $build['node_revisions_table']['#attached']['drupalSettings']['diffRevisionRadios'] = $this->config->get('general_settings.radio_behavior');

    $latest_revision = TRUE;
    $page = \Drupal::request()->query->get('page');
    $latest_revision = empty($page);

    // Add rows to the table.
    foreach ($vids as $vid) {
@@ -297,6 +308,9 @@ class RevisionOverviewForm extends FormBase {
        ),
      );
    }
    $build['pager'] = array(
      '#type' => 'pager',
    );

    return $build;
  }
+35 −0
Changes for src/Tests/DiffRevisionTest.php: 35 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -153,4 +153,39 @@ class DiffRevisionTest extends WebTestBase {
    $this->assertNoFieldByXPath('//input[@type="submit"]');
  }

  public function testOverviewPager() {
    $config = \Drupal::configFactory()->getEditable('diff.settings');
    $config->set('general_settings.revision_pager_limit', 10)->save();
    $this->drupalPlaceBlock('local_tasks_block');
    $this->drupalPlaceBlock('local_actions_block');
    $this->drupalCreateContentType(['type' => 'article', 'name' => 'Article']);
    $admin_user = $this->drupalCreateUser([
      'view article revisions',
    ]);
    $this->drupalLogin($admin_user);
    $node = $this->drupalCreateNode([
      'type' => 'article',
    ]);
    // Create 50 more revisions in order to trigger paging on the revisions
    // overview screen.
    for ($i = 0; $i < 15; $i++) {
      $node->setNewRevision(TRUE);
      $node->save();
    }

    // Check the number of elements on the first page.
    $this->drupalGet('node/' . $node->id() . '/revisions');
    $element = $this->xpath('//*[@id="edit-node-revisions-table"]/tbody/tr');
    $this->assertEqual(count($element), 10);
    // Check that the pager exists.
    $this->assertRaw('page=1');

    $this->clickLinkPartialName('Next page');
    // Check the number of elements on the second page.
    $element = $this->xpath('//*[@id="edit-node-revisions-table"]/tbody/tr');
    $this->assertEqual(count($element), 6);
    $this->assertRaw('page=0');
    $this->clickLinkPartialName('Previous page');
  }

}