From 7a44bb20ca579fb79bba71d65f5f7a834665f80f Mon Sep 17 00:00:00 2001
From: =?utf8?q?Roland=20H=C3=A4der?= <roland@mxchange.org>
Date: Sun, 21 Dec 2008 04:13:06 +0000
Subject: [PATCH] Refill page now books points (unfinished, need redirect!)

---
 .gitattributes                                |  4 ++-
 application/ship-simu/config.php              |  7 ++--
 .../interfaces/class_BookableAccount.php      | 36 +++++++++++++++++++
 .../web/class_WebShipsimuRefillCommand.php    |  8 ++++-
 .../main/filter/book/refill/.htaccess         |  1 +
 ...s_RefillRequestCurrencyTestBookFilter.php} | 17 ++++++---
 .../main/user/class_ShipSimuBaseUser.php      |  2 +-
 .../user/extended/class_ShipSimuMember.php    | 32 ++++++++++++++++-
 8 files changed, 96 insertions(+), 11 deletions(-)
 create mode 100644 application/ship-simu/interfaces/class_BookableAccount.php
 create mode 100644 application/ship-simu/main/filter/book/refill/.htaccess
 rename application/ship-simu/main/filter/book/{class_RefillRequestCurrencyBookFilter.php => refill/class_RefillRequestCurrencyTestBookFilter.php} (70%)

diff --git a/.gitattributes b/.gitattributes
index 8ab3108..5d5dff6 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -51,6 +51,7 @@ application/ship-simu/exceptions/class_UnsupportedLimitationPartException.php -t
 application/ship-simu/exceptions/class_WrongGenderSpecifiedException.php -text
 application/ship-simu/init.php -text
 application/ship-simu/interfaces/.htaccess -text
+application/ship-simu/interfaces/class_BookableAccount.php -text
 application/ship-simu/interfaces/class_ConstructableShip.php -text
 application/ship-simu/interfaces/class_ConstructableShipPart.php -text
 application/ship-simu/interfaces/class_ContractPartner.php -text
@@ -117,7 +118,8 @@ application/ship-simu/main/factories/.htaccess -text
 application/ship-simu/main/factories/class_ShipSimuWebNewsFactory.php -text
 application/ship-simu/main/filter/.htaccess -text
 application/ship-simu/main/filter/book/.htaccess -text
-application/ship-simu/main/filter/book/class_RefillRequestCurrencyBookFilter.php -text
+application/ship-simu/main/filter/book/refill/.htaccess -text
+application/ship-simu/main/filter/book/refill/class_RefillRequestCurrencyTestBookFilter.php -text
 application/ship-simu/main/filter/class_ -text
 application/ship-simu/main/filter/class_BaseShipSimuFilter.php -text
 application/ship-simu/main/filter/government/.htaccess -text
diff --git a/application/ship-simu/config.php b/application/ship-simu/config.php
index 3a33a65..00973d7 100644
--- a/application/ship-simu/config.php
+++ b/application/ship-simu/config.php
@@ -209,7 +209,7 @@ $cfg->setConfigEntry('birthday_profile_verifier_filter', "BirthdayVerifierFilter
 $cfg->setConfigEntry('refill_page_filter', "RefillPageFilter");
 
 // CFG: REFILL-REQUEST-CURRENCY-BOOK-FILTER
-$cfg->setConfigEntry('refill_request_currency_book_filter', "RefillRequestCurrencyBookFilter");
+$cfg->setConfigEntry('refill_request_currency_test_book_filter', "RefillRequestCurrencyTestBookFilter");
 
 // CFG: PAYMENT-DISCOVERY-FILTER
 $cfg->setConfigEntry('payment_discovery_filter', "PaymentDiscoveryFilter");
@@ -362,7 +362,7 @@ $cfg->setConfigEntry('found_new_company_action_points', 1000000);
 $cfg->setConfigEntry('write_applications_action_points', 10000);
 
 // CFG: USER-POINTS-CLASS
-$cfg->setConfigEntry('user_ppints_class', "UserPoints");
+$cfg->setConfigEntry('user_points_class', "UserPoints");
 
 // CFG: GOVERNMENT-CLASS
 $cfg->setConfigEntry('government_class', "SimplifiedGovernment");
@@ -394,5 +394,8 @@ $cfg->setConfigEntry('web_link_helper', "WebLinkHelper");
 // CFG: WEB-CMD-GOVERNMENT-FAILED-RESOLVER-CLASS
 $cfg->setConfigEntry('web_cmd_government_failed_resolver_class', "WebGovernmentFailedCommandResolver");
 
+// CFG: REFILL-REQUEST-CURRENCY-PAYMENT-TYPE
+$cfg->setConfigEntry('refill_request_currency_payment_type', "test");
+
 // [EOF]
 ?>
diff --git a/application/ship-simu/interfaces/class_BookableAccount.php b/application/ship-simu/interfaces/class_BookableAccount.php
new file mode 100644
index 0000000..c8733bf
--- /dev/null
+++ b/application/ship-simu/interfaces/class_BookableAccount.php
@@ -0,0 +1,36 @@
+<?php
+/**
+ * An interface for bookable user accounts
+ *
+ * @author		Roland Haeder <webmaster@ship-simu.org>
+ * @version		0.0.0
+ * @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
+ *
+ * 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
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+interface BookableAccount extends FrameworkInterface {
+	/**
+	 * Books the given 'amount' in the request instance on the users "points
+	 * account"
+	 *
+	 * @param	$requestInstance	An instance of a Requestable class
+	 * @return	void
+	 */
+	function bookAmountDirectly (Requestable $requestInstance);
+}
+
+// [EOF]
+?>
diff --git a/application/ship-simu/main/commands/web/class_WebShipsimuRefillCommand.php b/application/ship-simu/main/commands/web/class_WebShipsimuRefillCommand.php
index fb7bd40..fa7aff5 100644
--- a/application/ship-simu/main/commands/web/class_WebShipsimuRefillCommand.php
+++ b/application/ship-simu/main/commands/web/class_WebShipsimuRefillCommand.php
@@ -91,8 +91,14 @@ class WebShipsimuRefillCommand extends BaseCommand implements Commandable {
 		// Verify refill request
 		$controllerInstance->addPreFilter(ObjectFactory::createObjectByConfiguredName('refill_request_validator_filter'));
 
+		// Construct config entry for wether automatic payment from API or waiting for approval
+		$paymentTypeConfig = sprintf("refill_request_%s_payment_type", $requestInstance->getRequestElement('type'));
+
 		// Prepare a filter based on the requested type we shall refill
-		$filterName = sprintf("refill_request_%s_book_filter", $requestInstance->getRequestElement('type'));
+		$filterName = sprintf("refill_request_%s_%s_book_filter",
+			$requestInstance->getRequestElement('type'),
+			$this->getConfigInstance()->readConfig($paymentTypeConfig)
+		);
 
 		// Now, try to load that filter
 		$controllerInstance->addPostFilter(ObjectFactory::createObjectByConfiguredName($filterName));
diff --git a/application/ship-simu/main/filter/book/refill/.htaccess b/application/ship-simu/main/filter/book/refill/.htaccess
new file mode 100644
index 0000000..3a42882
--- /dev/null
+++ b/application/ship-simu/main/filter/book/refill/.htaccess
@@ -0,0 +1 @@
+Deny from all
diff --git a/application/ship-simu/main/filter/book/class_RefillRequestCurrencyBookFilter.php b/application/ship-simu/main/filter/book/refill/class_RefillRequestCurrencyTestBookFilter.php
similarity index 70%
rename from application/ship-simu/main/filter/book/class_RefillRequestCurrencyBookFilter.php
rename to application/ship-simu/main/filter/book/refill/class_RefillRequestCurrencyTestBookFilter.php
index 7101a82..f910f41 100644
--- a/application/ship-simu/main/filter/book/class_RefillRequestCurrencyBookFilter.php
+++ b/application/ship-simu/main/filter/book/refill/class_RefillRequestCurrencyTestBookFilter.php
@@ -1,6 +1,9 @@
 <?php
 /**
- * A filter for currency booking in refill requests
+ * A filter for currency booking in refill requests. This filter shall "book" the
+ * requested amount of points directly on the users account. This filter is for
+ * testing/developing only and was needed for the first developement stage of the
+ * game. You should not really use this filter on your "live-system".
  *
  * @author		Roland Haeder <webmaster@ship-simu.org>
  * @version		0.0.0
@@ -21,7 +24,7 @@
  * You should have received a copy of the GNU General Public License
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
  */
-class RefillRequestCurrencyBookFilter extends BaseShipSimuFilter implements Filterable {
+class RefillRequestCurrencyTestBookFilter extends BaseShipSimuFilter implements Filterable {
 	/**
 	 * Protected constructor
 	 *
@@ -37,9 +40,9 @@ class RefillRequestCurrencyBookFilter extends BaseShipSimuFilter implements Filt
 	 *
 	 * @return	$filterInstance		An instance of this filter class
 	 */
-	public final static function createRefillRequestCurrencyBookFilter () {
+	public final static function createRefillRequestCurrencyTestBookFilter () {
 		// Get a new instance
-		$filterInstance = new RefillRequestCurrencyBookFilter();
+		$filterInstance = new RefillRequestCurrencyTestBookFilter();
 
 		// Return the instance
 		return $filterInstance;
@@ -57,7 +60,11 @@ class RefillRequestCurrencyBookFilter extends BaseShipSimuFilter implements Filt
 		// Execute the parent execute method
 		parent::execute($requestInstance, $responseInstance);
 
-		$this->partialStub("Add code here for your specific filter.");
+		// Get the user instance from registry
+		$userInstance = Registry::getRegistry()->getInstance('user');
+
+		// Run the update
+		$userInstance->bookAmountDirectly($requestInstance);
 	}
 }
 
diff --git a/application/ship-simu/main/user/class_ShipSimuBaseUser.php b/application/ship-simu/main/user/class_ShipSimuBaseUser.php
index e12dfdd..87032df 100644
--- a/application/ship-simu/main/user/class_ShipSimuBaseUser.php
+++ b/application/ship-simu/main/user/class_ShipSimuBaseUser.php
@@ -76,7 +76,7 @@ class ShipSimuBaseUser extends BaseUser implements Registerable, Updateable {
 		// Is there an instance?
 		if (is_null($pointsInstance)) {
 			// Then create one
-			$pointsInstance = ObjectFactory::createObjectByConfiguredName('user_ppints_class', array($this));
+			$pointsInstance = ObjectFactory::createObjectByConfiguredName('user_points_class', array($this));
 
 			// And store it in registry
 			Registry::getRegistry()->addInstance('points', $pointsInstance);
diff --git a/application/ship-simu/main/user/extended/class_ShipSimuMember.php b/application/ship-simu/main/user/extended/class_ShipSimuMember.php
index 98e7a2a..ea8132a 100644
--- a/application/ship-simu/main/user/extended/class_ShipSimuMember.php
+++ b/application/ship-simu/main/user/extended/class_ShipSimuMember.php
@@ -21,7 +21,7 @@
  * You should have received a copy of the GNU General Public License
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
  */
-class ShipSimuMember extends ShipSimuBaseUser implements ManageableMember {
+class ShipSimuMember extends ShipSimuBaseUser implements ManageableMember, BookableAccount {
 	/**
 	 * Protected constructor
 	 *
@@ -151,10 +151,40 @@ class ShipSimuMember extends ShipSimuBaseUser implements ManageableMember {
 		// 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) {
+		// Get the points class from registry
+		$pointsInstance = Registry::getRegistry()->getInstance('points');
+
+		// 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
 	 *
-- 
2.39.5