|
|
- <?php
- if(!defined('QUINTACMS') ) die("No quinta.");
-
- if (!defined("PAYMENTMODULE.CLASS.PHP")){
- define("PAYMENTMODULE.CLASS.PHP",1);
-
- /**
- * Class PaymentModule - a module to manage PaymentMethods
- *
- * This class iterates through the list of PaymentMethods in the payment_methods table
- * and for each that is flagged active it creates a QRadioButton to be rendered in the template.
- * When the button is clicked, it sets objSelectedMethod to the selected payment method.
- * When the 'Purchase' button is clicked the btn_Purchase function is called; this calls three
- * functions that a PaymentAction is required to implement:
- * - PreProcess: perform any actions to set up the transaction
- * - Process: perform the actual transaction, ie. connect to server and make a request in most cases.
- * - PostProcess: perform any validation checks and update the order_status_history table in most cases.
- *
- *
- *@author Erik Winn <sidewalksoftware@gmail.com>
- *
- *@version 0.3
- *
- *@package Quinta
- * @subpackage Modules
- */
- class PaymentModule extends QPanel{
- /**
- *@var CheckOutModule a reference to the control block - expected to be CheckOutModule
- */
- protected $objControlBlock;
- /**
- *@var Order a reference to the current order
- */
- protected $objOrder;
- /**
- *@var Address a reference to the current order
- */
- protected $objAddress;
- /**
- *@var array PaymentMethods flagged active in database
- */
- protected $aryPaymentMethods;
- /**
- *@var PaymentMethod a reference to the method chosen by the user (or the default)
- */
- protected $objSelectedMethod;
- /**
- *@var PaymentAction the action for the selected payment method
- */
- protected $objPaymentAction=null;
- /**
- *@var string strDefaultServiceProvider - the default payment gateway
- */
- protected $strDefaultServiceProvider = DEFAULT_PAYMENT_PROVIDER;
- /**
- *@var string strDefaultServiceType - the default payment type for the default service
- */
- protected $strDefaultServiceType = DEFAULT_PAYMENT_SERVICE;
-
- /**
- *@var array aryYears - years for CC expiration selection
- */
- protected $aryYears = array(
- '2008',
- '2009',
- '2010',
- '2011',
- '2012',
- '2013',
- '2014',
- '2015',
- '2016',
- '2017',
- '2018',
- );
- /**
- *@var array aryMonths - months for CC expiration selection
- */
- protected $aryMonths = array(
- '01',
- '02',
- '03',
- '04',
- '05',
- '06',
- '07',
- '08',
- '09',
- '10',
- '11',
- '12',
- );
-
- protected $strErrors;
- protected $fltPaymentTotal;
- protected $blnHasActiveMethods = true;
- /**
- *@var bool blnShowCCInput - if true display Credit card input fields
- */
- protected $blnShowCCInput = false;
- /**
- *@var integer intPreviousAddressId - the id of the address before a selection signal.
- */
- protected $intPreviousAddressId;
-
- /// Display objects ..
- /**
- *@var array PaymentMethodControllers for the selection of PaymentMethods
- */
- public $aryPaymentMethodControllers;
- /**
- *@var QButton Button to complete the purchase - triggers a payment action
- */
- public $btnPurchase;
- /**
- * @todo subclass for validation ..QCCTextBox?
- *@var QTextBox
- */
- public $txtCCNumber;
- /**
- *@var QListBox
- */
- public $lstCCExpirationYear;
- /**
- *@var QListBox
- */
- public $lstCCExpirationMonth;
- /**
- * @todo implement CCV Check ..
- *@var QTextBox
- */
- public $txtCCVNumber;
- /**
- *@var AddressSelectionModule objAddressSelectionModule - handles selecting the billing address
- */
- public $objAddressSelectionModule;
-
- /**
- * Module constructor
- *@param ContentBlock - parent controller object.
- *@param Order - the order for which we are paying.
- */
- public function __construct(QPanel $objControlBlock, $objOrder ){
-
- try {
- parent::__construct($objControlBlock);
- } catch (QCallerException $objExc) {
- $objExc->IncrementOffset();
- throw $objExc;
- }
- $this->objOrder =& $objOrder;
- $this->objControlBlock =& $objControlBlock;
-
- $this->AutoRenderChildren = true;
-
- $this->strTemplate = __QUINTA_CORE_VIEWS__ . '/PaymentModule.tpl.php';
-
- $this->aryPaymentMethods = PaymentMethod::QueryArray(
- QQ::Equal(QQN::PaymentMethod()->Active, true),
- QQ::OrderBy(QQN::PaymentMethod()->SortOrder, false)
- );
-
- if(!empty( $this->aryPaymentMethods )){
- $this->objAddressSelectionModule = new AddressSelectionModule($this,
- 'SelectAddress',
- $this->objOrder->BillingAddressId
- );
- $this->objAddress = $this->objAddressSelectionModule->Address;
- $this->createInputOptions();
- }else
- $this->blnHasActiveMethods = false;
- }
- /**
- *This creates the method views for the available payment methods and the input fields for
- * credit card numbers (if needed)
- */
- protected function createInputOptions(){
- $this->blnShowCCInput = false;
-
- foreach($this->aryPaymentMethods as &$objPaymentMethod){
- $objPaymentMethodController = new PaymentMethodController($this, $objPaymentMethod);
- if( $objPaymentMethod->ServiceProvider == $this->DefaultServiceProvider
- && $objPaymentMethod->ServiceType == $this->DefaultServiceType )
- {
- $objPaymentMethodController->Checked = true;
- $this->objSelectedMethod =& $objPaymentMethod;
- $this->objOrder->PaymentMethodId = $objPaymentMethod->Id;
- }
- if( $objPaymentMethod->RequiresCcNumber )
- $this->blnShowCCInput = true;
- $this->aryPaymentMethodControllers[] = $objPaymentMethodController;
- }
- //credit card input fields
- if($this->blnShowCCInput){
- $this->txtCCNumber = new QTextBox($this);
- $this->txtCCNumber->CssClass = 'CCNumber';
- $this->txtCCNumber->Required = true;
- $this->txtCCNumber->Name = Quinta::Translate('Card Number') . ': ';
- $this->txtCCNumber->Text = '';
- $this->txtCCVNumber = new QTextBox($this);
- $this->txtCCVNumber->CssClass = 'CCVNumber';
- $this->txtCCVNumber->Required = true;
- $this->txtCCVNumber->Name = Quinta::Translate('CCV Number') . ': ';
-
- $this->lstCCExpirationYear = new QListBox($this);
- foreach($this->aryYears as $strYear)
- $this->lstCCExpirationYear->AddItem($strYear, $strYear);
- $this->lstCCExpirationYear->Required = true;
-
- $this->lstCCExpirationMonth = new QListBox($this);
- foreach($this->aryMonths as $strMonth)
- $this->lstCCExpirationMonth->AddItem($strMonth,$strMonth);
- $this->lstCCExpirationMonth->Required = true;
- }
- }
- /**
- * Sets the selected payment method, called when the user selects/changes a payment
- * method radio button.
- */
- public function SelectMethod($intMethodId){
- foreach($this->aryPaymentMethods as &$objMethod ){
- if($intMethodId == $objMethod->Id){
- $this->objSelectedMethod =& $objMethod;
- $this->objOrder->PaymentMethodId = $objMethod->Id;
- break;
- }
- }
- }
-
- public function SelectAddress($intAddressId, $strParameter=null){
- if( is_numeric($intAddressId) ){
- $this->intPreviousAddressId = $intAddressId;
- $this->objOrder->SetBillingAddress($this->objAddressSelectionModule->Address);
- $this->objAddress = $this->objAddressSelectionModule->Address;
- }
- $this->objAddressSelectionModule->RemoveChildControls(true);
- $this->RemoveChildControl($this->objAddressSelectionModule->ControlId, false);
-
- if( 'Edit' == $strParameter )
- $this->objAddressSelectionModule = new AddressSelectionModule($this, 'SelectAddress', $intAddressId, true);
- elseif( 'New' == $strParameter )
- $this->objAddressSelectionModule = new AddressSelectionModule($this, 'SelectAddress', null, true);
- else {//Note: includes Save and Cancel ..
- if($intAddressId)
- $this->objAddressSelectionModule = new AddressSelectionModule($this, 'SelectAddress', $intAddressId);
- else
- $this->objAddressSelectionModule = new AddressSelectionModule($this, 'SelectAddress', $this->intPreviousAddressId);
- }
- $this->objAddressSelectionModule->Visible = true;
- $this->AddChildControl($this->objAddressSelectionModule);
- }
-
- public function Validate(){ return true;}
-
- public function __get($strName){
- switch ($strName){
- case 'SelectedMethod':
- return $this->objSelectedMethod ;
- case 'Address':
- return $this->objAddress ;
- case 'HasActiveMethods':
- return $this->blnHasActiveMethods ;
- case 'ShowCCInput':
- return $this->blnShowCCInput ;
- case 'DefaultServiceProvider':
- return $this->strDefaultServiceProvider ;
- case 'DefaultServiceType':
- return $this->strDefaultServiceType ;
- case 'Errors':
- return $this->strErrors ;
- case 'Order':
- return $this->objOrder ;
- default:
- try {
- return parent::__get($strName);
- } catch (QCallerException $objExc) {
- $objExc->IncrementOffset();
- throw $objExc;
- }
- }
- }
- public function __set($strName, $mixValue){
- switch ($strName){
- case 'SelectedMethod':
- try {
- return ($this->objSelectedMethod = QType::Cast($mixValue, 'PaymentMethod' ));
- } catch (QInvalidCastException $objExc) {
- $objExc->IncrementOffset();
- throw $objExc;
- }
- case 'DefaultServiceProvider':
- try {
- return ($this->strDefaultServiceProvider = QType::Cast($mixValue, Qtype::String ));
- } catch (QInvalidCastException $objExc) {
- $objExc->IncrementOffset();
- throw $objExc;
- }
- case 'DefaultServiceType':
- try {
- return ($this->strDefaultServiceType = QType::Cast($mixValue, Qtype::String ));
- } catch (QInvalidCastException $objExc) {
- $objExc->IncrementOffset();
- throw $objExc;
- }
-
- default:
- try {
- return (parent::__set($strName, $mixValue));
- } catch (QCallerException $objExc) {
- $objExc->IncrementOffset();
- throw $objExc;
- }
- }
- }
-
- }//end class
- }//end define
- ?>
|