File: /home/petsclubcc/magento/vendor/magento/module-directory/Model/ResourceModel/Region/Collection.php
<?php
/**
* Copyright © 2016 Magento. All rights reserved.
* See COPYING.txt for license details.
*/
/**
* Country collection
*/
namespace Magento\Directory\Model\ResourceModel\Region;
class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
{
/**
* Locale region name table name
*
* @var string
*/
protected $_regionNameTable;
/**
* Country table name
*
* @var string
*/
protected $_countryTable;
/**
* @var \Magento\Framework\Locale\ResolverInterface
*/
protected $_localeResolver;
/**
* @param \Magento\Framework\Data\Collection\EntityFactory $entityFactory
* @param \Psr\Log\LoggerInterface $logger
* @param \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy
* @param \Magento\Framework\Event\ManagerInterface $eventManager
* @param \Magento\Framework\Locale\ResolverInterface $localeResolver
* @param mixed $connection
* @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
*/
public function __construct(
\Magento\Framework\Data\Collection\EntityFactory $entityFactory,
\Psr\Log\LoggerInterface $logger,
\Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy,
\Magento\Framework\Event\ManagerInterface $eventManager,
\Magento\Framework\Locale\ResolverInterface $localeResolver,
\Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
\Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null
) {
$this->_localeResolver = $localeResolver;
$this->_resource = $resource;
parent::__construct($entityFactory, $logger, $fetchStrategy, $eventManager, $connection, $resource);
}
/**
* Define main, country, locale region name tables
*
* @return void
*/
protected function _construct()
{
$this->_init('Magento\Directory\Model\Region', 'Magento\Directory\Model\ResourceModel\Region');
$this->_countryTable = $this->getTable('directory_country');
$this->_regionNameTable = $this->getTable('directory_country_region_name');
$this->addOrder('name', \Magento\Framework\Data\Collection::SORT_ORDER_ASC);
$this->addOrder('default_name', \Magento\Framework\Data\Collection::SORT_ORDER_ASC);
}
/**
* Initialize select object
*
* @return $this
*/
protected function _initSelect()
{
parent::_initSelect();
$locale = $this->_localeResolver->getLocale();
$this->addBindParam(':region_locale', $locale);
$this->getSelect()->joinLeft(
['rname' => $this->_regionNameTable],
'main_table.region_id = rname.region_id AND rname.locale = :region_locale',
['name']
);
return $this;
}
/**
* Filter by country_id
*
* @param string|array $countryId
* @return $this
*/
public function addCountryFilter($countryId)
{
if (!empty($countryId)) {
if (is_array($countryId)) {
$this->addFieldToFilter('main_table.country_id', ['in' => $countryId]);
} else {
$this->addFieldToFilter('main_table.country_id', $countryId);
}
}
return $this;
}
/**
* Filter by country code (ISO 3)
*
* @param string $countryCode
* @return $this
*/
public function addCountryCodeFilter($countryCode)
{
$this->getSelect()->joinLeft(
['country' => $this->_countryTable],
'main_table.country_id = country.country_id'
)->where(
'country.iso3_code = ?',
$countryCode
);
return $this;
}
/**
* Filter by Region code
*
* @param string|array $regionCode
* @return $this
*/
public function addRegionCodeFilter($regionCode)
{
if (!empty($regionCode)) {
if (is_array($regionCode)) {
$this->addFieldToFilter('main_table.code', ['in' => $regionCode]);
} else {
$this->addFieldToFilter('main_table.code', $regionCode);
}
}
return $this;
}
/**
* Filter by region name
*
* @param string|array $regionName
* @return $this
*/
public function addRegionNameFilter($regionName)
{
if (!empty($regionName)) {
if (is_array($regionName)) {
$this->addFieldToFilter('main_table.default_name', ['in' => $regionName]);
} else {
$this->addFieldToFilter('main_table.default_name', $regionName);
}
}
return $this;
}
/**
* Filter region by its code or name
*
* @param string|array $region
* @return $this
*/
public function addRegionCodeOrNameFilter($region)
{
if (!empty($region)) {
$condition = is_array($region) ? ['in' => $region] : $region;
$this->addFieldToFilter(
['main_table.code', 'main_table.default_name'],
[$condition, $condition]
);
}
return $this;
}
/**
* Convert collection items to select options array
*
* @return array
*/
public function toOptionArray()
{
$options = [];
$propertyMap = [
'value' => 'region_id',
'title' => 'default_name',
'country_id' => 'country_id',
];
foreach ($this as $item) {
$option = [];
foreach ($propertyMap as $code => $field) {
$option[$code] = $item->getData($field);
}
$option['label'] = $item->getName();
$options[] = $option;
}
if (count($options) > 0) {
array_unshift(
$options,
['title' => null, 'value' => null, 'label' => __('Please select a region, state or province.')]
);
}
return $options;
}
}