* * * $Id: CheckOutEditModule.class.php 286 2008-10-10 23:33:36Z erikwinn $ *@version 0.1 * *@copyright (C) 2008 by Erik Winn *@license GPL v.2 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 2 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, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA * *@package Quasi * @subpackage Modules */ class CheckOutEditModule extends QPanel { /** * ContentBlock contains the data and main functions for the check out module. * @var CheckOutModule - both the DOM parent object and the control block passed to submodules */ protected $objControlBlock; protected $objShippingAddress; protected $objBillingAddress; /** * This module shows a panel containing the items on the order with modifiable quantity fields * and a remove button. * @var CheckOutItemListModule - lists order items */ public $objCheckOutItemListModule; /** * @var CheckOutTotalsView - module to display shipping, handling and total price for order */ public $objCheckOutTotalsView; /** * This module shows a panel containing the address for the order * @var AddressView */ public $objShippingAddressView; public $objBillingAddressView; /** * This module shows a panel for editting the addresses for the order. It is called with a parameter * to determine which of the addresses to edit (Billing | Shipping) * @var AddressView */ public $objAddressEditPanel; /** * @var QButton control buttons to edit the address fields */ public $btnChangeShipping; public $btnChangeBilling; /** * This is here only because technically PayPal requires that you have two points of entry into their * scheme .. one is supposed to be on the "shopping cart page" - that is a pain to set up and putting * it here makes more sense as we want to offer shipping options. Besides, I don't like the idea * of sending the customer to approve a payment amount and _then_ adding shipping - too sleazy * for my troublesome sense of ethics ... * @var QImageButton button to show on the first panel to support PayPal Express Checkout */ public $btnPayPalExpressButton; /** * Module constructor * NOTE: This module ignores the required extra parameters .. *@param ContentBlock - parent controller object. *@param mixed - extra parameters, ignored */ public function __construct( CheckOutModule $objControlBlock, $mixParameters=null) { try { parent::__construct($objControlBlock); } catch (QCallerException $objExc) { $objExc->IncrementOffset(); throw $objExc; } $this->objControlBlock =& $objControlBlock; $this->objShippingAddress =& $this->objControlBlock->objShippingAddress; $this->objBillingAddress =& $this->objControlBlock->objBillingAddress; $this->strTemplate = __QUASI_CORE_TEMPLATES__ . '/CheckOutEditModule.tpl.php'; $this->objCheckOutItemListModule = new CheckOutItemListModule($this, $objControlBlock); $this->objCheckOutItemListModule->initItemList($objControlBlock->aryOrderItems); $this->objShippingAddressView = new AddressView($this, $this->objShippingAddress->Id, 'ShippingAddress: ', 'ShippingAddressView' ); $this->objBillingAddressView = new AddressView($this, $this->objBillingAddress->Id, 'BillingAddress: ', 'BillingAddressView' ); $this->objShippingAddressView->AutoRenderChildren = true; $this->objBillingAddressView->AutoRenderChildren = true; $this->objCheckOutTotalsView = new CheckOutTotalsView($this); // grab shipping charges from shipping module if possible.. if( $this->objControlBlock->ShippingModule instanceof ShippingModule && $this->objControlBlock->ShippingMethod instanceof ShippingMethod) $this->objCheckOutTotalsView->ShippingCharge = $this->objShippingModule->SelectedMethod->Rate; else $this->objCheckOutTotalsView->ShippingCharge = 0; /// @todo make handling charge configurable. $this->objCheckOutTotalsView->HandlingCharge = 10.0; $this->objCheckOutTotalsView->TotalItemsCharge = $this->objCheckOutItemListModule->ItemsTotalPrice; $this->objCheckOutTotalsView->RefreshTotal(); $this->btnChangeShipping = new QButton($this->objShippingAddressView); $this->btnChangeShipping->Text = Quasi::Translate('Change'); if(IndexPage::$blnAjaxOk) $this->btnChangeShipping->AddAction(new QClickEvent(), new QAjaxControlAction($this, 'btnChangeAddress_Click')); else $this->btnChangeShipping->AddAction(new QClickEvent(), new QServerControlAction($this, 'btnChangeAddress_Click')); $this->btnChangeShipping->ActionParameter = 'Shipping'; $this->btnChangeShipping->CausesValidation = $this; $this->btnChangeBilling = new QButton($this->objBillingAddressView); $this->btnChangeBilling->Text = Quasi::Translate('Change'); if(IndexPage::$blnAjaxOk) $this->btnChangeBilling->AddAction(new QClickEvent(), new QAjaxControlAction($this, 'btnChangeAddress_Click')); else $this->btnChangeBilling->AddAction(new QClickEvent(), new QServerControlAction($this, 'btnChangeAddress_Click')); $this->btnChangeBilling->ActionParameter = 'Billing'; $this->btnChangeBilling->CausesValidation = $this; } public function btnChangeAddress_Click($strFormId, $strControlId, $strParameters) { $aryParameters = explode(',',$strParameters); switch($aryParameters[0]) { case 'Billing': $this->ShowAddressEditPanel($this->objBillingAddress->Id); break; case 'Shipping': $this->ShowAddressEditPanel($this->objShippingAddress->Id); break; case 'New': $this->ShowAddressEditPanel(); break; default: throw new QCallerException('Unknown Address change - ' . $aryParameters[0] ); } } /** * Shows the panel to the selected shipping address, hiding all the others. */ public function ShowAddressEditPanel($intAddressId=null) { $this->objCheckOutItemListModule->Visible = false; $this->objShippingAddressView->Visible = false; $this->objBillingAddressView->Visible = false; $this->objControlBlock->btnContinue->Visible = false; $this->objControlBlock->ShippingModule->Visible = false; $this->objAddressEditPanel = new AccountAddressEditPanel($this, $this, 'CloseAddressEditPanel', $intAddressId ); //set a template that doesn't show the delete button .. $this->objAddressEditPanel->Template = __QUASI_CORE_TEMPLATES__ . '/CheckOutAddressEditPanel.tpl.php'; $this->objAddressEditPanel->Visible = true; } /** * Closes the address editting panel, updates the addresses and shows the CheckOutEditModule again. *@todo implement reloading the address data, for now its just a brute force kludge to update the page. */ public function CloseAddressEditPanel($blnUpdatesMade) { Quasi::Redirect(__QUASI_SUBDIRECTORY__ . '/index.php/CheckOut'); /* $this->objAddressEditPanel->Visible = false; // update the addresses $this->objShippingAddressView = new AddressView($this, $this->objShippingAddress->Id, 'ShippingAddress: ', 'ShippingAddressView' ); $this->objBillingAddressView = new AddressView($this, $this->objBillingAddress->Id, 'BillingAddress: ', 'BillingAddressView' ); $this->objShippingAddressView->Visible = true; $this->objBillingAddressView->Visible = true; $this->objCheckOutItemListModule->Visible = true; */ } /** * This Function is called when any input is sent - on failure the * fields are redrawn with optional error messages. */ public function Validate() { $blnToReturn = true; // validate input here return $blnToReturn; } public function __get($strName) { switch ($strName) { //Note: this (like all __get magic) returns a copy ..) case 'ItemListModule': return $this->objCheckOutItemListModule ; case 'ShoppingCart': return $this->objShoppingCart ; case 'ShippingAddress': return $this->objShippingAddress ; case 'BillingAddress': return $this->objBillingAddress ; case 'Account': return IndexPage::$objAccount ; case 'TotalItemsCharge': return $this->objCheckOutTotalsView->ShippingCharge ; case 'ShippingCharge': return $this->objCheckOutTotalsView->ShippingCharge ; case 'HandlingCharge': return $this->objCheckOutTotalsView->HandlingCharge ; default: try { return parent::__get($strName); } catch (QCallerException $objExc) { $objExc->IncrementOffset(); throw $objExc; } } } public function __set($strName, $mixValue) { switch ($strName) { case 'ShippingCharge': return ($this->objCheckOutTotalsView->ShippingCharge = $mixValue); case 'TotalItemsCharge': return ($this->objCheckOutTotalsView->TotalItemsCharge = $mixValue); default: try { return (parent::__set($strName, $mixValue)); } catch (QCallerException $objExc) { $objExc->IncrementOffset(); throw $objExc; } } } }//end class }//end define ?>