1964f740fe974c6330883637916a7e3f93ff802d
[yaffs-website] / web / core / modules / system / tests / modules / pager_test / src / Controller / PagerTestController.php
1 <?php
2
3 namespace Drupal\pager_test\Controller;
4
5 use Drupal\Core\Controller\ControllerBase;
6
7 /**
8  * Controller routine for testing the pager.
9  */
10 class PagerTestController extends ControllerBase {
11
12   /**
13    * Builds a render array for a pageable test table.
14    *
15    * @param int $element
16    *   The pager element to be used for paging.
17    * @param int $limit
18    *   The limit of rows per page for the specified element.
19    *
20    * @return array
21    *   A render array.
22    */
23   protected function buildTestTable($element, $limit) {
24     $header = [
25       ['data' => 'wid'],
26       ['data' => 'type'],
27       ['data' => 'timestamp'],
28     ];
29     $query = db_select('watchdog', 'd')->extend('Drupal\Core\Database\Query\PagerSelectExtender')->element($element);
30     $result = $query
31       ->fields('d', ['wid', 'type', 'timestamp'])
32       ->limit($limit)
33       ->orderBy('d.wid')
34       ->execute();
35     $rows = [];
36     foreach ($result as $row) {
37       $rows[] = ['data' => (array) $row];
38     }
39     return [
40       '#theme' => 'table',
41       '#header' => $header,
42       '#rows' => $rows,
43       '#empty' => $this->t("There are no watchdog records found in the db"),
44     ];
45   }
46
47   /**
48    * Returns a pager with 'parameters' variable.
49    *
50    * The 'pager_calls' parameter counts the calls to the pager, subsequent
51    * to the initial call.
52    */
53   public function queryParameters() {
54
55     // Example query.
56     $build['pager_table_0'] = $this->buildTestTable(0, 5);
57
58     // Counter of calls to the current pager.
59     $query_params = pager_get_query_parameters();
60     $pager_calls = isset($query_params['pager_calls']) ? ($query_params['pager_calls'] ? $query_params['pager_calls'] : 0) : 0;
61     $build['l_pager_pager_0'] = ['#markup' => $this->t('Pager calls: @pager_calls', ['@pager_calls' => $pager_calls])];
62
63     // Pager.
64     $build['pager_pager_0'] = [
65       '#type' => 'pager',
66       '#element' => 0,
67       '#parameters' => [
68         'pager_calls' => ++$pager_calls,
69       ],
70       '#pre_render' => [
71         'Drupal\pager_test\Controller\PagerTestController::showPagerCacheContext',
72       ]
73     ];
74
75     return $build;
76   }
77
78   /**
79    * Returns a page with multiple pagers.
80    */
81   public function multiplePagers() {
82
83     // Build three tables with same query and different pagers.
84     $build['pager_table_0'] = $this->buildTestTable(0, 20);
85     $build['pager_pager_0'] = [
86       '#type' => 'container',
87       '#attributes' => ['class' => ['test-pager-0']],
88       'pager' => [
89         '#type' => 'pager',
90         '#element' => 0,
91       ],
92     ];
93
94     $build['pager_table_1'] = $this->buildTestTable(1, 20);
95     $build['pager_pager_1'] = [
96       '#type' => 'container',
97       '#attributes' => ['class' => ['test-pager-1']],
98       'pager' => [
99         '#type' => 'pager',
100         '#element' => 1,
101       ],
102     ];
103
104     $build['pager_table_4'] = $this->buildTestTable(4, 20);
105     $build['pager_pager_4'] = [
106       '#type' => 'container',
107       '#attributes' => ['class' => ['test-pager-4']],
108       'pager' => [
109         '#type' => 'pager',
110         '#element' => 4,
111       ],
112     ];
113
114     return $build;
115   }
116
117   /**
118    * #pre_render callback for #type => pager that shows the pager cache context.
119    */
120   public static function showPagerCacheContext(array $pager) {
121     drupal_set_message(\Drupal::service('cache_contexts_manager')->convertTokensToKeys(['url.query_args.pagers:' . $pager['#element']])->getKeys()[0]);
122     return $pager;
123   }
124
125 }