Отправьте письмо администратору со ссылкой BO на конкретного клиента в Prestashop 1.6

Отправьте письмо администратору со ссылкой BO на конкретного клиента в Prestashop 1.6

05.06.2017 11:57:56 Просмотров 40 Источник

В Prestashop 1.6, от FrontController, я должен отправить письмо администратору магазина.

Эта часть работает хорошо, но у меня возникли проблемы, чтобы включить ссылку на страницу администрирования конкретного клиента.

Единственное, что мне не хватает, это имя каталога администрирования. Я мог бы разобрать и объединить PS_ADMIN_DIR

Выход я получил :

$admin_customer_link = 
    _PS_BASE_URL_
    .__PS_BASE_URI__
    /* Missing the Administration directory name here */
    .$this->context->link->getAdminLink('AdminCustomers', false)
    ."&id_customer=".(int)$customer->id."&viewcustomer";

Выход мне нужен :

http://127.0.0.1:8080/prestashop/index.php?controller=AdminCustomers&id_customer=2&viewcustomer

Любая помощь будет оценена по достоинству.

У вопроса есть решение - Посмотреть?

Ответы - Отправьте письмо администратору со ссылкой BO на конкретного клиента в Prestashop 1.6 / Send a mail to Admin with a BO link to specific customer in Prestashop 1.6

sarcom

06.06.2017 02:19:50

Нет (стандартного) способа узнать папку администрирования с фронт-контроллера, иначе вся безопасность будет сброшена в туалет :).

То, что вы можете сделать, - это получить папку администрирования из модуля "конфигурация" или при его установке и сохранить ее где-нибудь, на данный момент я предлагаю в базу данных, но, возможно, есть более безопасный режим.

Что-то вроде:

public function install()
{
    // your stuff
    $current_dir = $_SERVER['PHP_SELF']; // this give you the current dir (administration folder included)
    $administration_folder = /* Clean your string with a string replace or preg */
    Configuration::updateValue('PS_MYMOD_ADMIN_DIR', $administration_folder);
    return true;
}

Тогда в ваш контроллер не получил:

$adminfolder = Configuration::get('PS_MYMOD_ADMIN_DIR');

Однако я надеюсь, что вы знаете, что вы создаете нарушение безопасности через электронную почту...

Надеюсь, это поможет

https://stackoverflow.com/questions/44377590/send-a-mail-to-admin-with-a-bo-link-to-specific-customer-in-prestashop-1-6/44388666#comment75784879_44388666
Спасибо, что нашли время ответить на этот вопрос. Итак, это не безопасный способ сделать это ?
https://stackoverflow.com/questions/44377590/send-a-mail-to-admin-with-a-bo-link-to-specific-customer-in-prestashop-1-6/44388666#comment75785056_44388666
Я просто проверяю его, и все в порядке. Он работает, но маркер безопасности не является допустимым. Конечно, потому что в frontController нет набора сотрудников, поэтому токен не может быть сгенерирован правильно.
https://stackoverflow.com/questions/44377590/send-a-mail-to-admin-with-a-bo-link-to-specific-customer-in-prestashop-1-6/44388666#comment75785095_44388666
Я не знаю, как с этим справиться.
https://stackoverflow.com/questions/44377590/send-a-mail-to-admin-with-a-bo-link-to-specific-customer-in-prestashop-1-6/44388666#comment75790783_44388666
Да... МММ... Вы можете создать пользовательскую страницу в своем модуле, например customer.phpи перенаправить администратора на контроллер admincustomer... Увидеть ajax.phpв папке администрирования, возможно, поможет вам
https://stackoverflow.com/questions/44377590/send-a-mail-to-admin-with-a-bo-link-to-specific-customer-in-prestashop-1-6/44388666#comment75794048_44388666
Спасибо за предложение. Но я использовал другой обход. Я создаю новый поток клиентов и отправляю электронное письмо в службу поддержки клиентов. При этом при подключении к БО сотрудник получает уведомление о новом сообщении клиента и может получить доступ к странице конфигурации клиента из него. Это безопасно и более элегантно. Спасибо в любом случае за ВАШ интерес и ваш совет. Я отправлю свое решение завтра.
https://stackoverflow.com/questions/44377590/send-a-mail-to-admin-with-a-bo-link-to-specific-customer-in-prestashop-1-6/44388666#comment75794638_44388666
Да, это очень лучшее решение ;)
Является ответом!
JazZ

07.06.2017 08:22:33

Поскольку использование имени каталога администрирования из внешнего интерфейса и отправка ссылки на администрацию по электронной почте не является хорошей идеей для целей безопасности, я решил реализовать это другим способом.

Вместо того, чтобы отправить ссылку на страницу клиента администрации веб-мастеру по электронной почте, я создаю новый поток клиента и сообщение. После этого я отправляю электронное письмо в службу поддержки клиентов. Таким образом, когда они входят в бэк-офис, они видят новое уведомление, которое приводит их к определенному пользователю.

enter image description here

Вот этот код :

ModuleFrontController

// Create a new Customer Thread
$ct = new CustomerThread();
if (isset($customer->id)) {
     $ct->id_customer = (int)$customer->id;
}
$ct->id_shop = (int)$this->context->shop->id;
$ct->id_contact = $contact->id;
$ct->id_lang = (int)$this->context->language->id;
$ct->email = $customer->email;
$ct->status = 'open';
$ct->token = Tools::passwdGen(12);
$ct->add();

// Add a new message to the Customer Thread
if ($ct->id) {
    $cm = new CustomerMessage();
    $cm->id_customer_thread = $ct->id;
    $cm->message = $message;
    $cm->ip_address = (int)ip2long(Tools::getRemoteAddr());
    $cm->user_agent = $_SERVER['HTTP_USER_AGENT'];
    $cm->add();
}

Надеюсь, это поможет кому-то в той же ситуации.

Закрыть X