Files
newwalls.pl/modules/ets_cfultimate/controllers/admin/AdminContactFormUltimateMessageController.php
2024-12-17 13:43:22 +01:00

434 lines
23 KiB
PHP

<?php
/**
* 2007-2021 ETS-Soft
*
* NOTICE OF LICENSE
*
* This file is not open source! Each license that you purchased is only available for 1 wesite only.
* If you want to use this file on more websites (or projects), you need to purchase additional licenses.
* You are not allowed to redistribute, resell, lease, license, sub-license or offer our resources to any third party.
*
* 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 contact us for extra customization service at an affordable price
*
* @author ETS-Soft <etssoft.jsc@gmail.com>
* @copyright 2007-2021 ETS-Soft
* @license Valid for 1 website (or project) for each purchase of license
* International Registered Trademark & Property of ETS-Soft
*/
if (!defined('_PS_VERSION_'))
exit;
require_once(_PS_MODULE_DIR_ . 'ets_cfultimate/classes/ETS_CFU_Contact_Reply.php');
require_once(_PS_MODULE_DIR_ . 'ets_cfultimate/classes/ETS_CFU_Pagination.php');
class AdminContactFormUltimateMessageController extends ModuleAdminController
{
public $is170 =false;
public function __construct()
{
parent::__construct();
$this->bootstrap = true;
if (Ets_cfultimate::checkVersionPs('1.7.0','>=')){
$this->is170 = true;
}
}
public function initContent()
{
parent::initContent();
if (Tools::isSubmit('etsCfuSubmitSpecialActionMessage') && $id_message = Tools::getValue('id_contact_message')) {
$messages = array();
Db::getInstance()->execute('UPDATE ' . _DB_PREFIX_ . 'ets_cfu_contact_message SET special="' . (int)Tools::getValue('etsCfuSubmitSpecialActionMessage') . '" WHERE id_contact_message ="' . (int)$id_message . '"');
$messages[$id_message] = $this->displayRowMessage($id_message);
die(
Tools::jsonEncode(
array(
'ok' => true,
'messages' => $messages,
)
)
);
}
if (Tools::isSubmit('etsCfuSubmitBulkActionMessage')) {
$bulk_action_message = Tools::getValue('bulk_action_message');
if ($bulk_action_message && Tools::getValue('etsCfuMessageReaded')) {
if ($bulk_action_message == 'mark_as_read') {
$messages = array();
foreach (Tools::getValue('etsCfuMessageReaded') as $key => $value) {
Db::getInstance()->execute('UPDATE ' . _DB_PREFIX_ . 'ets_cfu_contact_message SET readed=1 WHERE id_contact_message ="' . (int)$key . '"');
unset($value);
$messages[$key] = $this->displayRowMessage($key);
}
die(
Tools::jsonEncode(
array(
'ok' => true,
'messages' => $messages,
'count_messages' => $this->module->getCountUnreadMessage(),
)
)
);
} elseif ($bulk_action_message == 'mark_as_unread') {
$messages = array();
foreach (Tools::getValue('etsCfuMessageReaded') as $key => $value) {
Db::getInstance()->execute('UPDATE ' . _DB_PREFIX_ . 'ets_cfu_contact_message SET readed=0 WHERE id_contact_message ="' . (int)$key . '"');
unset($value);
$messages[$key] = $this->displayRowMessage($key);
}
die(
Tools::jsonEncode(
array(
'ok' => true,
'messages' => $messages,
'count_messages' => $this->module->getCountUnreadMessage(),
)
)
);
} elseif ($bulk_action_message == 'delete_selected') {
foreach (Tools::getValue('etsCfuMessageReaded') as $key => $value) {
$attachments = Db::getInstance()->getValue('SELECT attachments FROM ' . _DB_PREFIX_ . 'ets_cfu_contact_message WHERE id_contact_message="' . (int)$key . '"');
if ($attachments) {
foreach (explode(',', $attachments) as $attachment) {
@unlink(dirname(__FILE__) . '/../../views/img/etscfu_upload/' . $attachment);
}
}
Db::getInstance()->execute('DELETE FROM ' . _DB_PREFIX_ . 'ets_cfu_contact_message WHERE id_contact_message ="' . (int)$key . '"');
unset($value);
}
die(
Tools::jsonEncode(
array(
'ok' => true,
'url_reload' => $this->context->link->getAdminLink('AdminContactFormUltimateMessage', true) . '&conf=1'
)
)
);
}
}
}
//reply message.
if (Tools::isSubmit('etsCfuSubmitReplyMessage') && $id_message = Tools::getValue('id_message')) {
$reply = new ETS_CFU_Contact_Reply();
$errors = array();
$context = Context::getContext();
$template = Configuration::get('ETS_CFU_ENABLE_TEMPLATE') ? 'contact_reply_form_ultimate' : 'contact_reply_form_ultimate_plain';
$configuration = Configuration::getMultiple(
array(
'PS_SHOP_EMAIL',
'PS_SHOP_NAME',
'PS_MAIL_TYPE',
),
null,
null, $context->shop->id
);
if( !Tools::getValue('reply_to')){
$errors[] = $this->module->l('Reply to is required');
}
if( !Tools::getValue('reply_subject')){
$errors[] = $this->module->l('Subject is required');
}
if (!Tools::getValue('message_reply')) {
$errors[] = $this->module->l('Message is required');
}
if (!Ets_CfUltimate::getEmailToString(Tools::getValue('reply_to'))) {
$errors[] = $this->module->l('Email is not validate');
}
if (!$errors){
$mail_temp = $this->module->getLocalPath() . 'mails/'.$context->language->iso_code.'/'.$template;
$msg = $this->module->l('Error - The following e-mail template is missing: %s');
if (!file_exists(($file = $mail_temp.'.txt')) && ($configuration['PS_MAIL_TYPE'] == Mail::TYPE_BOTH || $configuration['PS_MAIL_TYPE'] == Mail::TYPE_TEXT)) {
$errors[] = sprintf($msg, $file);
} else if (!file_exists(($file = $mail_temp.'.html')) && ($configuration['PS_MAIL_TYPE'] == Mail::TYPE_BOTH || $configuration['PS_MAIL_TYPE'] == Mail::TYPE_HTML)) {
$errors[] = sprintf($msg, $file);
}
}
if ($errors) {
die(Tools::jsonEncode(array(
'error' => $this->module->displayError($errors),
)));
} else {
$template_email = Configuration::get('ETS_CFU_EMAIL_REPLY_TEMPLATE', Context::getContext()->language->id);
$template_vars = array(
'{message_content}' => Configuration::get('ETS_CFU_ENABLE_TEMPLATE') ? str_replace(
array('{message_content}', '%7Bshop_url%7D', '%7Bshop_logo%7D'),
array(Tools::getValue('message_reply'), '{shop_url}', '{shop_logo}'),
$template_email
) : Tools::getValue('message_reply'),
);
$toEmail = Ets_CfUltimate::getEmailToString(Tools::getValue('reply_to'));
$toName = str_replace(array('<', '>', $toEmail), '', Tools::getValue('reply_to'));
$fromEmail = Ets_CfUltimate::getEmailToString(Tools::getValue('from_reply'));
$fromName = str_replace(array('<', '>', $fromEmail), '', Tools::getValue('from_reply'));
$replyTo = Ets_CfUltimate::getEmailToString(Tools::getValue('reply_to_reply'));
$replyToName = trim(str_replace(array('<', '>', $replyTo), '', Tools::getValue('reply_to_reply')));
if (Mail::Send(
Context::getContext()->language->id,
$template,
Tools::getValue('reply_subject'),
$template_vars,
$toEmail,
$toName ? $toName : null,
$fromEmail ? $fromEmail : null,
$fromName ? $fromName : null,
null,
null,
$this->module->getLocalPath() . 'mails/',
null,
Context::getContext()->shop->id,
$replyTo ? $replyTo : null,
$replyToName ? $replyToName : null
)) {
$reply->id_contact_message = $id_message;
$reply->content = Tools::getValue('message_reply');
$reply->id_employee = $this->context->employee->id;
$reply->reply_to = Tools::getValue('reply_to');
$reply->subject = Tools::getValue('reply_subject');
$reply->add();
die(Tools::jsonEncode(array(
'success' => $this->module->l('Your message has been successfully sent'),
'message_reply' => Tools::getValue('message_reply'),
'id_message' => $id_message,
'reply' => $this->module->displayReplyMessage($reply),
)));
} else {
$errors[] = $this->module->l('An error occurred while sending the message');
die(Tools::jsonEncode(array(
'error' => $this->module->displayError($errors),
)));
}
}
}
/*end reply msg*/
if (Tools::isSubmit('etsCfuDeleteMessage') && $id_message = Tools::getValue('id_message')) {
$attachments = Db::getInstance()->getValue('SELECT attachments FROM ' . _DB_PREFIX_ . 'ets_cfu_contact_message WHERE id_contact_message="' . (int)$id_message . '"');
if ($attachments) {
foreach (explode(',', $attachments) as $attachment) {
@unlink(dirname(__FILE__) . '/../../views/img/etscfu_upload/' . $attachment);
}
}
Db::getInstance()->execute('DELETE FROM ' . _DB_PREFIX_ . 'ets_cfu_contact_message WHERE id_contact_message="' . (int)$id_message . '"');
Db::getInstance()->execute('DELETE FROM ' . _DB_PREFIX_ . 'ets_cfu_contact_message_shop where id_contact_message=' . (int)$id_message);
Db::getInstance()->execute('DELETE FROM ' . _DB_PREFIX_ . 'ets_cfu_message_reply WHERE id_contact_message=' . (int)$id_message);
Tools::redirectAdmin($this->context->link->getAdminLink('AdminContactFormUltimateMessage', true) . '&conf=1');
}
if (Tools::isSubmit('etsCfuAjax') && Tools::isSubmit('etsCfuViewMessage') && $id_message = Tools::getValue('id_message'))
{
$message = $this->getMessageById($id_message);
if ($message['reply_to'] && Ets_CfUltimate::getEmailToString($message['reply_to'])) {
$message['reply_to_check'] = true;
} else
$message['reply_to_check'] = false;
if ($message)
{
$replies = $this->getRepliesByIdMessage($id_message);
$this->context->smarty->assign(array(
'message' => $message,
'replies' => $replies,
'is170' => $this->is170
));
$message_html = $this->module->display(_PS_MODULE_DIR_ . $this->module->name . DIRECTORY_SEPARATOR . $this->module->name . '.php', 'message.tpl');
if (!Validate::isCleanHtml($message_html, true)) {
die(Tools::jsonEncode(array(
'errors' => $this->module->l('Message invalid.'),
)));
}
$messages = array();
if (!Tools::getValue('etsCfuMessageReaded'))
{
Db::getInstance()->execute('UPDATE ' . _DB_PREFIX_ . 'ets_cfu_contact_message SET readed="1" WHERE id_contact_message ="' . (int)$id_message . '"');
$messages[$id_message] = $this->displayRowMessage($id_message);
}
die(Tools::jsonEncode(array(
'message_html' => $message_html,
'messages' => $messages,
'count_messages' => $this->module->getCountUnreadMessage(),
)));
}
}
}
public function displayRowMessage($message)
{
if (!is_array($message))
$message = $this->getMessageById($message);
$this->context->smarty->assign(
array(
'message' => $message,
)
);
return $this->module->display($this->module->getLocalPath(), 'row-message.tpl');
}
public function getMessageById($id_message)
{
$message = Db::getInstance()->getRow('
SELECT m.*,cl.title,c.save_attachments ,c.email_to, CONCAT(cu.firstname," ",cu.lastname) as customer_name ,log.ip
FROM ' . _DB_PREFIX_ . 'ets_cfu_contact_message m
INNER JOIN ' . _DB_PREFIX_ . 'ets_cfu_contact_message_shop ms ON (m.id_contact_message=ms.id_contact_message)
LEFT JOIN ' . _DB_PREFIX_ . 'ets_cfu_contact c ON (c.id_contact=m.id_contact)
lEFT JOIN ' . _DB_PREFIX_ . 'ets_cfu_contact_lang cl on (c.id_contact=cl.id_contact AND cl.id_lang="' . (int)$this->context->language->id . '")
LEFT JOIN ' . _DB_PREFIX_ . 'customer cu ON (m.id_customer=cu.id_customer)
LEFT JOIN '._DB_PREFIX_.'ets_cfu_log log ON (log.id_contact = m.id_contact)
WHERE ms.id_shop="' . (int)Context::getContext()->shop->id . '" AND m.id_contact_message=' . (int)$id_message);
if (trim($message['attachments']))
$message['attachments'] = explode(',', trim($message['attachments']));
else
$message['attachments'] = '';
$message['replies'] = $this->getRepliesByIdMessage($message['id_contact_message']);
$message['from_reply'] = Configuration::get('PS_SHOP_NAME') . ' <' . (Configuration::get('PS_MAIL_METHOD') == 2 ? Configuration::get('PS_MAIL_USER') : Configuration::get('PS_SHOP_EMAIL')) . '>';
$message['reply'] = Configuration::get('PS_SHOP_NAME') . ' <' . Configuration::get('PS_SHOP_EMAIL') . '>';
$message['email_to'] = explode(',',trim($message['email_to']))[0];
return $message;
}
public function getRepliesByIdMessage($id_message)
{
$replies = Db::getInstance()->executeS('
SELECT * FROM ' . _DB_PREFIX_ . 'ets_cfu_message_reply
WHERE id_contact_message="' . (int)$id_message . '"'
);
return $replies;
}
public function renderList()
{
if (Tools::isSubmit('etsCfuViewMessage') && $id_message = Tools::getValue('id_message')) {
$message = $this->getMessageById($id_message);
if ($message['reply_to'] && Ets_CfUltimate::getEmailToString($message['reply_to'])) {
$message['reply_to_check'] = True;
} else
$message['reply_to_check'] = false;
if ($message) {
$replies = $this->getRepliesByIdMessage($id_message);
$this->context->smarty->assign(
array(
'message' => $message,
'replies' => $replies,
'base_url' => $this->module->getBaseLink(),
'is170' => $this->is170
)
);
return $this->module->display(_PS_MODULE_DIR_ . $this->module->name . DIRECTORY_SEPARATOR . $this->module->name . '.php', 'message.tpl');
}
} else {
$filter = '';
$url_extra = '';
$values_submit = array();
if (Tools::getValue('id_contact')) {
$filter .= ' AND m.id_contact="' . (int)Tools::getValue('id_contact') . '"';
$url_extra .= '&id_contact=' . (int)Tools::getValue('id_contact');
$values_submit['id_contact'] = Tools::getValue('id_contact');
}
if (Tools::getValue('id_contact_message')) {
$filter .= ' AND m.id_contact_message="' . (int)Tools::getValue('id_contact_message') . '"';
$url_extra .= '&id_contact_message=' . (int)Tools::getValue('id_contact_message');
$values_submit['id_contact_message'] = (int)Tools::getValue('id_contact_message');
}
if (Tools::getValue('subject')) {
$filter .= ' AND m.subject like "%' . Tools::getValue('subject') . '%"';
$url_extra .= '&subject=' . Tools::getValue('subject');
$values_submit['subject'] = Tools::getValue('subject');
}
if (Tools::getValue('sender')) {
$filter .= ' AND m.sender like "%' . Tools::getValue('sender') . '%"';
$url_extra .= '&sender=' . Tools::getValue('sender');
$values_submit['sender'] = Tools::getValue('sender');
}
if (Tools::getValue('messageFilter_dateadd_from')) {
$filter .= ' AND m.date_add >="' . Tools::getValue('messageFilter_dateadd_from') . '"';
$url_extra .= '&messageFilter_dateadd_from=' . Tools::getValue('messageFilter_dateadd_from');
$values_submit['messageFilter_dateadd_from'] = Tools::getValue('messageFilter_dateadd_from');
}
if (Tools::getValue('messageFilter_dateadd_to')) {
$filter .= ' AND m.date_add <= "' . Tools::getValue('messageFilter_dateadd_to') . '"';
$url_extra .= '&messageFilter_dateadd_to=' . Tools::getValue('messageFilter_dateadd_to');
$values_submit['messageFilter_dateadd_to'] = Tools::getValue('messageFilter_dateadd_to');
}
if (Tools::getValue('messageFilter_replied') != '') {
if (Tools::getValue('messageFilter_replied') == 0)
$filter .= ' AND m.id_contact_message NOT IN (SELECT id_contact_message FROM ' . _DB_PREFIX_ . 'ets_cfu_message_reply)';
else
$filter .= ' AND m.id_contact_message IN (SELECT id_contact_message FROM ' . _DB_PREFIX_ . 'ets_cfu_message_reply)';
$url_extra .= '&messageFilter_replied=' . Tools::getValue('messageFilter_replied');
$values_submit['messageFilter_replied'] = Tools::getValue('messageFilter_replied');
}
if (Tools::getValue('messageFilter_message') != '') {
$filter .= ' AND m.body like "%' . pSQL(Tools::getValue('messageFilter_message')) . '%"';
$url_extra .= '&messageFilter_message=' . Tools::getValue('messageFilter_message');
$values_submit['messageFilter_message'] = Tools::getValue('messageFilter_message');
}
$url_extra_no_order = $url_extra;
if (Tools::getValue('OrderBy') != '' && Tools::getValue('OrderBy') != 'm.id_contact_message') {
$orderBy = Tools::getValue('OrderBy') . ' ' . Tools::getValue('OrderWay', 'DESC') . ',m.id_contact_message DESC';
$url_extra .= '&OrderBy=' . Tools::getValue('OrderBy') . '&OrderWay=' . Tools::getValue('OrderWay', 'DESC');
} else {
$orderBy = Tools::getValue('OrderBy', 'm.id_contact_message') . ' ' . Tools::getValue('OrderWay', 'DESC');
}
$totalMessage = $this->module->getMessages($filter, 0, 0, true, $orderBy);
$limit = Configuration::get('ETS_CFU_NUMBER_MESSAGE') ? Configuration::get('ETS_CFU_NUMBER_MESSAGE') : 20;
$page = Tools::getValue('page', 1);
$start = ($page - 1) * $limit;
$pagination = new ETS_CFU_Pagination();
$pagination->url = $this->context->link->getAdminLink('AdminContactFormUltimateMessage', true) . $url_extra . '&page=_page_';
$pagination->limit = $limit;
$pagination->page = $page;
$pagination->total = $totalMessage;
if (Tools::isSubmit('etsCfuSubmitExportButtonMessage')) {
ob_get_clean();
ob_start();
$messages = $this->module->getMessages($filter);
$csv = "Subject\tFrom\tContact Form\tMessage\tDate" . "\r\n";
foreach ($messages as $row) {
$message = array();
$message[] = $row['subject'];
$message[] = $row['sender'];
$message[] = $row['title'];
$message[] = str_replace("\n", '', strip_tags($row['body']));
$message[] = $row['date_add'];
$csv .= join("\t", $message) . "\r\n";
}
$csv = chr(255) . chr(254) . mb_convert_encoding($csv, "UTF-16LE", "UTF-8");
header("Content-type: application/x-msdownload");
header("Content-disposition: csv; filename=" . date("Y-m-d") .
"_message_list.csv; size=" . Tools::strlen($csv));
echo $csv;
exit();
}
$messages = $this->module->getMessages($filter, $start, $limit, false, $orderBy);
if ($messages) {
foreach ($messages as &$message) {
$message['replies'] = $this->getRepliesByIdMessage($message['id_contact_message']);
$message['row_message'] = $this->displayRowMessage($message);
}
}
$contacts = $this->module->getContacts();
$this->context->smarty->assign(
array(
'messages' => $messages,
'ets_cfu_contacts' => $contacts,
'url_module' => $this->context->link->getAdminLink('AdminModules', true) . '&configure=' . $this->module->name . '&tab_module=' . $this->module->tab . '&module_name=' . $this->module->name,
'link' => $this->context->link,
'base_url' => $this->module->getBaseLink(),
'filter' => $filter,
'is_ps15' => version_compare(_PS_VERSION_, '1.6', '<') ? true : false,
'ets_cfu_pagination_text' => $pagination->render(),
'values_submit' => $values_submit,
'url_full' => $this->context->link->getAdminLink('AdminContactFormUltimateMessage', true) . $url_extra_no_order . '&page=' . Tools::getValue('page', 1),
'orderBy' => Tools::getValue('OrderBy', 'm.id_contact_message'),
'orderWay' => Tools::getValue('OrderWay', 'DESC'),
)
);
return $this->module->display($this->module->getLocalPath(), 'list-message.tpl');
}
}
}