Payment introduced, minor rewrites
[shipsimu.git] / application / ship-simu / main / registration / class_ShipSimuRegistration.php
index dd5ef73d611210d964ac2573b9e053b4b979d5f8..1ad97313716eb84008af5695ac96c2f0939e7c10 100644 (file)
@@ -4,7 +4,7 @@
  *
  * @author             Roland Haeder <webmaster@ship-simu.org>
  * @version            0.0.0
- * @copyright  Copyright(c) 2007, 2008 Roland Haeder, this is free software
+ * @copyright  Copyright (c) 2007, 2008 Roland Haeder, this is free software
  * @license            GNU GPL 3.0 or any newer version
  * @link               http://www.ship-simu.org
  *
  */
 class ShipSimuRegistration extends BaseRegistration {
        /**
-        * Private constructor
+        * Hashed password
+        */
+       private $hashedPassword = "";
+
+       /**
+        * Elements for criteria
+        */
+       private $criteriaElements = array(
+               'username',
+               'pass_hash',
+               'email' => 'email1',
+               'surname',
+               'family',
+               'street',
+               'zip',
+               'city',
+               'icq',
+               'jabber',
+               'yahoo',
+               'aol',
+               'msn'
+       );
+
+       /**
+        * Protected constructor
         *
         * @return      void
         */
        protected function __construct () {
                // Call parent constructor
                parent::__construct(__CLASS__);
-
-               // Set part description
-               $this->setObjectDescription("Ship-Simu registration class");
-
-               // Create unique ID number
-               $this->createUniqueID();
        }
 
        /**
@@ -47,19 +65,35 @@ class ShipSimuRegistration extends BaseRegistration {
                // Get a new instance
                $registrationInstance = new ShipSimuRegistration();
 
+               // Initialize the filter chains
+               $registrationInstance->initFilterChains();
+
                // And return it
                return $registrationInstance;
        }
 
        /**
-        * Encrypt the given request key or throws an exception if the key was not
+        * Encrypt the given request key or throw an exception if the key was not
         * found in the request
         *
         * @param       $requestKey             Key in request class
         * @return      void
         */
        public function encryptPassword ($requestKey) {
-               $this->partialStub(sprintf("requestKey=%s", $requestKey));
+               // Check if the password is found in the request
+               if ($this->getRequestInstance()->isRequestElementSet($requestKey)) {
+                       // So encrypt the password and store it for later usage in
+                       // the request:
+
+                       // 1.: Get the plain password
+                       $plainPassword = $this->getRequestInstance()->getRequestElement($requestKey);
+
+                       // 2. Get a crypto helper and hash the password
+                       $this->hashedPassword = ObjectFactory::createObjectByConfiguredName('crypto_class')->hashString($plainPassword);
+
+                       // 3. Store the hash back in the request
+                       $this->getRequestInstance()->setRequestElement('pass_hash', $this->hashedPassword);
+               }
        }
 
        /**
@@ -69,7 +103,8 @@ class ShipSimuRegistration extends BaseRegistration {
         * @return      void
         */
        public function doPreRegistration () {
-               $this->partialStub();
+               // First run all pre filters
+               $this->executePreFilters();
        }
 
        /**
@@ -79,7 +114,11 @@ class ShipSimuRegistration extends BaseRegistration {
         * @return      void
         */
        public function registerNewUser () {
-               $this->partialStub();
+               // Get a user database wrapper
+               $wrapperInstance = ObjectFactory::createObjectByConfiguredName('user_db_wrapper_class');
+
+               // Use this instance to insert the whole registration instance
+               $wrapperInstance->insertRegistrationObject($this);
        }
 
        /**
@@ -88,7 +127,8 @@ class ShipSimuRegistration extends BaseRegistration {
         * @return      void
         */
        public function doPostRegistration () {
-               $this->partialStub();
+               // First run all post filters
+               $this->executePostFilters();
        }
 
        /**
@@ -99,7 +139,55 @@ class ShipSimuRegistration extends BaseRegistration {
         * @return      void
         */
        public function doPostAction () {
-               $this->partialStub();
+               // Get an action instance from our factory
+               $actionInstance = ObjectFactory::createObjectByConfiguredName('post_registration_class');
+
+               // Execute the action
+               $actionInstance->execute($this->getRequestInstance(), $this->getResponseInstance());
+       }
+
+       /**
+        * Adds registration elements to a given dataset instance
+        *
+        * @param       $criteriaInstance       An instance of a storeable criteria
+        * @return      void
+        */
+       public function addElementsToDataSet (StoreableCriteria $criteriaInstance) {
+               // Default is unconfirmed!
+               $configEntry = 'user_status_unconfirmed';
+
+               // Is the confirmation process entirely disabled?
+               if ($this->getConfigInstance()->readConfig('confirm_email_enabled') === "N") {
+                       // No confirmation of email needed
+                       $configEntry = 'user_status_confirmed';
+               } // END - if
+
+               // Add a lot elements to the dataset criteria
+               foreach ($this->criteriaElements as $alias => $element) {
+                       // Do we have an alias?
+                       if (is_string($alias)) {
+                               // Yes, so use it
+                               $criteriaInstance->addCriteria($alias, $this->getRequestInstance()->getRequestElement($element));
+                       } else {
+                               // No, default entry
+                               $criteriaInstance->addCriteria($element, $this->getRequestInstance()->getRequestElement($element));
+                       }
+
+                       // Is this a guest account?
+                       if ((($element == "username") || ($alias == "username")) && ($this->getRequestInstance()->getRequestElement($element) == $this->getConfigInstance()->readConfig('guest_login_user'))) {
+                               // Yes, then set the config entry to guest status
+                               $configEntry = 'user_status_guest';
+                       } // END - if
+               } // END - foreach
+
+               // Mark the username as unique key
+               $criteriaInstance->setUniqueKey(UserDatabaseWrapper::DB_COLUMN_USERNAME);
+
+               // Add account status as configured
+               $criteriaInstance->addConfiguredCriteria(UserDatabaseWrapper::DB_COLUMN_USER_STATUS, $configEntry);
+
+               // Include registration timestamp
+               $criteriaInstance->addCriteria("registered", date("Y-m-d H:i:s", time()));
        }
 }