diff options
Diffstat (limited to 'public/admin/controller/marketing/contact.php')
-rw-r--r-- | public/admin/controller/marketing/contact.php | 234 |
1 files changed, 234 insertions, 0 deletions
diff --git a/public/admin/controller/marketing/contact.php b/public/admin/controller/marketing/contact.php new file mode 100644 index 0000000..d5aa1d2 --- /dev/null +++ b/public/admin/controller/marketing/contact.php @@ -0,0 +1,234 @@ +<?php +class ControllerMarketingContact extends Controller { + private $error = array(); + + public function index() { + $this->load->language('marketing/contact'); + + $this->document->setTitle($this->language->get('heading_title')); + + $data['user_token'] = $this->session->data['user_token']; + + $data['breadcrumbs'] = array(); + + $data['breadcrumbs'][] = array( + 'text' => $this->language->get('text_home'), + 'href' => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true) + ); + + $data['breadcrumbs'][] = array( + 'text' => $this->language->get('heading_title'), + 'href' => $this->url->link('marketing/contact', 'user_token=' . $this->session->data['user_token'], true) + ); + + $data['cancel'] = $this->url->link('marketing/contact', 'user_token=' . $this->session->data['user_token'], true); + + $this->load->model('setting/store'); + + $data['stores'] = $this->model_setting_store->getStores(); + + $this->load->model('customer/customer_group'); + + $data['customer_groups'] = $this->model_customer_customer_group->getCustomerGroups(); + + $data['header'] = $this->load->controller('common/header'); + $data['column_left'] = $this->load->controller('common/column_left'); + $data['footer'] = $this->load->controller('common/footer'); + + $this->response->setOutput($this->load->view('marketing/contact', $data)); + } + + public function send() { + $this->load->language('marketing/contact'); + + $json = array(); + + if ($this->request->server['REQUEST_METHOD'] == 'POST') { + if (!$this->user->hasPermission('modify', 'marketing/contact')) { + $json['error']['warning'] = $this->language->get('error_permission'); + } + + if (!$this->request->post['subject']) { + $json['error']['subject'] = $this->language->get('error_subject'); + } + + if (!$this->request->post['message']) { + $json['error']['message'] = $this->language->get('error_message'); + } + + if (!$json) { + $this->load->model('setting/store'); + + $store_info = $this->model_setting_store->getStore($this->request->post['store_id']); + + if ($store_info) { + $store_name = $store_info['name']; + } else { + $store_name = $this->config->get('config_name'); + } + + $this->load->model('setting/setting'); + $setting = $this->model_setting_setting->getSetting('config', $this->request->post['store_id']); + $store_email = isset($setting['config_email']) ? $setting['config_email'] : $this->config->get('config_email'); + + $this->load->model('customer/customer'); + + $this->load->model('customer/customer_group'); + + $this->load->model('sale/order'); + + if (isset($this->request->get['page'])) { + $page = $this->request->get['page']; + } else { + $page = 1; + } + + $email_total = 0; + + $emails = array(); + + switch ($this->request->post['to']) { + case 'newsletter': + $customer_data = array( + 'filter_newsletter' => 1, + 'start' => ($page - 1) * 10, + 'limit' => 10 + ); + + $email_total = $this->model_customer_customer->getTotalCustomers($customer_data); + + $results = $this->model_customer_customer->getCustomers($customer_data); + + foreach ($results as $result) { + $emails[] = $result['email']; + } + break; + case 'customer_all': + $customer_data = array( + 'start' => ($page - 1) * 10, + 'limit' => 10 + ); + + $email_total = $this->model_customer_customer->getTotalCustomers($customer_data); + + $results = $this->model_customer_customer->getCustomers($customer_data); + + foreach ($results as $result) { + $emails[] = $result['email']; + } + break; + case 'customer_group': + $customer_data = array( + 'filter_customer_group_id' => $this->request->post['customer_group_id'], + 'start' => ($page - 1) * 10, + 'limit' => 10 + ); + + $email_total = $this->model_customer_customer->getTotalCustomers($customer_data); + + $results = $this->model_customer_customer->getCustomers($customer_data); + + foreach ($results as $result) { + $emails[$result['customer_id']] = $result['email']; + } + break; + case 'customer': + if (!empty($this->request->post['customer'])) { + foreach ($this->request->post['customer'] as $customer_id) { + $customer_info = $this->model_customer_customer->getCustomer($customer_id); + + if ($customer_info) { + $emails[] = $customer_info['email']; + } + } + } + break; + case 'affiliate_all': + $affiliate_data = array( + 'filter_affiliate' => 1, + 'start' => ($page - 1) * 10, + 'limit' => 10 + ); + + $email_total = $this->model_customer_customer->getTotalCustomers($affiliate_data); + + $results = $this->model_customer_customer->getCustomers($affiliate_data); + + foreach ($results as $result) { + $emails[] = $result['email']; + } + break; + case 'affiliate': + if (!empty($this->request->post['affiliate'])) { + foreach ($this->request->post['affiliate'] as $affiliate_id) { + $affiliate_info = $this->model_customer_customer->getCustomer($affiliate_id); + + if ($affiliate_info) { + $emails[] = $affiliate_info['email']; + } + } + } + break; + case 'product': + if (isset($this->request->post['product'])) { + $email_total = $this->model_sale_order->getTotalEmailsByProductsOrdered($this->request->post['product']); + + $results = $this->model_sale_order->getEmailsByProductsOrdered($this->request->post['product'], ($page - 1) * 10, 10); + + foreach ($results as $result) { + $emails[] = $result['email']; + } + } + break; + } + + if ($emails) { + $json['success'] = $this->language->get('text_success'); + + $start = ($page - 1) * 10; + $end = $start + 10; + + $json['success'] = sprintf($this->language->get('text_sent'), $start, $email_total); + + if ($end < $email_total) { + $json['next'] = str_replace('&', '&', $this->url->link('marketing/contact/send', 'user_token=' . $this->session->data['user_token'] . '&page=' . ($page + 1), true)); + } else { + $json['next'] = ''; + } + + $message = '<html dir="ltr" lang="en">' . "\n"; + $message .= ' <head>' . "\n"; + $message .= ' <title>' . $this->request->post['subject'] . '</title>' . "\n"; + $message .= ' <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">' . "\n"; + $message .= ' </head>' . "\n"; + $message .= ' <body>' . html_entity_decode($this->request->post['message'], ENT_QUOTES, 'UTF-8') . '</body>' . "\n"; + $message .= '</html>' . "\n"; + + foreach ($emails as $email) { + if (filter_var($email, FILTER_VALIDATE_EMAIL)) { + $mail = new Mail($this->config->get('config_mail_engine')); + $mail->parameter = $this->config->get('config_mail_parameter'); + $mail->smtp_hostname = $this->config->get('config_mail_smtp_hostname'); + $mail->smtp_username = $this->config->get('config_mail_smtp_username'); + $mail->smtp_password = html_entity_decode($this->config->get('config_mail_smtp_password'), ENT_QUOTES, 'UTF-8'); + $mail->smtp_port = $this->config->get('config_mail_smtp_port'); + $mail->smtp_timeout = $this->config->get('config_mail_smtp_timeout'); + + $mail->setTo($email); + $mail->setFrom($store_email); + $mail->setSender(html_entity_decode($store_name, ENT_QUOTES, 'UTF-8')); + $mail->setSubject(html_entity_decode($this->request->post['subject'], ENT_QUOTES, 'UTF-8')); + $mail->setHtml($message); + $mail->send(); + } + } + } else { + $json['error']['email'] = $this->language->get('error_email'); + } + } + } + + $this->response->addHeader('Content-Type: application/json'); + $this->response->setOutput(json_encode($json)); + } +} |