src/Services/EntityServices/CourseIndexService.php line 296

Open in your IDE?
  1. <?php
  2. namespace EADPlataforma\Services\EntityServices;
  3. use EADPlataforma\Entity\Course;
  4. use EADPlataforma\Entity\CourseTeam;
  5. use EADPlataforma\Entity\Enrollment;
  6. use EADPlataforma\Entity\ProductOffer;
  7. use EADPlataforma\Entity\User;
  8. use EADPlataforma\Enum\UserEnum;
  9. use EADPlataforma\Enum\CourseEnum;
  10. use EADPlataforma\Enum\EnrollmentEnum;
  11. use EADPlataforma\Enum\ProductEnum;
  12. use EADPlataforma\Repository\CourseRepository;
  13. use EADPlataforma\Repository\CourseTeamRepository;
  14. use EADPlataforma\Repository\EnrollmentRepository;
  15. use EADPlataforma\Repository\ProductOfferRepository;
  16. use EADPlataforma\Services\GeneralService;
  17. use EADPlataforma\Services\SchoolEntityManager;
  18. use EADPlataforma\Services\ConfigurationService;
  19. use EADPlataforma\Util\UserPermissionUtil;
  20. /**
  21.  * CourseIndex Service
  22.  */
  23. class CourseIndexService
  24. {
  25.     /**
  26.      * @var SchoolEntityManager $em
  27.      */
  28.     protected $em;
  29.     /**
  30.      * @var CourseRepository
  31.      */
  32.     private $repository;
  33.     /**
  34.      * @var CourseTeamRepository
  35.      */
  36.     private $courseTeamRepository;
  37.     /**
  38.      * @var EnrollmentRepository
  39.      */
  40.     private $enrollmentRepository;
  41.     /**
  42.      * @var ProductOfferRepository
  43.      */
  44.     private $productOfferRepository;
  45.     /**
  46.      * @var ConfigurationService
  47.      */
  48.     private $configuration;
  49.     /**
  50.      * @var UserPermissionUtil
  51.      */
  52.     protected $userPermissionUtil;
  53.     /**
  54.      * @var User
  55.      */
  56.     private $user;
  57.     /**
  58.      * Constructor
  59.      *
  60.      * @param GeneralService $generalService
  61.      * @param CourseRepository $courseRepository
  62.      */
  63.     public function __construct(
  64.         GeneralService $generalService
  65.         CourseRepository $courseRepository
  66.     )
  67.     {
  68.         $this->repository $courseRepository;
  69.         $this->em $courseRepository->em;
  70.         $this->courseTeamRepository $this->em->getRepository(CourseTeam::class);
  71.         $this->enrollmentRepository $this->em->getRepository(Enrollment::class);
  72.         $this->productOfferRepository $this->em->getRepository(ProductOffer::class);
  73.         $this->generalService $generalService;
  74.         $this->configuration $this->generalService->getService('ConfigurationService');
  75.         $this->user $this->generalService->getService('UserSessionService')->getUser();
  76.         $this->userPermissionUtil $this->generalService->getUtil('UserPermissionUtil');
  77.     }
  78.     public function searchCourse(int $courseId): ?Course
  79.     {
  80.         return $this->repository->findOneBy([
  81.             "id" => $courseId,
  82.             "deleted" => CourseEnum::ITEM_NO_DELETED
  83.         ]);
  84.     }
  85.     public function isInTeam(Course $course): bool
  86.     {
  87.         return $this->courseTeamRepository->userExistInCourseTeam(
  88.             $course
  89.             $this->user
  90.         );
  91.     }
  92.     public function isStudent(Course $course): bool
  93.     {
  94.         $permission $this->userPermissionUtil->getPermission("course""see");
  95.         if($this->user->getId() == EnrollmentEnum::YES){
  96.             return false;
  97.         }
  98.         
  99.         if($this->userPermissionUtil->isHigh($permission)){
  100.             return false;
  101.         }
  102.         $isInTeam $this->isInTeam($course$this->user);
  103.         if($isInTeam && $this->userPermissionUtil->isMiddle($permission)){
  104.             return false;
  105.         }
  106.         return true;
  107.     }
  108.     public function searchEnrollment(Course $course): ?Enrollment
  109.     {
  110.         $enrollment $this->enrollmentRepository->findOneBy([
  111.             "user" => $this->user->getId(),
  112.             "course" => $course->getId(),
  113.             "deleted" => EnrollmentEnum::ITEM_NO_DELETED,
  114.         ], [ "id" => "DESC" ]);
  115.         if($enrollment){
  116.             return $enrollment;
  117.         }
  118.             
  119.         $isStudent $this->isStudent($course$this->user);
  120.         if($isStudent && $course->getFree() == CourseEnum::NO){
  121.             return null;
  122.         }
  123.         $enrollmentService $this->generalService->getService('EnrollmentService');
  124.         $info $enrollmentService->enrollUser($this->user$course);
  125.         if(!empty($info->errors)){
  126.             return null;
  127.         }
  128.         
  129.         return $info->enrollment;
  130.     }
  131.     public function isValidEnrollment(Course $course): bool
  132.     {
  133.         return $this->enrollmentRepository->isValidEnrollmentByUser(
  134.             $this->user->getId(), 
  135.             $course->getId()
  136.         );
  137.     }
  138.     public function isEnrollment(Course $course): bool
  139.     {
  140.         return $this->enrollmentRepository->isEnrollment(
  141.             $this->user->getId(), 
  142.             $course->getId()
  143.         );
  144.     }
  145.     public function getOffersPeriod(Enrollment $enrollment)
  146.     {
  147.         $course $enrollment->getCourse();
  148.         $findAllPeriods false;
  149.         $dateNow = new \Datetime();
  150.         $datePeriodEnrollment = new \Datetime($enrollment->getDatePeriod());
  151.         $deadlineEndPeriod $dateNow->diff($datePeriodEnrollment);
  152.         $productOffersPeriod = [];
  153.         if($deadlineEndPeriod->format('%r%a') <= 30){
  154.             $findAllPeriods true;
  155.             $productOffersPeriod $this->productOfferRepository->getProductOffersByCourse(
  156.                 $course
  157.                 ProductEnum::PERIOD
  158.             );
  159.         }
  160.         foreach ($productOffersPeriod as $key => $productOffer) {
  161.             $productOffersPeriod[$key] = $productOffer->toReturnClean();
  162.             $productOffersPeriod[$key]->type ProductEnum::PERIOD;
  163.             $linkBuy $this->generalService->generateUrl("cartAdd", [
  164.                 "poID" => $productOffer->getId(),
  165.                 "courseId" => $course->getId(),
  166.             ]);
  167.             $productOffersPeriod[$key]->link $linkBuy;
  168.         }
  169.         $dateSupportEnrollment = new \Datetime($enrollment->getDateSupport());
  170.         $deadlineEndSupport $dateNow->diff($dateSupportEnrollment);
  171.         $productOffersSupport = [];
  172.         if($deadlineEndSupport->format('%r%a') <= 30){
  173.             $findAllPeriods true;
  174.             $productOffersSupport $this->productOfferRepository->getProductOffersByCourse(
  175.                 $course
  176.                 ProductEnum::SUPPORT
  177.             );
  178.         }
  179.         
  180.         foreach ($productOffersSupport as $key => $productOffer) {
  181.             $productOffersSupport[$key] = $productOffer->toReturnClean();
  182.             $productOffersSupport[$key]->type ProductEnum::SUPPORT;
  183.             $linkBuy $this->generalService->generateUrl("cartAdd", [
  184.                 "poID" => $productOffer->getId(),
  185.                 "courseId" => $course->getId(),
  186.             ]);
  187.             $productOffersSupport[$key]->link $linkBuy;
  188.         }
  189.         $productOffersPeriodSupport = [];
  190.         if($findAllPeriods){
  191.             $productOffersPeriodSupport $this->productOfferRepository->getProductOffersByCourse(
  192.                 $course,
  193.                 ProductEnum::PERIOD_SUPORT
  194.             );
  195.         }
  196.         foreach ($productOffersPeriodSupport as $key => $productOffer) {
  197.             $productOffersPeriodSupport[$key] = $productOffer->toReturnClean();
  198.             $productOffersPeriodSupport[$key]->type ProductEnum::PERIOD_SUPORT;
  199.             $linkBuy $this->generalService->generateUrl("cartAdd", [
  200.                 "poID" => $productOffer->getId(),
  201.                 "courseId" => $course->getId(),
  202.             ]);
  203.             $productOffersPeriodSupport[$key]->link $linkBuy;
  204.         }
  205.         $certificateOffer null;
  206.         if($enrollment->getCertificate() == EnrollmentEnum::NO){
  207.             $certificateOffer $this->productOfferRepository->getProductOfferCertificateByCourse(
  208.                 $course
  209.             );
  210.             if($certificateOffer){
  211.                 $linkBuy $this->generalService->generateUrl("cartAdd", [
  212.                     "poID" => $certificateOffer->getId(),
  213.                     "courseId" => $course->getId(),
  214.                 ]);
  215.                 
  216.                 $certificateOffer = (object)$certificateOffer->toReturnClean();
  217.                 
  218.                 $certificateOffer->type ProductEnum::CERTIFICATE;
  219.                 $certificateOffer->link $linkBuy;
  220.             }
  221.         }
  222.         return (object)[
  223.             "productOffersCertificate" => $certificateOffer,
  224.             "productOffersPeriod" => array_merge(
  225.                 $productOffersPeriodSupport
  226.                 $productOffersPeriod
  227.             ),
  228.             "productOffersSupport" => array_merge(
  229.                 $productOffersPeriodSupport
  230.                 $productOffersSupport
  231.             ),
  232.         ];
  233.     }
  234.     public function getCourseNewGeneral(Course $courseEnrollment $enrollment): array
  235.     {
  236.         $session $this->user->getSession();
  237.         $userOrigin $session->getUserOrigin();
  238.         $fileService $this->generalService->getService('FileService');
  239.         $dataImg = [
  240.             "fileName" => $this->user->getPhoto(),
  241.             "pathConst" => UserEnum::PATH_PROFILES,
  242.             "option" => "l-user-profile",
  243.             "addUpload" => true,
  244.             "addStream" => true,
  245.         ];
  246.         $translations = ([ 
  247.             "translations" => $this->configuration->getLanguageModule('lesson_view'),
  248.             "language" => $this->configuration->getSystemLanguage()
  249.         ]);
  250.         $offers $this->getOffersPeriod($enrollment);
  251.         
  252.         $clientConfig $this->configuration->getClientConfiguration();
  253.         $userSessionService $this->generalService->getService('UserSessionService');
  254.         $session $userSessionService->getSession();
  255.         
  256.         $userToken md5($clientConfig->getId()) . md5(
  257.             $session->getId() . $session->getToken()
  258.         );
  259.         $data = [
  260.             "productOffersCertificate" => $offers->productOffersCertificate,
  261.             "productOffersPeriod" => $offers->productOffersPeriod,
  262.             "productOffersSupport" => $offers->productOffersSupport,
  263.             "client" => $this->configuration->getClientInfo(),
  264.             "translations" => $translations,
  265.             "drm" => $this->configuration->getDrmConfiguration(),
  266.             "date" => date('Y-m-d H:i:s'),
  267.             "user" => [
  268.                 "id" => $this->user->getId(),
  269.                 "ip" => $this->generalService->getClientIp(),
  270.                 "name" => $this->user->getName(),
  271.                 "hasUserOrigin" => ($userOrigin true false),
  272.                 "canAccessAdm" => $this->userPermissionUtil->canAccessAdm(),
  273.                 "screenSize" => $this->user->getScreenSize(),
  274.                 "autoplay" => $this->user->getAutoplay(),
  275.                 "document" => $this->user->getDocument(),
  276.                 "username" => $this->user->getUsername(),
  277.                 "token" => $userToken,
  278.                 "photo" => $fileService->getFilePathObj($dataImg),
  279.                 "permissionName" => (
  280.                     $this->user->getUserProfile() ? 
  281.                     $this->user->getUserProfile()->getName() 
  282.                     : null
  283.                 ),
  284.             ],
  285.         ];
  286.         return $data;
  287.     }
  288.     public function getCourseIndex(Enrollment $enrollment): array
  289.     {
  290.         return (array)$this->enrollmentRepository->getCourseIndexByEnrollmentNew($enrollment);
  291.     }
  292. }