*/
interface Criteria extends FrameworkInterface {
/**
- * Add criteria
+ * Setter for wrapper class name
+ *
+ * @param $wrapperConfigEntry Configuration entry which hold the wrapper class' name
+ * @return void
+ */
+ function setWrapperConfigEntry ($wrapperConfigEntry);
+
+ /**
+ * Getter for wrapper class name
+ *
+ * @return $wrapperConfigEntry Configuration entry which hold the wrapper class' name
+ */
+ function getWrapperConfigEntry ();
+
+ /**
+ * Getter for criteria array
+ *
+ * @param $criteriaType Type of this criteria, can be one of 'default' (default), 'choice' or 'exclude'
+ * @return $criteria
+ */
+ function getCriteriaArray ($criteriaType = 'default');
+
+ /**
+ * Getter for criteria array 'choice' type
+ *
+ * @return $criteria
+ */
+ function getCriteriaChoiceArray ();
+
+ /**
+ * Getter for criteria array 'exclude' type
+ *
+ * @return $criteria
+ */
+ function getCriteriaExcludeArray ();
+
+ /**
+ * Add criteria, this method converts dashes to underscores because dashes
+ * are not valid for criteria keys.
+ *
+ * @param $criteriaKey Criteria key
+ * @param $criteriaValue Criteria value
+ * @param $criteriaType Type of this criteria, can be one of 'default' (default), 'choice' or 'exclude'
+ * @return void
+ */
+ function addCriteria ($criteriaKey, $criteriaValue, $criteriaType = 'default');
+
+ /**
+ * Add "choice" criteria, this method converts dashes to underscores because
+ * dashes are not valid for criteria keys.
+ *
+ * @param $criteriaKey Criteria key
+ * @param $criteriaValue Criteria value
+ * @return void
+ */
+ function addChoiceCriteria ($criteriaKey, $criteriaValue);
+
+ /**
+ * Add "exclude" criteria, this method converts dashes to underscores because
+ * dashes are not valid for criteria keys.
*
* @param $criteriaKey Criteria key
* @param $criteriaValue Criteria value
* @return void
*/
- function addCriteria ($criteriaKey, $criteriaValue);
+ function addExcludeCriteria ($criteriaKey, $criteriaValue);
/**
* Add configured criteria
*
* @param $criteriaKey Criteria key
* @param $configEntry Configuration entry
+ * @param $criteriaType Type of this criteria, can be one of 'default' (default), 'choice' or 'exclude'
* @return void
*/
- function addConfiguredCriteria ($criteriaKey, $configEntry);
+ function addConfiguredCriteria ($criteriaKey, $configEntry, $criteriaType = 'default');
+
+ /**
+ * Get criteria element or null if not found
+ *
+ * @param $criteriaKey The requested criteria key
+ * @param $criteriaType Type of this criteria, can be one of 'default' (default), 'choice' or 'exclude'
+ * @return $value Whether the value of the critera or null
+ */
+ function getCriteriaElemnent ($criteriaKey, $criteriaType = 'default');
+
+ /**
+ * Checks whether given array entry matches
+ *
+ * @param $entryArray Array with the entries to find
+ * @param $criteriaType Type of this criteria, can be one of 'default' (default), 'choice' or 'exclude'
+ * @return $matches Whether the entry matches or not
+ */
+ function ifEntryMatches (array $entryArray, $criteriaType = 'default');
+
+ /**
+ * Checks whether given array 'choice' entry matches
+ *
+ * @param $entryArray Array with the entries to find
+ * @return $matches Whether the entry matches or not
+ */
+ function ifChoiceMatches (array $entryArray);
+
+ /**
+ * Checks whether given array 'exclude' entry matches
+ *
+ * @param $entryArray Array with the entries to find
+ * @return $matches Whether the entry matches or not
+ */
+ function ifExcludeMatches (array $entryArray);
+
+ /**
+ * "Getter" for a cache key
+ *
+ * @param $onlyKeys Only use these keys for a cache key
+ * @param $criteriaType Type of this criteria, can be one of 'default' (default), 'choice' or 'exclude'
+ * @return $cacheKey The key suitable for the cache system
+ */
+ function getCacheKey ($onlyKeys = array(), $criteriaType = 'default');
+
+ /**
+ * "Getter" for a cache key ('choice' type)
+ *
+ * @param $onlyKeys Only use these keys for a cache key
+ * @return $cacheKey The key suitable for the cache system
+ */
+ function getCacheKeyChoice ($onlyKeys = array());
+
+ /**
+ * "Getter" for a cache key ('exclude' type)
+ *
+ * @param $onlyKeys Only use these keys for a cache key
+ * @return $cacheKey The key suitable for the cache system
+ */
+ function getCacheKeyExclude ($onlyKeys = array());
+
+ /**
+ * "Getter" for a cache key ('choice' type)
+ *
+ * @param $onlyKeys Only use these keys for a cache key
+ * @return $cacheKey The key suitable for the cache system
+ */
+ function getCacheKeyChoice ($onlyKeys = array());
+
+ /**
+ * Count the criteria, e.g. useful to find out if a database query has no
+ * limitation (search criteria).
+ *
+ * @param $criteriaType Type of this criteria, can be one of 'default' (default), 'choice' or 'exclude'
+ * @return $count Count of all criteria entries
+ */
+ function count ($criteriaType = 'default');
+
+ /**
+ * Count 'choice' criteria, e.g. useful to find out if a database query
+ * has no limitation (search criteria).
+ *
+ * @return $count Count of all criteria entries
+ */
+ function countChoice ();
+
+ /**
+ * Count 'exclude' criteria, e.g. useful to find out if a database query
+ * has no limitation (search criteria).
+ *
+ * @return $count Count of all criteria entries
+ */
+ function countExclude ();
}
// [EOF]
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-class BaseCriteria extends BaseFrameworkSystem {
+class BaseCriteria extends BaseFrameworkSystem implements Criteria {
/**
* Wrapper class name stored in config entry
*/
/**
* Getter for criteria array
*
+ * @param $criteriaType Type of this criteria, can be one of 'default' (default), 'choice' or 'exclude'
* @return $criteria
*/
- public final function getCriteriaArray () {
- return $this->criteria;
+ public final function getCriteriaArray ($criteriaType = 'default') {
+ return $this->criteria[$criteriaType];
+ }
+
+ /**
+ * Getter for criteria array 'choice' type
+ *
+ * @return $criteria
+ */
+ public final function getCriteriaChoiceArray () {
+ return $this->getCriteriaArray('choice');
+ }
+
+ /**
+ * Getter for criteria array 'exclude' type
+ *
+ * @return $criteria
+ */
+ public final function getCriteriaExcludeArray () {
+ return $this->getCriteriaArray('exclude');
}
/**
*
* @param $criteriaKey Criteria key
* @param $criteriaValue Criteria value
+ * @param $criteriaType Type of this criteria, can be one of 'default' (default), 'choice' or 'exclude'
* @return void
*/
- public final function addCriteria ($criteriaKey, $criteriaValue) {
+ public final function addCriteria ($criteriaKey, $criteriaValue, $criteriaType = 'default') {
// Debug message
if (strpos($criteriaKey, 'my-') !== false) $this->debugBackTrace('criteriaKey=' . $criteriaKey);
- //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('CRITERIA: criteriaKey=' . $criteriaKey . ',criteriaValue=' . $criteriaValue);
+ //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(strtoupper($criteriaType) . '-CRITERIA: criteriaKey=' . $criteriaKey . ',criteriaValue=' . $criteriaValue);
+
+ // Convert dashes to underscore
+ $criteriaKey = $this->convertDashesToUnderscores($criteriaKey);
+
+ // Is it already there?
+ if (isset($this->criteria[$criteriaType][$criteriaKey])) {
+ // Append it
+ $this->criteria[$criteriaType][$criteriaKey] .= ',' . $criteriaValue;
+ } else {
+ // Add it
+ $this->criteria[$criteriaType][$criteriaKey] = (string) $criteriaValue;
+ }
+ }
+
+ /**
+ * Add "choice" criteria, this method converts dashes to underscores because
+ * dashes are not valid for criteria keys.
+ *
+ * @param $criteriaKey Criteria key
+ * @param $criteriaValue Criteria value
+ * @return void
+ */
+ public final function addChoiceCriteria ($criteriaKey, $criteriaValue) {
+ // Debug message
+ if (strpos($criteriaKey, 'my-') !== false) $this->debugBackTrace('criteriaKey=' . $criteriaKey);
+ //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('CHOICE-CRITERIA: criteriaKey=' . $criteriaKey . ',criteriaValue=' . $criteriaValue);
// Add it
- $this->criteria[$this->convertDashesToUnderscores($criteriaKey)] = (string)$criteriaValue;
+ $this->criteria['choice'][$this->convertDashesToUnderscores($criteriaKey)][] = (string) $criteriaValue;
+ }
+
+ /**
+ * Add "exclude" criteria, this method converts dashes to underscores because
+ * dashes are not valid for criteria keys.
+ *
+ * @param $criteriaKey Criteria key
+ * @param $criteriaValue Criteria value
+ * @return void
+ */
+ public final function addExcludeCriteria ($criteriaKey, $criteriaValue) {
+ // Add it with generic method
+ $this->addCriteria($criteriaKey, $criteriaValue, 'exclude');
}
/**
*
* @param $criteriaKey Criteria key
* @param $configEntry Configuration entry
+ * @param $criteriaType Type of this criteria, can be one of 'default' (default), 'choice' or 'exclude'
* @return void
*/
- public final function addConfiguredCriteria ($criteriaKey, $configEntry) {
+ public final function addConfiguredCriteria ($criteriaKey, $configEntry, $criteriaType = 'default') {
// Add the configuration entry as a criteria
$value = $this->getConfigInstance()->getConfigEntry($configEntry);
- $this->addCriteria($criteriaKey, $value);
+ $this->addCriteria($criteriaKey, $value, $criteriaType);
}
/**
* Get criteria element or null if not found
*
* @param $criteriaKey The requested criteria key
+ * @param $criteriaType Type of this criteria, can be one of 'default' (default), 'choice' or 'exclude'
* @return $value Whether the value of the critera or null
*/
- public function getCriteriaElemnent ($criteriaKey) {
+ public function getCriteriaElemnent ($criteriaKey, $criteriaType = 'default') {
// Convert dashes to underscore
$criteriaKey = $this->convertDashesToUnderscores($criteriaKey);
// Debug message
- //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('CRITERIA: criteriaKey=' . $criteriaKey . ',criteria()=' . count($this->criteria));
+ //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('CRITERIA: criteriaKey=' . $criteriaKey . ',criteria()=' . count($this->criteria[$criteriaType]));
// Default is not found
$value = NULL;
// Is the criteria there?
- if (isset($this->criteria[$criteriaKey])) {
+ if (isset($this->criteria[$criteriaType][$criteriaKey])) {
// Then use it
- $value = $this->criteria[$criteriaKey];
+ $value = $this->criteria[$criteriaType][$criteriaKey];
} // END - if
// Return the value
* Checks whether given array entry matches
*
* @param $entryArray Array with the entries to find
+ * @param $criteriaType Type of this criteria, can be one of 'default' (default), 'choice' or 'exclude'
* @return $matches Whether the entry matches or not
*/
- public function ifEntryMatches (array $entryArray) {
+ public function ifEntryMatches (array $entryArray, $criteriaType = 'default') {
// First nothing matches and nothing is counted
$matches = false;
$counted = 0;
$key = $this->convertDashesToUnderscores($key);
// Then walk through all search criteria
- foreach ($this->criteria as $criteriaKey => $criteriaValue) {
+ foreach ($this->criteria[$criteriaType] as $criteriaKey => $criteriaValue) {
// Convert dashes to underscore
$criteriaKey = $this->convertDashesToUnderscores($criteriaKey);
} // END - foreach
// Now check if expected criteria counts match
- $matches = ($counted == count($this->criteria));
+ $matches = ($counted == count($this->criteria[$criteriaType]));
// Return the result
return $matches;
}
+ /**
+ * Checks whether given array 'choice' entry matches
+ *
+ * @param $entryArray Array with the entries to find
+ * @return $matches Whether the entry matches or not
+ */
+ public function ifChoiceMatches (array $entryArray) {
+ // Call inner method
+ return $this->ifEntryMatches($entryArray, 'choice');
+ }
+
+ /**
+ * Checks whether given array 'exclude' entry matches
+ *
+ * @param $entryArray Array with the entries to find
+ * @return $matches Whether the entry matches or not
+ */
+ public function ifExcludeMatches (array $entryArray) {
+ // Call inner method
+ return $this->ifEntryMatches($entryArray, 'exclude');
+ }
+
/**
* "Getter" for a cache key
*
* @param $onlyKeys Only use these keys for a cache key
+ * @param $criteriaType Type of this criteria, can be one of 'default' (default), 'choice' or 'exclude'
* @return $cacheKey The key suitable for the cache system
*/
- public function getCacheKey ($onlyKeys = array()) {
+ public function getCacheKey ($onlyKeys = array(), $criteriaType = 'default') {
// Initialize the key
$cacheKey = '';
// Now walk through all criterias
- foreach ($this->criteria as $criteriaKey => $criteriaValue) {
+ foreach ($this->criteria[$criteriaType] as $criteriaKey => $criteriaValue) {
// Convert dashes to underscore
$criteriaKey = $this->convertDashesToUnderscores($criteriaKey);
}
/**
- * Count the criteria, e.g. useful to find out if a database query has no limitation (search criteria)
+ * "Getter" for a cache key ('choice' type)
+ *
+ * @param $onlyKeys Only use these keys for a cache key
+ * @return $cacheKey The key suitable for the cache system
+ */
+ public function getCacheKeyChoice ($onlyKeys = array()) {
+ // Call inner method
+ return $this->getCacheKey($onlyKeys, 'choice');
+ }
+
+ /**
+ * "Getter" for a cache key ('exclude' type)
+ *
+ * @param $onlyKeys Only use these keys for a cache key
+ * @return $cacheKey The key suitable for the cache system
+ */
+ public function getCacheKeyExclude ($onlyKeys = array()) {
+ // Call inner method
+ return $this->getCacheKey($onlyKeys, 'exclude');
+ }
+
+ /**
+ * "Getter" for a cache key ('choice' type)
+ *
+ * @param $onlyKeys Only use these keys for a cache key
+ * @return $cacheKey The key suitable for the cache system
+ */
+ public function getCacheKeyChoice ($onlyKeys = array()) {
+ // Call inner method
+ return $this->getCacheKey($onlyKeys, 'choice');
+ }
+
+ /**
+ * Count the criteria, e.g. useful to find out if a database query has no
+ * limitation (search criteria).
*
+ * @param $criteriaType Type of this criteria, can be one of 'default' (default), 'choice' or 'exclude'
* @return $count Count of all criteria entries
*/
- public final function count () {
+ public final function count ($criteriaType = 'default') {
// Return it
- return count($this->criteria);
+ return count($this->criteria[$criteriaType]);
+ }
+
+ /**
+ * Count 'choice' criteria, e.g. useful to find out if a database query
+ * has no limitation (search criteria).
+ *
+ * @return $count Count of all criteria entries
+ */
+ public final function countChoice () {
+ return $this->count('choice');
+ }
+
+ /**
+ * Count 'exclude' criteria, e.g. useful to find out if a database query
+ * has no limitation (search criteria).
+ *
+ * @return $count Count of all criteria entries
+ */
+ public final function countExclude () {
+ return $this->count('exclude');
}
}