From 011926f62b3d89f8a30285443fece2a7a46c820f Mon Sep 17 00:00:00 2001 From: Julio Montoya Date: Thu, 26 Mar 2020 10:31:02 +0100 Subject: [PATCH] Minor - flint fixes --- src/CoreBundle/Controller/BaseController.php | 27 ------ .../Controller/ResourceApiController.php | 29 +++--- .../Controller/ResourceController.php | 72 --------------- .../Resources/config/repositories.yml | 2 +- src/CoreBundle/Traits/ControllerTrait.php | 15 ++++ .../Traits/ResourceControllerTrait.php | 88 +++++++++++++++++++ .../Controller/ToolBaseController.php | 2 + 7 files changed, 119 insertions(+), 116 deletions(-) diff --git a/src/CoreBundle/Controller/BaseController.php b/src/CoreBundle/Controller/BaseController.php index 0f2d0691d0..141ae6acb1 100644 --- a/src/CoreBundle/Controller/BaseController.php +++ b/src/CoreBundle/Controller/BaseController.php @@ -7,7 +7,6 @@ namespace Chamilo\CoreBundle\Controller; use Chamilo\CoreBundle\Block\BreadcrumbBlockService; use Chamilo\CoreBundle\Component\Utils\Glide; use Chamilo\CoreBundle\Repository\ResourceFactory; -use Knp\Menu\FactoryInterface as MenuFactoryInterface; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Contracts\Translation\TranslatorInterface; @@ -30,30 +29,4 @@ abstract class BaseController extends AbstractController return $services; } - - public function getResourceRepositoryFactory(): ResourceFactory - { - return $this->container->get('resource_factory'); - } - - public function getBreadCrumb(): BreadcrumbBlockService - { - return $this->container->get('breadcrumb'); - } - - /** - * @return MenuFactoryInterface - */ - public function getMenuFactory() - { - return $this->container->get('knp_menu.factory'); - } - - /** - * @return Glide - */ - public function getGlide() - { - return $this->container->get('glide'); - } } diff --git a/src/CoreBundle/Controller/ResourceApiController.php b/src/CoreBundle/Controller/ResourceApiController.php index 84a6f35412..57057c9c50 100644 --- a/src/CoreBundle/Controller/ResourceApiController.php +++ b/src/CoreBundle/Controller/ResourceApiController.php @@ -16,14 +16,17 @@ use Chamilo\CourseBundle\Controller\CourseControllerInterface; use Doctrine\ORM\QueryBuilder; use FOS\RestBundle\Controller\AbstractFOSRestController; use FOS\RestBundle\Controller\Annotations as Rest; +use FOS\RestBundle\Controller\Annotations\RouteResource; +use FOS\RestBundle\View\View; use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; use Symfony\Contracts\Translation\TranslatorInterface; /** * Class ResourceApiController. * - * @Route("/api/resources") + * @RouteResource("Resource2") */ class ResourceApiController extends AbstractFOSRestController implements CourseControllerInterface { @@ -42,23 +45,18 @@ class ResourceApiController extends AbstractFOSRestController implements CourseC return $services; } - public function getResourceRepositoryFactory(): ResourceFactory - { - return $this->container->get('resource_factory'); - } - /** * Route("/{tool}/{type}/{id}/list", name="chamilo_core_api_resource_list"). * - * @Rest\Get("/{tool}/{type}/{id}/list") - * - * If node has children show it + * @Rest\View(serializerGroups={"list"}) */ public function getResourcesAction(Request $request) { $repository = $this->getRepositoryFromRequest($request); $resourceNodeId = $request->get('id'); + var_dump($resourceNodeId); + exit; $parentNode = $repository->getResourceNodeRepository()->find($resourceNodeId); $course = $this->getCourse(); @@ -73,16 +71,13 @@ class ResourceApiController extends AbstractFOSRestController implements CourseC /** @var QueryBuilder $qb */ $qb = $repository->getResources($this->getUser(), $parentNode, $course, $session, null); - $resources = $qb->getQuery()->getResult(); - - return $this->handleView($this->view($resources)); + return $qb->getQuery()->getResult(); } /** - * Route("/{tool}/{type}/{id}", name="chamilo_core_api_resource"). - * - * @Rest\Get("/{tool}/{type}/{id}") + * Rest\Get("/{tool}/{type}/{id}"). * + * @Rest\View(serializerGroups={"list"}) */ public function getResourceAction(Request $request) { @@ -93,7 +88,9 @@ class ResourceApiController extends AbstractFOSRestController implements CourseC $resource = $repository->getResourceFromResourceNode($nodeId); $this->denyAccessUnlessValidResource($resource); + return $resource; - return $this->handleView($this->view($resource)); + return View::create($resource, Response::HTTP_CREATED); + //return $resource; } } diff --git a/src/CoreBundle/Controller/ResourceController.php b/src/CoreBundle/Controller/ResourceController.php index 553a960497..f714b1ca4a 100644 --- a/src/CoreBundle/Controller/ResourceController.php +++ b/src/CoreBundle/Controller/ResourceController.php @@ -449,78 +449,6 @@ class ResourceController extends AbstractResourceController implements CourseCon ); } - private function setBreadCrumb(Request $request) - { - $tool = $request->get('tool'); - $type = $request->get('type'); - $resourceNodeId = $request->get('id'); - $routeParams = $this->getResourceParams($request); - - if (!empty($resourceNodeId)) { - $breadcrumb = $this->getBreadCrumb(); - $toolParams = $routeParams; - $toolParams['id'] = null; - - // Root tool link - $breadcrumb->addChild( - $this->trans($tool), - [ - 'uri' => $this->generateUrl('chamilo_core_resource_index', $toolParams), - ] - ); - - $repo = $this->getRepositoryFromRequest($request); - $settings = $repo->getResourceSettings(); - - /** @var ResourceInterface $originalResource */ - $originalResource = $repo->findOneBy(['resourceNode' => $resourceNodeId]); - if (null === $originalResource) { - return; - } - $parent = $originalParent = $originalResource->getResourceNode(); - - $parentList = []; - while (null !== $parent) { - if ($type !== $parent->getResourceType()->getName()) { - break; - } - $parent = $parent->getParent(); - if ($parent) { - $resource = $repo->findOneBy(['resourceNode' => $parent->getId()]); - if ($resource) { - $parentList[] = $resource; - } - } - } - - $parentList = array_reverse($parentList); - /** @var ResourceInterface $item */ - foreach ($parentList as $item) { - $params = $routeParams; - $params['id'] = $item->getResourceNode()->getId(); - $breadcrumb->addChild( - $item->getResourceName(), - [ - 'uri' => $this->generateUrl('chamilo_core_resource_list', $params), - ] - ); - } - - $params = $routeParams; - $params['id'] = $originalParent->getId(); - if (false === $settings->isAllowNodeCreation() || $originalResource->getResourceNode()->hasResourceFile()) { - $breadcrumb->addChild($originalResource->getResourceName()); - } else { - $breadcrumb->addChild( - $originalResource->getResourceName(), - [ - 'uri' => $this->generateUrl('chamilo_core_resource_list', $params), - ] - ); - } - } - } - /** * @Route("/{tool}/{type}/{id}/new_folder", methods={"GET", "POST"}, name="chamilo_core_resource_new_folder") */ diff --git a/src/CoreBundle/Resources/config/repositories.yml b/src/CoreBundle/Resources/config/repositories.yml index 47c287e1f4..cccd8efbcb 100644 --- a/src/CoreBundle/Resources/config/repositories.yml +++ b/src/CoreBundle/Resources/config/repositories.yml @@ -4,7 +4,7 @@ services: public: true autoconfigure: true - Vich\UploaderBundle\Storage\FlysystemStorage: ~ + Vich\UploaderBundle\Storage\FlysystemStorage: ~ Chamilo\CoreBundle\Repository\ResourceFactory: ~ Chamilo\CoreBundle\Repository\ResourceNodeRepository: ~ diff --git a/src/CoreBundle/Traits/ControllerTrait.php b/src/CoreBundle/Traits/ControllerTrait.php index 888a781db1..125ac587c9 100644 --- a/src/CoreBundle/Traits/ControllerTrait.php +++ b/src/CoreBundle/Traits/ControllerTrait.php @@ -4,6 +4,8 @@ namespace Chamilo\CoreBundle\Traits; +use Chamilo\CoreBundle\Block\BreadcrumbBlockService; +use Knp\Menu\FactoryInterface as MenuFactoryInterface; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; use Symfony\Contracts\Translation\TranslatorInterface; @@ -18,6 +20,19 @@ trait ControllerTrait return $this->container->get('request_stack')->getCurrentRequest(); } + public function getBreadCrumb(): BreadcrumbBlockService + { + return $this->container->get('breadcrumb'); + } + + /** + * @return MenuFactoryInterface + */ + public function getMenuFactory() + { + return $this->container->get('knp_menu.factory'); + } + /** * @param string $message * diff --git a/src/CoreBundle/Traits/ResourceControllerTrait.php b/src/CoreBundle/Traits/ResourceControllerTrait.php index 144115ce67..5322c5e00a 100644 --- a/src/CoreBundle/Traits/ResourceControllerTrait.php +++ b/src/CoreBundle/Traits/ResourceControllerTrait.php @@ -4,8 +4,11 @@ namespace Chamilo\CoreBundle\Traits; +use Chamilo\CoreBundle\Component\Utils\Glide; use Chamilo\CoreBundle\Entity\Resource\AbstractResource; +use Chamilo\CoreBundle\Entity\Resource\ResourceInterface; use Chamilo\CoreBundle\Entity\Resource\ResourceNode; +use Chamilo\CoreBundle\Repository\ResourceFactory; use Chamilo\CoreBundle\Repository\ResourceRepository; use Chamilo\UserBundle\Entity\User; use Symfony\Component\HttpFoundation\Request; @@ -22,6 +25,19 @@ trait ResourceControllerTrait return $this->getRepository($tool, $type); } + public function getResourceRepositoryFactory(): ResourceFactory + { + return $this->container->get('resource_factory'); + } + + /** + * @return Glide + */ + public function getGlide() + { + return $this->container->get('glide'); + } + public function getRepository($tool, $type): ResourceRepository { return $this->getResourceRepositoryFactory()->createRepository($tool, $type); @@ -89,4 +105,76 @@ trait ResourceControllerTrait 'sid' => $sessionId, ]; } + + private function setBreadCrumb(Request $request) + { + $tool = $request->get('tool'); + $type = $request->get('type'); + $resourceNodeId = $request->get('id'); + $routeParams = $this->getResourceParams($request); + + if (!empty($resourceNodeId)) { + $breadcrumb = $this->getBreadCrumb(); + $toolParams = $routeParams; + $toolParams['id'] = null; + + // Root tool link + $breadcrumb->addChild( + $this->trans($tool), + [ + 'uri' => $this->generateUrl('chamilo_core_resource_index', $toolParams), + ] + ); + + $repo = $this->getRepositoryFromRequest($request); + $settings = $repo->getResourceSettings(); + + /** @var ResourceInterface $originalResource */ + $originalResource = $repo->findOneBy(['resourceNode' => $resourceNodeId]); + if (null === $originalResource) { + return; + } + $parent = $originalParent = $originalResource->getResourceNode(); + + $parentList = []; + while (null !== $parent) { + if ($type !== $parent->getResourceType()->getName()) { + break; + } + $parent = $parent->getParent(); + if ($parent) { + $resource = $repo->findOneBy(['resourceNode' => $parent->getId()]); + if ($resource) { + $parentList[] = $resource; + } + } + } + + $parentList = array_reverse($parentList); + /** @var ResourceInterface $item */ + foreach ($parentList as $item) { + $params = $routeParams; + $params['id'] = $item->getResourceNode()->getId(); + $breadcrumb->addChild( + $item->getResourceName(), + [ + 'uri' => $this->generateUrl('chamilo_core_resource_list', $params), + ] + ); + } + + $params = $routeParams; + $params['id'] = $originalParent->getId(); + if (false === $settings->isAllowNodeCreation() || $originalResource->getResourceNode()->hasResourceFile()) { + $breadcrumb->addChild($originalResource->getResourceName()); + } else { + $breadcrumb->addChild( + $originalResource->getResourceName(), + [ + 'uri' => $this->generateUrl('chamilo_core_resource_list', $params), + ] + ); + } + } + } } diff --git a/src/CourseBundle/Controller/ToolBaseController.php b/src/CourseBundle/Controller/ToolBaseController.php index 2a040a9f9a..e314e3b9cf 100644 --- a/src/CourseBundle/Controller/ToolBaseController.php +++ b/src/CourseBundle/Controller/ToolBaseController.php @@ -5,6 +5,7 @@ namespace Chamilo\CourseBundle\Controller; use Chamilo\CoreBundle\Controller\BaseController; +use Chamilo\CoreBundle\Traits\ControllerTrait; use Chamilo\CoreBundle\Traits\CourseControllerTrait; /** @@ -15,4 +16,5 @@ use Chamilo\CoreBundle\Traits\CourseControllerTrait; abstract class ToolBaseController extends BaseController implements CourseControllerInterface { use CourseControllerTrait; + use ControllerTrait; }