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()); } }