fibo Posted July 3, 2017 Share Posted July 3, 2017 (edited) Hi everybody, I'm testing a local installation of Prestashop 1.6.1.14. I've a need, but I don't know exactly how to solve it. I need to show some options under "Subject heading" only for the users who have logged in. I imagine that is possible to make this filter through JS, but I can't write such script.Anyone could give me me please some advice?Thanks Edited July 6, 2017 by fibo (see edit history) Link to comment Share on other sites More sharing options...
shokinro Posted July 4, 2017 Share Posted July 4, 2017 You can add new field in following theme file /themes/default-bootstrap/contact-form.tpl you can add your script tin following file /themes/default-bootstrap/js/contact_form.js You can use the new field in following file or its override /controllers/front/ContactController.php /override/controllers/front/ContactController.php Link to comment Share on other sites More sharing options...
Scully Posted July 4, 2017 Share Posted July 4, 2017 (edited) I wouln't use javascript, instead, you can just take smarty within tpl. {if $logged} Show additional fields {/if} I think this is easier than just taking another component like javascript which would enhance complexity. However, the change of ContactController.php is necessary since otherwise you wonl't get the additional fields on your mail confirmation. And yes, at the very end you have to enhance your email template with the new value as well. These are .txt and .html files and you find them in the mail folder. Edited July 4, 2017 by Scully (see edit history) Link to comment Share on other sites More sharing options...
fibo Posted July 4, 2017 Author Share Posted July 4, 2017 Hi!Thanks to everybody.I've changed contact-form.tpl like this: <select id="id_contact" class="form-control" name="id_contact"> <option value="0">{l s='-- Choose --'}</option> {if $logged} {foreach from=$contacts item=contact} <option value="{$contact.id_contact|intval}"{if isset($smarty.request.id_contact) && $smarty.request.id_contact == $contact.id_contact} selected="selected"{/if}>{$contact.name|escape:'html':'UTF-8'}</option> {/foreach} {else} <option value="richiesta">Richiesta informazioni</option> {/if} </select> It graphically works and I can see different options, if I'm not logged.If I sent some messages, after this change, Prestashop show no error, but I can't able to receive any message on my email.What kind of change I have to do in the override of ContactController.php?I've a very little experience in PHP programming. Link to comment Share on other sites More sharing options...
Scully Posted July 4, 2017 Share Posted July 4, 2017 This is an override that contains the two additional fields custname and custphone. Both field names are referenced about 10 times in this field. Note: the field names must be the same as the ones defined in the .tpl file.Otherwise nothing will work. <?php /* * 2007-2016 PrestaShop * * CHANGES 27.06.2017 Schnellmann remove thread id from mail subject * ------- added name and phone fields * * * 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: * http://opensource.org/licenses/osl-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-2016 PrestaShop SA * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) * International Registered Trademark & Property of PrestaShop SA */ class ContactControllerCore extends FrontController { public $php_self = 'contact'; public $ssl = true; /** * Start forms process * @see FrontController::postProcess() */ public function postProcess() { if (Tools::isSubmit('submitMessage')) { $extension = array('.txt', '.rtf', '.doc', '.docx', '.pdf', '.zip', '.png', '.jpeg', '.gif', '.jpg'); $file_attachment = Tools::fileAttachment('fileUpload'); $message = Tools::getValue('message'); // Html entities is not usefull, iscleanHtml check there is no bad html tags. $custname = Tools::getValue('custname'); $custphone = Tools::getValue('custphone'); if (!($from = trim(Tools::getValue('from'))) || !Validate::isEmail($from)) { $this->errors[] = Tools::displayError('Invalid email address.'); } if (!$message) { $this->errors[] = Tools::displayError('The message cannot be blank.'); } if (!Validate::isCleanHtml($message)) { $this->errors[] = Tools::displayError('Invalid message'); } if (!($id_contact = (int)Tools::getValue('id_contact')) || !(Validate::isLoadedObject($contact = new Contact($id_contact, $this->context->language->id)))) { $this->errors[] = Tools::displayError('Please select a subject from the list provided. '); } if (!empty($file_attachment['name']) && $file_attachment['error'] != 0) { $this->errors[] = Tools::displayError('An error occurred during the file-upload process.'); } if (!empty($file_attachment['name']) && !in_array(Tools::strtolower(substr($file_attachment['name'], -4)), $extension) && !in_array(Tools::strtolower(substr($file_attachment['name'], -5)), $extension)) { $this->errors[] = Tools::displayError('Bad file extension'); } // Check customer name if (!$custname) { $this->errors[] = Tools::displayError('Name field is mandatory.'); } if (!count($this->errors)) { $customer = $this->context->customer; if (!$customer->id) { $customer->getByEmail($from); } $id_order = (int)$this->getOrder(); if (!(( ($id_customer_thread = (int)Tools::getValue('id_customer_thread')) && (int)Db::getInstance()->getValue(' SELECT cm.id_customer_thread FROM '._DB_PREFIX_.'customer_thread cm WHERE cm.id_customer_thread = '.(int)$id_customer_thread.' AND cm.id_shop = '.(int)$this->context->shop->id.' AND token = \''.pSQL(Tools::getValue('token')).'\'') ) || ( $id_customer_thread = CustomerThread::getIdCustomerThreadByEmailAndIdOrder($from, $id_order) ))) { $fields = Db::getInstance()->executeS(' SELECT cm.id_customer_thread, cm.id_contact, cm.id_customer, cm.id_order, cm.id_product, cm.email FROM '._DB_PREFIX_.'customer_thread cm WHERE email = \''.pSQL($from).'\' AND cm.id_shop = '.(int)$this->context->shop->id.' AND ('. ($customer->id ? 'id_customer = '.(int)$customer->id.' OR ' : '').' id_order = '.(int)$id_order.')'); $score = 0; foreach ($fields as $key => $row) { $tmp = 0; if ((int)$row['id_customer'] && $row['id_customer'] != $customer->id && $row['email'] != $from) { continue; } if ($row['id_order'] != 0 && $id_order != $row['id_order']) { continue; } if ($row['email'] == $from) { $tmp += 4; } if ($row['id_contact'] == $id_contact) { $tmp++; } if (Tools::getValue('id_product') != 0 && $row['id_product'] == Tools::getValue('id_product')) { $tmp += 2; } if ($tmp >= 5 && $tmp >= $score) { $score = $tmp; $id_customer_thread = $row['id_customer_thread']; } } } $old_message = Db::getInstance()->getValue(' SELECT cm.message FROM '._DB_PREFIX_.'customer_message cm LEFT JOIN '._DB_PREFIX_.'customer_thread cc on (cm.id_customer_thread = cc.id_customer_thread) WHERE cc.id_customer_thread = '.(int)$id_customer_thread.' AND cc.id_shop = '.(int)$this->context->shop->id.' ORDER BY cm.date_add DESC'); if ($old_message == $message) { $this->context->smarty->assign('alreadySent', 1); $contact->email = ''; $contact->customer_service = 0; } if ($contact->customer_service) { if ((int)$id_customer_thread) { $ct = new CustomerThread($id_customer_thread); $ct->status = 'open'; $ct->id_lang = (int)$this->context->language->id; $ct->id_contact = (int)$id_contact; $ct->id_order = (int)$id_order; if ($id_product = (int)Tools::getValue('id_product')) { $ct->id_product = $id_product; } $ct->update(); } else { $ct = new CustomerThread(); if (isset($customer->id)) { $ct->id_customer = (int)$customer->id; } $ct->id_shop = (int)$this->context->shop->id; $ct->id_order = (int)$id_order; if ($id_product = (int)Tools::getValue('id_product')) { $ct->id_product = $id_product; } $ct->id_contact = (int)$id_contact; $ct->id_lang = (int)$this->context->language->id; $ct->email = $from; $ct->status = 'open'; $ct->token = Tools::passwdGen(12); $ct->add(); } if ($ct->id) { $cm = new CustomerMessage(); $cm->id_customer_thread = $ct->id; $cm->message = $message; if (isset($file_attachment['rename']) && !empty($file_attachment['rename']) && rename($file_attachment['tmp_name'], _PS_UPLOAD_DIR_.basename($file_attachment['rename']))) { $cm->file_name = $file_attachment['rename']; @chmod(_PS_UPLOAD_DIR_.basename($file_attachment['rename']), 0664); } $cm->ip_address = (int)ip2long(Tools::getRemoteAddr()); $cm->user_agent = $_SERVER['HTTP_USER_AGENT']; if (!$cm->add()) { $this->errors[] = Tools::displayError('An error occurred while sending the message.'); } } else { $this->errors[] = Tools::displayError('An error occurred while sending the message.'); } } if (!count($this->errors)) { $var_list = array( '{order_name}' => '-', '{attached_file}' => '-', '{message}' => Tools::nl2br(stripslashes($message)), '{email}' => $from, '{product_name}' => '', '{custname}' => Tools::nl2br(stripslashes($custname)), '{custphone}' => Tools::nl2br(stripslashes($custphone)), ); if (isset($file_attachment['name'])) { $var_list['{attached_file}'] = $file_attachment['name']; } $id_product = (int)Tools::getValue('id_product'); if (isset($ct) && Validate::isLoadedObject($ct) && $ct->id_order) { $order = new Order((int)$ct->id_order); $var_list['{order_name}'] = $order->getUniqReference(); $var_list['{id_order}'] = (int)$order->id; } if ($id_product) { $product = new Product((int)$id_product); if (Validate::isLoadedObject($product) && isset($product->name[Context::getContext()->language->id])) { $var_list['{product_name}'] = $product->name[Context::getContext()->language->id]; } } if (empty($contact->email)) { Mail::Send($this->context->language->id, 'contact_form', ((isset($ct) && Validate::isLoadedObject($ct)) ? sprintf(Mail::l('Your message has been correctly sent'), $ct->id, $ct->token) : Mail::l('Your message has been correctly sent')), $var_list, $from, null, null, null, $file_attachment); } else { if (!Mail::Send($this->context->language->id, 'contact', Mail::l('Message from contact form').' [no_sync]', $var_list, $contact->email, $contact->name, null, null, $file_attachment, null, _PS_MAIL_DIR_, false, null, null, $from) || !Mail::Send($this->context->language->id, 'contact_form', ((isset($ct) && Validate::isLoadedObject($ct)) ? sprintf(Mail::l('Your message has been correctly sent'), $ct->id, $ct->token) : Mail::l('Your message has been correctly sent')), $var_list, $from, null, null, null, $file_attachment, null, _PS_MAIL_DIR_, false, null, null, $contact->email)) { $this->errors[] = Tools::displayError('An error occurred while sending the message.'); } } } if (count($this->errors) > 1) { array_unique($this->errors); } elseif (!count($this->errors)) { $this->context->smarty->assign('confirmation', 1); } } } } public function setMedia() { parent::setMedia(); $this->addCSS(_THEME_CSS_DIR_.'contact-form.css'); $this->addJS(_THEME_JS_DIR_.'contact-form.js'); $this->addJS(_PS_JS_DIR_.'validate.js'); } /** * Assign template vars related to page content * @see FrontController::initContent() */ public function initContent() { parent::initContent(); $this->assignOrderList(); $email = Tools::safeOutput(Tools::getValue('from', ((isset($this->context->cookie) && isset($this->context->cookie->email) && Validate::isEmail($this->context->cookie->email)) ? $this->context->cookie->email : ''))); $this->context->smarty->assign(array( 'errors' => $this->errors, 'email' => $email, 'fileupload' => Configuration::get('PS_CUSTOMER_SERVICE_FILE_UPLOAD'), 'max_upload_size' => (int)Tools::getMaxUploadSize() )); if (($id_customer_thread = (int)Tools::getValue('id_customer_thread')) && $token = Tools::getValue('token')) { $customer_thread = Db::getInstance()->getRow(' SELECT cm.* FROM '._DB_PREFIX_.'customer_thread cm WHERE cm.id_customer_thread = '.(int)$id_customer_thread.' AND cm.id_shop = '.(int)$this->context->shop->id.' AND token = \''.pSQL($token).'\' '); $order = new Order((int)$customer_thread['id_order']); if (Validate::isLoadedObject($order)) { $customer_thread['reference'] = $order->getUniqReference(); } $this->context->smarty->assign('customerThread', $customer_thread); } if ($this->context->customer->isLogged()) { $custname = $this->context->customer->firstname . ' ' . $this->context->customer->lastname . ' (' . $this->context->customer->id.')'; } else { $custname = html_entity_decode(Tools::getValue('custname')); } $this->context->smarty->assign(array( 'contacts' => Contact::getContacts($this->context->language->id), 'message' => html_entity_decode(Tools::getValue('message')), // Schnellmann 18.05.2017 add contact data to smarty 'custname' => $custname, 'custphone' => html_entity_decode(Tools::getValue('custphone') ), 'ps_shop_name' => Configuration::get('PS_SHOP_NAME'), 'ps_shop_addr1' => Configuration::get('PS_SHOP_ADDR1'), 'ps_shop_addr2' => Configuration::get('PS_SHOP_ADDR2'), 'ps_shop_code' => Configuration::get('PS_SHOP_CODE'), 'ps_shop_city' => Configuration::get('PS_SHOP_CITY'), 'ps_shop_phone' => Configuration::get('PS_SHOP_PHONE') )); $this->setTemplate(_PS_THEME_DIR_.'contact-form.tpl'); } /** * Assign template vars related to order list and product list ordered by the customer */ protected function assignOrderList() { if ($this->context->customer->isLogged()) { $this->context->smarty->assign('isLogged', 1); $products = array(); $result = Db::getInstance()->executeS(' SELECT id_order FROM '._DB_PREFIX_.'orders WHERE id_customer = '.(int)$this->context->customer->id.Shop::addSqlRestriction(Shop::SHARE_ORDER).' ORDER BY date_add'); $orders = array(); foreach ($result as $row) { $order = new Order($row['id_order']); $date = explode(' ', $order->date_add); $tmp = $order->getProducts(); foreach ($tmp as $key => $val) { $products[$row['id_order']][$val['product_id']] = array('value' => $val['product_id'], 'label' => $val['product_name']); } $orders[] = array('value' => $order->id, 'label' => $order->getUniqReference().' - '.Tools::displayDate($date[0], null) , 'selected' => (int)$this->getOrder() == $order->id); } $this->context->smarty->assign('orderList', $orders); $this->context->smarty->assign('orderedProductList', $products); } } protected function getOrder() { $id_order = false; if (!is_numeric($reference = Tools::getValue('id_order'))) { $reference = ltrim($reference, '#'); $orders = Order::getByReference($reference); if ($orders) { foreach ($orders as $order) { $id_order = (int)$order->id; break; } } } elseif (Order::getCartIdStatic((int)Tools::getValue('id_order'))) { $id_order = (int)Tools::getValue('id_order'); } return (int)$id_order; } } 1 Link to comment Share on other sites More sharing options...
fibo Posted July 5, 2017 Author Share Posted July 5, 2017 Hi scully, you've been very kind. Thank you. I've used your code to make my override. If I try to send a message when I'm not logged in, I receive the error "Please select a subject from the list provided"If I comment line 57-58-59 and try again to send a message, no error occurs, but I don't receive message on my e-mail. These three lines of codes make a control on the id fetched in the table of account? Link to comment Share on other sites More sharing options...
Scully Posted July 5, 2017 Share Posted July 5, 2017 You're welcome. Change the topic title to SOLVED and maybe like my answer if it helped to solve your issue. Link to comment Share on other sites More sharing options...
fibo Posted July 5, 2017 Author Share Posted July 5, 2017 Hi scully, I'm almost resolve my issue. I get only that error.Excuse my trivial question. How can i mark "SOLVED" the topic's title?I find the way only to edit the posts Link to comment Share on other sites More sharing options...
Scully Posted July 5, 2017 Share Posted July 5, 2017 Use the advanced editor and there you can change the topic title. Or used the button 'mark as answered'. Link to comment Share on other sites More sharing options...
fibo Posted July 5, 2017 Author Share Posted July 5, 2017 I'm feel like a duffer or a blind man. Under each post I see only: Quote MultiQuote Hide Edit Report Link to comment Share on other sites More sharing options...
Scully Posted July 5, 2017 Share Posted July 5, 2017 What about 'more reply options' ? Link to comment Share on other sites More sharing options...
fibo Posted July 5, 2017 Author Share Posted July 5, 2017 I access to the same editor with the same options.I gain only the possibility to attach a file. Link to comment Share on other sites More sharing options...
Scully Posted July 5, 2017 Share Posted July 5, 2017 Sorry, someone other to answer please. Link to comment Share on other sites More sharing options...
shokinro Posted July 6, 2017 Share Posted July 6, 2017 you have to edit your first message(post) of this topic (thread) and then click on "Use Full Editor", and then modify your Topic Title Link to comment Share on other sites More sharing options...
fibo Posted July 6, 2017 Author Share Posted July 6, 2017 Thanks 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