Back to Opencart

File catalog\controller\account\address.php

docs/api/source-catalog.controller.account.address.html

4.1.0.332.5 KB
Original Source

Namespaces

Classes

| 1: | <?php | | 2: | namespace Opencart\Catalog\Controller\Account; | | 3: | /** | | 4: | * Class Address | | 5: | * | | 6: | * @package Opencart\Catalog\Controller\Account | | 7: | */ | | 8: | class Address extends \Opencart\System\Engine\Controller { | | 9: | /** | | 10: | * @return void | | 11: | */ | | 12: | public function index(): void { | | 13: | $this->load->language('account/address'); | | 14: | | | 15: | if (!$this->customer->isLogged() || (!isset($this->request->get['customer_token']) || !isset($this->session->data['customer_token']) || ($this->request->get['customer_token'] != $this->session->data['customer_token']))) { | | 16: | $this->session->data['redirect'] = $this->url->link('account/address', 'language=' . $this->config->get('config_language')); | | 17: | | | 18: | $this->response->redirect($this->url->link('account/login', 'language=' . $this->config->get('config_language'), true)); | | 19: | } | | 20: | | | 21: | $this->document->setTitle($this->language->get('heading_title')); | | 22: | | | 23: | $data['breadcrumbs'][] = [ | | 24: | 'text' => $this->language->get('text_home'), | | 25: | 'href' => $this->url->link('common/home', 'language=' . $this->config->get('config_language')) | | 26: | ]; | | 27: | | | 28: | $data['breadcrumbs'][] = [ | | 29: | 'text' => $this->language->get('text_account'), | | 30: | 'href' => $this->url->link('account/account', 'language=' . $this->config->get('config_language') . '&customer_token=' . $this->session->data['customer_token']) | | 31: | ]; | | 32: | | | 33: | $data['breadcrumbs'][] = [ | | 34: | 'text' => $this->language->get('heading_title'), | | 35: | 'href' => $this->url->link('account/address', 'language=' . $this->config->get('config_language') . '&customer_token=' . $this->session->data['customer_token']) | | 36: | ]; | | 37: | | | 38: | if (isset($this->session->data['success'])) { | | 39: | $data['success'] = $this->session->data['success']; | | 40: | | | 41: | unset($this->session->data['success']); | | 42: | } else { | | 43: | $data['success'] = ''; | | 44: | } | | 45: | | | 46: | $data['add'] = $this->url->link('account/address.form', 'language=' . $this->config->get('config_language') . '&customer_token=' . $this->session->data['customer_token']); | | 47: | $data['back'] = $this->url->link('account/account', 'language=' . $this->config->get('config_language') . '&customer_token=' . $this->session->data['customer_token']); | | 48: | | | 49: | $data['list'] = $this->getList(); | | 50: | | | 51: | $data['language'] = $this->config->get('config_language'); | | 52: | | | 53: | $data['customer_token'] = $this->session->data['customer_token']; | | 54: | | | 55: | $data['column_left'] = $this->load->controller('common/column_left'); | | 56: | $data['column_right'] = $this->load->controller('common/column_right'); | | 57: | $data['content_top'] = $this->load->controller('common/content_top'); | | 58: | $data['content_bottom'] = $this->load->controller('common/content_bottom'); | | 59: | $data['footer'] = $this->load->controller('common/footer'); | | 60: | $data['header'] = $this->load->controller('common/header'); | | 61: | | | 62: | $this->response->setOutput($this->load->view('account/address', $data)); | | 63: | } | | 64: | | | 65: | /** | | 66: | * List | | 67: | * | | 68: | * @return void | | 69: | */ | | 70: | public function list(): void { | | 71: | $this->load->language('account/address'); | | 72: | | | 73: | if (!$this->customer->isLogged() || (!isset($this->request->get['customer_token']) || !isset($this->session->data['customer_token']) || ($this->request->get['customer_token'] != $this->session->data['customer_token']))) { | | 74: | $this->session->data['redirect'] = $this->url->link('account/address', 'language=' . $this->config->get('config_language')); | | 75: | | | 76: | $this->response->redirect($this->url->link('account/login', 'language=' . $this->config->get('config_language'), true)); | | 77: | } | | 78: | | | 79: | $this->response->setOutput($this->getList()); | | 80: | } | | 81: | | | 82: | /** | | 83: | * Get List | | 84: | * | | 85: | * @return string | | 86: | */ | | 87: | protected function getList(): string { | | 88: | $data['addresses'] = []; | | 89: | | | 90: | $this->load->model('account/address'); | | 91: | | | 92: | $results = $this->model_account_address->getAddresses($this->customer->getId()); | | 93: | | | 94: | foreach ($results as $result) { | | 95: | $find = [ | | 96: | '{firstname}', | | 97: | '{lastname}', | | 98: | '{company}', | | 99: | '{address_1}', | | 100: | '{address_2}', | | 101: | '{city}', | | 102: | '{postcode}', | | 103: | '{zone}', | | 104: | '{zone_code}', | | 105: | '{country}' | | 106: | ]; | | 107: | | | 108: | $replace = [ | | 109: | 'firstname' => $result['firstname'], | | 110: | 'lastname' => $result['lastname'], | | 111: | 'company' => $result['company'], | | 112: | 'address_1' => $result['address_1'], | | 113: | 'address_2' => $result['address_2'], | | 114: | 'city' => $result['city'], | | 115: | 'postcode' => $result['postcode'], | | 116: | 'zone' => $result['zone'], | | 117: | 'zone_code' => $result['zone_code'], | | 118: | 'country' => $result['country'] | | 119: | ]; | | 120: | | | 121: | $data['addresses'][] = [ | | 122: | 'address_id' => $result['address_id'], | | 123: | 'address' => str_replace(["\r\n", "\r", "\n"], '<br/>', preg_replace(["/\s\s+/", "/\r\r+/", "/\n\n+/"], '<br/>', trim(str_replace($find, $replace, $result['address_format'])))), | | 124: | 'edit' => $this->url->link('account/address.form', 'language=' . $this->config->get('config_language') . '&customer_token=' . $this->session->data['customer_token'] . '&address_id=' . $result['address_id']), | | 125: | 'delete' => $this->url->link('account/address.delete', 'language=' . $this->config->get('config_language') . '&customer_token=' . $this->session->data['customer_token'] . '&address_id=' . $result['address_id']) | | 126: | ]; | | 127: | } | | 128: | | | 129: | return $this->load->view('account/address_list', $data); | | 130: | } | | 131: | | | 132: | /** | | 133: | * Form | | 134: | * | | 135: | * @return void | | 136: | */ | | 137: | public function form(): void { | | 138: | $this->load->language('account/address'); | | 139: | | | 140: | if (!$this->customer->isLogged() || (!isset($this->request->get['customer_token']) || !isset($this->session->data['customer_token']) || ($this->request->get['customer_token'] != $this->session->data['customer_token']))) { | | 141: | $this->session->data['redirect'] = $this->url->link('account/address', 'language=' . $this->config->get('config_language')); | | 142: | | | 143: | $this->response->redirect($this->url->link('account/login', 'language=' . $this->config->get('config_language'), true)); | | 144: | } | | 145: | | | 146: | $this->document->setTitle($this->language->get('heading_title')); | | 147: | | | 148: | $data['text_address'] = !isset($this->request->get['address_id']) ? $this->language->get('text_address_add') : $this->language->get('text_address_edit'); | | 149: | | | 150: | $data['error_upload_size'] = sprintf($this->language->get('error_upload_size'), $this->config->get('config_file_max_size')); | | 151: | | | 152: | $data['config_file_max_size'] = ((int)$this->config->get('config_file_max_size') * 1024 * 1024); | | 153: | | | 154: | $data['breadcrumbs'] = []; | | 155: | | | 156: | $data['breadcrumbs'][] = [ | | 157: | 'text' => $this->language->get('text_home'), | | 158: | 'href' => $this->url->link('common/home', 'language=' . $this->config->get('config_language')) | | 159: | ]; | | 160: | | | 161: | $data['breadcrumbs'][] = [ | | 162: | 'text' => $this->language->get('text_account'), | | 163: | 'href' => $this->url->link('account/account', 'language=' . $this->config->get('config_language') . '&customer_token=' . $this->session->data['customer_token']) | | 164: | ]; | | 165: | | | 166: | $data['breadcrumbs'][] = [ | | 167: | 'text' => $this->language->get('heading_title'), | | 168: | 'href' => $this->url->link('account/address', 'language=' . $this->config->get('config_language') . '&customer_token=' . $this->session->data['customer_token']) | | 169: | ]; | | 170: | | | 171: | if (!isset($this->request->get['address_id'])) { | | 172: | $data['breadcrumbs'][] = [ | | 173: | 'text' => $this->language->get('text_address_add'), | | 174: | 'href' => $this->url->link('account/address.form', 'language=' . $this->config->get('config_language') . '&customer_token=' . $this->session->data['customer_token']) | | 175: | ]; | | 176: | } else { | | 177: | $data['breadcrumbs'][] = [ | | 178: | 'text' => $this->language->get('text_address_edit'), | | 179: | 'href' => $this->url->link('account/address.form', 'language=' . $this->config->get('config_language') . '&customer_token=' . $this->session->data['customer_token'] . '&address_id=' . $this->request->get['address_id']) | | 180: | ]; | | 181: | } | | 182: | | | 183: | if (!isset($this->request->get['address_id'])) { | | 184: | $data['save'] = $this->url->link('account/address.save', 'language=' . $this->config->get('config_language') . '&customer_token=' . $this->session->data['customer_token']); | | 185: | } else { | | 186: | $data['save'] = $this->url->link('account/address.save', 'language=' . $this->config->get('config_language') . '&customer_token=' . $this->session->data['customer_token'] . '&address_id=' . $this->request->get['address_id']); | | 187: | } | | 188: | | | 189: | $this->session->data['upload_token'] = oc_token(32); | | 190: | | | 191: | $data['upload'] = $this->url->link('tool/upload', 'language=' . $this->config->get('config_language') . '&upload_token=' . $this->session->data['upload_token']); | | 192: | | | 193: | if (isset($this->request->get['address_id'])) { | | 194: | $this->load->model('account/address'); | | 195: | | | 196: | $address_info = $this->model_account_address->getAddress($this->customer->getId(), $this->request->get['address_id']); | | 197: | } | | 198: | | | 199: | if (!empty($address_info)) { | | 200: | $data['firstname'] = $address_info['firstname']; | | 201: | } else { | | 202: | $data['firstname'] = ''; | | 203: | } | | 204: | | | 205: | if (!empty($address_info)) { | | 206: | $data['lastname'] = $address_info['lastname']; | | 207: | } else { | | 208: | $data['lastname'] = ''; | | 209: | } | | 210: | | | 211: | if (!empty($address_info)) { | | 212: | $data['company'] = $address_info['company']; | | 213: | } else { | | 214: | $data['company'] = ''; | | 215: | } | | 216: | | | 217: | if (!empty($address_info)) { | | 218: | $data['address_1'] = $address_info['address_1']; | | 219: | } else { | | 220: | $data['address_1'] = ''; | | 221: | } | | 222: | | | 223: | if (!empty($address_info)) { | | 224: | $data['address_2'] = $address_info['address_2']; | | 225: | } else { | | 226: | $data['address_2'] = ''; | | 227: | } | | 228: | | | 229: | if (!empty($address_info)) { | | 230: | $data['postcode'] = $address_info['postcode']; | | 231: | } else { | | 232: | $data['postcode'] = ''; | | 233: | } | | 234: | | | 235: | if (!empty($address_info)) { | | 236: | $data['city'] = $address_info['city']; | | 237: | } else { | | 238: | $data['city'] = ''; | | 239: | } | | 240: | | | 241: | if (!empty($address_info)) { | | 242: | $data['country_id'] = $address_info['country_id']; | | 243: | } else { | | 244: | $data['country_id'] = $this->config->get('config_country_id'); | | 245: | } | | 246: | | | 247: | if (!empty($address_info)) { | | 248: | $data['zone_id'] = $address_info['zone_id']; | | 249: | } else { | | 250: | $data['zone_id'] = ''; | | 251: | } | | 252: | | | 253: | $this->load->model('localisation/country'); | | 254: | | | 255: | $data['countries'] = $this->model_localisation_country->getCountries(); | | 256: | | | 257: | // Custom fields | | 258: | $data['custom_fields'] = []; | | 259: | | | 260: | $this->load->model('account/custom_field'); | | 261: | | | 262: | $custom_fields = $this->model_account_custom_field->getCustomFields($this->customer->getGroupId()); | | 263: | | | 264: | foreach ($custom_fields as $custom_field) { | | 265: | if ($custom_field['location'] == 'address') { | | 266: | $data['custom_fields'][] = $custom_field; | | 267: | } | | 268: | } | | 269: | | | 270: | if (!empty($address_info)) { | | 271: | $data['address_custom_field'] = $address_info['custom_field']; | | 272: | } else { | | 273: | $data['address_custom_field'] = []; | | 274: | } | | 275: | | | 276: | if (isset($this->request->get['address_id'])) { | | 277: | $data['default'] = $address_info['default']; | | 278: | } else { | | 279: | $data['default'] = false; | | 280: | } | | 281: | | | 282: | $data['back'] = $this->url->link('account/address', 'language=' . $this->config->get('config_language') . '&customer_token=' . $this->session->data['customer_token']); | | 283: | | | 284: | $data['language'] = $this->config->get('config_language'); | | 285: | | | 286: | $data['column_left'] = $this->load->controller('common/column_left'); | | 287: | $data['column_right'] = $this->load->controller('common/column_right'); | | 288: | $data['content_top'] = $this->load->controller('common/content_top'); | | 289: | $data['content_bottom'] = $this->load->controller('common/content_bottom'); | | 290: | $data['footer'] = $this->load->controller('common/footer'); | | 291: | $data['header'] = $this->load->controller('common/header'); | | 292: | | | 293: | $this->response->setOutput($this->load->view('account/address_form', $data)); | | 294: | } | | 295: | | | 296: | /** | | 297: | * Save | | 298: | * | | 299: | * @return void | | 300: | */ | | 301: | public function save(): void { | | 302: | $this->load->language('account/address'); | | 303: | | | 304: | $json = []; | | 305: | | | 306: | if (!$this->customer->isLogged() || (!isset($this->request->get['customer_token']) || !isset($this->session->data['customer_token']) || ($this->request->get['customer_token'] != $this->session->data['customer_token']))) { | | 307: | $this->session->data['redirect'] = $this->url->link('account/address', 'language=' . $this->config->get('config_language')); | | 308: | | | 309: | $json['redirect'] = $this->url->link('account/login', 'language=' . $this->config->get('config_language'), true); | | 310: | } | | 311: | | | 312: | if (!$json) { | | 313: | $keys = [ | | 314: | 'firstname', | | 315: | 'lastname', | | 316: | 'address_1', | | 317: | 'address_2', | | 318: | 'city', | | 319: | 'postcode', | | 320: | 'country_id', | | 321: | 'zone_id' | | 322: | ]; | | 323: | | | 324: | foreach ($keys as $key) { | | 325: | if (!isset($this->request->post[$key])) { | | 326: | $this->request->post[$key] = ''; | | 327: | } | | 328: | } | | 329: | | | 330: | if ((oc_strlen($this->request->post['firstname']) < 1) || (oc_strlen($this->request->post['firstname']) > 32)) { | | 331: | $json['error']['firstname'] = $this->language->get('error_firstname'); | | 332: | } | | 333: | | | 334: | if ((oc_strlen($this->request->post['lastname']) < 1) || (oc_strlen($this->request->post['lastname']) > 32)) { | | 335: | $json['error']['lastname'] = $this->language->get('error_lastname'); | | 336: | } | | 337: | | | 338: | if ((oc_strlen($this->request->post['address_1']) < 3) || (oc_strlen($this->request->post['address_1']) > 128)) { | | 339: | $json['error']['address_1'] = $this->language->get('error_address_1'); | | 340: | } | | 341: | | | 342: | if ((oc_strlen($this->request->post['city']) < 2) || (oc_strlen($this->request->post['city']) > 128)) { | | 343: | $json['error']['city'] = $this->language->get('error_city'); | | 344: | } | | 345: | | | 346: | $this->load->model('localisation/country'); | | 347: | | | 348: | $country_info = $this->model_localisation_country->getCountry((int)$this->request->post['country_id']); | | 349: | | | 350: | if ($country_info && $country_info['postcode_required'] && (oc_strlen($this->request->post['postcode']) < 2 || oc_strlen($this->request->post['postcode']) > 10)) { | | 351: | $json['error']['postcode'] = $this->language->get('error_postcode'); | | 352: | } | | 353: | | | 354: | if (!$country_info || $this->request->post['country_id'] == '') { | | 355: | $json['error']['country'] = $this->language->get('error_country'); | | 356: | } | | 357: | | | 358: | if ($this->request->post['zone_id'] == '') { | | 359: | $json['error']['zone'] = $this->language->get('error_zone'); | | 360: | } | | 361: | | | 362: | // Custom field validation | | 363: | $this->load->model('account/custom_field'); | | 364: | | | 365: | $custom_fields = $this->model_account_custom_field->getCustomFields($this->customer->getGroupId()); | | 366: | | | 367: | foreach ($custom_fields as $custom_field) { | | 368: | if ($custom_field['location'] == 'address') { | | 369: | if ($custom_field['required'] && empty($this->request->post['custom_field'][$custom_field['custom_field_id']])) { | | 370: | $json['error']['custom_field_' . $custom_field['custom_field_id']] = sprintf($this->language->get('error_custom_field'), $custom_field['name']); | | 371: | } elseif (($custom_field['type'] == 'text') && !empty($custom_field['validation']) && !preg_match(html_entity_decode($custom_field['validation'], ENT_QUOTES, 'UTF-8'), $this->request->post['custom_field'][$custom_field['custom_field_id']])) { | | 372: | $json['error']['custom_field_' . $custom_field['custom_field_id']] = sprintf($this->language->get('error_regex'), $custom_field['name']); | | 373: | } | | 374: | } | | 375: | } | | 376: | | | 377: | if (isset($this->request->get['address_id']) && ($this->customer->getAddressId() == $this->request->get['address_id']) && !$this->request->post['default']) { | | 378: | $json['error'] = $this->language->get('error_default'); | | 379: | } | | 380: | } | | 381: | | | 382: | if (!$json) { | | 383: | $this->load->model('account/address'); | | 384: | | | 385: | // Add Address | | 386: | if (!isset($this->request->get['address_id'])) { | | 387: | $this->model_account_address->addAddress($this->customer->getId(), $this->request->post); | | 388: | | | 389: | $this->session->data['success'] = $this->language->get('text_add'); | | 390: | } | | 391: | | | 392: | // Edit Address | | 393: | if (isset($this->request->get['address_id'])) { | | 394: | $this->model_account_address->editAddress($this->request->get['address_id'], $this->request->post); | | 395: | | | 396: | // If address is in session update it. | | 397: | if (isset($this->session->data['shipping_address']) && ($this->session->data['shipping_address']['address_id'] == $this->request->get['address_id'])) { | | 398: | $this->session->data['shipping_address'] = $this->model_account_address->getAddress($this->customer->getId(), $this->request->get['address_id']); | | 399: | | | 400: | unset($this->session->data['shipping_method']); | | 401: | unset($this->session->data['shipping_methods']); | | 402: | unset($this->session->data['payment_method']); | | 403: | unset($this->session->data['payment_methods']); | | 404: | } | | 405: | | | 406: | // If address is in session update it. | | 407: | if (isset($this->session->data['payment_address']) && ($this->session->data['payment_address']['address_id'] == $this->request->get['address_id'])) { | | 408: | $this->session->data['payment_address'] = $this->model_account_address->getAddress($this->customer->getId(), $this->request->get['address_id']); | | 409: | | | 410: | unset($this->session->data['shipping_method']); | | 411: | unset($this->session->data['shipping_methods']); | | 412: | unset($this->session->data['payment_method']); | | 413: | unset($this->session->data['payment_methods']); | | 414: | } | | 415: | | | 416: | $this->session->data['success'] = $this->language->get('text_edit'); | | 417: | } | | 418: | | | 419: | $json['redirect'] = $this->url->link('account/address', 'language=' . $this->config->get('config_language') . '&customer_token=' . $this->session->data['customer_token'], true); | | 420: | } | | 421: | | | 422: | $this->response->addHeader('Content-Type: application/json'); | | 423: | $this->response->setOutput(json_encode($json)); | | 424: | } | | 425: | | | 426: | /** | | 427: | * Delete | | 428: | * | | 429: | * @return void | | 430: | */ | | 431: | public function delete(): void { | | 432: | $this->load->language('account/address'); | | 433: | | | 434: | $json = []; | | 435: | | | 436: | if (isset($this->request->get['address_id'])) { | | 437: | $address_id = $this->request->get['address_id']; | | 438: | } else { | | 439: | $address_id = 0; | | 440: | } | | 441: | | | 442: | if (!$this->customer->isLogged() || (!isset($this->request->get['customer_token']) || !isset($this->session->data['customer_token']) || ($this->request->get['customer_token'] != $this->session->data['customer_token']))) { | | 443: | $this->session->data['redirect'] = $this->url->link('account/address', 'language=' . $this->config->get('config_language')); | | 444: | | | 445: | $json['redirect'] = $this->url->link('account/login', 'language=' . $this->config->get('config_language'), true); | | 446: | } | | 447: | | | 448: | if (!$json) { | | 449: | if ($this->customer->getAddressId() == $address_id) { | | 450: | $json['error'] = $this->language->get('error_default'); | | 451: | } | | 452: | | | 453: | $this->load->model('account/address'); | | 454: | | | 455: | if ($this->model_account_address->getTotalAddresses($this->customer->getId()) == 1) { | | 456: | $json['error'] = $this->language->get('error_delete'); | | 457: | } | | 458: | | | 459: | $this->load->model('account/subscription'); | | 460: | | | 461: | $subscription_total = $this->model_account_subscription->getTotalSubscriptionByShippingAddressId($address_id); | | 462: | | | 463: | if ($subscription_total) { | | 464: | $json['error'] = sprintf($this->language->get('error_subscription'), $subscription_total); | | 465: | } | | 466: | | | 467: | $subscription_total = $this->model_account_subscription->getTotalSubscriptionByPaymentAddressId($address_id); | | 468: | | | 469: | if ($subscription_total) { | | 470: | $json['error'] = sprintf($this->language->get('error_subscription'), $subscription_total); | | 471: | } | | 472: | } | | 473: | | | 474: | if (!$json) { | | 475: | // Delete address from database. | | 476: | $this->model_account_address->deleteAddress($this->customer->getId(), $address_id); | | 477: | | | 478: | // Delete address from session. | | 479: | if (isset($this->session->data['shipping_address']['address_id']) && ($this->session->data['shipping_address']['address_id'] == $address_id)) { | | 480: | unset($this->session->data['shipping_address']); | | 481: | unset($this->session->data['shipping_method']); | | 482: | unset($this->session->data['shipping_methods']); | | 483: | unset($this->session->data['payment_method']); | | 484: | unset($this->session->data['payment_methods']); | | 485: | } | | 486: | | | 487: | // Delete address from session. | | 488: | if (isset($this->session->data['payment_address']['address_id']) && ($this->session->data['payment_address']['address_id'] == $address_id)) { | | 489: | unset($this->session->data['payment_address']); | | 490: | unset($this->session->data['shipping_method']); | | 491: | unset($this->session->data['shipping_methods']); | | 492: | unset($this->session->data['payment_method']); | | 493: | unset($this->session->data['payment_methods']); | | 494: | } | | 495: | | | 496: | $json['success'] = $this->language->get('text_delete'); | | 497: | } | | 498: | | | 499: | $this->response->addHeader('Content-Type: application/json'); | | 500: | $this->response->setOutput(json_encode($json)); | | 501: | } | | 502: | } | | 503: | |

OpenCart API API documentation generated by ApiGen dev-master