docs/api/source-admin.controller.mail.subscription.html
| 1: | <?php | | 2: | namespace Opencart\Admin\Controller\Mail; | | 3: | /** | | 4: | * Class Subscription | | 5: | * | | 6: | * @package Opencart\Admin\Controller\Mail | | 7: | */ | | 8: | class Subscription extends \Opencart\System\Engine\Controller { | | 9: | // admin/controller/sale/subscription/addHistory/after | | 10: | /** | | 11: | * History | | 12: | * | | 13: | * @param string $route | | 14: | * @param array<int, mixed> $args | | 15: | * @param mixed $output | | 16: | * | | 17: | * @throws \Exception | | 18: | * | | 19: | * @return void | | 20: | */ | | 21: | public function history(string &$route, array &$args, &$output): void { | | 22: | if (isset($args[0])) { | | 23: | $subscription_id = $args[0]; | | 24: | } else { | | 25: | $subscription_id = 0; | | 26: | } | | 27: | | | 28: | if (isset($args[1])) { | | 29: | $subscription_status_id = $args[1]; | | 30: | } else { | | 31: | $subscription_status_id = 0; | | 32: | } | | 33: | | | 34: | if (isset($args[2])) { | | 35: | $comment = $args[2]; | | 36: | } else { | | 37: | $comment = ''; | | 38: | } | | 39: | | | 40: | if (isset($args[3])) { | | 41: | $notify = $args[3]; | | 42: | } else { | | 43: | $notify = ''; | | 44: | } | | 45: | | | 46: | // Subscription | | 47: | $this->load->model('sale/subscription'); | | 48: | | | 49: | $filter_data = [ | | 50: | 'filter_subscription_id' => $subscription_id, | | 51: | 'filter_subscription_status_id' => $subscription_status_id, | | 52: | 'filter_date_next' => date('Y-m-d H:i:s') | | 53: | ]; | | 54: | | | 55: | $subscriptions = $this->model_checkout_subscription->getSubscriptions($filter_data); | | 56: | | | 57: | if ($subscriptions) { | | 58: | foreach ($subscriptions as $subscription) { | | 59: | // Subscription histories | | 60: | $history_total = $this->model_sale_subscription->getTotalHistoriesBySubscriptionStatusId($subscription_status_id); | | 61: | | | 62: | // The charge() method handles the subscription statuses in the cron/subscription | | 63: | // controller from the catalog whereas an extension needs to return the active subscription status | | 64: | if ($history_total && $subscription['subscription_status_id'] == $subscription_status_id) { | | 65: | // Subscription Statuses | | 66: | $this->load->model('localisation/subscription_status'); | | 67: | | | 68: | $subscription_status_info = $this->model_localisation_subscription_status->getSubscriptionStatus($subscription_status_id); | | 69: | | | 70: | if ($subscription_status_info) { | | 71: | // Customer payment | | 72: | $customer_payment_info = $this->model_sale_subscription->getSubscriptions(['filter_customer_id' => $subscription['customer_id'], 'filter_customer_payment_id' => $subscription['customer_payment_id']]); | | 73: | | | 74: | if ($customer_payment_info) { | | 75: | // Customers | | 76: | $this->load->model('customer/customer'); | | 77: | | | 78: | // Since the customer payment is integrated into the customer/customer page, | | 79: | // we need to gather the customer's information rather than the order | | 80: | $customer_info = $this->model_customer_customer->getCustomer($subscription['customer_id']); | | 81: | | | 82: | if ($customer_info) { | | 83: | // Settings | | 84: | $this->load->model('setting/setting'); | | 85: | | | 86: | // Store | | 87: | $store_info = $this->model_setting_setting->getSetting('config', $customer_info['store_id']); | | 88: | | | 89: | if ($store_info) { | | 90: | $from = $store_info['config_email']; | | 91: | $store_name = $store_info['config_name']; | | 92: | $store_url = $store_info['config_url']; | | 93: | $alert_email = $store_info['config_mail_alert_email']; | | 94: | } else { | | 95: | $from = $this->config->get('config_email'); | | 96: | $store_name = $this->config->get('config_name'); | | 97: | $store_url = HTTP_CATALOG; | | 98: | $alert_email = $this->config->get('config_mail_alert_email'); | | 99: | } | | 100: | | | 101: | // Languages | | 102: | $this->load->model('localisation/language'); | | 103: | | | 104: | $language_info = $this->model_localisation_language->getLanguage($customer_info['language_id']); | | 105: | | | 106: | if ($language_info) { | | 107: | if ($comment && $notify) { | | 108: | $data['comment'] = nl2br($comment); | | 109: | } else { | | 110: | $data['comment'] = ''; | | 111: | } | | 112: | | | 113: | $data['subscription_status'] = $subscription_status_info['name']; | | 114: | | | 115: | // Languages | | 116: | $this->load->model('localisation/language'); | | 117: | | | 118: | $language_info = $this->model_localisation_language->getLanguage($customer_info['language_id']); | | 119: | | | 120: | if ($language_info) { | | 121: | $language_code = $language_info['code']; | | 122: | } else { | | 123: | $language_code = $this->config->get('config_language'); | | 124: | } | | 125: | | | 126: | // Load the language for any mails using a different country code and prefixing it so it does not pollute the main data pool. | | 127: | $this->load->language('default', 'mail', $language_code); | | 128: | $this->load->language('mail/subscription', 'mail', $language_code); | | 129: | | | 130: | $data['date_added'] = date($this->language->get('mail_date_format_short'), $subscription['date_added']); | | 131: | | | 132: | // Text | | 133: | $data['text_comment'] = $this->language->get('mail_text_comment'); | | 134: | $data['text_date_added'] = $this->language->get('mail_text_date_added'); | | 135: | $data['text_footer'] = $this->language->get('mail_text_footer'); | | 136: | $data['text_subscription_status'] = $this->language->get('mail_text_subscription_status'); | | 137: | | | 138: | if ($this->config->get('config_mail_engine')) { | | 139: | $mail_option = [ | | 140: | 'parameter' => $this->config->get('config_mail_parameter'), | | 141: | 'smtp_hostname' => $this->config->get('config_mail_smtp_hostname'), | | 142: | 'smtp_username' => $this->config->get('config_mail_smtp_username'), | | 143: | 'smtp_password' => html_entity_decode($this->config->get('config_mail_smtp_password'), ENT_QUOTES, 'UTF-8'), | | 144: | 'smtp_port' => $this->config->get('config_mail_smtp_port'), | | 145: | 'smtp_timeout' => $this->config->get('config_mail_smtp_timeout') | | 146: | ]; | | 147: | $mail = new \Opencart\System\Library\Mail($this->config->get('config_mail_engine'), $mail_option); | | 148: | | | 149: | $mail->setTo($customer_info['email']); | | 150: | $mail->setFrom($from); | | 151: | $mail->setSender(html_entity_decode($store_name, ENT_QUOTES, 'UTF-8')); | | 152: | $mail->setSubject(html_entity_decode(sprintf($this->language->get('mail_text_subject'), $store_name), ENT_QUOTES, 'UTF-8')); | | 153: | $mail->setText($this->load->view('mail/subscription_history', $data)); | | 154: | $mail->send(); | | 155: | } | | 156: | } | | 157: | } | | 158: | } | | 159: | } | | 160: | } | | 161: | } | | 162: | } | | 163: | } | | 164: | | | 165: | // admin/controller/sale/subscription/addTransaction/after | | 166: | | | 167: | /** | | 168: | * Transaction | | 169: | * | | 170: | * @param string $route | | 171: | * @param array<int, mixed> $args | | 172: | * @param mixed $output | | 173: | * | | 174: | * @throws \Exception | | 175: | * | | 176: | * @return void | | 177: | */ | | 178: | public function transaction(string &$route, array &$args, &$output): void { | | 179: | if (isset($args[0])) { | | 180: | $subscription_id = $args[0]; | | 181: | } else { | | 182: | $subscription_id = 0; | | 183: | } | | 184: | | | 185: | if (isset($args[1])) { | | 186: | $order_id = $args[1]; | | 187: | } else { | | 188: | $order_id = 0; | | 189: | } | | 190: | | | 191: | if (isset($args[2])) { | | 192: | $comment = $args[2]; | | 193: | } else { | | 194: | $comment = ''; | | 195: | } | | 196: | | | 197: | if (isset($args[3])) { | | 198: | $amount = $args[3]; | | 199: | } else { | | 200: | $amount = ''; | | 201: | } | | 202: | | | 203: | if (isset($args[4])) { | | 204: | $type = $args[4]; | | 205: | } else { | | 206: | $type = ''; | | 207: | } | | 208: | | | 209: | if (isset($args[5])) { | | 210: | $payment_method = $args[5]; | | 211: | } else { | | 212: | $payment_method = ''; | | 213: | } | | 214: | | | 215: | if (isset($args[6])) { | | 216: | $payment_code = $args[6]; | | 217: | } else { | | 218: | $payment_code = ''; | | 219: | } | | 220: | | | 221: | // Subscription | | 222: | $this->load->model('sale/subscription'); | | 223: | | | 224: | $filter_data = [ | | 225: | 'filter_subscription_id' => $subscription_id, | | 226: | 'filter_subscription_status_id' => $this->config->get('config_subscription_canceled_status_id'), | | 227: | 'filter_date_next' => date('Y-m-d H:i:s') | | 228: | ]; | | 229: | | | 230: | $subscriptions = $this->model_checkout_subscription->getSubscriptions($filter_data); | | 231: | | | 232: | if ($subscriptions) { | | 233: | $this->load->model('customer/customer'); | | 234: | | | 235: | foreach ($subscriptions as $subscription) { | | 236: | $transaction_total = $this->model_customer_customer->getTotalTransactionsByOrderId($subscription['order_id']); | | 237: | | | 238: | if ($transaction_total) { | | 239: | // Orders | | 240: | $this->load->model('sale/order'); | | 241: | | | 242: | $order_info = $this->model_sale_order->getOrder($order_id); | | 243: | | | 244: | // In this case, since we're canceling a subscription, | | 245: | // the order ID needs to be identical | | 246: | if ($order_info && $subscription['order_id'] == $order_info['order_id']) { | | 247: | // Same for the payment method | | 248: | if ($order_info['payment_method'] == $subscription['payment_method'] && $subscription['payment_method'] == $payment_method) { | | 249: | // Same for the payment code | | 250: | if ($order_info['payment_code'] == $subscription['payment_code'] && $subscription['payment_code'] == $payment_code) { | | 251: | $this->load->language('mail/subscription'); | | 252: | | | 253: | // Store | | 254: | $from = $this->config->get('config_email'); | | 255: | $store_name = $this->config->get('config_name'); | | 256: | $store_url = HTTP_CATALOG; | | 257: | $alert_email = $this->config->get('config_mail_alert_email'); | | 258: | | | 259: | if ($comment) { | | 260: | $data['comment'] = nl2br($comment); | | 261: | } else { | | 262: | $data['comment'] = ''; | | 263: | } | | 264: | | | 265: | $data['subscription_id'] = $subscription_id; | | 266: | $data['payment_method'] = $payment_method; | | 267: | $data['payment_code'] = $payment_code; | | 268: | | | 269: | $data['date_added'] = date($this->language->get('date_format_short'), $subscription['date_added']); | | 270: | | | 271: | if ($this->config->get('config_mail_engine')) { | | 272: | $mail_option = [ | | 273: | 'parameter' => $this->config->get('config_mail_parameter'), | | 274: | 'smtp_hostname' => $this->config->get('config_mail_smtp_hostname'), | | 275: | 'smtp_username' => $this->config->get('config_mail_smtp_username'), | | 276: | 'smtp_password' => html_entity_decode($this->config->get('config_mail_smtp_password'), ENT_QUOTES, 'UTF-8'), | | 277: | 'smtp_port' => $this->config->get('config_mail_smtp_port'), | | 278: | 'smtp_timeout' => $this->config->get('config_mail_smtp_timeout') | | 279: | ]; | | 280: | $mail = new \Opencart\System\Library\Mail($this->config->get('config_mail_engine'), $mail_option); | | 281: | | | 282: | $mail->setTo($from); | | 283: | $mail->setFrom($from); | | 284: | $mail->setSender(html_entity_decode($store_name, ENT_QUOTES, 'UTF-8')); | | 285: | $mail->setSubject(html_entity_decode(sprintf($this->language->get('text_subject'), $store_name), ENT_QUOTES, 'UTF-8')); | | 286: | $mail->setText($this->load->view('mail/subscription_canceled', $data)); | | 287: | $mail->send(); | | 288: | } | | 289: | } | | 290: | } | | 291: | } | | 292: | } | | 293: | } | | 294: | } | | 295: | } | | 296: | } | | 297: | |
OpenCart API API documentation generated by ApiGen dev-master