. * * The interactive user interfaces in modified source and object code versions * of this program must display Appropriate Legal Notices, as required under * Section 5 of the GNU Affero General Public License version 3. * * In accordance with Section 7(b) of the GNU Affero General Public License version 3, * these Appropriate Legal Notices must retain the display of the "EspoCRM" word. ************************************************************************/ namespace Espo\Core\Utils\Address; use Espo\Core\Name\Field; use Espo\Core\Utils\Cache\DataCacheAccess; use Espo\Entities\AddressCountry; use Espo\ORM\EntityManager; use Espo\ORM\Query\Part\Order; class CountryDataProvider { private const string CACHE_KEY = 'addressCountryData'; private const int LIMIT = 500; /** * @param DataCacheAccess $dataCacheAccess */ public function __construct( private EntityManager $entityManager, private DataCacheAccess $dataCacheAccess, ) { $dataCacheAccess->init( key: self::CACHE_KEY, loader: function () { return $this->load(); }, ); } /** * @return array{list: string[], preferredList: string[]} */ public function get(): array { return $this->dataCacheAccess->get(); } /** * @return array{list: string[], preferredList: string[]} */ private function load(): array { $list = []; $preferredList = []; /** @var iterable $collection */ $collection = $this->entityManager ->getRDBRepositoryByClass(AddressCountry::class) ->sth() ->select([Field::NAME, 'isPreferred']) ->order(Field::NAME, Order::ASC) ->limit(0, self::LIMIT) ->find(); foreach ($collection as $entity) { $list[] = $entity->getName(); if ($entity->isPreferred()) { $preferredList[] = $entity->getName(); } } return [ 'list' => $list, 'preferredList' => $preferredList, ]; } }