Fixed search criteria handling, added more asserts, 'my-/_' prefix is not allowed
authorRoland Häder <roland@mxchange.org>
Fri, 22 Feb 2013 05:14:56 +0000 (05:14 +0000)
committerRoland Häder <roland@mxchange.org>
Fri, 22 Feb 2013 05:14:56 +0000 (05:14 +0000)
inc/classes/main/criteria/class_BaseCriteria.php
inc/classes/main/criteria/search/class_SearchCriteria.php
inc/classes/main/database/databases/class_LocalFileDatabase.php

index 7d59075..ab91f93 100644 (file)
@@ -58,6 +58,9 @@ class BaseCriteria extends BaseFrameworkSystem implements Criteria {
         * @return      $isSet                  Whether key is set
         */
        public function isKeySet ($criteriaType, $criteriaKey) {
+               // Make sure no 'my-' or 'my_' passes this point
+               assert((strpos($criteriaKey, 'my-') === FALSE) && (strpos($criteriaKey, 'my_') === FALSE));
+
                // Determine it
                $isSet = isset($this->criteria[$criteriaType][$criteriaKey]);
 
@@ -144,17 +147,19 @@ class BaseCriteria extends BaseFrameworkSystem implements Criteria {
         * @return      void
         */
        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(strtoupper($criteriaType) . '-CRITERIA[' . __LINE__ . ']: criteriaKey=' . $criteriaKey . ',criteriaValue=' . $criteriaValue);
+               // Make sure no 'my-' or 'my_' passes this point
+               assert((strpos($criteriaKey, 'my-') === FALSE) && (strpos($criteriaKey, 'my_') === FALSE));
 
                // Convert dashes to underscore
                $criteriaKey = $this->convertDashesToUnderscores($criteriaKey);
 
+               // Debug message
+               /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(strtoupper($criteriaType) . '(' . $this->__toString() . ')-CRITERIA[' . __LINE__ . ']: criteriaKey=' . $criteriaKey . ',criteriaValue=' . $criteriaValue);
+
                // Is it already there?
                if ($this->isKeySet($criteriaType, $criteriaKey)) {
                        // Append it
-                       $this->criteria[$criteriaType][$criteriaKey] .= ',' . $criteriaValue;
+                       $this->criteria[$criteriaType][$criteriaKey] .= ',' . (string) $criteriaValue;
                } else {
                        // Add it
                        $this->criteria[$criteriaType][$criteriaKey] = (string) $criteriaValue;
@@ -170,9 +175,11 @@ class BaseCriteria extends BaseFrameworkSystem implements Criteria {
         * @return      void
         */
        public final function addChoiceCriteria ($criteriaKey, $criteriaValue) {
+               // Make sure no 'my-' or 'my_' passes this point
+               assert((strpos($criteriaKey, 'my-') === FALSE) && (strpos($criteriaKey, 'my_') === FALSE));
+
                // Debug message
-               if (strpos($criteriaKey, 'my-') !== false) $this->debugBackTrace('criteriaKey=' . $criteriaKey);
-               //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('CHOICE-CRITERIA[' . __LINE__ . ']: criteriaKey=' . $criteriaKey . ',criteriaValue=' . $criteriaValue);
+               //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(strtoupper($criteriaType) . '(' . $this->__toString() . ')-CRITERIA[' . __LINE__ . ']: criteriaKey=' . $criteriaKey . ',criteriaValue=' . $criteriaValue);
 
                // Add it
                $this->criteria['choice'][$this->convertDashesToUnderscores($criteriaKey)][] = (string) $criteriaValue;
@@ -213,6 +220,9 @@ class BaseCriteria extends BaseFrameworkSystem implements Criteria {
         * @return      $value                  Whether the value of the critera or null
         */
        public function getCriteriaElemnent ($criteriaKey, $criteriaType = 'default') {
+               // Make sure no 'my-' or 'my_' passes this point
+               assert((strpos($criteriaKey, 'my-') === FALSE) && (strpos($criteriaKey, 'my_') === FALSE));
+
                // Convert dashes to underscore
                $criteriaKey = $this->convertDashesToUnderscores($criteriaKey);
 
@@ -268,11 +278,17 @@ class BaseCriteria extends BaseFrameworkSystem implements Criteria {
 
                // Walk through all entries
                foreach ($entryArray as $key => $entry) {
+                       // Make sure no 'my-' or 'my_' passes this point
+                       assert((strpos($key, 'my-') === FALSE) && (strpos($key, 'my_') === FALSE));
+
                        // Convert dashes to underscore
                        $key = $this->convertDashesToUnderscores($key);
 
                        // Then walk through all search criteria
                        foreach ($this->criteria[$criteriaType] as $criteriaKey => $criteriaValue) {
+                               // Make sure no 'my-' or 'my_' passes this point
+                               assert((strpos($criteriaKey, 'my-') === FALSE) && (strpos($criteriaKey, 'my_') === FALSE));
+
                                // Convert dashes to underscore
                                $criteriaKey = $this->convertDashesToUnderscores($criteriaKey);
 
@@ -332,6 +348,9 @@ class BaseCriteria extends BaseFrameworkSystem implements Criteria {
 
                // Now walk through all criterias
                foreach ($this->criteria[$criteriaType] as $criteriaKey => $criteriaValue) {
+                       // Make sure no 'my-' or 'my_' passes this point
+                       assert((strpos($criteriaKey, 'my-') === FALSE) && (strpos($criteriaKey, 'my_') === FALSE));
+
                        // Convert dashes to underscore
                        $criteriaKey = $this->convertDashesToUnderscores($criteriaKey);
 
index ded0479..170986c 100644 (file)
@@ -154,7 +154,7 @@ class SearchCriteria extends BaseCriteria implements LocalSearchCriteria {
                // 'choice' check
                if ((is_array($searchChoice)) && (count($valueArray) == 1)) {
                        // $value is a single-search value, so use in_array()
-                       $isMatching = (((is_null($searchDefault)) || ($isMatching === TRUE)) && ((is_null($searchChoice)) || ((is_array($searchChoice)) && (in_array($value, $searchChoice)))));
+                       $isMatching = ((($isMatching === TRUE) || (is_null($searchDefault))) && ((is_null($searchChoice)) || ((is_array($searchChoice)) && (in_array($value, $searchChoice)))));
 
                        // Debug message
                        //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('SEARCH-CRITERIA[' . __LINE__ . ']: getCriteriaChoiceElement(' . $key . ')[]=' . gettype($searchChoice) . ',value=' . $value . ',isMatching=' . intval($isMatching) . ' - SINGLE-MATCH');
@@ -177,7 +177,7 @@ class SearchCriteria extends BaseCriteria implements LocalSearchCriteria {
                        //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('SEARCH-CRITERIA[' . __LINE__ . ']: getCriteriaChoiceElement(' . $key . ')[]=' . gettype($searchChoice) . ',valueArray()=' . count($valueArray) . ',idx=' . $idx . ',isMatching=' . intval($isMatching) . ' - CHOICE-MATCH');
                } else {
                        // Choice-match is NULL?
-                       $isMatching = (($isMatching === TRUE) || (is_null($searchChoice)));
+                       $isMatching = (($isMatching === TRUE) || (is_null($searchDefault)));
 
                        // Debug message
                        //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('SEARCH-CRITERIA[' . __LINE__ . ']: getCriteriaChoiceElement(' . $key . ')[]=' . gettype($searchChoice) . ',value=' . $value . ',isMatching=' . intval($isMatching) . ' - NULL-MATCH');
index 2185039..ac5bbb9 100644 (file)
@@ -359,9 +359,11 @@ class LocalFileDatabase extends BaseDatabaseBackend implements DatabaseBackendIn
                                        foreach ($dataArray as $key => $value) {
                                                // Found one entry?
                                                $isFound = (($isFound === TRUE) && ($searchInstance->isCriteriaMatching($key, $value)));
+                                               //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('DATABASE: key=' . $key . ',value=' . $value . ',isFound=' . intval($isFound));
                                        } // END - foreach
 
                                        // Is all found?
+                                       //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('DATABASE: isFound=' . intval($isFound) . ',limitFound=' . $limitFound . ',limit=' . $searchInstance->getLimit());
                                        if ($isFound === TRUE) {
                                                // Shall we skip this entry?
                                                if ($searchInstance->getSkip() > 0) {