load_search.php 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331
  1. <?php
  2. /* For licensing terms, see /license.txt */
  3. use Chamilo\CoreBundle\Entity\ExtraFieldSavedSearch;
  4. $cidReset = true;
  5. require_once 'main/inc/global.inc.php';
  6. api_block_anonymous_users();
  7. //if (!api_is_platform_admin()) {
  8. if (!api_is_drh()) {
  9. api_not_allowed(true);
  10. }
  11. //}
  12. $userId = api_get_user_id();
  13. $userInfo = api_get_user_info();
  14. $userToLoad = isset($_GET['user_id']) ? $_GET['user_id'] : '';
  15. $action = isset($_GET['action']) ? $_GET['action'] : '';
  16. switch ($action) {
  17. case 'subscribe_user':
  18. $sessionId = isset($_GET['session_id']) ? $_GET['session_id'] : '';
  19. SessionManager::suscribe_users_to_session($sessionId, [$userToLoad], SESSION_VISIBLE_READ_ONLY, false);
  20. Display::addFlash(Display::return_message(get_lang('UserAdded')));
  21. header("Location: ".api_get_self().'?user_id='.$userToLoad);
  22. exit;
  23. break;
  24. case 'unsubscribe_user':
  25. $sessionId = isset($_GET['session_id']) ? $_GET['session_id'] : '';
  26. SessionManager::unsubscribe_user_from_session($sessionId, $userToLoad);
  27. Display::addFlash(Display::return_message(get_lang('Unsubscribed')));
  28. header("Location: ".api_get_self().'?user_id='.$userToLoad);
  29. break;
  30. }
  31. $em = Database::getManager();
  32. $formSearch = new FormValidator('load', 'get', api_get_self());
  33. $formSearch->addHeader(get_lang('LoadDiagnosis'));
  34. if (!empty($userInfo)) {
  35. if ($userInfo['status'] == DRH) {
  36. $users = UserManager::get_users_followed_by_drh($userId);
  37. if (!empty($users)) {
  38. $userList = [];
  39. foreach ($users as $user) {
  40. $userList[$user['user_id']] = api_get_person_name($user['firstname'], $user['lastname']);
  41. }
  42. $formSearch->addSelect('user_id', get_lang('User'), $userList);
  43. }
  44. }
  45. }
  46. if ($userToLoad) {
  47. $formSearch->setDefaults(['user_id' => $userToLoad]);
  48. }
  49. $formSearch->addButtonSearch(get_lang('Search'), 'save');
  50. $form = new FormValidator('search', 'post', api_get_self().'?user_id='.$userToLoad);
  51. $form->addHeader(get_lang('Diagnosis'));
  52. $form->addHidden('user_id', $userToLoad);
  53. /** @var ExtraFieldSavedSearch $saved */
  54. $search = [
  55. 'user' => $userToLoad
  56. ];
  57. $items = $em->getRepository('ChamiloCoreBundle:ExtraFieldSavedSearch')->findBy($search);
  58. if (empty($items)) {
  59. Display::addFlash(Display::return_message('NoData'));
  60. }
  61. $extraField = new ExtraField('session');
  62. $extraFieldValue = new ExtraFieldValue('session');
  63. $extra = $extraField->addElements($form, '', [], true);
  64. $form->addButtonSearch(get_lang('Search'), 'save');
  65. $extraFieldsToFilter = $extraField->get_all(array('variable = ?' => 'temps-de-travail'));
  66. $extraFieldToSearch = array();
  67. if (!empty($extraFieldsToFilter)) {
  68. foreach ($extraFieldsToFilter as $filter) {
  69. $extraFieldToSearch[] = $filter['id'];
  70. }
  71. }
  72. $extraFieldListToString = implode(',', $extraFieldToSearch);
  73. $result = SessionManager::getGridColumns('simple', $extraFieldsToFilter);
  74. $columns = $result['columns'];
  75. $column_model = $result['column_model'];
  76. $defaults = [];
  77. $tagsData = [];
  78. if (!empty($items)) {
  79. /** @var ExtraFieldSavedSearch $item */
  80. foreach ($items as $item) {
  81. $variable = 'extra_'.$item->getField()->getVariable();
  82. if ($item->getField()->getFieldType() == Extrafield::FIELD_TYPE_TAG) {
  83. $tagsData[$variable] = $item->getValue();
  84. }
  85. $defaults[$variable] = $item->getValue();
  86. }
  87. }
  88. $form->setDefaults($defaults);
  89. $filterToSend = '';
  90. if ($formSearch->validate()) {
  91. $formSearchParams = $formSearch->getSubmitValues();
  92. $filters = [];
  93. foreach ($defaults as $key => $value) {
  94. if (substr($key, 0, 6) != 'extra_' && substr($key, 0, 7) != '_extra_') {
  95. continue;
  96. }
  97. if (!empty($value)) {
  98. $filters[$key] = $value;
  99. }
  100. }
  101. //$defaults
  102. $filterToSend = [];
  103. if (!empty($filters)) {
  104. $filterToSend = ['groupOp' => 'AND'];
  105. if ($filters) {
  106. $count = 1;
  107. $countExtraField = 1;
  108. foreach ($result['column_model'] as $column) {
  109. if ($count > 5) {
  110. if (isset($filters[$column['name']])) {
  111. $defaultValues['jqg'.$countExtraField] = $filters[$column['name']];
  112. $filterToSend['rules'][] = ['field' => $column['name'], 'op' => 'cn', 'data' => $filters[$column['name']]];
  113. }
  114. $countExtraField++;
  115. }
  116. $count++;
  117. }
  118. }
  119. }
  120. }
  121. if ($form->validate()) {
  122. $params = $form->getSubmitValues();
  123. if (isset($params['save'])) {
  124. unset($params['save']);
  125. }
  126. $form->setDefaults($params);
  127. // Search
  128. $filters = [];
  129. // Parse params.
  130. foreach ($params as $key => $value) {
  131. if (substr($key, 0, 6) != 'extra_' && substr($key, 0, 7) != '_extra_') {
  132. continue;
  133. }
  134. if (!empty($value)) {
  135. $filters[$key] = $value;
  136. }
  137. }
  138. $filterToSend = [];
  139. if (!empty($filters)) {
  140. $filterToSend = ['groupOp' => 'AND'];
  141. if ($filters) {
  142. $count = 1;
  143. $countExtraField = 1;
  144. foreach ($result['column_model'] as $column) {
  145. if ($count > 5) {
  146. if (isset($filters[$column['name']])) {
  147. $defaultValues['jqg'.$countExtraField] = $filters[$column['name']];
  148. $filterToSend['rules'][] = ['field' => $column['name'], 'op' => 'cn', 'data' => $filters[$column['name']]];
  149. }
  150. $countExtraField++;
  151. }
  152. $count++;
  153. }
  154. }
  155. }
  156. }
  157. $view = $form->returnForm();
  158. $jsTag = '';
  159. if (!empty($tagsData)) {
  160. foreach ($tagsData as $extraField => $tags) {
  161. foreach ($tags as $tag) {
  162. $jsTag .= "$('#$extraField')[0].addItem('$tag', '$tag');";
  163. }
  164. }
  165. }
  166. $htmlHeadXtra[] ='
  167. <script>
  168. $(function() {
  169. '.$extra['jquery_ready_content'].'
  170. '.$jsTag.'
  171. });
  172. </script>';
  173. if (!empty($filterToSend)) {
  174. $filterToSend = json_encode($filterToSend);
  175. $url = api_get_path(WEB_AJAX_PATH).'model.ajax.php?a=get_sessions&_search=true&load_extra_field='.$extraFieldListToString.'&_force_search=true&rows=20&page=1&sidx=&sord=asc&filters2='.$filterToSend;
  176. } else {
  177. $url = api_get_path(WEB_AJAX_PATH).'model.ajax.php?a=get_sessions&_search=true&load_extra_field='.$extraFieldListToString.'&_force_search=true&rows=20&page=1&sidx=&sord=asc';
  178. }
  179. // Autowidth
  180. $extra_params['autowidth'] = 'true';
  181. // height auto
  182. $extra_params['height'] = 'auto';
  183. $extra_params['postData'] = array(
  184. 'filters' => array(
  185. "groupOp" => "AND",
  186. "rules" => $result['rules']
  187. )
  188. );
  189. $sessionByUserList = SessionManager::get_sessions_by_user($userToLoad, true, true);
  190. $sessionUserList = array();
  191. if (!empty($sessionByUserList)) {
  192. foreach ($sessionByUserList as $sessionByUser) {
  193. $sessionUserList[] = $sessionByUser['session_id'];
  194. }
  195. }
  196. $action_links = 'function action_formatter(cellvalue, options, rowObject) {
  197. var sessionList = '.json_encode($sessionUserList).';
  198. if ($.inArray(options.rowId, sessionList) == -1) {
  199. return \'<a href="'.api_get_self().'?action=subscribe_user&user_id='.$userToLoad.'&session_id=\'+options.rowId+\'">'.Display::return_icon('add.png', addslashes(get_lang('Subscribe')),'',ICON_SIZE_SMALL).'</a>'.'\';
  200. } else {
  201. return \'<a href="'.api_get_self().'?action=unsubscribe_user&user_id='.$userToLoad.'&session_id=\'+options.rowId+\'">'.Display::return_icon('delete.png', addslashes(get_lang('Delete')),'',ICON_SIZE_SMALL).'</a>'.'\';
  202. }
  203. }';
  204. $htmlHeadXtra[] = api_get_jqgrid_js();
  205. $griJs = Display::grid_js('sessions', $url, $columns, $column_model, $extra_params, array(), $action_links, true);
  206. $grid = '<div id="session-table" class="table-responsive">';
  207. $grid .= Display::grid_html('sessions');
  208. $grid .= '</div>';
  209. $tpl = new Template(get_lang('Diagnosis'));
  210. if (empty($items)) {
  211. $view = '';
  212. $grid = '';
  213. $griJs = '';
  214. }
  215. $tpl->assign('form', $view);
  216. $tpl->assign('form_search', $formSearch->returnForm());
  217. $table = new HTML_Table(array('class' => 'data_table'));
  218. $column = 0;
  219. $row = 0;
  220. $total = '0';
  221. $sumHours = '0';
  222. $numHours = '0';
  223. $field = 'heures-disponibilite-par-semaine';
  224. $extraField = new ExtraFieldValue('user');
  225. $data = $extraField->get_values_by_handler_and_field_variable($userToLoad, $field);
  226. $availableHoursPerWeek = 0;
  227. function dateDiffInWeeks($date1, $date2)
  228. {
  229. if ($date1 > $date2) {
  230. return dateDiffInWeeks($date2, $date1);
  231. }
  232. $first = new \DateTime($date1);
  233. $second = new \DateTime($date2);
  234. return floor($first->diff($second)->days / 7);
  235. }
  236. if ($data) {
  237. $availableHoursPerWeek = $data['value'];
  238. $numberWeeks = 0;
  239. if ($form->validate()) {
  240. $formData = $form->getSubmitValues();
  241. if (isset($formData['extra_access_start_date']) && isset($formData['extra_access_end_date'])) {
  242. $startDate = $formData['extra_access_start_date'];
  243. $endDate = $formData['extra_access_end_date'];
  244. $numberWeeks = dateDiffInWeeks($startDate, $endDate);
  245. }
  246. }
  247. $total = $numberWeeks * $availableHoursPerWeek;
  248. $sessions = SessionManager::getSessionsFollowedByUser($userToLoad);
  249. if ($sessions) {
  250. $sessionFieldValue = new ExtraFieldValue('session');
  251. foreach ($sessions as $session) {
  252. $sessionId = $session['id'];
  253. $data = $sessionFieldValue->get_values_by_handler_and_field_variable($sessionId, 'temps-de-travail');
  254. if ($data) {
  255. $sumHours += $data['value'];
  256. }
  257. }
  258. }
  259. }
  260. $numHours = $total - $sumHours;
  261. $headers = array(
  262. "Total d'heures disponibles" => $total,
  263. 'Sommes des heures de sessions inscrites' => $sumHours,
  264. "Nombre d'heures encore disponible" => $numHours
  265. );
  266. foreach ($headers as $header => $value) {
  267. $table->setCellContents($row, 0, $header);
  268. $table->updateCellAttributes($row, 0, 'width="250px"');
  269. $table->setCellContents($row, 1, $value);
  270. $row++;
  271. }
  272. $tpl->assign('grid', $grid.$table->toHtml());
  273. $tpl->assign('grid_js', $griJs);
  274. $content = $tpl->fetch('default/user_portal/search_extra_field.tpl');
  275. $tpl->assign('content', $content);
  276. $tpl->display_one_col_template();