| @@ -18,10 +18,8 @@ | ||
| 18 | 18 | * @package Packetery |
| 19 | 19 | */ |
| 20 | 20 | class Repository { |
| 21 | 21 | |
| 22 | - public const INTERNAL_PICKUP_POINTS_ID = 'packeta'; | |
| 23 | - | |
| 24 | 22 | private const COLUMN_NAMES = [ |
| 25 | 23 | 'id', |
| 26 | 24 | 'name', |
| 27 | 25 | 'is_pickup_points', |
| @@ -35,8 +33,9 @@ | ||
| 35 | 33 | 'country', |
| 36 | 34 | 'currency', |
| 37 | 35 | 'max_weight', |
| 38 | 36 | 'deleted', |
| 37 | + 'available', | |
| 39 | 38 | ]; |
| 40 | 39 | |
| 41 | 40 | /** |
| 42 | 41 | * WpdbAdapter object from global |
| @@ -45,26 +44,16 @@ | ||
| 45 | 44 | */ |
| 46 | 45 | private $wpdbAdapter; |
| 47 | 46 | |
| 48 | 47 | /** |
| 49 | - * Internal pickup points config. | |
| 50 | - * | |
| 51 | - * @var PacketaPickupPointsConfig | |
| 52 | - */ | |
| 53 | - private $pickupPointsConfig; | |
| 54 | - | |
| 55 | - /** | |
| 56 | 48 | * Repository constructor. |
| 57 | 49 | * |
| 58 | - * @param WpdbAdapter $wpdbAdapter WpdbAdapter. | |
| 59 | - * @param PacketaPickupPointsConfig $pickupPointsConfig Internal pickup points config. | |
| 50 | + * @param WpdbAdapter $wpdbAdapter WpdbAdapter. | |
| 60 | 51 | */ |
| 61 | 52 | public function __construct( |
| 62 | - WpdbAdapter $wpdbAdapter, | |
| 63 | - PacketaPickupPointsConfig $pickupPointsConfig | |
| 53 | + WpdbAdapter $wpdbAdapter | |
| 64 | 54 | ) { |
| 65 | - $this->wpdbAdapter = $wpdbAdapter; | |
| 66 | - $this->pickupPointsConfig = $pickupPointsConfig; | |
| 55 | + $this->wpdbAdapter = $wpdbAdapter; | |
| 67 | 56 | } |
| 68 | 57 | |
| 69 | 58 | /** |
| 70 | 59 | * Create table to store carriers. |
| @@ -71,9 +60,9 @@ | ||
| 71 | 60 | * |
| 72 | 61 | * @return bool |
| 73 | 62 | */ |
| 74 | 63 | public function createOrAlterTable(): bool { |
| 75 | - $createTableQuery = 'CREATE TABLE ' . $this->wpdbAdapter->packetery_carrier . ' ( | |
| 64 | + $createTableQuery = 'CREATE TABLE ' . $this->wpdbAdapter->packeteryCarrier . ' ( | |
| 76 | 65 | `id` int(11) NOT NULL, |
| 77 | 66 | `name` varchar(255) NOT NULL, |
| 78 | 67 | `is_pickup_points` tinyint(1) NOT NULL, |
| 79 | 68 | `has_carrier_direct_label` tinyint(1) NOT NULL, |
| @@ -85,23 +74,17 @@ | ||
| 85 | 74 | `disallows_cod` tinyint(1) NOT NULL, |
| 86 | 75 | `country` varchar(255) NOT NULL, |
| 87 | 76 | `currency` varchar(255) NOT NULL, |
| 88 | 77 | `max_weight` float NOT NULL, |
| 78 | + `available` tinyint(1) NOT NULL DEFAULT 1, | |
| 89 | 79 | `deleted` tinyint(1) NOT NULL, |
| 90 | 80 | PRIMARY KEY (`id`) |
| 91 | 81 | ) ' . $this->wpdbAdapter->get_charset_collate(); |
| 92 | 82 | |
| 93 | - return $this->wpdbAdapter->dbDelta( $createTableQuery, $this->wpdbAdapter->packetery_carrier ); | |
| 83 | + return $this->wpdbAdapter->dbDelta( $createTableQuery, $this->wpdbAdapter->packeteryCarrier ); | |
| 94 | 84 | } |
| 95 | 85 | |
| 96 | 86 | /** |
| 97 | - * Drop table used to store carriers. | |
| 98 | - */ | |
| 99 | - public function drop(): void { | |
| 100 | - $this->wpdbAdapter->query( 'DROP TABLE IF EXISTS `' . $this->wpdbAdapter->packetery_carrier . '`' ); | |
| 101 | - } | |
| 102 | - | |
| 103 | - /** | |
| 104 | 87 | * Gets is_pickup_point attribute of a carrier. |
| 105 | 88 | * |
| 106 | 89 | * @param int $carrierId Carrier id. |
| 107 | 90 | * |
| @@ -108,9 +91,9 @@ | ||
| 108 | 91 | * @return bool |
| 109 | 92 | */ |
| 110 | 93 | public function hasPickupPoints( int $carrierId ): bool { |
| 111 | 94 | return (bool) $this->wpdbAdapter->get_var( |
| 112 | - $this->wpdbAdapter->prepare( 'SELECT `is_pickup_points` FROM `' . $this->wpdbAdapter->packetery_carrier . '` WHERE `id` = %d', $carrierId ) | |
| 95 | + $this->wpdbAdapter->prepare( 'SELECT `is_pickup_points` FROM `' . $this->wpdbAdapter->packeteryCarrier . '` WHERE `id` = %d', $carrierId ) | |
| 113 | 96 | ); |
| 114 | 97 | } |
| 115 | 98 | |
| 116 | 99 | /** |
| @@ -117,15 +100,15 @@ | ||
| 117 | 100 | * Gets Carrier value object by id. |
| 118 | 101 | * |
| 119 | 102 | * @param int $carrierId Carrier id. |
| 120 | 103 | * |
| 121 | - * @return array|null | |
| 104 | + * @return array<string, string>|null | |
| 122 | 105 | */ |
| 123 | 106 | public function getById( int $carrierId ): ?array { |
| 124 | 107 | return $this->wpdbAdapter->get_row( |
| 125 | 108 | $this->wpdbAdapter->prepare( |
| 126 | 109 | 'SELECT `' . implode( '`, `', self::COLUMN_NAMES ) . '` |
| 127 | - FROM `' . $this->wpdbAdapter->packetery_carrier . '` WHERE `id` = %s', | |
| 110 | + FROM `' . $this->wpdbAdapter->packeteryCarrier . '` WHERE `id` = %s', | |
| 128 | 111 | $carrierId |
| 129 | 112 | ), |
| 130 | 113 | ARRAY_A |
| 131 | 114 | ); |
| @@ -134,16 +117,18 @@ | ||
| 134 | 117 | /** |
| 135 | 118 | * Gets all active carriers for a country. |
| 136 | 119 | * |
| 137 | 120 | * @param string $country ISO code. |
| 121 | + * @param bool $includeUnavailable Include unavailable carriers. | |
| 138 | 122 | * |
| 139 | 123 | * @return array|null |
| 140 | 124 | */ |
| 141 | - public function getByCountry( string $country ): ?array { | |
| 125 | + public function getByCountry( string $country, bool $includeUnavailable ): ?array { | |
| 142 | 126 | return $this->wpdbAdapter->get_results( |
| 143 | 127 | $this->wpdbAdapter->prepare( |
| 144 | 128 | 'SELECT `' . implode( '`, `', self::COLUMN_NAMES ) . '` |
| 145 | - FROM `' . $this->wpdbAdapter->packetery_carrier . '` WHERE `country` = %s AND `deleted` = false', | |
| 129 | + FROM `' . $this->wpdbAdapter->packeteryCarrier . '` WHERE `country` = %s AND `deleted` = false' . | |
| 130 | + ( $includeUnavailable ? '' : ' AND `available` = true' ), | |
| 146 | 131 | $country |
| 147 | 132 | ), |
| 148 | 133 | ARRAY_A |
| 149 | 134 | ); |
| @@ -156,9 +141,9 @@ | ||
| 156 | 141 | */ |
| 157 | 142 | public function getActiveCarriers(): ?array { |
| 158 | 143 | return $this->wpdbAdapter->get_results( |
| 159 | 144 | 'SELECT `' . implode( '`, `', self::COLUMN_NAMES ) . '` |
| 160 | - FROM `' . $this->wpdbAdapter->packetery_carrier . '` WHERE `deleted` = false', | |
| 145 | + FROM `' . $this->wpdbAdapter->packeteryCarrier . '` WHERE `deleted` = false AND `available` = true', | |
| 161 | 146 | ARRAY_A |
| 162 | 147 | ); |
| 163 | 148 | } |
| 164 | 149 | |
| @@ -164,14 +149,14 @@ | ||
| 164 | 149 | |
| 165 | 150 | /** |
| 166 | 151 | * Gets all carriers. |
| 167 | 152 | * |
| 168 | - * @return array[] | |
| 153 | + * @return array<int, array<string, string|float|bool>> | |
| 169 | 154 | */ |
| 170 | 155 | public function getAllRawIndexed(): array { |
| 171 | 156 | $unIndexedResult = $this->wpdbAdapter->get_results( |
| 172 | 157 | 'SELECT `' . implode( '`, `', self::COLUMN_NAMES ) . '` |
| 173 | - FROM `' . $this->wpdbAdapter->packetery_carrier . '`', | |
| 158 | + FROM `' . $this->wpdbAdapter->packeteryCarrier . '`', | |
| 174 | 159 | ARRAY_A |
| 175 | 160 | ); |
| 176 | 161 | |
| 177 | 162 | return array_combine( array_column( $unIndexedResult, 'id' ), $unIndexedResult ); |
| @@ -182,9 +167,9 @@ | ||
| 182 | 167 | * |
| 183 | 168 | * @return bool |
| 184 | 169 | */ |
| 185 | 170 | public function hasAnyActiveFeedCarrier(): bool { |
| 186 | - return (bool) $this->wpdbAdapter->get_var( 'SELECT 1 FROM `' . $this->wpdbAdapter->packetery_carrier . '` WHERE `deleted` = false LIMIT 1' ); | |
| 171 | + return (bool) $this->wpdbAdapter->get_var( 'SELECT 1 FROM `' . $this->wpdbAdapter->packeteryCarrier . '` WHERE `deleted` = false AND `available` = true LIMIT 1' ); | |
| 187 | 172 | } |
| 188 | 173 | |
| 189 | 174 | /** |
| 190 | 175 | * Gets all active countries. |
| @@ -190,10 +175,10 @@ | ||
| 190 | 175 | * Gets all active countries. |
| 191 | 176 | * |
| 192 | 177 | * @return array |
| 193 | 178 | */ |
| 194 | - public function getCountries(): array { | |
| 195 | - return $this->wpdbAdapter->get_col( 'SELECT `country` FROM `' . $this->wpdbAdapter->packetery_carrier . '` WHERE `deleted` = false GROUP BY `country` ORDER BY `country`' ); | |
| 179 | + public function getCountriesWithUnavailable(): array { | |
| 180 | + return $this->wpdbAdapter->get_col( 'SELECT `country` FROM `' . $this->wpdbAdapter->packeteryCarrier . '` WHERE `deleted` = false GROUP BY `country` ORDER BY `country`' ); | |
| 196 | 181 | } |
| 197 | 182 | |
| 198 | 183 | /** |
| 199 | 184 | * Set carriers specified by ids as deleted. |
| @@ -201,9 +186,9 @@ | ||
| 201 | 186 | * @param array $carrierIdsNotInFeed Carriers not in feed. |
| 202 | 187 | */ |
| 203 | 188 | public function set_as_deleted( array $carrierIdsNotInFeed ): void { |
| 204 | 189 | $this->wpdbAdapter->query( |
| 205 | - 'UPDATE `' . $this->wpdbAdapter->packetery_carrier . '` | |
| 190 | + 'UPDATE `' . $this->wpdbAdapter->packeteryCarrier . '` | |
| 206 | 191 | SET `deleted` = 1 WHERE `id` IN (' . implode( ',', $carrierIdsNotInFeed ) . ')' |
| 207 | 192 | ); |
| 208 | 193 | } |
| 209 | 194 | |
| @@ -210,11 +195,12 @@ | ||
| 210 | 195 | /** |
| 211 | 196 | * Inserts carrier data to db. |
| 212 | 197 | * |
| 213 | 198 | * @param array $data Carrier data. |
| 199 | + * @return int|false The number of rows inserted, or false on error. | |
| 214 | 200 | */ |
| 215 | - public function insert( array $data ): void { | |
| 216 | - $this->wpdbAdapter->insert( $this->wpdbAdapter->packetery_carrier, $data ); | |
| 201 | + public function insert( array $data ) { | |
| 202 | + return $this->wpdbAdapter->insert( $this->wpdbAdapter->packeteryCarrier, $data ); | |
| 217 | 203 | } |
| 218 | 204 | |
| 219 | 205 | /** |
| 220 | 206 | * Updates carrier data in db. |
| @@ -219,26 +205,11 @@ | ||
| 219 | 205 | /** |
| 220 | 206 | * Updates carrier data in db. |
| 221 | 207 | * |
| 222 | 208 | * @param array $data Carrier data. |
| 223 | - * @param int $carrier_id Carrier id. | |
| 209 | + * @param int $carrierId Carrier id. | |
| 210 | + * @return int|false The number of rows updated, or false on error. | |
| 224 | 211 | */ |
| 225 | - public function update( array $data, int $carrier_id ): void { | |
| 226 | - $this->wpdbAdapter->update( $this->wpdbAdapter->packetery_carrier, $data, [ 'id' => $carrier_id ] ); | |
| 212 | + public function update( array $data, int $carrierId ) { | |
| 213 | + return $this->wpdbAdapter->update( $this->wpdbAdapter->packeteryCarrier, $data, [ 'id' => $carrierId ] ); | |
| 227 | 214 | } |
| 228 | - | |
| 229 | - /** | |
| 230 | - * Checks if carrier is home delivery carrier. | |
| 231 | - * | |
| 232 | - * @param string $carrierId Carrier ID. | |
| 233 | - * | |
| 234 | - * @return bool | |
| 235 | - */ | |
| 236 | - public function isHomeDeliveryCarrier( string $carrierId ): bool { | |
| 237 | - if ( self::INTERNAL_PICKUP_POINTS_ID === $carrierId ) { | |
| 238 | - return false; | |
| 239 | - } | |
| 240 | - | |
| 241 | - return false === $this->hasPickupPoints( (int) $carrierId ); | |
| 242 | - } | |
| 243 | - | |
| 244 | 215 | } |