search.php 16 KB

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