]> git.mxchange.org Git - shipsimu.git/blobdiff - inc/classes/main/database/wrapper/class_UserDatabaseWrapper.php
More object are configureable, cache initially added
[shipsimu.git] / inc / classes / main / database / wrapper / class_UserDatabaseWrapper.php
index 18aabb060cbd68f9a2268901a3ddf33e60d0d4f5..f9caae5220caacc2d5007db0171d901cfc43fdff 100644 (file)
@@ -1,6 +1,6 @@
 <?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;
 
@@ -36,35 +41,87 @@ class UserDatabaseWrapper extends BaseDatabaseWrapper {
                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;
        }
 }