*
* @author Roland Haeder <webmaster@ship-simu.org>
* @version 0.0.0
- * @copyright Copyright (c) 2007 - 2009 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
*
*/
private $wrapperConfigEntry = '';
+ /**
+ * Criteria to handle
+ */
+ private $criteria = array();
/**
* Protected constructor
*
protected function __construct ($className) {
// Call parent constructor
parent::__construct($className);
-
- // Clean up a little
- $this->removeNumberFormaters();
- $this->removeSystemArray();
}
/**
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[$this->convertDashesToUnderscores($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 = $this->convertDashesToUnderscores($criteriaKey);
+
+ // Debug message
+ //* NOISY-DEBUG: */ $this->debugOutput('CRITERIA: criteriaKey=' . $criteriaKey . ',criteria()=' . count($this->criteria));
+
+ // Default is not found
+ $value = NULL;
+
+ // Is the criteria there?
+ if (isset($this->criteria[$criteriaKey])) {
+ // Then use it
+ $value = $this->criteria[$criteriaKey];
+ } // END - if
+
+ // 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 = $this->convertDashesToUnderscores($key);
+
+ // Then walk through all search criteria
+ foreach ($this->criteria as $criteriaKey => $criteriaValue) {
+ // Convert dashes to underscore
+ $criteriaKey = $this->convertDashesToUnderscores($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 = $this->convertDashesToUnderscores($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;
+ }
+
+ /**
+ * Count the 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 count () {
+ // Return it
+ return count($this->criteria);
+ }
}
// [EOF]