mirror of
https://github.com/bdnugget/magento2.git
synced 2026-11-07 09:17:35 +00:00
159 lines
4.6 KiB
PHP
159 lines
4.6 KiB
PHP
<?php
|
|
/**
|
|
* Copyright © Magento, Inc. All rights reserved.
|
|
* See COPYING.txt for license details.
|
|
*/
|
|
|
|
namespace Magento\Directory\Model\ResourceModel;
|
|
|
|
/**
|
|
* Region Resource Model
|
|
*
|
|
* @api
|
|
* @since 100.0.2
|
|
*/
|
|
class Region extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
|
|
{
|
|
/**
|
|
* Table with localized region names
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $_regionNameTable;
|
|
|
|
/**
|
|
* @var \Magento\Framework\Locale\ResolverInterface
|
|
*/
|
|
protected $_localeResolver;
|
|
|
|
/**
|
|
* @param \Magento\Framework\Model\ResourceModel\Db\Context $context
|
|
* @param \Magento\Framework\Locale\ResolverInterface $localeResolver
|
|
* @param string $connectionName
|
|
*/
|
|
public function __construct(
|
|
\Magento\Framework\Model\ResourceModel\Db\Context $context,
|
|
\Magento\Framework\Locale\ResolverInterface $localeResolver,
|
|
$connectionName = null
|
|
) {
|
|
parent::__construct($context, $connectionName);
|
|
$this->_localeResolver = $localeResolver;
|
|
}
|
|
|
|
/**
|
|
* Define main and locale region name tables
|
|
*
|
|
* @return void
|
|
*/
|
|
protected function _construct()
|
|
{
|
|
$this->_init('directory_country_region', 'region_id');
|
|
$this->_regionNameTable = $this->getTable('directory_country_region_name');
|
|
}
|
|
|
|
/**
|
|
* Retrieve select object for load object data
|
|
*
|
|
* @param string $field
|
|
* @param mixed $value
|
|
* @param \Magento\Framework\Model\AbstractModel $object
|
|
* @return \Magento\Framework\DB\Select
|
|
*/
|
|
protected function _getLoadSelect($field, $value, $object)
|
|
{
|
|
$select = parent::_getLoadSelect($field, $value, $object);
|
|
$connection = $this->getConnection();
|
|
|
|
$locale = $this->_localeResolver->getLocale();
|
|
$systemLocale = \Magento\Framework\AppInterface::DISTRO_LOCALE_CODE;
|
|
|
|
$regionField = $connection->quoteIdentifier($this->getMainTable() . '.' . $this->getIdFieldName());
|
|
|
|
$condition = $connection->quoteInto('lrn.locale = ?', $locale);
|
|
$select->joinLeft(
|
|
['lrn' => $this->_regionNameTable],
|
|
"{$regionField} = lrn.region_id AND {$condition}",
|
|
[]
|
|
);
|
|
|
|
if ($locale != $systemLocale) {
|
|
$nameExpr = $connection->getCheckSql('lrn.region_id is null', 'srn.name', 'lrn.name');
|
|
$condition = $connection->quoteInto('srn.locale = ?', $systemLocale);
|
|
$select->joinLeft(
|
|
['srn' => $this->_regionNameTable],
|
|
"{$regionField} = srn.region_id AND {$condition}",
|
|
['name' => $nameExpr]
|
|
);
|
|
} else {
|
|
$select->columns(['name'], 'lrn');
|
|
}
|
|
|
|
return $select;
|
|
}
|
|
|
|
/**
|
|
* Load object by country id and code or default name
|
|
*
|
|
* @param \Magento\Framework\Model\AbstractModel $object
|
|
* @param int $countryId
|
|
* @param string $value
|
|
* @param string $field
|
|
* @return $this
|
|
*/
|
|
protected function _loadByCountry($object, $countryId, $value, $field)
|
|
{
|
|
$connection = $this->getConnection();
|
|
$locale = $this->_localeResolver->getLocale();
|
|
$joinCondition = $connection->quoteInto('rname.region_id = region.region_id AND rname.locale = ?', $locale);
|
|
$select = $connection->select()->from(
|
|
['region' => $this->getMainTable()]
|
|
)->joinLeft(
|
|
['rname' => $this->_regionNameTable],
|
|
$joinCondition,
|
|
['name']
|
|
)->where(
|
|
'region.country_id = ?',
|
|
$countryId
|
|
)->where(
|
|
"region.{$field} = ?",
|
|
$value
|
|
);
|
|
|
|
$data = $connection->fetchRow($select);
|
|
if ($data) {
|
|
$object->setData($data);
|
|
}
|
|
|
|
$this->_afterLoad($object);
|
|
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* Loads region by region code and country id
|
|
*
|
|
* @param \Magento\Directory\Model\Region $region
|
|
* @param string $regionCode
|
|
* @param string $countryId
|
|
*
|
|
* @return $this
|
|
*/
|
|
public function loadByCode(\Magento\Directory\Model\Region $region, $regionCode, $countryId)
|
|
{
|
|
return $this->_loadByCountry($region, $countryId, (string)$regionCode, 'code');
|
|
}
|
|
|
|
/**
|
|
* Load data by country id and default region name
|
|
*
|
|
* @param \Magento\Directory\Model\Region $region
|
|
* @param string $regionName
|
|
* @param string $countryId
|
|
* @return $this
|
|
*/
|
|
public function loadByName(\Magento\Directory\Model\Region $region, $regionName, $countryId)
|
|
{
|
|
return $this->_loadByCountry($region, $countryId, (string)$regionName, 'default_name');
|
|
}
|
|
}
|