src/Controller/Admin/CourseTeamController.php line 140

Open in your IDE?
  1. <?php
  2. namespace EADPlataforma\Controller\Admin;
  3. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Cache;
  4. use Symfony\Component\HttpFoundation\Request;
  5. use Symfony\Component\Routing\Annotation\Route;
  6. use EADPlataforma\Entity\CourseTeam;
  7. use EADPlataforma\Entity\Course;
  8. use EADPlataforma\Entity\LessonModule;
  9. use EADPlataforma\Entity\Lesson;
  10. use EADPlataforma\Entity\User;
  11. use EADPlataforma\Enum\CourseTeamEnum;
  12. use EADPlataforma\Enum\ErrorEnum;
  13. /**
  14.  * @Route(
  15.  *      path          = "/admin/course/team",
  16.  *      schemes         = {"http|https"}
  17.  * )
  18.  * @Cache(
  19.  *      maxage          = "0",
  20.  *      smaxage         = "0",
  21.  *      expires         = "now",
  22.  *      public          = false
  23.  * )
  24.  */
  25. class CourseTeamController extends AbstractController {
  26.     public function getEntityClass(){
  27.         return CourseTeam::class;
  28.     }
  29.     
  30.     /**
  31.      * @Route(
  32.      *      path          = "/list/paginate",
  33.      *      methods       = {"GET"}
  34.      * )
  35.      */
  36.     public function getCourseTeamPaginate(Request $request) {
  37.         $permission $this->userPermissionUtil->getPermission("course""course_team""see");
  38.         
  39.         if($this->userPermissionUtil->isLow($permission)){
  40.             return $this->eadResponse(nullErrorEnum::PERMISSION);
  41.         }
  42.         $this->requestUtil->setRequest($request)->setData();
  43.         $columns = [
  44.             "ct.id"
  45.             "ct.type",
  46.             "u.id AS userId",
  47.             "u.name",
  48.             "DATE_FORMAT(ct.dateDelete, '%Y-%m-%d %H:%i:%s') AS dateDelete",
  49.             "ud.name AS userDelete"
  50.         ];
  51.         $userClass User::class;
  52.         $joins = [
  53.             "{$userClass} AS u" => "u.id = ct.user AND u.deleted = 0",
  54.             "{$userClass} AS ud" => ["LEFT""ud.id = ct.userDelete"]
  55.         ];
  56.         $courseId $this->requestUtil->getField('course');
  57.         
  58.         $orderParam $this->requestUtil->getField('order');
  59.         $searchText $this->requestUtil->getField('searchText');
  60.         $limit $this->requestUtil->getField('limit');
  61.         $offset $this->requestUtil->getField('offset');
  62.         $filter = [];
  63.         $filterDelete $this->requestUtil->getDeletedParam();
  64.         $filter = [
  65.             "ct.course" => $courseId,
  66.         ];
  67.         if($this->userPermissionUtil->isMiddle($permission)){
  68.             $course $this->em->getRepository(Course::class)->findOneBy([
  69.                 "id" => $courseId,
  70.                 "deleted" => CourseTeamEnum::ITEM_NO_DELETED
  71.             ]);
  72.             if($course){
  73.                 $isInTeam $this->repository->userExistInCourseTeam($course$this->user);
  74.                 $filter[CourseTeamEnum::YES] = ( 
  75.                     $isInTeam CourseTeamEnum::YES CourseTeamEnum::No 
  76.                 );
  77.             }
  78.         }
  79.         $order = ["ct.id" => "ASC"];
  80.         if(!empty($orderParam)){
  81.             $order json_decode($orderParamtrue);
  82.         }
  83.         $data $this->repository->paginate(
  84.             "ct"
  85.             $searchText
  86.             $columns
  87.             $joins
  88.             $filter
  89.             $order
  90.             $limit
  91.             $offset
  92.             $filterDelete
  93.         );
  94.         $lessonRepository $this->em->getRepository(Lesson::class);
  95.         $lessonModuleRepository $this->em->getRepository(LessonModule::class);
  96.         foreach ($data['rows'] as $key => $item) {
  97.             $item = (object)$item;
  98.             $item->lessonNumber $lessonRepository->count([
  99.                 "deleted" => CourseTeamEnum::ITEM_NO_DELETED,
  100.                 "user" => $item->userId,
  101.                 "course" => $courseId,
  102.             ]);
  103.             $item->lessonModuleNumber $lessonModuleRepository->count([
  104.                 "deleted" => CourseTeamEnum::ITEM_NO_DELETED,
  105.                 "user" => $item->userId,
  106.                 "course" => $courseId,
  107.             ]);
  108.             $data['rows'][$key] = $item;
  109.         }
  110.         return $this->eadResponse($data);
  111.     }
  112.     /**
  113.      * @Route(
  114.      *      path          = "/list/all/{type}/{id}",
  115.      *      methods       = {"GET"},
  116.      *      requirements  = { "type": "\d+", "id": "\d+"}
  117.      * )
  118.      */
  119.     public function getCourseTeamAll(Request $request) {
  120.         $courseId $request->get('id');
  121.         $type $request->get('type');
  122.         $types = [ CourseTeamEnum::TEACHERCourseTeamEnum::TUTOR ];
  123.         if(!in_array($type$types)){
  124.             return $this->eadResponse(nullErrorEnum::NOT_FOUND);
  125.         }
  126.         $courseTeams $this->repository->findBy([
  127.             "course" => $courseId,
  128.             "type" => $type,
  129.             "deleted" => CourseTeamEnum::ITEM_NO_DELETED
  130.         ]);
  131.         $data = [];
  132.         foreach ($courseTeams as $key => $courseTeam) {
  133.             $data[] = $courseTeam->toReturn();
  134.         }
  135.         return $this->eadResponse($data);
  136.     }
  137.     /**
  138.      * @Route(
  139.      *      path          = "/detail/{id}",
  140.      *      methods       = {"GET"},
  141.      *      requirements  = {"id": "\d+"}
  142.      * )
  143.      */
  144.     public function getCourseTeam(Request $request) {
  145.         $permission $this->userPermissionUtil->getPermission("course""course_team""see");
  146.         
  147.         if($this->userPermissionUtil->isLow($permission)){
  148.             return $this->eadResponse(nullErrorEnum::PERMISSION);
  149.         }
  150.         $courseTeamId $request->get('id');
  151.         $courseTeam $this->repository->findOneBy([
  152.             "id" => $courseTeamId,
  153.             "deleted" => CourseTeamEnum::ITEM_NO_DELETED
  154.         ]);
  155.         if(!$courseTeam){
  156.             return $this->eadResponse(nullErrorEnum::NOT_FOUND);
  157.         }
  158.         $isInTeam $this->repository->userExistInCourseTeam($courseTeam->getCourse(), $this->user);
  159.         if(!$isInTeam && $this->userPermissionUtil->isMiddle($permission)){
  160.             return $this->eadResponse(nullErrorEnum::PERMISSION);
  161.         }
  162.         return $this->eadResponse($courseTeam->toReturn());
  163.     }
  164.     /**
  165.      * @Route(
  166.      *      path          = "/register",
  167.      *      methods       = {"POST"},
  168.      * )
  169.      */
  170.     public function registerCourseTeam(Request $request) {
  171.         $permission $this->userPermissionUtil->getPermission("course""course_team""create");
  172.         
  173.         if($this->userPermissionUtil->isLow($permission)){
  174.             return $this->eadResponse(nullErrorEnum::PERMISSION);
  175.         }
  176.         $this->requestUtil->setRequest($request)->setData();
  177.         $courseTeam = new CourseTeam();
  178.         if($this->requestUtil->issetField('type')){
  179.             $courseTeam->setType((int)$this->requestUtil->getField('type'));
  180.         }
  181.         if($this->requestUtil->issetField('user')){
  182.             $userId = (int)$this->requestUtil->getField('user');
  183.             if($userId 0){
  184.                 $user $this->em->getRepository(User::class)->findOneBy([
  185.                     "id" => $userId,
  186.                     "deleted" => CourseTeamEnum::ITEM_NO_DELETED
  187.                 ]);
  188.                 
  189.                 if($user){
  190.                     $courseTeam->setUser($user);
  191.                 }
  192.             }
  193.         }
  194.         if($this->requestUtil->issetField('course')){
  195.             $courseId = (int)$this->requestUtil->getField('course');
  196.             if($courseId 0){
  197.                 $course $this->em->getRepository(Course::class)->findOneBy([
  198.                     "id" => $courseId,
  199.                     "deleted" => CourseTeamEnum::ITEM_NO_DELETED
  200.                 ]);
  201.                 
  202.                 if($course){
  203.                     $courseTeam->setCourse($course);
  204.                 }
  205.             }
  206.         }
  207.         if($course){
  208.             $isInTeam $this->repository->userExistInCourseTeam($course$this->user);
  209.             if(!$isInTeam && $this->userPermissionUtil->isMiddle($permission)){
  210.                 return $this->eadResponse(nullErrorEnum::PERMISSION);
  211.             }
  212.         }
  213.         $courseTeamSave $this->repository->findOneBy([
  214.             "course" => $courseId
  215.             "user" => $userId,
  216.             "deleted" => CourseTeamEnum::ITEM_NO_DELETED
  217.         ]);
  218.         if ($courseTeamSave) {
  219.             return $this->eadResponse([ "message" => "User already in Course" ], ErrorEnum::ACTION_INVALID);
  220.         }
  221.         $errors $this->validateEntity($courseTeam);
  222.         
  223.         if($errors){
  224.             return $this->eadResponse($errorsErrorEnum::FIELD_EMPTY);
  225.         }
  226.         $this->em->persist($courseTeam);
  227.         $this->em->flush();
  228.         $return $courseTeam->toReturn();
  229.         $this->userLogService->logInsert("course_team"$courseTeam->getId(), $return);
  230.         return $this->eadResponse($return);
  231.     }
  232.     /**
  233.      * @Route(
  234.      *      path          = "/edit/{id}",
  235.      *      methods       = {"PUT"},
  236.      *      requirements  = { "id" = "\d+" }
  237.      * )
  238.      */
  239.     public function editCourseTeam(Request $request) {
  240.         $permission $this->userPermissionUtil->getPermission("course""course_team""edit");
  241.         
  242.         if($this->userPermissionUtil->isLow($permission)){
  243.             return $this->eadResponse(nullErrorEnum::PERMISSION);
  244.         }
  245.         $this->requestUtil->setRequest($request)->setData();
  246.         $courseTeamId $request->get('id');
  247.         $courseTeam $this->repository->findOneBy([
  248.             "id" => $courseTeamId,
  249.             "deleted" => CourseTeamEnum::ITEM_NO_DELETED
  250.         ]);
  251.         if (!$courseTeam) {
  252.             return $this->eadResponse(nullErrorEnum::NOT_FOUND);
  253.         }
  254.         $isInTeam $this->repository->userExistInCourseTeam($courseTeam->getCourse(), $this->user);
  255.         if(!$isInTeam && $this->userPermissionUtil->isMiddle($permission)){
  256.             return $this->eadResponse(nullErrorEnum::PERMISSION);
  257.         }
  258.            $type $this->requestUtil->getField('type');
  259.            $courseTeam->setType($type);
  260.         $errors $this->validateEntity($courseTeam);
  261.         
  262.         if($errors){
  263.             return $this->eadResponse($errorsErrorEnum::FIELD_EMPTY);
  264.         }
  265.         
  266.         $this->em->flush();
  267.         $return $courseTeam->toReturn();
  268.         $this->userLogService->logUpdate("course_team"$courseTeam->getId(), $return);
  269.         return $this->eadResponse($return);
  270.     }
  271. }