From b1b7a0047880032a69c82a3c8e8ee51e68eaa3d0 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Roland=20H=C3=A4der?= Date: Tue, 12 Feb 2013 22:30:41 +0000 Subject: [PATCH] Added methods for 'choice' and 'exclude' criteria --- .../interfaces/criteria/class_Criteria.php | 158 ++++++++++++++- .../main/criteria/class_BaseCriteria.php | 180 ++++++++++++++++-- 2 files changed, 315 insertions(+), 23 deletions(-) diff --git a/inc/classes/interfaces/criteria/class_Criteria.php b/inc/classes/interfaces/criteria/class_Criteria.php index b3e91dae..0859ed0d 100644 --- a/inc/classes/interfaces/criteria/class_Criteria.php +++ b/inc/classes/interfaces/criteria/class_Criteria.php @@ -23,22 +23,174 @@ */ 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] diff --git a/inc/classes/main/criteria/class_BaseCriteria.php b/inc/classes/main/criteria/class_BaseCriteria.php index 21b53aa1..46f40e34 100644 --- a/inc/classes/main/criteria/class_BaseCriteria.php +++ b/inc/classes/main/criteria/class_BaseCriteria.php @@ -21,7 +21,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -class BaseCriteria extends BaseFrameworkSystem { +class BaseCriteria extends BaseFrameworkSystem implements Criteria { /** * Wrapper class name stored in config entry */ @@ -65,10 +65,29 @@ class BaseCriteria extends BaseFrameworkSystem { /** * 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'); } /** @@ -77,15 +96,55 @@ class BaseCriteria extends BaseFrameworkSystem { * * @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'); } /** @@ -93,34 +152,36 @@ class BaseCriteria extends BaseFrameworkSystem { * * @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 @@ -131,9 +192,10 @@ class BaseCriteria extends BaseFrameworkSystem { * 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; @@ -144,7 +206,7 @@ class BaseCriteria extends BaseFrameworkSystem { $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); @@ -157,24 +219,47 @@ class BaseCriteria extends BaseFrameworkSystem { } // 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); @@ -208,13 +293,68 @@ class BaseCriteria extends BaseFrameworkSystem { } /** - * 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'); } } -- 2.30.2