SequenceResourceManager.php 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. <?php
  2. /* For licensing terms, see /license.txt */
  3. use Chamilo\CoreBundle\Entity\SequenceResource;
  4. /**
  5. * SequenceResourceManager class
  6. * Helper for SequenceResource
  7. *
  8. * @author Angel Fernando Quiroz Campos <angel.quiroz@beeznest.com>
  9. */
  10. class SequenceResourceManager
  11. {
  12. /**
  13. * Check if the ser has completed the requirements for the sequences
  14. * @param array $sequences The sequences
  15. * @param int $type The type of sequence resource
  16. * @param int $userId Optional. The user ID
  17. *
  18. * @return array
  19. */
  20. public static function checkRequirementsForUser(array $sequences, $type, $userId = 0)
  21. {
  22. $sequenceList = [];
  23. switch ($type) {
  24. case SequenceResource::SESSION_TYPE:
  25. $sequenceList = self::checkSessionRequirementsForUser($sequences, $userId);
  26. break;
  27. }
  28. return $sequenceList;
  29. }
  30. /**
  31. * Check if the ser has completed the requirements for the session sequences
  32. * @param array $sequences The sequences
  33. * @param int $userId Optional. The user ID
  34. *
  35. * @return array
  36. */
  37. private static function checkSessionRequirementsForUser(array $sequences, $userId = 0)
  38. {
  39. $sequenceList = [];
  40. $entityManager = Database::getManager();
  41. $gradebookCategoryRepo = $entityManager->getRepository('ChamiloCoreBundle:GradebookCategory');
  42. foreach ($sequences as $sequenceId => $sequence) {
  43. $item = [
  44. 'name' => $sequence['name'],
  45. 'requirements' => []
  46. ];
  47. foreach ($sequence['requirements'] as $sessionRequired) {
  48. $itemSession = [
  49. 'name' => $sessionRequired->getName(),
  50. 'status' => true
  51. ];
  52. $sessionsCourses = $sessionRequired->getCourses();
  53. foreach ($sessionsCourses as $sessionCourse) {
  54. $course = $sessionCourse->getCourse();
  55. $gradebooks = $gradebookCategoryRepo->findBy([
  56. 'courseCode' => $course->getCode(),
  57. 'sessionId' => $sessionRequired->getId(),
  58. 'isRequirement' => true
  59. ]);
  60. foreach ($gradebooks as $gradebook) {
  61. $category = Category::createCategoryObjectFromEntity(
  62. $gradebook
  63. );
  64. if (!empty($userId)) {
  65. $itemSession['status'] = $itemSession['status'] && Category::userFinishedCourse(
  66. $userId,
  67. $category
  68. );
  69. }
  70. }
  71. }
  72. $item['requirements'][$sessionRequired->getId()] = $itemSession;
  73. }
  74. $sequenceList[$sequenceId] = $item;
  75. }
  76. return $sequenceList;
  77. }
  78. /**
  79. * Check if at least one sequence are completed
  80. * @param array $sequences The sequences
  81. *
  82. * @return boolean
  83. */
  84. public static function checkSequenceAreCompleted(array $sequences)
  85. {
  86. foreach ($sequences as $sequence) {
  87. $status = true;
  88. foreach ($sequence['requirements'] as $item) {
  89. $status = $status && $item['status'];
  90. }
  91. if ($status) {
  92. return true;
  93. }
  94. }
  95. return false;
  96. }
  97. }