Files
taome/modules/ps_mbo/src/ModuleCollectionDataProvider.php
2020-10-07 10:37:15 +02:00

133 lines
4.0 KiB
PHP

<?php
/**
* 2007-2020 PrestaShop and Contributors
*
* NOTICE OF LICENSE
*
* This source file is subject to the Academic Free License 3.0 (AFL-3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* https://opensource.org/licenses/AFL-3.0
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@prestashop.com so we can send you a copy immediately.
*
* @author PrestaShop SA <contact@prestashop.com>
* @copyright 2007-2020 PrestaShop SA and Contributors
* @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
namespace PrestaShop\Module\Mbo;
use Module;
use PrestaShop\PrestaShop\Adapter\LegacyContext;
use PrestaShop\PrestaShop\Adapter\Module\AdminModuleDataProvider;
use PrestaShop\PrestaShop\Adapter\Presenter\PresenterInterface;
use PrestaShop\PrestaShop\Core\Addon\AddonsCollection;
use PrestaShop\PrestaShop\Core\Addon\Module\ModuleRepository;
use PrestaShop\PrestaShop\Core\Addon\Module\ModuleRepositoryInterface;
use PrestaShopBundle\Entity\Repository\TabRepository;
use Profile;
class ModuleCollectionDataProvider
{
/**
* @var AdminModuleDataProvider
*/
private $addonsProvider;
/**
* @var ModuleRepositoryInterface
*/
private $moduleRepository;
/**
* @var PresenterInterface
*/
private $modulePresenter;
/**
* @var TabRepository
*/
private $tabRepository;
/**
* @var LegacyContext
*/
private $context;
/**
* Constructor.
*
* @param AdminModuleDataProvider $addonsProvider
* @param ModuleRepositoryInterface $moduleRepository
* @param PresenterInterface $modulePresenter
* @param TabRepository $tabRepository
* @param LegacyContext $context
*/
public function __construct(
AdminModuleDataProvider $addonsProvider,
ModuleRepositoryInterface $moduleRepository,
PresenterInterface $modulePresenter,
TabRepository $tabRepository,
LegacyContext $context
) {
$this->addonsProvider = $addonsProvider;
$this->moduleRepository = $moduleRepository;
$this->modulePresenter = $modulePresenter;
$this->tabRepository = $tabRepository;
$this->context = $context;
}
/**
* @param array $moduleNames
*
* @return array
*/
public function getData(array $moduleNames)
{
$data = [];
$modulesOnDisk = AddonsCollection::createFrom($this->moduleRepository->getList());
$modulesOnDisk = $this->addonsProvider->generateAddonsUrls($modulesOnDisk);
foreach ($modulesOnDisk as $module) {
/** @var \PrestaShop\PrestaShop\Adapter\Module\Module $module */
if (!in_array($module->get('name'), $moduleNames)) {
continue;
}
if ($module->get('id')) {
$isEmployeeAllowed = (bool) Module::getPermissionStatic(
$module->get('id'),
'configure',
$this->context->getContext()->employee
);
} else {
$ModuleTabId = $this->tabRepository->findOneIdByClassName('AdminModules');
/** @var array $access */
$access = Profile::getProfileAccess(
$this->context->getContext()->employee->id_profile,
$ModuleTabId
);
$isEmployeeAllowed = !$access['edit'];
}
if (false === $isEmployeeAllowed) {
continue;
}
if ($module->get('author') === ModuleRepository::PARTNER_AUTHOR) {
$module->set('type', 'addonsPartner');
}
$module->fillLogo();
$data[$module->get('name')] = $this->modulePresenter->present($module);
}
return $data;
}
}