18 private const MAX_CNT = 20;
20 private int $currentUserId;
26 $this->currentUserId = (int)CurrentUser::get()?->getId();
31 $normalizedAddress = $this->getNormalizedAddress($address);
34 ->setSelect([
'ID',
'ADDRESS'])
35 ->where(
'USER_ID', $this->currentUserId)
36 ->setOrder([
'USED_AT' =>
'DESC'])
37 ->setLimit(self::MAX_CNT)
42 foreach ($recentAddressList as $recentAddressListItem)
44 $recentAddress =
null;
47 $recentAddress = Address::fromJson($recentAddressListItem[
'ADDRESS']);
51 if ($recentAddress ===
null)
56 if ($this->areAddressesEqual($normalizedAddress, $recentAddress))
59 (
int)$recentAddressListItem[
'ID'],
61 'ADDRESS' => $normalizedAddress->toJson(),
74 'USER_ID' => $this->currentUserId,
75 'ADDRESS' => $normalizedAddress->toJson(),
80 public function get(
int $limit = self::MAX_CNT):
array
85 ->setSelect([
'ADDRESS'])
86 ->where(
'USER_ID', $this->currentUserId)
87 ->setLimit(min($limit, self::MAX_CNT))
88 ->setOrder([
'USED_AT' =>
'DESC'])
91 foreach ($recentAddressList as $recentAddressListItem)
93 $recentAddressJson = $recentAddressListItem[
'ADDRESS'];
95 $address = Address::fromJson($recentAddressJson);
113 DELETE FROM b_location_recent_address
115 USED_AT < ' . $helper->addDaysToDateTime(-30) .
'
118 return '\\Bitrix\\Location\\Infrastructure\\Service\\RecentAddressesService::cleanUp();';
121 private function areAddressesEqual(
Address $address1,
Address $address2): bool
123 return $this->getAddressFields($address1) === $this->getAddressFields($address2);
126 private function getAddressFields(Address $address):
array
131 foreach ($address->getFieldCollection() as $field)
133 $result[$field->getType()] = $field->getValue();
141 private function getNormalizedAddress(Address $address): Address
144 $address->getLanguageId()
146 $fieldCollection =
new Address\FieldCollection();
148 $result->setLatitude($address->getLatitude());
149 $result->setLongitude($address->getLongitude());
152 foreach ($address->getFieldCollection() as $field)
154 $fieldCollection->addItem(
155 new Address\Field($field->getType(), $field->getValue())
159 $result->setFieldCollection($fieldCollection);
static update($primary, array $data)