Used convertDashesToUnderscores()
[core.git] / inc / classes / main / criteria / class_BaseCriteria.php
index d98fcc79ec95cb1b7548fd57f6a7befe66f21ed5..a3daa36e1cb4ac5001756d22ff8d1b91444c5fee 100644 (file)
@@ -4,7 +4,7 @@
  *
  * @author             Roland Haeder <webmaster@ship-simu.org>
  * @version            0.0.0
- * @copyright  Copyright (c) 2007, 2008 Roland Haeder, 2009, 2010 Core Developer Team
+ * @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
  *
@@ -27,6 +27,10 @@ class BaseCriteria extends BaseFrameworkSystem {
         */
        private $wrapperConfigEntry = '';
 
+       /**
+        * Criteria to handle
+        */
+       private $criteria = array();
        /**
         * Protected constructor
         *
@@ -56,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[$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);
+
+               // 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 = $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;
+       }
 }
 
 // [EOF]