![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/old/vendor/magento/module-theme/Model/ResourceModel/Theme/ |
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Theme\Model\ResourceModel\Theme; /** * Theme collection */ class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection implements \Magento\Framework\View\Design\Theme\Label\ListInterface, \Magento\Framework\View\Design\Theme\ListInterface { /** * Default page size */ const DEFAULT_PAGE_SIZE = 6; /** * @var string */ protected $_idFieldName = 'theme_id'; /** * Collection initialization * * @return void */ protected function _construct() { $this->_init(\Magento\Theme\Model\Theme::class, \Magento\Theme\Model\ResourceModel\Theme::class); } /** * Add title for parent themes * * @return $this */ public function addParentTitle() { $this->getSelect()->joinLeft( ['parent' => $this->getMainTable()], 'main_table.parent_id = parent.theme_id', ['parent_theme_title' => 'parent.theme_title'] ); return $this; } /** * Add area filter * * @param string $area * @return $this */ public function addAreaFilter($area = \Magento\Framework\App\Area::AREA_FRONTEND) { $this->getSelect()->where('main_table.area=?', $area); return $this; } /** * Add type filter in relations * * @param int $typeParent * @param int $typeChild * @return $this */ public function addTypeRelationFilter($typeParent, $typeChild) { $this->getSelect()->join( ['parent' => $this->getMainTable()], 'main_table.parent_id = parent.theme_id', ['parent_type' => 'parent.type'] )->where( 'parent.type = ?', $typeParent )->where( 'main_table.type = ?', $typeChild ); return $this; } /** * Add type filter * * @param string|array $type * @return $this */ public function addTypeFilter($type) { $this->addFieldToFilter('main_table.type', ['in' => $type]); return $this; } /** * Filter visible themes in backend (physical and virtual only) * * @return $this */ public function filterVisibleThemes() { $this->addTypeFilter( [ \Magento\Framework\View\Design\ThemeInterface::TYPE_PHYSICAL, \Magento\Framework\View\Design\ThemeInterface::TYPE_VIRTUAL, ] ); return $this; } /** * Return array for select field * * @return array */ public function toOptionArray() { return $this->_toOptionArray('theme_id', 'theme_title'); } /** * Return array for grid column * * @return array */ public function toOptionHash() { return $this->_toOptionHash('theme_id', 'theme_title'); } /** * Get theme from DB by area and theme_path * * @param string $fullPath * @return \Magento\Theme\Model\Theme */ public function getThemeByFullPath($fullPath) { $this->_reset()->clear(); list($area, $themePath) = explode('/', $fullPath, 2); $this->addFieldToFilter('area', $area); $this->addFieldToFilter('theme_path', $themePath); return $this->getFirstItem(); } /** * Set page size * * @param int $size * @return $this */ public function setPageSize($size = self::DEFAULT_PAGE_SIZE) { return parent::setPageSize($size); } /** * Update all child themes relations * * @param \Magento\Framework\View\Design\ThemeInterface $themeModel * @return $this */ public function updateChildRelations(\Magento\Framework\View\Design\ThemeInterface $themeModel) { $parentThemeId = $themeModel->getParentId(); $this->addFieldToFilter('parent_id', ['eq' => $themeModel->getId()])->load(); /** @var $theme \Magento\Framework\View\Design\ThemeInterface */ foreach ($this->getItems() as $theme) { $theme->setParentId($parentThemeId)->save(); } return $this; } /** * Filter frontend physical theme. * All themes or per page if set page and page size (page size is optional) * * @param int $page * @param int $pageSize * @return $this */ public function filterPhysicalThemes( $page = null, $pageSize = \Magento\Theme\Model\ResourceModel\Theme\Collection::DEFAULT_PAGE_SIZE ) { $this->addAreaFilter( \Magento\Framework\App\Area::AREA_FRONTEND )->addTypeFilter( \Magento\Framework\View\Design\ThemeInterface::TYPE_PHYSICAL ); if ($page) { $this->setPageSize($pageSize)->setCurPage($page); } return $this; } /** * Filter theme customization * * @param string $area * @param int $type * @return $this */ public function filterThemeCustomizations( $area = \Magento\Framework\App\Area::AREA_FRONTEND, $type = \Magento\Framework\View\Design\ThemeInterface::TYPE_VIRTUAL ) { $this->addAreaFilter($area)->addTypeFilter($type); return $this; } /** * @inheritdoc */ public function getLabels() { $labels = $this->loadRegisteredThemes(); return $labels->toOptionArray(); } /** * @return $this */ public function loadRegisteredThemes() { $this->_reset()->clear(); return $this->setOrder('theme_title', \Magento\Framework\Data\Collection::SORT_ORDER_ASC) ->filterVisibleThemes()->addAreaFilter(\Magento\Framework\App\Area::AREA_FRONTEND); } }