search.php 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510
  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. $userId = api_get_user_id();
  8. $userInfo = api_get_user_info();
  9. $em = Database::getManager();
  10. $form = new FormValidator('search', 'post', api_get_self());
  11. $form->addHeader(get_lang('Diagnosis'));
  12. /** @var ExtraFieldSavedSearch $saved */
  13. $search = [
  14. 'user' => $userId
  15. ];
  16. $items = $em->getRepository('ChamiloCoreBundle:ExtraFieldSavedSearch')->findBy($search);
  17. $extraFieldSession = new ExtraField('session');
  18. $extraFieldValueSession = new ExtraFieldValue('session');
  19. //$extra = $extraField->addElements($form, '', [], true, true);
  20. /*$extra = $extraField->addElements($form, '', [], true, true, array('heures-disponibilite-par-semaine'));
  21. $elements = $form->getElements();
  22. $variables = ['theme', 'domaine', 'competenceniveau', 'filiere'];
  23. foreach ($elements as $element) {
  24. $element->setAttribute('extra_label_class', 'red_underline');
  25. }
  26. $htmlHeadXtra[] ='<script>
  27. $(document).ready(function(){
  28. '.$extra['jquery_ready_content'].'
  29. });
  30. </script>';*/
  31. $extraFieldValue = new ExtraFieldValue('user');
  32. $wantStage = $extraFieldValue->get_values_by_handler_and_field_variable(api_get_user_id(), 'filiere_want_stage');
  33. $hide = true;
  34. if ($wantStage !== false) {
  35. $hide = $wantStage['value'] === 'yes';
  36. }
  37. $defaultValueStatus = 'extraFiliere.hide()';
  38. if ($hide === false) {
  39. $defaultValueStatus = '';
  40. }
  41. $url = api_get_path(WEB_AJAX_PATH).'extra_field.ajax.php?a=order&user_id='.$userId;
  42. $htmlHeadXtra[] ='<script>
  43. $(document).ready(function() {
  44. var extraFiliere = $("input[name=\'extra_filiere[extra_filiere]\']").parent().parent().parent().parent();
  45. '.$defaultValueStatus.'
  46. $("input[name=\'extra_filiere_want_stage[extra_filiere_want_stage]\']").change(function() {
  47. if ($(this).val() == "no") {
  48. extraFiliere.show();
  49. } else {
  50. extraFiliere.hide();
  51. }
  52. });
  53. $("#extra_domaine").parent().append(
  54. $("<a>", {
  55. "class": "btn ajax btn-default",
  56. "href": "'.$url.'&field_variable=extra_domaine",
  57. "text": "'.get_lang('Order').'"
  58. })
  59. );
  60. $("#extra_theme").parent().append(
  61. $("<a>", {
  62. "class": "btn ajax btn-default",
  63. "href": "'.$url.'&field_variable=extra_theme",
  64. "text": "'.get_lang('Order').'"
  65. })
  66. );
  67. $("#extra_domaine").on("change", function() {
  68. var domainList = [];
  69. $( "#extra_domaine option:selected" ).each(function() {
  70. domainList.push($(this).val());
  71. });
  72. var domainListToString = JSON.stringify(domainList);
  73. $.ajax({
  74. contentType: "application/x-www-form-urlencoded",
  75. type: "GET",
  76. url: "'.api_get_path(WEB_AJAX_PATH).'extra_field.ajax.php?a=search_options_from_tags&type=session&from=extra_domaine&search=extra_theme&options="+domainListToString,
  77. success: function(data) {
  78. $("#extra_theme").find("option").remove().end();
  79. $("#extra_theme").empty();
  80. var selectToString = "";
  81. jQuery.each(JSON.parse(data), function(i, item) {
  82. selectToString += "<optgroup label=\'"+item.text+"\'>";
  83. jQuery.each(item.children, function(j, data) {
  84. console.log(data);
  85. if (data.text != "") {
  86. selectToString += "<option value=\'"+data.text+"\'> " +data.text+"</option>"
  87. }
  88. });
  89. selectToString += "</optgroup>";
  90. });
  91. $("#extra_theme").html(selectToString);
  92. $("#extra_theme").selectpicker("refresh");
  93. }
  94. });
  95. });
  96. });
  97. </script>';
  98. $form->addButtonSave(get_lang('Save'), 'save');
  99. $result = SessionManager::getGridColumns('simple');
  100. $columns = $result['columns'];
  101. $column_model = $result['column_model'];
  102. $defaults = [];
  103. $tagsData = [];
  104. if (!empty($items)) {
  105. /** @var ExtraFieldSavedSearch $item */
  106. foreach ($items as $item) {
  107. $variable = 'extra_'.$item->getField()->getVariable();
  108. if ($item->getField()->getFieldType() == Extrafield::FIELD_TYPE_TAG) {
  109. $tagsData[$variable] = $item->getValue();
  110. }
  111. $defaults[$variable] = $item->getValue();
  112. }
  113. }
  114. $form->setDefaults($defaults);
  115. //$view = $form->returnForm();
  116. $filterToSend = '';
  117. if ($form->validate()) {
  118. $params = $form->getSubmitValues();
  119. /** @var \Chamilo\UserBundle\Entity\User $user */
  120. $user = $em->getRepository('ChamiloUserBundle:User')->find($userId);
  121. if (isset($params['save'])) {
  122. MessageManager::send_message_simple(
  123. $userId,
  124. get_lang('DiagnosisFilledSubject'),
  125. get_lang('DiagnosisFilledDescription')
  126. );
  127. $drhList = UserManager::getDrhListFromUser($userId);
  128. if ($drhList) {
  129. foreach ($drhList as $drhId) {
  130. $subject = sprintf(get_lang('UserXHasFilledTheDiagnosis'), $userInfo['complete_name']);
  131. $content = sprintf(get_lang('UserXHasFilledTheDiagnosisDescription'), $userInfo['complete_name']);
  132. MessageManager::send_message_simple($drhId, $subject, $content);
  133. }
  134. }
  135. Display::addFlash(Display::return_message(get_lang('Saved')));
  136. header("Location: ".api_get_self());
  137. exit;
  138. } else {
  139. // Search
  140. $filters = [];
  141. // Parse params.
  142. foreach ($params as $key => $value) {
  143. if (substr($key, 0, 6) != 'extra_' && substr($key, 0, 7) != '_extra_') {
  144. continue;
  145. }
  146. if (!empty($value)) {
  147. $filters[$key] = $value;
  148. }
  149. }
  150. $filterToSend = [];
  151. if (!empty($filters)) {
  152. $filterToSend = ['groupOp' => 'AND'];
  153. if ($filters) {
  154. $count = 1;
  155. $countExtraField = 1;
  156. foreach ($result['column_model'] as $column) {
  157. if ($count > 5) {
  158. if (isset($filters[$column['name']])) {
  159. $defaultValues['jqg'.$countExtraField] = $filters[$column['name']];
  160. $filterToSend['rules'][] = ['field' => $column['name'], 'op' => 'cn', 'data' => $filters[$column['name']]];
  161. }
  162. $countExtraField++;
  163. }
  164. $count++;
  165. }
  166. }
  167. }
  168. }
  169. }
  170. $extraField = new ExtraField('user');
  171. $userForm = new FormValidator('user_form', 'post', api_get_self());
  172. $jqueryExtra = '';
  173. $userForm->addHeader(get_lang('Filière'));
  174. $fieldsToShow = [
  175. 'statusocial',
  176. 'filiere_user',
  177. 'filiereprecision',
  178. 'filiere_want_stage',
  179. ];
  180. $extra = $extraField->addElements(
  181. $userForm,
  182. api_get_user_id(),
  183. [],
  184. true,
  185. true,
  186. $fieldsToShow,
  187. $fieldsToShow
  188. );
  189. $jqueryExtra .= $extra['jquery_ready_content'];
  190. $fieldsToShow = [
  191. 'filiere'
  192. ];
  193. $extra = $extraFieldSession->addElements(
  194. $userForm,
  195. api_get_user_id(),
  196. [],
  197. true,
  198. true,
  199. $fieldsToShow,
  200. $fieldsToShow
  201. );
  202. $jqueryExtra .= $extra['jquery_ready_content'];
  203. $userForm->addHeader(get_lang('Disponibilité avant mon stage'));
  204. $extra = $extraFieldSession->addElements(
  205. $userForm,
  206. '',
  207. [],
  208. true,
  209. true,
  210. array('access_start_date', 'access_end_date')
  211. );
  212. $jqueryExtra .= $extra['jquery_ready_content'];
  213. $elements = $userForm->getElements();
  214. $variables = ['access_start_date', 'access_end_date'];
  215. foreach ($elements as $element) {
  216. $element->setAttribute('extra_label_class', 'red_underline');
  217. }
  218. $fieldsToShow = [
  219. 'heures-disponibilite-par-semaine',
  220. ];
  221. $extra = $extraField->addElements(
  222. $userForm,
  223. api_get_user_id(),
  224. [],
  225. true,
  226. true,
  227. $fieldsToShow,
  228. $fieldsToShow
  229. );
  230. $jqueryExtra .= $extra['jquery_ready_content'];
  231. $userForm->addHeader(get_lang('Disponibilité pendant mon stage'));
  232. $fieldsToShow = [
  233. 'datedebutstage',
  234. 'datefinstage',
  235. 'poursuiteapprentissagestage',
  236. 'heures-disponibilite-par-semaine-stage'
  237. ];
  238. $extra = $extraField->addElements(
  239. $userForm,
  240. api_get_user_id(),
  241. [],
  242. true,
  243. true,
  244. $fieldsToShow,
  245. $fieldsToShow
  246. );
  247. $jqueryExtra .= $extra['jquery_ready_content'];
  248. $userForm->addHeader(get_lang('Les thèmes qui m’intéressent / Mes objectifs d’apprentissage'));
  249. $fieldsToShow = [
  250. 'domaine',
  251. 'theme'
  252. ];
  253. $specialUrlList = [
  254. 'theme' => api_get_path(WEB_AJAX_PATH).'extra_field.ajax.php?a=search_tags_from_diagnosis'
  255. ];
  256. $extra = $extraFieldSession->addElements(
  257. $userForm,
  258. api_get_user_id(),
  259. [],
  260. true,
  261. true,
  262. $fieldsToShow,
  263. $fieldsToShow,
  264. $defaults,
  265. $specialUrlList,
  266. true
  267. );
  268. $jqueryExtra .= $extra['jquery_ready_content'];
  269. $userForm->addHeader(get_lang('Mon niveau de langue'));
  270. $fieldsToShow = [
  271. //'competenceniveau'
  272. 'ecouter',
  273. 'lire',
  274. 'participer_a_une_conversation',
  275. 's_exprimer_oralement_en_continu',
  276. 'ecrire'
  277. ];
  278. $extra = $extraFieldSession->addElements(
  279. $userForm,
  280. api_get_user_id(),
  281. [],
  282. true,
  283. true,
  284. $fieldsToShow,
  285. $fieldsToShow,
  286. $defaults
  287. );
  288. $jqueryExtra .= $extra['jquery_ready_content'];
  289. $userForm->addHeader(get_lang('Mes objectifs d’apprentissage'));
  290. $fieldsToShow = [
  291. 'objectif-apprentissage'
  292. ];
  293. $extra = $extraField->addElements(
  294. $userForm,
  295. api_get_user_id(),
  296. [],
  297. true,
  298. false,
  299. $fieldsToShow,
  300. $fieldsToShow
  301. );
  302. $jqueryExtra .= $extra['jquery_ready_content'];
  303. $userForm->addHeader(get_lang('Ma méthode de travail'));
  304. $fieldsToShow = [
  305. 'methode-de-travaille'
  306. ];
  307. $extra = $extraField->addElements(
  308. $userForm,
  309. api_get_user_id(),
  310. [],
  311. true,
  312. true,
  313. $fieldsToShow,
  314. $fieldsToShow
  315. );
  316. $jqueryExtra .= $extra['jquery_ready_content'];
  317. $htmlHeadXtra[] ='<script>
  318. $(document).ready(function(){
  319. '.$jqueryExtra.'
  320. });
  321. </script>';
  322. $userForm->addButtonSave(get_lang('Save'));
  323. $userForm->setDefaults($defaults);
  324. $userFormToString = $userForm->returnForm();
  325. if ($userForm->validate()) {
  326. // Saving to user extra fields
  327. $extraFieldValue = new ExtraFieldValue('user');
  328. $userData = $userForm->getSubmitValues();
  329. $extraFieldValue->saveFieldValues($userData);
  330. // Saving to extra_field_saved_search
  331. /** @var \Chamilo\UserBundle\Entity\User $user */
  332. $user = $em->getRepository('ChamiloUserBundle:User')->find($userId);
  333. $sessionFields = [
  334. 'extra_access_start_date',
  335. 'extra_access_end_date',
  336. 'extra_filiere',
  337. 'extra_domaine',
  338. 'extra_temps-de-travail',
  339. //'extra_competenceniveau',
  340. 'extra_theme',
  341. 'extra_ecouter',
  342. 'extra_lire',
  343. 'extra_participer_a_une_conversation',
  344. 'extra_s_exprimer_oralement_en_continu',
  345. 'extra_ecrire'
  346. ];
  347. foreach ($userData as $key => $value) {
  348. $found = strpos($key, '__persist__');
  349. if ($found === false) {
  350. continue;
  351. }
  352. $tempKey = str_replace('__persist__', '', $key);
  353. if (!isset($params[$tempKey])) {
  354. $params[$tempKey] = array();
  355. }
  356. }
  357. if (isset($userData['extra_filiere_want_stage']) &&
  358. isset($userData['extra_filiere_want_stage']['extra_filiere_want_stage'])
  359. ) {
  360. $wantStage = $userData['extra_filiere_want_stage']['extra_filiere_want_stage'];
  361. if ($wantStage === 'yes') {
  362. if (isset($userData['extra_filiere_user'])) {
  363. $userData['extra_filiere'] = [];
  364. $userData['extra_filiere']['extra_filiere'] = $userData['extra_filiere_user']['extra_filiere_user'];
  365. }
  366. }
  367. }
  368. // save in ExtraFieldSavedSearch.
  369. foreach ($userData as $key => $value) {
  370. if (substr($key, 0, 6) != 'extra_' && substr($key, 0, 7) != '_extra_') {
  371. continue;
  372. }
  373. if (!in_array($key, $sessionFields)) {
  374. continue;
  375. }
  376. $field_variable = substr($key, 6);
  377. $extraFieldInfo = $extraFieldValueSession
  378. ->getExtraField()
  379. ->get_handler_field_info_by_field_variable($field_variable);
  380. if (!$extraFieldInfo) {
  381. continue;
  382. }
  383. $extraFieldObj = $em->getRepository('ChamiloCoreBundle:ExtraField')->find($extraFieldInfo['id']);
  384. $search = [
  385. 'field' => $extraFieldObj,
  386. 'user' => $user
  387. ];
  388. /** @var ExtraFieldSavedSearch $saved */
  389. $saved = $em->getRepository('ChamiloCoreBundle:ExtraFieldSavedSearch')->findOneBy($search);
  390. if ($saved) {
  391. $saved
  392. ->setField($extraFieldObj)
  393. ->setUser($user)
  394. ->setValue($value)
  395. ;
  396. $em->merge($saved);
  397. } else {
  398. $saved = new ExtraFieldSavedSearch();
  399. $saved
  400. ->setField($extraFieldObj)
  401. ->setUser($user)
  402. ->setValue($value)
  403. ;
  404. $em->persist($saved);
  405. }
  406. $em->flush();
  407. }
  408. Display::addFlash(Display::return_message(get_lang('Saved')));
  409. header('Location:'.api_get_self());
  410. exit;
  411. }
  412. $tpl = new Template(get_lang('Diagnosis'));
  413. $tpl->assign('form', $userFormToString);
  414. $content = $tpl->fetch('default/user_portal/search_extra_field.tpl');
  415. $tpl->assign('content', $content);
  416. $tpl->display_one_col_template();