lp_subscribe_users_to_category.php 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. <?php
  2. /* For licensing terms, see /license.txt */
  3. use Chamilo\UserBundle\Entity\User;
  4. use Chamilo\CourseBundle\Entity\CLpCategory;
  5. use Chamilo\CourseBundle\Entity\CLpCategoryUser;
  6. require_once __DIR__.'/../inc/global.inc.php';
  7. api_protect_course_script();
  8. $is_allowed_to_edit = api_is_allowed_to_edit(false, true, false, false);
  9. if (!$is_allowed_to_edit) {
  10. api_not_allowed(true);
  11. }
  12. $categoryId = isset($_GET['id']) ? intval($_GET['id']) : 0;
  13. if (empty($categoryId)) {
  14. api_not_allowed(true);
  15. }
  16. $courseId = api_get_course_int_id();
  17. $courseCode = api_get_course_id();
  18. $em = Database::getManager();
  19. /** @var \Chamilo\CourseBundle\Entity\CLpCategory $category */
  20. $category = $em->getRepository('ChamiloCourseBundle:CLpCategory')->find($categoryId);
  21. if (!$category) {
  22. api_not_allowed(true);
  23. }
  24. $interbreadcrumb[] = array(
  25. 'url' => 'lp_controller.php?action=list&'.api_get_cidreq(),
  26. 'name' => get_lang('LearningPaths')
  27. );
  28. $interbreadcrumb[] = array('url' => '#', 'name' => $category->getName());
  29. // Find course.
  30. $course = $em->getRepository('ChamiloCoreBundle:Course')->find($courseId);
  31. // Getting subscribe users to the course.
  32. $subscribedUsers = $em->getRepository('ChamiloCoreBundle:Course')->getSubscribedStudents($course);
  33. $subscribedUsers = $subscribedUsers->getQuery();
  34. $subscribedUsers = $subscribedUsers->execute();
  35. // Getting all users in a nice format.
  36. $choices = array();
  37. /** @var User $user */
  38. foreach ($subscribedUsers as $user) {
  39. $choices[$user->getUserId()] = $user->getCompleteNameWithClasses();
  40. }
  41. // Getting subscribed users to a category.
  42. $subscribedUsersInCategory = $category->getUsers();
  43. $selectedChoices = array();
  44. foreach ($subscribedUsersInCategory as $item) {
  45. $selectedChoices[] = $item->getUser()->getId();
  46. }
  47. $url = api_get_self().'?'.api_get_cidreq().'&action=add_users_to_category&id='.$categoryId;
  48. //Building the form for Users
  49. $formUsers = new \FormValidator('lp_edit', 'post', $url);
  50. $formUsers->addElement('hidden', 'user_form', 1);
  51. $userMultiSelect = $formUsers->addElement('advmultiselect', 'users', get_lang('Users'), $choices);
  52. $formUsers->addButtonSave(get_lang('Save'));
  53. $defaults = array();
  54. if (!empty($selectedChoices)) {
  55. $defaults['users'] = $selectedChoices;
  56. }
  57. $formUsers->setDefaults($defaults);
  58. //Building the form for Groups
  59. $tpl = new Template();
  60. $currentUser = $em->getRepository('ChamiloUserBundle:User')->find(api_get_user_id());
  61. if ($formUsers->validate()) {
  62. $values = $formUsers->getSubmitValues();
  63. // Subscribing users
  64. $users = isset($values['users']) ? $values['users'] : [];
  65. if (!empty($users)) {
  66. $deleteUsers = [];
  67. if ($subscribedUsersInCategory) {
  68. /** @var CLpCategoryUser $user */
  69. foreach ($subscribedUsersInCategory as $user) {
  70. $userId = $user->getUser()->getId();
  71. if (!in_array($userId, $users)) {
  72. $category->removeUsers($user);
  73. }
  74. }
  75. }
  76. foreach ($users as $userId) {
  77. $categoryUser = new CLpCategoryUser();
  78. $user = UserManager::getRepository()->find($userId);
  79. $categoryUser->setUser($user);
  80. $category->addUser($categoryUser);
  81. }
  82. $em->merge($category);
  83. $em->flush();
  84. Display::addFlash(Display::return_message(get_lang('Updated')));
  85. }
  86. header("Location: $url");
  87. exit;
  88. } else {
  89. $headers = [get_lang('SubscribeUsersToLp'), get_lang('SubscribeGroupsToLp')];
  90. $tabs = $formUsers->toHtml();
  91. $tpl->assign('tabs', $tabs);
  92. }
  93. $layout = $tpl->get_template('learnpath/subscribe_users.tpl');
  94. $tpl->display($layout);