Альтернативное использование метода actAsUser() — различия между версиями
Материал из Umicms
Williwaw (обсуждение | вклад) (Новая страница: «'''Актуально для версии 2.9.6''' == Задача == == Решение == <source lang="php"> </source> <source lang="php"> </source>») |
Whoa (обсуждение | вклад) |
||
(не показаны 4 промежуточные версии 1 участника) | |||
Строка 3: | Строка 3: | ||
== Задача == | == Задача == | ||
+ | Необходимо для менеджера интернет-магазина добавить возможность оформлять заказ от лица пользователя Гость с сайта,будучи при этом авторизованным в системе как менеджер(например, клиент звонит по телефону). | ||
+ | == Решение == | ||
+ | В системе есть возможность оформления заказа от имени пользователя из уже существующего заказа и от лица именно этого пользователя. | ||
+ | Необходимо немного изменить код данного метода, вынести его в файл _custom.php для модуля emarket и указать его в качестве action для кнопки, которую можно разместить в основном шаблоне страниц. Для кнопки можно будет добавить условие отображения, чтобы ее не было видно обычным посетителям сайта. | ||
+ | |||
+ | Итоговый код метода после внесения изменений: | ||
+ | <source lang="php"> | ||
+ | public function actAsUserCustom() { | ||
+ | |||
+ | $permissions = permissionsCollection::getInstance(); | ||
+ | $oldUserId = $permissions->getUserId(); | ||
+ | $userId = $permissions->getGuestId(); | ||
+ | $objects = umiObjectsCollection::getInstance(); | ||
+ | $user = $objects->getObject($userId); | ||
+ | session_destroy(); | ||
− | == | + | setcookie('u-login', "", time() - 3600, "/"); |
+ | setcookie('u-password', "", time() - 3600, "/"); | ||
+ | setcookie('u-password-md5', "", time() - 3600, "/"); | ||
+ | setcookie ('eip-panel-state-first', "", time() - 3600, "/"); | ||
+ | setcookie('customer-id', "", time() - 3600, "/"); | ||
+ | |||
+ | session_start(); | ||
+ | |||
+ | if ($user->getTypeGUID() == 'users-user') { | ||
+ | $login = $user->getValue("login"); | ||
+ | $password = $user->getValue("password"); | ||
− | + | $_SESSION['user_id'] = $userId; | |
+ | $_SESSION['cms_login'] = $login; | ||
+ | $_SESSION['cms_pass'] = $password; | ||
− | + | setcookie('u-login', $login, time() - 3600, "/"); | |
+ | setcookie('u-password-md5', $password, time() - 3600, "/"); | ||
+ | } | ||
+ | |||
+ | $_SESSION['fake-user'] = 1; | ||
+ | $_SESSION['old_user_id'] = $oldUserId; | ||
+ | setcookie('customer-id', $userId, (time() + customer::$defaultExpiration), '/'); | ||
− | + | $this->chooseRedirect("/"); | |
+ | } | ||
</source> | </source> | ||
+ | |||
+ | [[Категория:Модуль Интернет магазин]] |
Текущая версия на 12:42, 21 ноября 2018
Актуально для версии 2.9.6
Задача
Необходимо для менеджера интернет-магазина добавить возможность оформлять заказ от лица пользователя Гость с сайта,будучи при этом авторизованным в системе как менеджер(например, клиент звонит по телефону).
Решение
В системе есть возможность оформления заказа от имени пользователя из уже существующего заказа и от лица именно этого пользователя. Необходимо немного изменить код данного метода, вынести его в файл _custom.php для модуля emarket и указать его в качестве action для кнопки, которую можно разместить в основном шаблоне страниц. Для кнопки можно будет добавить условие отображения, чтобы ее не было видно обычным посетителям сайта.
Итоговый код метода после внесения изменений:
public function actAsUserCustom() {
$permissions = permissionsCollection::getInstance();
$oldUserId = $permissions->getUserId();
$userId = $permissions->getGuestId();
$objects = umiObjectsCollection::getInstance();
$user = $objects->getObject($userId);
session_destroy();
setcookie('u-login', "", time() - 3600, "/");
setcookie('u-password', "", time() - 3600, "/");
setcookie('u-password-md5', "", time() - 3600, "/");
setcookie ('eip-panel-state-first', "", time() - 3600, "/");
setcookie('customer-id', "", time() - 3600, "/");
session_start();
if ($user->getTypeGUID() == 'users-user') {
$login = $user->getValue("login");
$password = $user->getValue("password");
$_SESSION['user_id'] = $userId;
$_SESSION['cms_login'] = $login;
$_SESSION['cms_pass'] = $password;
setcookie('u-login', $login, time() - 3600, "/");
setcookie('u-password-md5', $password, time() - 3600, "/");
}
$_SESSION['fake-user'] = 1;
$_SESSION['old_user_id'] = $oldUserId;
setcookie('customer-id', $userId, (time() + customer::$defaultExpiration), '/');
$this->chooseRedirect("/");
}