table = 'ets_rv_email_template'; $this->list_id = $this->table; $this->className = 'EtsRvEmailTemplate'; $this->list_simple_header = false; $this->show_toolbar = false; $this->list_no_link = true; $this->lang = false; $this->bulk_actions = array(); parent::__construct(); $this->addRowAction('edit'); $this->_default_pagination = 20; $this->_select = 'b.*, \'\' `content`'; $this->_join = ' INNER JOIN `' . _DB_PREFIX_ . 'ets_rv_email_template_lang` b ON a.id_ets_rv_email_template = b.id_ets_rv_email_template' . Shop::addSqlRestrictionOnLang('b') . ' AND b.id_lang = ' . (int)$this->context->language->id . ' LEFT JOIN `' . _DB_PREFIX_ . 'ets_rv_email_template_shop` ets ON (a.`id_ets_rv_email_template` = ets.`id_ets_rv_email_template` AND ets.id_shop=' . (int)$this->context->shop->id . ') '; //if (Shop::isFeatureActive()) Shop::addTableAssociation($this->table, ['type' => 'shop']); $this->fields_list = [ 'id_ets_rv_email_template' => [ 'title' => $this->l('ID', 'AdminEtsRVEmailTemplateController'), 'align' => 'center', 'class' => 'fixed-width-xs', 'filter_key' => 'a!id_ets_rv_email_template' ], 'template' => [ 'title' => $this->l('Template', 'AdminEtsRVEmailTemplateController'), 'align' => 'left', 'class' => 'fixed-width-lg', 'filter_key' => 'a!template' ], 'subject' => [ 'title' => $this->l('Subject', 'AdminEtsRVEmailTemplateController'), 'align' => 'left', 'filter_key' => 'b!subject' ], 'content' => [ 'title' => $this->l('Content', 'AdminEtsRVEmailTemplateController'), 'align' => 'left', 'filter_key' => 'content', 'havingFilter' => true, 'callback' => 'displayContent' ], 'active' => [ 'title' => $this->l('Is enabled', 'AdminEtsRVEmailTemplateController'), 'align' => 'center', 'filter_key' => 'a!active', 'type' => 'bool', 'active' => 'status', ] ]; $this->fields_options = [ 'general' => [ 'title' => $this->l('Email configs', 'AdminEtsRVEmailTemplateController'), 'fields' => [ 'ETS_RV_EMAIL_NOTIFICATIONS' => [ 'title' => $this->l('Email address(es) to receive notifications', 'AdminEtsRVEmailTemplateController'), 'type' => 'text', 'default' => Configuration::get('PS_SHOP_MAIL'), 'desc' => $this->l('Emails that you want to receive notifications, separated by a comma (,)', 'AdminEtsRVEmailTemplateController'), 'validate' => 'isEmailListSeparatedByComma', ], ], 'submit' => ['title' => $this->l('Save', 'AdminEtsRVEmailTemplateController')], ], ]; } public function setMedia($isNewTheme = false) { parent::setMedia($isNewTheme); Media::addJsDef([ 'PS_SHOP_LOGO' => EtsRVMail::getShopLogoMail($this->context->shop->id), 'PS_SHOP_URL' => $this->context->shop->getBaseURL(), 'ETS_RV_UNSUBSCRIBE_LABEL' => Configuration::get('ETS_RV_MAIL_UNSUBSCRIBE_TEXT', $this->context->language->id) ?: $this->l('Unsubscribe', 'AdminEtsRVEmailTemplateController'), ]); } public function initToolbar() { parent::initToolbar(); unset($this->toolbar_btn['new']['href']); } public function displayContent($content, $tr) { if (!isset($tr['template']) || trim($tr['template']) == '') return $content; $theme = ($this->module->is17 ? $this->context->shop->theme->getName() : $this->context->shop->getTheme()); $basePathList = array( _PS_ROOT_DIR_ . '/themes/' . $theme . '/modules/' . $this->module->name . '/mails/', $this->module->getLocalPath() . 'mails/', ); foreach ($basePathList as $path) { $iso_path = $path . $this->context->language->iso_code . '/' . $tr['template']; if (@file_exists($iso_path . '.html')) { $template = Tools::file_get_contents($iso_path . '.html'); preg_match('/]*?)>(.*?)<\/body>/s', $template, $matches); $content = strip_tags(isset($matches[0]) ? $matches[0] : $template); break; } } return $content !== '' ? str_replace('{tracking}', '', $content) : $content; } public function getTemplateFormVars() { $this->loadObject(); $this->tpl_form_vars['variables'] = EtsRVTools::getVariables($this->object->template); $this->tpl_form_vars['short_codes'] = EtsRVTools::getShortCodesInSubject($this->object->template); return parent::getTemplateFormVars(); } public function renderForm() { if (!$this->object = $this->loadObject()) return false; $subject = EtsRVTools::getInstance()->getSubjects($this->object->template); $this->fields_form = array( 'legend' => array( 'title' => $this->l('Email templates') . ($this->object->id > 0 ? ' #' . $this->object->id : ''), 'icon' => 'icon-envelop' ), 'input' => array( array( 'type' => 'hidden', 'label' => $this->l('Template'), 'name' => 'template', ), array( 'type' => 'switch', 'label' => $this->l('Enabled'), 'name' => 'active', 'values' => [ [ 'id' => 'active_on', 'value' => 1, 'label' => $this->l('Yes') ], [ 'id' => 'active_off', 'value' => 0, 'label' => $this->l('No') ] ], 'default_value' => 1, 'desc' => isset($subject['desc']) ? $subject['desc'] : $this->l('Enable or disable this email template'), ), array( 'type' => 'text', 'label' => $this->l('Subject'), 'name' => 'subject', 'lang' => true, 'required' => true, 'maxlength' => 500, ), array( 'type' => 'textarea', 'label' => $this->l('Content'), 'name' => 'content_html', 'lang' => true, 'required' => true, 'autoload_rte' => true, 'form_group_class' => 'template_type html', ), array( 'type' => 'textarea', 'label' => $this->l('Content'), 'name' => 'content_txt', 'lang' => true, 'required' => true, 'form_group_class' => 'template_type txt', ), array( 'type' => 'textarea', 'label' => $this->l('Content full'), 'name' => 'content_html_full', 'lang' => true, 'form_group_class' => 'content_html_full', ) ) ); if (Shop::isFeatureActive() && Shop::getContext() == Shop::CONTEXT_ALL) { $this->fields_form['input'][] = array( 'type' => 'shop', 'label' => $this->l('Shop association'), 'name' => 'checkBoxShopAsso', ); } $this->fields_form['submit'] = array( 'title' => $this->l('Save'), ); $this->fields_form['buttons'] = [ 'save-and-stay' => [ 'title' => $this->l('Save and stay', 'Admin.Catalog.Feature'), 'name' => 'submitAdd' . $this->table . 'AndStay', 'type' => 'submit', 'class' => 'btn btn-default pull-right', 'icon' => 'process-icon-save', ], ]; return parent::renderForm(); } public function getFieldsValue($obj) { /** @var EtsRVEmailTemplate $obj */ parent::getFieldsValue($obj); $languages = Language::getLanguages(false); if ($languages) { $theme = ($this->module->is17 ? $this->context->shop->theme->getName() : $this->context->shop->getTheme()); $basePathList = array( _PS_ROOT_DIR_ . '/themes/' . $theme . '/modules/' . $this->module->name . '/mails/', $this->module->getLocalPath() . 'mails/', ); foreach ($languages as $l) { $id_lang = (int)$l['id_lang']; foreach ($basePathList as $path) { $flag = false; $iso_path = $path . $l['iso_code'] . '/' . $obj->template; if (@file_exists($iso_path . '.html')) { $template = Tools::file_get_contents($iso_path . '.html'); preg_match('#]*?)>(.*?)<\/body>#s', $template, $matches); $this->fields_value['content_html'][$id_lang] = !empty($matches[0]) ? $matches[0] : ''; $this->fields_value['content_html_full'][$id_lang] = preg_replace('#(]*?)>)(.*?)(<\/body>)#s', '$1@content@$4', $template); $flag = true; } if (@file_exists($iso_path . '.txt')) { $this->fields_value['content_txt'][$id_lang] = Tools::file_get_contents($iso_path . '.txt'); } if ($flag) break; } } } return $this->fields_value; } public function afterUpdate($object) { /** @var EtsRVEmailTemplate $object */ $res = parent::afterUpdate($object); $languages = Language::getLanguages(false); if ($languages) { $base_dir = _PS_ROOT_DIR_ . '/themes/' . ($this->module->is17 ? $this->context->shop->theme->getName() : $this->context->shop->getTheme()) . '/modules/' . $this->module->name . '/mails/'; if (!is_dir($base_dir)) mkdir($base_dir, 0755, true); foreach ($languages as $l) { $id_lang = (int)$l['id_lang']; $object->content_html[$id_lang] = Tools::getValue('content_html_' . $id_lang); $object->content_txt[$id_lang] = Tools::getValue('content_txt_' . $id_lang); $object->content_html_full[$id_lang] = Tools::getValue('content_html_full_' . $id_lang); $iso_path = $base_dir . $l['iso_code'] . '/'; if (!is_dir($iso_path)) mkdir($iso_path, 0755, true); if (isset($object->content_html[$id_lang])) @file_put_contents($iso_path . $object->template . '.html', preg_replace('/@content@/', $object->content_html[$id_lang], $object->content_html_full[$id_lang])); if (isset($object->content_txt[$id_lang])) @file_put_contents($iso_path . $object->template . '.txt', $object->content_txt[$id_lang]); } } return $res; } public function updateAssoShop($id_object) { if (Shop::isFeatureActive()) return $id_object; return parent::updateAssoShop($id_object); } public function beforeUpdateOptions() { parent::beforeUpdateOptions(); if ($this->fields_options) { $fields = $this->fields_options['general']['fields']; foreach ($fields as $key => $field) { if (isset($field['required']) && $field['required'] && !trim(Tools::getValue($key))) $this->errors[] = $field['title'] . ' ' . $this->l('is required', 'AdminEtsRVEmailTemplateController'); elseif (isset($field['validate']) && $field['validate'] && ($field_value = trim(Tools::getValue($key))) !== '') { $validate = trim($field['validate']); if (method_exists('Validate', $validate) && !Validate::$validate($field_value)) $this->errors[] = $field['title'] . ' ' . $this->l('is invalid', 'AdminEtsRVEmailTemplateController'); elseif (method_exists('EtsRVTools', $validate) && !EtsRVTools::$validate($field_value)) { $this->errors[] = $field['title'] . ' ' . $this->l('is invalid', 'AdminEtsRVEmailTemplateController'); } } } } } }