]> git.mxchange.org Git - shipsimu.git/blobdiff - inc/classes/main/user/class_User.php
A lot more old methods deprecated and already deprecated methods removed
[shipsimu.git] / inc / classes / main / user / class_User.php
index 302c117d73d475c0fdb4d6129b2fbd7bdc60a5d2..6e9d8f75578546f10c5dd7c8a9094142606f575a 100644 (file)
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
  */
 class User extends BaseFrameworkSystem implements ManageableUser, Registerable {
+       /**
+        * Instance of the database result
+        */
+       private $resultInstance = null;
+
        /**
         * Username of current user
         */
@@ -33,9 +38,9 @@ class User extends BaseFrameworkSystem implements ManageableUser, Registerable {
        private $email = "";
 
        // Exceptions
-       const EXCEPTION_USERNAME_NOT_FOUND   = 0xd00;
-       const EXCEPTION_USER_EMAIL_NOT_FOUND = 0xd01;
-       const EXCEPTION_USER_PASS_MISMATCH   = 0xd02;
+       const EXCEPTION_USERNAME_NOT_FOUND   = 0x060;
+       const EXCEPTION_USER_EMAIL_NOT_FOUND = 0x061;
+       const EXCEPTION_USER_PASS_MISMATCH   = 0x062;
 
        /**
         * Protected constructor
@@ -104,6 +109,38 @@ class User extends BaseFrameworkSystem implements ManageableUser, Registerable {
                return $userInstance;
        }
 
+       /**
+        * "Getter" for databse entry
+        *
+        * @return      $entry  An array with database entries
+        * @throws      NullPointerException    If the database result is not found
+        * @throws      InvalidDatabaseResultException  If the database result is invalid
+        */
+       private function getDatabaseEntry () {
+               // Is there an instance?
+               if (is_null($this->resultInstance)) {
+                       // Throw new exception
+                       throw new NullPointerException($this, self::EXCEPTION_IS_NULL_POINTER);
+               } // END - if
+
+               // Rewind it
+               $this->resultInstance->rewind();
+
+               // Do we have an entry?
+               if (!$this->resultInstance->valid()) {
+                       throw new InvalidDatabaseResultException(array($this, $this->resultInstance), DatabaseResult::EXCEPTION_INVALID_DATABASE_RESULT);
+               } // END - if
+
+               // Get next entry
+               $this->resultInstance->next();
+
+               // Fetch it
+               $entry = $this->resultInstance->current();
+
+               // And return it
+               return $entry;
+       }
+
        /**
         * Setter for username
         *
@@ -151,21 +188,27 @@ class User extends BaseFrameworkSystem implements ManageableUser, Registerable {
                // By default the username does not exist
                $exists = false;
 
-               // Get a UserDatabaseWrapper instance
-               $wrapperInstance = ObjectFactory::createObjectByConfiguredName('user_db_wrapper');
+               // Is a previous result there?
+               if (is_null($this->resultInstance)) {
+                       // Get a UserDatabaseWrapper instance
+                       $wrapperInstance = ObjectFactory::createObjectByConfiguredName('user_db_wrapper_class');
 
-               // Create a search criteria
-               $criteriaInstance = ObjectFactory::createObjectByConfiguredName('search_criteria');
+                       // 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->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 result
-               $result = $wrapperInstance->doSelectByCriteria($criteriaInstance);
+                       // Get a search result
+                       $this->resultInstance = $wrapperInstance->doSelectByCriteria($criteriaInstance);
+               } else {
+                       // Rewind it
+                       $this->resultInstance->rewind();
+               }
 
                // Search for it
-               if ($result->next()) {
+               if ($this->resultInstance->next()) {
                        // Entry found
                        $exists = true;
                } // END - if
@@ -183,21 +226,27 @@ class User extends BaseFrameworkSystem implements ManageableUser, Registerable {
                // By default the email does not exist
                $exists = false;
 
-               // Get a UserDatabaseWrapper instance
-               $wrapperInstance = ObjectFactory::createObjectByConfiguredName('user_db_wrapper');
+               // Is a previous result there?
+               if (is_null($this->resultInstance)) {
+                       // Get a UserDatabaseWrapper instance
+                       $wrapperInstance = ObjectFactory::createObjectByConfiguredName('user_db_wrapper_class');
 
-               // Create a search criteria
-               $criteriaInstance = ObjectFactory::createObjectByConfiguredName('search_criteria');
+                       // 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_EMAIL, $this->getEmail());
-               $criteriaInstance->setLimit(1);
+                       // Add the username as a criteria and set limit to one entry
+                       $criteriaInstance->addCriteria(UserDatabaseWrapper::DB_COLUMN_EMAIL, $this->getEmail());
+                       $criteriaInstance->setLimit(1);
 
-               // Get a search result
-               $result = $wrapperInstance->doSelectByCriteria($criteriaInstance);
+                       // Get a search resultInstance
+                       $this->resultInstance = $wrapperInstance->doSelectByCriteria($criteriaInstance);
+               } else {
+                       // Rewind it
+                       $this->resultInstance->rewind();
+               }
 
                // Search for it
-               if ($result->next()) {
+               if ($this->resultInstance->next()) {
                        // Entry found
                        $exists = true;
                } // END - if
@@ -218,24 +267,25 @@ class User extends BaseFrameworkSystem implements ManageableUser, Registerable {
                $matches = false;
 
                // Get a UserDatabaseWrapper instance
-               $wrapperInstance = ObjectFactory::createObjectByConfiguredName('user_db_wrapper');
+               $wrapperInstance = ObjectFactory::createObjectByConfiguredName('user_db_wrapper_class');
 
                // Create a search criteria
-               $criteriaInstance = ObjectFactory::createObjectByConfiguredName('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->setLimit(1);
 
-               // Get a search result
-               $result = $wrapperInstance->doSelectByCriteria($criteriaInstance);
+               // Get a search resultInstance
+               $this->resultInstance = $wrapperInstance->doSelectByCriteria($criteriaInstance);
 
                // Search for it
-               if ($result->next()) {
+               if ($this->resultInstance->next()) {
                        // Get the current entry (can only be one!)
-                       $entry = $result->current();
+                       $entry = $this->resultInstance->current();
 
                        // So does the hashes match?
+                       //* DEBUG: */ echo $requestInstance->getRequestElement('pass_hash')."/".$entry['pass_hash'];
                        $matches = ($requestInstance->getRequestElement('pass_hash') === $entry['pass_hash']);
                } // END - if
 
@@ -253,6 +303,105 @@ class User extends BaseFrameworkSystem implements ManageableUser, Registerable {
        public function addUpdateData ($column, $value) {
                $this->partialStub("Column={$column}, value={$value}");
        }
+
+       /**
+        * "Getter" for user's password hash
+        *
+        * @return      $passHash       User's password hash from database result
+        */
+       public function getPasswordHash () {
+               // Default is missing password hash
+               $passHash = null;
+
+               // Get a database entry
+               $entry = $this->getDatabaseEntry();
+
+               // Is the password hash there?
+               if (isset($entry['pass_hash'])) {
+                       // Get it
+                       $passHash = $entry['pass_hash'];
+               }
+
+               // And return the hash
+               return $passHash;
+       }
+
+       /**
+        * Updates the last activity timestamp and last performed action in the
+        * database result. You should call flushUpdates() to flush these updates
+        * to the database layer.
+        *
+        * @param       $requestInstance        A requestable class instance
+        * @return      void
+        */
+       public function updateLastActivity (Requestable $requestInstance) {
+               // Set last action
+               $lastAction = $requestInstance->getRequestElement('action');
+
+               // If there is no action use the default on
+               if (is_null($lastAction)) {
+                       $lastAction = $this->getConfigInstance()->readConfig('login_default_action');
+               } // END - if
+
+               // Get a critieria instance
+               $searchInstance = ObjectFactory::createObjectByConfiguredName('search_criteria_class');
+
+               // Add search criteria
+               $searchInstance->addCriteria(UserDatabaseWrapper::DB_COLUMN_USERNAME, $this->getUserName());
+               $searchInstance->setLimit(1);
+
+               // Now get another criteria
+               $updateInstance = ObjectFactory::createObjectByConfiguredName('update_criteria_class');
+
+               // And add our both entries
+               $updateInstance->addCriteria('last_activity', date("Y-m-d H:i:s", time()));
+               $updateInstance->addCriteria('last_action', $lastAction);
+
+               // Add the search criteria for searching for the right entry
+               $updateInstance->setSearchInstance($searchInstance);
+
+               // Remember the update in database result
+               $this->resultInstance->add2UpdateQueue($updateInstance);
+       }
+
+       /**
+        * Flushs all updated entries to the database layer
+        *
+        * @return      void
+        */
+       public function flushUpdates () {
+               // Get a database wrapper
+               $wrapperInstance = ObjectFactory::createObjectByConfiguredName('user_db_wrapper_class');
+
+               // Do we have data to update?
+               if ($this->resultInstance->ifDataNeedsFlush()) {
+                       // Yes, then send the whole result to the database layer
+                       $wrapperInstance->doUpdateByResult($this->resultInstance);
+               } // END - if
+       }
+
+       /**
+        * Getter for field name
+        *
+        * @param       $fieldName              Field name which we shall get
+        * @return      $fieldValue             Field value from the user
+        */
+       public function getField ($fieldName) {
+               // Default field value
+               $fieldValue = null;
+
+               // Get current array
+               $fieldArray = $this->resultInstance->current();
+
+               // Does the field exist?
+               if (isset($fieldArray[$fieldName])) {
+                       // Get it
+                       $fieldValue = $fieldArray[$fieldName];
+               } // END - if
+
+               // Return it
+               return $fieldValue;
+       }
 }
 
 // [EOF]