* @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\Controller\Admin; use PrestaShop\Module\Mbo\RecommendedModule\RecommendedModulePresenterInterface; use PrestaShop\Module\Mbo\Tab\TabCollectionProviderInterface; use PrestaShopBundle\Controller\Admin\FrameworkBundleAdminController; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\RequestStack; use Symfony\Component\HttpKernel\Exception\ServiceUnavailableHttpException; /** * Responsible of render json data for ajax display of Recommended Modules. */ class ModuleRecommendedController extends FrameworkBundleAdminController { /** * @var RequestStack */ private $requestStack; /** * @var TabCollectionProviderInterface */ private $tabCollectionProvider; /** * @var RecommendedModulePresenterInterface */ private $recommendedModulePresenter; /** * @param RequestStack $requestStack * @param TabCollectionProviderInterface $tabCollectionProvider * @param RecommendedModulePresenterInterface $recommendedModulePresenter */ public function __construct( RequestStack $requestStack, TabCollectionProviderInterface $tabCollectionProvider, RecommendedModulePresenterInterface $recommendedModulePresenter ) { parent::__construct(); $this->requestStack = $requestStack; $this->tabCollectionProvider = $tabCollectionProvider; $this->recommendedModulePresenter = $recommendedModulePresenter; } /** * @return JsonResponse */ public function indexAction() { $response = new JsonResponse(); try { $tabCollection = $this->tabCollectionProvider->getTabCollection(); $tabClassName = $this->requestStack->getCurrentRequest()->get('tabClassName'); $tab = $tabCollection->getTab($tabClassName); $response->setData([ 'content' => $this->renderView( '@Modules/ps_mbo/views/templates/admin/controllers/module_catalog/recommended-modules.html.twig', [ 'recommendedModulesInstalled' => $this->recommendedModulePresenter->presentCollection($tab->getRecommendedModulesInstalled()), 'recommendedModulesNotInstalled' => $this->recommendedModulePresenter->presentCollection($tab->getRecommendedModulesNotInstalled()), ] ), ]); } catch (ServiceUnavailableHttpException $exception) { $response->setData([ 'content' => $this->renderView('@Modules/ps_mbo/views/templates/admin/error.html.twig'), ]); $response->setStatusCode($exception->getStatusCode()); $response->headers->add($exception->getHeaders()); } return $response; } }