diff --git a/app/code/Magento/Catalog/Model/Category/Attribute/Source/Page.php b/app/code/Magento/Catalog/Model/Category/Attribute/Source/Page.php index a62537b88cc8707f2de132e3063d4a0bc3140b74..3cff2cc0941a3b7b0ee6febfa0c6fc4ebb3ca88b 100644 --- a/app/code/Magento/Catalog/Model/Category/Attribute/Source/Page.php +++ b/app/code/Magento/Catalog/Model/Category/Attribute/Source/Page.php @@ -5,7 +5,7 @@ */ namespace Magento\Catalog\Model\Category\Attribute\Source; -use Magento\Cms\Model\Resource\Block\Grid\CollectionFactory; +use Magento\Cms\Model\Resource\Block\CollectionFactory; /** * Catalog category landing page attribute source diff --git a/app/code/Magento/Catalog/Model/Resource/Category/Attribute/Source/Page.php b/app/code/Magento/Catalog/Model/Resource/Category/Attribute/Source/Page.php index 10c44850e0f7c4e3ceda09b1fabee2f8fe564651..6e6b4406d71d4ac4d6d1fcd8f71a97bd32b8f0b7 100644 --- a/app/code/Magento/Catalog/Model/Resource/Category/Attribute/Source/Page.php +++ b/app/code/Magento/Catalog/Model/Resource/Category/Attribute/Source/Page.php @@ -15,16 +15,16 @@ class Page extends \Magento\Eav\Model\Entity\Attribute\Source\AbstractSource /** * Block collection factory * - * @var \Magento\Cms\Model\Resource\Block\Grid\CollectionFactory + * @var \Magento\Cms\Model\Resource\Block\CollectionFactory */ protected $_blockCollectionFactory; /** * Construct * - * @param \Magento\Cms\Model\Resource\Block\Grid\CollectionFactory $blockCollectionFactory + * @param \Magento\Cms\Model\Resource\Block\CollectionFactory $blockCollectionFactory */ - public function __construct(\Magento\Cms\Model\Resource\Block\Grid\CollectionFactory $blockCollectionFactory) + public function __construct(\Magento\Cms\Model\Resource\Block\CollectionFactory $blockCollectionFactory) { $this->_blockCollectionFactory = $blockCollectionFactory; } diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Category/Attribute/Source/PageTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Category/Attribute/Source/PageTest.php index b55a39bce8812111d551e0833f73aa4adab27485..1086b9a0c28a189006cc0f248931ffc26c45917f 100644 --- a/app/code/Magento/Catalog/Test/Unit/Model/Category/Attribute/Source/PageTest.php +++ b/app/code/Magento/Catalog/Test/Unit/Model/Category/Attribute/Source/PageTest.php @@ -45,7 +45,7 @@ class PageTest extends \PHPUnit_Framework_TestCase { $mockedCollection = $this->getMockedCollection(); - $mockBuilder = $this->getMockBuilder('Magento\Cms\Model\Resource\Block\Grid\CollectionFactory'); + $mockBuilder = $this->getMockBuilder('Magento\Cms\Model\Resource\Block\CollectionFactory'); $mock = $mockBuilder->setMethods(['create']) ->disableOriginalConstructor() ->getMock(); diff --git a/app/code/Magento/Cms/Api/BlockRepositoryInterface.php b/app/code/Magento/Cms/Api/BlockRepositoryInterface.php new file mode 100644 index 0000000000000000000000000000000000000000..e9834b821a66be6531ecfcce99fe1800a38f62f7 --- /dev/null +++ b/app/code/Magento/Cms/Api/BlockRepositoryInterface.php @@ -0,0 +1,60 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ +namespace Magento\Cms\Api; + +use Magento\Framework\Api\SearchCriteriaInterface; + +/** + * CMS block CRUD interface. + */ +interface BlockRepositoryInterface +{ + /** + * Save block. + * + * @param Data\BlockInterface $block + * @return Data\BlockInterface + * @throws \Magento\Framework\Exception\LocalizedException + */ + public function save(Data\BlockInterface $block); + + /** + * Retrieve block. + * + * @param int $blockId + * @return Data\BlockInterface + * @throws \Magento\Framework\Exception\LocalizedException + */ + public function getById($blockId); + + /** + * Retrieve blocks matching the specified criteria. + * + * @param SearchCriteriaInterface $searchCriteria + * @return \Magento\Framework\Api\SearchResultsInterface + * @throws \Magento\Framework\Exception\LocalizedException + */ + public function getList(SearchCriteriaInterface $searchCriteria); + + /** + * Delete block. + * + * @param Data\BlockInterface $block + * @return bool true on success + * @throws \Magento\Framework\Exception\LocalizedException + */ + public function delete(Data\BlockInterface $block); + + /** + * Delete block by ID. + * + * @param int $blockId + * @return bool true on success + * @throws \Magento\Framework\Exception\NoSuchEntityException + * @throws \Magento\Framework\Exception\LocalizedException + */ + public function deleteById($blockId); +} diff --git a/app/code/Magento/Cms/Api/Data/BlockInterface.php b/app/code/Magento/Cms/Api/Data/BlockInterface.php new file mode 100644 index 0000000000000000000000000000000000000000..d26f46cda2fb2cfe337413133be03785dfbbbbfa --- /dev/null +++ b/app/code/Magento/Cms/Api/Data/BlockInterface.php @@ -0,0 +1,129 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ +namespace Magento\Cms\Api\Data; + +/** + * CMS block interface. + */ +interface BlockInterface +{ + /**#@+ + * Constants for keys of data array. Identical to the name of the getter in snake case + */ + const BLOCK_ID = 'block_id'; + const IDENTIFIER = 'identifier'; + const TITLE = 'title'; + const CONTENT = 'content'; + const CREATION_TIME = 'creation_time'; + const UPDATE_TIME = 'update_time'; + const IS_ACTIVE = 'is_active'; + /**#@-*/ + + /** + * Get ID + * + * @return int + */ + public function getId(); + + /** + * Get identifier + * + * @return string + */ + public function getIdentifier(); + + /** + * Get title + * + * @return string + */ + public function getTitle(); + + /** + * Get content + * + * @return string + */ + public function getContent(); + + /** + * Get creation time + * + * @return string + */ + public function getCreationTime(); + + /** + * Get update time + * + * @return string + */ + public function getUpdateTime(); + + /** + * Is active + * + * @return bool + */ + public function isActive(); + + /** + * Set ID + * + * @param int $id + * @return BlockInterface + */ + public function setId($id); + + /** + * Set identifier + * + * @param string $identifier + * @return BlockInterface + */ + public function setIdentifier($identifier); + + /** + * Set title + * + * @param string $title + * @return BlockInterface + */ + public function setTitle($title); + + /** + * Set content + * + * @param string $content + * @return BlockInterface + */ + public function setContent($content); + + /** + * Set creation time + * + * @param string $creationTime + * @return BlockInterface + */ + public function setCreationTime($creationTime); + + /** + * Set update time + * + * @param string $updateTime + * @return BlockInterface + */ + public function setUpdateTime($updateTime); + + /** + * Set is active + * + * @param bool|int $isActive + * @return BlockInterface + */ + public function setIsActive($isActive); +} diff --git a/app/code/Magento/Cms/Api/Data/BlockSearchResultsInterface.php b/app/code/Magento/Cms/Api/Data/BlockSearchResultsInterface.php new file mode 100644 index 0000000000000000000000000000000000000000..715790c17343691226d8020f45ae896aee4eb5df --- /dev/null +++ b/app/code/Magento/Cms/Api/Data/BlockSearchResultsInterface.php @@ -0,0 +1,29 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ +namespace Magento\Cms\Api\Data; + +use Magento\Framework\Api\SearchResultsInterface; + +/** + * Interface for cms block search results. + */ +interface BlockSearchResultsInterface extends SearchResultsInterface +{ + /** + * Get blocks list. + * + * @return \Magento\Cms\Api\Data\BlockInterface[] + */ + public function getItems(); + + /** + * Set blocks list. + * + * @param \Magento\Cms\Api\Data\BlockInterface[] $items + * @return $this + */ + public function setItems(array $items = null); +} diff --git a/app/code/Magento/Cms/Api/Data/PageInterface.php b/app/code/Magento/Cms/Api/Data/PageInterface.php new file mode 100644 index 0000000000000000000000000000000000000000..8e03d0ed1ffde5e14a18ae2effb77062b508ffcf --- /dev/null +++ b/app/code/Magento/Cms/Api/Data/PageInterface.php @@ -0,0 +1,305 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ +namespace Magento\Cms\Api\Data; + +/** + * CMS page interface. + */ +interface PageInterface +{ + /**#@+ + * Constants for keys of data array. Identical to the name of the getter in snake case + */ + const PAGE_ID = 'page_id'; + const IDENTIFIER = 'identifier'; + const TITLE = 'title'; + const PAGE_LAYOUT = 'page_layout'; + const META_KEYWORDS = 'meta_keywords'; + const META_DESCRIPTION = 'meta_description'; + const CONTENT_HEADING = 'content_heading'; + const CONTENT = 'content'; + const CREATION_TIME = 'creation_time'; + const UPDATE_TIME = 'update_time'; + const SORT_ORDER = 'sort_order'; + const LAYOUT_UPDATE_XML = 'layout_update_xml'; + const CUSTOM_THEME = 'custom_theme'; + const CUSTOM_ROOT_TEMPLATE = 'custom_root_template'; + const CUSTOM_LAYOUT_UPDATE_XML = 'custom_layout_update_xml'; + const CUSTOM_THEME_FROM = 'custom_theme_from'; + const CUSTOM_THEME_TO = 'custom_theme_to'; + const IS_ACTIVE = 'is_active'; + /**#@-*/ + + /** + * Get ID + * + * @return int + */ + public function getId(); + + /** + * Get identifier + * + * @return string + */ + public function getIdentifier(); + + /** + * Get title + * + * @return string + */ + public function getTitle(); + + /** + * Get page layout + * + * @return string + */ + public function getPageLayout(); + + /** + * Get meta keywords + * + * @return string + */ + public function getMetaKeywords(); + + /** + * Get meta description + * + * @return string + */ + public function getMetaDescription(); + + /** + * Get content heading + * + * @return string + */ + public function getContentHeading(); + + /** + * Get content + * + * @return string + */ + public function getContent(); + + /** + * Get creation time + * + * @return string + */ + public function getCreationTime(); + + /** + * Get update time + * + * @return string + */ + public function getUpdateTime(); + + /** + * Get sort order + * + * @return string + */ + public function getSortOrder(); + + /** + * Get layout update xml + * + * @return string + */ + public function getLayoutUpdateXml(); + + /** + * Get custom theme + * + * @return string + */ + public function getCustomTheme(); + + /** + * Get custom root template + * + * @return string + */ + public function getCustomRootTemplate(); + + /** + * Get custom layout update xml + * + * @return string + */ + public function getCustomLayoutUpdateXml(); + + /** + * Get custom theme from + * + * @return string + */ + public function getCustomThemeFrom(); + + /** + * Get custom theme to + * + * @return string + */ + public function getCustomThemeTo(); + + /** + * Is active + * + * @return bool + */ + public function isActive(); + + /** + * Set ID + * + * @param int $id + * @return \Magento\Cms\Api\Data\PageInterface + */ + public function setId($id); + + /** + * Set identifier + * + * @param string $identifier + * @return \Magento\Cms\Api\Data\PageInterface + */ + public function setIdentifier($identifier); + + /** + * Set title + * + * @param string $title + * @return \Magento\Cms\Api\Data\PageInterface + */ + public function setTitle($title); + + /** + * Set page layout + * + * @param string $pageLayout + * @return \Magento\Cms\Api\Data\PageInterface + */ + public function setPageLayout($pageLayout); + + /** + * Set meta keywords + * + * @param string $metaKeywords + * @return \Magento\Cms\Api\Data\PageInterface + */ + public function setMetaKeywords($metaKeywords); + + /** + * Set meta description + * + * @param string $metaDescription + * @return \Magento\Cms\Api\Data\PageInterface + */ + public function setMetaDescription($metaDescription); + + /** + * Set content heading + * + * @param string $contentHeading + * @return \Magento\Cms\Api\Data\PageInterface + */ + public function setContentHeading($contentHeading); + + /** + * Set content + * + * @param string $content + * @return \Magento\Cms\Api\Data\PageInterface + */ + public function setContent($content); + + /** + * Set creation time + * + * @param string $creationTime + * @return \Magento\Cms\Api\Data\PageInterface + */ + public function setCreationTime($creationTime); + + /** + * Set update time + * + * @param string $updateTime + * @return \Magento\Cms\Api\Data\PageInterface + */ + public function setUpdateTime($updateTime); + + /** + * Set sort order + * + * @param string $sortOrder + * @return \Magento\Cms\Api\Data\PageInterface + */ + public function setSortOrder($sortOrder); + + /** + * Set layout update xml + * + * @param string $layoutUpdateXml + * @return \Magento\Cms\Api\Data\PageInterface + */ + public function setLayoutUpdateXml($layoutUpdateXml); + + /** + * Set custom theme + * + * @param string $customTheme + * @return \Magento\Cms\Api\Data\PageInterface + */ + public function setCustomTheme($customTheme); + + /** + * Set custom root template + * + * @param string $customRootTemplate + * @return \Magento\Cms\Api\Data\PageInterface + */ + public function setCustomRootTemplate($customRootTemplate); + + /** + * Set custom layout update xml + * + * @param string $customLayoutUpdateXml + * @return \Magento\Cms\Api\Data\PageInterface + */ + public function setCustomLayoutUpdateXml($customLayoutUpdateXml); + + /** + * Set custom theme from + * + * @param string $customThemeFrom + * @return \Magento\Cms\Api\Data\PageInterface + */ + public function setCustomThemeFrom($customThemeFrom); + + /** + * Set custom theme to + * + * @param string $customThemeTo + * @return \Magento\Cms\Api\Data\PageInterface + */ + public function setCustomThemeTo($customThemeTo); + + /** + * Set is active + * + * @param int|bool $isActive + * @return \Magento\Cms\Api\Data\PageInterface + */ + public function setIsActive($isActive); +} diff --git a/app/code/Magento/Cms/Api/Data/PageSearchResultsInterface.php b/app/code/Magento/Cms/Api/Data/PageSearchResultsInterface.php new file mode 100644 index 0000000000000000000000000000000000000000..160d93d172c214ecba5dd13e4e482cc4754772c6 --- /dev/null +++ b/app/code/Magento/Cms/Api/Data/PageSearchResultsInterface.php @@ -0,0 +1,29 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ +namespace Magento\Cms\Api\Data; + +use Magento\Framework\Api\SearchResultsInterface; + +/** + * Interface for cms page search results. + */ +interface PageSearchResultsInterface extends SearchResultsInterface +{ + /** + * Get pages list. + * + * @return \Magento\Cms\Api\Data\PageInterface[] + */ + public function getItems(); + + /** + * Set pages list. + * + * @param \Magento\Cms\Api\Data\PageInterface[] $items + * @return $this + */ + public function setItems(array $items = null); +} diff --git a/app/code/Magento/Cms/Api/PageRepositoryInterface.php b/app/code/Magento/Cms/Api/PageRepositoryInterface.php new file mode 100644 index 0000000000000000000000000000000000000000..9dcf95d572fd533036999b4863bd1240ed7ad30e --- /dev/null +++ b/app/code/Magento/Cms/Api/PageRepositoryInterface.php @@ -0,0 +1,60 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ +namespace Magento\Cms\Api; + +use Magento\Framework\Api\SearchCriteriaInterface; + +/** + * CMS page CRUD interface. + */ +interface PageRepositoryInterface +{ + /** + * Save page. + * + * @param Data\PageInterface $page + * @return Data\PageInterface + * @throws \Magento\Framework\Exception\LocalizedException + */ + public function save(Data\PageInterface $page); + + /** + * Retrieve page. + * + * @param int $pageId + * @return Data\PageInterface + * @throws \Magento\Framework\Exception\LocalizedException + */ + public function getById($pageId); + + /** + * Retrieve pages matching the specified criteria. + * + * @param SearchCriteriaInterface $searchCriteria + * @return \Magento\Framework\Api\SearchResultsInterface + * @throws \Magento\Framework\Exception\LocalizedException + */ + public function getList(SearchCriteriaInterface $searchCriteria); + + /** + * Delete page. + * + * @param Data\PageInterface $page + * @return bool true on success + * @throws \Magento\Framework\Exception\LocalizedException + */ + public function delete(Data\PageInterface $page); + + /** + * Delete page by ID. + * + * @param int $pageId + * @return bool true on success + * @throws \Magento\Framework\Exception\NoSuchEntityException + * @throws \Magento\Framework\Exception\LocalizedException + */ + public function deleteById($pageId); +} diff --git a/app/code/Magento/Cms/Block/Adminhtml/Block/Widget/Chooser.php b/app/code/Magento/Cms/Block/Adminhtml/Block/Widget/Chooser.php index 93f8f338149a480ebb4502291daaa7a538263099..fed2f67da6f177806559e463deb8fda56a2fbb3f 100644 --- a/app/code/Magento/Cms/Block/Adminhtml/Block/Widget/Chooser.php +++ b/app/code/Magento/Cms/Block/Adminhtml/Block/Widget/Chooser.php @@ -16,7 +16,7 @@ class Chooser extends \Magento\Backend\Block\Widget\Grid\Extended protected $_blockFactory; /** - * @var \Magento\Cms\Model\Resource\Block\Grid\CollectionFactory + * @var \Magento\Cms\Model\Resource\Block\CollectionFactory */ protected $_collectionFactory; @@ -24,14 +24,14 @@ class Chooser extends \Magento\Backend\Block\Widget\Grid\Extended * @param \Magento\Backend\Block\Template\Context $context * @param \Magento\Backend\Helper\Data $backendHelper * @param \Magento\Cms\Model\BlockFactory $blockFactory - * @param \Magento\Cms\Model\Resource\Block\Grid\CollectionFactory $collectionFactory + * @param \Magento\Cms\Model\Resource\Block\CollectionFactory $collectionFactory * @param array $data */ public function __construct( \Magento\Backend\Block\Template\Context $context, \Magento\Backend\Helper\Data $backendHelper, \Magento\Cms\Model\BlockFactory $blockFactory, - \Magento\Cms\Model\Resource\Block\Grid\CollectionFactory $collectionFactory, + \Magento\Cms\Model\Resource\Block\CollectionFactory $collectionFactory, array $data = [] ) { $this->_blockFactory = $blockFactory; diff --git a/app/code/Magento/Cms/Block/Adminhtml/Page/Grid.php b/app/code/Magento/Cms/Block/Adminhtml/Page/Grid.php index 0580ceeaeb0d16706547ec6831b197c142e1cd27..af9f8d533c2d87e95e8fbcbd8a205f2dcec7e873 100644 --- a/app/code/Magento/Cms/Block/Adminhtml/Page/Grid.php +++ b/app/code/Magento/Cms/Block/Adminhtml/Page/Grid.php @@ -11,7 +11,7 @@ namespace Magento\Cms\Block\Adminhtml\Page; class Grid extends \Magento\Backend\Block\Widget\Grid\Extended { /** - * @var \Magento\Cms\Model\Resource\Page\Grid\CollectionFactory + * @var \Magento\Cms\Model\Resource\Page\CollectionFactory */ protected $_collectionFactory; @@ -29,7 +29,7 @@ class Grid extends \Magento\Backend\Block\Widget\Grid\Extended * @param \Magento\Backend\Block\Template\Context $context * @param \Magento\Backend\Helper\Data $backendHelper * @param \Magento\Cms\Model\Page $cmsPage - * @param \Magento\Cms\Model\Resource\Page\Grid\CollectionFactory $collectionFactory + * @param \Magento\Cms\Model\Resource\Page\CollectionFactory $collectionFactory * @param \Magento\Framework\View\Model\PageLayout\Config\BuilderInterface $pageLayoutBuilder * @param array $data */ @@ -37,7 +37,7 @@ class Grid extends \Magento\Backend\Block\Widget\Grid\Extended \Magento\Backend\Block\Template\Context $context, \Magento\Backend\Helper\Data $backendHelper, \Magento\Cms\Model\Page $cmsPage, - \Magento\Cms\Model\Resource\Page\Grid\CollectionFactory $collectionFactory, + \Magento\Cms\Model\Resource\Page\CollectionFactory $collectionFactory, \Magento\Framework\View\Model\PageLayout\Config\BuilderInterface $pageLayoutBuilder, array $data = [] ) { @@ -66,7 +66,7 @@ class Grid extends \Magento\Backend\Block\Widget\Grid\Extended protected function _prepareCollection() { $collection = $this->_collectionFactory->create(); - /* @var $collection \Magento\Cms\Model\Resource\Page\Grid\Collection */ + /* @var $collection \Magento\Cms\Model\Resource\Page\Collection */ $collection->setFirstStoreFlag(true); $this->setCollection($collection); diff --git a/app/code/Magento/Cms/Block/Adminhtml/Page/Widget/Chooser.php b/app/code/Magento/Cms/Block/Adminhtml/Page/Widget/Chooser.php index f6efab805aa28ef9fd36d9bf5eca387adf8914df..addaf3f4926b8e05f48833b16e540eb73ad295ef 100644 --- a/app/code/Magento/Cms/Block/Adminhtml/Page/Widget/Chooser.php +++ b/app/code/Magento/Cms/Block/Adminhtml/Page/Widget/Chooser.php @@ -23,7 +23,7 @@ class Chooser extends \Magento\Backend\Block\Widget\Grid\Extended protected $_pageFactory; /** - * @var \Magento\Cms\Model\Resource\Page\Grid\CollectionFactory + * @var \Magento\Cms\Model\Resource\Page\CollectionFactory */ protected $_collectionFactory; @@ -37,7 +37,7 @@ class Chooser extends \Magento\Backend\Block\Widget\Grid\Extended * @param \Magento\Backend\Helper\Data $backendHelper * @param \Magento\Cms\Model\Page $cmsPage * @param \Magento\Cms\Model\PageFactory $pageFactory - * @param \Magento\Cms\Model\Resource\Page\Grid\CollectionFactory $collectionFactory + * @param \Magento\Cms\Model\Resource\Page\CollectionFactory $collectionFactory * @param \Magento\Framework\View\Model\PageLayout\Config\BuilderInterface $pageLayoutBuilder * @param array $data */ @@ -46,7 +46,7 @@ class Chooser extends \Magento\Backend\Block\Widget\Grid\Extended \Magento\Backend\Helper\Data $backendHelper, \Magento\Cms\Model\Page $cmsPage, \Magento\Cms\Model\PageFactory $pageFactory, - \Magento\Cms\Model\Resource\Page\Grid\CollectionFactory $collectionFactory, + \Magento\Cms\Model\Resource\Page\CollectionFactory $collectionFactory, \Magento\Framework\View\Model\PageLayout\Config\BuilderInterface $pageLayoutBuilder, array $data = [] ) { @@ -141,7 +141,7 @@ class Chooser extends \Magento\Backend\Block\Widget\Grid\Extended protected function _prepareCollection() { $collection = $this->_collectionFactory->create(); - /* @var $collection \Magento\Cms\Model\Resource\Page\Grid\CollectionFactory */ + /* @var $collection \Magento\Cms\Model\Resource\Page\CollectionFactory */ $collection->setFirstStoreFlag(true); $this->setCollection($collection); diff --git a/app/code/Magento/Cms/Block/Block.php b/app/code/Magento/Cms/Block/Block.php index 2f8f28e4334fc17c2f112217efbb9aad8c4f3cf0..707dbbe40d754d3708cd3c13a284e13fe5720a58 100644 --- a/app/code/Magento/Cms/Block/Block.php +++ b/app/code/Magento/Cms/Block/Block.php @@ -68,7 +68,7 @@ class Block extends \Magento\Framework\View\Element\AbstractBlock implements \Ma /** @var \Magento\Cms\Model\Block $block */ $block = $this->_blockFactory->create(); $block->setStoreId($storeId)->load($blockId); - if ($block->getIsActive()) { + if ($block->isActive()) { $html = $this->_filterProvider->getBlockFilter()->setStoreId($storeId)->filter($block->getContent()); } } diff --git a/app/code/Magento/Cms/Block/Widget/Block.php b/app/code/Magento/Cms/Block/Widget/Block.php index 66f31639c36f1bb13a97f460f89a324f28895eac..7c83169d945f128d2d10380664f80a7f82123a7a 100644 --- a/app/code/Magento/Cms/Block/Widget/Block.php +++ b/app/code/Magento/Cms/Block/Widget/Block.php @@ -70,7 +70,7 @@ class Block extends \Magento\Framework\View\Element\Template implements \Magento /** @var \Magento\Cms\Model\Block $block */ $block = $this->_blockFactory->create(); $block->setStoreId($storeId)->load($blockId); - if ($block->getIsActive()) { + if ($block->isActive()) { $this->setText( $this->_filterProvider->getBlockFilter()->setStoreId($storeId)->filter($block->getContent()) ); diff --git a/app/code/Magento/Cms/Controller/Adminhtml/Page/MassDelete.php b/app/code/Magento/Cms/Controller/Adminhtml/Page/MassDelete.php index 95ec6e5169e34519a92e893e5f3bc26e76a99e95..a87024f3ea1e622f46e7f1d540e5f9081932bcaf 100644 --- a/app/code/Magento/Cms/Controller/Adminhtml/Page/MassDelete.php +++ b/app/code/Magento/Cms/Controller/Adminhtml/Page/MassDelete.php @@ -23,7 +23,7 @@ class MassDelete extends AbstractMassDelete * * @var string */ - protected $collection = 'Magento\Cms\Model\Resource\Page\Grid\Collection'; + protected $collection = 'Magento\Cms\Model\Resource\Page\Collection'; /** * Page model diff --git a/app/code/Magento/Cms/Model/Block.php b/app/code/Magento/Cms/Model/Block.php index 14227352f81bb7575785bfb46af36585111ed1ab..8fd712570825f235b4959b353906974eefb69a46 100644 --- a/app/code/Magento/Cms/Model/Block.php +++ b/app/code/Magento/Cms/Model/Block.php @@ -5,6 +5,7 @@ */ namespace Magento\Cms\Model; +use Magento\Cms\Api\Data\BlockInterface; use Magento\Framework\Object\IdentityInterface; /** @@ -12,28 +13,14 @@ use Magento\Framework\Object\IdentityInterface; * * @method \Magento\Cms\Model\Resource\Block _getResource() * @method \Magento\Cms\Model\Resource\Block getResource() - * @method \Magento\Cms\Model\Block setTitle(string $value) - * @method \Magento\Cms\Model\Block setIdentifier(string $value) - * @method \Magento\Cms\Model\Block setContent(string $value) - * @method \Magento\Cms\Model\Block setCreationTime(string $value) - * @method \Magento\Cms\Model\Block setUpdateTime(string $value) - * @method \Magento\Cms\Model\Block setIsActive(int $value) */ -class Block extends \Magento\Framework\Model\AbstractModel implements IdentityInterface +class Block extends \Magento\Framework\Model\AbstractModel implements BlockInterface, IdentityInterface { /** * CMS block cache tag */ const CACHE_TAG = 'cms_block'; - const ID = 'block_id'; - const IDENTIFIER = 'identifier'; - const TITLE = 'title'; - const CONTENT = 'content'; - const CREATION_TIME = 'creation_time'; - const UPDATE_TIME ='update_time'; - const IS_ACTIVE ='is_active'; - /** * @var string */ @@ -88,7 +75,7 @@ class Block extends \Magento\Framework\Model\AbstractModel implements IdentityIn */ public function getId() { - return $this->_getData(self::ID); + return $this->getData(self::BLOCK_ID); } /** @@ -98,7 +85,7 @@ class Block extends \Magento\Framework\Model\AbstractModel implements IdentityIn */ public function getIdentifier() { - return (string) $this->_getData(self::IDENTIFIER); + return (string)$this->getData(self::IDENTIFIER); } /** @@ -108,7 +95,7 @@ class Block extends \Magento\Framework\Model\AbstractModel implements IdentityIn */ public function getTitle() { - return $this->_getData(self::TITLE); + return $this->getData(self::TITLE); } /** @@ -118,7 +105,7 @@ class Block extends \Magento\Framework\Model\AbstractModel implements IdentityIn */ public function getContent() { - return $this->_getData(self::CONTENT); + return $this->getData(self::CONTENT); } /** @@ -128,7 +115,7 @@ class Block extends \Magento\Framework\Model\AbstractModel implements IdentityIn */ public function getCreationTime() { - return $this->_getData(self::CREATION_TIME); + return $this->getData(self::CREATION_TIME); } /** @@ -138,16 +125,93 @@ class Block extends \Magento\Framework\Model\AbstractModel implements IdentityIn */ public function getUpdateTime() { - return $this->_getData(self::UPDATE_TIME); + return $this->getData(self::UPDATE_TIME); } /** - * Retrieve block status + * Is active * - * @return int + * @return bool + */ + public function isActive() + { + return (bool)$this->getData(self::IS_ACTIVE); + } + + /** + * Set ID + * + * @param int $id + * @return BlockInterface + */ + public function setId($id) + { + return $this->setData(self::BLOCK_ID, $id); + } + + /** + * Set identifier + * + * @param string $identifier + * @return BlockInterface + */ + public function setIdentifier($identifier) + { + return $this->setData(self::IDENTIFIER, $identifier); + } + + /** + * Set title + * + * @param string $title + * @return BlockInterface + */ + public function setTitle($title) + { + return $this->setData(self::TITLE, $title); + } + + /** + * Set content + * + * @param string $content + * @return BlockInterface + */ + public function setContent($content) + { + return $this->setData(self::CONTENT, $content); + } + + /** + * Set creation time + * + * @param string $creationTime + * @return BlockInterface + */ + public function setCreationTime($creationTime) + { + return $this->setData(self::CREATION_TIME, $creationTime); + } + + /** + * Set update time + * + * @param string $updateTime + * @return BlockInterface + */ + public function setUpdateTime($updateTime) + { + return $this->setData(self::UPDATE_TIME, $updateTime); + } + + /** + * Set is active + * + * @param bool|int $isActive + * @return BlockInterface */ - public function getIsActive() + public function setIsActive($isActive) { - return $this->_getData(self::IS_ACTIVE); + return $this->setData(self::IS_ACTIVE, $isActive); } } diff --git a/app/code/Magento/Cms/Model/BlockCriteriaInterface.php b/app/code/Magento/Cms/Model/BlockCriteriaInterface.php deleted file mode 100644 index 358551b163cdcfa6be96d49b4c2c007c31525f1a..0000000000000000000000000000000000000000 --- a/app/code/Magento/Cms/Model/BlockCriteriaInterface.php +++ /dev/null @@ -1,29 +0,0 @@ -<?php -/** - * Copyright © 2015 Magento. All rights reserved. - * See COPYING.txt for license details. - */ -namespace Magento\Cms\Model; - -/** - * Interface BlockCriteriaInterface - */ -interface BlockCriteriaInterface extends \Magento\Framework\Api\CriteriaInterface -{ - /** - * Set first store flag - * - * @param bool $flag - * @return void - */ - public function setFirstStoreFlag($flag = false); - - /** - * Add filter by store - * - * @param int $storeId - * @param bool $withAdmin - * @return void - */ - public function addStoreFilter($storeId, $withAdmin = true); -} diff --git a/app/code/Magento/Cms/Model/BlockRepository.php b/app/code/Magento/Cms/Model/BlockRepository.php index 520add71eb28b864280d9cc2979859400fb04c6f..be1498fc8667553ba1f4ad4f8ccd93ac61d57b97 100644 --- a/app/code/Magento/Cms/Model/BlockRepository.php +++ b/app/code/Magento/Cms/Model/BlockRepository.php @@ -5,70 +5,82 @@ */ namespace Magento\Cms\Model; +use Magento\Cms\Api\Data; +use Magento\Cms\Api\BlockRepositoryInterface; +use Magento\Framework\Api\DataObjectHelper; +use Magento\Framework\Api\SearchCriteriaInterface; use Magento\Framework\Exception\CouldNotDeleteException; use Magento\Framework\Exception\CouldNotSaveException; use Magento\Framework\Exception\NoSuchEntityException; /** * Class BlockRepository - * @api + * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ -class BlockRepository +class BlockRepository implements BlockRepositoryInterface { /** - * @var \Magento\Cms\Model\Resource\Block + * @var Resource\Block */ protected $resource; /** - * @var \Magento\Cms\Model\BlockFactory + * @var BlockFactory */ protected $blockFactory; /** - * @var \Magento\Cms\Model\Resource\Block\CollectionFactory + * @var Resource\Block\CollectionFactory */ protected $blockCollectionFactory; /** - * @var \Magento\Framework\DB\QueryBuilderFactory + * @var Data\BlockSearchResultsInterfaceFactory */ - protected $queryBuilderFactory; + protected $searchResultsFactory; /** - * @var \Magento\Framework\DB\MapperFactory + * @var DataObjectHelper */ - protected $mapperFactory; + protected $dataObjectHelper; /** - * @param \Magento\Cms\Model\Resource\Block $resource - * @param \Magento\Cms\Model\BlockFactory $blockFactory - * @param \Magento\Cms\Model\Resource\Block\CollectionFactory $blockCollectionFactory - * @param \Magento\Framework\DB\QueryBuilderFactory $queryBuilderFactory - * @param \Magento\Framework\DB\MapperFactory $mapperFactory + * @var Data\BlockInterfaceFactory + */ + protected $dataBlockFactory; + + /** + * @param Resource\Block $resource + * @param BlockFactory $blockFactory + * @param Data\BlockInterfaceFactory $dataBlockFactory + * @param Resource\Block\CollectionFactory $blockCollectionFactory + * @param Data\BlockSearchResultsInterfaceFactory $searchResultsFactory + * @param DataObjectHelper $dataObjectHelper */ public function __construct( - \Magento\Cms\Model\Resource\Block $resource, - \Magento\Cms\Model\BlockFactory $blockFactory, - \Magento\Cms\Model\Resource\Block\CollectionFactory $blockCollectionFactory, - \Magento\Framework\DB\QueryBuilderFactory $queryBuilderFactory, - \Magento\Framework\DB\MapperFactory $mapperFactory + Resource\Block $resource, + BlockFactory $blockFactory, + Data\BlockInterfaceFactory $dataBlockFactory, + Resource\Block\CollectionFactory $blockCollectionFactory, + Data\BlockSearchResultsInterfaceFactory $searchResultsFactory, + DataObjectHelper $dataObjectHelper ) { $this->resource = $resource; $this->blockFactory = $blockFactory; $this->blockCollectionFactory = $blockCollectionFactory; - $this->queryBuilderFactory = $queryBuilderFactory; - $this->mapperFactory = $mapperFactory; + $this->searchResultsFactory = $searchResultsFactory; + $this->dataObjectHelper = $dataObjectHelper; + $this->dataBlockFactory = $dataBlockFactory; } /** * Save Block data * - * @param \Magento\Cms\Model\Block $block - * @return \Magento\Cms\Model\Block + * @param Data\BlockInterface $block + * @return Block * @throws CouldNotSaveException */ - public function save(\Magento\Cms\Model\Block $block) + public function save(Data\BlockInterface $block) { try { $this->resource->save($block); @@ -82,10 +94,10 @@ class BlockRepository * Load Block data by given Block Identity * * @param string $blockId - * @return \Magento\Cms\Model\Block + * @return Block * @throws \Magento\Framework\Exception\NoSuchEntityException */ - public function get($blockId) + public function getById($blockId) { $block = $this->blockFactory->create(); $this->resource->load($block, $blockId); @@ -98,27 +110,65 @@ class BlockRepository /** * Load Block data collection by given search criteria * - * @param \Magento\Cms\Model\BlockCriteriaInterface $criteria - * @return \Magento\Cms\Model\Resource\Block\Collection + * @SuppressWarnings(PHPMD.CyclomaticComplexity) + * @SuppressWarnings(PHPMD.NPathComplexity) + * @param SearchCriteriaInterface $criteria + * @return Resource\Block\Collection */ - public function getList(\Magento\Cms\Model\BlockCriteriaInterface $criteria) + public function getList(SearchCriteriaInterface $criteria) { - $queryBuilder = $this->queryBuilderFactory->create(); - $queryBuilder->setCriteria($criteria); - $queryBuilder->setResource($this->resource); - $query = $queryBuilder->create(); - $collection = $this->blockCollectionFactory->create(['query' => $query]); - return $collection; + $searchResults = $this->searchResultsFactory->create(); + $searchResults->setSearchCriteria($criteria); + + $collection = $this->blockCollectionFactory->create(); + foreach ($criteria->getFilterGroups() as $filterGroup) { + $fields = []; + $conditions = []; + foreach ($filterGroup->getFilters() as $filter) { + if ($filter->getField() === 'store_id') { + $collection->addStoreFilter($filter->getValue(), false); + continue; + } + $condition = $filter->getConditionType() ?: 'eq'; + $fields[] = ['attribute' => $filter->getField(), $condition => $filter->getValue()]; + } + if ($fields) { + $collection->addFieldToFilter($fields, $conditions); + } + } + $searchResults->setTotalCount($collection->getSize()); + $sortOrders = $criteria->getSortOrders(); + if ($sortOrders) { + foreach ($sortOrders as $sortOrder) { + $collection->addOrder( + $sortOrder->getField(), + ($sortOrder->getDirection() == SearchCriteriaInterface::SORT_ASC) ? 'ASC' : 'DESC' + ); + } + } + $collection->setCurPage($criteria->getCurrentPage()); + $collection->setPageSize($criteria->getPageSize()); + $blocks = []; + /** @var Block $blockModel */ + foreach ($collection as $blockModel) { + $blocks[] = $this->dataObjectHelper->populateWithArray( + $this->dataBlockFactory->create(), + $blockModel->getData(), + 'Magento\Cms\Api\Data\BlockInterface' + ); + } + $searchResults->setItems($blocks); + return $searchResults; } /** * Delete Block * - * @param \Magento\Cms\Model\Block $block + * @param Data\BlockInterface $block * @return bool - * @throws \Magento\Framework\Exception\CouldNotDeleteException + * @throws CouldNotDeleteException */ - public function delete(\Magento\Cms\Model\Block $block) + public function delete(Data\BlockInterface $block) { try { $this->resource->delete($block); @@ -133,11 +183,11 @@ class BlockRepository * * @param string $blockId * @return bool - * @throws \Magento\Framework\Exception\CouldNotDeleteException - * @throws \Magento\Framework\Exception\NoSuchEntityException + * @throws CouldNotDeleteException + * @throws NoSuchEntityException */ public function deleteById($blockId) { - return $this->delete($this->get($blockId)); + return $this->delete($this->getById($blockId)); } } diff --git a/app/code/Magento/Cms/Model/Config/Source/Page.php b/app/code/Magento/Cms/Model/Config/Source/Page.php index 4ed69001f1f9e0d0a747bcb7962f0a33b9c87a4a..6d0d87680ef5a386c7fde21be6a542beb1335793 100644 --- a/app/code/Magento/Cms/Model/Config/Source/Page.php +++ b/app/code/Magento/Cms/Model/Config/Source/Page.php @@ -5,6 +5,8 @@ */ namespace Magento\Cms\Model\Config\Source; +use Magento\Cms\Model\Resource\Page\CollectionFactory; + /** * Class Page */ @@ -16,25 +18,17 @@ class Page implements \Magento\Framework\Option\ArrayInterface protected $options; /** - * @var \Magento\Cms\Model\PageRepository - */ - protected $pageRepository; - - /** - * @var \Magento\Cms\Model\Resource\PageCriteria + * @var CollectionFactory */ - protected $pageCriteriaFactory; + protected $collectionFactory; /** - * @param \Magento\Cms\Model\PageRepository $pageRepository - * @param \Magento\Cms\Model\Resource\PageCriteriaFactory $pageCriteriaFactory + * @param CollectionFactory $collectionFactory */ public function __construct( - \Magento\Cms\Model\PageRepository $pageRepository, - \Magento\Cms\Model\Resource\PageCriteriaFactory $pageCriteriaFactory + CollectionFactory $collectionFactory ) { - $this->pageRepository = $pageRepository; - $this->pageCriteriaFactory = $pageCriteriaFactory; + $this->collectionFactory = $collectionFactory; } /** @@ -45,7 +39,7 @@ class Page implements \Magento\Framework\Option\ArrayInterface public function toOptionArray() { if (!$this->options) { - $this->options = $this->pageRepository->getList($this->pageCriteriaFactory->create())->toOptionIdArray(); + $this->options = $this->collectionFactory->create()->toOptionIdArray(); } return $this->options; } diff --git a/app/code/Magento/Cms/Model/DataSource/BlockCollection.php b/app/code/Magento/Cms/Model/DataSource/BlockCollection.php deleted file mode 100644 index b63c604fcd6865a88fcb7d0fadc1a578ce59e163..0000000000000000000000000000000000000000 --- a/app/code/Magento/Cms/Model/DataSource/BlockCollection.php +++ /dev/null @@ -1,54 +0,0 @@ -<?php -/** - * Copyright © 2015 Magento. All rights reserved. - * See COPYING.txt for license details. - */ -namespace Magento\Cms\Model\DataSource; - -use Magento\Framework\Data\CollectionDataSourceInterface; -use Magento\Cms\Model\Resource\BlockCriteria; -use Magento\Cms\Model\BlockRepository; - -/** - * CMS block collection data source - * - * Class BlockCollection - */ -class BlockCollection extends BlockCriteria implements CollectionDataSourceInterface -{ - /** - * @var BlockRepository - */ - protected $repository; - - /** - * @param BlockRepository $repository - * @param string $mapper - */ - public function __construct(BlockRepository $repository, $mapper = '') - { - $this->repository = $repository; - $this->setFirstStoreFlag(true); - parent::__construct($mapper); - } - - /** - * @inheritdoc - */ - public function addFilter($name, $field, $condition = null, $type = 'public') - { - if ($field === 'store_id') { - $this->addStoreFilter($condition, false); - } else { - parent::addFilter($name, $field, $condition, $type); - } - } - - /** - * @return \Magento\Cms\Model\Resource\Block\Collection - */ - public function getResultCollection() - { - return $this->repository->getList($this); - } -} diff --git a/app/code/Magento/Cms/Model/DataSource/PageCollection.php b/app/code/Magento/Cms/Model/DataSource/PageCollection.php deleted file mode 100644 index 74491d38aea4c6a72e70e6bba56596dba579103b..0000000000000000000000000000000000000000 --- a/app/code/Magento/Cms/Model/DataSource/PageCollection.php +++ /dev/null @@ -1,64 +0,0 @@ -<?php -/** - * Copyright © 2015 Magento. All rights reserved. - * See COPYING.txt for license details. - */ -namespace Magento\Cms\Model\DataSource; - -use Magento\Cms\Model\Resource\PageCriteria; -use Magento\Framework\Data\CollectionDataSourceInterface; - -/** - * CMS page collection data source - * - * Class PageCollection - */ -class PageCollection extends PageCriteria implements CollectionDataSourceInterface -{ - /** - * @var \Magento\Cms\Model\PageRepository - */ - protected $repository; - - /** - * @param \Magento\Cms\Model\PageRepository $repository - * @param string $mapper - */ - public function __construct(\Magento\Cms\Model\PageRepository $repository, $mapper = '') - { - $this->repository = $repository; - $this->setFirstStoreFlag(true); - parent::__construct($mapper); - } - - /** - * @inheritdoc - */ - public function addFilter($name, $field, $condition = null, $type = 'public') - { - if ($field === 'store_id') { - $this->addStoreFilter($condition, false); - } else { - parent::addFilter($name, $field, $condition, $type); - } - } - - /** - * @return \Magento\Cms\Model\Resource\Page\Collection - */ - public function getResultCollection() - { - return $this->repository->getList($this); - } - - /** - * Add Criteria object - * - * @param \Magento\Cms\Model\Resource\PageCriteria $criteria - * @return void - */ - public function addCriteria(\Magento\Cms\Model\Resource\PageCriteria $criteria) - { - $this->data[self::PART_CRITERIA_LIST]['list'][] = $criteria; - } -} diff --git a/app/code/Magento/Cms/Model/Page.php b/app/code/Magento/Cms/Model/Page.php index d1693facd3e2180a190c88961455eb3dbe4f8ff8..fca4ecc84aa66052fc48af15edf6d9fac83aeb41 100644 --- a/app/code/Magento/Cms/Model/Page.php +++ b/app/code/Magento/Cms/Model/Page.php @@ -5,6 +5,7 @@ */ namespace Magento\Cms\Model; +use Magento\Cms\Api\Data\PageInterface; use Magento\Framework\Object\IdentityInterface; /** @@ -12,41 +13,9 @@ use Magento\Framework\Object\IdentityInterface; * * @method \Magento\Cms\Model\Resource\Page _getResource() * @method \Magento\Cms\Model\Resource\Page getResource() - * @method \Magento\Cms\Model\Page setTitle(string $value) - * @method string getPageLayout() - * @method \Magento\Cms\Model\Page setPageLayout(string $value) - * @method string getMetaKeywords() - * @method \Magento\Cms\Model\Page setMetaKeywords(string $value) - * @method string getMetaDescription() - * @method \Magento\Cms\Model\Page setMetaDescription(string $value) - * @method \Magento\Cms\Model\Page setIdentifier(string $value) - * @method string getContentHeading() - * @method \Magento\Cms\Model\Page setContentHeading(string $value) - * @method string getContent() - * @method \Magento\Cms\Model\Page setContent(string $value) - * @method string getCreationTime() - * @method \Magento\Cms\Model\Page setCreationTime(string $value) - * @method string getUpdateTime() - * @method \Magento\Cms\Model\Page setUpdateTime(string $value) - * @method int getIsActive() - * @method \Magento\Cms\Model\Page setIsActive(int $value) - * @method int getSortOrder() - * @method \Magento\Cms\Model\Page setSortOrder(int $value) - * @method string getLayoutUpdateXml() - * @method \Magento\Cms\Model\Page setLayoutUpdateXml(string $value) - * @method string getCustomTheme() - * @method \Magento\Cms\Model\Page setCustomTheme(string $value) - * @method string getCustomPageLayout() - * @method \Magento\Cms\Model\Page setCustomPageLayout(string $value) - * @method string getCustomLayoutUpdateXml() - * @method \Magento\Cms\Model\Page setCustomLayoutUpdateXml(string $value) - * @method string getCustomThemeFrom() - * @method \Magento\Cms\Model\Page setCustomThemeFrom(string $value) - * @method string getCustomThemeTo() - * @method \Magento\Cms\Model\Page setCustomThemeTo(string $value) * @method int[] getStores() */ -class Page extends \Magento\Framework\Model\AbstractModel implements IdentityInterface +class Page extends \Magento\Framework\Model\AbstractModel implements PageInterface, IdentityInterface { /** * No route page id @@ -60,14 +29,6 @@ class Page extends \Magento\Framework\Model\AbstractModel implements IdentityInt const STATUS_DISABLED = 0; /**#@-*/ - /**#@+ - * Data object constants - */ - const PAGE_ID = 'page_id'; - const IDENTIFIER = 'identifier'; - const TITLE = 'title'; - /**#@-*/ - /** * CMS page cache tag */ @@ -95,30 +56,6 @@ class Page extends \Magento\Framework\Model\AbstractModel implements IdentityInt $this->_init('Magento\Cms\Model\Resource\Page'); } - /** - * @return int - */ - public function getId() - { - return $this->_getData(self::PAGE_ID); - } - - /** - * @return string - */ - public function getIdentifier() - { - return (string) $this->_getData(self::IDENTIFIER); - } - - /** - * @return string - */ - public function getTitle() - { - return $this->_getData(self::TITLE); - } - /** * Load object data * @@ -177,4 +114,382 @@ class Page extends \Magento\Framework\Model\AbstractModel implements IdentityInt { return [self::CACHE_TAG . '_' . $this->getId()]; } + + /** + * Get ID + * + * @return int + */ + public function getId() + { + return parent::getData(self::PAGE_ID); + } + + /** + * Get identifier + * + * @return string + */ + public function getIdentifier() + { + return $this->getData(self::IDENTIFIER); + } + + /** + * Get title + * + * @return string + */ + public function getTitle() + { + return $this->getData(self::TITLE); + } + + /** + * Get page layout + * + * @return string + */ + public function getPageLayout() + { + return $this->getData(self::PAGE_LAYOUT); + } + + /** + * Get meta keywords + * + * @return string + */ + public function getMetaKeywords() + { + return $this->getData(self::META_KEYWORDS); + } + + /** + * Get meta description + * + * @return string + */ + public function getMetaDescription() + { + return $this->getData(self::META_DESCRIPTION); + } + + /** + * Get content heading + * + * @return string + */ + public function getContentHeading() + { + return $this->getData(self::CONTENT_HEADING); + } + + /** + * Get content + * + * @return string + */ + public function getContent() + { + return $this->getData(self::CONTENT); + } + + /** + * Get creation time + * + * @return string + */ + public function getCreationTime() + { + return $this->getData(self::CREATION_TIME); + } + + /** + * Get update time + * + * @return string + */ + public function getUpdateTime() + { + return $this->getData(self::UPDATE_TIME); + } + + /** + * Get sort order + * + * @return string + */ + public function getSortOrder() + { + return $this->getData(self::SORT_ORDER); + } + + /** + * Get layout update xml + * + * @return string + */ + public function getLayoutUpdateXml() + { + return $this->getData(self::LAYOUT_UPDATE_XML); + } + + /** + * Get custom theme + * + * @return string + */ + public function getCustomTheme() + { + return $this->getData(self::CUSTOM_THEME); + } + + /** + * Get custom root template + * + * @return string + */ + public function getCustomRootTemplate() + { + return $this->getData(self::CUSTOM_ROOT_TEMPLATE); + } + + /** + * Get custom layout update xml + * + * @return string + */ + public function getCustomLayoutUpdateXml() + { + return $this->getData(self::CUSTOM_LAYOUT_UPDATE_XML); + } + + /** + * Get custom theme from + * + * @return string + */ + public function getCustomThemeFrom() + { + return $this->getData(self::CUSTOM_THEME_FROM); + } + + /** + * Get custom theme to + * + * @return string + */ + public function getCustomThemeTo() + { + return $this->getData(self::CUSTOM_THEME_TO); + } + + /** + * Is active + * + * @return bool + */ + public function isActive() + { + return (bool)$this->getData(self::IS_ACTIVE); + } + + /** + * Set ID + * + * @param int $id + * @return \Magento\Cms\Api\Data\PageInterface + */ + public function setId($id) + { + return $this->setData(self::PAGE_ID, $id); + } + + /** + * Set identifier + * + * @param string $identifier + * @return \Magento\Cms\Api\Data\PageInterface + */ + public function setIdentifier($identifier) + { + return $this->setData(self::IDENTIFIER, $identifier); + } + + /** + * Set title + * + * @param string $title + * @return \Magento\Cms\Api\Data\PageInterface + */ + public function setTitle($title) + { + return $this->setData(self::TITLE, $title); + } + + /** + * Set page layout + * + * @param string $pageLayout + * @return \Magento\Cms\Api\Data\PageInterface + */ + public function setPageLayout($pageLayout) + { + return $this->setData(self::PAGE_LAYOUT, $pageLayout); + } + + /** + * Set meta keywords + * + * @param string $metaKeywords + * @return \Magento\Cms\Api\Data\PageInterface + */ + public function setMetaKeywords($metaKeywords) + { + return $this->setData(self::META_KEYWORDS, $metaKeywords); + } + + /** + * Set meta description + * + * @param string $metaDescription + * @return \Magento\Cms\Api\Data\PageInterface + */ + public function setMetaDescription($metaDescription) + { + return $this->setData(self::META_DESCRIPTION, $metaDescription); + } + + /** + * Set content heading + * + * @param string $contentHeading + * @return \Magento\Cms\Api\Data\PageInterface + */ + public function setContentHeading($contentHeading) + { + return $this->setData(self::CONTENT_HEADING, $contentHeading); + } + + /** + * Set content + * + * @param string $content + * @return \Magento\Cms\Api\Data\PageInterface + */ + public function setContent($content) + { + return $this->setData(self::CONTENT, $content); + } + + /** + * Set creation time + * + * @param string $creationTime + * @return \Magento\Cms\Api\Data\PageInterface + */ + public function setCreationTime($creationTime) + { + return $this->setData(self::CREATION_TIME, $creationTime); + } + + /** + * Set update time + * + * @param string $updateTime + * @return \Magento\Cms\Api\Data\PageInterface + */ + public function setUpdateTime($updateTime) + { + return $this->setData(self::UPDATE_TIME, $updateTime); + } + + /** + * Set sort order + * + * @param string $sortOrder + * @return \Magento\Cms\Api\Data\PageInterface + */ + public function setSortOrder($sortOrder) + { + return $this->setData(self::SORT_ORDER, $sortOrder); + } + + /** + * Set layout update xml + * + * @param string $layoutUpdateXml + * @return \Magento\Cms\Api\Data\PageInterface + */ + public function setLayoutUpdateXml($layoutUpdateXml) + { + return $this->setData(self::LAYOUT_UPDATE_XML, $layoutUpdateXml); + } + + /** + * Set custom theme + * + * @param string $customTheme + * @return \Magento\Cms\Api\Data\PageInterface + */ + public function setCustomTheme($customTheme) + { + return $this->setData(self::CUSTOM_THEME, $customTheme); + } + + /** + * Set custom root template + * + * @param string $customRootTemplate + * @return \Magento\Cms\Api\Data\PageInterface + */ + public function setCustomRootTemplate($customRootTemplate) + { + return $this->setData(self::CUSTOM_ROOT_TEMPLATE, $customRootTemplate); + } + + /** + * Set custom layout update xml + * + * @param string $customLayoutUpdateXml + * @return \Magento\Cms\Api\Data\PageInterface + */ + public function setCustomLayoutUpdateXml($customLayoutUpdateXml) + { + return $this->setData(self::CUSTOM_LAYOUT_UPDATE_XML, $customLayoutUpdateXml); + } + + /** + * Set custom theme from + * + * @param string $customThemeFrom + * @return \Magento\Cms\Api\Data\PageInterface + */ + public function setCustomThemeFrom($customThemeFrom) + { + return $this->setData(self::CUSTOM_THEME_FROM, $customThemeFrom); + } + + /** + * Set custom theme to + * + * @param string $customThemeTo + * @return \Magento\Cms\Api\Data\PageInterface + */ + public function setCustomThemeTo($customThemeTo) + { + return $this->setData(self::CUSTOM_THEME_TO, $customThemeTo); + } + + /** + * Set is active + * + * @param int|bool $isActive + * @return \Magento\Cms\Api\Data\PageInterface + */ + public function setIsActive($isActive) + { + return $this->setData(self::IS_ACTIVE, $isActive); + } } diff --git a/app/code/Magento/Cms/Model/PageCriteriaInterface.php b/app/code/Magento/Cms/Model/PageCriteriaInterface.php deleted file mode 100644 index 692fb97988f222d119b02fcf536bc01b656b3e21..0000000000000000000000000000000000000000 --- a/app/code/Magento/Cms/Model/PageCriteriaInterface.php +++ /dev/null @@ -1,29 +0,0 @@ -<?php -/** - * Copyright © 2015 Magento. All rights reserved. - * See COPYING.txt for license details. - */ -namespace Magento\Cms\Model; - -/** - * Interface PageCriteriaInterface - */ -interface PageCriteriaInterface extends \Magento\Framework\Api\CriteriaInterface -{ - /** - * Set first store flag - * - * @param bool $flag - * @return void - */ - public function setFirstStoreFlag($flag = false); - - /** - * Add filter by store - * - * @param int|\Magento\Store\Model\Store $store - * @param bool $withAdmin - * @return void - */ - public function addStoreFilter($store, $withAdmin = true); -} diff --git a/app/code/Magento/Cms/Model/PageRepository.php b/app/code/Magento/Cms/Model/PageRepository.php index 67815ec24adb01de14531640a2cdbeec49f2a471..82fbba3748d12cdb9dd26ec4dd0d62c9f6c50455 100644 --- a/app/code/Magento/Cms/Model/PageRepository.php +++ b/app/code/Magento/Cms/Model/PageRepository.php @@ -5,69 +5,82 @@ */ namespace Magento\Cms\Model; +use Magento\Cms\Api\Data; +use Magento\Cms\Api\PageRepositoryInterface; +use Magento\Framework\Api\DataObjectHelper; +use Magento\Framework\Api\SearchCriteriaInterface; use Magento\Framework\Exception\CouldNotDeleteException; use Magento\Framework\Exception\CouldNotSaveException; use Magento\Framework\Exception\NoSuchEntityException; /** * Class PageRepository + * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ -class PageRepository +class PageRepository implements PageRepositoryInterface { /** - * @var \Magento\Cms\Model\Resource\Page + * @var Resource\Page */ protected $resource; /** - * @var \Magento\Cms\Model\PageFactory + * @var PageFactory */ protected $pageFactory; /** - * @var \Magento\Cms\Model\Resource\Page\CollectionFactory + * @var Resource\Page\CollectionFactory */ protected $pageCollectionFactory; /** - * @var \Magento\Framework\DB\QueryBuilderFactory + * @var Data\PageSearchResultsInterfaceFactory */ - protected $queryBuilderFactory; + protected $searchResultsFactory; /** - * @var \Magento\Framework\DB\MapperFactory + * @var DataObjectHelper */ - protected $mapperFactory; + protected $dataObjectHelper; + + /** + * @var Data\PageInterfaceFactory + */ + protected $dataPageFactory; /** * @param Resource\Page $resource - * @param \Magento\Cms\Model\PageFactory $pageFactory - * @param \Magento\Cms\Model\Resource\Page\CollectionFactory $pageCollectionFactory - * @param \Magento\Framework\DB\QueryBuilderFactory $queryBuilderFactory - * @param \Magento\Framework\DB\MapperFactory $mapperFactory + * @param PageFactory $pageFactory + * @param Data\PageInterfaceFactory $dataPageFactory + * @param Resource\Page\CollectionFactory $pageCollectionFactory + * @param Data\PageSearchResultsInterfaceFactory $searchResultsFactory + * @param DataObjectHelper $dataObjectHelper */ public function __construct( - \Magento\Cms\Model\Resource\Page $resource, - \Magento\Cms\Model\PageFactory $pageFactory, - \Magento\Cms\Model\Resource\Page\CollectionFactory $pageCollectionFactory, - \Magento\Framework\DB\QueryBuilderFactory $queryBuilderFactory, - \Magento\Framework\DB\MapperFactory $mapperFactory + Resource\Page $resource, + PageFactory $pageFactory, + Data\PageInterfaceFactory $dataPageFactory, + Resource\Page\CollectionFactory $pageCollectionFactory, + Data\PageSearchResultsInterfaceFactory $searchResultsFactory, + DataObjectHelper $dataObjectHelper ) { $this->resource = $resource; $this->pageFactory = $pageFactory; $this->pageCollectionFactory = $pageCollectionFactory; - $this->queryBuilderFactory = $queryBuilderFactory; - $this->mapperFactory = $mapperFactory; + $this->searchResultsFactory = $searchResultsFactory; + $this->dataObjectHelper = $dataObjectHelper; + $this->dataPageFactory = $dataPageFactory; } /** * Save Page data * - * @param \Magento\Cms\Model\Page $page - * @return \Magento\Cms\Model\Page + * @param Data\PageInterface $page + * @return Page * @throws CouldNotSaveException */ - public function save(\Magento\Cms\Model\Page $page) + public function save(Data\PageInterface $page) { try { $this->resource->save($page); @@ -81,10 +94,10 @@ class PageRepository * Load Page data by given Page Identity * * @param string $pageId - * @return \Magento\Cms\Model\Page + * @return Page * @throws \Magento\Framework\Exception\NoSuchEntityException */ - public function get($pageId) + public function getById($pageId) { $page = $this->pageFactory->create(); $this->resource->load($page, $pageId); @@ -97,27 +110,65 @@ class PageRepository /** * Load Page data collection by given search criteria * - * @param \Magento\Cms\Model\PageCriteriaInterface $criteria - * @return \Magento\Cms\Model\Resource\Page\Collection + * @SuppressWarnings(PHPMD.CyclomaticComplexity) + * @SuppressWarnings(PHPMD.NPathComplexity) + * @param SearchCriteriaInterface $criteria + * @return Resource\Page\Collection */ - public function getList(\Magento\Cms\Model\PageCriteriaInterface $criteria) + public function getList(SearchCriteriaInterface $criteria) { - $queryBuilder = $this->queryBuilderFactory->create(); - $queryBuilder->setCriteria($criteria); - $queryBuilder->setResource($this->resource); - $query = $queryBuilder->create(); - $collection = $this->pageCollectionFactory->create(['query' => $query]); - return $collection; + $searchResults = $this->searchResultsFactory->create(); + $searchResults->setSearchCriteria($criteria); + + $collection = $this->pageCollectionFactory->create(); + foreach ($criteria->getFilterGroups() as $filterGroup) { + $fields = []; + $conditions = []; + foreach ($filterGroup->getFilters() as $filter) { + if ($filter->getField() === 'store_id') { + $collection->addStoreFilter($filter->getValue(), false); + continue; + } + $condition = $filter->getConditionType() ?: 'eq'; + $fields[] = ['attribute' => $filter->getField(), $condition => $filter->getValue()]; + } + if ($fields) { + $collection->addFieldToFilter($fields, $conditions); + } + } + $searchResults->setTotalCount($collection->getSize()); + $sortOrders = $criteria->getSortOrders(); + if ($sortOrders) { + foreach ($sortOrders as $sortOrder) { + $collection->addOrder( + $sortOrder->getField(), + ($sortOrder->getDirection() == SearchCriteriaInterface::SORT_ASC) ? 'ASC' : 'DESC' + ); + } + } + $collection->setCurPage($criteria->getCurrentPage()); + $collection->setPageSize($criteria->getPageSize()); + $pages = []; + /** @var Page $pageModel */ + foreach ($collection as $pageModel) { + $pages[] = $this->dataObjectHelper->populateWithArray( + $this->dataPageFactory->create(), + $pageModel->getData(), + 'Magento\Cms\Api\Data\PageInterface' + ); + } + $searchResults->setItems($pages); + return $searchResults; } /** * Delete Page * - * @param \Magento\Cms\Model\Page $page + * @param Data\PageInterface $page * @return bool - * @throws \Magento\Framework\Exception\CouldNotDeleteException + * @throws CouldNotDeleteException */ - public function delete(\Magento\Cms\Model\Page $page) + public function delete(Data\PageInterface $page) { try { $this->resource->delete($page); @@ -132,11 +183,11 @@ class PageRepository * * @param string $pageId * @return bool - * @throws \Magento\Framework\Exception\CouldNotDeleteException - * @throws \Magento\Framework\Exception\NoSuchEntityException + * @throws CouldNotDeleteException + * @throws NoSuchEntityException */ public function deleteById($pageId) { - return $this->delete($this->get($pageId)); + return $this->delete($this->getById($pageId)); } } diff --git a/app/code/Magento/Cms/Model/Resource/Block/Collection.php b/app/code/Magento/Cms/Model/Resource/Block/Collection.php index b6e0b2db406ee0cfd33a7fffe3b5494c21f4d508..3898607f31ed81b2ebe958e33eb56eeb243660df 100644 --- a/app/code/Magento/Cms/Model/Resource/Block/Collection.php +++ b/app/code/Magento/Cms/Model/Resource/Block/Collection.php @@ -1,27 +1,117 @@ <?php /** + * Cms block grid collection + * * Copyright © 2015 Magento. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Cms\Model\Resource\Block; -use Magento\Cms\Model\Resource\AbstractCollection; - /** - * CMS block collection - * * Class Collection */ -class Collection extends AbstractCollection +class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection { /** + * @return \Magento\Cms\Model\Resource\Block\Collection + */ + protected function _afterLoad() + { + $this->walk('afterLoad'); + parent::_afterLoad(); + } + + /** + * @param string|array $field + * @param string|int|array|null $condition + * @return \Magento\Cms\Model\Resource\Block\Collection + */ + public function addFieldToFilter($field, $condition = null) + { + if ($field == 'store_id') { + return $this->addStoreFilter($condition, false); + } + return parent::addFieldToFilter($field, $condition); + } + + /** + * Define resource model + * + * @return void + */ + protected function _construct() + { + $this->_init('Magento\Cms\Model\Block', 'Magento\Cms\Model\Resource\Block'); + $this->_map['fields']['store'] = 'store_table.store_id'; + } + + /** + * Returns pairs block_id - title + * + * @return array + */ + public function toOptionArray() + { + return $this->_toOptionArray('block_id', 'title'); + } + + /** + * Add filter by store + * + * @param int|\Magento\Store\Model\Store $store + * @param bool $withAdmin + * @return $this + */ + public function addStoreFilter($store, $withAdmin = true) + { + if ($store instanceof \Magento\Store\Model\Store) { + $store = [$store->getId()]; + } + + if (!is_array($store)) { + $store = [$store]; + } + + if ($withAdmin) { + $store[] = \Magento\Store\Model\Store::DEFAULT_STORE_ID; + } + + $this->addFilter('store', ['in' => $store], 'public'); + + return $this; + } + + /** + * Get SQL for get record count. + * Extra GROUP BY strip added. + * + * @return \Magento\Framework\DB\Select + */ + public function getSelectCountSql() + { + $countSelect = parent::getSelectCountSql(); + + $countSelect->reset(\Zend_Db_Select::GROUP); + + return $countSelect; + } + + /** + * Join store relation table if there is store filter + * * @return void */ - protected function init() + protected function _renderFiltersBefore() { - $this->setDataInterfaceName('Magento\Cms\Model\Block'); - $this->storeTableName = 'cms_block_store'; - $this->linkFieldName = 'block_id'; - parent::init(); + if ($this->getFilter('store')) { + $this->getSelect()->join( + ['store_table' => $this->getTable('cms_block_store')], + 'main_table.block_id = store_table.block_id', + [] + )->group( + 'main_table.block_id' + ); + } + parent::_renderFiltersBefore(); } } diff --git a/app/code/Magento/Cms/Model/Resource/Block/Grid/Collection.php b/app/code/Magento/Cms/Model/Resource/Block/Grid/Collection.php deleted file mode 100644 index 50b5433e4fc9dc0a2b83e4cbd93ce89b3ab450e7..0000000000000000000000000000000000000000 --- a/app/code/Magento/Cms/Model/Resource/Block/Grid/Collection.php +++ /dev/null @@ -1,117 +0,0 @@ -<?php -/** - * Cms block grid collection - * - * Copyright © 2015 Magento. All rights reserved. - * See COPYING.txt for license details. - */ -namespace Magento\Cms\Model\Resource\Block\Grid; - -/** - * Class Collection - */ -class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection -{ - /** - * @return \Magento\Cms\Model\Resource\Block\Grid\Collection - */ - protected function _afterLoad() - { - $this->walk('afterLoad'); - parent::_afterLoad(); - } - - /** - * @param string|array $field - * @param string|int|array|null $condition - * @return \Magento\Cms\Model\Resource\Block\Grid\Collection - */ - public function addFieldToFilter($field, $condition = null) - { - if ($field == 'store_id') { - return $this->addStoreFilter($condition, false); - } - return parent::addFieldToFilter($field, $condition); - } - - /** - * Define resource model - * - * @return void - */ - protected function _construct() - { - $this->_init('Magento\Cms\Model\Block', 'Magento\Cms\Model\Resource\Block'); - $this->_map['fields']['store'] = 'store_table.store_id'; - } - - /** - * Returns pairs block_id - title - * - * @return array - */ - public function toOptionArray() - { - return $this->_toOptionArray('block_id', 'title'); - } - - /** - * Add filter by store - * - * @param int|\Magento\Store\Model\Store $store - * @param bool $withAdmin - * @return $this - */ - public function addStoreFilter($store, $withAdmin = true) - { - if ($store instanceof \Magento\Store\Model\Store) { - $store = [$store->getId()]; - } - - if (!is_array($store)) { - $store = [$store]; - } - - if ($withAdmin) { - $store[] = \Magento\Store\Model\Store::DEFAULT_STORE_ID; - } - - $this->addFilter('store', ['in' => $store], 'public'); - - return $this; - } - - /** - * Get SQL for get record count. - * Extra GROUP BY strip added. - * - * @return \Magento\Framework\DB\Select - */ - public function getSelectCountSql() - { - $countSelect = parent::getSelectCountSql(); - - $countSelect->reset(\Zend_Db_Select::GROUP); - - return $countSelect; - } - - /** - * Join store relation table if there is store filter - * - * @return void - */ - protected function _renderFiltersBefore() - { - if ($this->getFilter('store')) { - $this->getSelect()->join( - ['store_table' => $this->getTable('cms_block_store')], - 'main_table.block_id = store_table.block_id', - [] - )->group( - 'main_table.block_id' - ); - } - parent::_renderFiltersBefore(); - } -} diff --git a/app/code/Magento/Cms/Model/Resource/BlockCriteria.php b/app/code/Magento/Cms/Model/Resource/BlockCriteria.php deleted file mode 100644 index e10c0c0c15d612b6b15e20e6ddc7a194e3b9bbfa..0000000000000000000000000000000000000000 --- a/app/code/Magento/Cms/Model/Resource/BlockCriteria.php +++ /dev/null @@ -1,22 +0,0 @@ -<?php -/** - * Copyright © 2015 Magento. All rights reserved. - * See COPYING.txt for license details. - */ -namespace Magento\Cms\Model\Resource; - -use Magento\Cms\Model\BlockCriteriaInterface; - -/** - * Class BlockCriteria - */ -class BlockCriteria extends CmsAbstractCriteria implements BlockCriteriaInterface -{ - /** - * @param string $mapper - */ - public function __construct($mapper = '') - { - $this->mapperInterfaceName = $mapper ?: 'Magento\Cms\Model\Resource\BlockCriteriaMapper'; - } -} diff --git a/app/code/Magento/Cms/Model/Resource/BlockCriteriaMapper.php b/app/code/Magento/Cms/Model/Resource/BlockCriteriaMapper.php deleted file mode 100644 index cfa339ad26232172404adb67094aa1ba90010b58..0000000000000000000000000000000000000000 --- a/app/code/Magento/Cms/Model/Resource/BlockCriteriaMapper.php +++ /dev/null @@ -1,23 +0,0 @@ -<?php -/** - * Copyright © 2015 Magento. All rights reserved. - * See COPYING.txt for license details. - */ -namespace Magento\Cms\Model\Resource; - -/** - * Class BlockCriteriaMapper - */ -class BlockCriteriaMapper extends CmsCriteriaMapper -{ - /** - * @inheritdoc - */ - protected function init() - { - $this->storeTableName = 'cms_block_store'; - $this->linkFieldName = 'block_id'; - $this->initResource('Magento\Cms\Model\Resource\Block'); - parent::init(); - } -} diff --git a/app/code/Magento/Cms/Model/Resource/CmsAbstractCriteria.php b/app/code/Magento/Cms/Model/Resource/CmsAbstractCriteria.php deleted file mode 100644 index 88068299f8b9b9b68db949d2de672268827f35b6..0000000000000000000000000000000000000000 --- a/app/code/Magento/Cms/Model/Resource/CmsAbstractCriteria.php +++ /dev/null @@ -1,30 +0,0 @@ -<?php -/** - * Copyright © 2015 Magento. All rights reserved. - * See COPYING.txt for license details. - */ -namespace Magento\Cms\Model\Resource; - -use Magento\Framework\Data\AbstractCriteria; - -/** - * Class CmsAbstractCriteria - */ -class CmsAbstractCriteria extends AbstractCriteria -{ - /** - * @inheritdoc - */ - public function setFirstStoreFlag($flag = false) - { - $this->data['first_store_flag'] = $flag; - } - - /** - * @inheritdoc - */ - public function addStoreFilter($store, $withAdmin = true) - { - $this->data['store_filter'] = [$store, $withAdmin]; - } -} diff --git a/app/code/Magento/Cms/Model/Resource/CmsCriteriaMapper.php b/app/code/Magento/Cms/Model/Resource/CmsCriteriaMapper.php deleted file mode 100644 index ffac24c942d62253aed5c41b61564ef26d0fdc3e..0000000000000000000000000000000000000000 --- a/app/code/Magento/Cms/Model/Resource/CmsCriteriaMapper.php +++ /dev/null @@ -1,79 +0,0 @@ -<?php -/** - * Copyright © 2015 Magento. All rights reserved. - * See COPYING.txt for license details. - */ -namespace Magento\Cms\Model\Resource; - -use Magento\Framework\DB\GenericMapper; - -/** - * Class CmsCriteriaMapper - */ -class CmsCriteriaMapper extends GenericMapper -{ - /** - * Table which links CMS entity to stores - * - * @var string - */ - protected $storeTableName; - - /** - * @var string - */ - protected $linkFieldName; - - /** - * @inheritdoc - */ - protected function init() - { - $this->map['fields']['store'] = 'store_table.store_id'; - $this->map['fields']['store_id'] = 'store_table.store_id'; - } - - /** - * Set first store flag - * - * @param bool $flag - * @return void - * @SuppressWarnings(PHPMD.UnusedFormalParameter) - */ - public function mapFirstStoreFlag($flag) - { - // do nothing since handled in collection afterLoad - } - - /** - * Add filter by store - * - * @param int|\Magento\Store\Model\Store $store - * @param bool $withAdmin - * @return void - */ - public function mapStoreFilter($store, $withAdmin) - { - $this->getSelect()->join( - ['store_table' => $this->getTable($this->storeTableName)], - "main_table.{$this->linkFieldName} = store_table.{$this->linkFieldName}", - [] - )->group("main_table.{$this->linkFieldName}"); - if (!is_array($store)) { - if ($store instanceof \Magento\Store\Model\Store) { - $store = [$store->getId()]; - } else { - $store = [$store]; - } - } - if ($withAdmin) { - $store[] = \Magento\Store\Model\Store::DEFAULT_STORE_ID; - } - $field = $this->getMappedField('store'); - $this->select->where( - $this->getConditionSql($field, ['in' => $store]), - null, - \Magento\Framework\DB\Select::TYPE_CONDITION - ); - } -} diff --git a/app/code/Magento/Cms/Model/Resource/Page/Collection.php b/app/code/Magento/Cms/Model/Resource/Page/Collection.php index 69dc4cfd7558d53b761aa54b03781bac30a3a666..2b8943acb57a50f1e1dba0c87c6f44649d71ebca 100644 --- a/app/code/Magento/Cms/Model/Resource/Page/Collection.php +++ b/app/code/Magento/Cms/Model/Resource/Page/Collection.php @@ -5,131 +5,212 @@ */ namespace Magento\Cms\Model\Resource\Page; -use Magento\Framework\Data\AbstractSearchResult; -use Magento\Framework\Data\Collection\EntityFactoryInterface; -use Magento\Framework\Data\SearchResultIteratorFactory; -use Magento\Framework\DB\QueryInterface; -use Magento\Framework\Event\ManagerInterface; -use Magento\Store\Model\StoreManagerInterface; -use Magento\Framework\Data\SearchResultProcessorFactory; -use Magento\Framework\Data\SearchResultProcessor; - /** * CMS page collection + * + * Class Collection */ -class Collection extends AbstractSearchResult +class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection { /** - * @var StoreManagerInterface + * Load data for preview flag + * + * @var bool */ - protected $storeManager; + protected $_previewFlag; /** - * @var SearchResultProcessor + * Store manager + * + * @var \Magento\Store\Model\StoreManagerInterface */ - protected $searchResultProcessor; + protected $_storeManager; /** - * @param QueryInterface $query - * @param EntityFactoryInterface $entityFactory - * @param ManagerInterface $eventManager - * @param SearchResultIteratorFactory $resultIteratorFactory + * @param \Magento\Framework\Data\Collection\EntityFactoryInterface $entityFactory + * @param \Psr\Log\LoggerInterface $logger + * @param \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy + * @param \Magento\Framework\Event\ManagerInterface $eventManager * @param \Magento\Store\Model\StoreManagerInterface $storeManager - * @param SearchResultProcessorFactory $searchResultProcessorFactory + * @param mixed $connection + * @param \Magento\Framework\Model\Resource\Db\AbstractDb $resource */ public function __construct( - QueryInterface $query, - EntityFactoryInterface $entityFactory, - ManagerInterface $eventManager, - SearchResultIteratorFactory $resultIteratorFactory, - StoreManagerInterface $storeManager, - SearchResultProcessorFactory $searchResultProcessorFactory + \Magento\Framework\Data\Collection\EntityFactoryInterface $entityFactory, + \Psr\Log\LoggerInterface $logger, + \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy, + \Magento\Framework\Event\ManagerInterface $eventManager, + \Magento\Store\Model\StoreManagerInterface $storeManager, + $connection = null, + \Magento\Framework\Model\Resource\Db\AbstractDb $resource = null ) { - $this->storeManager = $storeManager; - $this->searchResultProcessor = $searchResultProcessorFactory->create($this); - parent::__construct($query, $entityFactory, $eventManager, $resultIteratorFactory); + parent::__construct($entityFactory, $logger, $fetchStrategy, $eventManager, $connection, $resource); + $this->_storeManager = $storeManager; } /** + * Define resource model + * * @return void */ - protected function init() + protected function _construct() { - $this->setDataInterfaceName('Magento\Cms\Model\Page'); - $this->query->addCountSqlSkipPart(\Zend_Db_Select::GROUP, true); - $this->storeTableName = 'cms_page_store'; - $this->linkFieldName = 'page_id'; + $this->_init('Magento\Cms\Model\Page', 'Magento\Cms\Model\Resource\Page'); + $this->_map['fields']['page_id'] = 'main_table.page_id'; + $this->_map['fields']['store'] = 'store_table.store_id'; } /** + * Returns pairs identifier - title for unique identifiers + * and pairs identifier|page_id - title for non-unique after first + * * @return array */ public function toOptionIdArray() { $res = []; $existingIdentifiers = []; - foreach ($this->getItems() as $item) { - /** @var PageInterface $item */ - $identifier = $item->getIdentifier(); + foreach ($this as $item) { + $identifier = $item->getData('identifier'); $data['value'] = $identifier; - $data['label'] = $item->getTitle(); + $data['label'] = $item->getData('title'); if (in_array($identifier, $existingIdentifiers)) { - $data['value'] .= '|' . $item->getPageId(); + $data['value'] .= '|' . $item->getData('page_id'); } else { $existingIdentifiers[] = $identifier; } + $res[] = $data; } + return $res; } /** - * @deprecated - * @return void + * Set first store flag + * + * @param bool $flag + * @return $this + */ + public function setFirstStoreFlag($flag = false) + { + $this->_previewFlag = $flag; + return $this; + } + + /** + * Add field filter to collection + * + * @param string|array $field + * @param string|int|array|null $condition + * @return \Magento\Cms\Model\Resource\Block\Collection + */ + public function addFieldToFilter($field, $condition = null) + { + if ($field === 'store_id') { + return $this->addStoreFilter($condition, false); + } + + return parent::addFieldToFilter($field, $condition); + } + + /** + * Add filter by store + * + * @param int|\Magento\Store\Model\Store $store + * @param bool $withAdmin + * @return $this */ - public function addStoreFilter() + public function addStoreFilter($store, $withAdmin = true) { - // + if (!$this->getFlag('store_filter_added')) { + if ($store instanceof \Magento\Store\Model\Store) { + $store = [$store->getId()]; + } + + if (!is_array($store)) { + $store = [$store]; + } + + if ($withAdmin) { + $store[] = \Magento\Store\Model\Store::DEFAULT_STORE_ID; + } + + $this->addFilter('store', ['in' => $store], 'public'); + } + return $this; } /** * Perform operations after collection load * - * @return void + * @return $this */ - protected function afterLoad() + protected function _afterLoad() { - if ($this->getSearchCriteria()->getPart('first_store_flag')) { - $items = $this->searchResultProcessor->getColumnValues('page_id'); - - $connection = $this->getQuery()->getConnection(); - $resource = $this->getQuery()->getResource(); - if (count($items)) { - $select = $connection->select()->from(['cps' => $resource->getTable('cms_page_store')]) - ->where('cps.page_id IN (?)', $items); - if ($result = $connection->fetchPairs($select)) { - foreach ($this->getItems() as $item) { - /** @var PageInterface $item */ - if (!isset($result[$item->getPageId()])) { - continue; - } - if ($result[$item->getPageId()] == 0) { - $stores = $this->storeManager->getStores(false, true); - $storeId = current($stores)->getId(); - $storeCode = key($stores); - } else { - $storeId = $result[$item->getPageId()]; - $storeCode = $this->storeManager->getStore($storeId)->getCode(); - } - $item->setData('_first_store_id', $storeId); - $item->setData('store_code', $storeCode); - $item->setData('store_id', [$result[$item->getPageId()]]); + $items = $this->getColumnValues('page_id'); + if (count($items)) { + $connection = $this->getConnection(); + $select = $connection->select()->from(['cps' => $this->getTable('cms_page_store')]) + ->where('cps.page_id IN (?)', $items); + $result = $connection->fetchPairs($select); + if ($result) { + foreach ($this as $item) { + $pageId = $item->getData('page_id'); + if (!isset($result[$pageId])) { + continue; + } + if ($result[$pageId] == 0) { + $stores = $this->_storeManager->getStores(false, true); + $storeId = current($stores)->getId(); + $storeCode = key($stores); + } else { + $storeId = $result[$item->getData('page_id')]; + $storeCode = $this->_storeManager->getStore($storeId)->getCode(); } + $item->setData('_first_store_id', $storeId); + $item->setData('store_code', $storeCode); + $item->setData('store_id', [$result[$pageId]]); } } } - parent::afterLoad(); + + $this->_previewFlag = false; + return parent::_afterLoad(); + } + + /** + * Join store relation table if there is store filter + * + * @return void + */ + protected function _renderFiltersBefore() + { + if ($this->getFilter('store')) { + $this->getSelect()->join( + ['store_table' => $this->getTable('cms_page_store')], + 'main_table.page_id = store_table.page_id', + [] + )->group( + 'main_table.page_id' + ); + } + parent::_renderFiltersBefore(); + } + + /** + * Get SQL for get record count. + * Extra GROUP BY strip added. + * + * @return \Magento\Framework\DB\Select + */ + public function getSelectCountSql() + { + $countSelect = parent::getSelectCountSql(); + $countSelect->reset(\Zend_Db_Select::GROUP); + + return $countSelect; } } diff --git a/app/code/Magento/Cms/Model/Resource/Page/Grid/Collection.php b/app/code/Magento/Cms/Model/Resource/Page/Grid/Collection.php deleted file mode 100644 index 41402e0ed343f197fa58b3f10d6bf55bf302fcdc..0000000000000000000000000000000000000000 --- a/app/code/Magento/Cms/Model/Resource/Page/Grid/Collection.php +++ /dev/null @@ -1,216 +0,0 @@ -<?php -/** - * Copyright © 2015 Magento. All rights reserved. - * See COPYING.txt for license details. - */ -namespace Magento\Cms\Model\Resource\Page\Grid; - -/** - * CMS page collection - * - * Class Collection - */ -class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection -{ - /** - * Load data for preview flag - * - * @var bool - */ - protected $_previewFlag; - - /** - * Store manager - * - * @var \Magento\Store\Model\StoreManagerInterface - */ - protected $_storeManager; - - /** - * @param \Magento\Framework\Data\Collection\EntityFactory $entityFactory - * @param \Psr\Log\LoggerInterface $logger - * @param \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy - * @param \Magento\Framework\Event\ManagerInterface $eventManager - * @param \Magento\Store\Model\StoreManagerInterface $storeManager - * @param mixed $connection - * @param \Magento\Framework\Model\Resource\Db\AbstractDb $resource - */ - public function __construct( - \Magento\Framework\Data\Collection\EntityFactory $entityFactory, - \Psr\Log\LoggerInterface $logger, - \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy, - \Magento\Framework\Event\ManagerInterface $eventManager, - \Magento\Store\Model\StoreManagerInterface $storeManager, - $connection = null, - \Magento\Framework\Model\Resource\Db\AbstractDb $resource = null - ) { - parent::__construct($entityFactory, $logger, $fetchStrategy, $eventManager, $connection, $resource); - $this->_storeManager = $storeManager; - } - - /** - * Define resource model - * - * @return void - */ - protected function _construct() - { - $this->_init('Magento\Cms\Model\Page', 'Magento\Cms\Model\Resource\Page'); - $this->_map['fields']['page_id'] = 'main_table.page_id'; - $this->_map['fields']['store'] = 'store_table.store_id'; - } - - /** - * Returns pairs identifier - title for unique identifiers - * and pairs identifier|page_id - title for non-unique after first - * - * @return array - */ - public function toOptionIdArray() - { - $res = []; - $existingIdentifiers = []; - foreach ($this as $item) { - $identifier = $item->getData('identifier'); - - $data['value'] = $identifier; - $data['label'] = $item->getData('title'); - - if (in_array($identifier, $existingIdentifiers)) { - $data['value'] .= '|' . $item->getData('page_id'); - } else { - $existingIdentifiers[] = $identifier; - } - - $res[] = $data; - } - - return $res; - } - - /** - * Set first store flag - * - * @param bool $flag - * @return $this - */ - public function setFirstStoreFlag($flag = false) - { - $this->_previewFlag = $flag; - return $this; - } - - /** - * Add field filter to collection - * - * @param string|array $field - * @param string|int|array|null $condition - * @return \Magento\Cms\Model\Resource\Block\Grid\Collection - */ - public function addFieldToFilter($field, $condition = null) - { - if ($field === 'store_id') { - return $this->addStoreFilter($condition, false); - } - - return parent::addFieldToFilter($field, $condition); - } - - /** - * Add filter by store - * - * @param int|\Magento\Store\Model\Store $store - * @param bool $withAdmin - * @return $this - */ - public function addStoreFilter($store, $withAdmin = true) - { - if (!$this->getFlag('store_filter_added')) { - if ($store instanceof \Magento\Store\Model\Store) { - $store = [$store->getId()]; - } - - if (!is_array($store)) { - $store = [$store]; - } - - if ($withAdmin) { - $store[] = \Magento\Store\Model\Store::DEFAULT_STORE_ID; - } - - $this->addFilter('store', ['in' => $store], 'public'); - } - return $this; - } - - /** - * Perform operations after collection load - * - * @return $this - */ - protected function _afterLoad() - { - $items = $this->getColumnValues('page_id'); - if (count($items)) { - $connection = $this->getConnection(); - $select = $connection->select()->from(['cps' => $this->getTable('cms_page_store')]) - ->where('cps.page_id IN (?)', $items); - $result = $connection->fetchPairs($select); - if ($result) { - foreach ($this as $item) { - $pageId = $item->getData('page_id'); - if (!isset($result[$pageId])) { - continue; - } - if ($result[$pageId] == 0) { - $stores = $this->_storeManager->getStores(false, true); - $storeId = current($stores)->getId(); - $storeCode = key($stores); - } else { - $storeId = $result[$item->getData('page_id')]; - $storeCode = $this->_storeManager->getStore($storeId)->getCode(); - } - $item->setData('_first_store_id', $storeId); - $item->setData('store_code', $storeCode); - $item->setData('store_id', [$result[$pageId]]); - } - } - } - - $this->_previewFlag = false; - return parent::_afterLoad(); - } - - /** - * Join store relation table if there is store filter - * - * @return void - */ - protected function _renderFiltersBefore() - { - if ($this->getFilter('store')) { - $this->getSelect()->join( - ['store_table' => $this->getTable('cms_page_store')], - 'main_table.page_id = store_table.page_id', - [] - )->group( - 'main_table.page_id' - ); - } - parent::_renderFiltersBefore(); - } - - /** - * Get SQL for get record count. - * Extra GROUP BY strip added. - * - * @return \Magento\Framework\DB\Select - */ - public function getSelectCountSql() - { - $countSelect = parent::getSelectCountSql(); - $countSelect->reset(\Zend_Db_Select::GROUP); - - return $countSelect; - } -} diff --git a/app/code/Magento/Cms/Model/Resource/PageCriteria.php b/app/code/Magento/Cms/Model/Resource/PageCriteria.php deleted file mode 100644 index 87cf04da8372198db34367c3f06424ac7b045efc..0000000000000000000000000000000000000000 --- a/app/code/Magento/Cms/Model/Resource/PageCriteria.php +++ /dev/null @@ -1,52 +0,0 @@ -<?php -/** - * Copyright © 2015 Magento. All rights reserved. - * See COPYING.txt for license details. - */ -namespace Magento\Cms\Model\Resource; - -use Magento\Cms\Model\PageCriteriaInterface; - -/** - * Class PageCriteria - */ -class PageCriteria extends CmsAbstractCriteria implements PageCriteriaInterface -{ - /** - * @param string $mapper - */ - public function __construct($mapper = '') - { - $this->mapperInterfaceName = $mapper ?: 'Magento\Cms\Model\Resource\PageCriteriaMapper'; - } - - /** - * @inheritdoc - */ - public function setFirstStoreFlag($flag = false) - { - $this->data['first_store_flag'] = $flag; - return true; - } - - /** - * @inheritdoc - */ - public function addStoreFilter($store, $withAdmin = true) - { - $this->data['store_filter'] = [$store, $withAdmin]; - return true; - } - - /** - * Add Criteria object - * - * @param \Magento\Cms\Model\Resource\PageCriteria $criteria - * @return bool - */ - public function addCriteria(\Magento\Cms\Model\Resource\PageCriteria $criteria) - { - $this->data[self::PART_CRITERIA_LIST]['list'][] = $criteria; - return true; - } -} diff --git a/app/code/Magento/Cms/Model/Resource/PageCriteriaMapper.php b/app/code/Magento/Cms/Model/Resource/PageCriteriaMapper.php deleted file mode 100644 index 2c1aa20b396eacf22c2fdc10224e1e97ccccd8a6..0000000000000000000000000000000000000000 --- a/app/code/Magento/Cms/Model/Resource/PageCriteriaMapper.php +++ /dev/null @@ -1,23 +0,0 @@ -<?php -/** - * Copyright © 2015 Magento. All rights reserved. - * See COPYING.txt for license details. - */ -namespace Magento\Cms\Model\Resource; - -/** - * Class PageCriteriaMapper - */ -class PageCriteriaMapper extends CmsCriteriaMapper -{ - /** - * @inheritdoc - */ - protected function init() - { - $this->storeTableName = 'cms_page_store'; - $this->linkFieldName = 'page_id'; - $this->initResource('Magento\Cms\Model\Resource\Page'); - parent::init(); - } -} diff --git a/app/code/Magento/Cms/Test/Unit/Model/BlockRepositoryTest.php b/app/code/Magento/Cms/Test/Unit/Model/BlockRepositoryTest.php new file mode 100644 index 0000000000000000000000000000000000000000..e5c3c9dd155437c9ff54c4a7e3e3312096bfea88 --- /dev/null +++ b/app/code/Magento/Cms/Test/Unit/Model/BlockRepositoryTest.php @@ -0,0 +1,300 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ +namespace Magento\Cms\Test\Unit\Model; + +use Magento\Cms\Model\BlockRepository; +use Magento\Framework\Api\SearchCriteriaInterface; + +/** + * Test for Magento\Cms\Model\BlockRepository + */ +class BlockRepositoryTest extends \PHPUnit_Framework_TestCase +{ + /** + * @var BlockRepository + */ + protected $repository; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Cms\Model\Resource\Block + */ + protected $blockResource; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Cms\Model\Block + */ + protected $block; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Cms\Api\Data\BlockInterface + */ + protected $blockData; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Cms\Api\Data\BlockSearchResultsInterface + */ + protected $blockSearchResult; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Framework\Api\DataObjectHelper + */ + protected $dataHelper; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Cms\Model\Resource\Block\Collection + */ + protected $collection; + + /** + * Initialize repository + */ + public function setUp() + { + $this->blockResource = $this->getMockBuilder('Magento\Cms\Model\Resource\Block') + ->disableOriginalConstructor() + ->getMock(); + $blockFactory = $this->getMockBuilder('Magento\Cms\Model\BlockFactory') + ->disableOriginalConstructor() + ->setMethods(['create']) + ->getMock(); + $blockDataFactory = $this->getMockBuilder('Magento\Cms\Api\Data\BlockInterfaceFactory') + ->disableOriginalConstructor() + ->setMethods(['create']) + ->getMock(); + $blockSearchResultFactory = $this->getMockBuilder('Magento\Cms\Api\Data\BlockSearchResultsInterfaceFactory') + ->disableOriginalConstructor() + ->setMethods(['create']) + ->getMock(); + $collectionFactory = $this->getMockBuilder('Magento\Cms\Model\Resource\Block\CollectionFactory') + ->disableOriginalConstructor() + ->setMethods(['create']) + ->getMock(); + + $this->block = $this->getMockBuilder('Magento\Cms\Model\Block')->disableOriginalConstructor()->getMock(); + $this->blockData = $this->getMockBuilder('Magento\Cms\Api\Data\BlockInterface') + ->getMock(); + $this->blockSearchResult = $this->getMockBuilder('Magento\Cms\Api\Data\BlockSearchResultsInterface') + ->getMock(); + $this->collection = $this->getMockBuilder('Magento\Cms\Model\Resource\Block\Collection') + ->disableOriginalConstructor() + ->setMethods(['addFieldToFilter', 'getSize', 'setCurPage', 'setPageSize', 'load', 'addOrder']) + ->getMock(); + + $blockFactory->expects($this->any()) + ->method('create') + ->willReturn($this->block); + $blockDataFactory->expects($this->any()) + ->method('create') + ->willReturn($this->blockData); + $blockSearchResultFactory->expects($this->any()) + ->method('create') + ->willReturn($this->blockSearchResult); + $collectionFactory->expects($this->any()) + ->method('create') + ->willReturn($this->collection); + /** + * @var \Magento\Cms\Model\BlockFactory $blockFactory + * @var \Magento\Cms\Api\Data\BlockInterfaceFactory $blockDataFactory + * @var \Magento\Cms\Api\Data\BlockSearchResultsInterfaceFactory $blockSearchResultFactory + * @var \Magento\Cms\Model\Resource\Block\CollectionFactory $collectionFactory + */ + + $this->dataHelper = $this->getMockBuilder('Magento\Framework\Api\DataObjectHelper') + ->disableOriginalConstructor() + ->getMock(); + + $this->repository = new BlockRepository( + $this->blockResource, + $blockFactory, + $blockDataFactory, + $collectionFactory, + $blockSearchResultFactory, + $this->dataHelper + ); + } + + /** + * @test + */ + public function testSave() + { + $this->blockResource->expects($this->once()) + ->method('save') + ->with($this->block) + ->willReturnSelf(); + $this->assertEquals($this->block, $this->repository->save($this->block)); + } + + /** + * @test + */ + public function testDeleteById() + { + $blockId = '123'; + + $this->block->expects($this->once()) + ->method('getId') + ->willReturn(true); + $this->blockResource->expects($this->once()) + ->method('load') + ->with($this->block, $blockId) + ->willReturn($this->block); + $this->blockResource->expects($this->once()) + ->method('delete') + ->with($this->block) + ->willReturnSelf(); + + $this->assertTrue($this->repository->deleteById($blockId)); + } + + /** + * @test + * + * @expectedException \Magento\Framework\Exception\CouldNotSaveException + */ + public function testSaveException() + { + $this->blockResource->expects($this->once()) + ->method('save') + ->with($this->block) + ->willThrowException(new \Exception()); + $this->repository->save($this->block); + } + + /** + * @test + * + * @expectedException \Magento\Framework\Exception\CouldNotDeleteException + */ + public function testDeleteException() + { + $this->blockResource->expects($this->once()) + ->method('delete') + ->with($this->block) + ->willThrowException(new \Exception()); + $this->repository->delete($this->block); + } + + /** + * @test + * + * @expectedException \Magento\Framework\Exception\NoSuchEntityException + */ + public function testGetByIdException() + { + $blockId = '123'; + + $this->block->expects($this->once()) + ->method('getId') + ->willReturn(false); + $this->blockResource->expects($this->once()) + ->method('load') + ->with($this->block, $blockId) + ->willReturn($this->block); + $this->repository->getById($blockId); + } + + /** + * @test + */ + public function testGetList() + { + $field = 'name'; + $value = 'magento'; + $condition = 'eq'; + $total = 10; + $currentPage = 3; + $pageSize = 2; + $sortField = 'id'; + + $criteria = $this->getMockBuilder('Magento\Framework\Api\SearchCriteriaInterface')->getMock(); + $filterGroup = $this->getMockBuilder('Magento\Framework\Api\Search\FilterGroup')->getMock(); + $filter = $this->getMockBuilder('Magento\Framework\Api\Filter')->getMock(); + $storeFilter = $this->getMockBuilder('Magento\Framework\Api\Filter')->getMock(); + $sortOrder = $this->getMockBuilder('Magento\Framework\Api\SortOrder')->getMock(); + + $criteria->expects($this->once()) + ->method('getFilterGroups') + ->willReturn([$filterGroup]); + $criteria->expects($this->once()) + ->method('getSortOrders') + ->willReturn([$sortOrder]); + $criteria->expects($this->once()) + ->method('getCurrentPage') + ->willReturn($currentPage); + $criteria->expects($this->once()) + ->method('getPageSize') + ->willReturn($pageSize); + $filterGroup->expects($this->once()) + ->method('getFilters') + ->willReturn([$storeFilter, $filter]); + $filter->expects($this->once()) + ->method('getConditionType') + ->willReturn($condition); + $filter->expects($this->any()) + ->method('getField') + ->willReturn($field); + $filter->expects($this->once()) + ->method('getValue') + ->willReturn($value); + $storeFilter->expects($this->any()) + ->method('getField') + ->willReturn('store_id'); + $storeFilter->expects($this->once()) + ->method('getValue') + ->willReturn(1); + $sortOrder->expects($this->once()) + ->method('getField') + ->willReturn($sortField); + $sortOrder->expects($this->once()) + ->method('getDirection') + ->willReturn(SearchCriteriaInterface::SORT_DESC); + + /** @var \Magento\Framework\Api\SearchCriteriaInterface $criteria */ + + $this->collection->addItem($this->block); + $this->blockSearchResult->expects($this->once()) + ->method('setSearchCriteria') + ->with($criteria) + ->willReturnSelf(); + $this->collection->expects($this->once()) + ->method('addFieldToFilter') + ->with([['attribute' => $field, $condition => $value]], []) + ->willReturnSelf(); + $this->blockSearchResult->expects($this->once()) + ->method('setTotalCount') + ->with($total) + ->willReturnSelf(); + $this->collection->expects($this->once()) + ->method('getSize') + ->willReturn($total); + $this->collection->expects($this->once()) + ->method('setCurPage') + ->with($currentPage) + ->willReturnSelf(); + $this->collection->expects($this->once()) + ->method('setPageSize') + ->with($pageSize) + ->willReturnSelf(); + $this->collection->expects($this->once()) + ->method('addOrder') + ->with($sortField, 'DESC') + ->willReturnSelf(); + $this->block->expects($this->once()) + ->method('getData') + ->willReturn(['data']); + $this->blockSearchResult->expects($this->once()) + ->method('setItems') + ->with(['someData']) + ->willReturnSelf(); + $this->dataHelper->expects($this->once()) + ->method('populateWithArray') + ->with($this->blockData, ['data'], 'Magento\Cms\Api\Data\BlockInterface') + ->willReturn('someData'); + + $this->assertEquals($this->blockSearchResult, $this->repository->getList($criteria)); + } +} diff --git a/app/code/Magento/Cms/Test/Unit/Model/Config/Source/PageTest.php b/app/code/Magento/Cms/Test/Unit/Model/Config/Source/PageTest.php index 234de25b3a6866038240be08d00d6fbc2da77370..a4602ea501dc26e141aa9003b763bd33ac7c745e 100644 --- a/app/code/Magento/Cms/Test/Unit/Model/Config/Source/PageTest.php +++ b/app/code/Magento/Cms/Test/Unit/Model/Config/Source/PageTest.php @@ -11,14 +11,9 @@ namespace Magento\Cms\Test\Unit\Model\Config\Source; class PageTest extends \PHPUnit_Framework_TestCase { /** - * @var \Magento\Cms\Model\PageRepository|\PHPUnit_Framework_MockObject_MockObject + * @var \Magento\Cms\Model\Resource\Page\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject */ - protected $pageRepositoryMock; - - /** - * @var \Magento\Cms\Model\Resource\PageCriteria|\PHPUnit_Framework_MockObject_MockObject - */ - protected $pageCriteriaFactoryMock; + protected $collectionFactory; /** * @var \Magento\Cms\Model\Config\Source\Page @@ -34,15 +29,8 @@ class PageTest extends \PHPUnit_Framework_TestCase { $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this); - $this->pageRepositoryMock = $this->getMock( - 'Magento\Cms\Model\PageRepository', - [], - [], - '', - false - ); - $this->pageCriteriaFactoryMock = $this->getMock( - 'Magento\Cms\Model\Resource\PageCriteriaFactory', + $this->collectionFactory = $this->getMock( + 'Magento\Cms\Model\Resource\Page\CollectionFactory', ['create'], [], '', @@ -52,8 +40,7 @@ class PageTest extends \PHPUnit_Framework_TestCase $this->page = $objectManager->getObject( 'Magento\Cms\Model\Config\Source\Page', [ - 'pageRepository' => $this->pageRepositoryMock, - 'pageCriteriaFactory' => $this->pageCriteriaFactoryMock + 'collectionFactory' => $this->collectionFactory, ] ); } @@ -72,22 +59,10 @@ class PageTest extends \PHPUnit_Framework_TestCase '', false ); - $pageCriteriaMock = $this->getMock( - 'Magento\Cms\Model\Resource\PageCriteria', - [], - [], - '', - false - ); - - $this->pageRepositoryMock->expects($this->once()) - ->method('getList') - ->with($pageCriteriaMock) - ->will($this->returnValue($pageCollectionMock)); - $this->pageCriteriaFactoryMock->expects($this->once()) + $this->collectionFactory->expects($this->once()) ->method('create') - ->will($this->returnValue($pageCriteriaMock)); + ->will($this->returnValue($pageCollectionMock)); $pageCollectionMock->expects($this->once()) ->method('toOptionIdArray') diff --git a/app/code/Magento/Cms/Test/Unit/Model/DataSource/PageCollectionTest.php b/app/code/Magento/Cms/Test/Unit/Model/DataSource/PageCollectionTest.php deleted file mode 100644 index 227a7c2280ccc75e1b0a457fb5f2119b0794072b..0000000000000000000000000000000000000000 --- a/app/code/Magento/Cms/Test/Unit/Model/DataSource/PageCollectionTest.php +++ /dev/null @@ -1,106 +0,0 @@ -<?php -/** - * Copyright © 2015 Magento. All rights reserved. - * See COPYING.txt for license details. - */ -namespace Magento\Cms\Test\Unit\Model\DataSource; - -/** - * Class PageCollectionTest - */ -class PageCollectionTest extends \PHPUnit_Framework_TestCase -{ - /** - * @var \Magento\Cms\Model\Resource\PageCriteria|\PHPUnit_Framework_MockObject_MockObject - */ - protected $criteriaMock; - - /** - * @var \Magento\Cms\Model\PageRepository|\PHPUnit_Framework_MockObject_MockObject - */ - protected $repositoryMock; - - /** - * @var \Magento\Cms\Model\DataSource\PageCollection - */ - protected $pageCollection; - - /** - * Set up - * - * @return void - */ - protected function setUp() - { - $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this); - $this->repositoryMock = $this->getMock( - 'Magento\Cms\Model\PageRepository', - [], - [], - '', - false - ); - - $this->pageCollection = $objectManager->getObject( - 'Magento\Cms\Model\DataSource\PageCollection', - [ - 'repository' => $this->repositoryMock, - 'mapper' => '' - ] - ); - } - - /** - * Run test addFilter method - * - * @param string $name - * @param string $field - * @param mixed $condition - * @param string $type - * @return void - * - * @dataProvider dataProviderAddFilter - */ - public function testAddFilter($name, $field, $condition, $type) - { - $this->pageCollection->addFilter($name, $field, $condition, $type); - } - - /** - * Run test getResultCollection method - * - * @return void - */ - public function testGetResultCollection() - { - $this->repositoryMock->expects($this->once()) - ->method('getList') - ->with($this->pageCollection) - ->will($this->returnValue('return-value')); - - $this->assertEquals('return-value', $this->pageCollection->getResultCollection()); - } - - /** - * Data provider for addFilter method - * - * @return array - */ - public function dataProviderAddFilter() - { - return [ - [ - 'name' => 'test-name', - 'field' => 'store_id', - 'condition' => null, - 'type' => 'public', - ], - [ - 'name' => 'test-name', - 'field' => 'any_field', - 'condition' => 10, - 'type' => 'private' - ] - ]; - } -} diff --git a/app/code/Magento/Cms/Test/Unit/Model/PageRepositoryTest.php b/app/code/Magento/Cms/Test/Unit/Model/PageRepositoryTest.php index d300268f7ab044c6228031707df86c8dd1d29f43..a5127dc51823910b45ebcc68d6c1cca26e53541a 100644 --- a/app/code/Magento/Cms/Test/Unit/Model/PageRepositoryTest.php +++ b/app/code/Magento/Cms/Test/Unit/Model/PageRepositoryTest.php @@ -5,261 +5,296 @@ */ namespace Magento\Cms\Test\Unit\Model; +use Magento\Cms\Model\PageRepository; +use Magento\Framework\Api\SearchCriteriaInterface; + /** - * Class PageRepositoryTest + * Test for Magento\Cms\Model\PageRepository */ class PageRepositoryTest extends \PHPUnit_Framework_TestCase { /** - * @var \Magento\Cms\Model\Resource\Page|\PHPUnit_Framework_MockObject_MockObject + * @var PageRepository */ - protected $resourceMock; + protected $repository; /** - * @var \Magento\Cms\Model\PageFactory|\PHPUnit_Framework_MockObject_MockObject + * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Cms\Model\Resource\Page */ - protected $pageFactoryMock; + protected $pageResource; /** - * @var \Magento\Cms\Model\Resource\Page\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject + * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Cms\Model\Page */ - protected $pageCollectionFactoryMock; + protected $page; /** - * @var \Magento\Framework\DB\QueryBuilderFactory|\PHPUnit_Framework_MockObject_MockObject + * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Cms\Api\Data\PageInterface */ - protected $queryBuilderFactoryMock; + protected $pageData; /** - * @var \Magento\Framework\DB\MapperFactory|\PHPUnit_Framework_MockObject_MockObject + * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Cms\Api\Data\PageSearchResultsInterface */ - protected $mapperFactoryMock; + protected $pageSearchResult; /** - * @var \Magento\Cms\Model\PageRepository + * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Framework\Api\DataObjectHelper */ - protected $pageRepository; + protected $dataHelper; /** - * Set up - * - * @return void + * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Cms\Model\Resource\Page\Collection */ - protected function setUp() + protected $collection; + + /** + * Initialize repository + */ + public function setUp() { - $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this); + $this->pageResource = $this->getMockBuilder('Magento\Cms\Model\Resource\Page') + ->disableOriginalConstructor() + ->getMock(); + $pageFactory = $this->getMockBuilder('Magento\Cms\Model\PageFactory') + ->disableOriginalConstructor() + ->setMethods(['create']) + ->getMock(); + $pageDataFactory = $this->getMockBuilder('Magento\Cms\Api\Data\PageInterfaceFactory') + ->disableOriginalConstructor() + ->setMethods(['create']) + ->getMock(); + $pageSearchResultFactory = $this->getMockBuilder('Magento\Cms\Api\Data\PageSearchResultsInterfaceFactory') + ->disableOriginalConstructor() + ->setMethods(['create']) + ->getMock(); + $collectionFactory = $this->getMockBuilder('Magento\Cms\Model\Resource\Page\CollectionFactory') + ->disableOriginalConstructor() + ->setMethods(['create']) + ->getMock(); - $this->resourceMock = $this->getMock( - 'Magento\Cms\Model\Resource\Page', - ['save', 'load', 'delete'], - [], - '', - false - ); - $this->pageFactoryMock = $this->getMock( - 'Magento\Cms\Model\PageFactory', - ['create'], - [], - '', - false - ); - $this->pageCollectionFactoryMock = $this->getMock( - 'Magento\Cms\Model\Resource\Page\CollectionFactory', - ['create'], - [], - '', - false - ); - $this->queryBuilderFactoryMock = $this->getMock( - 'Magento\Framework\DB\QueryBuilderFactory', - ['create'], - [], - '', - false - ); - $this->mapperFactoryMock = $this->getMock( - 'Magento\Framework\DB\MapperFactory', - [], - [], - '', - false - ); + $this->page = $this->getMockBuilder('Magento\Cms\Model\Page')->disableOriginalConstructor()->getMock(); + $this->pageData = $this->getMockBuilder('Magento\Cms\Api\Data\PageInterface') + ->getMock(); + $this->pageSearchResult = $this->getMockBuilder('Magento\Cms\Api\Data\PageSearchResultsInterface') + ->getMock(); + $this->collection = $this->getMockBuilder('Magento\Cms\Model\Resource\Page\Collection') + ->disableOriginalConstructor() + ->setMethods(['addFieldToFilter', 'getSize', 'setCurPage', 'setPageSize', 'load', 'addOrder']) + ->getMock(); + + $pageFactory->expects($this->any()) + ->method('create') + ->willReturn($this->page); + $pageDataFactory->expects($this->any()) + ->method('create') + ->willReturn($this->pageData); + $pageSearchResultFactory->expects($this->any()) + ->method('create') + ->willReturn($this->pageSearchResult); + $collectionFactory->expects($this->any()) + ->method('create') + ->willReturn($this->collection); + /** + * @var \Magento\Cms\Model\PageFactory $pageFactory + * @var \Magento\Cms\Api\Data\PageInterfaceFactory $pageDataFactory + * @var \Magento\Cms\Api\Data\PageSearchResultsInterfaceFactory $pageSearchResultFactory + * @var \Magento\Cms\Model\Resource\Page\CollectionFactory $collectionFactory + */ + + $this->dataHelper = $this->getMockBuilder('Magento\Framework\Api\DataObjectHelper') + ->disableOriginalConstructor() + ->getMock(); - $this->pageRepository = $objectManager->getObject( - 'Magento\Cms\Model\PageRepository', - [ - 'resource' => $this->resourceMock, - 'pageFactory' => $this->pageFactoryMock, - 'pageCollectionFactory' => $this->pageCollectionFactoryMock, - 'queryBuilderFactory' => $this->queryBuilderFactoryMock, - 'mapperFactory' => $this->mapperFactoryMock - ] + $this->repository = new PageRepository( + $this->pageResource, + $pageFactory, + $pageDataFactory, + $collectionFactory, + $pageSearchResultFactory, + $this->dataHelper ); } /** - * Run test save method - * - * @return void + * @test */ public function testSave() { - $pageMock = $this->getMock( - 'Magento\Cms\Model\Page', - [], - [], - '', - false - ); - - $this->resourceMock->expects($this->once()) + $this->pageResource->expects($this->once()) ->method('save') - ->with($pageMock); - - $this->assertEquals($pageMock, $this->pageRepository->save($pageMock)); + ->with($this->page) + ->willReturnSelf(); + $this->assertEquals($this->page, $this->repository->save($this->page)); } /** - * Run test get method - * - * @return void + * @test */ - public function testGet() + public function testDeleteById() { - $id = 20; - $pageMock = $this->getMockForAbstractClass( - 'Magento\Cms\Model\Page', - [], - '', - false, - true, - true, - ['getId'] - ); + $pageId = '123'; - $pageMock->expects($this->atLeastOnce()) + $this->page->expects($this->once()) ->method('getId') - ->will($this->returnValue($id)); - $this->pageFactoryMock->expects($this->once()) - ->method('create') - ->will($this->returnValue($pageMock)); - $this->resourceMock->expects($this->once()) + ->willReturn(true); + $this->pageResource->expects($this->once()) ->method('load') - ->with($pageMock, $id); + ->with($this->page, $pageId) + ->willReturn($this->page); + $this->pageResource->expects($this->once()) + ->method('delete') + ->with($this->page) + ->willReturnSelf(); - $this->assertEquals($pageMock, $this->pageRepository->get($id)); + $this->assertTrue($this->repository->deleteById($pageId)); } /** - * Run test getList method + * @test * - * @return void + * @expectedException \Magento\Framework\Exception\CouldNotSaveException */ - public function testGetList() + public function testSaveException() { - $criteriaMock = $this->getMock( - 'Magento\Cms\Model\Resource\PageCriteria', - [], - [], - '', - false - ); - $queryBuilderMock = $this->getMock( - 'Magento\Framework\DB\QueryBuilder', - ['setCriteria', 'setResource', 'create'], - [], - '', - false - ); - $queryMock = $this->getMockForAbstractClass( - 'Magento\Framework\DB\QueryInterface', - [], - '', - false - ); - $collectionMock = $this->getMock( - 'Magento\Cms\Model\Resource\Page\Collection', - [], - [], - '', - false - ); - - $this->queryBuilderFactoryMock->expects($this->once()) - ->method('create') - ->will($this->returnValue($queryBuilderMock)); - $queryBuilderMock->expects($this->once()) - ->method('setCriteria') - ->with($criteriaMock); - $queryBuilderMock->expects($this->once()) - ->method('setResource') - ->with($this->resourceMock); - $queryBuilderMock->expects($this->once()) - ->method('create') - ->will($this->returnValue($queryMock)); - $this->pageCollectionFactoryMock->expects($this->once()) - ->method('create') - ->with(['query' => $queryMock]) - ->will($this->returnValue($collectionMock)); - - $this->assertEquals($collectionMock, $this->pageRepository->getList($criteriaMock)); + $this->pageResource->expects($this->once()) + ->method('save') + ->with($this->page) + ->willThrowException(new \Exception()); + $this->repository->save($this->page); } /** - * Run test delete method + * @test * - * @return void + * @expectedException \Magento\Framework\Exception\CouldNotDeleteException */ - public function testDelete() + public function testDeleteException() { - $pageMock = $this->getMockForAbstractClass( - 'Magento\Cms\Model\Page', - [], - '', - false, - true, - true, - ['getPageId'] - ); - - $this->resourceMock->expects($this->once()) + $this->pageResource->expects($this->once()) ->method('delete') - ->with($pageMock); - - $this->assertTrue($this->pageRepository->delete($pageMock)); + ->with($this->page) + ->willThrowException(new \Exception()); + $this->repository->delete($this->page); } /** - * Run test deleteById method + * @test * - * @return void + * @expectedException \Magento\Framework\Exception\NoSuchEntityException */ - public function testDeleteById() + public function testGetByIdException() { - $id = 20; - $pageMock = $this->getMockForAbstractClass( - 'Magento\Cms\Model\Page', - [], - '', - false, - true, - true, - ['getId'] - ); + $pageId = '123'; - $this->pageFactoryMock->expects($this->once()) - ->method('create') - ->will($this->returnValue($pageMock)); - $this->resourceMock->expects($this->once()) - ->method('load') - ->with($pageMock, $id); - $pageMock->expects($this->once()) + $this->page->expects($this->once()) ->method('getId') - ->will($this->returnValue($id)); - $this->resourceMock->expects($this->once()) - ->method('delete') - ->with($pageMock); + ->willReturn(false); + $this->pageResource->expects($this->once()) + ->method('load') + ->with($this->page, $pageId) + ->willReturn($this->page); + $this->repository->getById($pageId); + } + + /** + * @test + */ + public function testGetList() + { + $field = 'name'; + $value = 'magento'; + $condition = 'eq'; + $total = 10; + $currentPage = 3; + $pageSize = 2; + $sortField = 'id'; + + $criteria = $this->getMockBuilder('Magento\Framework\Api\SearchCriteriaInterface')->getMock(); + $filterGroup = $this->getMockBuilder('Magento\Framework\Api\Search\FilterGroup')->getMock(); + $filter = $this->getMockBuilder('Magento\Framework\Api\Filter')->getMock(); + $storeFilter = $this->getMockBuilder('Magento\Framework\Api\Filter')->getMock(); + $sortOrder = $this->getMockBuilder('Magento\Framework\Api\SortOrder')->getMock(); + + $criteria->expects($this->once()) + ->method('getFilterGroups') + ->willReturn([$filterGroup]); + $criteria->expects($this->once()) + ->method('getSortOrders') + ->willReturn([$sortOrder]); + $criteria->expects($this->once()) + ->method('getCurrentPage') + ->willReturn($currentPage); + $criteria->expects($this->once()) + ->method('getPageSize') + ->willReturn($pageSize); + $filterGroup->expects($this->once()) + ->method('getFilters') + ->willReturn([$storeFilter, $filter]); + $filter->expects($this->once()) + ->method('getConditionType') + ->willReturn($condition); + $filter->expects($this->any()) + ->method('getField') + ->willReturn($field); + $filter->expects($this->once()) + ->method('getValue') + ->willReturn($value); + $storeFilter->expects($this->any()) + ->method('getField') + ->willReturn('store_id'); + $storeFilter->expects($this->once()) + ->method('getValue') + ->willReturn(1); + $sortOrder->expects($this->once()) + ->method('getField') + ->willReturn($sortField); + $sortOrder->expects($this->once()) + ->method('getDirection') + ->willReturn(SearchCriteriaInterface::SORT_DESC); + + /** @var \Magento\Framework\Api\SearchCriteriaInterface $criteria */ + + $this->collection->addItem($this->page); + $this->pageSearchResult->expects($this->once()) + ->method('setSearchCriteria') + ->with($criteria) + ->willReturnSelf(); + $this->collection->expects($this->once()) + ->method('addFieldToFilter') + ->with([['attribute' => $field, $condition => $value]], []) + ->willReturnSelf(); + $this->pageSearchResult->expects($this->once()) + ->method('setTotalCount') + ->with($total) + ->willReturnSelf(); + $this->collection->expects($this->once()) + ->method('getSize') + ->willReturn($total); + $this->collection->expects($this->once()) + ->method('setCurPage') + ->with($currentPage) + ->willReturnSelf(); + $this->collection->expects($this->once()) + ->method('setPageSize') + ->with($pageSize) + ->willReturnSelf(); + $this->collection->expects($this->once()) + ->method('addOrder') + ->with($sortField, 'DESC') + ->willReturnSelf(); + $this->page->expects($this->once()) + ->method('getData') + ->willReturn(['data']); + $this->pageSearchResult->expects($this->once()) + ->method('setItems') + ->with(['someData']) + ->willReturnSelf(); + $this->dataHelper->expects($this->once()) + ->method('populateWithArray') + ->with($this->pageData, ['data'], 'Magento\Cms\Api\Data\PageInterface') + ->willReturn('someData'); - $this->assertTrue($this->pageRepository->deleteById($id)); + $this->assertEquals($this->pageSearchResult, $this->repository->getList($criteria)); } } diff --git a/app/code/Magento/Cms/Test/Unit/Model/Resource/Block/Grid/CollectionTest.php b/app/code/Magento/Cms/Test/Unit/Model/Resource/Block/Grid/CollectionTest.php index 9db74457f743fa561510a622b3c439472a819085..5b267bc224b84db9894c9416ecc26deac3f8fb4c 100644 --- a/app/code/Magento/Cms/Test/Unit/Model/Resource/Block/Grid/CollectionTest.php +++ b/app/code/Magento/Cms/Test/Unit/Model/Resource/Block/Grid/CollectionTest.php @@ -5,7 +5,7 @@ */ namespace Magento\Cms\Test\Unit\Model\Resource\Block\Grid; -use Magento\Cms\Model\Resource\Block\Grid\Collection; +use Magento\Cms\Model\Resource\Block\Collection; class CollectionTest extends \PHPUnit_Framework_TestCase { @@ -42,11 +42,11 @@ class CollectionTest extends \PHPUnit_Framework_TestCase $objectManagerHelper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this); $arguments = $objectManagerHelper->getConstructArguments( - 'Magento\Cms\Model\Resource\Block\Grid\Collection', + 'Magento\Cms\Model\Resource\Block\Collection', ['resource' => $resource, 'connection' => $connection] ); - $this->collection = $this->getMockBuilder('Magento\Cms\Model\Resource\Block\Grid\Collection') + $this->collection = $this->getMockBuilder('Magento\Cms\Model\Resource\Block\Collection') ->setConstructorArgs($arguments) ->setMethods(['addFilter', '_translateCondition', 'getMainTable']) ->getMock(); diff --git a/app/code/Magento/Cms/Test/Unit/Model/Resource/Page/CollectionTest.php b/app/code/Magento/Cms/Test/Unit/Model/Resource/Page/CollectionTest.php deleted file mode 100644 index 2abd96842cf321873d5d6949bcf80f4d1e954d30..0000000000000000000000000000000000000000 --- a/app/code/Magento/Cms/Test/Unit/Model/Resource/Page/CollectionTest.php +++ /dev/null @@ -1,278 +0,0 @@ -<?php -/** - * Copyright © 2015 Magento. All rights reserved. - * See COPYING.txt for license details. - */ -namespace Magento\Cms\Test\Unit\Model\Resource\Page; - -/** - * Class CollectionTest - */ -class CollectionTest extends \PHPUnit_Framework_TestCase -{ - /** - * @var \Magento\Store\Model\StoreManagerInterface|\PHPUnit_Framework_MockObject_MockObject - */ - protected $storeManagerMock; - - /** - * @var \Magento\Framework\DB\QueryInterface|\PHPUnit_Framework_MockObject_MockObject - */ - protected $queryMock; - - /** - * @var \Magento\Framework\Event\ManagerInterface|\PHPUnit_Framework_MockObject_MockObject - */ - protected $eventManagerMock; - - /** - * @var \Magento\Framework\Data\Collection\EntityFactoryInterface|\PHPUnit_Framework_MockObject_MockObject - */ - protected $entityFactoryMock; - - /** - * @var \Magento\Framework\Data\SearchResultIteratorFactory|\PHPUnit_Framework_MockObject_MockObject - */ - protected $resultIteratorFactoryMock; - - /** - * @var \PHPUnit_Framework_MockObject_MockObject - */ - protected $searchResultProcessorMock; - - /** - * @var \Magento\Cms\Model\Resource\Page\Collection - */ - protected $collection; - - /** - * Set up - * - * @return void - */ - protected function setUp() - { - $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this); - - $this->queryMock = $this->getMockForAbstractClass( - 'Magento\Framework\DB\QueryInterface', - [], - '', - false, - true, - true, - ['fetchAll', 'getIdFieldName', 'getConnection', 'getResource'] - ); - $this->entityFactoryMock = $this->getMockForAbstractClass( - 'Magento\Framework\Data\Collection\EntityFactoryInterface', - [], - '', - false, - true, - true, - [] - ); - $this->eventManagerMock = $this->getMockForAbstractClass( - 'Magento\Framework\Event\ManagerInterface', - [], - '', - false, - true, - true, - ['dispatch'] - ); - $this->resultIteratorFactoryMock = $this->getMock( - 'Magento\Framework\Data\SearchResultIteratorFactory', - [], - [], - '', - false - ); - $this->searchResultProcessorMock = $this->getMock( - 'Magento\Framework\Data\SearchResultProcessor', - [], - [], - '', - false - ); - $searchResultProcessorFactoryMock = $this->getMock( - 'Magento\Framework\Data\SearchResultProcessorFactory', - [], - [], - '', - false - ); - $searchResultProcessorFactoryMock->expects($this->any()) - ->method('create') - ->withAnyParameters() - ->willReturn($this->searchResultProcessorMock); - $this->storeManagerMock = $this->getMockForAbstractClass( - 'Magento\Store\Model\StoreManagerInterface', - [], - '', - false, - true, - true, - ['getStore'] - ); - - $this->collection = $objectManager->getObject( - 'Magento\Cms\Model\Resource\Page\Collection', - [ - 'query' => $this->queryMock, - 'entityFactory' => $this->entityFactoryMock, - 'eventManager' => $this->eventManagerMock, - 'resultIteratorFactory' => $this->resultIteratorFactoryMock, - 'storeManager' => $this->storeManagerMock, - 'searchResultProcessorFactory' => $searchResultProcessorFactoryMock - ] - ); - } - - /** - * Run test toOptionIdArray method - * - * @return void - * - * @SuppressWarnings(PHPMD.ExcessiveMethodLength) - */ - public function testToOptionIdArray() - { - $itemsByPageId = array_fill(0, 4, 123); - $data = [ - 'item1' => ['test' => 'test'], - 'item2' => ['test' => 'test'], - 'item3' => ['test' => 'test'], - 'item4' => ['test' => 'test'], - ]; - - $objectMock = $this->getMock( - 'Magento\Framework\Object', - ['getData', 'getId', 'setData', 'getTitle', 'getIdentifier'], - [], - '', - false - ); - $criteriaMock = $this->getMockForAbstractClass('Magento\Framework\Api\CriteriaInterface'); - $connectionMock = $this->getMockForAbstractClass('Magento\Framework\DB\Adapter\AdapterInterface'); - $resourceMock = $this->getMockForAbstractClass( - 'Magento\Framework\Model\Resource\Db\AbstractDb', - [], - '', - false, - true, - true, - ['getTable'] - ); - $selectMock = $this->getMock( - 'Magento\Framework\DB\Select', - ['from', 'where'], - [], - '', - false - ); - $storeMock = $this->getMock( - 'Magento\Store\Model\Store', - ['getCode'], - [], - '', - false - ); - - $this->queryMock->expects($this->once()) - ->method('fetchAll') - ->will($this->returnValue($data)); - - $this->searchResultProcessorMock->expects($this->once()) - ->method('getColumnValues') - ->with('page_id') - ->will($this->returnValue($itemsByPageId)); - $this->queryMock->expects($this->any()) - ->method('getIdFieldName') - ->will($this->returnValue('id_field_name')); - $objectMock->expects($this->any()) - ->method('getData') - ->will( - $this->returnValueMap( - [ - ['id_field_name', null, null], - ['page_id', null, 123], - ] - ) - ); - $this->entityFactoryMock->expects($this->any()) - ->method('create') - ->with('Magento\Cms\Model\Page', ['data' => ['test' => 'test']]) - ->will($this->returnValue($objectMock)); - $this->queryMock->expects($this->once()) - ->method('getCriteria') - ->will($this->returnValue($criteriaMock)); - $criteriaMock->expects($this->once()) - ->method('getPart') - ->with('first_store_flag') - ->will($this->returnValue(true)); - $this->queryMock->expects($this->once()) - ->method('getConnection') - ->will($this->returnValue($connectionMock)); - $this->queryMock->expects($this->once()) - ->method('getResource') - ->will($this->returnValue($resourceMock)); - $connectionMock->expects($this->once()) - ->method('select') - ->will($this->returnValue($selectMock)); - $selectMock->expects($this->once()) - ->method('from') - ->with(['cps' => 'query_table']) - ->will($this->returnSelf()); - $resourceMock->expects($this->once()) - ->method('getTable') - ->with('cms_page_store') - ->will($this->returnValue('query_table')); - $selectMock->expects($this->once()) - ->method('where') - ->with('cps.page_id IN (?)', array_fill(0, 4, 123)) - ->will($this->returnSelf()); - $connectionMock->expects($this->once()) - ->method('fetchPairs') - ->with($selectMock) - ->will($this->returnValue([123 => 999])); - $objectMock->expects($this->any()) - ->method('getId') - ->will($this->returnValue(123)); - $this->storeManagerMock->expects($this->any()) - ->method('getStore') - ->with(999) - ->will($this->returnValue($storeMock)); - $storeMock->expects($this->any()) - ->method('getCode') - ->will($this->returnValue('store_code')); - $objectMock->expects($this->any()) - ->method('setData'); - $objectMock->expects($this->any()) - ->method('getTitle') - ->will($this->returnValue('item-value')); - $objectMock->expects($this->any()) - ->method('getIdentifier') - ->will($this->returnValue('identifier-value')); - - $expected = [ - [ - 'value' => 'identifier-value', - 'label' => 'item-value', - ], - [ - 'value' => 'identifier-value|123', - 'label' => 'item-value' - ], - [ - 'value' => 'identifier-value|123', - 'label' => 'item-value' - ], - [ - 'value' => 'identifier-value|123', - 'label' => 'item-value' - ], - ]; - $this->assertEquals($expected, $this->collection->toOptionIdArray()); - } -} diff --git a/app/code/Magento/Cms/Test/Unit/Model/Resource/PageCriteriaMapperTest.php b/app/code/Magento/Cms/Test/Unit/Model/Resource/PageCriteriaMapperTest.php deleted file mode 100644 index 19ac623ed6b10f98e592e6308409c401ea961cda..0000000000000000000000000000000000000000 --- a/app/code/Magento/Cms/Test/Unit/Model/Resource/PageCriteriaMapperTest.php +++ /dev/null @@ -1,135 +0,0 @@ -<?php -/** - * Copyright © 2015 Magento. All rights reserved. - * See COPYING.txt for license details. - */ -namespace Magento\Cms\Test\Unit\Model\Resource; - -/** - * Class PageCriteriaMapperTest - */ -class PageCriteriaMapperTest extends \PHPUnit_Framework_TestCase -{ - /** - * @var \Psr\Log\LoggerInterface|\PHPUnit_Framework_MockObject_MockObject - */ - protected $loggerMock; - - /** - * @var \Magento\Framework\Data\Collection\Db\FetchStrategyInterface|\PHPUnit_Framework_MockObject_MockObject - */ - protected $fetchStrategyMock; - - /** - * @var \Magento\Framework\Data\ObjectFactory|\PHPUnit_Framework_MockObject_MockObject - */ - protected $objectFactoryMock; - - /** - * @var \Magento\Framework\DB\MapperFactory|\PHPUnit_Framework_MockObject_MockObject - */ - protected $mapperFactoryMock; - - /** - * @var \Magento\Framework\DB\Select|\PHPUnit_Framework_MockObject_MockObject - */ - protected $selectMock; - - /** - * @var \Magento\Cms\Model\Resource\PageCriteriaMapper|\PHPUnit_Framework_MockObject_MockObject - */ - protected $pageCriteria; - - /** - * Set up - * - * @return void - */ - protected function setUp() - { - $this->loggerMock = $this->getMock('Psr\Log\LoggerInterface'); - $this->fetchStrategyMock = $this->getMockForAbstractClass( - 'Magento\Framework\Data\Collection\Db\FetchStrategyInterface', - [], - '', - false - ); - $this->objectFactoryMock = $this->getMock( - 'Magento\Framework\Data\ObjectFactory', - [], - [], - '', - false - ); - $this->mapperFactoryMock = $this->getMock( - 'Magento\Framework\DB\MapperFactory', - [], - [], - '', - false - ); - $this->selectMock = $this->getMock( - 'Magento\Framework\DB\Select', - ['join', 'group', 'where'], - [], - '', - false - ); - - $this->pageCriteria = $this->getMockBuilder('Magento\Cms\Model\Resource\PageCriteriaMapper') - ->setConstructorArgs( - [ - 'logger' => $this->loggerMock, - 'fetchStrategy' => $this->fetchStrategyMock, - 'objectFactory' => $this->objectFactoryMock, - 'mapperFactory' => $this->mapperFactoryMock, - 'select' => $this->selectMock, - ] - )->setMethods(['init', 'getTable', 'getMappedField', 'getConditionSql']) - ->getMock(); - } - - /** - * Run test mapStoreFilter method - * - * @return void - */ - public function testMapStoreFilter() - { - $reflection = new \ReflectionClass($this->pageCriteria); - $reflectionProperty = $reflection->getProperty('storeTableName'); - $reflectionProperty->setAccessible(true); - $reflectionProperty->setValue($this->pageCriteria, 'cms_page_store'); - $reflectionProperty = $reflection->getProperty('linkFieldName'); - $reflectionProperty->setAccessible(true); - $reflectionProperty->setValue($this->pageCriteria, 'page_id'); - - $this->pageCriteria->expects($this->once()) - ->method('getTable') - ->with('cms_page_store') - ->will($this->returnValue('table-name')); - $this->pageCriteria->expects($this->once()) - ->method('getMappedField') - ->with('store') - ->will($this->returnValue('mapped-field-result')); - $this->selectMock->expects($this->once()) - ->method('join') - ->with( - ['store_table' => 'table-name'], - 'main_table.page_id = store_table.page_id', - [] - )->will($this->returnSelf()); - $this->selectMock->expects($this->once()) - ->method('group') - ->with('main_table.page_id'); - $this->pageCriteria->expects($this->once()) - ->method('getConditionSql') - ->with('mapped-field-result', ['in' => [1]]) - ->will($this->returnValue('condition-sql-result')); - $this->selectMock->expects($this->once()) - ->method('where') - ->with('condition-sql-result', null, \Magento\Framework\DB\Select::TYPE_CONDITION); - - $this->pageCriteria->mapStoreFilter(1, false); - } -} diff --git a/app/code/Magento/Cms/etc/di.xml b/app/code/Magento/Cms/etc/di.xml index 5180d2671ad2e15dab12a891e221812f0665ab74..d25ddfd399e02b299b8cc9be0c901fe03b795f3d 100644 --- a/app/code/Magento/Cms/etc/di.xml +++ b/app/code/Magento/Cms/etc/di.xml @@ -6,8 +6,14 @@ */ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../lib/internal/Magento/Framework/ObjectManager/etc/config.xsd"> - <preference for="Magento\Cms\Model\PageCriteriaInterface" type="Magento\Cms\Model\Resource\PageCriteria" /> - <preference for="Magento\Cms\Model\BlockCriteriaInterface" type="Magento\Cms\Model\Resource\BlockCriteria" /> + <preference for="Magento\Cms\Api\Data\PageSearchResultsInterface" + type="Magento\Framework\Api\SearchResults" /> + <preference for="Magento\Cms\Api\Data\BlockSearchResultsInterface" + type="Magento\Framework\Api\SearchResults" /> + <preference for="Magento\Cms\Api\Data\PageInterface" type="Magento\Cms\Model\Page" /> + <preference for="Magento\Cms\Api\Data\BlockInterface" type="Magento\Cms\Model\Block" /> + <preference for="Magento\Cms\Api\BlockRepositoryInterface" type="Magento\Cms\Model\BlockRepository" /> + <preference for="Magento\Cms\Api\PageRepositoryInterface" type="Magento\Cms\Model\PageRepository" /> <type name="Magento\Cms\Model\Wysiwyg\Config"> <arguments> <argument name="windowSize" xsi:type="array"> diff --git a/app/code/Magento/Cms/view/adminhtml/layout/cms_block_listing.xml b/app/code/Magento/Cms/view/adminhtml/layout/cms_block_listing.xml index 83f7ab821f23355be1d399dc85244287af31d8bc..6f1975adb97cd11e5032ed1b455183ac0a653f31 100644 --- a/app/code/Magento/Cms/view/adminhtml/layout/cms_block_listing.xml +++ b/app/code/Magento/Cms/view/adminhtml/layout/cms_block_listing.xml @@ -10,7 +10,7 @@ <referenceBlock name="listing"> <arguments> <argument name="name" xsi:type="string">cms_block_listing</argument> - <argument name="dataSource" xsi:type="object">Magento\Cms\Model\DataSource\BlockCollection</argument> + <argument name="dataSource" xsi:type="object">Magento\Cms\Model\Resource\Block\Collection</argument> <argument name="save_parameters_in_session" xsi:type="string">1</argument> <argument name="configuration" xsi:type="array"> <item name="page_actions" xsi:type="array"> diff --git a/app/code/Magento/Cms/view/adminhtml/layout/cms_page_listing.xml b/app/code/Magento/Cms/view/adminhtml/layout/cms_page_listing.xml index 48bdecdc6696955d394dc16dc148d4f231b01c6b..bebf23cacd86b98d4f7e4f6c3af734c4cba77515 100644 --- a/app/code/Magento/Cms/view/adminhtml/layout/cms_page_listing.xml +++ b/app/code/Magento/Cms/view/adminhtml/layout/cms_page_listing.xml @@ -10,7 +10,7 @@ <referenceBlock name="listing"> <arguments> <argument name="name" xsi:type="string">cms_page_listing</argument> - <argument name="dataSource" xsi:type="object">Magento\Cms\Model\DataSource\PageCollection</argument> + <argument name="dataSource" xsi:type="object">Magento\Cms\Model\Resource\Page\Collection</argument> <argument name="save_parameters_in_session" xsi:type="string">1</argument> <argument name="configuration" xsi:type="array"> <item name="page_actions" xsi:type="array"> diff --git a/app/code/Magento/Ui/Component/Listing.php b/app/code/Magento/Ui/Component/Listing.php index 1cfbaa1acd6f32b74a42ed67eff1b24472b41e80..6d8437a886c5e531522c59fe1fae4e13f7461ab3 100644 --- a/app/code/Magento/Ui/Component/Listing.php +++ b/app/code/Magento/Ui/Component/Listing.php @@ -188,7 +188,7 @@ class Listing extends AbstractView public function getCollectionItems() { $items = []; - $collection = $this->getDataCollection()->getResultCollection(); + $collection = $this->getDataCollection(); foreach ($collection->getItems() as $item) { $actualFields = []; $itemsData = $this->getDataFromDataProvider($item->getData()); @@ -230,8 +230,8 @@ class Listing extends AbstractView ); $this->renderContext->getStorage()->addGlobalData('dump', ['extenders' => []]); - $collection = $this->getDataCollection()->getResultCollection(); - $totalCount = $collection->getTotalCount(); + $collection = $this->getDataCollection(); + $totalCount = $collection->count(); $this->renderContext->getStorage()->addDataSource( $this->getName(), [ diff --git a/app/code/Magento/Ui/Component/Paging.php b/app/code/Magento/Ui/Component/Paging.php index 9a8f0a5ddd9b4eaedf2f144b484298eed0d0e301..7c504b74ac8303fff539ffe9671af8a9c68039e7 100644 --- a/app/code/Magento/Ui/Component/Paging.php +++ b/app/code/Magento/Ui/Component/Paging.php @@ -37,7 +37,10 @@ class Paging extends AbstractView $offset = $this->renderContext->getRequestParam('page', $defaultPage); $defaultLimit = $this->config->getData('pageSize'); $size = $this->renderContext->getRequestParam('limit', $defaultLimit); - $this->renderContext->getStorage()->getDataCollection($this->getParentName())->setLimit($offset, $size); + $this->renderContext->getStorage() + ->getDataCollection($this->getParentName()) + ->setPageSize($size) + ->setCurPage($offset); } /** diff --git a/app/code/Magento/Ui/Test/Unit/Component/PagingTest.php b/app/code/Magento/Ui/Test/Unit/Component/PagingTest.php index 68af1081739d613c26815a54088cc6e55a6ed431..e8cd28a27665a09b164e93c2f76c58e72ffd1ed7 100644 --- a/app/code/Magento/Ui/Test/Unit/Component/PagingTest.php +++ b/app/code/Magento/Ui/Test/Unit/Component/PagingTest.php @@ -153,7 +153,7 @@ class PagingTest extends \PHPUnit_Framework_TestCase false, true, true, - ['setLimit'] + ['setPageSize', 'setCurPage'] ); $this->renderContextMock->expects($this->any())->method('getStorage')->willReturn($storageMock); @@ -173,8 +173,12 @@ class PagingTest extends \PHPUnit_Framework_TestCase ); $dataCollectionMock->expects($this->any()) - ->method('setLimit') - ->with($paramsPage, $paramsSize) + ->method('setPageSize') + ->with($paramsSize) + ->willReturnSelf(); + $dataCollectionMock->expects($this->any()) + ->method('setCurPage') + ->with($paramsPage) ->willReturnSelf(); $this->assertNull($this->view->prepare()); diff --git a/dev/tests/functional/tests/app/Magento/Cms/Test/Fixture/CmsBlock.xml b/dev/tests/functional/tests/app/Magento/Cms/Test/Fixture/CmsBlock.xml index 36bb9cf39af0421b3a0bc9e6e25115cb312ad55e..506201360d763ba00a5367aef4fa1dd68eb42d0c 100644 --- a/dev/tests/functional/tests/app/Magento/Cms/Test/Fixture/CmsBlock.xml +++ b/dev/tests/functional/tests/app/Magento/Cms/Test/Fixture/CmsBlock.xml @@ -6,7 +6,7 @@ */ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="../../../../../../vendor/magento/mtf/etc/fixture.xsd"> - <fixture name="cmsBlock" module="Magento_Cms" type="flat" entity_type="cms_block" collection="Magento\Cms\Model\Resource\Block\Grid\Collection" identifier="identifier" + <fixture name="cmsBlock" module="Magento_Cms" type="flat" entity_type="cms_block" collection="Magento\Cms\Model\Resource\Block\Collection" identifier="identifier" handler_interface="Magento\Cms\Test\Handler\CmsBlock\CmsBlockInterface" class="Magento\Cms\Test\Fixture\CmsBlock"> <dataset name="default"> <field name="title" xsi:type="string">block_%isolation%</field> diff --git a/dev/tests/functional/tests/app/Magento/Cms/Test/Fixture/CmsPage.xml b/dev/tests/functional/tests/app/Magento/Cms/Test/Fixture/CmsPage.xml index 149bef091c83163e09710dbaa2cd7f4bc6930058..e08d7c55a59877bf23477ca67e1b44b221fde192 100644 --- a/dev/tests/functional/tests/app/Magento/Cms/Test/Fixture/CmsPage.xml +++ b/dev/tests/functional/tests/app/Magento/Cms/Test/Fixture/CmsPage.xml @@ -6,7 +6,7 @@ */ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="../../../../../../vendor/magento/mtf/etc/fixture.xsd"> - <fixture name="cmsPage" module="Magento_Cms" type="flat" entity_type="cms_page" collection="Magento\Cms\Model\Resource\Page\Grid\Collection" identifier="identifier" + <fixture name="cmsPage" module="Magento_Cms" type="flat" entity_type="cms_page" collection="Magento\Cms\Model\Resource\Page\Collection" identifier="identifier" repository_class="Magento\Cms\Test\Repository\CmsPage" handler_interface="Magento\Cms\Test\Handler\CmsPage\CmsPageInterface" class="Magento\Cms\Test\Fixture\CmsPage"> <dataset name="default"> <field name="title" xsi:type="string">CMS Page%isolation%</field> diff --git a/lib/internal/Magento/Framework/Api/SearchCriteria.php b/lib/internal/Magento/Framework/Api/SearchCriteria.php index 727be2cac88b47b98e73fc919a2cb47057997433..b98908fcb85d6756df137cb48d526fed1b3ce184 100644 --- a/lib/internal/Magento/Framework/Api/SearchCriteria.php +++ b/lib/internal/Magento/Framework/Api/SearchCriteria.php @@ -15,7 +15,7 @@ class SearchCriteria extends AbstractSimpleObject implements SearchCriteriaInter /**#@+ * Constants for Data Object keys */ - const FILTER_GROUPS = 'filterGroups'; + const FILTER_GROUPS = 'filter_groups'; const SORT_ORDERS = 'sort_orders'; const PAGE_SIZE = 'page_size'; const CURRENT_PAGE = 'current_page';