Rewrote search criteria matching:
[core.git] / inc / classes / main / criteria / search / class_SearchCriteria.php
index 419427a22617d19053759d2544e6365e90f3bbb0..8d770f3ee4d0a2030df70602362467540b04546d 100644 (file)
@@ -113,6 +113,37 @@ class SearchCriteria extends BaseCriteria implements LocalSearchCriteria {
        public final function getSkip () {
                return $this->skip;
        }
+
+       /**
+        * Checks whether the given key/value pair is matching with 'default' and one of 'choice' and
+        * never with in 'exclude'.
+        *
+        * @param       $key                    Key element to check
+        * @param       $value                  Value to check
+        * @return      $isMatching             Whether the key/value is matching or excluded
+        */
+       public function isCriteriaMatching ($key, $value) {
+               // Get 'default' search value
+               $search = $this->getCriteriaElemnent($key);
+
+               // 'default' check
+               $isMatching = ((!is_null($search)) && ($search == $value));
+
+               // Get 'choice' search value (can be NULL or comma-separated string)
+               $search = $this->getCriteriaChoiceElemnent($key);
+
+               // 'choice' check
+               $isMatching = (($isMatching === TRUE) && ((is_null($search)) || (in_array($value, explode(',', $search)))));
+
+               // Get 'exclude' search value
+               $search = $this->getCriteriaExcludeElemnent($key);
+
+               // 'exclude' check
+               $isMatching = (($isMatching === TRUE) && ((is_null($search)) || ($search != $value)));
+
+               // Return result
+               return $isMatching;
+       }
 }
 
 // [EOF]