Source of file Ext_Commerce_UsersController.php
Size: 11,326 Bytes - Last Modified: 2021-12-24T05:16:32+00:00
/var/www/docs.ssmods.com/process/src/code/extensions/Ext_Commerce_UsersController.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368 | <?php /** * Extension for Users Account Controller that provide methods such as cart link and category list * to templates * * @package commerce */ class Ext_Commerce_UsersController extends Extension { private static $allowed_actions = array( "addresses", "addaddress", "editaddress", "removeaddress", "history", "outstanding", "order", "AddressForm" ); /** * Display all addresses associated with the current user */ public function addresses() { return $this ->owner ->customise(array( "ClassName" => "AccountPage", "Title" => _t("CommerceAccount.YourAddresses", "Your Addresses") ))->renderWith(array( "Commerce_Account_addresses", "Users_Account", "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("CommerceAccount.AddAddress", "Add Address"), "Form" => $form ))->renderWith(array( "Commerce_Account_addaddress", "Users_Account", "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("CommerceAccount.Save", "Save")); return $this ->owner ->customise(array( "ClassName" => "AccountPage", "Title" => _t("CommerceAccount.EditAddress", "Edit Address"), "Form" => $form ))->renderWith(array( "Commerce_Account_editaddress", "Users_Account", "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->setFlashMessage( "success", _t("CommerceAccount.AddressRemoved","Address Removed") ); return $this->owner->redirectback(); } else return $this->owner->httpError(404); } /** * Display all outstanding orders for the current user * */ public function outstanding() { $member = Member::currentUser(); $orders = new PaginatedList($member->getOutstandingOrders(), $this->owner->request); if(!$orders->exists()) { $message = '<p class="message message-info">'; $message .= _t("CommerceAccount.NoOrders","There are currently no orders"); $message .= '</p>'; $content = new HTMLText(); $content->setValue($message); } else { $content = $this->owner->renderWith( "Commerce_Account_OrdersList", array("Orders" => $orders) ); } $this->owner->customise(array( "ClassName" => "AccountPage", "Title" => _t('CommerceAccount.OutstandingOrders','Outstanding Orders'), "Content" => $content, "Orders" => $orders )); return $this->owner->renderWith(array( "Users_Account", "Users", "Page" )); } /** * Display all historic orders for the current user * */ public function history() { $member = Member::currentUser(); $orders = new PaginatedList($member->getHistoricOrders(), $this->owner->request); if(!$orders->exists()) { $message = '<p class="message message-info">'; $message .= _t("CommerceAccount.NoOrders","There are currently no orders"); $message .= '</p>'; $content = new HTMLText(); $content->setValue($message); } else { $content = $this->owner->renderWith( "Commerce_Account_OrdersList", array("Orders" => $orders) ); } $this->owner->customise(array( "ClassName" => "AccountPage", "Title" => _t('CommerceAccount.OrderHistory','Order History'), "Content" => $content, "Orders" => $orders )); return $this->owner->renderWith(array( "Users_Account", "Users", "Page" )); } /** * Display the currently selected order from the URL * */ public function order() { $orderID = $this->owner->request->param("ID"); $order = Order::get()->byID($orderID); $content = new HTMLText(); if(!$order || ($order && !$order->canView())) { $message = '<p class="message message-error">'; $message .= _t("CommerceAccount.NotFound","Order not found"); $message .= '</p>'; $title = _t("CommerceAccount.NotFound","Order not found"); $content->setValue($message); $order = null; } else { $title = _t('Commerce.Order','Order') . ': ' . $order->OrderNumber; } $this->owner->customise(array( "ClassName" => "AccountPage", "Title" => $title, "Content" => $content, "Order" => $order )); return $this->owner->renderWith(array( "Commerce_Account_order", "Commerce", "Page" )); } /** * Form used for adding or editing addresses */ public function AddressForm() { $personal_fields = CompositeField::create( HeaderField::create('PersonalHeader', _t('Commerce.PersonalDetails','Personal Details'), 2), TextField::create('FirstName',_t('Commerce.FirstName','First Name(s)') . '*'), TextField::create('Surname',_t('Commerce.Surname','Surname') . '*') )->setName("PersonalFields") ->addExtraClass('unit') ->addExtraClass('size1of2') ->addExtraClass('unit-50'); $address_fields = CompositeField::create( HeaderField::create('AddressHeader', _t('Commerce.Address','Address'), 2), TextField::create('Address1',_t('Commerce.Address1','Address Line 1') . '*'), TextField::create('Address2',_t('Commerce.Address2','Address Line 2')), TextField::create('City',_t('Commerce.City','City') . '*'), TextField::create('PostCode',_t('Commerce.PostCode','Post Code') . '*'), CountryDropdownField::create( 'Country', _t('Commerce.Country','Country') )->setAttribute("class",'countrydropdown dropdown btn') )->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 commerce-action-back">' . _t('Commerce.Back','Back') . '</a>' ), FormAction::create('doSaveAddress', _t('CommerceAccount.Add','Add')) ->addExtraClass('commerce-action-next') ->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->setFlashMessage( "success", _t("CommerceAccount.AddressSaved","Address Saved") ); } else { $this->owner->setFlashMessage( "error", _t("CommerceAccount.Error","There was an error") ); } return $this->owner->redirect($this->owner->Link("addresses")); } /** * Add commerce specific links to account menu * */ public function updateAccountMenu($menu) { $menu->add(new ArrayData(array( "ID" => 1, "Title" => _t('CommerceAccount.OutstandingOrders','Outstanding Orders'), "Link" => $this->owner->Link("outstanding") ))); $menu->add(new ArrayData(array( "ID" => 2, "Title" => _t('CommerceAccount.OrderHistory',"Order history"), "Link" => $this->owner->Link("history") ))); $menu->add(new ArrayData(array( "ID" => 11, "Title" => _t('CommerceAccount.Addresses','Addresses'), "Link" => $this->owner->Link("addresses") ))); } /** * Add fields used by this module to the profile editing form * */ public function updateEditAccountForm($form) { $form->Fields()->insertBefore(TextField::create( "Company", _t('CommerceAccount.Company',"Company") ),"FirstName"); $form->Fields()->add(TextField::create( "PhoneNumber", _t("CommerceAccount.PhoneNumber","Phone Number") )); } } |