search.php 23 KB

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