X-Git-Url: https://git.mxchange.org/?p=core.git;a=blobdiff_plain;f=inc%2Fclasses%2Fmain%2Fcriteria%2Fclass_BaseCriteria.php;h=4b77b8f1e7ba8fbb6c8bd455287d549a5fa66dd3;hp=d493bb162c96fa14d22cfbd7578e0cfcde97c94a;hb=0cd0dbe0fdf02dff73799f46c3aa26684a6e1a4b;hpb=08b1d39fa38b86cca6a0a6c968162d30ca171ae5 diff --git a/inc/classes/main/criteria/class_BaseCriteria.php b/inc/classes/main/criteria/class_BaseCriteria.php index d493bb16..4b77b8f1 100644 --- a/inc/classes/main/criteria/class_BaseCriteria.php +++ b/inc/classes/main/criteria/class_BaseCriteria.php @@ -4,7 +4,7 @@ * * @author Roland Haeder * @version 0.0.0 - * @copyright Copyright (c) 2007, 2008 Roland Haeder, this is free software + * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2012 Core Developer Team * @license GNU GPL 3.0 or any newer version * @link http://www.ship-simu.org * @@ -25,8 +25,12 @@ class BaseCriteria extends BaseFrameworkSystem { /** * Wrapper class name stored in config entry */ - private $wrapperConfigEntry = ""; + private $wrapperConfigEntry = ''; + /** + * Criteria to handle + */ + private $criteria = array(); /** * Protected constructor * @@ -36,10 +40,6 @@ class BaseCriteria extends BaseFrameworkSystem { protected function __construct ($className) { // Call parent constructor parent::__construct($className); - - // Clean up a little - $this->removeNumberFormaters(); - $this->removeSystemArray(); } /** @@ -60,6 +60,143 @@ class BaseCriteria extends BaseFrameworkSystem { public final function getWrapperConfigEntry () { return $this->wrapperConfigEntry; } + + /** + * Getter for criteria array + * + * @return $criteria + */ + public final function getCriteriaArray () { + return $this->criteria; + } + + /** + * Add 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 addCriteria ($criteriaKey, $criteriaValue) { + $this->criteria[str_replace('-', '_', $criteriaKey)] = (string)$criteriaValue; + } + + /** + * Add configured criteria + * + * @param $criteriaKey Criteria key + * @param $configEntry Configuration entry + * @return void + */ + public final function addConfiguredCriteria ($criteriaKey, $configEntry) { + // Add the configuration entry as a criteria + $value = $this->getConfigInstance()->getConfigEntry($configEntry); + $this->addCriteria($criteriaKey, $value); + } + + /** + * Get criteria element or null if not found + * + * @param $criteriaKey The requested criteria key + * @return $value Whether the value of the critera or null + */ + public function getCriteriaElemnent ($criteriaKey) { + // Convert dashes to underscore + $criteriaKey = str_replace('-', '_', $criteriaKey); + + // Default is not found + $value = NULL; + + // Is the criteria there? + if (isset($this->criteria[$criteriaKey])) { + // Then use it + $value = $this->criteria[$criteriaKey]; + } + + // Return the value + return $value; + } + + /** + * Checks whether given array entry matches + * + * @param $entryArray Array with the entries to find + * @return $matches Whether the entry matches or not + */ + public function ifEntryMatches (array $entryArray) { + // First nothing matches and nothing is counted + $matches = false; + $counted = 0; + + // Walk through all entries + foreach ($entryArray as $key => $entry) { + // Convert dashes to underscore + $key = str_replace('-', '_', $key); + + // Then walk through all search criteria + foreach ($this->criteria as $criteriaKey => $criteriaValue) { + // Convert dashes to underscore + $criteriaKey = str_replace('-', '_', $criteriaKey); + + // Is the element found and does it match? + if (($key == $criteriaKey) && ($criteriaValue == $entry)) { + // Then count this one up + $counted++; + } // END - if + } // END - foreach + } // END - foreach + + // Now check if expected criteria counts match + $matches = ($counted == count($this->criteria)); + + // Return the result + return $matches; + } + + /** + * "Getter" for a cache key + * + * @param $onlyKeys Only use these keys for a cache key + * @return $cacheKey The key suitable for the cache system + */ + public function getCacheKey ($onlyKeys = array()) { + // Initialize the key + $cacheKey = ''; + + // Now walk through all criterias + foreach ($this->criteria as $criteriaKey => $criteriaValue) { + // Convert dashes to underscore + $criteriaKey = str_replace('-', '_', $criteriaKey); + + // Is the value in array or is $onlyKeys empty? + if ((isset($onlyKeys[$criteriaKey])) || (count($onlyKeys) == 0)) { + // Add the value URL encoded to avoid any trouble with special characters + $cacheKey .= sprintf("%s=%s;", + $criteriaKey, + urlencode($criteriaValue) + ); + } // END - if + } // END - foreach + + // Remove last semicolon + $cacheKey = substr($cacheKey, 0, -1); + + // Is the instance SearchCriteria? + if ($this instanceof SearchCriteria) { + // Check if 'limit' and 'skip' are in + if (((isset($onlyKeys['limit'])) && (isset($onlyKeys['skip']))) || (count($onlyKeys) == 0)) { + // Add limit and skip values + $cacheKey .= sprintf(";%%limit%%=%s;%%skip%%=%s", + $this->getLimit(), + $this->getSkip() + ); + } // END - if + } // END - if + + // Return the cache key + return $cacheKey; + } } // [EOF]