Back to Opencart

File admin\controller\mail\gdpr.php

docs/api/source-admin.controller.mail.gdpr.html

4.1.0.329.3 KB
Original Source

Namespaces

Classes

| 1: | <?php | | 2: | namespace Opencart\Admin\Controller\Mail; | | 3: | /** | | 4: | * Class Gdpr | | 5: | * | | 6: | * @package Opencart\Admin\Controller\Mail | | 7: | */ | | 8: | class Gdpr extends \Opencart\System\Engine\Controller { | | 9: | // admin/model/customer/gdpr/editStatus | | 10: | /** | | 11: | * Index | | 12: | * | | 13: | * @param string $route | | 14: | * @param array<int, mixed> $args | | 15: | * @param mixed $output | | 16: | * | | 17: | * @return void | | 18: | */ | | 19: | public function index(string &$route, array &$args, &$output): void { | | 20: | $this->load->model('customer/gdpr'); | | 21: | | | 22: | $gdpr_info = $this->model_customer_gdpr->getGdpr($args[0]); | | 23: | | | 24: | if ($gdpr_info) { | | 25: | // Choose which mail to send | | 26: | | | 27: | // Export plus complete | | 28: | if ($gdpr_info['action'] == 'export' && (int)$args[1] == 3) { | | 29: | $this->export($gdpr_info); | | 30: | } | | 31: | | | 32: | // Approve plus processing | | 33: | if ($gdpr_info['action'] == 'approve' && (int)$args[1] == 2) { | | 34: | $this->approve($gdpr_info); | | 35: | } | | 36: | | | 37: | // Remove plus complete | | 38: | if ($gdpr_info['action'] == 'remove' && (int)$args[1] == 3) { | | 39: | $this->remove($gdpr_info); | | 40: | } | | 41: | | | 42: | // Deny | | 43: | if ($args[1] == -1) { | | 44: | $this->deny($gdpr_info); | | 45: | } | | 46: | } | | 47: | } | | 48: | | | 49: | /** | | 50: | * Export | | 51: | * | | 52: | * @param array<string, mixed> $gdpr_info | | 53: | * | | 54: | * @throws \Exception | | 55: | * | | 56: | * @return void | | 57: | */ | | 58: | public function export(array $gdpr_info): void { | | 59: | $this->load->model('setting/store'); | | 60: | | | 61: | $store_info = $this->model_setting_store->getStore($gdpr_info['store_id']); | | 62: | | | 63: | if ($store_info) { | | 64: | $this->load->model('setting/setting'); | | 65: | | | 66: | $store_logo = html_entity_decode($this->model_setting_setting->getValue('config_logo', $store_info['store_id']), ENT_QUOTES, 'UTF-8'); | | 67: | $store_name = html_entity_decode($store_info['name'], ENT_QUOTES, 'UTF-8'); | | 68: | $store_url = $store_info['url']; | | 69: | } else { | | 70: | $store_logo = html_entity_decode($this->config->get('config_logo'), ENT_QUOTES, 'UTF-8'); | | 71: | $store_name = html_entity_decode($this->config->get('config_name'), ENT_QUOTES, 'UTF-8'); | | 72: | $store_url = HTTP_CATALOG; | | 73: | } | | 74: | | | 75: | // Send the email in the correct language | | 76: | $this->load->model('localisation/language'); | | 77: | | | 78: | $language_info = $this->model_localisation_language->getLanguage($gdpr_info['language_id']); | | 79: | | | 80: | if ($language_info) { | | 81: | $language_code = $language_info['code']; | | 82: | } else { | | 83: | $language_code = $this->config->get('config_language'); | | 84: | } | | 85: | | | 86: | // Load the language for any mails using a different country code and prefixing it so it does not pollute the main data pool. | | 87: | $this->load->language('default', 'mail', $language_code); | | 88: | $this->load->language('mail/gdpr_export', 'mail', $language_code); | | 89: | | | 90: | // Add language vars to the template folder | | 91: | $results = $this->language->all('mail'); | | 92: | | | 93: | foreach ($results as $key => $value) { | | 94: | $data[$key] = $value; | | 95: | } | | 96: | | | 97: | $subject = sprintf($this->language->get('mail_text_subject'), $store_name); | | 98: | | | 99: | if (is_file(DIR_IMAGE . $store_logo)) { | | 100: | $data['logo'] = $store_url . 'image/' . $store_logo; | | 101: | } else { | | 102: | $data['logo'] = ''; | | 103: | } | | 104: | | | 105: | $this->load->model('customer/customer'); | | 106: | | | 107: | $customer_info = $this->model_customer_customer->getCustomerByEmail($gdpr_info['email']); | | 108: | | | 109: | if ($customer_info) { | | 110: | $data['text_hello'] = sprintf($this->language->get('mail_text_hello'), html_entity_decode($customer_info['firstname'], ENT_QUOTES, 'UTF-8')); | | 111: | } else { | | 112: | $data['text_hello'] = sprintf($this->language->get('mail_text_hello'), $this->language->get('mail_text_user')); | | 113: | } | | 114: | | | 115: | // Personal info | | 116: | if ($customer_info) { | | 117: | $data['customer_id'] = $customer_info['customer_id']; | | 118: | $data['firstname'] = $customer_info['firstname']; | | 119: | $data['lastname'] = $customer_info['lastname']; | | 120: | $data['email'] = $customer_info['email']; | | 121: | $data['telephone'] = $customer_info['telephone']; | | 122: | } | | 123: | | | 124: | // Addresses | | 125: | $data['addresses'] = []; | | 126: | | | 127: | if ($customer_info) { | | 128: | $results = $this->model_customer_customer->getAddresses($customer_info['customer_id']); | | 129: | | | 130: | foreach ($results as $result) { | | 131: | $address = [ | | 132: | 'firstname' => $result['firstname'], | | 133: | 'lastname' => $result['lastname'], | | 134: | 'address_1' => $result['address_1'], | | 135: | 'address_2' => $result['address_2'], | | 136: | 'city' => $result['city'], | | 137: | 'postcode' => $result['postcode'], | | 138: | 'country' => $result['country'], | | 139: | 'zone' => $result['zone'] | | 140: | ]; | | 141: | | | 142: | if (!in_array($address, $data['addresses'])) { | | 143: | $data['addresses'][] = $address; | | 144: | } | | 145: | } | | 146: | } | | 147: | | | 148: | // Order Addresses | | 149: | $this->load->model('sale/order'); | | 150: | | | 151: | $results = $this->model_sale_order->getOrders(['filter_email' => $gdpr_info['email']]); | | 152: | | | 153: | foreach ($results as $result) { | | 154: | $order_info = $this->model_sale_order->getOrder($result['order_id']); | | 155: | | | 156: | if ($order_info['payment_country_id']) { | | 157: | $address = [ | | 158: | 'firstname' => $order_info['payment_firstname'], | | 159: | 'lastname' => $order_info['payment_lastname'], | | 160: | 'address_1' => $order_info['payment_address_1'], | | 161: | 'address_2' => $order_info['payment_address_2'], | | 162: | 'city' => $order_info['payment_city'], | | 163: | 'postcode' => $order_info['payment_postcode'], | | 164: | 'country' => $order_info['payment_country'], | | 165: | 'zone' => $order_info['payment_zone'] | | 166: | ]; | | 167: | | | 168: | if (!in_array($address, $data['addresses'])) { | | 169: | $data['addresses'][] = $address; | | 170: | } | | 171: | } | | 172: | | | 173: | if ($order_info['shipping_country_id']) { | | 174: | $address = [ | | 175: | 'firstname' => $order_info['shipping_firstname'], | | 176: | 'lastname' => $order_info['shipping_lastname'], | | 177: | 'address_1' => $order_info['shipping_address_1'], | | 178: | 'address_2' => $order_info['shipping_address_2'], | | 179: | 'city' => $order_info['shipping_city'], | | 180: | 'postcode' => $order_info['shipping_postcode'], | | 181: | 'country' => $order_info['shipping_country'], | | 182: | 'zone' => $order_info['shipping_zone'] | | 183: | ]; | | 184: | | | 185: | if (!in_array($address, $data['addresses'])) { | | 186: | $data['addresses'][] = $address; | | 187: | } | | 188: | } | | 189: | } | | 190: | | | 191: | // Ip's | | 192: | $data['ips'] = []; | | 193: | | | 194: | if ($customer_info) { | | 195: | $results = $this->model_customer_customer->getIps($customer_info['customer_id']); | | 196: | | | 197: | foreach ($results as $result) { | | 198: | $data['ips'][] = [ | | 199: | 'ip' => $result['ip'], | | 200: | 'date_added' => date($this->language->get('mail_datetime_format'), strtotime($result['date_added'])) | | 201: | ]; | | 202: | } | | 203: | } | | 204: | | | 205: | $data['store_name'] = $store_name; | | 206: | $data['store_url'] = $store_url; | | 207: | | | 208: | if ($this->config->get('config_mail_engine')) { | | 209: | $mail_option = [ | | 210: | 'parameter' => $this->config->get('config_mail_parameter'), | | 211: | 'smtp_hostname' => $this->config->get('config_mail_smtp_hostname'), | | 212: | 'smtp_username' => $this->config->get('config_mail_smtp_username'), | | 213: | 'smtp_password' => html_entity_decode($this->config->get('config_mail_smtp_password'), ENT_QUOTES, 'UTF-8'), | | 214: | 'smtp_port' => $this->config->get('config_mail_smtp_port'), | | 215: | 'smtp_timeout' => $this->config->get('config_mail_smtp_timeout') | | 216: | ]; | | 217: | | | 218: | $mail = new \Opencart\System\Library\Mail($this->config->get('config_mail_engine'), $mail_option); | | 219: | $mail->setTo($gdpr_info['email']); | | 220: | $mail->setFrom($this->config->get('config_email')); | | 221: | $mail->setSender($store_name); | | 222: | $mail->setSubject($subject); | | 223: | $mail->setHtml($this->load->view('mail/gdpr_export', $data)); | | 224: | $mail->send(); | | 225: | } | | 226: | } | | 227: | | | 228: | /** | | 229: | * Approve | | 230: | * | | 231: | * @param array<string, mixed> $gdpr_info | | 232: | * | | 233: | * @throws \Exception | | 234: | * | | 235: | * @return void | | 236: | */ | | 237: | public function approve(array $gdpr_info): void { | | 238: | $this->load->model('setting/store'); | | 239: | | | 240: | $store_info = $this->model_setting_store->getStore($gdpr_info['store_id']); | | 241: | | | 242: | if ($store_info) { | | 243: | $this->load->model('setting/setting'); | | 244: | | | 245: | $store_logo = html_entity_decode($this->model_setting_setting->getValue('config_logo', $store_info['store_id']), ENT_QUOTES, 'UTF-8'); | | 246: | $store_name = html_entity_decode($store_info['name'], ENT_QUOTES, 'UTF-8'); | | 247: | $store_url = $store_info['url']; | | 248: | } else { | | 249: | $store_logo = html_entity_decode($this->config->get('config_logo'), ENT_QUOTES, 'UTF-8'); | | 250: | $store_name = html_entity_decode($this->config->get('config_name'), ENT_QUOTES, 'UTF-8'); | | 251: | $store_url = HTTP_CATALOG; | | 252: | } | | 253: | | | 254: | // Send the email in the correct language | | 255: | $this->load->model('localisation/language'); | | 256: | | | 257: | $language_info = $this->model_localisation_language->getLanguage($gdpr_info['language_id']); | | 258: | | | 259: | if ($language_info) { | | 260: | $language_code = $language_info['code']; | | 261: | } else { | | 262: | $language_code = $this->config->get('config_language'); | | 263: | } | | 264: | | | 265: | // Load the language for any mails using a different country code and prefixing it so it does not pollute the main data pool. | | 266: | $this->load->language('default', 'mail', $language_code); | | 267: | $this->load->language('mail/gdpr_approve', 'mail', $language_code); | | 268: | | | 269: | // Add language vars to the template folder | | 270: | $results = $this->language->all('mail'); | | 271: | | | 272: | foreach ($results as $key => $value) { | | 273: | $data[$key] = $value; | | 274: | } | | 275: | | | 276: | $subject = sprintf($this->language->get('mail_text_subject'), $store_name); | | 277: | | | 278: | $this->load->model('tool/image'); | | 279: | | | 280: | if (is_file(DIR_IMAGE . $store_logo)) { | | 281: | $data['logo'] = $store_url . 'image/' . $store_logo; | | 282: | } else { | | 283: | $data['logo'] = ''; | | 284: | } | | 285: | | | 286: | $this->load->model('customer/customer'); | | 287: | | | 288: | $customer_info = $this->model_customer_customer->getCustomerByEmail($gdpr_info['email']); | | 289: | | | 290: | if ($customer_info) { | | 291: | $data['text_hello'] = sprintf($this->language->get('mail_text_hello'), html_entity_decode($customer_info['firstname'], ENT_QUOTES, 'UTF-8')); | | 292: | } else { | | 293: | $data['text_hello'] = sprintf($this->language->get('mail_text_hello'), $this->language->get('mail_text_user')); | | 294: | } | | 295: | | | 296: | $data['text_gdpr'] = sprintf($this->language->get('mail_text_gdpr'), $this->config->get('config_gdpr_limit')); | | 297: | $data['text_a'] = sprintf($this->language->get('mail_text_a'), $this->config->get('config_gdpr_limit')); | | 298: | | | 299: | $data['store_name'] = $store_name; | | 300: | $data['store_url'] = $store_url; | | 301: | | | 302: | if ($this->config->get('config_mail_engine')) { | | 303: | $mail_option = [ | | 304: | 'parameter' => $this->config->get('config_mail_parameter'), | | 305: | 'smtp_hostname' => $this->config->get('config_mail_smtp_hostname'), | | 306: | 'smtp_username' => $this->config->get('config_mail_smtp_username'), | | 307: | 'smtp_password' => html_entity_decode($this->config->get('config_mail_smtp_password'), ENT_QUOTES, 'UTF-8'), | | 308: | 'smtp_port' => $this->config->get('config_mail_smtp_port'), | | 309: | 'smtp_timeout' => $this->config->get('config_mail_smtp_timeout') | | 310: | ]; | | 311: | | | 312: | $mail = new \Opencart\System\Library\Mail($this->config->get('config_mail_engine'), $mail_option); | | 313: | $mail->setTo($gdpr_info['email']); | | 314: | $mail->setFrom($this->config->get('config_email')); | | 315: | $mail->setSender($store_name); | | 316: | $mail->setSubject($subject); | | 317: | $mail->setHtml($this->load->view('mail/gdpr_approve', $data)); | | 318: | $mail->send(); | | 319: | } | | 320: | } | | 321: | | | 322: | /** | | 323: | * Deny | | 324: | * | | 325: | * @param array<string, mixed> $gdpr_info | | 326: | * | | 327: | * @throws \Exception | | 328: | * | | 329: | * @return void | | 330: | */ | | 331: | public function deny(array $gdpr_info): void { | | 332: | $this->load->model('setting/store'); | | 333: | | | 334: | $store_info = $this->model_setting_store->getStore($gdpr_info['store_id']); | | 335: | | | 336: | if ($store_info) { | | 337: | $this->load->model('setting/setting'); | | 338: | | | 339: | $store_logo = html_entity_decode($this->model_setting_setting->getValue('config_logo', $store_info['store_id']), ENT_QUOTES, 'UTF-8'); | | 340: | $store_name = html_entity_decode($store_info['name'], ENT_QUOTES, 'UTF-8'); | | 341: | $store_url = $store_info['url']; | | 342: | } else { | | 343: | $store_logo = html_entity_decode($this->config->get('config_logo'), ENT_QUOTES, 'UTF-8'); | | 344: | $store_name = html_entity_decode($this->config->get('config_name'), ENT_QUOTES, 'UTF-8'); | | 345: | $store_url = HTTP_CATALOG; | | 346: | } | | 347: | | | 348: | // Send the email in the correct language | | 349: | $this->load->model('localisation/language'); | | 350: | | | 351: | $language_info = $this->model_localisation_language->getLanguage($gdpr_info['language_id']); | | 352: | | | 353: | if ($language_info) { | | 354: | $language_code = $language_info['code']; | | 355: | } else { | | 356: | $language_code = $this->config->get('config_language'); | | 357: | } | | 358: | | | 359: | // Load the language for any mails using a different country code and prefixing it so it does not pollute the main data pool. | | 360: | $this->load->language('default', 'mail', $language_code); | | 361: | $this->load->language('mail/gdpr_deny', 'mail', $language_code); | | 362: | | | 363: | // Add language vars to the template folder | | 364: | $results = $this->language->all('mail'); | | 365: | | | 366: | foreach ($results as $key => $value) { | | 367: | $data[$key] = $value; | | 368: | } | | 369: | | | 370: | $subject = sprintf($this->language->get('mail_text_subject'), $store_name); | | 371: | | | 372: | $this->load->model('tool/image'); | | 373: | | | 374: | if (is_file(DIR_IMAGE . $store_logo)) { | | 375: | $data['logo'] = $store_url . 'image/' . $store_logo; | | 376: | } else { | | 377: | $data['logo'] = ''; | | 378: | } | | 379: | | | 380: | $data['text_request'] = $this->language->get('mail_text_' . $gdpr_info['action']); | | 381: | | | 382: | $this->load->model('customer/customer'); | | 383: | | | 384: | $customer_info = $this->model_customer_customer->getCustomerByEmail($gdpr_info['email']); | | 385: | | | 386: | if ($customer_info) { | | 387: | $data['text_hello'] = sprintf($this->language->get('mail_text_hello'), html_entity_decode($customer_info['firstname'], ENT_QUOTES, 'UTF-8')); | | 388: | } else { | | 389: | $data['text_hello'] = sprintf($this->language->get('mail_text_hello'), $this->language->get('mail_text_user')); | | 390: | } | | 391: | | | 392: | $data['store_name'] = $store_name; | | 393: | $data['store_url'] = $store_url; | | 394: | $data['contact'] = $store_url . 'index.php?route=information/contact'; | | 395: | | | 396: | if ($this->config->get('config_mail_engine')) { | | 397: | $mail_option = [ | | 398: | 'parameter' => $this->config->get('config_mail_parameter'), | | 399: | 'smtp_hostname' => $this->config->get('config_mail_smtp_hostname'), | | 400: | 'smtp_username' => $this->config->get('config_mail_smtp_username'), | | 401: | 'smtp_password' => html_entity_decode($this->config->get('config_mail_smtp_password'), ENT_QUOTES, 'UTF-8'), | | 402: | 'smtp_port' => $this->config->get('config_mail_smtp_port'), | | 403: | 'smtp_timeout' => $this->config->get('config_mail_smtp_timeout') | | 404: | ]; | | 405: | | | 406: | $mail = new \Opencart\System\Library\Mail($this->config->get('config_mail_engine'), $mail_option); | | 407: | $mail->setTo($gdpr_info['email']); | | 408: | $mail->setFrom($this->config->get('config_email')); | | 409: | $mail->setSender($store_name); | | 410: | $mail->setSubject($subject); | | 411: | $mail->setHtml($this->load->view('mail/gdpr_deny', $data)); | | 412: | $mail->send(); | | 413: | } | | 414: | } | | 415: | | | 416: | /** | | 417: | * Remove | | 418: | * | | 419: | * @param array<string, mixed> $gdpr_info | | 420: | * | | 421: | * @throws \Exception | | 422: | * | | 423: | * @return void | | 424: | */ | | 425: | public function remove(array $gdpr_info): void { | | 426: | $this->load->model('setting/store'); | | 427: | | | 428: | $store_info = $this->model_setting_store->getStore($gdpr_info['store_id']); | | 429: | | | 430: | if ($store_info) { | | 431: | $this->load->model('setting/setting'); | | 432: | | | 433: | $store_logo = html_entity_decode($this->model_setting_setting->getValue('config_logo', $store_info['store_id']), ENT_QUOTES, 'UTF-8'); | | 434: | $store_name = html_entity_decode($store_info['name'], ENT_QUOTES, 'UTF-8'); | | 435: | $store_url = $store_info['url']; | | 436: | } else { | | 437: | $store_logo = html_entity_decode($this->config->get('config_logo'), ENT_QUOTES, 'UTF-8'); | | 438: | $store_name = html_entity_decode($this->config->get('config_name'), ENT_QUOTES, 'UTF-8'); | | 439: | $store_url = HTTP_CATALOG; | | 440: | } | | 441: | | | 442: | // Send the email in the correct language | | 443: | $this->load->model('localisation/language'); | | 444: | | | 445: | $language_info = $this->model_localisation_language->getLanguage($gdpr_info['language_id']); | | 446: | | | 447: | if ($language_info) { | | 448: | $language_code = $language_info['code']; | | 449: | } else { | | 450: | $language_code = $this->config->get('config_language'); | | 451: | } | | 452: | | | 453: | // Load the language for any mails using a different country code and prefixing it so it does not pollute the main data pool. | | 454: | $this->load->language('default', 'mail', $language_code); | | 455: | $this->load->language('mail/gdpr_delete', 'mail', $language_code); | | 456: | | | 457: | // Add language vars to the template folder | | 458: | $results = $this->language->all('mail'); | | 459: | | | 460: | foreach ($results as $key => $value) { | | 461: | $data[$key] = $value; | | 462: | } | | 463: | | | 464: | $subject = sprintf($this->language->get('mail_text_subject'), $store_name); | | 465: | | | 466: | $this->load->model('tool/image'); | | 467: | | | 468: | if (is_file(DIR_IMAGE . $store_logo)) { | | 469: | $data['logo'] = $store_url . 'image/' . $store_logo; | | 470: | } else { | | 471: | $data['logo'] = ''; | | 472: | } | | 473: | | | 474: | $this->load->model('customer/customer'); | | 475: | | | 476: | $customer_info = $this->model_customer_customer->getCustomerByEmail($gdpr_info['email']); | | 477: | | | 478: | if ($customer_info) { | | 479: | $data['text_hello'] = sprintf($this->language->get('mail_text_hello'), html_entity_decode($customer_info['firstname'], ENT_QUOTES, 'UTF-8')); | | 480: | } else { | | 481: | $data['text_hello'] = sprintf($this->language->get('mail_text_hello'), $this->language->get('mail_text_user')); | | 482: | } | | 483: | | | 484: | $data['store_name'] = $store_name; | | 485: | $data['store_url'] = $store_url; | | 486: | $data['contact'] = $store_url . 'index.php?route=information/contact'; | | 487: | | | 488: | if ($this->config->get('config_mail_engine')) { | | 489: | $mail_option = [ | | 490: | 'parameter' => $this->config->get('config_mail_parameter'), | | 491: | 'smtp_hostname' => $this->config->get('config_mail_smtp_hostname'), | | 492: | 'smtp_username' => $this->config->get('config_mail_smtp_username'), | | 493: | 'smtp_password' => html_entity_decode($this->config->get('config_mail_smtp_password'), ENT_QUOTES, 'UTF-8'), | | 494: | 'smtp_port' => $this->config->get('config_mail_smtp_port'), | | 495: | 'smtp_timeout' => $this->config->get('config_mail_smtp_timeout') | | 496: | ]; | | 497: | | | 498: | $mail = new \Opencart\System\Library\Mail($this->config->get('config_mail_engine'), $mail_option); | | 499: | $mail->setTo($gdpr_info['email']); | | 500: | $mail->setFrom($this->config->get('config_email')); | | 501: | $mail->setSender($store_name); | | 502: | $mail->setSubject($subject); | | 503: | $mail->setHtml($this->load->view('mail/gdpr_delete', $data)); | | 504: | $mail->send(); | | 505: | } | | 506: | } | | 507: | } | | 508: | |

OpenCart API API documentation generated by ApiGen dev-master