search.php 25 KB

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