Version: current

     1 <?php
     2
     3 /**
     4  * Шаг занесения контактной информации и адреса (если есть доставка)
     5  *
     6  * Для шага можно использовать шаблоны: CheckoutPage_contactdetails, CheckoutPage, Page
     7  *
     8  * @package cart
     9  * @subpackage steppedcheckout
    10  * @author dvp
    11  */
    12 class CheckoutStep_ContactDetails extends CheckoutStep {
    13
    14     static $allowed_actions = array('contactdetails', 'ContactDetailsForm');
    15
    16     /**
    17      * Action для показа шага
    18      */
    19     function contactdetails() {
    20         if (SiteConfig::current_site_config()->CartRegisterRequire && !Member::currentUser()) {
    21             return Director::redirect('/Security/login?BackURL=' . $this->owner->Link());
    22         }
    23         $form = $this->ContactDetailsForm();
    24         //Загружаем данные в форму, только если не было ошибок валидации
    25         //иначе эти данные затирают то, что ввел пользователь
    26         if ($form->MessageType() != 'required') {
    27             // взять данные из текущего пользователя
    28             if($member = Member::currentUser()){
    29                 $form->loadDataFrom($member);
    30             }
    31             // взять данные из сессии
    32             $form->loadDataFrom(Cart::get_info());
    33         }
    34         return array(
    35             'Title' => $this->stepTitle(),
    36             'Content' => $this->stepMessage(),
    37             'Form' => $form
    38         );
    39     }
    40
    41     /**
    42      * Возвращает форму контактной информации
    43      *
    44      * Форму можно изменить с помощью расширения подключенного к CheckoutPage_Controller
    45      * В расширении можно определить методы:
    46      * updateContactDetailsForm(Form &$form) - для изменения формы в целом.
    47      * updateContactDetailsFields(FieldSet &$fields) - для изменения списка полей формы
    48      *
    49      * Либо с помощью расширений подключенных к Order
    50      * @see Order::getContactFields()
    51      *
    52      * @return Form
    53      */
    54     function ContactDetailsForm() {
    55         $form = new Form(
    56             $this->owner,
    57             'ContactDetailsForm',
    58             $this->owner->getContactDetailsFields(),
    59             $this->getStepActions(new FormAction("setcontactdetails", _t('OrderForm.SaveContactsButton', "Continue"))),
    60             new RequiredFields($this->owner->getOrderRequired())
    61         );
    62         $this->owner->extend('updateContactDetailsForm', $form);
    63         return $form;
    64     }
    65
    66     /**
    67      * Метод сохранения контактной информации
    68      *
    69      * Вызывается из формы при ее субмите.
    70      * Сохраняет данные шага в корзине для последующего использования и делает редирект на следующий шаг
    71      * При изменении формы могут потребоваться дополнительные действия, их можно определить в расширении на CheckoutPage_Controller
    72      * В расширении можно определить методы:
    73      * onBeforeSetContactDetails(&$data, Form &$form) - для действий до сохранения
    74      * onAfterSetContactDetails(&$data, Form &$form) - для изменения после сохранения
    75      *
    76      * @param array $data - данные формы
    77      * @param Form $form - форма шага
    78      *
    79      */
    80     function setcontactdetails($data, $form) {
    81         $this->owner->extend('onBeforeSetContactDetails', $data, $form);
    82         foreach ($form->fields()->saveableFields() as $field) {
    83             if ($field->name == 'SecurityID') continue;
    84             Cart::set_info($field->name, $data[$field->name]);
    85         }
    86         $this->owner->extend('onAfterSetContactDetails', $data, $form);
    87         Director::redirect($this->NextStepLink());
    88     }
    89
    90 }

[Raise a SilverStripe Framework issue/bug](https://github.com/silverstripe/silverstripe-framework/issues/new)
- [Raise a SilverStripe CMS issue/bug](https://github.com/silverstripe/silverstripe-cms/issues/new)
- Please use the Silverstripe Forums to ask development related questions. -