Jump to content

superskyman100

Members
  • Posts

    321
  • Joined

  • Last visited

Everything posted by superskyman100

  1. Bonjour à tous, Encore une question de débutant, désolé, mais j'aurais besoin d'éclaircissements sur la fonction "Order Settings>guest checkout" et la page "guest tracking" associée Ce que je comprends : la page "guest tracking" permet d'avoir un aperçu de l'état de la commande pour un(e) client(e) qui n'a pas désiré s'enregistrer via email et mot de passe. Or, lorsque je vais sur la page 'guest tracking' un email est requis. Celà ne me semble pas très logique.... Mais je pense je dois louper une case. Donc soit je ne comprends pas bien la fonctionnalité.... Soit, sur la page "guest tracking", enlever l'obligation de renseigner l'email de sorte que le/la client(e) puisse juste entrer son numéro de commande pour savoir ou en est sa commande. Question subsidiaire : quelles informations sont fournies après renseignement des champs ? Etat de la commande (en préparation, en cours de livraison, livrée) ? Merci pour votre aide !
  2. Hi guys, Problem with my category page, the PS_Faceted Search module 'hides' the brand names of my products Any fix ? See screenshots Thanks PS 1.7.6.3 Facetedsearch 3.4.1
  3. Bonjour à tous, re-BUG ? Probleme de design/homogeneite sur ma page categorie : le module PS_faceted-search 'efface' le nom de la marque dans les infos produit. Si je desactive Faceted-search, le nom des marques reapparait comme par miracle................... Une idée pour corriger ce probleme ?... Merci PS 1.7.6.3 Faceted search 3.4.1
  4. ...mmm... et si c'est un bug plus profond ?.... pas rassurant cette affaire... Ok ...je remonte le bug.... Merci de votre reponse
  5. Bonjour, Bon, probablement une question de debutant, mais je demande juste ici si j'ai des raisons de m'inquieter si le SEO preview de mes categories est systematiquement indique en anglais, independamment des langues choisies... Ex : https://www.sexy-cherry.com/en/21-notti-corpo Ici le lien vers la categorie traduite en Italien avec /en/... ca fait un peu tache... Un conseil une idee ? Merci !
  6. Cà c'est sur et certain !! +1 Ca par contre, faudra aller vérifier dans les fichiers S de Prestashop... Je me sens pas en confiance non plus.... sauf que je suis pas assez calé pour éditer les fichiers en CSS + HTML... et en plus j'ai six langues à traduire, donc une montagne de travail... le pseudo-editeur PS (que j'ai rendu 'opérationnel' avec le module TinyMCE, merci au passage au dev qui est super clair) me sert donc un peu quand même (même si y'a plein de comportements étranges à l'approche des hyperliens etc...) Merci en tous cas pour tes éclaircissements et conseils. Bonne journée 🙏
  7. Oui voila c'est exactement ce que je veux dire, en language précis et décodé. Ok, je déduis de ton message qu'un bon enmoustachage suffit... Super. Enfin une réponse... merci. Ok. Bon vérifier ça d'avance m'a l'air un peu technique... J'imagine le bon moyen de tester mes mails avant mise en prod sera de creer qq commandes 'factices/d'essai', et si probleme, aller chercher dans le code... ? Si tu as une autre méthode - multilangues - je suis prenneur. Voila merci pour ta réponse, et desolé pour mes gémissements, mais les emails c un peu la traversée du désert... Bonne journée et merci encore
  8. Bonjour, PS 1.7.6 Une bouteille de plus a la mer... avec peu d'espoir de reponse, j'imagine les moderateurs auront leur mot a dire... En tout etat de cause, les emails sous PS, c'est l'enfer, mais vu que j'ai pas le choix... Je teste donc mes mails (impossible de tester toutes les langues semble-t-il....) pour voir la mise ne page et savoir si les variables repondent... Or, lorsque je vais dans Design > Emails > Previews, et que j'envoie des mails de test.. je me retrouve avec des mails truffés de {variable} ... Ex : Moralité : impossible de me sentir en zone de confort; rien de chez rien n'indique que les variables repondent; ou pas... Par ailleurs la refonte de la mise en page; je le crains, risque d'alterer le caractère variable des {variables} en HTML.... vrai, faux... ? Bref, completement perdu dans ce truc de geek, j'aimerai vendre, mais il semble que PS soit plus configuré pour faire perdre du temps et faire acheter des modules que pour faciliter la vie des utilisateurs ...
  9. Hello NPO, i'd like to test the other languages than the default one, but i don't know how to do... This emails interface of Prestashop is definitely counter intuitive.... i'm not sure i can do that. When i click on 'generating emails' button with another language : 1- i badly cross fingers not to overwrite the work i already did on templates in the translations... i have an acknowledgment... but i don't see the generated emails anywhere... 🤔 2- seems that my templates are not modified (for the best, i don't want to loose them because of a bad interface) ..................
  10. Thank you very much for your understanding, that's very nice man, i badly need help... 🤕 Firstly, i'd like to correctly write the variables in the template, if possible without having to verify them all manually through the NPO method (which is ok, but cannot be used in ALL languages - only the default language can be tested - and which will take me years, cause i have 6 languages to arranges/test/verify). I would prefer to do RIGHT directly in the templates. 1/ do you think that just putting the brackets, {xxxx}, is enough to 'tell' the templates that 'xxxx' is a variable ? Or should i check/do something else ? 2/ yes, we can see what to do with some variables that are already in the templates, but not declared in the mail.php files. SQL query ok, it will be very usefull for the future Thanks again
  11. Nope. D. Tengler told me there shouldn't be such a variable, so i have no idea what this template is doing in my core emails translations... Another strange thing in the PS world ?...
  12. I'm not speaking about you man, thanks for your help !.... I'm speaking about the general situation. We need some e-commerce plateform that helps us to make business. I'm spending weeks figuring out how to debug the stuff here and there. Not exactly what any user should expect from an e-commerce platform. I'm not a programmer, but hopefully curious enough to get into the code if needed.... But i just would like to avoid that cause I have no time to waste... Anyway, NO CHOICE, and each difficulty is a good way to learn... Now i'm just trying to figure out how the email solution works, and test it, cause i need something reliable and that i can understand > control. So, what should i do to achieve a correct 'encoding' of my translated emails, and test them correctly please ? Thanks
  13. I really don't get why i should get into the code to make the emails templates work... I want to do business, not programming... Anyway, no choice.... So i made the search on the files, seems that this variable isn't defined (even if it is something included in the templates)
  14. <?php /** * 2007-2019 PrestaShop and Contributors * * NOTICE OF LICENSE * * This source file is subject to the Open Software License (OSL 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: * https://opensource.org/licenses/OSL-3.0 * 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 https://www.prestashop.com for more information. * * @author PrestaShop SA <[email protected]> * @copyright 2007-2019 PrestaShop SA and Contributors * @license https://opensource.org/licenses/OSL-3.0 Open Software License (OSL 3.0) * International Registered Trademark & Property of PrestaShop SA */ /** * Class MailCore. */ class MailCore extends ObjectModel { public $id; /** @var string Recipient */ public $recipient; /** @var string Template */ public $template; /** @var string Subject */ public $subject; /** @var int Language ID */ public $id_lang; /** @var int Timestamp */ public $date_add; /** * @see ObjectModel::$definition */ public static $definition = [ 'table' => 'mail', 'primary' => 'id_mail', 'fields' => [ 'recipient' => [ 'type' => self::TYPE_STRING, 'validate' => 'isEmail', 'copy_post' => false, 'required' => true, 'size' => 255, ], 'template' => [ 'type' => self::TYPE_STRING, 'validate' => 'isTplName', 'copy_post' => false, 'required' => true, 'size' => 62, ], 'subject' => [ 'type' => self::TYPE_STRING, 'validate' => 'isMailSubject', 'copy_post' => false, 'required' => true, 'size' => 255, ], 'id_lang' => [ 'type' => self::TYPE_INT, 'validate' => 'isUnsignedId', 'copy_post' => false, 'required' => true, ], 'date_add' => [ 'type' => self::TYPE_DATE, 'validate' => 'isDate', 'copy_post' => false, 'required' => true, ], ], ]; /** * Mail content type. */ const TYPE_HTML = 1; const TYPE_TEXT = 2; const TYPE_BOTH = 3; /** * Send mail under SMTP server. */ const METHOD_SMTP = 2; /** * Disable mail, will return immediately after calling send method. */ const METHOD_DISABLE = 3; /** * Send Email. * * @param int $idLang Language ID of the email (to translate the template) * @param string $template Template: the name of template not be a var but a string ! * @param string $subject Subject of the email * @param string $templateVars Template variables for the email * @param string $to To email * @param string $toName To name * @param string $from From email * @param string $fromName To email * @param array $fileAttachment array with three parameters (content, mime and name). * You can use an array of array to attach multiple files * @param bool $mode_smtp SMTP mode (deprecated) * @param string $templatePath Template path * @param bool $die Die after error * @param int $idShop Shop ID * @param string $bcc Bcc recipient address. You can use an array of array to send to multiple recipients * @param string $replyTo Reply-To recipient address * @param string $replyToName Reply-To recipient name * * @return bool|int Whether sending was successful. If not at all, false, otherwise amount of recipients succeeded. */ public static function send( $idLang, $template, $subject, $templateVars, $to, $toName = null, $from = null, $fromName = null, $fileAttachment = null, $mode_smtp = null, $templatePath = _PS_MAIL_DIR_, $die = false, $idShop = null, $bcc = null, $replyTo = null, $replyToName = null ) { if (!$idShop) { $idShop = Context::getContext()->shop->id; } $hookBeforeEmailResult = Hook::exec( 'actionEmailSendBefore', [ 'idLang' => &$idLang, 'template' => &$template, 'subject' => &$subject, 'templateVars' => &$templateVars, 'to' => &$to, 'toName' => &$toName, 'from' => &$from, 'fromName' => &$fromName, 'fileAttachment' => &$fileAttachment, 'mode_smtp' => &$mode_smtp, 'templatePath' => &$templatePath, 'die' => &$die, 'idShop' => &$idShop, 'bcc' => &$bcc, 'replyTo' => &$replyTo, ], null, true ); if ($hookBeforeEmailResult === null) { $keepGoing = false; } else { $keepGoing = array_reduce( $hookBeforeEmailResult, function ($carry, $item) { return ($item === false) ? false : $carry; }, true ); } if (!$keepGoing) { return true; } if (is_numeric($idShop) && $idShop) { $shop = new Shop((int) $idShop); } $configuration = Configuration::getMultiple( [ 'PS_SHOP_EMAIL', 'PS_MAIL_METHOD', 'PS_MAIL_SERVER', 'PS_MAIL_USER', 'PS_MAIL_PASSWD', 'PS_SHOP_NAME', 'PS_MAIL_SMTP_ENCRYPTION', 'PS_MAIL_SMTP_PORT', 'PS_MAIL_TYPE', ], null, null, $idShop ); // Returns immediately if emails are deactivated if ($configuration['PS_MAIL_METHOD'] == self::METHOD_DISABLE) { return true; } // Hook to alter template vars Hook::exec( 'sendMailAlterTemplateVars', [ 'template' => $template, 'template_vars' => &$templateVars, ] ); if (!isset($configuration['PS_MAIL_SMTP_ENCRYPTION']) || Tools::strtolower($configuration['PS_MAIL_SMTP_ENCRYPTION']) === 'off' ) { $configuration['PS_MAIL_SMTP_ENCRYPTION'] = false; } if (!isset($configuration['PS_MAIL_SMTP_PORT'])) { $configuration['PS_MAIL_SMTP_PORT'] = 'default'; } /* * Sending an e-mail can be of vital importance for the merchant, when his password * is lost for example, so we must not die but do our best to send the e-mail. */ if (!isset($from) || !Validate::isEmail($from)) { $from = $configuration['PS_SHOP_EMAIL']; } if (!Validate::isEmail($from)) { $from = null; } // $from_name is not that important, no need to die if it is not valid if (!isset($fromName) || !Validate::isMailName($fromName)) { $fromName = $configuration['PS_SHOP_NAME']; } if (!Validate::isMailName($fromName)) { $fromName = null; } /* * It would be difficult to send an e-mail if the e-mail is not valid, * so this time we can die if there is a problem. */ if (!is_array($to) && !Validate::isEmail($to)) { self::dieOrLog($die, 'Error: parameter "to" is corrupted'); return false; } // if bcc is not null, make sure it's a vaild e-mail if (null !== $bcc && !is_array($bcc) && !Validate::isEmail($bcc)) { self::dieOrLog($die, 'Error: parameter "bcc" is corrupted'); $bcc = null; } if (!is_array($templateVars)) { $templateVars = []; } // Do not crash for this error, that may be a complicated customer name if (is_string($toName) && !empty($toName) && !Validate::isMailName($toName)) { $toName = null; } if (!Validate::isTplName($template)) { self::dieOrLog($die, 'Error: invalid e-mail template'); return false; } if (!Validate::isMailSubject($subject)) { self::dieOrLog($die, 'Error: invalid e-mail subject'); return false; } /* Construct multiple recipients list if needed */ $message = \Swift_Message::newInstance(); if (is_array($to) && isset($to)) { foreach ($to as $key => $addr) { $addr = trim($addr); if (!Validate::isEmail($addr)) { self::dieOrLog($die, 'Error: invalid e-mail address'); return false; } if (is_array($toName) && isset($toName[$key])) { $addrName = $toName[$key]; } else { $addrName = $toName; } $addrName = ($addrName == null || $addrName == $addr || !Validate::isGenericName($addrName)) ? '' : self::mimeEncode($addrName); $message->addTo(self::toPunycode($addr), $addrName); } $toPlugin = $to[0]; } else { /* Simple recipient, one address */ $toPlugin = $to; $toName = (($toName == null || $toName == $to) ? '' : self::mimeEncode($toName)); $message->addTo(self::toPunycode($to), $toName); } if (isset($bcc) && is_array($bcc)) { foreach ($bcc as $addr) { $addr = trim($addr); if (!Validate::isEmail($addr)) { self::dieOrLog($die, 'Error: invalid e-mail address'); return false; } $message->addBcc(self::toPunycode($addr)); } } elseif (isset($bcc)) { $message->addBcc(self::toPunycode($bcc)); } try { /* Connect with the appropriate configuration */ if ($configuration['PS_MAIL_METHOD'] == self::METHOD_SMTP) { if (empty($configuration['PS_MAIL_SERVER']) || empty($configuration['PS_MAIL_SMTP_PORT'])) { self::dieOrLog($die, 'Error: invalid SMTP server or SMTP port'); return false; } $connection = \Swift_SmtpTransport::newInstance( $configuration['PS_MAIL_SERVER'], $configuration['PS_MAIL_SMTP_PORT'], $configuration['PS_MAIL_SMTP_ENCRYPTION'] ) ->setUsername($configuration['PS_MAIL_USER']) ->setPassword($configuration['PS_MAIL_PASSWD']); } else { $connection = \Swift_MailTransport::newInstance(); } if (!$connection) { return false; } $swift = \Swift_Mailer::newInstance($connection); /* Get templates content */ $iso = Language::getIsoById((int) $idLang); $isoDefault = Language::getIsoById((int) Configuration::get('PS_LANG_DEFAULT')); $isoArray = []; if ($iso) { $isoArray[] = $iso; } if ($isoDefault && $iso !== $isoDefault) { $isoArray[] = $isoDefault; } if (!in_array('en', $isoArray)) { $isoArray[] = 'en'; } $moduleName = false; // get templatePath if (preg_match('#' . $shop->physical_uri . 'modules/#', str_replace(DIRECTORY_SEPARATOR, '/', $templatePath)) && preg_match('#modules/([a-z0-9_-]+)/#ui', str_replace(DIRECTORY_SEPARATOR, '/', $templatePath), $res) ) { $moduleName = $res[1]; } foreach ($isoArray as $isoCode) { $isoTemplate = $isoCode . '/' . $template; $templatePath = self::getTemplateBasePath($isoTemplate, $moduleName, $shop->theme); if (!file_exists($templatePath . $isoTemplate . '.txt') && ( $configuration['PS_MAIL_TYPE'] == Mail::TYPE_BOTH || $configuration['PS_MAIL_TYPE'] == Mail::TYPE_TEXT ) ) { PrestaShopLogger::addLog( Context::getContext()->getTranslator()->trans( 'Error - The following e-mail template is missing: %s', [$templatePath . $isoTemplate . '.txt'], 'Admin.Advparameters.Notification' ) ); } elseif (!file_exists($templatePath . $isoTemplate . '.html') && ( $configuration['PS_MAIL_TYPE'] == Mail::TYPE_BOTH || $configuration['PS_MAIL_TYPE'] == Mail::TYPE_HTML ) ) { PrestaShopLogger::addLog( Context::getContext()->getTranslator()->trans( 'Error - The following e-mail template is missing: %s', [$templatePath . $isoTemplate . '.html'], 'Admin.Advparameters.Notification' ) ); } else { $templatePathExists = true; break; } } if (empty($templatePathExists)) { self::dieOrLog($die, 'Error - The following e-mail template is missing: %s', [$template]); return false; } $templateHtml = ''; $templateTxt = ''; Hook::exec( 'actionEmailAddBeforeContent', [ 'template' => $template, 'template_html' => &$templateHtml, 'template_txt' => &$templateTxt, 'id_lang' => (int) $idLang, ], null, true ); $templateHtml .= Tools::file_get_contents($templatePath . $isoTemplate . '.html'); $templateTxt .= strip_tags( html_entity_decode( Tools::file_get_contents($templatePath . $isoTemplate . '.txt'), null, 'utf-8' ) ); Hook::exec( 'actionEmailAddAfterContent', [ 'template' => $template, 'template_html' => &$templateHtml, 'template_txt' => &$templateTxt, 'id_lang' => (int) $idLang, ], null, true ); /* Create mail and attach differents parts */ $subject = '[' . Tools::safeOutput($configuration['PS_SHOP_NAME']) . '] ' . $subject; $message->setSubject($subject); $message->setCharset('utf-8'); /* Set Message-ID - getmypid() is blocked on some hosting */ $message->setId(Mail::generateId()); if (!($replyTo && Validate::isEmail($replyTo))) { $replyTo = $from; } if (isset($replyTo) && $replyTo) { $message->setReplyTo($replyTo, ($replyToName !== '' ? $replyToName : null)); } $templateVars = array_map(['Tools', 'htmlentitiesDecodeUTF8'], $templateVars); $templateVars = array_map(['Tools', 'stripslashes'], $templateVars); if (false !== Configuration::get('PS_LOGO_MAIL') && file_exists(_PS_IMG_DIR_ . Configuration::get('PS_LOGO_MAIL', null, null, $idShop)) ) { $logo = _PS_IMG_DIR_ . Configuration::get('PS_LOGO_MAIL', null, null, $idShop); } else { if (file_exists(_PS_IMG_DIR_ . Configuration::get('PS_LOGO', null, null, $idShop))) { $logo = _PS_IMG_DIR_ . Configuration::get('PS_LOGO', null, null, $idShop); } else { $templateVars['{shop_logo}'] = ''; } } ShopUrl::cacheMainDomainForShop((int) $idShop); /* don't attach the logo as */ if (isset($logo)) { $templateVars['{shop_logo}'] = $message->embed(\Swift_Image::fromPath($logo)); } if ((Context::getContext()->link instanceof Link) === false) { Context::getContext()->link = new Link(); } $templateVars['{shop_name}'] = Tools::safeOutput($configuration['PS_SHOP_NAME']); $templateVars['{shop_url}'] = Context::getContext()->link->getPageLink( 'index', true, $idLang, null, false, $idShop ); $templateVars['{my_account_url}'] = Context::getContext()->link->getPageLink( 'my-account', true, $idLang, null, false, $idShop ); $templateVars['{guest_tracking_url}'] = Context::getContext()->link->getPageLink( 'guest-tracking', true, $idLang, null, false, $idShop ); $templateVars['{history_url}'] = Context::getContext()->link->getPageLink( 'history', true, $idLang, null, false, $idShop ); $templateVars['{color}'] = Tools::safeOutput(Configuration::get('PS_MAIL_COLOR', null, null, $idShop)); // Get extra template_vars $extraTemplateVars = []; Hook::exec( 'actionGetExtraMailTemplateVars', [ 'template' => $template, 'template_vars' => $templateVars, 'extra_template_vars' => &$extraTemplateVars, 'id_lang' => (int) $idLang, ], null, true ); $templateVars = array_merge($templateVars, $extraTemplateVars); $swift->registerPlugin(new \Swift_Plugins_DecoratorPlugin(array($toPlugin => $templateVars))); if ($configuration['PS_MAIL_TYPE'] == Mail::TYPE_BOTH || $configuration['PS_MAIL_TYPE'] == Mail::TYPE_TEXT ) { $message->addPart($templateTxt, 'text/plain', 'utf-8'); } if ($configuration['PS_MAIL_TYPE'] == Mail::TYPE_BOTH || $configuration['PS_MAIL_TYPE'] == Mail::TYPE_HTML ) { $message->addPart($templateHtml, 'text/html', 'utf-8'); } if ($fileAttachment && !empty($fileAttachment)) { // Multiple attachments? if (!is_array(current($fileAttachment))) { $fileAttachment = array($fileAttachment); } foreach ($fileAttachment as $attachment) { if (isset($attachment['content'], $attachment['name'], $attachment['mime'])) { $message->attach( \Swift_Attachment::newInstance()->setFilename( $attachment['name'] )->setContentType($attachment['mime']) ->setBody($attachment['content']) ); } } } /* Send mail */ $message->setFrom(array($from => $fromName)); // Hook to alter Swift Message before sending mail Hook::exec('actionMailAlterMessageBeforeSend', [ 'message' => &$message, ]); $send = $swift->send($message); ShopUrl::resetMainDomainCache(); if ($send && Configuration::get('PS_LOG_EMAILS')) { $mail = new Mail(); $mail->template = Tools::substr($template, 0, 62); $mail->subject = Tools::substr($subject, 0, 255); $mail->id_lang = (int) $idLang; $recipientsTo = $message->getTo(); $recipientsCc = $message->getCc(); $recipientsBcc = $message->getBcc(); if (!is_array($recipientsTo)) { $recipientsTo = []; } if (!is_array($recipientsCc)) { $recipientsCc = []; } if (!is_array($recipientsBcc)) { $recipientsBcc = []; } foreach (array_merge($recipientsTo, $recipientsCc, $recipientsBcc) as $email => $recipient_name) { /* @var Swift_Address $recipient */ $mail->id = null; $mail->recipient = Tools::substr($email, 0, 255); $mail->add(); } } return $send; } catch (\Swift_SwiftException $e) { PrestaShopLogger::addLog( 'Swift Error: ' . $e->getMessage(), 3, null, 'Swift_Message' ); return false; } } protected static function getTemplateBasePath($isoTemplate, $moduleName, $theme) { $basePathList = [ _PS_ROOT_DIR_ . '/themes/' . $theme->getName() . '/', _PS_ROOT_DIR_ . '/themes/' . $theme->get('parent') . '/', _PS_ROOT_DIR_, ]; if ($moduleName !== false) { $templateRelativePath = '/modules/' . $moduleName . '/mails/'; } else { $templateRelativePath = '/mails/'; } foreach ($basePathList as $base) { $templatePath = $base . $templateRelativePath; if (file_exists($templatePath . $isoTemplate . '.txt') || file_exists($templatePath . $isoTemplate . '.html')) { return $templatePath; } } return ''; } /** * @param $idMail Mail ID * * @return bool Whether removal succeeded */ public static function eraseLog($idMail) { return Db::getInstance()->delete('mail', 'id_mail = ' . (int) $idMail); } /** * @return bool */ public static function eraseAllLogs() { return Db::getInstance()->execute('TRUNCATE TABLE ' . _DB_PREFIX_ . 'mail'); } /** * Send a test email. * * @param bool $smtpChecked Is SMTP checked? * @param string $smtp_server SMTP Server hostname * @param string $content Content of the email * @param string $subject Subject of the email * @param bool $type Deprecated * @param string $to To email address * @param string $from From email address * @param string $smtpLogin SMTP login name * @param string $smtpPassword SMTP password * @param int $smtpPort SMTP Port * @param bool|string $smtpEncryption Encryption type. "off" or false disable encryption. * * @return bool|string True if succeeded, otherwise the error message */ public static function sendMailTest( $smtpChecked, $smtp_server, $content, $subject, $type, $to, $from, $smtpLogin, $smtpPassword, $smtpPort, $smtpEncryption ) { $result = false; try { if ($smtpChecked) { if (Tools::strtolower($smtpEncryption) === 'off') { $smtpEncryption = false; } $smtp = \Swift_SmtpTransport::newInstance($smtp_server, $smtpPort, $smtpEncryption) ->setUsername($smtpLogin) ->setPassword($smtpPassword); $swift = \Swift_Mailer::newInstance($smtp); } else { $swift = \Swift_Mailer::newInstance(\Swift_MailTransport::newInstance()); } $message = \Swift_Message::newInstance(); $message ->setFrom($from) ->setTo($to) ->setSubject($subject) ->setBody($content); if ($swift->send($message)) { $result = true; } } catch (\Swift_SwiftException $e) { $result = $e->getMessage(); } return $result; } /** * This method is used to get the translation for email Object. * For an object is forbidden to use htmlentities, * we have to return a sentence with accents. * * @param string $string raw sentence (write directly in file) * * @return mixed */ public static function l($string, $idLang = null, Context $context = null) { global $_LANGMAIL; if (!$context) { $context = Context::getContext(); } if ($idLang === null) { $idLang = (!isset($context->language) || !is_object($context->language)) ? (int) Configuration::get('PS_LANG_DEFAULT') : (int) $context->language->id; } $isoCode = Language::getIsoById((int) $idLang); $file_core = _PS_ROOT_DIR_ . '/mails/' . $isoCode . '/lang.php'; if (Tools::file_exists_cache($file_core) && empty($_LANGMAIL)) { include $file_core; } $fileTheme = _PS_THEME_DIR_ . 'mails/' . $isoCode . '/lang.php'; if (Tools::file_exists_cache($fileTheme)) { include $fileTheme; } if (!is_array($_LANGMAIL)) { return str_replace('"', '&quot;', $string); } $key = str_replace('\'', '\\\'', $string); return str_replace( '"', '&quot;', Tools::stripslashes( (array_key_exists($key, $_LANGMAIL) && !empty($_LANGMAIL[$key])) ? $_LANGMAIL[$key] : $string ) ); } /* Rewrite of Swift_Message::generateId() without getmypid() */ protected static function generateId($idstring = null) { $midparams = [ 'utctime' => gmstrftime('%Y%m%d%H%M%S'), 'randint' => mt_rand(), 'customstr' => (preg_match('/^(?<!\\.)[a-z0-9\\.]+(?!\\.)$/iD', $idstring) ? $idstring : 'swift'), 'hostname' => !empty($_SERVER['SERVER_NAME']) ? $_SERVER['SERVER_NAME'] : php_uname('n'), ]; return vsprintf('%s.%d.%[email protected]%s', $midparams); } /** * Check if a multibyte character set is used for the data. * * @param string $data Data * * @return bool Whether the string uses a multibyte character set */ public static function isMultibyte($data) { $length = Tools::strlen($data); for ($i = 0; $i < $length; ++$i) { if (ord(($data[$i])) > 128) { return true; } } return false; } /** * MIME encode the string. * * @param string $string The string to encode * @param string $charset The character set to use * @param string $newline The newline character(s) * * @return mixed|string MIME encoded string */ public static function mimeEncode($string, $charset = 'UTF-8', $newline = "\r\n") { if (!self::isMultibyte($string) && Tools::strlen($string) < 75) { return $string; } $charset = Tools::strtoupper($charset); $start = '=?' . $charset . '?B?'; $end = '?='; $sep = $end . $newline . ' ' . $start; $length = 75 - Tools::strlen($start) - Tools::strlen($end); $length = $length - ($length % 4); if ($charset === 'UTF-8') { $parts = []; $maxchars = floor(($length * 3) / 4); $stringLength = Tools::strlen($string); while ($stringLength > $maxchars) { $i = (int) $maxchars; $result = ord($string[$i]); while ($result >= 128 && $result <= 191) { $result = ord($string[--$i]); } $parts[] = base64_encode(Tools::substr($string, 0, $i)); $string = Tools::substr($string, $i); $stringLength = Tools::strlen($string); } $parts[] = base64_encode($string); $string = implode($sep, $parts); } else { $string = chunk_split(base64_encode($string), $length, $sep); $string = preg_replace('/' . preg_quote($sep) . '$/', '', $string); } return $start . $string . $end; } /** * Automatically convert email to Punycode. * * Try to use INTL_IDNA_VARIANT_UTS46 only if defined, else use INTL_IDNA_VARIANT_2003 * See https://wiki.php.net/rfc/deprecate-and-remove-intl_idna_variant_2003 * * @param string $to Email address * * @return string */ public static function toPunycode($to) { $address = explode('@', $to); if (empty($address[0]) || empty($address[1])) { return $to; } if (defined('INTL_IDNA_VARIANT_UTS46')) { return $address[0] . '@' . idn_to_ascii($address[1], 0, INTL_IDNA_VARIANT_UTS46); } /* * INTL_IDNA_VARIANT_2003 const will be removed in PHP 8. * See https://wiki.php.net/rfc/deprecate-and-remove-intl_idna_variant_2003 */ if (defined('INTL_IDNA_VARIANT_2003')) { return $address[0] . '@' . idn_to_ascii($address[1], 0, INTL_IDNA_VARIANT_2003); } return $address[0] . '@' . idn_to_ascii($address[1]); } /** * Generic function to dieOrLog with translations. * * @param bool $die Should die * @param string $message Message * @param array $templates Templates list * @param string $domain Translation domain */ protected static function dieOrLog( $die, $message, $templates = [], $domain = 'Admin.Advparameters.Notification' ) { Tools::dieOrLog( Context::getContext()->getTranslator()->trans( $message, $templates, $domain ), $die ); } }
  15. Well, that's a good way to test, but it will take me ages with 6 languages... Here one example (backoffice_order) : i'm not really able to know if the mail is ok or not... It seems that {firstname} is correctly interpreted >> 'Hi Eni' But {order-link} seems to lead nowhere am i right ?... If i go on the 'translations' module i have that : ... What should i do ?? ...
  16. Ok alors... Je vais voire ce que je peux faire... Merci bcp pour votre aide. 🙏
  17. Merci ! Honnetement je n'y comprends pas grand chose... Dois-je attendre une nouvelle version de PS pour gerer ce probleme ?... Sachant que je suis en train de reformater mes mails pour les rendre un peu plus attractifs, et que je tourne sur 6 langues ?...
  18. Hello, I'm a newbie on PS 1.7.6, and actually configuring the emails to make them look ok... The problem is that it's quite a though work, the behavior of the templates when i try to modify its content is very erratic... Anyway i need to add/suppress stuff to make my emails looking great. So i did some modifs (in 6 languages... 🥵) but now, i have a big doubt about my new templates... I'm not even sure the {variables} are still recognized by the email templates... How could i check that, and, in case my text editing was not good, how could i restore the 'value' of the variables ?
  19. Bonjour, Avez-vous du neuf sur ce sujet ??? Je suis egalement en misere par rapport a ce nouveau 'bug' prestashop.... Merci
  20. Bonjour, Je suis sur PS 1.7.6 Je dois traduire mes emails en six langues. Je vois sur les modules a traduire qu'il y a deux modules qui gerent la meme fonction : PS_reminder et Followup. Le truc, c'est que je ne peux pas traduire les emails de PS_reminder depuis l'interface des traductions, c'est bloqué... Mais je peux traduire 'followup'... Je ne sais pas de quelle manière les modules PS_reminder et Followup fonctionnent ensemble (ou pas....), ce que je sais, c'est que les deux modules apparaissent dans mes fichiers FTP, et le dossier followup n'affiche rien d'autre qu'un repertoire 'mails'. Le répertoire PS_reminder quant-a-lui est plus fourni (mais les emails ne sont pas modifiables...) Que dois-je faire ? Merci
  21. Hello, I'm on PS 1.7.6 1- I have to translate emails from the modules PS_reminder and/or Followup. These two modules are concomitant : which one is the 'good' one ?.... 2- I can modify the 'Followup' emails throughout the Translation module, but PS_reminder is like frozen, i can do nothing : should i translate the PS_reminder throughout another way, anyway, cause it's the module that is affected ? It seems the two modules are installed on my FTP, but i can see only one on my BO (namely ''Customer follow up v2.0.0) This looks messy, it seems that the stuff is doubled, i don't know what to do to fix that. Any idea ? Thanks guys !
  22. Bonjour, Problème relatif au multilangues : - le client envoie un message en ayant par exemple choisi sa langue en francais dans l'interface du shop - la reponse faite par le service client donne ceci : Comme vous pouvez le voir, le lien renvoie vers le site en... anglais................................. (langue par defaut du shop mais PAS du client) Dans les traductions le lien est défini par la variable {link} Cette variable est donc, de base, mal configurée pour assurer la continuité de la langue choisie par le client et dans laquelle il initie la communication avec le shop. Une solution ?.... Merci
×
×
  • Create New...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More