123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191 |
- <?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;
- }
- }
|