X-Git-Url: https://git.mxchange.org/?p=shipsimu.git;a=blobdiff_plain;f=application%2Fship-simu%2Fmain%2Fuser%2Fextended%2Fclass_ShipSimuMember.php;h=a37ef16ff5616ffc9f834d1a3ea6f04cb581e1d3;hp=25e76b7bbe54f7e861f30d11152f5b55d181501f;hb=4f70843ae8428f051d70ccff5bb43fc4c03dda8d;hpb=968aa514d2df8ed98dab8ff251ee83c95f1ac182 diff --git a/application/ship-simu/main/user/extended/class_ShipSimuMember.php b/application/ship-simu/main/user/extended/class_ShipSimuMember.php index 25e76b7..a37ef16 100644 --- a/application/ship-simu/main/user/extended/class_ShipSimuMember.php +++ b/application/ship-simu/main/user/extended/class_ShipSimuMember.php @@ -2,11 +2,11 @@ /** * A special member class for Ship-Simu * - * @author Roland Haeder + * @author Roland Haeder * @version 0.0.0 - * @copyright Copyright (c) 2007, 2008 Roland Haeder, this is free software + * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 Ship-Simu Developer Team * @license GNU GPL 3.0 or any newer version - * @link http://www.ship-simu.org + * @link http://www.shipsimu.org * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -21,48 +21,52 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -class ShipSimuMember extends ShipSimuBaseUser implements ManageableMember { +class ShipSimuMember extends ShipSimuBaseUser implements ManageableMember, BookableAccount { /** * Protected constructor * * @param $className Name of the class * @return void */ - protected function __construct ($className = "") { - // Is the class name empty? Then this is not a specialized user class - if (empty($className)) $className = __CLASS__; - + protected function __construct ($className = __CLASS__) { // Call parent constructor parent::__construct($className); + } - // Set part description - $this->setObjectDescription("Special member class for Ship-Simu"); + /** + * Destructor for e.g. flushing pending updates to the database + * + * @return void + */ + public function __destruct () { + // Flush any updated entries to the database + $this->flushPendingUpdates(); - // Create unique ID number - $this->generateUniqueId(); + // Call parent destructor + parent::__destruct(); } /** * Creates an instance of this user class by a provided username. This - * factory method will check if the username is already taken and if not + * factory method will check if username is already taken and if not * so it will throw an exception. * * @param $userName Username we need a class instance for * @return $userInstance An instance of this user class * @throws UsernameMissingException If the username does not exist */ - public final static function createMemberByUsername ($userName) { + public static final function createMemberByUsername ($userName) { // Get a new instance $userInstance = new ShipSimuMember(); // Set the username $userInstance->setUserName($userName); - // Check if the username exists - if (!$userInstance->ifUsernameExists()) { + // Check if username exists + if ($userInstance->ifUsernameExists() === false) { // Throw an exception here throw new UsernameMissingException(array($userInstance, $userName), self::EXCEPTION_USERNAME_NOT_FOUND); - } + } // END - if // Return the instance return $userInstance; @@ -70,12 +74,12 @@ class ShipSimuMember extends ShipSimuBaseUser implements ManageableMember { /** * Creates an instance of this user class by a provided email address. This - * factory method will not check if the email address is there. + * factory method will not check if email address is there. * * @param $email Email address of the user * @return $userInstance An instance of this user class */ - public final static function createMemberByEmail ($email) { + public static final function createMemberByEmail ($email) { // Get a new instance $userInstance = new ShipSimuMember(); @@ -91,8 +95,9 @@ class ShipSimuMember extends ShipSimuBaseUser implements ManageableMember { * * @param $requestInstance An instance of a Requestable class * @return $userInstance An instance of this user class + * @todo Add more ways of creating user instances */ - public final static function createMemberByRequest (Requestable $requestInstance) { + public static final function createMemberByRequest (Requestable $requestInstance) { // Determine if by email or username if (!is_null($requestInstance->getRequestElement('username'))) { // Username supplied @@ -126,7 +131,7 @@ class ShipSimuMember extends ShipSimuBaseUser implements ManageableMember { // If there is no action use the default on if (is_null($lastAction)) { - $lastAction = $this->getConfigInstance()->readConfig('login_default_action'); + $lastAction = $this->getConfigInstance()->getConfigEntry('login_default_action'); } // END - if // Get a critieria instance @@ -140,22 +145,66 @@ class ShipSimuMember extends ShipSimuBaseUser implements ManageableMember { $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_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); + // Set wrapper class name + $updateInstance->setWrapperConfigEntry('user_db_wrapper_class'); + // Remember the update in database result $this->getResultInstance()->add2UpdateQueue($updateInstance); } + /** + * Books the given 'amount' in the request instance on the users 'points + * account' + * + * @param $requestInstance An instance of a Requestable class + * @return void + */ + public function bookAmountDirectly (Requestable $requestInstance) { + // Init points instance + $pointsInstance = null; + + try { + // Get the points class from registry + $pointsInstance = Registry::getRegistry()->getInstance('points'); + } catch (NullPointerException $e) { + // Instance not found in registry + // @TODO We should log this later + } + + // Is the points instance null? + if (is_null($pointsInstance)) { + // Then get a new one + $pointsInstance = ObjectFactory::createObjectByConfiguredName('user_points_class', array($this)); + + // And store it in registry + Registry::getRegistry()->addInstance('points', $pointsInstance); + } // END - if + + // Get the amount + $amount = $requestInstance->getRequestElement('amount'); + + // Call the method for booking points + $pointsInstance->bookPointsDirectly($amount); + } + /** * Flushs all pending updates to the database layer * * @return void */ public function flushPendingUpdates () { + // Is the object valid? + if (!$this->getResultInstance() instanceof SearchableResult) { + // Abort here + return; + } // END - if + // Do we have data to update? if ($this->getResultInstance()->ifDataNeedsFlush()) { // Get a database wrapper