aboutsummaryrefslogtreecommitdiff
path: root/app/Models/BooleanSearch.php
diff options
context:
space:
mode:
authorGravatar Alexandre Alapetite <alexandre@alapetite.fr> 2018-06-03 13:35:38 +0200
committerGravatar GitHub <noreply@github.com> 2018-06-03 13:35:38 +0200
commitc0122003fe3031926546012b86a38b5187082613 (patch)
tree5502841327e7775f280fbd12732b4e8b8b7be6ff /app/Models/BooleanSearch.php
parent029f4107123f6c318584bf9a43da7118c318657f (diff)
parentbe778c6bc2d8075e5a923153183b47507a2a71e3 (diff)
Merge pull request #1902 from FreshRSS/dev1.11.0
FreshRSS 1.11.0
Diffstat (limited to 'app/Models/BooleanSearch.php')
-rw-r--r--app/Models/BooleanSearch.php55
1 files changed, 55 insertions, 0 deletions
diff --git a/app/Models/BooleanSearch.php b/app/Models/BooleanSearch.php
new file mode 100644
index 000000000..6e016f7e9
--- /dev/null
+++ b/app/Models/BooleanSearch.php
@@ -0,0 +1,55 @@
+<?php
+
+/**
+ * Contains Boolean search from the search form.
+ */
+class FreshRSS_BooleanSearch {
+
+ private $raw_input = '';
+ private $searches = array();
+
+ public function __construct($input) {
+ $input = trim($input);
+ if ($input == '') {
+ return;
+ }
+ $this->raw_input = $input;
+
+ $input = preg_replace('/:&quot;(.*?)&quot;/', ':"\1"', $input);
+ $splits = preg_split('/\b(OR)\b/i', $input, -1, PREG_SPLIT_DELIM_CAPTURE);
+
+ $segment = '';
+ $ns = count($splits);
+ for ($i = 0; $i < $ns; $i++) {
+ $segment = $segment . $splits[$i];
+ if (trim($segment) == '' || strcasecmp($segment, 'OR') === 0) {
+ $segment = '';
+ } else {
+ $quotes = substr_count($segment, '"') + substr_count($segment, '&quot;');
+ if ($quotes % 2 === 0) {
+ $segment = trim($segment);
+ if ($segment != '') {
+ $this->searches[] = new FreshRSS_Search($segment);
+ }
+ $segment = '';
+ }
+ }
+ }
+ $segment = trim($segment);
+ if ($segment != '') {
+ $this->searches[] = new FreshRSS_Search($segment);
+ }
+ }
+
+ public function searches() {
+ return $this->searches;
+ }
+
+ public function __toString() {
+ return $this->getRawInput();
+ }
+
+ public function getRawInput() {
+ return $this->raw_input;
+ }
+}