Jump to content

Edit History

Mercader Virtual

Mercader Virtual

This is a very good question. In fact, Prestashop should include a "Subject" field in the status form. It's a very simple improvement with a great benefit.

I implemented it in Prestashop 1.7.5.1.

Here's how I did it:

1.- Modify the database. Add a column to "order_state_lang" table. Name the column "email_subject". set it as varchar and not null.

2.- Edit /controllers/admin/AdminStatusesController.php and add a field to to the form. This is done by adding an array item in $this->fields_form, which is located in renderForm() method. This item should be inside the input array, as the rest of the form fields

 array(
    'type' => 'text',
    'label' => $this->trans('E-mail Subject', array(), 'Admin.Shopparameters.Feature'),
    'name' => 'email_subject',
    'lang' => true,
    'required' => false,
    'hint' => array(
    $this->trans('E-mail Subject (e.g. \'Your order has been shipped!\').', array(), 'Admin.Shopparameters.Help'),
    $this->trans('Invalid characters: numbers and', array(), 'Admin.Shopparameters.Help') . ' !<>,;?=+()@#"{}_$%:',
    ),
  ), 

3.- Add the field to the OrderState entity. Edit /classes/order/OrderState.php and add the following array entry to $definition['table']['fields']:

'email_subject' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isGenericName', 'required' => false, 'size' => 64),


4.- Finally, go to /classes/order/OrderHistory.php

Edit classes/order/OrderHistory.php. Inside method "sendEmail", replace:

SELECT osl.`template`, c.`lastname`, c.`firstname`, osl.`name` AS osname, c.`email`, os.`module_name`, os.`id_order_state`, os.`pdf_invoice`, os.`pdf_delivery`, o.`shipping_number`

With:

SELECT osl.`template`, c.`lastname`, c.`firstname`, osl.`name` AS osname, osl.`email_subject` AS subject, c.`email`, os.`module_name`, os.`id_order_state`, os.`pdf_invoice`, os.`pdf_delivery`, o.`shipping_number`


And inside the same method, look for this line:

$topic = $result['osname'];


And replace it with:

$topic = $result['subject'];

 

IMO, this should be a native functionality. Will be great if some core developer consider it for a future release.
 

Screen Shot 2020-05-14 at 11.00.52 PM.png

Mercader Virtual

Mercader Virtual

This is a very good question. In fact, Prestashop should include a "Subject" field in the status form. It's a very simple improvement with a great benefit.

I implemented it in Prestashop 1.7.5.1.

Here's how I did it:

1.- Modify the database. Add a column to "order_state_lang" table. Name the column "email_subject". set it as varchar and not null.

2.- Edit /controllers/admin/AdminStatusesController.php and add a field to to the form. This is done by adding an array item in $this->fields_form, which is located in renderForm() method. This item should be inside the input array, as the rest of the form fields

 array(
    'type' => 'text',
    'label' => $this->trans('E-mail Subject', array(), 'Admin.Shopparameters.Feature'),
    'name' => 'email_subject',
    'lang' => true,
    'required' => false,
    'hint' => array(
    $this->trans('E-mail Subject (e.g. \'Your order has been shipped!\').', array(), 'Admin.Shopparameters.Help'),
    $this->trans('Invalid characters: numbers and', array(), 'Admin.Shopparameters.Help') . ' !<>,;?=+()@#"{}_$%:',
    ),
  ), 

3.- Add the field to the OrderState entity. Edit /classes/order/OrderState.php and add the following array entry to $definition['table']['fields']:

'email_subject' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isGenericName', 'required' => false, 'size' => 64),


4.- Finally, go to /classes/order/OrderHistory.php

Edit classes/order/OrderHistory.php. Inside method "sendEmail", replace:

SELECT osl.`template`, c.`lastname`, c.`firstname`, osl.`name` AS osname, c.`email`, os.`module_name`, os.`id_order_state`, os.`pdf_invoice`, os.`pdf_delivery`, o.`shipping_number`

With:

SELECT osl.`template`, c.`lastname`, c.`firstname`, osl.`name` AS osname, osl.`email_subject` AS subject, c.`email`, os.`module_name`, os.`id_order_state`, os.`pdf_invoice`, os.`pdf_delivery`, o.`shipping_number`


And inside the same method, look for this line:

$topic = $result['osname'];


And replace it with:

$topic = $result['subject'];

 

IMO, this should be a native functionality. Will be great if some core developer consider it for a future release.
 

×
×
  • Create New...