Source of file CheckoutUsersControllerExtension.php
Size: 8,091 Bytes - Last Modified: 2021-12-24T05:16:24+00:00
/var/www/docs.ssmods.com/process/src/code/extensions/CheckoutUsersControllerExtension.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259 | <?php /** * Extension for Users Account Controller that adds address management * interfaces * * @author i-lateral (http://www.i-lateral.com) * @package checkout */ class CheckoutUserAccountControllerExtension extends Extension { private static $allowed_actions = array( "addresses", "addaddress", "editaddress", "removeaddress", "AddressForm" ); /** * Display all addresses associated with the current user */ public function addresses() { return $this ->owner ->customise(array( "ClassName" => "AccountPage", "Title" => _t("Checkout.YourAddresses", "Your Addresses") ))->renderWith(array( "UserAccount_addresses", "Users", "Page" )); } /** * Display all addresses associated with the current user */ public function addaddress() { $form = $this->AddressForm(); $form ->Fields() ->dataFieldByName("OwnerID") ->setValue(Member::currentuserID()); return $this ->owner ->customise(array( "ClassName" => "AccountPage", "Title" => _t("Checkout.AddAddress", "Add Address"), "Form" => $form ))->renderWith(array( "UserAccount_addaddress", "Users", "Page" )); } /** * Display all addresses associated with the current user */ public function editaddress() { $member = Member::currentUser(); $id = $this->owner->request->param("ID"); $address = MemberAddress::get()->byID($id); if ($address && $address->canEdit($member)) { $form = $this->AddressForm(); $form->loadDataFrom($address); $form ->Actions() ->dataFieldByName("action_doSaveAddress") ->setTitle(_t("Checkout.Save", "Save")); return $this ->owner ->customise(array( "ClassName" => "AccountPage", "Title" => _t("Checkout.EditAddress", "Edit Address"), "Form" => $form ))->renderWith(array( "UserAccount_editaddress", "Users", "Page" )); } else { return $this->owner->httpError(404); } } /** * Remove an addresses by the given ID (if allowed) */ public function removeaddress() { $member = Member::currentUser(); $id = $this->owner->request->param("ID"); $address = MemberAddress::get()->byID($id); if ($address && $address->canDelete($member)) { $address->delete(); $this->owner->setSessionMessage( "success", _t("Checkout.AddressRemoved", "Address Removed") ); return $this->owner->redirectback(); } else { return $this->owner->httpError(404); } } /** * Form used for adding or editing addresses */ public function AddressForm() { $personal_fields = CompositeField::create( HeaderField::create('PersonalHeader', _t('Checkout.PersonalDetails', 'Personal Details'), 2), TextField::create('FirstName', _t('Checkout.FirstName', 'First Name(s)')), TextField::create('Surname', _t('Checkout.Surname', 'Surname')), CheckboxField::create('Default', _t('Checkout.DefaultAddress', 'Default Address?')) ->setRightTitle(_t('Checkout.Optional', 'Optional')) )->setName("PersonalFields") ->addExtraClass('unit') ->addExtraClass('size1of2') ->addExtraClass('unit-50'); $address_fields = CompositeField::create( HeaderField::create('AddressHeader', _t('Checkout.Address', 'Address'), 2), TextField::create('Address1', _t('Checkout.Address1', 'Address Line 1')), TextField::create('Address2', _t('Checkout.Address2', 'Address Line 2')) ->setRightTitle(_t('Checkout.Optional', 'Optional')), TextField::create('City', _t('Checkout.City', 'City')), TextField::create('PostCode', _t('Checkout.PostCode', 'Post Code')), CountryDropdownField::create( 'Country', _t('Checkout.Country','Country') )->setAttribute("class",'countrydropdown dropdown') )->setName("AddressFields") ->addExtraClass('unit') ->addExtraClass('size1of2') ->addExtraClass('unit-50'); $fields= FieldList::create( HiddenField::create("ID"), HiddenField::create("OwnerID"), CompositeField::create( $personal_fields, $address_fields )->setName("DeliveryFields") ->addExtraClass('line') ->addExtraClass('units-row') ); $actions = FieldList::create( LiteralField::create( 'BackButton', '<a href="' . $this->owner->Link('addresses') . '" class="btn btn-red">' . _t('Checkout.Cancel', 'Cancel') . '</a>' ), FormAction::create('doSaveAddress', _t('Checkout.Add', 'Add')) ->addExtraClass('btn') ->addExtraClass('btn-green') ); $validator = RequiredFields::create(array( 'FirstName', 'Surname', 'Address1', 'City', 'PostCode', 'Country', )); $form = Form::create($this->owner, "AddressForm", $fields, $actions, $validator); return $form; } /** * Method responsible for saving (or adding) a member's address. * If the ID field is set, the method assums we are saving * an address. * * If the ID field is not set, we assume a new address is being * created. * */ public function doSaveAddress($data, $form) { if (!$data["ID"]) { $address = MemberAddress::create(); } else { $address = MemberAddress::get()->byID($data["ID"]); } if ($address) { $form->saveInto($address); $address->write(); $this->owner->setSessionMessage( "success", _t("Checkout.AddressSaved", "Address Saved") ); } else { $this->owner->setSessionMessage( "error", _t("Checkout.Error", "There was an error") ); } return $this->owner->redirect($this->owner->Link("addresses")); } /** * Add links to account menu * */ public function updateAccountMenu($menu) { $curr_action = $this->owner->request->param("Action"); $menu->add(new ArrayData(array( "ID" => 11, "Title" => _t('Checkout.Addresses', 'Addresses'), "Link" => $this->owner->Link("addresses"), "LinkingMode" => ($curr_action == "addresses") ? "current" : "link" ))); } /** * Add fields used by this module to the profile editing form * */ public function updateEditAccountForm($form) { // Add company name field $company_field = TextField::create( "Company", _t('CheckoutUsers.Company', "Company") ); $company_field->setRightTitle(_t("Checkout.Optional", "Optional")); $form->Fields()->insertBefore($company_field, "FirstName"); // Add contact phone number field $phone_field = TextField::create( "PhoneNumber", _t("CheckoutUsers.PhoneNumber", "Phone Number") ); $phone_field->setRightTitle(_t("Checkout.Optional", "Optional")); $form->Fields()->add($phone_field); } } |