sirtonyo Posted June 23, 2014 Share Posted June 23, 2014 I've read many posts asking this: How to show product manufacturer and reference in mail that alerts from product restock.None has been solved. Can anybody help me with this? Thanks in advance, PS. Version 1.5.5 Link to comment Share on other sites More sharing options...
vekia Posted June 23, 2014 Share Posted June 23, 2014 in MailAlert.php file to $templateVars add another array elements '{product_manufacturer}' => $product->manufacturer_name, '{product_reference}' => $product->reference then in email template you will be able to use these variables. 1 Link to comment Share on other sites More sharing options...
sirtonyo Posted June 23, 2014 Author Share Posted June 23, 2014 I have already done that, but still not working. I've attach you my 'mail alerts.php' file so you can see it <?php /* * 2007-2014 PrestaShop * * NOTICE OF LICENSE * * This source file is subject to the Academic Free License (AFL 3.0) * that is bundled with this package in the file LICENSE.txt. * It is also available through the world-wide-web at this URL: * http://opensource.org/licenses/afl-3.0.php * If you did not receive a copy of the license and are unable to * obtain it through the world-wide-web, please send an email * to [email protected] so we can send you a copy immediately. * * DISCLAIMER * * Do not edit or add to this file if you wish to upgrade PrestaShop to newer * versions in the future. If you wish to customize PrestaShop for your * needs please refer to http://www.prestashop.com for more information. * * @author PrestaShop SA <[email protected]> * @copyright 2007-2014 PrestaShop SA * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) * International Registered Trademark & Property of PrestaShop SA */ if (!defined('_CAN_LOAD_FILES_')) exit; include_once(dirname(__FILE__).'/MailAlert.php'); class MailAlerts extends Module { private $_html = ''; private $_merchant_mails; private $_merchant_order; private $_merchant_oos; private $_customer_qty; private $_merchant_coverage; private $_product_coverage; const __MA_MAIL_DELIMITOR__ = "\n"; public function __construct() { $this->name = 'mailalerts'; $this->tab = 'administration'; $this->version = '3.3'; $this->author = 'PrestaShop'; $this->need_instance = 0; $this->bootstrap = true; parent::__construct(); if ($this->id) $this->init(); $this->displayName = $this->l('Mail alerts'); $this->description = $this->l('Sends e-mail notifications to customers and merchants.'); $this->confirmUninstall = $this->l('Are you sure you want to delete all customer notifications?'); } private function init() { $this->_merchant_mails = str_replace(',', self::__MA_MAIL_DELIMITOR__, strval(Configuration::get('MA_MERCHANT_MAILS'))); $this->_merchant_order = (int)Configuration::get('MA_MERCHANT_ORDER'); $this->_merchant_oos = (int)Configuration::get('MA_MERCHANT_OOS'); $this->_customer_qty = (int)Configuration::get('MA_CUSTOMER_QTY'); $this->_merchant_coverage = (int)Configuration::getGlobalValue('MA_MERCHANT_COVERAGE'); $this->_product_coverage = (int)Configuration::getGlobalValue('MA_PRODUCT_COVERAGE'); } public function install($delete_params = true) { if (!parent::install() || !$this->registerHook('actionValidateOrder') || !$this->registerHook('actionUpdateQuantity') || !$this->registerHook('actionProductOutOfStock') || !$this->registerHook('displayCustomerAccount') || !$this->registerHook('displayMyAccountBlock') || !$this->registerHook('actionProductDelete') || !$this->registerHook('actionProductAttributeDelete') || !$this->registerHook('actionProductAttributeUpdate') || !$this->registerHook('actionProductCoverage') || !$this->registerHook('displayHeader') ) return false; if ($delete_params) { Configuration::updateValue('MA_MERCHANT_ORDER', 1); Configuration::updateValue('MA_MERCHANT_OOS', 1); Configuration::updateValue('MA_CUSTOMER_QTY', 1); Configuration::updateValue('MA_MERCHANT_MAILS', Configuration::get('PS_SHOP_EMAIL')); Configuration::updateValue('MA_LAST_QTIES', (int)Configuration::get('PS_LAST_QTIES')); Configuration::updateGlobalValue('MA_MERCHANT_COVERAGE', 0); Configuration::updateGlobalValue('MA_PRODUCT_COVERAGE', 0); $sql = 'CREATE TABLE IF NOT EXISTS `'._DB_PREFIX_.MailAlert::$definition['table'].'` ( `id_customer` int(10) unsigned NOT NULL, `customer_email` varchar(128) NOT NULL, `id_product` int(10) unsigned NOT NULL, `id_product_attribute` int(10) unsigned NOT NULL, `id_shop` int(10) unsigned NOT NULL, `id_lang` int(10) unsigned NOT NULL, PRIMARY KEY (`id_customer`,`customer_email`,`id_product`,`id_product_attribute`,`id_shop`) ) ENGINE='._MYSQL_ENGINE_.' DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci'; if (!Db::getInstance()->execute($sql)) return false; } return true; } public function uninstall($delete_params = true) { if ($delete_params) { Configuration::deleteByName('MA_MERCHANT_ORDER'); Configuration::deleteByName('MA_MERCHANT_OOS'); Configuration::deleteByName('MA_CUSTOMER_QTY'); Configuration::deleteByName('MA_MERCHANT_MAILS'); Configuration::deleteByName('MA_LAST_QTIES'); Configuration::deleteByName('MA_MERCHANT_COVERAGE'); Configuration::deleteByName('MA_PRODUCT_COVERAGE'); if (!Db::getInstance()->execute('DROP TABLE IF EXISTS '._DB_PREFIX_.MailAlert::$definition['table'])) return false; } return parent::uninstall(); } public function reset() { if (!$this->uninstall(false)) return false; if (!$this->install(false)) return false; return true; } public function getContent() { $this->_html = ''; $this->_postProcess(); $this->_html .= $this->renderForm(); return $this->_html; } private function _postProcess() { $errors = array(); if (Tools::isSubmit('submitMailAlert')) { if (!Configuration::updateValue('MA_CUSTOMER_QTY', (int)Tools::getValue('MA_CUSTOMER_QTY'))) $errors[] = $this->l('Cannot update settings'); } else if (Tools::isSubmit('submitMAMerchant')) { $emails = strval(Tools::getValue('MA_MERCHANT_MAILS')); if (!$emails || empty($emails)) $errors[] = $this->l('Please type one (or more) e-mail address'); else { $emails = str_replace(',', self::__MA_MAIL_DELIMITOR__, $emails); $emails = explode(self::__MA_MAIL_DELIMITOR__, $emails); foreach ($emails as $k => $email) { $email = trim($email); if (!empty($email) && !Validate::isEmail($email)) { $errors[] = $this->l('Invalid e-mail:').' '.Tools::safeOutput($email); break; } elseif (!empty($email) && count($email) > 0) $emails[$k] = $email; else unset($emails[$k]); } $emails = implode(self::__MA_MAIL_DELIMITOR__, $emails); if (!Configuration::updateValue('MA_MERCHANT_MAILS', strval($emails))) $errors[] = $this->l('Cannot update settings'); elseif (!Configuration::updateValue('MA_MERCHANT_ORDER', (int)Tools::getValue('MA_MERCHANT_ORDER'))) $errors[] = $this->l('Cannot update settings'); elseif (!Configuration::updateValue('MA_MERCHANT_OOS', (int)Tools::getValue('MA_MERCHANT_OOS'))) $errors[] = $this->l('Cannot update settings'); elseif (!Configuration::updateValue('MA_LAST_QTIES', (int)Tools::getValue('MA_LAST_QTIES'))) $errors[] = $this->l('Cannot update settings'); elseif (!Configuration::updateGlobalValue('MA_MERCHANT_COVERAGE', (int)Tools::getValue('MA_MERCHANT_COVERAGE'))) $errors[] = $this->l('Cannot update settings'); elseif (!Configuration::updateGlobalValue('MA_PRODUCT_COVERAGE', (int)Tools::getValue('MA_PRODUCT_COVERAGE'))) $errors[] = $this->l('Cannot update settings'); } } if (count($errors) > 0) $this->_html .= $this->displayError(implode('<br />', $errors)); else $this->_html .= $this->displayConfirmation($this->l('Settings updated successfully')); $this->init(); } public function getAllMessages($id) { $messages = Db::getInstance()->executeS( ' SELECT `message` FROM `'._DB_PREFIX_.'message` WHERE `id_order` = '.(int)$id.' ORDER BY `id_message` ASC ' ); $result = array(); foreach ($messages as $message) { $result[] = $message['message']; } return implode('<br/>', $result); } public function hookActionValidateOrder($params) { if (!$this->_merchant_order || empty($this->_merchant_mails)) return; // Getting differents vars $context = Context::getContext(); $id_lang = (int)$context->language->id; $id_shop = (int)$context->shop->id; $currency = $params['currency']; $order = $params['order']; $customer = $params['customer']; $configuration = Configuration::getMultiple( array( 'PS_SHOP_EMAIL', 'PS_MAIL_METHOD', 'PS_MAIL_SERVER', 'PS_MAIL_USER', 'PS_MAIL_PASSWD', 'PS_SHOP_NAME', 'PS_MAIL_COLOR' ), $id_lang, null, $id_shop ); $delivery = new Address((int)$order->id_address_delivery); $invoice = new Address((int)$order->id_address_invoice); $order_date_text = Tools::displayDate($order->date_add); $carrier = new Carrier((int)$order->id_carrier); $message = $this->getAllMessages($order->id); if (!$message || empty($message)) $message = $this->l('No message'); $items_table = ''; $products = $params['order']->getProducts(); $customized_datas = Product::getAllCustomizedDatas((int)$params['cart']->id); Product::addCustomizationPrice($products, $customized_datas); foreach ($products as $key => $product) { $unit_price = $product['product_price_wt']; $customization_text = ''; if (isset($customized_datas[$product['product_id']][$product['product_attribute_id']])) { foreach ($customized_datas[$product['product_id']][$product['product_attribute_id']][$order->id_address_delivery] as $customization) { if (isset($customization['datas'][_CUSTOMIZE_TEXTFIELD_])) foreach ($customization['datas'][_CUSTOMIZE_TEXTFIELD_] as $text) $customization_text .= $text['name'].': '.$text['value'].'<br />'; if (isset($customization['datas'][_CUSTOMIZE_FILE_])) $customization_text .= count($customization['datas'][_CUSTOMIZE_FILE_]).' '.$this->l('image(s)').'<br />'; $customization_text .= '---<br />'; } if (method_exists('Tools', 'rtrimString')) $customization_text = Tools::rtrimString($customization_text, '---<br />'); else $customization_text = preg_replace('/---<br \/>$/', '', $customization_text); } $items_table .= '<tr style="background-color:'.($key % 2 ? '#DDE2E6' : '#EBECEE').';"> <td style="padding:0.6em 0.4em;">'.$product['product_reference'].'</td> <td style="padding:0.6em 0.4em;"> <strong>' .$product['product_name'].(isset($product['attributes_small']) ? ' '.$product['attributes_small'] : '').(!empty($customization_text) ? '<br />'.$customization_text : ''). '</strong> </td> <td style="padding:0.6em 0.4em; text-align:right;">'.Tools::displayPrice($unit_price, $currency, false).'</td> <td style="padding:0.6em 0.4em; text-align:center;">'.(int)$product['product_quantity'].'</td> <td style="padding:0.6em 0.4em; text-align:right;">'.Tools::displayPrice(($unit_price * $product['product_quantity']), $currency, false).'</td> </tr>'; } foreach ($params['order']->getCartRules() as $discount) { $items_table .= '<tr style="background-color:#EBECEE;"> <td colspan="4" style="padding:0.6em 0.4em; text-align:right;">'.$this->l('Voucher code:').' '.$discount['name'].'</td> <td style="padding:0.6em 0.4em; text-align:right;">-'.Tools::displayPrice($discount['value'], $currency, false).'</td> </tr>'; } if ($delivery->id_state) $delivery_state = new State((int)$delivery->id_state); if ($invoice->id_state) $invoice_state = new State((int)$invoice->id_state); // Filling-in vars for email $template_vars = array( '{firstname}' => $customer->firstname, '{lastname}' => $customer->lastname, '{email}' => $customer->email, '{product_manufacturer}' => $product->manufacturer_name, '{product_reference}' => $product->reference, '{delivery_block_txt}' => MailAlert::getFormatedAddress($delivery, "\n"), '{invoice_block_txt}' => MailAlert::getFormatedAddress($invoice, "\n"), '{delivery_block_html}' => MailAlert::getFormatedAddress( $delivery, '<br />', array( 'firstname' => '<span style="color:'.$configuration['PS_MAIL_COLOR'].'; font-weight:bold;">%s</span>', 'lastname' => '<span style="color:'.$configuration['PS_MAIL_COLOR'].'; font-weight:bold;">%s</span>' ) ), '{invoice_block_html}' => MailAlert::getFormatedAddress( $invoice, '<br />', array( 'firstname' => '<span style="color:'.$configuration['PS_MAIL_COLOR'].' font-weight:bold;">%s</span>', 'lastname' => '<span style="color:'.$configuration['PS_MAIL_COLOR'].'; font-weight:bold;">%s</span>' ) ), '{delivery_company}' => $delivery->company, '{delivery_firstname}' => $delivery->firstname, '{delivery_lastname}' => $delivery->lastname, '{delivery_address1}' => $delivery->address1, '{delivery_address2}' => $delivery->address2, '{delivery_city}' => $delivery->city, '{delivery_postal_code}' => $delivery->postcode, '{delivery_country}' => $delivery->country, '{delivery_state}' => $delivery->id_state ? $delivery_state->name : '', '{delivery_phone}' => $delivery->phone ? $delivery->phone : $delivery->phone_mobile, '{delivery_other}' => $delivery->other, '{invoice_company}' => $invoice->company, '{invoice_firstname}' => $invoice->firstname, '{invoice_lastname}' => $invoice->lastname, '{invoice_address2}' => $invoice->address2, '{invoice_address1}' => $invoice->address1, '{invoice_city}' => $invoice->city, '{invoice_postal_code}' => $invoice->postcode, '{invoice_country}' => $invoice->country, '{invoice_state}' => $invoice->id_state ? $invoice_state->name : '', '{invoice_phone}' => $invoice->phone ? $invoice->phone : $invoice->phone_mobile, '{invoice_other}' => $invoice->other, '{order_name}' => $order->reference, '{shop_name}' => $configuration['PS_SHOP_NAME'], '{date}' => $order_date_text, '{carrier}' => (($carrier->name == '0') ? $configuration['PS_SHOP_NAME'] : $carrier->name), '{payment}' => Tools::substr($order->payment, 0, 32), '{items}' => $items_table, '{total_paid}' => Tools::displayPrice($order->total_paid, $currency), '{total_products}' => Tools::displayPrice($order->getTotalProductsWithTaxes(), $currency), '{total_discounts}' => Tools::displayPrice($order->total_discounts, $currency), '{total_shipping}' => Tools::displayPrice($order->total_shipping, $currency), '{total_tax_paid}' => Tools::displayPrice(($order->total_products_wt - $order->total_products) + ($order->total_shipping_tax_incl - $order->total_shipping_tax_excl), $currency, false), '{total_wrapping}' => Tools::displayPrice($order->total_wrapping, $currency), '{currency}' => $currency->sign, '{message}' => $message ); $iso = Language::getIsoById($id_lang); $dir_mail = false; if (file_exists(dirname(__FILE__).'/mails/'.$iso.'/new_order.txt') && file_exists(dirname(__FILE__).'/mails/'.$iso.'/new_order.html') ) $dir_mail = dirname(__FILE__).'/mails/'; // Send 1 email by merchant mail, because Mail::Send doesn't work with an array of recipients $merchant_mails = explode(self::__MA_MAIL_DELIMITOR__, $this->_merchant_mails); if (file_exists(_PS_MAIL_DIR_.$iso.'/new_order.txt') && file_exists(_PS_MAIL_DIR_.$iso.'/new_order.html') ) $dir_mail = _PS_MAIL_DIR_; if ($dir_mail) foreach ($merchant_mails as $merchant_mail) { Mail::Send( $id_lang, 'new_order', sprintf(Mail::l('New order : #%d - %s', $id_lang), $order->id, $order->reference), $template_vars, $merchant_mail, null, $configuration['PS_SHOP_EMAIL'], $configuration['PS_SHOP_NAME'], null, null, $dir_mail, null, $id_shop ); } } public function hookActionProductOutOfStock($params) { if (!$this->_customer_qty || !Configuration::get('PS_STOCK_MANAGEMENT') || Product::isAvailableWhenOutOfStock($params['product']->out_of_stock)){ return; } $context = Context::getContext(); $id_product = (int)$params['product']->id; $id_product_attribute = 0; $id_customer = (int)$context->customer->id; if ((int)$context->customer->id <= 0) $this->context->smarty->assign('email', 1); elseif (MailAlert::customerHasNotification($id_customer, $id_product, $id_product_attribute, (int)$context->shop->id)) return; $this->context->smarty->assign( array( 'id_product' => $id_product, 'id_product_attribute' => $id_product_attribute ) ); return $this->display(__FILE__, 'product.tpl'); } public function hookActionUpdateQuantity($params) { $id_product = (int)$params['id_product']; $id_product_attribute = (int)$params['id_product_attribute']; $_prod = new Product($id_product); $quantity = (int)$params['quantity']; $context = Context::getContext(); $id_shop = (int)$context->shop->id; $id_lang = (int)$context->language->id; $product = new Product($id_product, false, $id_lang, $id_shop, $context); $product_has_attributes = $product->hasAttributes(); $configuration = Configuration::getMultiple( array( 'MA_LAST_QTIES', 'PS_STOCK_MANAGEMENT', 'PS_SHOP_EMAIL', 'PS_SHOP_NAME' ), null, null, $id_shop ); $ma_last_qties = (int)$configuration['MA_LAST_QTIES']; $check_oos = ($product_has_attributes && $id_product_attribute) || (!$product_has_attributes && !$id_product_attribute); if ($check_oos && $product->active == 1 && (int)$quantity <= $ma_last_qties && !(!$this->_merchant_oos || empty($this->_merchant_mails)) && $configuration['PS_STOCK_MANAGEMENT']) { $iso = Language::getIsoById($id_lang); $product_name = Product::getProductName($id_product, $id_product_attribute, $id_lang); $template_vars = array( '{qty}' => $quantity, '{last_qty}' => $ma_last_qties, '{product}' => $product_name ); if (file_exists(dirname(__FILE__).'/mails/'.$iso.'/productoutofstock.txt') && file_exists(dirname(__FILE__).'/mails/'.$iso.'/productoutofstock.html') ) { // Send 1 email by merchant mail, because Mail::Send doesn't work with an array of recipients $merchant_mails = explode(self::__MA_MAIL_DELIMITOR__, $this->_merchant_mails); foreach ($merchant_mails as $merchant_mail) { Mail::Send( $id_lang, 'productoutofstock', Mail::l('Product out of stock', $id_lang), $template_vars, $merchant_mail, null, strval($configuration['PS_SHOP_EMAIL']), strval($configuration['PS_SHOP_NAME']), null, null, dirname(__FILE__).'/mails/', false, $id_shop ); } } } if ($this->_customer_qty && $quantity > 0) MailAlert::sendCustomerAlert((int)$product->id, (int)$params['id_product_attribute']); } public function hookActionProductAttributeUpdate($params) { $sql = ' SELECT `id_product`, `quantity` FROM `'._DB_PREFIX_.'stock_available` WHERE `id_product_attribute` = '.(int)$params['id_product_attribute']; $result = Db::getInstance()->getRow($sql); if ($this->_customer_qty && $result['quantity'] > 0) MailAlert::sendCustomerAlert((int)$result['id_product'], (int)$params['id_product_attribute']); } public function hookDisplayCustomerAccount($params) { return $this->_customer_qty ? $this->display(__FILE__, 'my-account.tpl') : null; } public function hookDisplayMyAccountBlock($params) { return $this->hookDisplayCustomerAccount($params); } public function hookActionProductDelete($params) { $sql = ' DELETE FROM `'._DB_PREFIX_.MailAlert::$definition['table'].'` WHERE `id_product` = '.(int)$params['product']->id; Db::getInstance()->execute($sql); } public function hookActionAttributeDelete($params) { if ($params['deleteAllAttributes']) $sql = ' DELETE FROM `'._DB_PREFIX_.MailAlert::$definition['table'].'` WHERE `id_product` = '.(int)$params['id_product']; else $sql = ' DELETE FROM `'._DB_PREFIX_.MailAlert::$definition['table'].'` WHERE `id_product_attribute` = '.(int)$params['id_product_attribute'].' AND `id_product` = '.(int)$params['id_product']; Db::getInstance()->execute($sql); } public function hookActionProductCoverage($params) { // if not advanced stock management, nothing to do if (!Configuration::get('PS_ADVANCED_STOCK_MANAGEMENT')) return; // retrieves informations $id_product = (int)$params['id_product']; $id_product_attribute = (int)$params['id_product_attribute']; $warehouse = $params['warehouse']; $product = new Product($id_product); if (!Validate::isLoadedObject($product)) return; if (!$product->advanced_stock_management) return; // sets warehouse id to get the coverage if (!Validate::isLoadedObject($warehouse)) $id_warehouse = 0; else $id_warehouse = (int)$warehouse->id; // coverage of the product $warning_coverage = (int)Configuration::getGlobalValue('MA_PRODUCT_COVERAGE'); $coverage = StockManagerFactory::getManager()->getProductCoverage($id_product, $id_product_attribute, $warning_coverage, $id_warehouse); // if we need to send a notification if ($product->active == 1 && ($coverage < $warning_coverage) && !empty($this->_merchant_mails) && Configuration::getGlobalValue('MA_MERCHANT_COVERAGE') ) { $context = Context::getContext(); $id_lang = (int)$context->language->id; $id_shop = (int)$context->shop->id; $iso = Language::getIsoById($id_lang); $product_name = Product::getProductName($id_product, $id_product_attribute, $id_lang); $template_vars = array( '{current_coverage}' => $coverage, '{warning_coverage}' => $warning_coverage, '{product}' => pSQL($product_name) ); if (file_exists(dirname(__FILE__).'/mails/'.$iso.'/productcoverage.txt') && file_exists(dirname(__FILE__).'/mails/'.$iso.'/productcoverage.html') ) { // Send 1 email by merchant mail, because Mail::Send doesn't work with an array of recipients $merchant_mails = explode(self::__MA_MAIL_DELIMITOR__, $this->_merchant_mails); foreach ($merchant_mails as $merchant_mail) { Mail::Send( $id_lang, 'productcoverage', Mail::l('Stock coverage', $id_lang), $template_vars, $merchant_mail, null, strval(Configuration::get('PS_SHOP_EMAIL')), strval(Configuration::get('PS_SHOP_NAME')), null, null, dirname(__FILE__).'/mails/', null, $id_shop ); } } } } public function hookDisplayHeader($params) { $this->page_name = Dispatcher::getInstance()->getController(); if (in_array($this->page_name, array('product', 'account'))) { $this->context->controller->addJS($this->_path.'mailalerts.js'); $this->context->controller->addCSS($this->_path.'mailalerts.css', 'all'); } } public function renderForm() { $fields_form_1 = array( 'form' => array( 'legend' => array( 'title' => $this->l('Customer notifications'), 'icon' => 'icon-cogs' ), 'input' => array( array( 'type' => 'switch', 'is_bool' => true, //retro compat 1.5 'label' => $this->l('Product availability'), 'name' => 'MA_CUSTOMER_QTY', 'desc' => $this->l('Gives the customer the option of receiving a notification when an out-of-stock product is available again.'), 'values' => array( array( 'id' => 'active_on', 'value' => 1, 'label' => $this->l('Enabled') ), array( 'id' => 'active_off', 'value' => 0, 'label' => $this->l('Disabled') ) ), ), ), 'submit' => array( 'title' => $this->l('Save'), 'class' => 'btn btn-default pull-right', 'name' => 'submitMailAlert', ) ), ); $fields_form_2 = array( 'form' => array( 'legend' => array( 'title' => $this->l('Merchant notifications'), 'icon' => 'icon-cogs' ), 'input' => array( array( 'type' => 'switch', 'is_bool' => true, //retro compat 1.5 'label' => $this->l('New order'), 'name' => 'MA_MERCHANT_ORDER', 'desc' => $this->l('Receive a notification when an order is placed.'), 'values' => array( array( 'id' => 'active_on', 'value' => 1, 'label' => $this->l('Enabled') ), array( 'id' => 'active_off', 'value' => 0, 'label' => $this->l('Disabled') ) ), ), array( 'type' => 'switch', 'is_bool' => true, //retro compat 1.5 'label' => $this->l('Out of stock'), 'name' => 'MA_MERCHANT_OOS', 'desc' => $this->l('Receive a notification if the available quantity of a product is below the following threshold.'), 'values' => array( array( 'id' => 'active_on', 'value' => 1, 'label' => $this->l('Enabled') ), array( 'id' => 'active_off', 'value' => 0, 'label' => $this->l('Disabled') ) ), ), array( 'type' => 'text', 'label' => $this->l('Threshold'), 'name' => 'MA_LAST_QTIES', 'class' => 'fixed-width-xs', 'desc' => $this->l('Quantity for which a product is considered out of stock.'), ), array( 'type' => 'switch', 'is_bool' => true, //retro compat 1.5 'label' => $this->l('Coverage warning'), 'name' => 'MA_MERCHANT_COVERAGE', 'desc' => $this->l('Receive a notification when an order is placed.'), 'values' => array( array( 'id' => 'active_on', 'value' => 1, 'label' => $this->l('Enabled') ), array( 'id' => 'active_off', 'value' => 0, 'label' => $this->l('Disabled') ) ), ), array( 'type' => 'text', 'label' => $this->l('Coverage'), 'name' => 'MA_PRODUCT_COVERAGE', 'class' => 'fixed-width-xs', 'desc' => $this->l('Stock coverage, in days. Also, the stock coverage of a given product will be calculated based on this number.'), ), array( 'type' => 'textarea', 'cols' => 36, 'rows' => 4, 'label' => $this->l('E-mail addresses'), 'name' => 'MA_MERCHANT_MAILS', 'desc' => $this->l('One e-mail address per line (e.g. [email protected]).'), ), ), 'submit' => array( 'title' => $this->l('Save'), 'class' => 'btn btn-default pull-right', 'name' => 'submitMAMerchant', ) ), ); $helper = new HelperForm(); $helper->show_toolbar = false; $helper->table = $this->table; $lang = new Language((int)Configuration::get('PS_LANG_DEFAULT')); $helper->default_form_language = $lang->id; $helper->module = $this; $helper->allow_employee_form_lang = Configuration::get('PS_BO_ALLOW_EMPLOYEE_FORM_LANG') ? Configuration::get('PS_BO_ALLOW_EMPLOYEE_FORM_LANG') : 0; $helper->identifier = $this->identifier; $helper->submit_action = 'submitMailAlertConfiguration'; $helper->currentIndex = $this->context->link->getAdminLink('AdminModules', false).'&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name; $helper->token = Tools::getAdminTokenLite('AdminModules'); $helper->tpl_vars = array( 'fields_value' => $this->getConfigFieldsValues(), 'languages' => $this->context->controller->getLanguages(), 'id_language' => $this->context->language->id ); return $helper->generateForm(array($fields_form_1, $fields_form_2)); } public function getConfigFieldsValues() { return array( 'MA_CUSTOMER_QTY' => Tools::getValue('MA_CUSTOMER_QTY', Configuration::get('MA_CUSTOMER_QTY')), 'MA_MERCHANT_ORDER' => Tools::getValue('MA_MERCHANT_ORDER', Configuration::get('MA_MERCHANT_ORDER')), 'MA_MERCHANT_OOS' => Tools::getValue('MA_MERCHANT_OOS', Configuration::get('MA_MERCHANT_OOS')), 'MA_LAST_QTIES' => Tools::getValue('MA_LAST_QTIES', Configuration::get('MA_LAST_QTIES')), 'MA_MERCHANT_COVERAGE' => Tools::getValue('MA_MERCHANT_COVERAGE', Configuration::get('MA_MERCHANT_COVERAGE')), 'MA_PRODUCT_COVERAGE' => Tools::getValue('MA_PRODUCT_COVERAGE', Configuration::get('MA_PRODUCT_COVERAGE')), 'MA_MERCHANT_MAILS' => Tools::getValue('MA_MERCHANT_MAILS', Configuration::get('MA_MERCHANT_MAILS')), ); } } Kind regards Link to comment Share on other sites More sharing options...
vekia Posted June 23, 2014 Share Posted June 23, 2014 alter mailalert.php not mailalerts.php Link to comment Share on other sites More sharing options...
sirtonyo Posted June 23, 2014 Author Share Posted June 23, 2014 Its working for the reference but not for manufacturer name.Manufacturer's name doesnt appear in the email. any clue? Link to comment Share on other sites More sharing options...
sirtonyo Posted June 24, 2014 Author Share Posted June 24, 2014 Hi Vekia, '{product_manufacturer}' => $product->manufacturer_name, Still not working. Can you please help me? I've declared it as {reference} but isn working. :S Link to comment Share on other sites More sharing options...
hhcj Posted May 14, 2015 Share Posted May 14, 2015 works fine!! thank you vekia Link to comment Share on other sites More sharing options...
flohen Posted August 6, 2015 Share Posted August 6, 2015 hi vekia thank you i use presta 1.6.1 i do this on mailalerts.php because in mailalert.php i can t have a good result $template_vars = array( '{qty}' => $quantity, '{last_qty}' => $ma_last_qties, '{product}' => $product_name, '{product_manufacturer}' => $product->manufacturer_name, '{product_reference}' => $product->reference, '{product_supplier}' => $product->id_supplier, '{product_ref_attribute}' => $product_attribute->reference for 'product_manufacturer' doesn t work i change '$product->manufacturer_name,' with $product->id_manufacturer' but i have au number it s the same with '{product_supplier}' => $product->id_supplier, and doesn t work with '{product_ref_attribute}' => $product_attribute->reference can you help me thank you so much flo Link to comment Share on other sites More sharing options...
flohen Posted September 16, 2015 Share Posted September 16, 2015 hello someone have a solution? Link to comment Share on other sites More sharing options...
jose_ugs Posted January 7, 2021 Share Posted January 7, 2021 Here's what i did for my Presta 1.6.1.18 / MailAlert.php Inside the sendCustomerAlert function i altered the $template_vars like this: $manufacturer = new Manufacturer($product->id_manufacturer, $id_lang); $template_vars = array( '{product}' => (is_array($product->name) ? $product->name[$id_lang] : $product->name), '{manufacturer}' => $manufacturer->name, '{product_link}' => $product_link ); Since you dont get the Manufacturer's name from the existing $product, you need the $manufacturer line before the array declaration. And that's about it... Link to comment Share on other sites More sharing options...
Temerario Posted March 21, 2022 Share Posted March 21, 2022 Hi, I take this post a little old. I need to add all the properties of the variant to the product name to the email. You can help me? Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now