diff --git a/Api/BlockManagerInterface.php b/Api/BlockManagerInterface.php index 11103c2..0e26c5d 100644 --- a/Api/BlockManagerInterface.php +++ b/Api/BlockManagerInterface.php @@ -10,6 +10,14 @@ interface BlockManagerInterface */ public function getById($blockId); + /** + * @param string $identifier + * @param int $storeId + * @return \Magento\Cms\Api\Data\BlockInterface + * @throws \Magento\Framework\Exception\NoSuchEntityException + */ + public function getByIdentifier($identifier, $storeId = null); + /** * @param \Magento\Framework\Api\SearchCriteriaInterface $searchCriteria * @return \Magento\Cms\Api\Data\BlockSearchResultsInterface diff --git a/Api/PageManagerInterface.php b/Api/PageManagerInterface.php index 8dc60a8..8a5161b 100644 --- a/Api/PageManagerInterface.php +++ b/Api/PageManagerInterface.php @@ -10,6 +10,14 @@ interface PageManagerInterface */ public function getById($pageId); + /** + * @param string $identifier + * @param int $storeId + * @return \Magento\Cms\Api\Data\PageInterface + * @throws \Magento\Framework\Exception\NoSuchEntityException + */ + public function getByIdentifier($identifier, $storeId = null); + /** * @param \Magento\Framework\Api\SearchCriteriaInterface $searchCriteria * @return \Magento\Cms\Api\Data\PageSearchResultsInterface diff --git a/Model/BlockManager.php b/Model/BlockManager.php index b8df928..e093960 100644 --- a/Model/BlockManager.php +++ b/Model/BlockManager.php @@ -3,7 +3,11 @@ namespace Snowdog\CmsApi\Model; use Magento\Cms\Api\BlockRepositoryInterface; +use Magento\Cms\Api\Data\BlockInterface; +use Magento\Cms\Model\BlockFactory; +use Magento\Cms\Model\ResourceModel\Block; use Magento\Cms\Model\Template\FilterProvider; +use Magento\Framework\Exception\NoSuchEntityException; use Snowdog\CmsApi\Api\BlockManagerInterface; class BlockManager implements BlockManagerInterface @@ -18,12 +22,26 @@ class BlockManager implements BlockManagerInterface */ private $filterProvider; + /** + * @var BlockFactory + */ + private $blockFactory; + + /** + * @var Block + */ + private $blockResource; + public function __construct( BlockRepositoryInterface $blockRepository, - FilterProvider $filterProvider + FilterProvider $filterProvider, + BlockFactory $blockFactory, + Block $blockResource ) { $this->blockRepository = $blockRepository; $this->filterProvider = $filterProvider; + $this->blockFactory = $blockFactory; + $this->blockResource = $blockResource; } /** @@ -38,6 +56,27 @@ public function getById($blockId) return $block; } + /** + * @inheritdoc + */ + public function getByIdentifier($identifier, $storeId = null) + { + $block = $this->blockFactory->create(); + $block->setStoreId($storeId); + $this->blockResource->load($block, $identifier, BlockInterface::IDENTIFIER); + + if (!$block->getId()) { + throw new NoSuchEntityException( + __('CMS Block with identifier "%1" does not exist.', $identifier) + ); + } + + $content = $this->getBlockContentFiltered($block->getContent()); + $block->setContent($content); + + return $block; + } + /** * @inheritdoc */ diff --git a/Model/PageManager.php b/Model/PageManager.php index 9507b61..6c71873 100644 --- a/Model/PageManager.php +++ b/Model/PageManager.php @@ -2,8 +2,12 @@ namespace Snowdog\CmsApi\Model; +use Magento\Cms\Api\Data\PageInterface; use Magento\Cms\Api\PageRepositoryInterface; +use Magento\Cms\Model\PageFactory; +use Magento\Cms\Model\ResourceModel\Page; use Magento\Cms\Model\Template\FilterProvider; +use Magento\Framework\Exception\NoSuchEntityException; use Snowdog\CmsApi\Api\PageManagerInterface; class PageManager implements PageManagerInterface @@ -18,12 +22,26 @@ class PageManager implements PageManagerInterface */ private $filterProvider; + /** + * @var PageFactory + */ + private $pageFactory; + + /** + * @var Page + */ + private $pageResource; + public function __construct( PageRepositoryInterface $pageRepository, - FilterProvider $filterProvider + FilterProvider $filterProvider, + PageFactory $pageFactory, + Page $pageResource ) { $this->pageRepository = $pageRepository; $this->filterProvider = $filterProvider; + $this->pageFactory = $pageFactory; + $this->pageResource = $pageResource; } /** @@ -38,6 +56,27 @@ public function getById($pageId) return $page; } + /** + * @inheritdoc + */ + public function getByIdentifier($identifier, $storeId = null) + { + $page = $this->pageFactory->create(); + $page->setStoreId($storeId); + $this->pageResource->load($page, $identifier, PageInterface::IDENTIFIER); + + if (!$page->getId()) { + throw new NoSuchEntityException( + __('CMS Page with identifier "%1" does not exist.', $identifier) + ); + } + + $content = $this->getPageContentFiltered($page->getContent()); + $page->setContent($content); + + return $page; + } + /** * @inheritdoc */ diff --git a/README.md b/README.md index 341d3a5..43efac0 100644 --- a/README.md +++ b/README.md @@ -4,13 +4,15 @@ The module provides endpoints to get CMS blocks and pages filtered. ### 1. Installation: -`composer require snowdog/module-cms-api` -`bin/magento module:enable Snowdog_CmsApi` -`bin/magento setup:upgrade` +* `composer require snowdog/module-cms-api` +* `bin/magento module:enable Snowdog_CmsApi` +* `bin/magento setup:upgrade` ### 2. Available endpoints: * `/rest/V1/snowdog/cmsPage/:pageId`: retrieves page info by its id (integer value) * `/rest/V1/snowdog/cmsPage/search`: retrieves the list of pages (accepts search criteria filters) +* `/rest/V1/snowdog/cmsPageIdentifier/:identifier/storeId/:storeId`: retrieves page info by its identifier (string value) and store id (integer value) * `/rest/V1/snowdog/cmsBlock/:blockId`: retrieves block info by its id (integer value) +* `/rest/V1/snowdog/cmsBlockIdentifier/:identifier/storeId/:storeId`: retrieves block info by its identifier (string value) and store id (integer value) * `/rest/V1/snowdog/cmsBlock/search`: retrieves the list of blocks (accepts search criteria filters) diff --git a/etc/webapi.xml b/etc/webapi.xml index 24fd313..0bdff9c 100644 --- a/etc/webapi.xml +++ b/etc/webapi.xml @@ -7,6 +7,12 @@ + + + + + + @@ -20,6 +26,12 @@ + + + + + +