mirror of
https://github.com/processwire/processwire.git
synced 2025-08-14 10:45:54 +02:00
Update base Selector class so that descending classes can self identify the type of comparison they are performing
This commit is contained in:
@@ -71,6 +71,36 @@
|
|||||||
*/
|
*/
|
||||||
abstract class Selector extends WireData {
|
abstract class Selector extends WireData {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Comparison type: Exact (value equals this or value does not equal this)
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
const compareTypeExact = 1;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Comparison type: Sort (matches based on how it would sort among given value)
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
const compareTypeSort = 2;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Comparison type: Find (text value is found within another text value)
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
const compareTypeFind = 4;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Comparison type: Like (text value is like another, combined with compareTypeFind)
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
const compareTypeLike = 8;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Comparison type: Bitwise
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
const compareTypeBitwise = 16;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Given a field name and value, construct the Selector.
|
* Given a field name and value, construct the Selector.
|
||||||
*
|
*
|
||||||
@@ -305,6 +335,17 @@ abstract class Selector extends WireData {
|
|||||||
throw new WireException("This getOperator method must be implemented");
|
throw new WireException("This getOperator method must be implemented");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* What type of comparson does Selector perform?
|
||||||
|
*
|
||||||
|
* @return int Returns a Selector::compareType* constant or 0 if not defined
|
||||||
|
* @since 3.0.154
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public static function getCompareType() {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Does $value1 match $value2?
|
* Does $value1 match $value2?
|
||||||
*
|
*
|
||||||
@@ -487,6 +528,7 @@ abstract class Selector extends WireData {
|
|||||||
*/
|
*/
|
||||||
class SelectorEqual extends Selector {
|
class SelectorEqual extends Selector {
|
||||||
public static function getOperator() { return '='; }
|
public static function getOperator() { return '='; }
|
||||||
|
public static function getCompareType() { return Selector::compareTypeExact; }
|
||||||
protected function match($value1, $value2) { return $this->evaluate($value1 == $value2); }
|
protected function match($value1, $value2) { return $this->evaluate($value1 == $value2); }
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -496,6 +538,7 @@ class SelectorEqual extends Selector {
|
|||||||
*/
|
*/
|
||||||
class SelectorNotEqual extends Selector {
|
class SelectorNotEqual extends Selector {
|
||||||
public static function getOperator() { return '!='; }
|
public static function getOperator() { return '!='; }
|
||||||
|
public static function getCompareType() { return Selector::compareTypeExact; }
|
||||||
protected function match($value1, $value2) { return $this->evaluate($value1 != $value2); }
|
protected function match($value1, $value2) { return $this->evaluate($value1 != $value2); }
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -505,6 +548,7 @@ class SelectorNotEqual extends Selector {
|
|||||||
*/
|
*/
|
||||||
class SelectorGreaterThan extends Selector {
|
class SelectorGreaterThan extends Selector {
|
||||||
public static function getOperator() { return '>'; }
|
public static function getOperator() { return '>'; }
|
||||||
|
public static function getCompareType() { return Selector::compareTypeSort; }
|
||||||
protected function match($value1, $value2) { return $this->evaluate($value1 > $value2); }
|
protected function match($value1, $value2) { return $this->evaluate($value1 > $value2); }
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -514,6 +558,7 @@ class SelectorGreaterThan extends Selector {
|
|||||||
*/
|
*/
|
||||||
class SelectorLessThan extends Selector {
|
class SelectorLessThan extends Selector {
|
||||||
public static function getOperator() { return '<'; }
|
public static function getOperator() { return '<'; }
|
||||||
|
public static function getCompareType() { return Selector::compareTypeSort; }
|
||||||
protected function match($value1, $value2) { return $this->evaluate($value1 < $value2); }
|
protected function match($value1, $value2) { return $this->evaluate($value1 < $value2); }
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -523,6 +568,7 @@ class SelectorLessThan extends Selector {
|
|||||||
*/
|
*/
|
||||||
class SelectorGreaterThanEqual extends Selector {
|
class SelectorGreaterThanEqual extends Selector {
|
||||||
public static function getOperator() { return '>='; }
|
public static function getOperator() { return '>='; }
|
||||||
|
public static function getCompareType() { return Selector::compareTypeSort; }
|
||||||
protected function match($value1, $value2) { return $this->evaluate($value1 >= $value2); }
|
protected function match($value1, $value2) { return $this->evaluate($value1 >= $value2); }
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -532,6 +578,7 @@ class SelectorGreaterThanEqual extends Selector {
|
|||||||
*/
|
*/
|
||||||
class SelectorLessThanEqual extends Selector {
|
class SelectorLessThanEqual extends Selector {
|
||||||
public static function getOperator() { return '<='; }
|
public static function getOperator() { return '<='; }
|
||||||
|
public static function getCompareType() { return Selector::compareTypeSort; }
|
||||||
protected function match($value1, $value2) { return $this->evaluate($value1 <= $value2); }
|
protected function match($value1, $value2) { return $this->evaluate($value1 <= $value2); }
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -541,6 +588,7 @@ class SelectorLessThanEqual extends Selector {
|
|||||||
*/
|
*/
|
||||||
class SelectorContains extends Selector {
|
class SelectorContains extends Selector {
|
||||||
public static function getOperator() { return '*='; }
|
public static function getOperator() { return '*='; }
|
||||||
|
public static function getCompareType() { return Selector::compareTypeFind; }
|
||||||
protected function match($value1, $value2) { return $this->evaluate(stripos($value1, $value2) !== false); }
|
protected function match($value1, $value2) { return $this->evaluate(stripos($value1, $value2) !== false); }
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -548,7 +596,8 @@ class SelectorContains extends Selector {
|
|||||||
* Same as SelectorContains but serves as operator placeholder for SQL LIKE operations
|
* Same as SelectorContains but serves as operator placeholder for SQL LIKE operations
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
class SelectorContainsLike extends SelectorContains {
|
class SelectorContainsLike extends SelectorContains {
|
||||||
|
public static function getCompareType() { return Selector::compareTypeFind | Selector::compareTypeLike; }
|
||||||
public static function getOperator() { return '%='; }
|
public static function getOperator() { return '%='; }
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -558,6 +607,7 @@ class SelectorContainsLike extends SelectorContains {
|
|||||||
*/
|
*/
|
||||||
class SelectorContainsWords extends Selector {
|
class SelectorContainsWords extends Selector {
|
||||||
public static function getOperator() { return '~='; }
|
public static function getOperator() { return '~='; }
|
||||||
|
public static function getCompareType() { return Selector::compareTypeFind; }
|
||||||
protected function match($value1, $value2) {
|
protected function match($value1, $value2) {
|
||||||
$hasAll = true;
|
$hasAll = true;
|
||||||
$words = preg_split('/[-\s]/', $value2, -1, PREG_SPLIT_NO_EMPTY);
|
$words = preg_split('/[-\s]/', $value2, -1, PREG_SPLIT_NO_EMPTY);
|
||||||
@@ -575,6 +625,7 @@ class SelectorContainsWords extends Selector {
|
|||||||
*/
|
*/
|
||||||
class SelectorStarts extends Selector {
|
class SelectorStarts extends Selector {
|
||||||
public static function getOperator() { return '^='; }
|
public static function getOperator() { return '^='; }
|
||||||
|
public static function getCompareType() { return Selector::compareTypeFind; }
|
||||||
protected function match($value1, $value2) { return $this->evaluate(stripos(trim($value1), $value2) === 0); }
|
protected function match($value1, $value2) { return $this->evaluate(stripos(trim($value1), $value2) === 0); }
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -584,6 +635,7 @@ class SelectorStarts extends Selector {
|
|||||||
*/
|
*/
|
||||||
class SelectorStartsLike extends SelectorStarts {
|
class SelectorStartsLike extends SelectorStarts {
|
||||||
public static function getOperator() { return '%^='; }
|
public static function getOperator() { return '%^='; }
|
||||||
|
public static function getCompareType() { return Selector::compareTypeFind | Selector::compareTypeLike; }
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -592,6 +644,7 @@ class SelectorStartsLike extends SelectorStarts {
|
|||||||
*/
|
*/
|
||||||
class SelectorEnds extends Selector {
|
class SelectorEnds extends Selector {
|
||||||
public static function getOperator() { return '$='; }
|
public static function getOperator() { return '$='; }
|
||||||
|
public static function getCompareType() { return Selector::compareTypeFind; }
|
||||||
protected function match($value1, $value2) {
|
protected function match($value1, $value2) {
|
||||||
$value2 = trim($value2);
|
$value2 = trim($value2);
|
||||||
$value1 = substr($value1, -1 * strlen($value2));
|
$value1 = substr($value1, -1 * strlen($value2));
|
||||||
@@ -605,6 +658,7 @@ class SelectorEnds extends Selector {
|
|||||||
*/
|
*/
|
||||||
class SelectorEndsLike extends SelectorEnds {
|
class SelectorEndsLike extends SelectorEnds {
|
||||||
public static function getOperator() { return '%$='; }
|
public static function getOperator() { return '%$='; }
|
||||||
|
public static function getCompareType() { return Selector::compareTypeFind | Selector::compareTypeLike; }
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -613,6 +667,7 @@ class SelectorEndsLike extends SelectorEnds {
|
|||||||
*/
|
*/
|
||||||
class SelectorBitwiseAnd extends Selector {
|
class SelectorBitwiseAnd extends Selector {
|
||||||
public static function getOperator() { return '&'; }
|
public static function getOperator() { return '&'; }
|
||||||
|
public static function getCompareType() { return Selector::compareTypeBitwise; }
|
||||||
protected function match($value1, $value2) { return $this->evaluate(((int) $value1) & ((int) $value2)); }
|
protected function match($value1, $value2) { return $this->evaluate(((int) $value1) & ((int) $value2)); }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user