Jump to content

Enviar adjunto al cliente desde mensajes en administración


jat

Recommended Posts

Hola a tod@s

Me gustaría añadir un input tipo file, para adjuntar una imagen, dentro de Adminitracion en el formulario de mensajes que está dentro del pedido del cliente, como el que adjunto en la imagen.

He creado un override de view.tpl (override/controllers/admin/templates/orders/helpers/view/view.tpl)

He añadido el siguiente código en la línea 869:

{* TODO fileupload *}
<div class="form-group">
<label class="control-label col-lg-3">{l s='Captura de pantalla'}</label>
<div class="col-lg-9 form-control-file">
  <input type="file" name="filetoclient" class="form-control form-control-file">
</div>
</div>
{* End fileupload *}

Y se muestra correctamente.

Pero necesito que incluya ese archivo en el email. 

Alguna idea de que controlador tengo que modificar para ello? No he encontrado mucha info

Muchas gracias

 

Version Prestashop: 1.7.6.7
Theme: StarterTheme modificado https://github.com/PrestaShop/StarterTheme/

 

 

form-mesage.png

Edited by jat
poner un título mas apropiado (see edit history)
Link to comment
Share on other sites

El controlador que debes de editar es AdminCustomerThreadsController.php.

En la linea 438 encontrarás la funcion mail:

 if (Mail::Send(
                        (int)$ct->id_lang,
                        'reply_msg',
                        sprintf(Mail::l('An answer to your message is available #ct%1$s #tc%2$s', $ct->id_lang), $ct->id, $ct->token),
                        $params, Tools::getValue('msg_email'), null, $from_email, $from_name, $file_attachment, null,
                        _PS_MAIL_DIR_, true, $ct->id_shop)) {
                        $ct->status = 'closed';
                        $ct->update();
                    }

Debes subir primero el archivo al servidor, y posteriormente adjuntarlo en la funcion mail.

Para adjuntarlo, puedes hacerlo añadiendo en la variable $file_attachment los siguientes contenidos:

if (!empty($_FILES['joinFile']['name'])) {
                        $file_attachment['content'] = file_get_contents($_FILES['joinFile']['tmp_name']);
                        $file_attachment['name'] = $_FILES['joinFile']['name'];
                        $file_attachment['mime'] = $_FILES['joinFile']['type'];
                    }

 

 

OJO, no lo he probado, pero según veo el controlador ya hace esto, es decir, mandar archivos tal y como tu quieres hacerlo.

Creo que si al name del file le pones joinFile subirá el archivo y lo mandará al correo como adjunto sin que tengas que hacer nada. Si no funciona, entonces debes de hacerlo como anteriormente te indico.

 

Por favor, hazme saber si JoinFile funciona.

 

 

  • Thanks 1
Link to comment
Share on other sites

Gracias por sus respuestas @Pixefora D  y @jat, ya tengo una idea para comenzar, en mi caso estoy editando el módulo ps_wirepayment (Pagos por transferencia bancaria), justamente edité el archivo "\modules\ps_wirepayment\views\templates\hook\ps_wirepayment_intro.tpl", y le añadí input de tipo file lo que busco es que me permita añadir un archivo PNG, JPG o PDF, para luego subirlo en alguna carpeta del servidor y añadir un link en el correo de order_conf.html

Si alguien nos puede dar una ayuda sería fantástico.

Link to comment
Share on other sites

En el controlador validation.php verás el método postProcess. Ahí puedes meter el php necesario para subir el archivo donde quieras y guardarlo en la base de datos

Luego puedes editar directamente la plantilla de correo y ponerle el enlace a la imagen o archivo que acabas de subir.

 

Un saludo.

Link to comment
Share on other sites

Perdona, mandé el código de 1.6. Para 1.7 sería algo así, linea 398:

                    if (Mail::Send(
                        $this->context->language->id,
                        'forward_msg',
                        $this->trans(
                            'Fwd: Customer message',
                            array(),
                            'Emails.Subject',
                            $this->context->language->locale
                        ),
                        $params,
                        $employee->email,
                        $employee->firstname.' '.$employee->lastname,
                        $current_employee->email,
                        $current_employee->firstname.' '.$current_employee->lastname,
                        null, null, _PS_MAIL_DIR_, true)) {
                        $cm->private = 1;
                        $cm->message = $this->trans('Message forwarded to', array(), 'Admin.Catalog.Feature').' '.$employee->firstname.' '.$employee->lastname."\n".$this->trans('Comment:').' '.$message;
                        $cm->add();
                    }

 

Puedes añadirle el tipo FILE y subirlo antes del envío de correo, con lo que te quedaría algo asi (no testeado):

if (isset($_FILES) && !empty($_FILES['joinFile']['name']) && $_FILES['joinFile']['error'] != 0) {
                    $this->errors[] = $this->trans('An error occurred during the file upload process.', array(), 'Admin.Notifications.Error');
                }
else {
                    $file_attachment = null;
                    if (!empty($_FILES['joinFile']['name'])) {
                        $file_attachment['content'] = file_get_contents($_FILES['joinFile']['tmp_name']);
                        $file_attachment['name'] = $_FILES['joinFile']['name'];
                        $file_attachment['mime'] = $_FILES['joinFile']['type'];
					}
        }

 if (Mail::Send(
                        $this->context->language->id,
                        'forward_msg',
                        $this->trans(
                            'Fwd: Customer message',
                            array(),
                            'Emails.Subject',
                            $this->context->language->locale
                        ),
                        $params, $email, null,
                        $current_employee->email, $current_employee->firstname.' '.$current_employee->lastname,
                        $file_attachment, null, _PS_MAIL_DIR_, true)) {
                        $cm->message = $this->trans('Message forwarded to', array(), 'Admin.Catalog.Feature').' '.$email."\n".$this->trans('Comment:').' '.$message;
                        $cm->add();
                    }

 

  • Like 1
Link to comment
Share on other sites

  • 8 months later...
On 8/26/2020 at 10:24 AM, jat said:

Hola a tod@s

Me gustaría añadir un input tipo file, para adjuntar una imagen, dentro de Adminitracion en el formulario de mensajes que está dentro del pedido del cliente, como el que adjunto en la imagen.

He creado un override de view.tpl (override/controllers/admin/templates/orders/helpers/view/view.tpl)

He añadido el siguiente código en la línea 869:



{* TODO fileupload *}
<div class="form-group">
<label class="control-label col-lg-3">{l s='Captura de pantalla'}</label>
<div class="col-lg-9 form-control-file">
  <input type="file" name="filetoclient" class="form-control form-control-file">
</div>
</div>
{* End fileupload *}

Y se muestra correctamente.

Pero necesito que incluya ese archivo en el email. 

Alguna idea de que controlador tengo que modificar para ello? No he encontrado mucha info

Muchas gracias

 

Version Prestashop: 1.7.6.7
Theme: StarterTheme modificado https://github.com/PrestaShop/StarterTheme/

 

 

form-mesage.png

Hola jat, he probado lo que sugieres porque en mi caso en la tienda que llevo es necesario enviar un comprobante de envío (recibo) de que el paquete fue enviado al cliente y visualmente aparece la opcion de seleccionar una imagen pero me he dado cuenta de que no envía ninguna imagen. Ni al correo del cliente ni en la página de seguimiento de pedidos https://websiteejemplo.com/historial-compra 

 

image.png.b89950355b58b6c132ae79e3fc479f96.png

Da para adjuntar el archivo y todo ok pero al enviar el mensaje no envía el archivo adjunto

image.png.36bef26152ee6d0c227c39f30c709db3.png

Al cliente le aparece solo el texto y no el archivo como tal

image.png.5403e2cc98002bbf1e70bb78f82a3167.png

 

¿Has conseguido solucionarlo? ya he buscado por todas partes pero este es el unico post que encuentro sobre el tema

Edited by Marcia Pereira (see edit history)
Link to comment
Share on other sites

  • 1 year later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...