Регистрация пользователя при оформлении заказа в один шаг — различия между версиями

Материал из Umicms
Перейти к:навигация, поиск
 
(не показаны 4 промежуточные версии 2 участников)
Строка 1: Строка 1:
 
  [[category:Написание кастомных макросов]]
 
  [[category:Написание кастомных макросов]]
 +
'''Для использования на версии 2.9.6 метод saveinfo() методы из статей по оформлению заказа нужно переименовать, так как в системе появились одноименный методы'''
  
 
'''Задача:''' Реализовать возможность регистрации пользователя при оформлении заказа в один шаг.<br><br>
 
'''Задача:''' Реализовать возможность регистрации пользователя при оформлении заказа в один шаг.<br><br>
Строка 15: Строка 16:
 
В файл classes\modules\emarket\__custom.php добавим определения метода регистрации пользователя и генерации случайного пароля:
 
В файл classes\modules\emarket\__custom.php добавим определения метода регистрации пользователя и генерации случайного пароля:
 
<source lang="php">
 
<source lang="php">
          protected function registerUser($customer_id){
+
protected function registerUser($customer_id){
                $obj_coll = umiObjectsCollection::getInstance();
+
$obj_coll = umiObjectsCollection::getInstance();
                $customer_obj = $obj_coll->getObject($customer_id);
+
$customer_obj = $obj_coll->getObject($customer_id);
                $customer = array ('email' => '', 'fname' => '', 'lname' => '', 'father_name' => '');
+
$customer = array ('email' => '', 'fname' => '', 'lname' => '', 'father_name' => '');
                $oUsersMdl = cmsController::getInstance()->getModule("users");
+
$oUsersMdl = cmsController::getInstance()->getModule("users");
               
 
                if ($oUsersMdl instanceof def_module)
 
                    if ($oUsersMdl->is_auth())
 
                        return false;
 
               
 
                foreach ($customer as $key=>$value){
 
                    if ($customer_obj->getValue($key))
 
                        $customer[$key] = $customer_obj->getValue($key);
 
                }
 
                if (!$customer['email'])
 
                    return false;
 
               
 
                $objectTypes = umiObjectTypesCollection::getInstance();
 
                $regedit = regedit::getInstance();
 
               
 
               
 
                $objectTypeId = $objectTypes->getBaseType("users", "user");
 
                $without_act = (bool) $regedit->getVal("//modules/users/without_act");
 
               
 
                $customer['email'] = $oUsersMdl->validateEmail($customer['email'], false, !$without_act);
 
               
 
               
 
                $customer['login'] = $customer['email'];
 
                $customer['pass'] = self::randomPassword();
 
               
 
                if (isset($_REQUEST['captcha'])) {
 
                    $_SESSION['user_captcha'] = md5((int) getRequest('captcha'));
 
                }
 
  
                if (!umiCaptcha::checkCaptcha()) {
+
if ($oUsersMdl instanceof def_module){
                    $this->errorAddErrors('errors_wrong_captcha');
+
if ($oUsersMdl->is_auth()){
                }
+
return false;
                if (strpos($customer['email'],'@') === false)
+
}
                        $this->redirect(getServer('HTTP_REFERER'));
+
}
               
+
                $oUsersMdl->errorThrow('public');
+
foreach ($customer as $key=>$value){
               
+
if ($customer_obj->getValue($key)){
               
+
$customer[$key] = $customer_obj->getValue($key);
                //Creating user...
+
}
                $objectId = $obj_coll->addObject($customer['login'], $objectTypeId);
+
}
                $activationCode = md5($customer['login'] . time());
+
if (!$customer['email']){
 +
return false;
 +
}
 +
 +
$objectTypes = umiObjectTypesCollection::getInstance();
 +
$regedit = regedit::getInstance();
  
                $object = $obj_coll->getObject($objectId);
 
               
 
                $object->setValue("login",  $customer['login']);
 
                $object->setValue("password", md5($customer['pass']));
 
                $object->setValue("e-mail",  $customer['email']);
 
                $object->setValue("fname",  $customer['fname']);
 
                $object->setValue("lname",  $customer['lname']);
 
                $object->setValue("father_name",  $customer['fname']);
 
               
 
               
 
                $object->setValue("is_activated", $without_act);
 
                $object->setValue("activate_code", $activationCode);
 
                $object->setValue("referer", urldecode(getSession("http_referer")));
 
                $object->setValue("target", urldecode(getSession("http_target")));
 
                $object->setValue("register_date", umiDate::getCurrentTimeStamp());
 
               
 
                $group_id = regedit::getInstance()->getVal("//modules/users/def_group");
 
                $object->setValue("groups", Array($group_id));
 
  
                $data_module = cmsController::getInstance()->getModule('data');
+
$objectTypeId = $objectTypes->getBaseType("users", "user");
                $data_module->saveEditedObject($objectId, true);
+
$without_act = (bool) $regedit->getVal("//modules/users/without_act");
               
 
                $object->commit();
 
               
 
                $template = 'default';
 
                list(
 
$template_mail, $template_mail_subject, $template_mail_noactivation, $template_mail_subject_noactivation
 
) = def_module::loadTemplatesForMail("users/register/".$template,
 
"mail_registrated", "mail_registrated_subject", "mail_registrated_noactivation", "mail_registrated_subject_noactivation"
 
);
 
  
if ($without_act && $template_mail_noactivation && $template_mail_subject_noactivation) {
+
$customer['email'] = $oUsersMdl->validateEmail($customer['email'], false, !$without_act);
$template_mail = $template_mail_noactivation;
 
$template_mail_subject = $template_mail_subject_noactivation;
 
}
 
  
$mailData = array(
 
'user_id' => $objectId,
 
'domain' => $domain = $_SERVER['HTTP_HOST'],
 
'activate_link' => "http://" . $domain . $this->pre_lang . "/users/activate/" . $activationCode . "/",
 
'login' => $customer['login'],
 
'password' => $customer['pass'],
 
'lname' => $object->getValue("lname"),
 
'fname' => $object->getValue("fname"),
 
'father_name' => $object->getValue("father_name"),
 
);
 
  
$mailContent = def_module::parseTemplateForMail($template_mail, $mailData, false, $objectId);
+
$customer['login'] = $customer['email'];
$mailSubject = def_module::parseTemplateForMail($template_mail_subject, $mailData, false, $objectId);
+
$customer['pass'] = self::randomPassword();
  
$fio = $object->getValue("lname") . " " . $object->getValue("fname") . " " . $object->getValue("father_name");
+
if (isset($_REQUEST['captcha'])) {
 +
$_SESSION['user_captcha'] = md5((int) getRequest('captcha'));
 +
}
  
$email_from = regedit::getInstance()->getVal("//settings/email_from");
+
if (!umiCaptcha::checkCaptcha()) {
$fio_from = regedit::getInstance()->getVal("//settings/fio_from");
+
$this->errorAddErrors('errors_wrong_captcha');
 +
}
 +
if (strpos($customer['email'],'@') === false){
 +
$this->redirect(getServer('HTTP_REFERER'));
 +
}
 +
$oUsersMdl->errorThrow('public');
  
  
$registrationMail = new umiMail();
+
//Creating user...
$registrationMail->addRecipient($customer['email'], $fio);
+
$objectId = $obj_coll->addObject($customer['login'], $objectTypeId);
$registrationMail->setFrom($email_from, $fio_from);
+
$activationCode = md5($customer['login'] . time());
$registrationMail->setSubject($mailSubject);
+
 
$registrationMail->setContent($mailContent);
+
$object = $obj_coll->getObject($objectId);
$registrationMail->commit();
+
 
$registrationMail->send();
+
$object->setValue("login",  $customer['login']);
                       
+
$object->setValue("password", md5($customer['pass']));
                        if (getCookie('customer-id'))
+
$object->setValue("e-mail",  $customer['email']);
                            setcookie ('customer-id');
+
$object->setValue("fname",  $customer['fname']);
                        return $objectId;
+
$object->setValue("lname",  $customer['lname']);
               
+
$object->setValue("father_name",  $customer['fname']);
            }
+
 
           
+
 
            private function randomPassword(){
+
$object->setValue("is_activated", $without_act);
                    $alphabet = "abcdefghijklmnopqrstuwxyzABCDEFGHIJKLMNOPQRSTUWXYZ0123456789";
+
$object->setValue("activate_code", $activationCode);
                    $pass = array();
+
$object->setValue("referer", urldecode(getSession("http_referer")));
                    $alphaLength = strlen($alphabet) - 1;
+
$object->setValue("target", urldecode(getSession("http_target")));
                    for ($i = 0; $i < 8; $i++) {
+
$object->setValue("register_date", umiDate::getCurrentTimeStamp());
                        $n = rand(0, $alphaLength);
+
 
                        $pass[] = $alphabet[$n];
+
$group_id = regedit::getInstance()->getVal("//modules/users/def_group");
                    }
+
$object->setValue("groups", Array($group_id));
                    return implode($pass);
+
 
            }
+
$data_module = cmsController::getInstance()->getModule('data');
 +
$data_module->saveEditedObject($objectId, true);
 +
 
 +
$object->commit();
 +
 
 +
$template = 'default';
 +
list(
 +
$template_mail, $template_mail_subject, $template_mail_noactivation, $template_mail_subject_noactivation
 +
) = def_module::loadTemplatesForMail("users/register/".$template,
 +
"mail_registrated", "mail_registrated_subject", "mail_registrated_noactivation", "mail_registrated_subject_noactivation"
 +
);
 +
 
 +
if ($without_act && $template_mail_noactivation && $template_mail_subject_noactivation) {
 +
$template_mail = $template_mail_noactivation;
 +
$template_mail_subject = $template_mail_subject_noactivation;
 +
}
 +
 
 +
$mailData = array(
 +
'user_id' => $objectId,
 +
'domain' => $domain = $_SERVER['HTTP_HOST'],
 +
'activate_link' => "http://" . $domain . $this->pre_lang . "/users/activate/" . $activationCode . "/",
 +
'login' => $customer['login'],
 +
'password' => $customer['pass'],
 +
'lname' => $object->getValue("lname"),
 +
'fname' => $object->getValue("fname"),
 +
'father_name' => $object->getValue("father_name"),
 +
);
 +
 
 +
$mailContent = def_module::parseTemplateForMail($template_mail, $mailData, false, $objectId);
 +
$mailSubject = def_module::parseTemplateForMail($template_mail_subject, $mailData, false, $objectId);
 +
 
 +
$fio = $object->getValue("lname") . " " . $object->getValue("fname") . " " . $object->getValue("father_name");
 +
 
 +
$email_from = regedit::getInstance()->getVal("//settings/email_from");
 +
$fio_from = regedit::getInstance()->getVal("//settings/fio_from");
 +
 
 +
 
 +
$registrationMail = new umiMail();
 +
$registrationMail->addRecipient($customer['email'], $fio);
 +
$registrationMail->setFrom($email_from, $fio_from);
 +
$registrationMail->setSubject($mailSubject);
 +
$registrationMail->setContent($mailContent);
 +
$registrationMail->commit();
 +
$registrationMail->send();
 +
 +
return $objectId;
 +
}
 +
private function randomPassword(){
 +
$alphabet = "abcdefghijklmnopqrstuwxyzABCDEFGHIJKLMNOPQRSTUWXYZ0123456789";
 +
$pass = array();
 +
$alphaLength = strlen($alphabet) - 1;
 +
for ($i = 0; $i < 8; $i++) {
 +
$n = rand(0, $alphaLength);
 +
$pass[] = $alphabet[$n];
 +
}
 +
return implode($pass);
 +
}
 
</source>
 
</source>
  
Строка 147: Строка 148:
 
<source lang="php">
 
<source lang="php">
 
public function saveinfo() {
 
public function saveinfo() {
                $order = $this->getBasketOrder(false);
+
$order = $this->getBasketOrder(false);
                //сохранение регистрационных данных
+
//сохранение регистрационных данных
                $cmsController = cmsController::getInstance();
+
$cmsController = cmsController::getInstance();
                $data = $cmsController->getModule('data');
+
$data = $cmsController->getModule('data');
                $data->saveEditedObject(customer::get()->id, false, true);
+
$data->saveEditedObject(customer::get()->id, false, true);
               
+
 
                $need_reg = getRequest('need_reg');
+
$need_reg = getRequest('need_reg');
               
+
 
                if (isset($need_reg) && $need_reg=='on')
+
if (isset($need_reg) && $need_reg=='on') {
                    $user_id = self::registerUser(customer::get()->id);
+
$user_id = self::registerUser(customer::get()->id);
               
+
}
                //сохранение способа доставки
+
 
                $deliveryId = getRequest('delivery-id');
+
//сохранение способа доставки
                if ($deliveryId) {
+
$deliveryId = getRequest('delivery-id');
                    $delivery = delivery::get($deliveryId);
+
if ($deliveryId) {
                    $deliveryPrice = (float) $delivery->getDeliveryPrice($order);
+
$delivery = delivery::get($deliveryId);
                    $order->setValue('delivery_id', $deliveryId);
+
$deliveryPrice = (float) $delivery->getDeliveryPrice($order);
                    $order->setValue('delivery_price', $deliveryPrice);
+
$order->setValue('delivery_id', $deliveryId);
                }
+
$order->setValue('delivery_price', $deliveryPrice);
                //сохранение адреса доставки
+
$order->commit();
                $addressId = getRequest('delivery-address');
+
}
                if ($addressId == 'new') {
+
                    $collection = umiObjectsCollection::getInstance();
+
//меняем у заказа покупателя на созданного
                    $types = umiObjectTypesCollection::getInstance();
+
if($user_id){
                    $typeId = $types->getBaseType("emarket", "delivery_address");
+
$order->setValue('customer_id', $user_id);
                    $customer = customer::get();
+
$order->commit();
                   
+
}
                    if ($user_id){
+
                        $addressId = $collection->addObject("Address for customer #" . $user_id, $typeId);
+
//сохранение адреса доставки
                        $user = $collection->getObject($user_id);
+
$addressId = getRequest('delivery-address');
                        $order->setValue('customer_id',$user_id);
+
if ($addressId == 'new') {
                    }
+
$collection = umiObjectsCollection::getInstance();
                    else {
+
$types = umiObjectTypesCollection::getInstance();
                        $addressId = $collection->addObject("Address for customer #" . $customer->id, $typeId);
+
$typeId = $types->getBaseType("emarket", "delivery_address");
                    }
+
$customer = customer::get();
                    $dataModule = $cmsController->getModule("data");
+
 
                    if ($dataModule) {
+
if ($user_id){
                        $dataModule->saveEditedObject($addressId, true, true);
+
$addressId = $collection->addObject("Address for customer #" . $user_id, $typeId);
                    }
+
$user = $collection->getObject($user_id);
                    if (!$user_id)
+
}
                        $customer->delivery_addresses = array_merge($customer->delivery_addresses, array($addressId));
+
else {
                    else
+
$addressId = $collection->addObject("Address for customer #" . $customer->id, $typeId);
                        $user->delivery_addresses = array_merge($user->delivery_addresses, array($addressId));
+
}
                }
+
$dataModule = $cmsController->getModule("data");
                $order->delivery_address = $addressId;
+
if ($dataModule) {
 +
$dataModule->saveEditedObject($addressId, true, true);
 +
}
 +
if (!$user_id){
 +
$customer->delivery_addresses = array_merge($customer->delivery_addresses, array($addressId));
 +
}else{
 +
$user->delivery_addresses = array_merge($user->delivery_addresses, array($addressId));
 +
}
 +
}
 +
$order->delivery_address = $addressId;
 +
$order->commit();
 +
 
 +
//сохранение способа оплаты и редирект на итоговую страницу, либо страницу подтверждения оплаты.
 +
$order->setValue('payment_id', getRequest('payment-id'));
 +
$order->refresh();
 +
$order->commit();
 +
 
 +
$paymentId = getRequest('payment-id');
 +
if (!$paymentId) {
 +
$this->errorNewMessage(getLabel('error-emarket-choose-payment'));
 +
$this->errorPanic();
 +
}
 +
$payment = payment::get($paymentId);
  
                //сохранение способа оплаты и редирект на итоговую страницу, либо страницу подтверждения оплаты.
+
if ($payment instanceof payment) {
                $order->setValue('payment_id', getRequest('payment-id'));
+
$paymentName = $payment->getCodeName();
                $order->refresh();
 
  
                $paymentId = getRequest('payment-id');
+
$url = "{$this->pre_lang}/" . cmsController::getInstance()->getUrlPrefix() . "emarket/purchase/payment/{$paymentName}/";
                if (!$paymentId) {
+
} else {
                    $this->errorNewMessage(getLabel('error-emarket-choose-payment'));
+
$url = "{$this->pre_lang}/" . cmsController::getInstance()->getUrlPrefix() . "emarket/cart/";
                    $this->errorPanic();
+
}
                }
+
$this->redirect($url);
                $payment = payment::get($paymentId);
+
}
               
 
                if ($payment instanceof payment) {
 
                    $paymentName = $payment->getCodeName();
 
                   
 
                    $url = "{$this->pre_lang}/" . cmsController::getInstance()->getUrlPrefix() . "emarket/purchase/payment/{$paymentName}/";
 
                } else {
 
                    $url = "{$this->pre_lang}/" . cmsController::getInstance()->getUrlPrefix() . "emarket/cart/";
 
                }
 
                $this->redirect($url);
 
            }
 
 
</source>
 
</source>

Текущая версия на 09:48, 18 апреля 2014

Для использования на версии 2.9.6 метод saveinfo() методы из статей по оформлению заказа нужно переименовать, так как в системе появились одноименный методы

Задача: Реализовать возможность регистрации пользователя при оформлении заказа в один шаг.

Реализация:
Для создания формы оформления заказа в один шаг воспользуемся статьей Оформление заказа в один шаг – xslt шаблонизатор.
В шаблоне <xsl:template match="udata[@module='emarket'][@method='fast_purchasing_xslt']"> добавим кнопку-флажок для регистрации пользователя по его желанию.

<xsl:if test="not($user_auth)">
     Зарегистрироваться на сайте <input name="need_reg" type="checkbox"/>
</xsl:if>

В основной файл шаблона нужно добавить переменную user_auth:

<xsl:variable name="user_auth" select="/result/user/@status" />

В файл classes\modules\emarket\__custom.php добавим определения метода регистрации пользователя и генерации случайного пароля:

protected function registerUser($customer_id){
	$obj_coll = umiObjectsCollection::getInstance();
	$customer_obj = $obj_coll->getObject($customer_id);
	$customer = array ('email' => '', 'fname' => '', 'lname' => '', 'father_name' => '');
	$oUsersMdl = cmsController::getInstance()->getModule("users");

	if ($oUsersMdl instanceof def_module){
		if ($oUsersMdl->is_auth()){
			return false;
		}
	}
	
	foreach ($customer as $key=>$value){
		if ($customer_obj->getValue($key)){
			$customer[$key] = $customer_obj->getValue($key);
		}
	}
	if (!$customer['email']){
		return false;
	}
	
	$objectTypes = umiObjectTypesCollection::getInstance();
	$regedit = regedit::getInstance();


	$objectTypeId = $objectTypes->getBaseType("users", "user");
	$without_act = (bool) $regedit->getVal("//modules/users/without_act");

	$customer['email'] = $oUsersMdl->validateEmail($customer['email'], false, !$without_act);


	$customer['login'] = $customer['email'];
	$customer['pass'] = self::randomPassword();

	if (isset($_REQUEST['captcha'])) {
		$_SESSION['user_captcha'] = md5((int) getRequest('captcha'));
	}

	if (!umiCaptcha::checkCaptcha()) {
		$this->errorAddErrors('errors_wrong_captcha');
	}
	if (strpos($customer['email'],'@') === false){
		$this->redirect(getServer('HTTP_REFERER'));
	}
	$oUsersMdl->errorThrow('public');


	//Creating user...
	$objectId = $obj_coll->addObject($customer['login'], $objectTypeId);
	$activationCode = md5($customer['login'] . time());

	$object = $obj_coll->getObject($objectId);

	$object->setValue("login",  $customer['login']);
	$object->setValue("password", md5($customer['pass']));
	$object->setValue("e-mail",  $customer['email']);
	$object->setValue("fname",  $customer['fname']);
	$object->setValue("lname",  $customer['lname']);
	$object->setValue("father_name",  $customer['fname']);


	$object->setValue("is_activated", $without_act);
	$object->setValue("activate_code", $activationCode);
	$object->setValue("referer", urldecode(getSession("http_referer")));
	$object->setValue("target", urldecode(getSession("http_target")));
	$object->setValue("register_date", umiDate::getCurrentTimeStamp());

	$group_id = regedit::getInstance()->getVal("//modules/users/def_group");
	$object->setValue("groups", Array($group_id));

	$data_module = cmsController::getInstance()->getModule('data');
	$data_module->saveEditedObject($objectId, true);

	$object->commit();

	$template = 'default';
	list(
	$template_mail, $template_mail_subject, $template_mail_noactivation, $template_mail_subject_noactivation
	) = def_module::loadTemplatesForMail("users/register/".$template,
	"mail_registrated", "mail_registrated_subject", "mail_registrated_noactivation", "mail_registrated_subject_noactivation"
	);

	if ($without_act && $template_mail_noactivation && $template_mail_subject_noactivation) {
		$template_mail = $template_mail_noactivation;
		$template_mail_subject = $template_mail_subject_noactivation;
	}

	$mailData = array(
		'user_id' => $objectId,
		'domain' => $domain = $_SERVER['HTTP_HOST'],
		'activate_link' => "http://" . $domain . $this->pre_lang . "/users/activate/" . $activationCode . "/",
		'login' => $customer['login'],
		'password' => $customer['pass'],
		'lname' => $object->getValue("lname"),
		'fname' => $object->getValue("fname"),
		'father_name' => $object->getValue("father_name"),
	);

	$mailContent = def_module::parseTemplateForMail($template_mail, $mailData, false, $objectId);
	$mailSubject = def_module::parseTemplateForMail($template_mail_subject, $mailData, false, $objectId);

	$fio = $object->getValue("lname") . " " . $object->getValue("fname") . " " . $object->getValue("father_name");

	$email_from = regedit::getInstance()->getVal("//settings/email_from");
	$fio_from = regedit::getInstance()->getVal("//settings/fio_from");


	$registrationMail = new umiMail();
	$registrationMail->addRecipient($customer['email'], $fio);
	$registrationMail->setFrom($email_from, $fio_from);
	$registrationMail->setSubject($mailSubject);
	$registrationMail->setContent($mailContent);
	$registrationMail->commit();
	$registrationMail->send();
	
	return $objectId;
}
private function randomPassword(){
	$alphabet = "abcdefghijklmnopqrstuwxyzABCDEFGHIJKLMNOPQRSTUWXYZ0123456789";
	$pass = array();
	$alphaLength = strlen($alphabet) - 1;
	for ($i = 0; $i < 8; $i++) {
		$n = rand(0, $alphaLength);
		$pass[] = $alphabet[$n];
	}
	return implode($pass);
}

Код метода saveinfo(),который находится в том же файле, должен выглядеть следующим образом:

public function saveinfo() {
	$order = $this->getBasketOrder(false);
	//сохранение регистрационных данных
	$cmsController = cmsController::getInstance();
	$data = $cmsController->getModule('data');
	$data->saveEditedObject(customer::get()->id, false, true);

	$need_reg = getRequest('need_reg');

	if (isset($need_reg) && $need_reg=='on') {
		$user_id = self::registerUser(customer::get()->id);
	}

	//сохранение способа доставки
	$deliveryId = getRequest('delivery-id');
	if ($deliveryId) {
		$delivery = delivery::get($deliveryId);
		$deliveryPrice = (float) $delivery->getDeliveryPrice($order);
		$order->setValue('delivery_id', $deliveryId);
		$order->setValue('delivery_price', $deliveryPrice);
		$order->commit();
	}
	
	//меняем у заказа покупателя на созданного		
	if($user_id){
		$order->setValue('customer_id', $user_id);
		$order->commit();
	}
	
	//сохранение адреса доставки
	$addressId = getRequest('delivery-address');
	if ($addressId == 'new') {
		$collection = umiObjectsCollection::getInstance();
		$types = umiObjectTypesCollection::getInstance();
		$typeId = $types->getBaseType("emarket", "delivery_address");
		$customer = customer::get();

		if ($user_id){
			$addressId = $collection->addObject("Address for customer #" . $user_id, $typeId);
			$user = $collection->getObject($user_id);
		}
		else {
			$addressId = $collection->addObject("Address for customer #" . $customer->id, $typeId);
		}
		$dataModule = $cmsController->getModule("data");
		if ($dataModule) {
			$dataModule->saveEditedObject($addressId, true, true);
		}
		if (!$user_id){
			$customer->delivery_addresses = array_merge($customer->delivery_addresses, array($addressId));
		}else{
			$user->delivery_addresses = array_merge($user->delivery_addresses, array($addressId));
		}
	}
	$order->delivery_address = $addressId;
	$order->commit();

	//сохранение способа оплаты и редирект на итоговую страницу, либо страницу подтверждения оплаты.
	$order->setValue('payment_id', getRequest('payment-id'));
	$order->refresh();
	$order->commit();

	$paymentId = getRequest('payment-id');
	if (!$paymentId) {
		$this->errorNewMessage(getLabel('error-emarket-choose-payment'));
		$this->errorPanic();
	}
	$payment = payment::get($paymentId);

	if ($payment instanceof payment) {
		$paymentName = $payment->getCodeName();

		$url = "{$this->pre_lang}/" . cmsController::getInstance()->getUrlPrefix() . "emarket/purchase/payment/{$paymentName}/";
	} else {
		$url = "{$this->pre_lang}/" . cmsController::getInstance()->getUrlPrefix() . "emarket/cart/";
	}
	$this->redirect($url);
}