Альтернативное использование метода actAsUser() — различия между версиями

Материал из Umicms
Перейти к:навигация, поиск
Строка 12: Строка 12:
 
<source lang="php">
 
<source lang="php">
 
public function actAsUserCustom() {
 
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, "/");
+
$permissions = permissionsCollection::getInstance();
setcookie('u-password', "", time() - 3600, "/");
+
$oldUserId = $permissions->getUserId();  
setcookie('u-password-md5', "", time() - 3600, "/");
+
$userId = $permissions->getGuestId();
setcookie ('eip-panel-state-first', "", time() - 3600, "/");
+
$objects = umiObjectsCollection::getInstance();
setcookie('customer-id', "", time() - 3600, "/");
+
$user = $objects->getObject($userId);
 +
session_destroy();
  
session_start();
+
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, "/");
  
if ($user->getTypeGUID() == 'users-user') {
+
session_start();
  
$login = $user->getValue("login");
+
if ($user->getTypeGUID() == 'users-user') {
$password = $user->getValue("password");
 
  
$_SESSION['user_id'] = $userId;
+
$login = $user->getValue("login");
$_SESSION['cms_login'] = $login;
+
$password = $user->getValue("password");
$_SESSION['cms_pass'] = $password;
 
  
setcookie('u-login', $login, time() - 3600, "/");
+
$_SESSION['user_id'] = $userId;
setcookie('u-password-md5', $password, time() - 3600, "/");
+
$_SESSION['cms_login'] = $login;
}
+
$_SESSION['cms_pass'] = $password;
 
$_SESSION['fake-user'] = 1;
 
$_SESSION['old_user_id'] = $oldUserId;
 
  
setcookie('customer-id', $userId, (time() + customer::$defaultExpiration), '/');
+
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("/");
 +
}
  
$this->chooseRedirect("/");
 
}
 
 
</source>
 
</source>

Версия 14:52, 30 апреля 2014

Актуально для версии 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("/");
}