From 30b7d2640709bbec4cac06ddc7c5d1dddb997a1c Mon Sep 17 00:00:00 2001 From: =?utf8?q?Roland=20H=C3=A4der?= Date: Fri, 22 Feb 2013 05:14:56 +0000 Subject: [PATCH] Fixed search criteria handling, added more asserts, 'my-/_' prefix is not allowed --- .../main/criteria/class_BaseCriteria.php | 31 +++++++++++++++---- .../criteria/search/class_SearchCriteria.php | 4 +-- .../databases/class_LocalFileDatabase.php | 2 ++ 3 files changed, 29 insertions(+), 8 deletions(-) diff --git a/inc/classes/main/criteria/class_BaseCriteria.php b/inc/classes/main/criteria/class_BaseCriteria.php index 7d59075b..ab91f93c 100644 --- a/inc/classes/main/criteria/class_BaseCriteria.php +++ b/inc/classes/main/criteria/class_BaseCriteria.php @@ -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); diff --git a/inc/classes/main/criteria/search/class_SearchCriteria.php b/inc/classes/main/criteria/search/class_SearchCriteria.php index ded04793..170986c0 100644 --- a/inc/classes/main/criteria/search/class_SearchCriteria.php +++ b/inc/classes/main/criteria/search/class_SearchCriteria.php @@ -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'); diff --git a/inc/classes/main/database/databases/class_LocalFileDatabase.php b/inc/classes/main/database/databases/class_LocalFileDatabase.php index 2185039b..ac5bbb95 100644 --- a/inc/classes/main/database/databases/class_LocalFileDatabase.php +++ b/inc/classes/main/database/databases/class_LocalFileDatabase.php @@ -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) { -- 2.30.2