Version 1
[yaffs-website] / web / core / modules / views / src / Plugin / views / filter / GroupByNumeric.php
diff --git a/web/core/modules/views/src/Plugin/views/filter/GroupByNumeric.php b/web/core/modules/views/src/Plugin/views/filter/GroupByNumeric.php
new file mode 100644 (file)
index 0000000..4934e6e
--- /dev/null
@@ -0,0 +1,57 @@
+<?php
+
+namespace Drupal\views\Plugin\views\filter;
+
+/**
+ * Simple filter to handle greater than/less than filters
+ *
+ * @ingroup views_filter_handlers
+ *
+ * @ViewsFilter("groupby_numeric")
+ */
+class GroupByNumeric extends NumericFilter {
+
+  public function query() {
+    $this->ensureMyTable();
+    $field = $this->getField();
+
+    $info = $this->operators();
+    if (!empty($info[$this->operator]['method'])) {
+      $this->{$info[$this->operator]['method']}($field);
+    }
+  }
+  protected function opBetween($field) {
+    $placeholder_min = $this->placeholder();
+    $placeholder_max = $this->placeholder();
+    if ($this->operator == 'between') {
+      $this->query->addHavingExpression($this->options['group'], "$field >= $placeholder_min", [$placeholder_min => $this->value['min']]);
+      $this->query->addHavingExpression($this->options['group'], "$field <= $placeholder_max", [$placeholder_max => $this->value['max']]);
+    }
+    else {
+      $this->query->addHavingExpression($this->options['group'], "$field < $placeholder_min OR $field > $placeholder_max", [$placeholder_min => $this->value['min'], $placeholder_max => $this->value['max']]);
+    }
+  }
+
+  protected function opSimple($field) {
+    $placeholder = $this->placeholder();
+    $this->query->addHavingExpression($this->options['group'], "$field $this->operator $placeholder", [$placeholder => $this->value['value']]);
+  }
+
+  protected function opEmpty($field) {
+    if ($this->operator == 'empty') {
+      $operator = "IS NULL";
+    }
+    else {
+      $operator = "IS NOT NULL";
+    }
+
+    $this->query->addHavingExpression($this->options['group'], "$field $operator");
+  }
+
+  public function adminLabel($short = FALSE) {
+    return $this->getField(parent::adminLabel($short));
+  }
+
+  public function canGroup() { return FALSE; }
+
+}