123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Framework\View\Element\UiComponent\DataProvider;
- use Magento\Framework\Api\FilterBuilder;
- use Magento\Framework\Api\Search\ReportingInterface;
- use Magento\Framework\Api\Search\SearchCriteria;
- use Magento\Framework\Api\Search\SearchCriteriaBuilder;
- use Magento\Framework\Api\Search\SearchResultInterface;
- use Magento\Framework\App\RequestInterface;
- /**
- * Class DataProvider
- */
- class DataProvider implements DataProviderInterface
- {
- /**
- * Data Provider name
- *
- * @var string
- */
- protected $name;
- /**
- * Data Provider Primary Identifier name
- *
- * @var string
- */
- protected $primaryFieldName;
- /**
- * Data Provider Request Parameter Identifier name
- *
- * @var string
- */
- protected $requestFieldName;
- /**
- * @var array
- */
- protected $meta = [];
- /**
- * Provider configuration data
- *
- * @var array
- */
- protected $data = [];
- /**
- * @var ReportingInterface
- */
- protected $reporting;
- /**
- * @var FilterBuilder
- */
- protected $filterBuilder;
- /**
- * @var SearchCriteriaBuilder
- */
- protected $searchCriteriaBuilder;
- /**
- * @var RequestInterface
- */
- protected $request;
- /**
- * @var SearchCriteria
- */
- protected $searchCriteria;
- /**
- * @param string $name
- * @param string $primaryFieldName
- * @param string $requestFieldName
- * @param ReportingInterface $reporting
- * @param SearchCriteriaBuilder $searchCriteriaBuilder
- * @param RequestInterface $request
- * @param FilterBuilder $filterBuilder
- * @param array $meta
- * @param array $data
- */
- public function __construct(
- $name,
- $primaryFieldName,
- $requestFieldName,
- ReportingInterface $reporting,
- SearchCriteriaBuilder $searchCriteriaBuilder,
- RequestInterface $request,
- FilterBuilder $filterBuilder,
- array $meta = [],
- array $data = []
- ) {
- $this->request = $request;
- $this->filterBuilder = $filterBuilder;
- $this->name = $name;
- $this->primaryFieldName = $primaryFieldName;
- $this->requestFieldName = $requestFieldName;
- $this->reporting = $reporting;
- $this->searchCriteriaBuilder = $searchCriteriaBuilder;
- $this->meta = $meta;
- $this->data = $data;
- $this->prepareUpdateUrl();
- }
- /**
- * @return void
- */
- protected function prepareUpdateUrl()
- {
- if (!isset($this->data['config']['filter_url_params'])) {
- return;
- }
- foreach ($this->data['config']['filter_url_params'] as $paramName => $paramValue) {
- if ('*' == $paramValue) {
- $paramValue = $this->request->getParam($paramName);
- }
- if ($paramValue) {
- $this->data['config']['update_url'] = sprintf(
- '%s%s/%s/',
- $this->data['config']['update_url'],
- $paramName,
- $paramValue
- );
- $this->addFilter(
- $this->filterBuilder->setField($paramName)->setValue($paramValue)->setConditionType('eq')->create()
- );
- }
- }
- }
- /**
- * Get Data Provider name
- *
- * @return string
- */
- public function getName()
- {
- return $this->name;
- }
- /**
- * Get primary field name
- *
- * @return string
- */
- public function getPrimaryFieldName()
- {
- return $this->primaryFieldName;
- }
- /**
- * Get field name in request
- *
- * @return string
- */
- public function getRequestFieldName()
- {
- return $this->requestFieldName;
- }
- /**
- * @return array
- */
- public function getMeta()
- {
- return $this->meta;
- }
- /**
- * Get field Set meta info
- *
- * @param string $fieldSetName
- * @return array
- */
- public function getFieldSetMetaInfo($fieldSetName)
- {
- return $this->meta[$fieldSetName] ?? [];
- }
- /**
- * @param string $fieldSetName
- * @return array
- */
- public function getFieldsMetaInfo($fieldSetName)
- {
- return $this->meta[$fieldSetName]['children'] ?? [];
- }
- /**
- * @param string $fieldSetName
- * @param string $fieldName
- * @return array
- */
- public function getFieldMetaInfo($fieldSetName, $fieldName)
- {
- return $this->meta[$fieldSetName]['children'][$fieldName] ?? [];
- }
- /**
- * @inheritdoc
- */
- public function addFilter(\Magento\Framework\Api\Filter $filter)
- {
- $this->searchCriteriaBuilder->addFilter($filter);
- }
- /**
- * self::setOrder() alias
- *
- * @param string $field
- * @param string $direction
- * @return void
- */
- public function addOrder($field, $direction)
- {
- $this->searchCriteriaBuilder->addSortOrder($field, $direction);
- }
- /**
- * Set Query limit
- *
- * @param int $offset
- * @param int $size
- * @return void
- */
- public function setLimit($offset, $size)
- {
- $this->searchCriteriaBuilder->setPageSize($size);
- $this->searchCriteriaBuilder->setCurrentPage($offset);
- }
- /**
- * @param SearchResultInterface $searchResult
- * @return array
- */
- protected function searchResultToOutput(SearchResultInterface $searchResult)
- {
- $arrItems = [];
- $arrItems['items'] = [];
- foreach ($searchResult->getItems() as $item) {
- $itemData = [];
- foreach ($item->getCustomAttributes() as $attribute) {
- $itemData[$attribute->getAttributeCode()] = $attribute->getValue();
- }
- $arrItems['items'][] = $itemData;
- }
- $arrItems['totalRecords'] = $searchResult->getTotalCount();
- return $arrItems;
- }
- /**
- * Returns search criteria
- *
- * @return \Magento\Framework\Api\Search\SearchCriteria
- */
- public function getSearchCriteria()
- {
- if (!$this->searchCriteria) {
- $this->searchCriteria = $this->searchCriteriaBuilder->create();
- $this->searchCriteria->setRequestName($this->name);
- }
- return $this->searchCriteria;
- }
- /**
- * Get data
- *
- * @return array
- */
- public function getData()
- {
- return $this->searchResultToOutput($this->getSearchResult());
- }
- /**
- * Get config data
- *
- * @return array
- */
- public function getConfigData()
- {
- return $this->data['config'] ?? [];
- }
- /**
- * Set data
- *
- * @param mixed $config
- * @return void
- */
- public function setConfigData($config)
- {
- $this->data['config'] = $config;
- }
- /**
- * Returns Search result
- *
- * @return SearchResultInterface
- */
- public function getSearchResult()
- {
- return $this->reporting->search($this->getSearchCriteria());
- }
- }
|