user_linking_requests.php 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. <?php
  2. /* For licensing terms, see /license.txt */
  3. use Chamilo\CoreBundle\Entity\UserRelUser,
  4. Chamilo\UserBundle\Entity\User;
  5. $cidReset = true;
  6. require_once __DIR__.'/../inc/global.inc.php';
  7. api_protect_admin_script();
  8. $action = isset($_GET['action']) ? $_GET['action'] : null;
  9. $hrmId = isset($_GET['hrm']) ? intval($_GET['hrm']) : 0;
  10. $assignedId = isset($_GET['u']) ? intval($_GET['u']) : 0;
  11. $hrm = $hrmId ? api_get_user_entity($hrmId) : null;
  12. $em = Database::getManager();
  13. if (!empty($action) && $hrm && $assignedId) {
  14. switch ($action) {
  15. case 'accept':
  16. /** @var UserRelUser $request */
  17. $request = $em->getRepository('ChamiloCoreBundle:UserRelUser')
  18. ->findOneBy([
  19. 'userId' => $assignedId,
  20. 'friendUserId' => $hrm->getId(),
  21. 'relationType' => USER_RELATION_TYPE_HRM_REQUEST
  22. ]);
  23. if ($request) {
  24. $request->setRelationType(USER_RELATION_TYPE_RRHH);
  25. $request->setLastEdit(api_get_utc_datetime(null, null, true));
  26. $em->persist($request);
  27. $em->flush();
  28. Display::addFlash(
  29. Display::return_message(get_lang('UserLinkingRequestAccepted'), 'success')
  30. );
  31. }
  32. header('Location: '.api_get_self().'?hrm='.$hrm->getId());
  33. exit;
  34. case 'reject':
  35. /** @var UserRelUser $request */
  36. $request = $em->getRepository('ChamiloCoreBundle:UserRelUser')
  37. ->findOneBy([
  38. 'userId' => $assignedId,
  39. 'friendUserId' => $hrm->getId(),
  40. 'relationType' => USER_RELATION_TYPE_HRM_REQUEST
  41. ]);
  42. if ($request) {
  43. $em->remove($request);
  44. $em->flush();
  45. Display::addFlash(
  46. Display::return_message(get_lang('UserLinkingRequestRejected'), 'success')
  47. );
  48. }
  49. /** Todo: notify the HRM that the request was rejected */
  50. header('Location: '.api_get_self().'?hrm='.$hrm->getId());
  51. exit;
  52. case 'remove':
  53. /** @var UserRelUser $request */
  54. $request = $em->getRepository('ChamiloCoreBundle:UserRelUser')
  55. ->findOneBy([
  56. 'userId' => $assignedId,
  57. 'friendUserId' => $hrm->getId(),
  58. 'relationType' => USER_RELATION_TYPE_RRHH
  59. ]);
  60. if ($request) {
  61. $em->remove($request);
  62. $em->flush();
  63. Display::addFlash(
  64. Display::return_message(get_lang('UserLinkRemoved'), 'success')
  65. );
  66. }
  67. /** Todo: notify the HRM that the request was rejected */
  68. header('Location: '.api_get_self().'?hrm='.$hrm->getId());
  69. exit;
  70. }
  71. }
  72. /**
  73. * Get the data to fill the tables on screen
  74. * @param User $hrm
  75. * @param int $status
  76. * @return array
  77. */
  78. function getData(User $hrm, $status = HRM_REQUEST)
  79. {
  80. $requests = UserManager::getUsersFollowedByUser(
  81. $hrm->getId(),
  82. null,
  83. false,
  84. false,
  85. false,
  86. null,
  87. null,
  88. null,
  89. null,
  90. null,
  91. null,
  92. $status
  93. );
  94. $result = [];
  95. $iconAccept = Display::return_icon('accept.png', get_lang('Accept'));
  96. $urlAccept = api_get_self().'?action=accept&hrm='.$hrm->getId().'&u=';
  97. $iconReject = Display::return_icon('delete.png', get_lang('Reject'));
  98. $urlReject = api_get_self().'?action=reject&hrm='.$hrm->getId().'&u=';
  99. $iconRemove = Display::return_icon('delete.png', get_lang('Remove'));
  100. $urlRemove = api_get_self().'?action=remove&hrm='.$hrm->getId().'&u=';
  101. foreach ($requests as $request) {
  102. $line = [];
  103. $studentLink = api_get_path(WEB_CODE_PATH).'mySpace/myStudents.php?student='.$request['user_id'];
  104. $line[] = '<a href="'.$studentLink.'">'.api_get_person_name($request['firstname'], $request['lastname']).'</a>';
  105. if ($status == HRM_REQUEST) {
  106. $line[] = Display::url(
  107. $iconAccept,
  108. $urlAccept.$request['user_id']
  109. ).
  110. Display::url(
  111. $iconReject,
  112. $urlReject.$request['user_id']
  113. );
  114. } else {
  115. $line[] = Display::url(
  116. $iconRemove,
  117. $urlRemove.$request['user_id']
  118. );
  119. }
  120. $result[] = $line;
  121. }
  122. return $result;
  123. }
  124. $form = new FormValidator('user_linking_requests', 'get');
  125. $form->addSelectAjax(
  126. 'hrm',
  127. get_lang('DRH'),
  128. $hrm ? [$hrm->getId() => $hrm->getCompleteName()] : [],
  129. ['url' => api_get_path(WEB_AJAX_PATH).'user_manager.ajax.php?a=user_by_role']
  130. );
  131. $form->addButtonFilter(get_lang('Filter'));
  132. $content = $form->returnForm();
  133. if ($hrm) {
  134. $requests = getData($hrm);
  135. if ($requests) {
  136. $content .= Display::table(
  137. [get_lang('UserLinkingRequests'), get_lang('Actions')],
  138. $requests
  139. );
  140. } else {
  141. $content .= Display::table(
  142. [get_lang('UserLinkingRequests')],
  143. [get_lang('NoResults')]
  144. );
  145. }
  146. $approved = getData($hrm, DRH);
  147. if ($approved) {
  148. $content .= Display::table(
  149. [get_lang('UserLinkingTo'), get_lang('Actions')],
  150. $approved
  151. );
  152. } else {
  153. $content .= Display::table(
  154. [get_lang('UserLinkingTo')],
  155. [get_lang('NoResults')]
  156. );
  157. }
  158. }
  159. $interbreadcrumb[] = ['url' => 'index.php', 'name' => get_lang('PlatformAdmin')];
  160. $toolName = get_lang('UserLinkingRequests');
  161. $view = new Template($toolName);
  162. $view->assign('header', $toolName);
  163. $view->assign('content', $content);
  164. $view->display_one_col_template();