Search code examples
phpprestashopprestashop-1.6

Send a mail to Admin with a BO link to specific customer in Prestashop 1.6


In Prestashop 1.6, from a FrontController, I have to send a mail to the administrator of the Shop.

This part works well but I got problems to include a link to the administration page of a specific customer.

The only thing I miss is the name of the administration directory. I would be able to parse and concatenate the PS_ADMIN_DIR constant but it is not available from the FrontController.

I'm kinda stuck here.

Here is the code :

$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";

The output I got :

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

The output I need :

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

Any help will be appreciated.


Solution

  • Since the use of the administration directory name from the Front End and sending a link to the administration in e-mail is not a good idea for security purpose, I choose to implement this another way.

    Instead of send the administration customer's page link to the webmaster by e-mail, I create a new customer Thread and message. After that, I send an e-mail to the customer service. So, when they log in the Back Office, they see a new notification who leads them to the specific user.

    enter image description here

    Here is the code :

    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();
    }
    

    Hope it helps someone in the same situation.