<?php
/**
- * A database client for the User class
+ * A database wrapper for the User class
*
* @see DatabaseFrontendInterface - An interface for database frontends (front-end to the application)
* @author Roland Haeder <webmaster@ship-simu.org>
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
class UserDatabaseWrapper extends BaseDatabaseWrapper {
+ /**
+ * Cache instance
+ */
+ private $cacheInstance = null;
+
// Constants
const EXCEPTION_CLIENT_USERNAME_NOT_FOUND = 0xe00;
parent::__construct(__CLASS__);
// Set part description
- $this->setObjectDescription("Database client for user objects");
+ $this->setObjectDescription("Database wrapper for user objects");
// Create unique ID number
$this->createUniqueID();
+
+ // Initialize the cache instance
+ $this->initCacheInstance();
}
/**
- * Creates an instance of this database client by a provided user class
+ * Creates an instance of this database wrapper by a provided user class
*
* @param $userInstance An instance of a user class
- * @return $clientInstance An instance of the created client class
- * @throws WrapperUserNameNotFoundException If the supplied username
+ * @return $wrapperInstance An instance of the created wrapper class
+ * @throws WrapperUserNameNotFoundException If the supplied username
* does not exist
*/
public final static function createUserDatabaseWrapper (ManageableUser $userInstance) {
// Get a new instance
- $clientInstance = new UserDatabaseWrapper();
+ $wrapperInstance = new UserDatabaseWrapper();
// Does the username exists?
- if (!$clientInstance->ifUserNameExists($userInstance->getUserName())) {
+ if (!$wrapperInstance->ifUserNameExists($userInstance->getUserName())) {
// Throw an exception here
- throw new WrapperUserNameNotFoundException (array($clientInstance, $userInstance), self::EXCEPTION_CLIENT_USERNAME_NOT_FOUND);
+ throw new WrapperUserNameNotFoundException (array($wrapperInstance, $userInstance), self::EXCEPTION_CLIENT_USERNAME_NOT_FOUND);
}
// The user exists
- $clientInstance->partialStub("Add loading of full user details");
+ $wrapperInstance->partialStub("Add loading of full user details");
// Return the instance
- return $clientInstance;
+ return $wrapperInstance;
+ }
+
+ /**
+ * Initializes the cache instance with a new object
+ *
+ * @return void
+ */
+ private function initCacheInstance () {
+ // Set the new instance
+ $this->cacheInstance = CacheFactory::getFactory()->createConfiguredCache();
+ }
+
+ /**
+ * Checks wether the given username is already used
+ *
+ * @param $userName The username we shall look up
+ * @return $exists Wether the username exists
+ */
+ public function ifUserNameExists ($userName) {
+ // By default no entry exist
+ $exists = false;
+
+ // Does this entry exist?
+ if ($this->cacheInstance->offsetExists($userName)) {
+ // Then we have a user!
+ $exists = true;
+ } else {
+ // Create a search criteria
+ $criteriaInstance = ObjectFactory::createObjectByConfiguredName('search_criteria');
+
+ // Add the username as a criteria and set limit to one entry
+ $criteriaInstance->add(self::DB_USERNAME, $userName);
+ $criteriaInstance->setLimit(1);
+
+ // Get a search result
+ $result = $this->doSelectByCriteria($criteriaInstance);
+
+ // Search for it
+ if ($result->next()) {
+ // Get the result
+ $this->cacheInstance->add($userName, $result->getResultArray());
+
+ // Entry found, so all is fine
+ $exists = true;
+ }
+ }
+
+ // Return the result
+ return $exists;
}
}