From e7dd5e003b4b0a5bd5cf8931e86b93d59c6fbe56 Mon Sep 17 00:00:00 2001 From: Julio Montoya Date: Sun, 3 Nov 2019 10:40:14 +0100 Subject: [PATCH] Add delete exercise category in grid --- main/exercise/category.php | 8 -- main/inc/lib/ExerciseCategoryManager.php | 86 +++++++++++++++---- .../Repository/ResourceRepository.php | 16 ++-- 3 files changed, 77 insertions(+), 33 deletions(-) diff --git a/main/exercise/category.php b/main/exercise/category.php index 63280223f3..b7141b95f0 100644 --- a/main/exercise/category.php +++ b/main/exercise/category.php @@ -79,14 +79,6 @@ switch ($action) { $content .= $form->returnForm(); } break; - case 'delete': - $res = $obj->delete($_GET['id']); - if ($res) { - Display::addFlash(Display::return_message(get_lang('Item deleted'), 'confirmation')); - } - header('Location: '.$url); - exit; - break; default: $content = $obj->display(); break; diff --git a/main/inc/lib/ExerciseCategoryManager.php b/main/inc/lib/ExerciseCategoryManager.php index 6be7ba8c1b..546ec90a41 100644 --- a/main/inc/lib/ExerciseCategoryManager.php +++ b/main/inc/lib/ExerciseCategoryManager.php @@ -1,9 +1,11 @@ hardDelete($category); } + /** + * @param $primaryKeys + * @param $allPrimaryKeys + * @param \Symfony\Component\HttpFoundation\Session\Session $session + * @param $parameters + */ + public function deleteResource( + $primaryKeys, + $allPrimaryKeys, + Symfony\Component\HttpFoundation\Session\Session $session, + $parameters + ) { + $repo = Container::getExerciseCategoryRepository(); + $translator = Container::getTranslator(); + foreach ($primaryKeys as $id) { + $category = $repo->find($id); + $repo->hardDelete($category); + } + + Display::addFlash(Display::return_message($translator->trans('Deleted'))); + header('Location:'. api_get_self().'?'.api_get_cidreq()); + exit; + } + /** * @param array $params * @param bool $showQuery @@ -234,13 +260,6 @@ JAVASCRIPT; } else { $form->addButtonCreate(get_lang('Add')); } - - /*if (!empty($defaults['created_at'])) { - $defaults['created_at'] = api_convert_and_format_date($defaults['created_at']); - } - if (!empty($defaults['updated_at'])) { - $defaults['updated_at'] = api_convert_and_format_date($defaults['updated_at']); - }*/ $form->setDefaults($defaults); // Setting the rules @@ -254,7 +273,7 @@ JAVASCRIPT; */ public function display() { - // action links + // Action links $content = '
'; $content .= ''; $content .= Display::return_icon( @@ -273,13 +292,19 @@ JAVASCRIPT; ); $content .= ''; $content .= '
'; - ///$grid = Container::$container->get('grid'); + + // 1. Set entity $source = new Entity('ChamiloCourseBundle:CExerciseCategory'); + // 2. Get query builder from repo. $qb = Container::getExerciseCategoryRepository()->getResourcesByCourse(api_get_course_entity()); + + // 3. Set QueryBuilder to the source. $source-> initQueryBuilder($qb); + // 4. Get the grid builder. $builder = Container::$container->get('apy_grid.factory'); + // 5. Set parameters and properties. $grid = $builder->createBuilder( 'grid', $source, @@ -298,17 +323,42 @@ JAVASCRIPT; 'primary' => 'true', ] )->add( - 'name', - 'text', - [ - 'title' => 'name', - ] - ); + 'name', + 'text', + [ + 'title' => 'name', + ] + )->add( + 'description', + 'text', + [ + 'title' => 'description', + ] + ); $grid = $grid->getGrid(); - $grid->setRouteUrl(api_get_self().'?cidReq=GEORGIA'); - $grid->handleRequest(Container::getRequest()); - $content .= Container::$container->get('twig')->render('@ChamiloTheme/Resource/grid.html.twig', array('grid' => $grid)); + + // 7. Add actions + if (Container::getAuthorizationChecker()->isGranted(ResourceNodeVoter::ROLE_CURRENT_COURSE_TEACHER)) { + $deleteMassAction = new MassAction( + 'Delete', + ['ExerciseCategoryManager', 'deleteResource'], + true, + [] + ); + $grid->addMassAction($deleteMassAction); + } + + // 8. Set route and request + $grid + ->setRouteUrl(api_get_self().'?'.api_get_cidreq()) + ->handleRequest(Container::getRequest()) + ; + + $content .= Container::$container->get('twig')->render( + '@ChamiloTheme/Resource/grid.html.twig', + ['grid' => $grid] + ); return $content; } diff --git a/src/CoreBundle/Repository/ResourceRepository.php b/src/CoreBundle/Repository/ResourceRepository.php index 48ac0f7acd..b468fc2734 100644 --- a/src/CoreBundle/Repository/ResourceRepository.php +++ b/src/CoreBundle/Repository/ResourceRepository.php @@ -18,6 +18,7 @@ use Chamilo\CourseBundle\Entity\CGroupInfo; use Chamilo\UserBundle\Entity\User; use Doctrine\ORM\EntityManager; use Doctrine\ORM\Query\Expr\Join; +use Doctrine\ORM\QueryBuilder; use League\Flysystem\FilesystemInterface; use League\Flysystem\MountManager; use Sylius\Bundle\ResourceBundle\Doctrine\ORM\EntityRepository; @@ -461,7 +462,7 @@ class ResourceRepository extends EntityRepository * @param Session|null $session * @param CGroupInfo|null $group * - * @return array + * @return QueryBuilder */ public function getResourcesByCourse(Course $course, Session $session = null, CGroupInfo $group = null) { @@ -474,17 +475,18 @@ class ResourceRepository extends EntityRepository ); $type = $this->getResourceType(); - $qb = $this->getEntityManager()->createQueryBuilder() + $qb = $repo->getEntityManager()->createQueryBuilder() ->select('resource') - ->from(ResourceNode::class, 'node') - ->innerJoin('node.resourceLinks', 'links') + ->from($className, 'resource') ->innerJoin( - $className, - 'resource', + ResourceNode::class, + 'node', Join::WITH, - 'resource.course = links.course AND resource.resourceNode = node.id' + 'resource.resourceNode = node.id' ) + ->innerJoin('node.resourceLinks', 'links') ->where('node.resourceType = :type') + ->andWhere('resource.course = links.course') ->andWhere('links.course = :course') //->where('link.cId = ?', $course->getId()) //->where('node.cId = 0')