/** * Load Block data collection by given search criteria * * @SuppressWarnings(PHPMD.CyclomaticComplexity) * @SuppressWarnings(PHPMD.NPathComplexity) * @param \Magento\Framework\Api\SearchCriteriaInterface $criteria * @return \Magento\Cms\Model\ResourceModel\Block\Collection */ public function getList(\Magento\Framework\Api\SearchCriteriaInterface $criteria) { $searchResults = $this->searchResultsFactory->create(); $searchResults->setSearchCriteria($criteria); $collection = $this->blockCollectionFactory->create(); foreach ($criteria->getFilterGroups() as $filterGroup) { foreach ($filterGroup->getFilters() as $filter) { if ($filter->getField() === 'store_id') { $collection->addStoreFilter($filter->getValue(), false); continue; } $condition = $filter->getConditionType() ?: 'eq'; $collection->addFieldToFilter($filter->getField(), [$condition => $filter->getValue()]); } } $searchResults->setTotalCount($collection->getSize()); $sortOrders = $criteria->getSortOrders(); if ($sortOrders) { foreach ($sortOrders as $sortOrder) { $collection->addOrder($sortOrder->getField(), $sortOrder->getDirection() == SortOrder::SORT_ASC ? 'ASC' : 'DESC'); } } $collection->setCurPage($criteria->getCurrentPage()); $collection->setPageSize($criteria->getPageSize()); $blocks = []; /** @var Block $blockModel */ foreach ($collection as $blockModel) { $blockData = $this->dataBlockFactory->create(); $this->dataObjectHelper->populateWithArray($blockData, $blockModel->getData(), 'Magento\\Cms\\Api\\Data\\BlockInterface'); $blocks[] = $this->dataObjectProcessor->buildOutputDataArray($blockData, 'Magento\\Cms\\Api\\Data\\BlockInterface'); } $searchResults->setItems($blocks); return $searchResults; }
/** * Test search \Magento\Cms\Api\Data\BlockInterface */ public function testSearch() { $blockTitle = 'Block title'; $blockIdentifier = 'block-title'; /** @var \Magento\Cms\Api\Data\BlockInterface $blockDataObject */ $blockDataObject = $this->blockFactory->create(); $blockDataObject->setTitle($blockTitle)->setIdentifier($blockIdentifier); $this->currentBlock = $this->blockRepository->save($blockDataObject); $filterBuilder = Bootstrap::getObjectManager()->create('Magento\\Framework\\Api\\FilterBuilder'); $searchCriteriaBuilder = Bootstrap::getObjectManager()->create('Magento\\Framework\\Api\\SearchCriteriaBuilder'); $filter = $filterBuilder->setField(BlockInterface::IDENTIFIER)->setValue($blockIdentifier)->create(); $searchCriteriaBuilder->addFilter([$filter]); $searchData = $searchCriteriaBuilder->create()->__toArray(); $requestData = ['searchCriteria' => $searchData]; $serviceInfo = ['rest' => ['resourcePath' => self::RESOURCE_PATH . "/search" . '?' . http_build_query($requestData), 'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET], 'soap' => ['service' => self::SERVICE_NAME, 'serviceVersion' => self::SERVICE_VERSION, 'operation' => self::SERVICE_NAME . 'GetList']]; $searchResult = $this->_webApiCall($serviceInfo, $requestData); $this->assertEquals(1, $searchResult['total_count']); $this->assertEquals($searchResult['items'][0][BlockInterface::IDENTIFIER], $blockIdentifier); }