From 6fd01888b51f210394c4b7bb5e0ac2a28efb0c99 Mon Sep 17 00:00:00 2001 From: Roland Haeder Date: Sat, 18 Apr 2015 12:15:44 +0200 Subject: [PATCH 1/1] This is more flexible so better take it. MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Roland Häder --- .../database/class_DatabaseWrapperFactory.php | 20 ++++---- .../factories/login/class_LoginFactory.php | 49 +++++++++++-------- .../class_UserUnconfirmedVerifierFilter.php | 5 +- inc/classes/main/user/guest/class_Guest.php | 26 ++++++++++ 4 files changed, 66 insertions(+), 34 deletions(-) diff --git a/inc/classes/main/factories/database/class_DatabaseWrapperFactory.php b/inc/classes/main/factories/database/class_DatabaseWrapperFactory.php index f7749284..5ecdea49 100644 --- a/inc/classes/main/factories/database/class_DatabaseWrapperFactory.php +++ b/inc/classes/main/factories/database/class_DatabaseWrapperFactory.php @@ -22,6 +22,16 @@ * along with this program. If not, see . */ class DatabaseWrapperFactory extends ObjectFactory { + /** + * Protected constructor + * + * @return void + */ + protected function __construct () { + // Call parent constructor + parent::__construct(__CLASS__); + } + /** * Returns a singleton socket registry instance. If an instance is found in * the registry it will be returned, else a new instance is created and @@ -48,16 +58,6 @@ class DatabaseWrapperFactory extends ObjectFactory { // Return the instance return $wrapperInstance; } - - /** - * Protected constructor - * - * @return void - */ - protected function __construct () { - // Call parent constructor - parent::__construct(__CLASS__); - } } // [EOF] diff --git a/inc/classes/main/factories/login/class_LoginFactory.php b/inc/classes/main/factories/login/class_LoginFactory.php index 1bc38692..01b042cc 100644 --- a/inc/classes/main/factories/login/class_LoginFactory.php +++ b/inc/classes/main/factories/login/class_LoginFactory.php @@ -22,43 +22,52 @@ * along with this program. If not, see . */ class LoginFactory extends ObjectFactory { + /** + * Protected constructor + * + * @return void + */ + protected function __construct () { + // Call parent constructor + parent::__construct(__CLASS__); + } + /** * Returns a singleton login instance for given request instance. * * @param $requestInstance An instance of a Requestable class * @return $wrapperInstance A database wrapper instance */ - public static final function createWrapperByConfiguredName (Requestable $requestInstance) { - // - die('requestInstance=
'.print_r($requestInstance, TRUE).'
'); - + public static final function createLoginObjectByRequest (Requestable $requestInstance) { // Get registry instance $registryInstance = Registry::getRegistry(); // Do we have an instance in the registry? - if ($registryInstance->instanceExists($wrapperName)) { + if ($registryInstance->instanceExists('login_helper')) { // Then use this instance - $wrapperInstance = $registryInstance->getInstance($wrapperName); + $userInstance = $registryInstance->getInstance('login_helper'); } else { - // Get the registry instance - $wrapperInstance = self::createObjectByConfiguredName($wrapperName); + // Probe on member instance + try { + // Get class name + $className = FrameworkConfiguration::getSelfInstance()->getConfigEntry('user_class'); + + // Try to instance it + $userInstance = call_user_func_array(array($className, 'createMemberByRequest'), array($requestInstance)); + } catch (UnexpectedGuestAccountException $e) { + // Then try it with guest account + $className = FrameworkConfiguration::getSelfInstance()->getConfigEntry('guest_class'); + + // Try to instance it + $userInstance = call_user_func_array(array($className, 'createGuestByRequest'), array($requestInstance)); + } // Set the instance in registry for further use - $registryInstance->addInstance($wrapperName, $wrapperInstance); + $registryInstance->addInstance('login_helper', $userInstance); } // Return the instance - return $wrapperInstance; - } - - /** - * Protected constructor - * - * @return void - */ - protected function __construct () { - // Call parent constructor - parent::__construct(__CLASS__); + return $userInstance; } } diff --git a/inc/classes/main/filter/verifier/class_UserUnconfirmedVerifierFilter.php b/inc/classes/main/filter/verifier/class_UserUnconfirmedVerifierFilter.php index 2bdaf07c..c8e6f427 100644 --- a/inc/classes/main/filter/verifier/class_UserUnconfirmedVerifierFilter.php +++ b/inc/classes/main/filter/verifier/class_UserUnconfirmedVerifierFilter.php @@ -53,11 +53,8 @@ class UserUnconfirmedVerifierFilter extends BaseFilter implements Filterable { * @return void */ public function execute (Requestable $requestInstance, Responseable $responseInstance) { - // Get member class - $userClass = $this->getConfigInstance()->getConfigEntry('user_class'); - // Get a user instance for comparison - $userInstance = call_user_func_array(array($userClass, 'createMemberByRequest'), array($requestInstance)); + $userInstance = LoginFactory::createLoginObjectByRequest($requestInstance); // Is the email address valid? if ($userInstance->ifEmailAddressExists() === FALSE) { diff --git a/inc/classes/main/user/guest/class_Guest.php b/inc/classes/main/user/guest/class_Guest.php index e2911cf3..6fdefc7f 100644 --- a/inc/classes/main/user/guest/class_Guest.php +++ b/inc/classes/main/user/guest/class_Guest.php @@ -38,6 +38,32 @@ class Guest extends BaseUser implements ManageableGuest, Registerable { parent::__construct(__CLASS__); } + /** + * Creates a user by a given request instance + * + * @param $requestInstance An instance of a Requestable class + * @return $userInstance An instance of this user class + * @todo Add more ways over creating user classes + */ + public static final function createGuestByRequest (Requestable $requestInstance) { + // Determine if by email or username + if (!is_null($requestInstance->getRequestElement('username'))) { + // Username supplied + $userInstance = self::createGuestByUserName($requestInstance->getRequestElement('username')); + } elseif (!is_null($requestInstance->getRequestElement('email'))) { + // Email supplied + $userInstance = self::createGuestByEmail($requestInstance->getRequestElement('email')); + } else { + // Unsupported mode + $userInstance = new Guest(); + $userInstance->debugBackTrace('More ways of creating user classes are needed here.'); + exit(); + } + + // Return the prepared instance + return $userInstance; + } + /** * Creates an instance of this user class by a provided username. This * factory method will check if username is already taken and if not so it -- 2.30.2