Version 1
[yaffs-website] / web / core / modules / search / src / ViewsSearchQuery.php
diff --git a/web/core/modules/search/src/ViewsSearchQuery.php b/web/core/modules/search/src/ViewsSearchQuery.php
new file mode 100644 (file)
index 0000000..ca4b16c
--- /dev/null
@@ -0,0 +1,88 @@
+<?php
+
+namespace Drupal\search;
+
+use Drupal\Core\Database\Query\Condition;
+
+/**
+ * Extends the core SearchQuery to be able to gets its protected values.
+ */
+class ViewsSearchQuery extends SearchQuery {
+
+  /**
+   * Returns the conditions property.
+   *
+   * @return array
+   *   The query conditions.
+   */
+  public function &conditions() {
+    return $this->conditions;
+  }
+
+  /**
+   * Returns the words property.
+   *
+   * @return array
+   *   The positive search keywords.
+   */
+  public function words() {
+    return $this->words;
+  }
+
+  /**
+   * Returns the simple property.
+   *
+   * @return bool
+   *   TRUE if it is a simple query, and FALSE if it is complicated (phrases
+   *   or LIKE).
+   */
+  public function simple() {
+    return $this->simple;
+  }
+
+  /**
+   * Returns the matches property.
+   *
+   * @return int
+   *   The number of matches needed.
+   */
+  public function matches() {
+    return $this->matches;
+  }
+
+  /**
+   * Executes and returns the protected parseSearchExpression method.
+   */
+  public function publicParseSearchExpression() {
+    return $this->parseSearchExpression();
+  }
+
+  /**
+   * Replaces the original condition with a custom one from views recursively.
+   *
+   * @param string $search
+   *   The searched value.
+   * @param string $replace
+   *   The value which replaces the search value.
+   * @param array $condition
+   *   The query conditions array in which the string is replaced. This is an
+   *   item from a \Drupal\Core\Database\Query\Condition::conditions array,
+   *   which must have a 'field' element.
+   */
+  public function conditionReplaceString($search, $replace, &$condition) {
+    if ($condition['field'] instanceof Condition) {
+      $conditions =& $condition['field']->conditions();
+      foreach ($conditions as $key => &$subcondition) {
+        if (is_numeric($key)) {
+          // As conditions can have subconditions, for example db_or(), the
+          // function has to be called recursively.
+          $this->conditionReplaceString($search, $replace, $subcondition);
+        }
+      }
+    }
+    else {
+      $condition['field'] = str_replace($search, $replace, $condition['field']);
+    }
+  }
+
+}