PluginProbe
Packeta / 1.3.0
Packeta v1.3.0
2.3.2 2.3.1 trunk 1.2.2 1.2.3 1.2.4 1.2.5 1.2.6 1.3.0 1.3.1 1.3.2 1.4 1.4.1 1.4.2 1.4.3 1.5.0 1.5.1 1.5.2 1.5.3 1.5.4 1.6.0 1.6.1 1.6.2 1.6.3 1.6.4 All 56 releases
packeta / src / Packetery / Module / Carrier / Updater.php

Updater.php in Packeta 1.3.0, at src/Packetery/Module/Carrier/Updater.php

129 lines 3.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Packeta carrier updater
4 *
5 * @package Packetery
6 */
7
8 declare( strict_types=1 );
9
10 namespace Packetery\Module\Carrier;
11
12 /**
13 * Class CarrierUpdater.
14 *
15 * @package Packetery
16 */
17 class Updater {
18
19 /**
20 * Carrier repository.
21 *
22 * @var Repository
23 */
24 private $carrier_repository;
25
26 /**
27 * CarrierUpdater constructor.
28 *
29 * @param Repository $carrier_repository Carrier repository.
30 */
31 public function __construct( Repository $carrier_repository ) {
32 $this->carrier_repository = $carrier_repository;
33 }
34
35 /**
36 * Validates data from API.
37 *
38 * @param array $carriers Data retrieved from API.
39 *
40 * @return bool
41 */
42 public function validate_carrier_data( array $carriers ): bool {
43 foreach ( $carriers as $carrier ) {
44 if ( ! isset(
45 $carrier['id'],
46 $carrier['name'],
47 $carrier['country'],
48 $carrier['currency'],
49 $carrier['pickupPoints'],
50 $carrier['apiAllowed'],
51 $carrier['separateHouseNumber'],
52 $carrier['customsDeclarations'],
53 $carrier['requiresEmail'],
54 $carrier['requiresPhone'],
55 $carrier['requiresSize'],
56 $carrier['disallowsCod'],
57 $carrier['maxWeight']
58 ) ) {
59 return false;
60 }
61 }
62
63 return true;
64 }
65
66 /**
67 * Maps input data to storage structure.
68 *
69 * @param array $carriers Validated data retrieved from API.
70 *
71 * @return array data to store in db
72 */
73 private function carriers_mapper( array $carriers ): array {
74 $mapped_data = array();
75
76 $carrier_boolean_params = array(
77 'is_pickup_points' => 'pickupPoints',
78 'has_carrier_direct_label' => 'apiAllowed',
79 'separate_house_number' => 'separateHouseNumber',
80 'customs_declarations' => 'customsDeclarations',
81 'requires_email' => 'requiresEmail',
82 'requires_phone' => 'requiresPhone',
83 'requires_size' => 'requiresSize',
84 'disallows_cod' => 'disallowsCod',
85 );
86
87 foreach ( $carriers as $carrier ) {
88 $carrier_id = (int) $carrier['id'];
89 $carrier_data = array(
90 'name' => $carrier['name'],
91 'country' => $carrier['country'],
92 'currency' => $carrier['currency'],
93 'max_weight' => (float) $carrier['maxWeight'],
94 'deleted' => false,
95 );
96 foreach ( $carrier_boolean_params as $column_name => $param_name ) {
97 $carrier_data[ $column_name ] = ( 'true' === $carrier[ $param_name ] );
98 }
99 $mapped_data[ $carrier_id ] = $carrier_data;
100 }
101
102 return $mapped_data;
103 }
104
105 /**
106 * Saves carriers.
107 *
108 * @param array $carriers Validated data retrieved from API.
109 */
110 public function save( array $carriers ): void {
111 $mapped_data = $this->carriers_mapper( $carriers );
112 $carriers_in_feed = array();
113
114 $carrier_check = $this->carrier_repository->get_carrier_ids();
115 $carriers_in_db = array_column( $carrier_check, 'id' );
116 foreach ( $mapped_data as $carrier_id => $carrier ) {
117 $carriers_in_feed[] = $carrier_id;
118 if ( in_array( (string) $carrier_id, $carriers_in_db, true ) ) {
119 $this->carrier_repository->update( $carrier, (int) $carrier_id );
120 } else {
121 $carrier['id'] = $carrier_id;
122 $this->carrier_repository->insert( $carrier );
123 }
124 }
125
126 $this->carrier_repository->set_others_as_deleted( $carriers_in_feed );
127 }
128 }
129