search.php 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768
  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. $("#collapseOne").collapse("hide");
  214. $("#collapseTwo").collapse("hide");
  215. $("#collapseThree").collapse("hide");
  216. $("#collapseFour").collapse("hide");
  217. $("#collapseFive").collapse("hide");
  218. $("#collapseSix").collapse("hide");
  219. $("#collapseSeven").collapse("hide");
  220. /*$("#filiere_panel").hide();
  221. $("#dispo_panel").hide();
  222. $("#dispo_pendant_panel").hide();
  223. $("#niveau_panel").hide();
  224. $("#methode_panel").hide();
  225. $("#themes_panel").hide();
  226. $("#objectifs_panel").hide();*/
  227. $("#filiere").on("click", function() {
  228. $("#filiere_panel").toggle();
  229. return false;
  230. });
  231. $("#dispo").on("click", function() {
  232. $("#dispo_panel").toggle();
  233. return false;
  234. });
  235. $("#dispo_pendant").on("click", function() {
  236. $("#dispo_pendant_panel").toggle();
  237. return false;
  238. });
  239. $("#niveau").on("click", function() {
  240. $("#niveau_panel").toggle();
  241. return false;
  242. });
  243. $("#methode").on("click", function() {
  244. $("#methode_panel").toggle();
  245. return false;
  246. });
  247. $("#themes").on("click", function() {
  248. $("#themes_panel").toggle();
  249. return false;
  250. });
  251. $("#objectifs").on("click", function() {
  252. $("#objectifs_panel").toggle();
  253. return false;
  254. });
  255. });
  256. </script>';
  257. $userForm->addHtml('<div class="panel-group" id="search_extrafield" role="tablist" aria-multiselectable="true">');
  258. $userForm->addHtml('<div class="panel panel-default">');
  259. $userForm->addHtml('<div class="panel-heading"><a role="button" data-toggle="collapse" data-parent="#search_extrafield" href="#collapseZero" aria-expanded="true" aria-controls="collapseZero">' .
  260. get_lang('DiagnosticForm') . '</a></div>');
  261. $userForm->addHtml('<div id="collapseZero" class="panel-collapse collapse in" role="tabpanel" aria-labelledby="headingZero">');
  262. $userForm->addHtml('<div class="panel-body"><p class="text-info">');
  263. $userForm->addHtml(get_lang('DiagnosticIntroduction'));
  264. $userForm->addHtml('</div></div></div></div>');
  265. $userForm->addHtml('<div class="panel-group" id="search_extrafield" role="tablist" aria-multiselectable="true">');
  266. $userForm->addHtml('<div class="panel panel-default">');
  267. $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>');
  268. $userForm->addHtml('<div id="collapseOne" class="panel-collapse collapse in" role="tabpanel" aria-labelledby="headingOne">');
  269. $userForm->addHtml('<div class="panel-body"><p class="text-info">' . get_lang('FiliereExplanation') .'</p>');
  270. $fieldsToShow = [
  271. 'statusocial',
  272. 'filiere_user',
  273. 'filiereprecision',
  274. 'filiere_want_stage',
  275. ];
  276. $extra = $extraField->addElements(
  277. $userForm,
  278. api_get_user_id(),
  279. [],
  280. $filter,
  281. true,
  282. $fieldsToShow,
  283. $fieldsToShow,
  284. [],
  285. [],
  286. false,
  287. $forceShowFields //$forceShowFields = false
  288. );
  289. $jqueryExtra .= $extra['jquery_ready_content'];
  290. $fieldsToShow = [
  291. 'filiere'
  292. ];
  293. $extra = $extraFieldSession->addElements(
  294. $userForm,
  295. api_get_user_id(),
  296. [],
  297. $filter,
  298. true,
  299. $fieldsToShow,
  300. $fieldsToShow,
  301. [],
  302. [],
  303. false,
  304. $forceShowFields //$forceShowFields = false
  305. );
  306. $jqueryExtra .= $extra['jquery_ready_content'];
  307. $userForm->addHtml('</div></div></div>');
  308. $userForm->addHtml('<div class="panel panel-default">');
  309. $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>');
  310. $userForm->addHtml('<div id="collapseTwo" class="panel-collapse collapse in" role="tabpanel" aria-labelledby="headingTwo">');
  311. $userForm->addHtml('<div class="panel-body"><p class="text-info">' . get_lang('DisponibiliteAvantExplanation') . '</p>');
  312. $extra = $extraFieldSession->addElements(
  313. $userForm,
  314. '',
  315. [],
  316. $filter,
  317. true,
  318. array('access_start_date', 'access_end_date'),
  319. [],
  320. [],
  321. [],
  322. false,
  323. $forceShowFields //$forceShowFields = false
  324. );
  325. $jqueryExtra .= $extra['jquery_ready_content'];
  326. $elements = $userForm->getElements();
  327. $variables = ['access_start_date', 'access_end_date'];
  328. foreach ($elements as $element) {
  329. $element->setAttribute('extra_label_class', 'red_underline');
  330. }
  331. $fieldsToShow = [
  332. 'heures_disponibilite_par_semaine',
  333. ];
  334. $extra = $extraField->addElements(
  335. $userForm,
  336. api_get_user_id(),
  337. [],
  338. $filter,
  339. true,
  340. $fieldsToShow,
  341. $fieldsToShow,
  342. [],
  343. [],
  344. false,
  345. $forceShowFields //$forceShowFields = false
  346. );
  347. $jqueryExtra .= $extra['jquery_ready_content'];
  348. $userForm->addHtml('</div></div></div>');
  349. $userForm->addHtml('<div class="panel panel-default">');
  350. $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>');
  351. $userForm->addHtml('<div id="collapseThree" class="panel-collapse collapse in" role="tabpanel" aria-labelledby="headingThree">');
  352. $userForm->addHtml('<div class="panel-body"><p class="text-info">' . get_lang('DisponibilitePendantMonStageExplanation') . '</p>');
  353. $fieldsToShow = [
  354. 'datedebutstage',
  355. 'datefinstage',
  356. 'je_ne_connais_pas_encore_mes_dates_de_stage',
  357. 'poursuiteapprentissagestage',
  358. 'heures_disponibilite_par_semaine_stage'
  359. ];
  360. $extra = $extraField->addElements(
  361. $userForm,
  362. api_get_user_id(),
  363. [],
  364. $filter,
  365. true,
  366. $fieldsToShow,
  367. $fieldsToShow,
  368. [],
  369. [],
  370. false,
  371. $forceShowFields //$forceShowFields = false
  372. );
  373. $jqueryExtra .= $extra['jquery_ready_content'];
  374. $userForm->addHtml('</div></div></div>');
  375. $userForm->addHtml('<div class="panel panel-default">');
  376. $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>');
  377. $userForm->addHtml('<div id="collapseFour" class="panel-collapse collapse in" role="tabpanel" aria-labelledby="headingFour">');
  378. $userForm->addHtml('<div class="panel-body"><p class="text-info">' . get_lang('ThemesObjectifsExplanation') . '</p>');
  379. $introductionTextList = [
  380. 'domaine' => get_lang('DomaineIntroduction'),
  381. $theme => get_lang('ThemeFieldIntroduction'),
  382. ];
  383. $fieldsToShow = [
  384. 'domaine',
  385. $theme
  386. ];
  387. $extra = $extraFieldSession->addElements(
  388. $userForm,
  389. api_get_user_id(),
  390. [],
  391. $filter,
  392. false, //tag as select
  393. $fieldsToShow,
  394. $fieldsToShow,
  395. $defaults,
  396. null,
  397. true,
  398. $forceShowFields, // $forceShowFields
  399. ['domaine' => 3, $theme => 5], // $separateExtraMultipleSelect
  400. [
  401. 'domaine' => [
  402. get_lang('Domaine').' 1',
  403. get_lang('Domaine').' 2',
  404. get_lang('Domaine').' 3'
  405. ],
  406. $theme => [
  407. get_lang('ThemeField').' 1',
  408. get_lang('ThemeField').' 2',
  409. get_lang('ThemeField').' 3',
  410. get_lang('ThemeField').' 4',
  411. get_lang('ThemeField').' 5'
  412. ],
  413. ],
  414. [],
  415. true, //$addEmptyOptionSelects
  416. $introductionTextList
  417. );
  418. $jqueryExtra .= $extra['jquery_ready_content'];
  419. $userForm->addHtml('</div></div></div>');
  420. $userForm->addHtml('<div class="panel panel-default">');
  421. $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>');
  422. $userForm->addHtml('<div id="collapseFive" class="panel-collapse collapse in" role="tabpanel" aria-labelledby="headingFive">');
  423. $userForm->addHtml('<div class="panel-body"><p class="text-info">' . get_lang('NiveauLangueExplanation') . '</p>');
  424. $fieldsToShow = [
  425. //'competenceniveau'
  426. 'ecouter',
  427. 'lire',
  428. 'participer_a_une_conversation',
  429. 's_exprimer_oralement_en_continu',
  430. 'ecrire'
  431. ];
  432. $extra = $extraFieldSession->addElements(
  433. $userForm,
  434. api_get_user_id(),
  435. [],
  436. $filter,
  437. true,
  438. $fieldsToShow,
  439. $fieldsToShow,
  440. $defaults,
  441. [],
  442. false, //$orderDependingDefaults = false,
  443. $forceShowFields //$forceShowFields = false
  444. );
  445. $jqueryExtra .= $extra['jquery_ready_content'];
  446. $userForm->addHtml('</div></div></div>');
  447. $userForm->addHtml('<div class="panel panel-default">');
  448. $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>');
  449. $userForm->addHtml('<div id="collapseSix" class="panel-collapse collapse in" role="tabpanel" aria-labelledby="headingSix">');
  450. $userForm->addHtml('<div class="panel-body"><p class="text-info">' . get_lang('ObjectifsApprentissageExplanation') . '</p>');
  451. $fieldsToShow = [
  452. 'objectif_apprentissage'
  453. ];
  454. $extra = $extraField->addElements(
  455. $userForm,
  456. api_get_user_id(),
  457. [],
  458. $filter,
  459. false,
  460. $fieldsToShow,
  461. $fieldsToShow,
  462. [],
  463. [],
  464. false,
  465. $forceShowFields //$forceShowFields = false
  466. );
  467. $jqueryExtra .= $extra['jquery_ready_content'];
  468. $userForm->addHtml('</div></div></div>');
  469. $userForm->addHtml('<div class="panel panel-default">');
  470. $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>');
  471. $userForm->addHtml('<div id="collapseSeven" class="panel-collapse collapse in" role="tabpanel" aria-labelledby="headingSeven">');
  472. $userForm->addHtml('<div class="panel-body"><p class="text-info">' . get_lang('MethodeTravailExplanation') . '</p>');
  473. $fieldsToShow = [
  474. 'methode_de_travaille',
  475. 'accompagnement'
  476. ];
  477. $extra = $extraField->addElements(
  478. $userForm,
  479. api_get_user_id(),
  480. [],
  481. $filter,
  482. true,
  483. $fieldsToShow,
  484. $fieldsToShow,
  485. [],
  486. [],
  487. false,
  488. $forceShowFields //$forceShowFields = false
  489. );
  490. $jqueryExtra .= $extra['jquery_ready_content'];
  491. $userForm->addHtml('</div></div></div>');
  492. $userForm->addHtml('</div>');
  493. $htmlHeadXtra[] ='<script>
  494. $(document).ready(function(){
  495. '.$jqueryExtra.'
  496. });
  497. </script>';
  498. $userForm->addButtonSave(get_lang('Save'));
  499. $userForm->setDefaults($defaults);
  500. /** @var HTML_QuickForm_select $element */
  501. $domaine1 = $userForm->getElementByName('extra_domaine[0]');
  502. $domaine2 = $userForm->getElementByName('extra_domaine[1]');
  503. $domaine3 = $userForm->getElementByName('extra_domaine[2]');
  504. $domainList = array_merge(
  505. is_array($domaine1) ? $domaine1->getValue() : [],
  506. is_array($domaine3) ? $domaine3->getValue() : [],
  507. is_array($domaine2) ? $domaine2->getValue() : []
  508. );
  509. $themeList = [];
  510. $extraField = new ExtraField('session');
  511. $resultOptions = $extraField->searchOptionsFromTags(
  512. 'extra_domaine',
  513. 'extra_'.$theme,
  514. $domainList
  515. );
  516. if ($resultOptions) {
  517. $resultOptions = array_column($resultOptions, 'tag', 'id');
  518. $resultOptions = array_filter($resultOptions);
  519. for ($i = 0; $i < 5; $i++) {
  520. /** @var HTML_QuickForm_select $theme */
  521. $themeElement = $userForm->getElementByName('extra_'.$theme.'['.$i.']');
  522. foreach ($resultOptions as $key => $value) {
  523. $themeElement->addOption($value, $value);
  524. }
  525. }
  526. }
  527. $userFormToString = $userForm->returnForm();
  528. if ($userForm->validate()) {
  529. // Saving to user extra fields
  530. $extraFieldValue = new ExtraFieldValue('user');
  531. $userData = $userForm->getSubmitValues();
  532. $userData['extra_diagnosis_completed'] = 1;
  533. $extraFieldValue->saveFieldValues(
  534. $userData,
  535. $forceShowFields,
  536. false,
  537. [],
  538. ['legal_accept']
  539. );
  540. // Saving to extra_field_saved_search
  541. /** @var \Chamilo\UserBundle\Entity\User $user */
  542. $user = $em->getRepository('ChamiloUserBundle:User')->find($userId);
  543. $sessionFields = [
  544. 'extra_access_start_date',
  545. 'extra_access_end_date',
  546. 'extra_filiere',
  547. 'extra_domaine',
  548. 'extra_domaine[0]',
  549. 'extra_domaine[1]',
  550. 'extra_domaine[3]',
  551. 'extra_temps-de-travail',
  552. //'extra_competenceniveau',
  553. 'extra_'.$theme,
  554. 'extra_'.$theme.'[0]',
  555. 'extra_'.$theme.'[1]',
  556. 'extra_'.$theme.'[2]',
  557. 'extra_'.$theme.'[3]',
  558. 'extra_'.$theme.'[4]',
  559. 'extra_ecouter',
  560. 'extra_lire',
  561. 'extra_participer_a_une_conversation',
  562. 'extra_s_exprimer_oralement_en_continu',
  563. 'extra_ecrire'
  564. ];
  565. foreach ($userData as $key => $value) {
  566. $found = strpos($key, '__persist__');
  567. if ($found === false) {
  568. continue;
  569. }
  570. }
  571. if (isset($userData['extra_filiere_want_stage']) &&
  572. isset($userData['extra_filiere_want_stage']['extra_filiere_want_stage'])
  573. ) {
  574. $wantStage = $userData['extra_filiere_want_stage']['extra_filiere_want_stage'];
  575. if ($wantStage === 'yes') {
  576. if (isset($userData['extra_filiere_user'])) {
  577. $userData['extra_filiere'] = [];
  578. $userData['extra_filiere']['extra_filiere'] = $userData['extra_filiere_user']['extra_filiere_user'];
  579. }
  580. }
  581. }
  582. // save in ExtraFieldSavedSearch.
  583. foreach ($userData as $key => $value) {
  584. if (substr($key, 0, 6) != 'extra_' && substr($key, 0, 7) != '_extra_') {
  585. continue;
  586. }
  587. if (!in_array($key, $sessionFields)) {
  588. continue;
  589. }
  590. $field_variable = substr($key, 6);
  591. $extraFieldInfo = $extraFieldValueSession
  592. ->getExtraField()
  593. ->get_handler_field_info_by_field_variable($field_variable)
  594. ;
  595. if (!$extraFieldInfo) {
  596. continue;
  597. }
  598. $extraFieldObj = $em
  599. ->getRepository('ChamiloCoreBundle:ExtraField')
  600. ->find($extraFieldInfo['id'])
  601. ;
  602. $search = [
  603. 'field' => $extraFieldObj,
  604. 'user' => $user
  605. ];
  606. /** @var ExtraFieldSavedSearch $saved */
  607. $saved = $em->getRepository('ChamiloCoreBundle:ExtraFieldSavedSearch')->findOneBy($search);
  608. if ($saved) {
  609. $saved
  610. ->setField($extraFieldObj)
  611. ->setUser($user)
  612. ->setValue($value)
  613. ;
  614. $em->merge($saved);
  615. } else {
  616. $saved = new ExtraFieldSavedSearch();
  617. $saved
  618. ->setField($extraFieldObj)
  619. ->setUser($user)
  620. ->setValue($value)
  621. ;
  622. $em->persist($saved);
  623. }
  624. $em->flush();
  625. }
  626. $superiorUserList = UserManager::getStudentBossList($userInfo['user_id']);
  627. if ($superiorUserList) {
  628. $url = api_get_path(WEB_PATH).'load_search.php?user_id='.$userInfo['user_id'];
  629. $urlContact = api_get_path(WEB_CODE_PATH) . 'messages/inbox.php?f=social';
  630. $subject = sprintf(get_lang('DiagnosisFromUserX'), $userInfo['complete_name']);
  631. $message = sprintf(get_lang('DiagnosisFromUserXLangXWithLinkXContactAtX'), $userInfo['complete_name'], $userInfo['language'], $url, $urlContact);
  632. foreach ($superiorUserList as $bossData) {
  633. $bossId = $bossData['boss_id'];
  634. MessageManager::send_message_simple(
  635. $bossId,
  636. $subject,
  637. $message
  638. );
  639. }
  640. }
  641. header('Location:'.api_get_self().'?result=1');
  642. exit;
  643. }
  644. $result = isset($_GET['result']) ? true : false;
  645. $tpl = new Template(get_lang('Diagnosis'));
  646. if ($result === false) {
  647. $tpl->assign('form', $userFormToString);
  648. } else {
  649. Display::addFlash(Display::return_message(get_lang('SessionSearchSavedExplanation')));
  650. }
  651. $content = $tpl->fetch($tpl->get_template('user_portal/search_extra_field.tpl'));
  652. $tpl->assign('content', $content);
  653. $tpl->display_one_col_template();