matrezz Posted September 30, 2013 Share Posted September 30, 2013 (edited) Hola, siguiendo http://victor-rodenas.com/2013/06/16/guia-anadir-nuevos-campos-al-formulario-de-contacto-en-prestashop-1-5/ Consigo añadir el campo pero algo raro pasa y mi nuevo campo se asigna a email y me da siempre. Hay 1 error dirección email inválida ya que el valor que pongo en el campo nuevo (telefono) es el q se asigna no se porque al campo email y evidentemente da fallos de que no es un mail. pongo los ficheros a ver si a simple vista veis el problema. class ContactControllerCore extends FrontController { public $php_self = 'contact'; public $ssl = true; /** * Start forms process * @see FrontController::postProcess() */ public function postProcess() { if (Tools::isSubmit('submitMessage')) { $fileAttachment = null; if (isset($_FILES['fileUpload']['name']) && !empty($_FILES['fileUpload']['name']) && !empty($_FILES['fileUpload']['tmp_name'])) { $extension = array('.txt', '.rtf', '.doc', '.docx', '.pdf', '.zip', '.png', '.jpeg', '.gif', '.jpg'); $filename = uniqid().substr($_FILES['fileUpload']['name'], -5); $fileAttachment['content'] = file_get_contents($_FILES['fileUpload']['tmp_name']); $fileAttachment['name'] = $_FILES['fileUpload']['name']; $fileAttachment['mime'] = $_FILES['fileUpload']['type']; } $message = Tools::getValue('message'); // Html entities is not usefull, iscleanHtml check there is no bad html tags. $tlf = Tools::getValue('tlf'); if (!($from = trim(Tools::getValue('from'))) || !Validate::isEmail($from)) $this->errors[] = Tools::displayError('Invalid email address.'); else if (!$message) $this->errors[] = Tools::displayError('The message cannot be blank.'); else if (!Validate::isCleanHtml($message)) $this->errors[] = Tools::displayError('Invalid message'); else 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. '); else if (!empty($_FILES['fileUpload']['name']) && $_FILES['fileUpload']['error'] != 0) $this->errors[] = Tools::displayError('An error occurred during the file-upload process.'); else if (!empty($_FILES['fileUpload']['name']) && !in_array(substr(Tools::strtolower($_FILES['fileUpload']['name']), -4), $extension) && !in_array(substr(Tools::strtolower($_FILES['fileUpload']['name']), -5), $extension)) $this->errors[] = Tools::displayError('Bad file extension'); else { $customer = $this->context->customer; if (!$customer->id) $customer->getByEmail($from); $contact = new Contact($id_contact, $this->context->language->id); 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, (int)Tools::getValue('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)(Tools::getValue('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 && Tools::getValue('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); if ($id_order = (int)Tools::getValue('id_order')) $ct->id_order = $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; if ($id_order = (int)Tools::getValue('id_order')) $ct->id_order = $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 = Tools::htmlentitiesUTF8($message); if (isset($filename) && rename($_FILES['fileUpload']['tmp_name'], _PS_MODULE_DIR_.'../upload/'.$filename)) $cm->file_name = $filename; $cm->ip_address = ip2long($_SERVER['REMOTE_ADDR']); $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, '{tlf}' => $tlf, ); if (isset($filename)) $var_list['{attached_file}'] = $_FILES['fileUpload']['name']; $id_order = (int)Tools::getValue('id_order'); if (isset($ct) && Validate::isLoadedObject($ct)) { if ($ct->id_order) $id_order = $ct->id_order; $subject = sprintf(Mail::l('Your message has been correctly sent #ct%1$s #tc%2$s'), $ct->id, $ct->token); } else $subject = Mail::l('Your message has been correctly sent'); if ($id_order) { $order = new Order((int)$id_order); $var_list['{order_name}'] = $order->getUniqReference(); $var_list['{id_order}'] = $id_order; } if (empty($contact->email)) Mail::Send($this->context->language->id, 'contact_form', $subject, $var_list, $from, null, null, null, $fileAttachment); else { if (!Mail::Send($this->context->language->id, 'contact', Mail::l('Message from contact form').' [no_sync]', $var_list, $contact->email, $contact->name, $from, ($customer->id ? $customer->firstname.' '.$customer->lastname : ''), $fileAttachment) || !Mail::Send($this->context->language->id, 'contact_form', $subject, $var_list, $from, null, $contact->email, $contact->name, $fileAttachment)) $this->errors[] = Tools::displayError('An error occurred while sending the message.'); } } if (count($this->errors) > 1) array_unique($this->errors); else $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'); } /** * 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, 'tlf' => $tlf, 'fileupload' => Configuration::get('PS_CUSTOMER_SERVICE_FILE_UPLOAD') )); if (($id_customer_thread = (int)Tools::getValue('id_customer_thread')) && $token = Tools::getValue('token')) { $customerThread = 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).'\' '); $this->context->smarty->assign('customerThread', $customerThread); } $this->context->smarty->assign(array( 'contacts' => Contact::getContacts($this->context->language->id), 'message' => html_entity_decode(Tools::getValue('message')) )); $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.' 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], $this->context->language->id), 'selected' => (int)Tools::getValue('id_order') == $order->id); } $this->context->smarty->assign('orderList', $orders); $this->context->smarty->assign('orderedProductList', $products); } } } y el tpl.. {capture name=path}{l s='Contact'}{/capture} <h1>{l s='Customer service'} - {if isset($customerThread) && $customerThread}{l s='Your reply'}{else}{l s='Contact us'}{/if}</h1> {if isset($confirmation)} <p>{l s='Your message has been successfully sent to our team.'}</p> <ul class="footer_links"> <li><a href="{$base_dir}"><img class="icon" alt="" src="{$img_dir}icon/home.gif"/></a><a href="{$base_dir}">{l s='Home'}</a></li> </ul> {elseif isset($alreadySent)} <p>{l s='Your message has already been sent.'}</p> <ul class="footer_links"> <li><a href="{$base_dir}"><img class="icon" alt="" src="{$img_dir}icon/home.gif"/></a><a href="{$base_dir}">{l s='Home'}</a></li> </ul> {else} <p class="bold">{l s='For questions about an order or for more information about our products'}.</p> {include file="$tpl_dir./errors.tpl"} <form action="{$request_uri|escape:'htmlall':'UTF-8'}" method="post" class="std form-horizontal" enctype="multipart/form-data"> <fieldset> <h3>{l s='send a message'}</h3> <div class="select control-group"> <label for="id_contact" class="control-label">{l s='Subject Heading'}</label> {if isset($customerThread.id_contact)} {foreach from=$contacts item=contact} {if $contact.id_contact == $customerThread.id_contact} <div class="controls"> <input type="text" id="contact_name" name="contact_name" value="{$contact.name|escape:'htmlall':'UTF-8'}" readonly="readonly" /> <input type="hidden" name="id_contact" value="{$contact.id_contact}" /> </div> {/if} {/foreach} </div> {else} <div class="controls"> <select id="id_contact" name="id_contact" onchange="showElemFromSelect('id_contact', 'desc_contact')"> <option value="0">{l s='-- Choose --'}</option> {foreach from=$contacts item=contact} <option value="{$contact.id_contact|intval}" {if isset($smarty.post.id_contact) && $smarty.post.id_contact == $contact.id_contact}selected="selected"{/if}>{$contact.name|escape:'htmlall':'UTF-8'}</option> {/foreach} </select> </div> </div> <div id="desc_contact0" class="desc_contact "> </div> {foreach from=$contacts item=contact} <div id="desc_contact{$contact.id_contact|intval}" class="desc_contact control-group" style="display:none;"> <div class="controls"> {$contact.description|escape:'htmlall':'UTF-8'} </div> </div> {/foreach} {/if} <div class="text control-group"> <label for="email" class="control-label">{l s='Email address'}</label> <div class="controls"> {if isset($customerThread.email)} <input type="text" id="email" name="from" value="{$customerThread.email|escape:'htmlall':'UTF-8'}" readonly="readonly" /> {else} <input type="text" id="email" name="from" value="{$email|escape:'htmlall':'UTF-8'}" /> {/if} </div> </div> <div class="text control-group"> <label for="tlf" class="control-label">Teléfono</label> <div class="controls"> {if isset($customerThread.tlf)} <input type="text" id="tlf" name="from" value="{$customerThread.tlf|escape:'htmlall':'UTF-8'}" readonly="readonly" /> {else} <input type="text" id="tlf" name="from" value="{$tlf|escape:'htmlall':'UTF-8'}" /> {/if} </div> </div> {if !$PS_CATALOG_MODE} {if (!isset($customerThread.id_order) || $customerThread.id_order > 0)} <div class="text select control-group"> <label for="id_order" class="control-label">{l s='Order reference'}</label> <div class="controls"> {if !isset($customerThread.id_order) && isset($isLogged) && $isLogged == 1} <select name="id_order" > <option value="0">{l s='-- Choose --'}</option> {foreach from=$orderList item=order} <option value="{$order.value|intval}" {if $order.selected|intval}selected="selected"{/if}>{$order.label|escape:'htmlall':'UTF-8'}</option> {/foreach} </select> {elseif !isset($customerThread.id_order) && !isset($isLogged)} <input type="text" name="id_order" id="id_order" value="{if isset($customerThread.id_order) && $customerThread.id_order > 0}{$customerThread.id_order|intval}{else}{if isset($smarty.post.id_order)}{$smarty.post.id_order|intval}{/if}{/if}" /> {elseif $customerThread.id_order > 0} <input type="text" name="id_order" id="id_order" value="{$customerThread.id_order|intval}" readonly="readonly" /> {/if} </div> </div> {/if} {if isset($isLogged) && $isLogged} <div class="text select control-group"> <label for="id_product" class="control-label">{l s='Product'}</label> <div class="controls"> {if !isset($customerThread.id_product)} {foreach from=$orderedProductList key=id_order item=products name=products} <select name="id_product" id="{$id_order}_order_products" class="product_select" style=" {if !$smarty.foreach.products.first} display:none; {/if}" {if !$smarty.foreach.products.first}disabled="disabled" {/if}> <option value="0">{l s='-- Choose --'}</option> {foreach from=$products item=product} <option value="{$product.value|intval}">{$product.label|escape:'htmlall':'UTF-8'}</option> {/foreach} </select> {/foreach} {elseif $customerThread.id_product > 0} <input type="text" name="id_product" id="id_product" value="{$customerThread.id_product|intval}" readonly="readonly" /> {/if} </div> </div> {/if} {/if} {if $fileupload == 1} <div class="text control-group"> <label class="control-label" for="fileUpload">{l s='Attach File'}</label> <div class="controls"> <input type="hidden" name="MAX_FILE_SIZE" value="2000000" /> <input type="file" name="fileUpload" id="fileUpload" /> </div> </div> {/if} <div class="textarea control-group"> <label class="control-label" for="message">{l s='Message'}</label> <div class="controls"> <textarea id="message" name="message" rows="15" cols="10">{if isset($message)}{$message|escape:'htmlall':'UTF-8'|stripslashes}{/if}</textarea> </div> </div> <div class="submit control-group"> <div class="controls"> <input type="submit" name="submitMessage" id="submitMessage" value="{l s='Send'}" class="button_large btn" onclick="$(this).hide();" /> </div> </div> </fieldset> </form> {/if} {$imprimirContenido->content} Gracias de antemano, seguro que es una tonteria. pero no lo veo creo q lo hago bien. la variable que añado es TLF. Por cierto como pregunta adicional, no consegui añadir la palabra Teléfono con internalización ya que al añadir Phone del modulo autenticacion no me lo pillaba... Edited October 4, 2013 by matrezz (see edit history) Link to comment Share on other sites More sharing options...
matrezz Posted October 1, 2013 Author Share Posted October 1, 2013 alguien puede ayudarme? Link to comment Share on other sites More sharing options...
Sergio Ruiz Posted October 1, 2013 Share Posted October 1, 2013 Mal todo o casi todo. Esto que has puesto en tu tpl: <div class="text control-group"> <label for="tlf" class="control-label">Teléfono</label> <div class="controls"> {if isset($customerThread.tlf)} <input type="text" id="tlf" name="from" value="{$customerThread.tlf|escape:'htmlall':'UTF-8'}" readonly="readonly" /> {else} <input type="text" id="tlf" name="from" value="{$tlf|escape:'htmlall':'UTF-8'}" /> {/if} </div> </div> Dejalo asi: <p class="text"> <label for="telefono">{l s='Telefonoillo'}</label> <input type="text" id="tlf" name="tlf" value="{if isset($tlf)}{$tlf|escape:'htmlall':'UTF-8'|stripslashes}{/if}" /> </p> Link to comment Share on other sites More sharing options...
Sergio Ruiz Posted October 1, 2013 Share Posted October 1, 2013 Despues esto: $var_list = array( '{order_name}' => '-', '{attached_file}' => '-', '{message}' => Tools::nl2br(stripslashes($message)), '{email}' => $from, '{tlf}' => $tlf, ); por esto $var_list = array( '{order_name}' => '-', '{attached_file}' => '-', '{message}' => Tools::nl2br(stripslashes($message)), '{email}' => $from, '{tlf}' => Tools::nl2br(stripslashes($tlf)) ); ---Despues esto: $this->context->smarty->assign(array( 'contacts' => Contact::getContacts($this->context->language->id), 'message' => html_entity_decode(Tools::getValue('message')) )); por esto $this->context->smarty->assign(array( 'contacts' => Contact::getContacts($this->context->language->id), 'message' => html_entity_decode(Tools::getValue('message')), 'tlf' => html_entity_decode(Tools::getValue('tlf')) )); Link to comment Share on other sites More sharing options...
Sergio Ruiz Posted October 1, 2013 Share Posted October 1, 2013 Recuerda que es mas optimo hacer un override para este tipo de cosas que editar las clases y controladores directamente. Si funciona, pues ya Nadie o yo u otro usuario te explicamos como hacer el override. Link to comment Share on other sites More sharing options...
matrezz Posted October 1, 2013 Author Share Posted October 1, 2013 gracias miro si funciona y os cuento. Pues si interesante eso del overrided. Saludos. Link to comment Share on other sites More sharing options...
matrezz Posted October 4, 2013 Author Share Posted October 4, 2013 gracias, me funcionó. Link to comment Share on other sites More sharing options...
Recommended Posts