1: <?php
2: namespace Opencart\Catalog\Model\Checkout;
3: /**
4: * Class ShippingMethod
5: *
6: * @package Opencart\Catalog\Model\Checkout
7: */
8: class ShippingMethod extends \Opencart\System\Engine\Controller {
9: /**
10: * Get Methods
11: *
12: * @param array<string, mixed> $shipping_address
13: *
14: * @return array<string, array<string, mixed>>
15: */
16: public function getMethods(array $shipping_address): array {
17: $method_data = [];
18:
19: $this->load->model('setting/extension');
20:
21: $results = $this->model_setting_extension->getExtensionsByType('shipping');
22:
23: foreach ($results as $result) {
24: if ($this->config->get('shipping_' . $result['code'] . '_status')) {
25: $this->load->model('extension/' . $result['extension'] . '/shipping/' . $result['code']);
26:
27: if (is_callable([$this->{'model_extension_' . $result['extension'] . '_shipping_' . $result['code']}, 'getQuote'])) {
28: $quote = $this->{'model_extension_' . $result['extension'] . '_shipping_' . $result['code']}->getQuote($shipping_address);
29:
30: if ($quote) {
31: $method_data[$result['code']] = $quote;
32: }
33: }
34: }
35: }
36:
37: $sort_order = [];
38:
39: foreach ($method_data as $key => $value) {
40: $sort_order[$key] = $value['sort_order'];
41: }
42:
43: array_multisort($sort_order, SORT_ASC, $method_data);
44:
45: return $method_data;
46: }
47: }
48: