search.php 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637
  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. $filter = false;
  20. $extraFieldValue = new ExtraFieldValue('user');
  21. $wantStage = $extraFieldValue->get_values_by_handler_and_field_variable(api_get_user_id(), 'filiere_want_stage');
  22. $hide = true;
  23. if ($wantStage !== false) {
  24. $hide = $wantStage['value'] === 'yes';
  25. }
  26. $defaultValueStatus = 'extraFiliere.hide()';
  27. if ($hide === false) {
  28. $defaultValueStatus = '';
  29. }
  30. $url = api_get_path(WEB_AJAX_PATH).'extra_field.ajax.php?a=order&user_id='.$userId;
  31. // Theme fix
  32. $lang = api_get_interface_language();
  33. $theme = 'theme_fr';
  34. switch ($lang) {
  35. case 'french2':
  36. case 'french':
  37. $theme = 'theme_fr';
  38. break;
  39. case 'german2':
  40. case 'german':
  41. $theme = 'theme_de';
  42. break;
  43. }
  44. $htmlHeadXtra[] ='<script>
  45. $(document).ready(function() {
  46. var themeDefault = "extra_'.$theme.'";
  47. var extraFiliere = $("input[name=\'extra_filiere[extra_filiere]\']").parent().parent().parent().parent();
  48. '.$defaultValueStatus.'
  49. $("input[name=\'extra_filiere_want_stage[extra_filiere_want_stage]\']").change(function() {
  50. if ($(this).val() == "no") {
  51. extraFiliere.show();
  52. } else {
  53. extraFiliere.hide();
  54. }
  55. });
  56. $("#extra_domaine").parent().append(
  57. $("<a>", {
  58. "class": "btn ajax btn-default",
  59. "href": "'.$url.'&field_variable=extra_domaine",
  60. "text": "'.get_lang('Order').'"
  61. })
  62. );
  63. $("#extra_theme").parent().append(
  64. $("<a>", {
  65. "class": "btn ajax btn-default",
  66. "href": "'.$url.'&field_variable=extra_theme",
  67. "text": "'.get_lang('Order').'"
  68. })
  69. );
  70. $("#extra_theme_fr").parent().append(
  71. $("<a>", {
  72. "class": "btn ajax btn-default",
  73. "href": "'.$url.'&field_variable=extra_theme_fr",
  74. "text": "'.get_lang('Order').'"
  75. })
  76. );
  77. $("#extra_theme_de").parent().append(
  78. $("<a>", {
  79. "class": "btn ajax btn-default",
  80. "href": "'.$url.'&field_variable=extra_theme_de",
  81. "text": "'.get_lang('Order').'"
  82. })
  83. );
  84. $("#extra_domaine").on("change", function() {
  85. var domainList = [];
  86. $( "#extra_domaine option:selected" ).each(function() {
  87. domainList.push($(this).val());
  88. });
  89. var domainListToString = JSON.stringify(domainList);
  90. $.ajax({
  91. contentType: "application/x-www-form-urlencoded",
  92. type: "GET",
  93. url: "'.api_get_path(WEB_AJAX_PATH).'extra_field.ajax.php?a=search_options_from_tags&type=session&from=extra_domaine&search="+themeDefault+"&options="+domainListToString,
  94. success: function(data) {
  95. $("#"+themeDefault).find("option").remove().end();
  96. $("#"+themeDefault).empty();
  97. var selectToString = "";
  98. jQuery.each(JSON.parse(data), function(i, item) {
  99. selectToString += "<optgroup label=\'"+item.text+"\'>";
  100. jQuery.each(item.children, function(j, data) {
  101. console.log(data);
  102. if (data.text != "") {
  103. selectToString += "<option value=\'"+data.text+"\'> " +data.text+"</option>"
  104. }
  105. });
  106. selectToString += "</optgroup>";
  107. });
  108. $("#"+themeDefault).html(selectToString);
  109. $("#"+themeDefault).selectpicker("refresh");
  110. }
  111. });
  112. });
  113. });
  114. </script>';
  115. $form->addButtonSave(get_lang('Save'), 'save');
  116. $result = SessionManager::getGridColumns('simple');
  117. $columns = $result['columns'];
  118. $column_model = $result['column_model'];
  119. $defaults = [];
  120. $tagsData = [];
  121. if (!empty($items)) {
  122. /** @var ExtraFieldSavedSearch $item */
  123. foreach ($items as $item) {
  124. $variable = 'extra_'.$item->getField()->getVariable();
  125. if ($item->getField()->getFieldType() == Extrafield::FIELD_TYPE_TAG) {
  126. $tagsData[$variable] = $item->getValue();
  127. }
  128. $defaults[$variable] = $item->getValue();
  129. }
  130. }
  131. $form->setDefaults($defaults);
  132. //$view = $form->returnForm();
  133. $filterToSend = '';
  134. if ($form->validate()) {
  135. $params = $form->getSubmitValues();
  136. /** @var \Chamilo\UserBundle\Entity\User $user */
  137. $user = $em->getRepository('ChamiloUserBundle:User')->find($userId);
  138. if (isset($params['save'])) {
  139. MessageManager::send_message_simple(
  140. $userId,
  141. get_lang('DiagnosisFilledSubject'),
  142. get_lang('DiagnosisFilledDescription')
  143. );
  144. $drhList = UserManager::getDrhListFromUser($userId);
  145. if ($drhList) {
  146. foreach ($drhList as $drhId) {
  147. $subject = sprintf(get_lang('UserXHasFilledTheDiagnosis'), $userInfo['complete_name']);
  148. $content = sprintf(get_lang('UserXHasFilledTheDiagnosisDescription'), $userInfo['complete_name']);
  149. MessageManager::send_message_simple($drhId, $subject, $content);
  150. }
  151. }
  152. Display::addFlash(Display::return_message(get_lang('Saved')));
  153. header("Location: ".api_get_self());
  154. exit;
  155. } else {
  156. // Search
  157. $filters = [];
  158. // Parse params.
  159. foreach ($params as $key => $value) {
  160. if (substr($key, 0, 6) != 'extra_' && substr($key, 0, 7) != '_extra_') {
  161. continue;
  162. }
  163. if (!empty($value)) {
  164. $filters[$key] = $value;
  165. }
  166. }
  167. $filterToSend = [];
  168. if (!empty($filters)) {
  169. $filterToSend = ['groupOp' => 'AND'];
  170. if ($filters) {
  171. $count = 1;
  172. $countExtraField = 1;
  173. foreach ($result['column_model'] as $column) {
  174. if ($count > 5) {
  175. if (isset($filters[$column['name']])) {
  176. $defaultValues['jqg'.$countExtraField] = $filters[$column['name']];
  177. $filterToSend['rules'][] = ['field' => $column['name'], 'op' => 'cn', 'data' => $filters[$column['name']]];
  178. }
  179. $countExtraField++;
  180. }
  181. $count++;
  182. }
  183. }
  184. }
  185. }
  186. }
  187. $extraField = new ExtraField('user');
  188. $userForm = new FormValidator('user_form', 'post', api_get_self());
  189. $jqueryExtra = '';
  190. $htmlHeadXtra[] ='<script>
  191. $(document).ready(function() {
  192. $("#filiere_panel").hide();
  193. $("#dispo_panel").hide();
  194. $("#dispo_pendant_panel").hide();
  195. $("#niveau_panel").hide();
  196. $("#methode_panel").hide();
  197. $("#themes_panel").hide();
  198. $("#objectifs_panel").hide();
  199. $("#filiere").on("click", function() {
  200. $("#filiere_panel").toggle();
  201. return false;
  202. });
  203. $("#dispo").on("click", function() {
  204. $("#dispo_panel").toggle();
  205. return false;
  206. });
  207. $("#dispo_pendant").on("click", function() {
  208. $("#dispo_pendant_panel").toggle();
  209. return false;
  210. });
  211. $("#niveau").on("click", function() {
  212. $("#niveau_panel").toggle();
  213. return false;
  214. });
  215. $("#methode").on("click", function() {
  216. $("#methode_panel").toggle();
  217. return false;
  218. });
  219. $("#themes").on("click", function() {
  220. $("#themes_panel").toggle();
  221. return false;
  222. });
  223. $("#objectifs").on("click", function() {
  224. $("#objectifs_panel").toggle();
  225. return false;
  226. });
  227. });
  228. </script>';
  229. $panel = Display::panel(get_lang('FiliereExplanation'), '', '', '', '', 'filiere_panel');
  230. $userForm->addHeader(Display::url(get_lang('Filiere'), '#', ['id'=> 'filiere']).''.$panel);
  231. $fieldsToShow = [
  232. 'statusocial',
  233. 'filiere_user',
  234. 'filiereprecision',
  235. 'filiere_want_stage',
  236. ];
  237. $extra = $extraField->addElements(
  238. $userForm,
  239. api_get_user_id(),
  240. [],
  241. $filter,
  242. true,
  243. $fieldsToShow,
  244. $fieldsToShow,
  245. [],
  246. [],
  247. false,
  248. true //$forceShowFields = false
  249. );
  250. $jqueryExtra .= $extra['jquery_ready_content'];
  251. $fieldsToShow = [
  252. 'filiere'
  253. ];
  254. $extra = $extraFieldSession->addElements(
  255. $userForm,
  256. api_get_user_id(),
  257. [],
  258. $filter,
  259. true,
  260. $fieldsToShow,
  261. $fieldsToShow,
  262. [],
  263. [],
  264. false,
  265. true //$forceShowFields = false
  266. );
  267. $jqueryExtra .= $extra['jquery_ready_content'];
  268. $panel = Display::panel(get_lang('DisponibiliteAvantExplanation'), '', '', '', '', 'dispo_panel');
  269. $userForm->addHeader(Display::url(get_lang('DisponibiliteAvant'), '#', ['id'=> 'dispo']).''.$panel);
  270. $extra = $extraFieldSession->addElements(
  271. $userForm,
  272. '',
  273. [],
  274. $filter,
  275. true,
  276. array('access_start_date', 'access_end_date'),
  277. [],
  278. [],
  279. [],
  280. false,
  281. true //$forceShowFields = false
  282. );
  283. $jqueryExtra .= $extra['jquery_ready_content'];
  284. $elements = $userForm->getElements();
  285. $variables = ['access_start_date', 'access_end_date'];
  286. foreach ($elements as $element) {
  287. $element->setAttribute('extra_label_class', 'red_underline');
  288. }
  289. $fieldsToShow = [
  290. 'heures_disponibilite_par_semaine',
  291. ];
  292. $extra = $extraField->addElements(
  293. $userForm,
  294. api_get_user_id(),
  295. [],
  296. $filter,
  297. true,
  298. $fieldsToShow,
  299. $fieldsToShow,
  300. [],
  301. [],
  302. false,
  303. true //$forceShowFields = false
  304. );
  305. $jqueryExtra .= $extra['jquery_ready_content'];
  306. $panel = Display::panel(get_lang('DisponibilitePendantMonStageExplanation'), '', '', '', '', 'dispo_pendant_panel');
  307. $userForm->addHeader(Display::url(get_lang('DisponibilitePendantMonStage'), '#', ['id'=> 'dispo_pendant']).''.$panel);
  308. $fieldsToShow = [
  309. 'datedebutstage',
  310. 'datefinstage',
  311. 'poursuiteapprentissagestage',
  312. 'heures_disponibilite_par_semaine_stage'
  313. ];
  314. $extra = $extraField->addElements(
  315. $userForm,
  316. api_get_user_id(),
  317. [],
  318. $filter,
  319. true,
  320. $fieldsToShow,
  321. $fieldsToShow,
  322. [],
  323. [],
  324. false,
  325. true //$forceShowFields = false
  326. );
  327. $jqueryExtra .= $extra['jquery_ready_content'];
  328. $panel = Display::panel(get_lang('ThemesObjectifsExplanation'), '', '', '', '', 'themes_panel');
  329. $userForm->addHeader(Display::url(get_lang('ThemesObjectifs'), '#', ['id'=> 'themes']).''.$panel);
  330. $fieldsToShow = [
  331. 'domaine',
  332. $theme
  333. ];
  334. $specialUrlList = [
  335. $theme => api_get_path(WEB_AJAX_PATH).'extra_field.ajax.php?a=search_tags_from_diagnosis'
  336. ];
  337. $extra = $extraFieldSession->addElements(
  338. $userForm,
  339. api_get_user_id(),
  340. [],
  341. $filter,
  342. true,
  343. $fieldsToShow,
  344. $fieldsToShow,
  345. $defaults,
  346. $specialUrlList,
  347. true,
  348. true // $forceShowFields
  349. );
  350. $jqueryExtra .= $extra['jquery_ready_content'];
  351. $panel = Display::panel(get_lang('NiveauLangueExplanation'), '', '', '', '', 'niveau_panel');
  352. $userForm->addHeader(Display::url(get_lang('NiveauLangue'), '#', ['id'=> 'niveau']).''.$panel);
  353. $fieldsToShow = [
  354. //'competenceniveau'
  355. 'ecouter',
  356. 'lire',
  357. 'participer_a_une_conversation',
  358. 's_exprimer_oralement_en_continu',
  359. 'ecrire'
  360. ];
  361. $extra = $extraFieldSession->addElements(
  362. $userForm,
  363. api_get_user_id(),
  364. [],
  365. $filter,
  366. true,
  367. $fieldsToShow,
  368. $fieldsToShow,
  369. $defaults,
  370. [],
  371. false, //$orderDependingDefaults = false,
  372. true //$forceShowFields = false
  373. );
  374. $jqueryExtra .= $extra['jquery_ready_content'];
  375. $panel = Display::panel(get_lang('ObjectifsApprentissageExplanation'), '', '', '', '', 'objectifs_panel');
  376. $userForm->addHeader(Display::url(get_lang('ObjectifsApprentissage'), '#', ['id'=> 'objectifs']).''.$panel);
  377. $fieldsToShow = [
  378. 'objectif_apprentissage'
  379. ];
  380. $extra = $extraField->addElements(
  381. $userForm,
  382. api_get_user_id(),
  383. [],
  384. $filter,
  385. false,
  386. $fieldsToShow,
  387. $fieldsToShow,
  388. [],
  389. [],
  390. false,
  391. true //$forceShowFields = false
  392. );
  393. $jqueryExtra .= $extra['jquery_ready_content'];
  394. $panel = Display::panel(get_lang('MethodeTravailExplanation'), '', '', '', '', 'methode_panel');
  395. $userForm->addHeader(Display::url(get_lang('MethodeTravail'), '#', ['id'=> 'methode']).''.$panel);
  396. $fieldsToShow = [
  397. 'methode_de_travaille',
  398. 'accompagnement'
  399. ];
  400. $extra = $extraField->addElements(
  401. $userForm,
  402. api_get_user_id(),
  403. [],
  404. $filter,
  405. true,
  406. $fieldsToShow,
  407. $fieldsToShow,
  408. [],
  409. [],
  410. false,
  411. true //$forceShowFields = false
  412. );
  413. $jqueryExtra .= $extra['jquery_ready_content'];
  414. $htmlHeadXtra[] ='<script>
  415. $(document).ready(function(){
  416. '.$jqueryExtra.'
  417. });
  418. </script>';
  419. $userForm->addButtonSave(get_lang('Save'));
  420. $userForm->setDefaults($defaults);
  421. $userFormToString = $userForm->returnForm();
  422. if ($userForm->validate()) {
  423. // Saving to user extra fields
  424. $extraFieldValue = new ExtraFieldValue('user');
  425. $userData = $userForm->getSubmitValues();
  426. $extraFieldValue->saveFieldValues($userData);
  427. // Saving to extra_field_saved_search
  428. /** @var \Chamilo\UserBundle\Entity\User $user */
  429. $user = $em->getRepository('ChamiloUserBundle:User')->find($userId);
  430. $sessionFields = [
  431. 'extra_access_start_date',
  432. 'extra_access_end_date',
  433. 'extra_filiere',
  434. 'extra_domaine',
  435. 'extra_temps-de-travail',
  436. //'extra_competenceniveau',
  437. 'extra_'.$theme,
  438. 'extra_ecouter',
  439. 'extra_lire',
  440. 'extra_participer_a_une_conversation',
  441. 'extra_s_exprimer_oralement_en_continu',
  442. 'extra_ecrire'
  443. ];
  444. foreach ($userData as $key => $value) {
  445. $found = strpos($key, '__persist__');
  446. if ($found === false) {
  447. continue;
  448. }
  449. $tempKey = str_replace('__persist__', '', $key);
  450. if (!isset($params[$tempKey])) {
  451. $params[$tempKey] = array();
  452. }
  453. }
  454. if (isset($userData['extra_filiere_want_stage']) &&
  455. isset($userData['extra_filiere_want_stage']['extra_filiere_want_stage'])
  456. ) {
  457. $wantStage = $userData['extra_filiere_want_stage']['extra_filiere_want_stage'];
  458. if ($wantStage === 'yes') {
  459. if (isset($userData['extra_filiere_user'])) {
  460. $userData['extra_filiere'] = [];
  461. $userData['extra_filiere']['extra_filiere'] = $userData['extra_filiere_user']['extra_filiere_user'];
  462. }
  463. }
  464. }
  465. // save in ExtraFieldSavedSearch.
  466. foreach ($userData as $key => $value) {
  467. if (substr($key, 0, 6) != 'extra_' && substr($key, 0, 7) != '_extra_') {
  468. continue;
  469. }
  470. if (!in_array($key, $sessionFields)) {
  471. continue;
  472. }
  473. $field_variable = substr($key, 6);
  474. $extraFieldInfo = $extraFieldValueSession
  475. ->getExtraField()
  476. ->get_handler_field_info_by_field_variable($field_variable);
  477. if (!$extraFieldInfo) {
  478. continue;
  479. }
  480. $extraFieldObj = $em->getRepository('ChamiloCoreBundle:ExtraField')->find($extraFieldInfo['id']);
  481. $search = [
  482. 'field' => $extraFieldObj,
  483. 'user' => $user
  484. ];
  485. /** @var ExtraFieldSavedSearch $saved */
  486. $saved = $em->getRepository('ChamiloCoreBundle:ExtraFieldSavedSearch')->findOneBy($search);
  487. if ($saved) {
  488. $saved
  489. ->setField($extraFieldObj)
  490. ->setUser($user)
  491. ->setValue($value)
  492. ;
  493. $em->merge($saved);
  494. } else {
  495. $saved = new ExtraFieldSavedSearch();
  496. $saved
  497. ->setField($extraFieldObj)
  498. ->setUser($user)
  499. ->setValue($value)
  500. ;
  501. $em->persist($saved);
  502. }
  503. $em->flush();
  504. }
  505. $superiorUserList = UserManager::getStudentBossList($userInfo['user_id']);
  506. if ($superiorUserList) {
  507. $url = api_get_path(WEB_PATH).'load_search.php?user_id='.$userInfo['user_id'];
  508. $subject = sprintf(get_lang('DiagnosisFromUserX'), $userInfo['complete_name']);
  509. $message = sprintf(get_lang('DiagnosisFromUserXWithLinkX'), $userInfo['complete_name'], $url);
  510. foreach ($superiorUserList as $bossData) {
  511. $bossId = $bossData['boss_id'];
  512. MessageManager::send_message_simple(
  513. $bossId,
  514. $subject,
  515. $message
  516. );
  517. }
  518. }
  519. Display::addFlash(Display::return_message(get_lang('SessionSearchSavedExplanation')));
  520. Display::addFlash(Display::url(get_lang('ReturnToDiagnosis'), api_get_self(), ['class' => 'btn btn-primary']));
  521. header('Location:'.api_get_self().'?result=1');
  522. exit;
  523. }
  524. $result = isset($_GET['result']) ? true : false;
  525. $tpl = new Template(get_lang('Diagnosis'));
  526. if ($result === false) {
  527. $tpl->assign('form', $userFormToString);
  528. }
  529. $content = $tpl->fetch('default/user_portal/search_extra_field.tpl');
  530. $tpl->assign('content', $content);
  531. $tpl->display_one_col_template();