userContext->getActiveId()) === null) { return []; } $addressesQb = sqlQueryBuilder()->select('*') ->from('users_addresses') ->andWhere(Operator::equals(['id_user' => $userId])) ->orderBy('delivery_firm, delivery_surname, delivery_name'); $entities = []; foreach ($addressesQb->execute() as $address) { $entities[] = $this->entityUtil->createEntity($address, DeliveryAddressEntity::class, $this->deliveryAddressConverter); } return $entities; } public function getDeliveryAddressesForUsers(array $userIds): array { if (empty($userIds)) { return []; } $qb = sqlQueryBuilder()->select('*') ->from('users_addresses') ->where(Operator::inIntArray($userIds, 'id_user')) ->orderBy('delivery_firm, delivery_surname, delivery_name'); $userAddresses = []; foreach ($qb->execute() as $address) { $userAddresses[$address['id_user']][] = $this->entityUtil->createEntity($address, DeliveryAddressEntity::class, $this->deliveryAddressConverter); } return $userAddresses; } public function getDeliveryAddressesIds(): array { if (($userId = $this->userContext->getActiveId()) === null) { return []; } return sqlQueryBuilder()->select('id') ->from('users_addresses') ->andWhere(Operator::equals(['id_user' => $userId])) ->execute()->fetchFirstColumn(); } public function getDeliveryAddress(int $addressId): ?DeliveryAddressEntity { $address = sqlQueryBuilder()->select('*') ->from('users_addresses') ->andWhere(Operator::equals(['id' => $addressId])) ->execute()->fetchAssociative(); if ($address === false) { return null; } return $this->entityUtil->createEntity($address, DeliveryAddressEntity::class, $this->deliveryAddressConverter); } /** * @return bool true if new address was created * * @throws Exception */ public function saveDeliveryAddress(DeliveryAddressEntity $address): bool { $fields = [ 'id_user' => $address->getIdUser(), 'delivery_name' => $address->getName(), 'delivery_surname' => $address->getSurname(), 'delivery_firm' => $address->getFirm(), 'delivery_street' => $address->getStreet(), 'delivery_city' => $address->getCity(), 'delivery_zip' => $address->getZip(), 'delivery_country' => $address->getCountry(), 'delivery_phone' => $address->getPhone(), 'delivery_state' => $address->getState(), 'delivery_email' => $address->getEmail(), 'delivery_custom_address' => $address->getCustomAddress(), ]; $qb = sqlQueryBuilder(); if ($address->getId() !== null) { $qb->update('users_addresses') ->where(Operator::equals(['id' => $address->getId()])); } else { $qb->insert('users_addresses'); } $qb->directValues($fields)->execute(); if ($address->getId() === null) { $address->setId(sqlInsertId()); return true; } return false; } public function isAllowed(): bool { $cfg = Config::get(); if (empty($cfg['Modules']['user_addresses']['user_types'])) { return false; } foreach ($cfg['Modules']['user_addresses']['user_types'] as $type) { if ($this->userContext->isType($type)) { return true; } } return false; } public function deleteAddress(int $addressId, bool $checkUser = true): void { $qb = sqlQueryBuilder() ->delete('users_addresses') ->where(Operator::equals(['id' => $addressId])); if ($checkUser) { if (($userId = $this->userContext->getActiveId()) === null) { return; } $qb->andWhere(Operator::equals(['id_user' => $userId])); } $qb->execute(); } }