Version 1
[yaffs-website] / web / core / modules / views / src / Plugin / views / pager / None.php
diff --git a/web/core/modules/views/src/Plugin/views/pager/None.php b/web/core/modules/views/src/Plugin/views/pager/None.php
new file mode 100644 (file)
index 0000000..ae2891a
--- /dev/null
@@ -0,0 +1,87 @@
+<?php
+
+namespace Drupal\views\Plugin\views\pager;
+
+use Drupal\Core\Form\FormStateInterface;
+use Drupal\views\ViewExecutable;
+use Drupal\views\Plugin\views\display\DisplayPluginBase;
+
+/**
+ * Plugin for views without pagers.
+ *
+ * @ingroup views_pager_plugins
+ *
+ * @ViewsPager(
+ *   id = "none",
+ *   title = @Translation("Display all items"),
+ *   help = @Translation("Display all items that this view might find."),
+ *   display_types = {"basic"}
+ * )
+ */
+class None extends PagerPluginBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function init(ViewExecutable $view, DisplayPluginBase $display, array &$options = NULL) {
+    parent::init($view, $display, $options);
+
+    // If the pager is set to none, then it should show all items.
+    $this->setItemsPerPage(0);
+  }
+
+  public function summaryTitle() {
+    if (!empty($this->options['offset'])) {
+      return $this->t('All items, skip @skip', ['@skip' => $this->options['offset']]);
+    }
+    return $this->t('All items');
+  }
+
+  protected function defineOptions() {
+    $options = parent::defineOptions();
+    $options['offset'] = ['default' => 0];
+
+    return $options;
+  }
+
+  /**
+   * Provide the default form for setting options.
+   */
+  public function buildOptionsForm(&$form, FormStateInterface $form_state) {
+    parent::buildOptionsForm($form, $form_state);
+    $form['offset'] = [
+      '#type' => 'textfield',
+      '#title' => $this->t('Offset (number of items to skip)'),
+      '#description' => $this->t('For example, set this to 3 and the first 3 items will not be displayed.'),
+      '#default_value' => $this->options['offset'],
+    ];
+  }
+
+  public function usePager() {
+    return FALSE;
+  }
+
+  public function useCountQuery() {
+    return FALSE;
+  }
+
+  public function getItemsPerPage() {
+    return 0;
+  }
+
+  public function executeCountQuery(&$count_query) {
+    // If we are displaying all items, never count. But we can update the count in post_execute.
+  }
+
+  public function postExecute(&$result) {
+    $this->total_items = count($result);
+  }
+
+  public function query() {
+    // The only query modifications we might do are offsets.
+    if (!empty($this->options['offset'])) {
+      $this->view->query->setOffset($this->options['offset']);
+    }
+  }
+
+}