src/Controller/Admin/LessonModuleController.php line 322

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\LessonModule;
  7. use EADPlataforma\Entity\User;
  8. use EADPlataforma\Entity\Course;
  9. use EADPlataforma\Entity\CourseTeam;
  10. use EADPlataforma\Entity\Lesson;
  11. use EADPlataforma\Entity\Exam;
  12. use EADPlataforma\Enum\ExamEnum;
  13. use EADPlataforma\Enum\CourseEnum;
  14. use EADPlataforma\Enum\LessonEnum;
  15. use EADPlataforma\Enum\LessonModuleEnum;
  16. use EADPlataforma\Enum\ErrorEnum;
  17. use EADPlataforma\Util\StringUtil;
  18. /**
  19.  * @Route(
  20.  *      path          = "/admin/lesson/module",
  21.  *      schemes         = {"http|https"}
  22.  * )
  23.  * @Cache(
  24.  *      maxage          = "0",
  25.  *      smaxage         = "0",
  26.  *      expires         = "now",
  27.  *      public          = false
  28.  * )
  29.  */
  30. class LessonModuleController extends AbstractController {
  31.     public function getEntityClass(){
  32.         return LessonModule::class;
  33.     }
  34.     /**
  35.      * @Route(
  36.      *      path          = "/list/paginate",
  37.      *      methods       = {"GET"}
  38.      * )
  39.      */
  40.     public function getLessonModulePaginate(Request $request) {
  41.         $permission $this->userPermissionUtil->getPermission("course""lesson_module""see");
  42.         if($this->userPermissionUtil->isLow($permission)){
  43.             return $this->eadResponse(nullErrorEnum::PERMISSION);
  44.         }
  45.         $this->requestUtil->setRequest($request)->setData();
  46.         $userClass User::class;
  47.         $courseClass Course::class;
  48.         $courseTeamClass CourseTeam::class;
  49.         $userOnId $this->user->getId();
  50.         $columns = [
  51.             "lm.id",
  52.             "lm.workload",
  53.             "lm.status"
  54.             "lm.order",
  55.             "u.name AS userName",
  56.             "lm.title"
  57.         ];
  58.         $columnNotUseInFilter = [
  59.             "(CASE WHEN c.id IN ( 
  60.                 SELECT
  61.                    IDENTITY(ct.course)
  62.                 FROM {$courseTeamClass} AS ct 
  63.                 WHERE ct.deleted = 0 
  64.                 AND ct.user = {$userOnId}
  65.             ) THEN 1 ELSE 0 END ) AS isInTeam "
  66.         ];
  67.     
  68.         $joins = [
  69.             "{$userClass} AS u" => "u.id = lm.user",
  70.             "{$courseClass} AS c" => "c.id = lm.course AND c.deleted = 0"
  71.         ];
  72.         $courseId = (int)$this->requestUtil->getField('course');
  73.         $status $this->requestUtil->getField('status');
  74.         $userId = (int)$this->requestUtil->getField('user');
  75.         $orderParam $this->requestUtil->getField('order');
  76.         $searchText $this->requestUtil->getField('searchText');
  77.         $limit $this->requestUtil->getField('limit');
  78.         $offset $this->requestUtil->getField('offset');
  79.         $filter = [];
  80.         $filterDelete $this->requestUtil->getDeletedParam();
  81.         if($this->userPermissionUtil->isMiddle($permission)){
  82.             $userOnId $this->user->getId();
  83.             $filter["whereText"] = " ( c.user = {$userOnId} OR lm.user = {$userOnId} ) ";
  84.         }
  85.         if(!is_null($status)){
  86.             $filter["lm.status"] = $status;
  87.         }
  88.         if($courseId 0){
  89.             $filter["lm.course"] = $courseId;
  90.         }
  91.         if($userId 0){
  92.             $filter["lm.user"] = $userId;
  93.         }
  94.         
  95.         $order = ["lm.order" => "ASC"];
  96.         if(!empty($orderParam)){
  97.             $order json_decode($orderParamtrue);
  98.         }
  99.         $data $this->repository->paginate(
  100.             "lm"
  101.             $searchText
  102.             $columns
  103.             $joins
  104.             $filter
  105.             $order
  106.             $limit
  107.             $offset
  108.             $filterDelete,
  109.             false,
  110.             $columnNotUseInFilter
  111.         );
  112.         $examRepository $this->em->getRepository(Exam::class);
  113.         foreach ($data["rows"] as $key => $item) {
  114.             $item = (object)$item;
  115.             $item->title StringUtil::fromUnicode($item->title);
  116.             $item->hasExam $examRepository->count([
  117.                 "deleted" => ExamEnum::ITEM_NO_DELETED,
  118.                 "type" => ExamEnum::MODULE,
  119.                 "lessonModule" => $item->id,
  120.             ]);
  121.             $data["rows"][$key] = $item;
  122.         }
  123.         return $this->eadResponse($data);
  124.     }
  125.     /**
  126.      * @Route(
  127.      *      path          = "/list/trash/paginate",
  128.      *      methods       = {"GET"}
  129.      * )
  130.      */
  131.     public function getLessonModuleTrashPaginate(Request $request) {
  132.         $permission $this->userPermissionUtil->getPermission("course""lesson_module""see");
  133.         if($this->userPermissionUtil->isLow($permission)){
  134.             return $this->eadResponse(nullErrorEnum::PERMISSION);
  135.         }
  136.         $this->requestUtil->setRequest($request)->setData();
  137.         $columns = [
  138.             "lm.id",
  139.             "lm.workload",
  140.             "lm.status"
  141.             "lm.order",
  142.             "u.name AS userName",
  143.             "lm.title",
  144.             "DATE_FORMAT(lm.dateDelete, '%Y-%m-%d %H:%i:%s') AS dateDelete",
  145.             "ud.name AS userDelete"
  146.         ];
  147.         
  148.         $userClass User::class;
  149.         $courseClass Course::class;
  150.     
  151.         $joins = [
  152.             "{$userClass} AS u" => "u.id = lm.user",
  153.             "{$userClass} AS ud" => [ "LEFT""ud.id = lm.userDelete" ],
  154.             "{$courseClass} AS c" => "c.id = lm.course AND c.deleted = 0"
  155.         ];
  156.   
  157.         $status $this->requestUtil->getField('status');
  158.         $orderParam $this->requestUtil->getField('order');
  159.         $searchText $this->requestUtil->getField('searchText');
  160.         $limit $this->requestUtil->getField('limit');
  161.         $offset $this->requestUtil->getField('offset');
  162.         $filter = [];
  163.         $filterDelete LessonModuleEnum::ITEM_ON_TRASH;
  164.         if($this->userPermissionUtil->isMiddle($permission)){
  165.             $userOnId $this->user->getId();
  166.             $filter["whereText"] = " ( c.user = {$userOnId} OR lm.user = {$userOnId} ) ";
  167.         }
  168.         if(!is_null($status)){
  169.             $filter["lm.status"] = $status;
  170.         }
  171.         
  172.         $order = ["lm.order" => "ASC"];
  173.         if(!empty($orderParam)){
  174.             $order json_decode($orderParamtrue);
  175.         }
  176.         $data $this->repository->paginate(
  177.             "lm"
  178.             $searchText
  179.             $columns
  180.             $joins
  181.             $filter
  182.             $order
  183.             $limit
  184.             $offset
  185.             $filterDelete
  186.         );
  187.         return $this->eadResponse($data);
  188.     }
  189.     /**
  190.      * @Route(
  191.      *      path          = "/list/all/{courseId}",
  192.      *      methods       = {"GET"},
  193.      *      requirements  = { "courseId" = "\d+" }
  194.      * )
  195.      */
  196.     public function getLessonModuleAll(Request $request) {
  197.         $permission $this->userPermissionUtil->getPermission("course""lesson""see");
  198.         if($this->userPermissionUtil->isLow($permission)){
  199.             return $this->eadResponse(nullErrorEnum::PERMISSION);
  200.         }
  201.         
  202.         $courseId $request->get('courseId');
  203.         $filter = [
  204.             "course" => $courseId,
  205.             "deleted" => LessonModuleEnum::ITEM_NO_DELETED
  206.         ];
  207.         if($this->userPermissionUtil->isMiddle($permission)){
  208.             $filter['user'] = $this->user->getId();
  209.         }
  210.         $lessonModules $this->repository->findBy($filter, [ "course" => "ASC""id" => "ASC" ]);
  211.         $data = [];
  212.         foreach ($lessonModules as $key => $lessonModule) {
  213.             $data[] = $lessonModule->toReturn();
  214.         }
  215.         return $this->eadResponse($data);
  216.     }
  217.     /**
  218.      * @Route(
  219.      *      path          = "/check/user/{id}",
  220.      *      methods       = {"GET"},
  221.      *      requirements  = { "id" = "\d+" }
  222.      * )
  223.      */
  224.     public function checkIsInLessonModule(Request $request){
  225.         $lessonModuleId $request->get('id');
  226.         $lessonModule $this->repository->findOneBy([
  227.             "course" => $lessonModuleId,
  228.             "deleted" => LessonModuleEnum::ITEM_NO_DELETED
  229.         ]);
  230.         
  231.         if (!$lessonModule) {
  232.             return $this->eadResponse(nullErrorEnum::NOT_FOUND);
  233.         }
  234.         $isLessonModuleTeacher $this->repository->isLessonModuleTeacher(
  235.             $lessonModule
  236.             $this->user
  237.         );
  238.         return $this->eadResponse([ "is" => ( $isLessonModuleTeacher ) ]);
  239.     }
  240.     /**
  241.      * @Route(
  242.      *      path          = "/detail/{id}",
  243.      *      methods       = {"GET"},
  244.      *      requirements  = { "id" = "\d+" }
  245.      * )
  246.      */
  247.     public function getLessonModule(Request $request) {
  248.         $permission $this->userPermissionUtil->getPermission("course""lesson_module""see");
  249.         
  250.         if($this->userPermissionUtil->isLow($permission)){
  251.             return $this->eadResponse(nullErrorEnum::PERMISSION);
  252.         }
  253.         $lessonModuleId $request->get('id');
  254.         $lessonModule $this->repository->findOneBy([
  255.             "id" => $lessonModuleId,
  256.             "deleted" => LessonModuleEnum::ITEM_NO_DELETED
  257.         ]);
  258.         
  259.         if (!$lessonModule) {
  260.             return $this->eadResponse(nullErrorEnum::NOT_FOUND);
  261.         }
  262.         $isLessonModuleTeacher $this->repository->isLessonModuleTeacher(
  263.             $lessonModule
  264.             $this->user
  265.         );
  266.         if(!$isLessonModuleTeacher && $this->userPermissionUtil->isMiddle($permission)){
  267.             return $this->eadResponse(nullErrorEnum::PERMISSION);
  268.         }
  269.         
  270.         return $this->eadResponse($lessonModule->toReturn());
  271.     }
  272.     /**
  273.      * @Route(
  274.      *      path          = "/register",
  275.      *      methods       = {"POST"},
  276.      * )
  277.      */
  278.     public function registerLessonModule(Request $request) {
  279.         $permission $this->userPermissionUtil->getPermission(
  280.             "course"
  281.             "lesson_module"
  282.             "create"
  283.         );
  284.         if($this->userPermissionUtil->isLow($permission)){
  285.             return $this->eadResponse(nullErrorEnum::PERMISSION);
  286.         }
  287.         $this->requestUtil->setRequest($request)->setData();
  288.         $lessonModule = new LessonModule();
  289.         if($this->requestUtil->issetField('title')){
  290.             $lessonModule->setTitle($this->requestUtil->getField("title"));
  291.         }
  292.         if($this->requestUtil->issetField('workload')){
  293.             $lessonModule->setWorkload($this->requestUtil->getField("workload"));
  294.         }
  295.         if($this->requestUtil->issetField('status')){
  296.             $lessonModule->setStatus((int)$this->requestUtil->getField('status'));
  297.         }
  298.         if($this->requestUtil->issetField('description')){
  299.             $lessonModule->setDescription($this->requestUtil->getField("description"));
  300.         }
  301.         $userId = (int)$this->requestUtil->getField('user');
  302.         $courseId = (int)$this->requestUtil->getField('course');
  303.         if($this->requestUtil->issetField('user')){
  304.             if($userId && $this->userPermissionUtil->isHigh($permission)){
  305.                 $user $this->em->getRepository(User::class)->findOneBy([
  306.                     "id" => $userId,
  307.                     "deleted" => LessonModuleEnum::ITEM_NO_DELETED
  308.                 ]);
  309.                 
  310.                 if($user){
  311.                     $lessonModule->setUser($user);
  312.                 }
  313.             }else{
  314.                 $lessonModule->setUser($this->user);
  315.             }
  316.             
  317.         }else{
  318.             $lessonModule->setUser($this->user);
  319.         }
  320.         if($this->requestUtil->issetField('course')){
  321.             if($courseId 0){
  322.                 $course $this->em->getRepository(Course::class)->findOneBy([
  323.                     "id" => $courseId,
  324.                     "deleted" => LessonModuleEnum::ITEM_NO_DELETED
  325.                 ]);
  326.                 
  327.                 if($course){
  328.                     $lessonModule->setCourse($course);
  329.                 }
  330.             }
  331.         }
  332.         $order $lessonModule->getOrder();
  333.         $lastOrder $this->repository->count([ 
  334.             "deleted" => LessonModuleEnum::ITEM_NO_DELETED 
  335.             "course" => $courseId]
  336.         ) + 1;
  337.         
  338.         if(empty($order) || $order $lastOrder){
  339.             $lessonModule->setOrder($lastOrder);
  340.             $order $lastOrder;
  341.         }
  342.         $errors $this->validateEntity($lessonModule);
  343.         
  344.         if($errors){
  345.             return $this->eadResponse($errorsErrorEnum::FIELD_EMPTY);
  346.         }
  347.         $isLessonModuleTeacher $this->repository->isLessonModuleTeacher(
  348.             $lessonModule
  349.             $this->user
  350.         );
  351.         
  352.         if(!$isLessonModuleTeacher && $this->userPermissionUtil->isMiddle($permission)){
  353.             return $this->eadResponse(nullErrorEnum::PERMISSION);
  354.         }
  355.         
  356.         $this->repository->refreshOrder(null$order$courseId);
  357.         $course $lessonModule->getCourse();
  358.         $course->setDateUpdate(date('Y-m-d H:i:s'));
  359.         $this->em->persist($lessonModule);
  360.         $this->em->flush();
  361.         $this->em->getRepository(Course::class)->addNumberLesson($course);
  362.         $return $lessonModule->toReturn();
  363.         $this->userLogService->logInsert("lesson_module"$lessonModule->getId(), $return);
  364.         return $this->eadResponse($return);
  365.     }
  366.     /**
  367.      * @Route(
  368.      *      path          = "/edit/{id}",
  369.      *      methods       = {"PUT"},
  370.      *      requirements  = { "id" = "\d+" }
  371.      * )
  372.      */
  373.     public function editLessonModule(Request $request) {
  374.         $permission $this->userPermissionUtil->getPermission("course""lesson_module""edit");
  375.        
  376.         if($this->userPermissionUtil->isLow($permission)){
  377.             return $this->eadResponse(nullErrorEnum::PERMISSION);
  378.         }
  379.         $this->requestUtil->setRequest($request)->setData();
  380.         $lessonModuleId $request->get('id');
  381.         
  382.         $lessonModule $this->repository->findOneBy([
  383.             "id" => $lessonModuleId,
  384.             "deleted" => LessonModuleEnum::ITEM_NO_DELETED
  385.         ]);
  386.         if (!$lessonModule) {
  387.             return $this->eadResponse(nullErrorEnum::NOT_FOUND);
  388.         }
  389.         $oldOrder $lessonModule->getOrder();
  390.         if($this->requestUtil->issetField('order')){
  391.             $lessonModule->setOrder((int)$this->requestUtil->getField('order'));
  392.         }
  393.         if($this->requestUtil->issetField('title')){
  394.             $lessonModule->setTitle($this->requestUtil->getField("title"));
  395.         }
  396.         if($this->requestUtil->issetField('workload')){
  397.             $lessonModule->setWorkload($this->requestUtil->getField("workload"));
  398.         }
  399.         if($this->requestUtil->issetField('status')){
  400.             $lessonModule->setStatus((int)$this->requestUtil->getField('status'));
  401.         }
  402.         if($this->requestUtil->issetField('description')){
  403.             $lessonModule->setDescription($this->requestUtil->getField("description"));
  404.         }
  405.         $userId = (int)$this->requestUtil->getField('user');
  406.         $courseId $lessonModule->getCourse()->getId();
  407.         if($this->requestUtil->issetField('user')){
  408.             if($userId && $this->userPermissionUtil->isHigh($permission)){
  409.                 $user $this->em->getRepository(User::class)->findOneBy([
  410.                     "id" => $userId,
  411.                     "deleted" => LessonModuleEnum::ITEM_NO_DELETED
  412.                 ]);
  413.                 
  414.                 if($user){
  415.                     $lessonModule->setUser($user);
  416.                 }
  417.             }
  418.         }
  419.         if($this->requestUtil->issetField('course')){
  420.             if($courseId 0){
  421.                 $course $this->em->getRepository(Course::class)->findOneBy([
  422.                     "id" => $courseId,
  423.                     "deleted" => LessonModuleEnum::ITEM_NO_DELETED
  424.                 ]);
  425.                 
  426.                 if($course){
  427.                     $lessonModule->setCourse($course);
  428.                 }
  429.             }
  430.         }
  431.         $lastOrder $this->repository->count([ 
  432.             "deleted" => LessonModuleEnum::ITEM_NO_DELETED
  433.             "course" => $courseId
  434.         ]);
  435.         $newOrder $lessonModule->getOrder();
  436.         
  437.         if(empty($newOrder) || $newOrder $lastOrder){
  438.             $lessonModule->setOrder($lastOrder);
  439.             $newOrder $lastOrder;
  440.         }
  441.         if($lessonModule->getStatus() == LessonModuleEnum::DRAFT){
  442.             $lessonModule->setOrder($lastOrder);
  443.             $newOrder $lastOrder;
  444.         }
  445.         $errors $this->validateEntity($lessonModule);
  446.         
  447.         if($errors){
  448.             return $this->eadResponse($errorsErrorEnum::FIELD_EMPTY);
  449.         }
  450.         $isLessonModuleTeacher $this->repository->isLessonModuleTeacher(
  451.             $lessonModule
  452.             $this->user
  453.         );
  454.         
  455.         if(!$isLessonModuleTeacher && $this->userPermissionUtil->isMiddle($permission)){
  456.             return $this->eadResponse(nullErrorEnum::PERMISSION);
  457.         }
  458.        
  459.         if($oldOrder != $newOrder){
  460.             $this->repository->refreshOrder($oldOrder$newOrder$courseId);
  461.         }
  462.         $course $lessonModule->getCourse();
  463.         $course->setDateUpdate(date('Y-m-d H:i:s'));
  464.         $this->em->flush();
  465.         $this->em->getRepository(Course::class)->addNumberLesson($course);
  466.         $data $lessonModule->toReturn();
  467.         $this->userLogService->logUpdate("lesson_module"$lessonModule->getId(), $data);
  468.         return $this->eadResponse($data);
  469.     }
  470.     /**
  471.      * @Route(
  472.      *      path          = "/edit/control/{id}",
  473.      *      methods       = {"PUT"},
  474.      *      requirements  = { "id" = "\d+" }
  475.      * )
  476.      */
  477.     public function editLessonModuleControl(Request $request) {
  478.         
  479.         $permission $this->userPermissionUtil->getPermission(
  480.             "course"
  481.             "lesson_module"
  482.             "access_control"
  483.         );
  484.         if($this->userPermissionUtil->isLow($permission)){
  485.             return $this->eadResponse(nullErrorEnum::PERMISSION);
  486.         }
  487.         $this->requestUtil->setRequest($request)->setData();
  488.         $lessonModuleId $request->get('id');
  489.         $lessonModule $this->repository->findOneBy([
  490.             "id" => $lessonModuleId,
  491.             "deleted" => LessonModuleEnum::ITEM_NO_DELETED
  492.         ]);
  493.         if (!$lessonModule) {
  494.             return $this->eadResponse(nullErrorEnum::NOT_FOUND);
  495.         }
  496.         
  497.         if($this->requestUtil->issetField('controlRequirement')){
  498.             $lessonModule->setControlRequirement((int)$this->requestUtil->getField("controlRequirement"));
  499.         }
  500.         if($this->requestUtil->issetField('controlReleaseType')){
  501.             $lessonModule->setControlReleaseType((int)$this->requestUtil->getField("controlReleaseType"));
  502.         }
  503.         if($this->requestUtil->issetField('controlReleaseAfterType')){
  504.             $lessonModule->setControlReleaseAfterType(
  505.                 (int)$this->requestUtil->getField("controlReleaseAfterType")
  506.             );
  507.         }
  508.         if($this->requestUtil->issetField('controlDateRelease')){
  509.             $lessonModule->setControlDateRelease($this->requestUtil->getField("controlDateRelease"));
  510.         }
  511.         if($this->requestUtil->issetField('controlReleasePeriod')){
  512.             $lessonModule->setControlReleasePeriod(
  513.                 (int)$this->requestUtil->getField("controlReleasePeriod")
  514.             );
  515.         }
  516.         if($this->requestUtil->issetField('controlClosePeriod')){
  517.             $lessonModule->setControlClosePeriod((int)$this->requestUtil->getField("controlClosePeriod"));
  518.         }
  519.       
  520.         $groupsValidation = [];
  521.         if($lessonModule->getControlReleaseType() == LessonModuleEnum::FIXED_DATE){
  522.             $groupsValidation[] = "lssonControlReleaseTypeFixed";
  523.         }else if($lessonModule->getControlReleaseType() == LessonModuleEnum::FLEXIBLE_DATE){
  524.             $groupsValidation[] = "lssonControlReleaseTypeFlex";
  525.         }
  526.         
  527.         $errors $this->validateEntity($lessonModule$groupsValidation);
  528.         if($errors){
  529.             return $this->eadResponse($errorsErrorEnum::FIELD_EMPTY);
  530.         }
  531.         $course $lessonModule->getCourse();
  532.         $course->setDateUpdate(date('Y-m-d H:i:s'));
  533.         $this->em->flush();
  534.         $data $lessonModule->toReturn();
  535.         $this->userLogService->logUpdate("lessonModule"$lessonModule->getId(), $data);
  536.         return $this->eadResponse($data);
  537.     }
  538.     /**
  539.      * @Route(
  540.      *      path          = "/edit/many/control",
  541.      *      methods       = {"PUT"}
  542.      * )
  543.     */
  544.     public function editLessonControlMany(Request $request) {
  545.         
  546.         $permission $this->userPermissionUtil->getPermission(
  547.             "course"
  548.             "lesson_module",
  549.             "access_control"
  550.         );
  551.         if($this->userPermissionUtil->isLow($permission)){
  552.             return $this->eadResponse(nullErrorEnum::PERMISSION);
  553.         }
  554.        
  555.         $this->requestUtil->setRequest($request)->setData();
  556.         $lessonModuleId $this->requestUtil->getField('ids');
  557.         if(empty($lessonModuleId)){
  558.             return $this->eadResponse(nullErrorEnum::ACTION_INVALID);
  559.         };
  560.         
  561.         $lessonModuleId json_decode($lessonModuleId);
  562.         
  563.         foreach ($lessonModuleId as $key => $id) {
  564.             $lessonModule $this->repository->findOneBy([
  565.                 "id" => $id,
  566.                 "deleted" => LessonModuleEnum::ITEM_NO_DELETED
  567.             ]);
  568.         
  569.             if($lessonModule) { 
  570.                 if($this->requestUtil->issetField('controlRequirement')){
  571.                     $lessonModule->setControlRequirement((int)$this->requestUtil->getField("controlRequirement"));
  572.                 }
  573.         
  574.                 if($this->requestUtil->issetField('controlReleaseType')){
  575.                     $lessonModule->setControlReleaseType((int)$this->requestUtil->getField("controlReleaseType"));
  576.                 }
  577.         
  578.                 if($this->requestUtil->issetField('controlReleaseAfterType')){
  579.                     $lessonModule->setControlReleaseAfterType(
  580.                         (int)$this->requestUtil->getField("controlReleaseAfterType")
  581.                     );
  582.                 }
  583.         
  584.                 if($this->requestUtil->issetField('controlDateRelease')){
  585.                     $lessonModule->setControlDateRelease(
  586.                         $this->requestUtil->getField("controlDateRelease")
  587.                     );
  588.                 }
  589.         
  590.                 if($this->requestUtil->issetField('controlReleasePeriod')){
  591.                     $lessonModule->setControlReleasePeriod(
  592.                         (int)$this->requestUtil->getField("controlReleasePeriod")
  593.                     );
  594.                 }
  595.         
  596.                 if($this->requestUtil->issetField('controlClosePeriod')){
  597.                     $lessonModule->setControlClosePeriod(
  598.                         (int)$this->requestUtil->getField("controlClosePeriod")
  599.                     );
  600.                 }
  601.         
  602.                 $groupsValidation = [];
  603.                 if($lessonModule->getControlReleaseType() == LessonModuleEnum::FIXED_DATE){
  604.                     $groupsValidation[] = "lssonControlReleaseTypeFixed";
  605.                 }else if($lessonModule->getControlReleaseType() == LessonModuleEnum::FLEXIBLE_DATE){
  606.                     $groupsValidation[] = "lssonControlReleaseTypeFlex";
  607.                 }
  608.                 $errors $this->validateEntity($lessonModule$groupsValidation);
  609.                 if(!$errors){
  610.                     $course $lessonModule->getCourse();
  611.                     $course->setDateUpdate(date('Y-m-d H:i:s'));
  612.                     $this->em->flush();
  613.                 
  614.                     $data $lessonModule->toReturn();
  615.                     $this->userLogService->logUpdate(
  616.                         "lessonModule"
  617.                         $lessonModule->getId(), 
  618.                         $data
  619.                     );
  620.                 }
  621.             }
  622.         }
  623.         return $this->eadResponse([ "message" => "Success" ]);
  624.     }
  625.     /**
  626.      * @Route(
  627.      *      path          = "/edit/many/status",
  628.      *      methods       = {"PUT"}
  629.      * )
  630.      */
  631.     public function editManyStatusLessonModule(Request $request) {
  632.         $permission $this->userPermissionUtil->getPermission(
  633.             "course"
  634.             "lesson_module"
  635.             "edit"
  636.         );
  637.         if($this->userPermissionUtil->isLow($permission)){
  638.             return $this->eadResponse(nullErrorEnum::PERMISSION);
  639.         }
  640.         $this->requestUtil->setRequest($request)->setData();
  641.         $lessonModuleId $this->requestUtil->getField('lessonModules');
  642.         if(empty($lessonModuleId)){
  643.             return $this->eadResponse(nullErrorEnum::ACTION_INVALID);
  644.         };
  645.         $lessonModuleId json_decode($lessonModuleId);
  646.         foreach ($lessonModuleId as $key => $id) {
  647.             $lessonModule $this->repository->findOneBy([
  648.                 "id" => $id,
  649.                 "deleted" => LessonModuleEnum::ITEM_NO_DELETED
  650.             ]);
  651.         
  652.             if($lessonModule) {
  653.                 $isLessonModuleTeacher $this->repository->isLessonModuleTeacher(
  654.                     $lessonModule
  655.                     $this->user
  656.                 );
  657.                 if(($isLessonModuleTeacher && $this->userPermissionUtil->isMiddle($permission)) ||
  658.                     $this->userPermissionUtil->isHigh($permission)){
  659.                     if($this->requestUtil->issetField('status')){
  660.                         $lessonModule->setStatus((int)$this->requestUtil->getField('status'));
  661.                     }
  662.                     $errors $this->validateEntity($lessonModule);
  663.                     if(!$errors){
  664.                         $this->em->flush();
  665.                     
  666.                         $data $lessonModule->toReturn();
  667.                         $this->userLogService->logUpdate(
  668.                             "lesson_module"
  669.                             $lessonModule->getId(), 
  670.                             $data
  671.                         );
  672.                     }
  673.                 }
  674.             }
  675.         }
  676.         return $this->eadResponse([ "message" => "Success" ]);
  677.     }
  678.     /**
  679.      * @Route(
  680.      *      path          = "/edit/many/teacher",
  681.      *      methods       = {"PUT"}
  682.      * )
  683.      */
  684.     public function editManyTeacherLessonModule(Request $request) {
  685.         $permission $this->userPermissionUtil->getPermission(
  686.             "course"
  687.             "lesson_module"
  688.             "edit"
  689.         );
  690.         if($this->userPermissionUtil->isLow($permission)){
  691.             return $this->eadResponse(nullErrorEnum::PERMISSION);
  692.         }
  693.         $this->requestUtil->setRequest($request)->setData();
  694.         $lessonModuleId $this->requestUtil->getField('lessonModules');
  695.         if(empty($lessonModuleId)){
  696.             return $this->eadResponse(nullErrorEnum::ACTION_INVALID);
  697.         };
  698.         $lessonModuleId json_decode($lessonModuleId);
  699.         foreach ($lessonModuleId as $key => $id) {
  700.             $lessonModule $this->repository->findOneBy([
  701.                 "id" => $id,
  702.                 "deleted" => LessonModuleEnum::ITEM_NO_DELETED
  703.             ]);
  704.             if($lessonModule) {
  705.                 $isLessonModuleTeacher $this->repository->isLessonModuleTeacher(
  706.                     $lessonModule
  707.                     $this->user
  708.                 );
  709.                 if(($isLessonModuleTeacher && $this->userPermissionUtil->isMiddle($permission)) ||
  710.                     $this->userPermissionUtil->isHigh($permission)){
  711.                     $userId $this->requestUtil->getField('user');
  712.                     if($userId 0){
  713.                         $user $this->em->getRepository(User::class)->findOneBy([
  714.                             "id" => $userId,
  715.                             "deleted" => LessonModuleEnum::ITEM_NO_DELETED
  716.                         ]);
  717.     
  718.                         if(!$user){
  719.                             return $this->eadResponse(nullErrorEnum::NOT_FOUND);
  720.                         }
  721.     
  722.                         $lessonModule->setUser($user);
  723.                     }
  724.                     $errors $this->validateEntity($lessonModule);
  725.                     if(!$errors){
  726.                         $this->em->flush();
  727.                 
  728.                         $data $lessonModule->toReturn();
  729.                         $this->userLogService->logUpdate(
  730.                             "lesson_module"
  731.                             $lessonModule->getId(), 
  732.                             $data
  733.                         );
  734.                     }
  735.                 }
  736.             }
  737.         }
  738.         return $this->eadResponse([ "message" => "Success" ]);
  739.     }
  740.     /**
  741.      * @Route(
  742.      *      path          = "/copy/{id}",
  743.      *      methods       = {"COPY"},
  744.      *      requirements  = { "id" = "\d+"}
  745.      * )
  746.      */
  747.     public function copyLessonModule(Request $request) {
  748.         if(!$this->configuration->checkModuleIsAbleOnPlan('copyFunction')){
  749.             return $this->eadResponse(nullErrorEnum::ACTION_INVALID);
  750.         }
  751.         
  752.         $permission $this->userPermissionUtil->getPermission("course""lesson_module""copy");
  753.         if($this->userPermissionUtil->isLow($permission)){
  754.             return $this->eadResponse(nullErrorEnum::PERMISSION);
  755.         }
  756.         $this->requestUtil->setRequest($request)->setData();
  757.         $courseId $request->get('id');
  758.         $moduleIds $this->requestUtil->getField('module');
  759.         $copyType $this->requestUtil->getField('copyType');
  760.         $course $this->em->getRepository(Course::class)->findOneBy([
  761.             "id" => $courseId,
  762.             "deleted" => LessonModuleEnum::ITEM_NO_DELETED
  763.         ]);
  764.         if(!$course){
  765.             return $this->eadResponse(nullErrorEnum::NOT_FOUND);
  766.         }
  767.         $moduleIds json_decode($moduleIds);
  768.         
  769.         if(!is_array($moduleIds)){
  770.             return $this->eadResponse(nullErrorEnum::NOT_FOUND);
  771.         }
  772.         
  773.         foreach ($moduleIds as $key => $moduleId) {
  774.             $module $this->repository->findOneBy([
  775.                 "id" => $moduleId,
  776.                 "deleted" => LessonModuleEnum::ITEM_NO_DELETED
  777.             ]);
  778.             if($module){
  779.                 if($this->userPermissionUtil->isLow($permission)){
  780.                     $isLessonModuleTeacher $this->repository->isLessonModuleTeacher(
  781.                         $lessonModule
  782.                         $this->user
  783.                     );
  784.                     
  785.                     if($isLessonModuleTeacher){
  786.                         $this->repository->copyLessonModule($module$coursetrue$copyType);
  787.                     }
  788.                 }else{
  789.                     $this->repository->copyLessonModule($module$coursetrue$copyType);
  790.                 }
  791.             }
  792.         }
  793.         $this->em->getRepository(Course::class)->addNumberLesson($course);
  794.         $this->userLogService->logInsert("lesson_module"null$moduleIds);
  795.         
  796.         return $this->eadResponse([ "message" => "Success" ]);
  797.     }
  798.     /**
  799.      * @Route(
  800.      *      path          = "/update/order",
  801.      *      methods       = {"PUT"},
  802.      * )
  803.     */
  804.     public function lessonModuleUpdateOrder(Request $request) {
  805.         
  806.         $permission $this->userPermissionUtil->getPermission("course""lesson_module""organize");
  807.         if($this->userPermissionUtil->isLow($permission)){
  808.             return $this->eadResponse(nullErrorEnum::PERMISSION);
  809.         }
  810.         $this->requestUtil->setRequest($request)->setData();
  811.         
  812.         $modules json_decode($this->requestUtil->getField('modules'));
  813.         
  814.         if(!empty($modules)){
  815.             $this->repository->updateOrder($modules);
  816.             $this->userLogService->logUpdate("lesson_module"null$modules);
  817.         }
  818.         return $this->eadResponse([ "message" => "Success" ]);
  819.     }
  820. }