* @return $result Found result entry
*/
function searchEntry (LocalSearchCriteria $criteriaInstance);
+
+ /**
+ * Solver for result index value with call-back method
+ *
+ * @param $databaseColumn Database column where the index might be found
+ * @para $callBack Call-back object for setting the index
+ * @return void
+ */
+ function solveResultIndex ($databaseColumn, BaseDatabaseWrapper $wrapperInstance, array $callBack);
}
// [EOF]
* @param $criteriaValue Criteria value
* @return void
*/
- public function addCriteria ($criteriaKey, $criteriaValue) {
- $this->searchCriteria[$criteriaKey] = $criteriaValue;
+ public final function addCriteria ($criteriaKey, $criteriaValue) {
+ $this->searchCriteria[(string)$criteriaKey] = (string)$criteriaValue;
}
/**
* @param $configEntry Configuration entry
* @return void
*/
- public function addConfiguredCriteria ($criteriaKey, $configEntry) {
+ public final function addConfiguredCriteria ($criteriaKey, $configEntry) {
// Add the configuration entry as a criteria
$value = $this->getConfigInstance()->readConfig($configEntry);
$this->addCriteria($criteriaKey, $value);
*
* @param $limit Search limit
* @return void
+ * @todo Find a nice casting here. (int) allows until and including 32766.
*/
public final function setLimit ($limit) {
$this->limit = $limit;
*
* @param $skip Search skip
* @return void
+ * @todo Find a nice casting here. (int) allows until and including 32766.
*/
public final function setSkip ($skip) {
$this->skip = $skip;
*/
private $tableInfo = array();
+ /**
+ * Element for index
+ */
+ private $indexKey = "__idx";
+
/**
* The protected constructor. Do never instance from outside! You need to
* set a local file path. The class will then validate it.
return $this->fileExtension;
}
+ /**
+ * Getter for index key
+ *
+ * @return $indexKey Index key
+ */
+ public final function getIndexKey () {
+ return $this->indexKey;
+ }
+
/**
* Reads a local data file and returns it's contents in an array
*
} // END - if
// Set id number
- $dataArray['__idx'] = $idx;
+ $dataArray[$this->getIndexKey()] = $idx;
// Entry found!
$resultData['rows'][] = $dataArray;
return $wrapperInstance;
}
+ /**
+ * Getter for index key
+ *
+ * @return $indexKey Index key
+ */
+ public final function getIndexKey () {
+ return $this->getDatabaseInstance()->getIndexKey();
+ }
+
/**
* Handles inserting the registration data from a registration instance into the database
*
$requestInstance->requestIsValid(false);
// Add a message to the response
- $responseInstance->addFatalMessage('username_unset');
+ $responseInstance->addFatalMessage('username_guest_unset');
// Abort here
return false;
$requestInstance->requestIsValid(false);
// Add a message to the response
- $responseInstance->addFatalMessage('username_empty');
+ $responseInstance->addFatalMessage('username_guest_empty');
// Abort here
return false;
$requestInstance->requestIsValid(false);
// Add a message to the response
- $responseInstance->addFatalMessage('username_not_found');
+ $responseInstance->addFatalMessage('username_guest_not_found');
// Abort here
return false;
*/
private $affectedRows = 0;
+ /**
+ * Found value
+ */
+ private $foundValue = "";
+
/**
* Protected constructor
*
}
/**
- * Rewind to the beginning
+ * Rewind to the beginning and clear array $currentRow
*
* @return void
*/
public function rewind () {
$this->currentPos = -1;
+ $this->currentRow = array();
}
/**
return $this->affectedRows;
}
+ /**
+ * Getter for found value of previous found() call
+ *
+ * @return $foundValue Found value of previous found() call
+ */
+ public final function getFoundValue () {
+ return $this->foundValue;
+ }
+
/**
* Checks wether we have out-dated entries or not
*
* @return void
*/
public function addElementsToDataSet (StoreableCriteria $criteriaInstance) {
+ // Walk only through out-dated columns
+ foreach ($this->outDated as $key => $dummy) {
+ // Does this key exist?
+ //* DEBUG: */ echo "outDated: {$key}<br />\n";
+ if ($this->find($key)) {
+ // Then update it
+ $criteriaInstance->addCriteria($key, $this->getFoundValue());
+ } // END - if
+ } // END - foreach
+ }
+
+ /**
+ * Find a key inside the result array
+ *
+ * @param $key The key we shall find
+ * @return $found Wether the key was found or not
+ */
+ public function find ($key) {
+ // By default nothing is found
+ $found = false;
+
// Rewind the pointer
$this->rewind();
// Walk through all entries
while ($this->valid()) {
- // Get next entry
+ // Advance to next entry
$this->next();
+
+ // Get the whole array
$currentEntry = $this->current();
- // Walk only through out-dated columns
- foreach ($this->outDated as $key => $dummy) {
- // Does this key exist?
- //* DEBUG: */ echo "outDated: {$key}<br />\n";
- if (isset($currentEntry[$key])) {
- // Then update it
- $criteriaInstance->addCriteria($key, $currentEntry[$key]);
- } // END - foreach
- } // END - foreach
+ // Is the element there?
+ if (isset($currentEntry[$key])) {
+ // Okay, found!
+ $found = true;
+
+ // So "cache" it
+ $this->foundValue = $currentEntry[$key];
+
+ // And stop searching
+ break;
+ } // END - if
} // END - while
+
+ // Return the result
+ return $found;
+ }
+
+ /**
+ * Solver for result index value with call-back method
+ *
+ * @param $databaseColumn Database column where the index might be found
+ * @param $wrapperInstance The wrapper instance to ask for array element
+ * @para $callBack Call-back object for setting the index;
+ * 0=object instance,1=method name
+ * @return void
+4 * @todo Find a caching way without modifying the result array
+ */
+ public function solveResultIndex ($databaseColumn, BaseDatabaseWrapper $wrapperInstance, array $callBack) {
+ // By default nothing is found
+ $indexValue = 0;
+
+ // Is the element in result itself found?
+ if ($this->find($databaseColumn)) {
+ // Use this value
+ $indexValue = $this->getFoundValue();
+ } elseif ($this->find($wrapperInstance->getIndexKey())) {
+ // Use this value
+ $indexValue = $this->getFoundValue();
+ }
+
+ // Set the index
+ call_user_func_array($callBack, array($indexValue));
}
}
// Add the username as a criteria and set limit to one entry
$criteriaInstance->addCriteria(UserDatabaseWrapper::DB_COLUMN_USERNAME, $this->getUserName());
- $criteriaInstance->setIndexSolution(UserDatabaseWrapper::DB_COLUMN_USERID, array($this, 'setUserId'));
$criteriaInstance->setLimit(1);
// Get a search result
- $this->setResultInstance($wrapperInstance->doSelectByCriteria($criteriaInstance));
- } else {
- // Rewind it
- $this->getResultInstance()->rewind();
- }
+ $resultInstance = $wrapperInstance->doSelectByCriteria($criteriaInstance);
+
+ // Set the index "solver"
+ $resultInstance->solveResultIndex(UserDatabaseWrapper::DB_COLUMN_USERID, $wrapperInstance, array($this, 'setUserId'));
+
+ // And finally set it
+ $this->setResultInstance($resultInstance);
+ } // END - if
+
+ // Rewind it
+ $this->getResultInstance()->rewind();
// Search for it
if ($this->getResultInstance()->next()) {
// Add the username as a criteria and set limit to one entry
$criteriaInstance->addCriteria(UserDatabaseWrapper::DB_COLUMN_EMAIL, $this->getEmail());
- $criteriaInstance->setIndexSolution(UserDatabaseWrapper::DB_COLUMN_USERID, array($this, 'setUserId'));
$criteriaInstance->setLimit(1);
- // Get a search resultInstance
- $this->setResultInstance($wrapperInstance->doSelectByCriteria($criteriaInstance));
- } else {
- // Rewind it
- $this->getResultInstance()->rewind();
- }
+ // Get a search result
+ $resultInstance = $wrapperInstance->doSelectByCriteria($criteriaInstance);
+
+ // Set the index "solver"
+ $resultInstance->solveResultIndex(UserDatabaseWrapper::DB_COLUMN_USERID, $wrapperInstance, array($this, 'setUserId'));
+
+ // And finally set it
+ $this->setResultInstance($resultInstance);
+ } // END - if
+
+ // Rewind it
+ $this->getResultInstance()->rewind();
// Search for it
if ($this->getResultInstance()->next()) {
// By default nothing matches... ;)
$matches = false;
- // Get a UserDatabaseWrapper instance
- $wrapperInstance = ObjectFactory::createObjectByConfiguredName('user_db_wrapper_class');
+ // Is a previous result there?
+ if (is_null($this->getResultInstance())) {
+ // Get a UserDatabaseWrapper instance
+ $wrapperInstance = ObjectFactory::createObjectByConfiguredName('user_db_wrapper_class');
- // Create a search criteria
- $criteriaInstance = ObjectFactory::createObjectByConfiguredName('search_criteria_class');
+ // Create a search criteria
+ $criteriaInstance = ObjectFactory::createObjectByConfiguredName('search_criteria_class');
- // Add the username as a criteria and set limit to one entry
- $criteriaInstance->addCriteria(UserDatabaseWrapper::DB_COLUMN_USERNAME, $this->getUserName());
- $criteriaInstance->setIndexSolution(UserDatabaseWrapper::DB_COLUMN_USERID, array($this, 'setUserId'));
- $criteriaInstance->setLimit(1);
+ // Add the username as a criteria and set limit to one entry
+ $criteriaInstance->addCriteria(UserDatabaseWrapper::DB_COLUMN_USERNAME, $this->getUserName());
+ $criteriaInstance->setLimit(1);
- // Get a search resultInstance
- $this->setResultInstance($wrapperInstance->doSelectByCriteria($criteriaInstance));
+ // Get a search result
+ $resultInstance = $wrapperInstance->doSelectByCriteria($criteriaInstance);
- // Search for it
- if ($this->getResultInstance()->next()) {
- // Get the current entry (can only be one!)
- $entry = $this->getResultInstance()->current();
+ // Set the index "solver"
+ $resultInstance->solveResultIndex(UserDatabaseWrapper::DB_COLUMN_USERID, $wrapperInstance, array($this, 'setUserId'));
+
+ // And finally set it
+ $this->setResultInstance($resultInstance);
+ } // END - if
+
+ // Rewind it
+ $this->getResultInstance()->rewind();
+ // Search for it
+ if ($this->getResultInstance()->find('pass_hash')) {
// So does the hashes match?
//* DEBUG: */ echo $requestInstance->getRequestElement('pass_hash')."/".$entry['pass_hash'];
- $matches = ($requestInstance->getRequestElement('pass_hash') === $entry['pass_hash']);
+ $matches = ($requestInstance->getRequestElement('pass_hash') === $this->getResultInstance()->getFoundValue());
} // END - if
// Return the status
$this->dbLayer = $dbLayer;
}
+ /**
+ * Getter for index key
+ *
+ * @return $indexKey Index key
+ */
+ public final function getIndexKey () {
+ return $this->dbLayer->getIndexKey();
+ }
+
/**
* Runs a "select" statement on the database layer with given table name
* and criteria. If this doesn't fail the result will be returned