mirror of
https://github.com/bdnugget/magento2.git
synced 2026-11-07 09:17:35 +00:00
192 lines
5.5 KiB
PHP
192 lines
5.5 KiB
PHP
<?php
|
|
/**
|
|
*
|
|
* Copyright © Magento, Inc. All rights reserved.
|
|
* See COPYING.txt for license details.
|
|
*/
|
|
|
|
namespace Magento\Customer\Model;
|
|
|
|
use Magento\Customer\Api\Data\GroupInterface;
|
|
use Magento\Customer\Api\Data\GroupInterfaceFactory;
|
|
use Magento\Customer\Api\GroupRepositoryInterface;
|
|
use Magento\Framework\Api\FilterBuilder;
|
|
use Magento\Framework\Api\SearchCriteriaBuilder;
|
|
use Magento\Framework\Api\SortOrderBuilder;
|
|
use Magento\Framework\App\Config\ScopeConfigInterface;
|
|
use Magento\Framework\App\ObjectManager;
|
|
use Magento\Framework\Exception\NoSuchEntityException;
|
|
use Magento\Store\Model\StoreManagerInterface;
|
|
|
|
/**
|
|
* The class contains methods for getting information about a customer group
|
|
*
|
|
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
|
|
*/
|
|
class GroupManagement implements \Magento\Customer\Api\GroupManagementInterface
|
|
{
|
|
const XML_PATH_DEFAULT_ID = 'customer/create_account/default_group';
|
|
|
|
const NOT_LOGGED_IN_ID = 0;
|
|
|
|
const CUST_GROUP_ALL = 32000;
|
|
|
|
const GROUP_CODE_MAX_LENGTH = 32;
|
|
|
|
/**
|
|
* @var StoreManagerInterface
|
|
*/
|
|
protected $storeManager;
|
|
|
|
/**
|
|
* @var ScopeConfigInterface
|
|
*/
|
|
protected $scopeConfig;
|
|
|
|
/**
|
|
* @var GroupFactory
|
|
*/
|
|
protected $groupFactory;
|
|
|
|
/**
|
|
* @var GroupRepositoryInterface
|
|
*/
|
|
protected $groupRepository;
|
|
|
|
/**
|
|
* @var GroupInterfaceFactory
|
|
*/
|
|
protected $groupDataFactory;
|
|
|
|
/**
|
|
* @var SearchCriteriaBuilder
|
|
*/
|
|
protected $searchCriteriaBuilder;
|
|
|
|
/**
|
|
* @var FilterBuilder
|
|
*/
|
|
protected $filterBuilder;
|
|
|
|
/**
|
|
* @var SortOrderBuilder
|
|
*/
|
|
private $sortOrderBuilder;
|
|
|
|
/**
|
|
* @param StoreManagerInterface $storeManager
|
|
* @param ScopeConfigInterface $scopeConfig
|
|
* @param GroupFactory $groupFactory
|
|
* @param GroupRepositoryInterface $groupRepository
|
|
* @param GroupInterfaceFactory $groupDataFactory
|
|
* @param SearchCriteriaBuilder $searchCriteriaBuilder
|
|
* @param FilterBuilder $filterBuilder
|
|
* @param SortOrderBuilder $sortOrderBuilder
|
|
*/
|
|
public function __construct(
|
|
StoreManagerInterface $storeManager,
|
|
ScopeConfigInterface $scopeConfig,
|
|
GroupFactory $groupFactory,
|
|
GroupRepositoryInterface $groupRepository,
|
|
GroupInterfaceFactory $groupDataFactory,
|
|
SearchCriteriaBuilder $searchCriteriaBuilder,
|
|
FilterBuilder $filterBuilder,
|
|
SortOrderBuilder $sortOrderBuilder = null
|
|
) {
|
|
$this->storeManager = $storeManager;
|
|
$this->scopeConfig = $scopeConfig;
|
|
$this->groupFactory = $groupFactory;
|
|
$this->groupRepository = $groupRepository;
|
|
$this->groupDataFactory = $groupDataFactory;
|
|
$this->searchCriteriaBuilder = $searchCriteriaBuilder;
|
|
$this->filterBuilder = $filterBuilder;
|
|
$this->sortOrderBuilder = $sortOrderBuilder ?: ObjectManager::getInstance()
|
|
->get(SortOrderBuilder::class);
|
|
}
|
|
|
|
/**
|
|
* @inheritdoc
|
|
*/
|
|
public function isReadonly($groupId)
|
|
{
|
|
/** @var \Magento\Customer\Model\Group $group */
|
|
$group = $this->groupFactory->create();
|
|
$group->load($groupId);
|
|
if ($group->getId() === null) {
|
|
throw NoSuchEntityException::singleField('groupId', $groupId);
|
|
}
|
|
return $groupId == self::NOT_LOGGED_IN_ID || $group->usesAsDefault();
|
|
}
|
|
|
|
/**
|
|
* @inheritdoc
|
|
*/
|
|
public function getDefaultGroup($storeId = null)
|
|
{
|
|
if ($storeId === null) {
|
|
$storeId = $this->storeManager->getStore()->getCode();
|
|
}
|
|
try {
|
|
$groupId = $this->scopeConfig->getValue(
|
|
self::XML_PATH_DEFAULT_ID,
|
|
\Magento\Store\Model\ScopeInterface::SCOPE_STORE,
|
|
$storeId
|
|
);
|
|
} catch (\Magento\Framework\Exception\State\InitException $e) {
|
|
throw NoSuchEntityException::singleField('storeId', $storeId);
|
|
} catch (NoSuchEntityException $e) {
|
|
throw NoSuchEntityException::singleField('storeId', $storeId);
|
|
}
|
|
try {
|
|
return $this->groupRepository->getById($groupId);
|
|
} catch (NoSuchEntityException $e) {
|
|
throw NoSuchEntityException::doubleField('groupId', $groupId, 'storeId', $storeId);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @inheritdoc
|
|
*/
|
|
public function getNotLoggedInGroup()
|
|
{
|
|
return $this->groupRepository->getById(self::NOT_LOGGED_IN_ID);
|
|
}
|
|
|
|
/**
|
|
* @inheritdoc
|
|
*/
|
|
public function getLoggedInGroups()
|
|
{
|
|
$notLoggedInFilter[] = $this->filterBuilder
|
|
->setField(GroupInterface::ID)
|
|
->setConditionType('neq')
|
|
->setValue(self::NOT_LOGGED_IN_ID)
|
|
->create();
|
|
$groupAll[] = $this->filterBuilder
|
|
->setField(GroupInterface::ID)
|
|
->setConditionType('neq')
|
|
->setValue(self::CUST_GROUP_ALL)
|
|
->create();
|
|
$groupNameSortOrder = $this->sortOrderBuilder
|
|
->setField('customer_group_code')
|
|
->setAscendingDirection()
|
|
->create();
|
|
$searchCriteria = $this->searchCriteriaBuilder
|
|
->addFilters($notLoggedInFilter)
|
|
->addFilters($groupAll)
|
|
->addSortOrder($groupNameSortOrder)
|
|
->create();
|
|
return $this->groupRepository->getList($searchCriteria)->getItems();
|
|
}
|
|
|
|
/**
|
|
* @inheritdoc
|
|
*/
|
|
public function getAllCustomersGroup()
|
|
{
|
|
$groupDataObject = $this->groupDataFactory->create();
|
|
$groupDataObject->setId(self::CUST_GROUP_ALL);
|
|
return $groupDataObject;
|
|
}
|
|
}
|