search.php 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  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. $extraField = new ExtraField('session');
  18. $extraFieldValue = new ExtraFieldValue('session');
  19. $extra = $extraField->addElements($form, '', [], true, true);
  20. $form->addButtonSave(get_lang('Save'), 'save');
  21. $result = SessionManager::getGridColumns('simple');
  22. $columns = $result['columns'];
  23. $column_model = $result['column_model'];
  24. $defaults = [];
  25. $tagsData = [];
  26. if (!empty($items)) {
  27. /** @var ExtraFieldSavedSearch $item */
  28. foreach ($items as $item) {
  29. $variable = 'extra_'.$item->getField()->getVariable();
  30. if ($item->getField()->getFieldType() == Extrafield::FIELD_TYPE_TAG) {
  31. $tagsData[$variable] = $item->getValue();
  32. }
  33. $defaults[$variable] = $item->getValue();
  34. }
  35. }
  36. $form->setDefaults($defaults);
  37. $view = $form->returnForm();
  38. $filterToSend = '';
  39. if ($form->validate()) {
  40. $params = $form->getSubmitValues();
  41. if (isset($params['save'])) {
  42. // save
  43. foreach ($params as $key => $value) {
  44. $found = strpos($key, '__persist__');
  45. if ($found === false) {
  46. continue;
  47. }
  48. $tempKey = str_replace('__persist__', '', $key);
  49. if (!isset($params[$tempKey])) {
  50. $params[$tempKey] = array();
  51. }
  52. }
  53. // Parse params.
  54. foreach ($params as $key => $value) {
  55. if (substr($key, 0, 6) != 'extra_' && substr($key, 0, 7) != '_extra_') {
  56. continue;
  57. }
  58. $field_variable = substr($key, 6);
  59. $extraFieldInfo = $extraFieldValue
  60. ->getExtraField()
  61. ->get_handler_field_info_by_field_variable($field_variable);
  62. if (!$extraFieldInfo) {
  63. continue;
  64. }
  65. $user = $em->getRepository('ChamiloUserBundle:User')->find($userId);
  66. $extraFieldObj = $em->getRepository('ChamiloCoreBundle:ExtraField')->find($extraFieldInfo['id']);
  67. $search = [
  68. 'field' => $extraFieldObj,
  69. 'user' => $user
  70. ];
  71. /** @var ExtraFieldSavedSearch $saved */
  72. $saved = $em->getRepository('ChamiloCoreBundle:ExtraFieldSavedSearch')->findOneBy($search);
  73. if ($saved) {
  74. $saved
  75. ->setField($extraFieldObj)
  76. ->setUser($user)
  77. ->setValue($value)
  78. ;
  79. $em->merge($saved);
  80. } else {
  81. $saved = new ExtraFieldSavedSearch();
  82. $saved
  83. ->setField($extraFieldObj)
  84. ->setUser($user)
  85. ->setValue($value)
  86. ;
  87. $em->persist($saved);
  88. }
  89. $em->flush();
  90. }
  91. Display::addFlash(Display::return_message(get_lang('Saved')));
  92. header("Location: ".api_get_self());
  93. exit;
  94. } else {
  95. // Search
  96. $filters = [];
  97. // Parse params.
  98. foreach ($params as $key => $value) {
  99. if (substr($key, 0, 6) != 'extra_' && substr($key, 0, 7) != '_extra_') {
  100. continue;
  101. }
  102. if (!empty($value)) {
  103. $filters[$key] = $value;
  104. }
  105. }
  106. $filterToSend = [];
  107. if (!empty($filters)) {
  108. $filterToSend = ['groupOp' => 'AND'];
  109. if ($filters) {
  110. $count = 1;
  111. $countExtraField = 1;
  112. foreach ($result['column_model'] as $column) {
  113. if ($count > 5) {
  114. if (isset($filters[$column['name']])) {
  115. $defaultValues['jqg'.$countExtraField] = $filters[$column['name']];
  116. $filterToSend['rules'][] = ['field' => $column['name'], 'op' => 'cn', 'data' => $filters[$column['name']]];
  117. }
  118. $countExtraField++;
  119. }
  120. $count++;
  121. }
  122. }
  123. }
  124. }
  125. }
  126. $extraField = new ExtraField('user');
  127. $userForm = new FormValidator('user_form', 'post', api_get_self());
  128. $userForm->addHeader(get_lang('User'));
  129. $extra = $extraField->addElements($userForm, api_get_user_id(), [], true, true, array('heures-disponibilite-par-semaine'));
  130. $userForm->addButtonSave(get_lang('Save'));
  131. $userFormToString = $userForm->returnForm();
  132. if ($userForm->validate()) {
  133. $extraFieldValue = new ExtraFieldValue('user');
  134. $user_data = $userForm->getSubmitValues();
  135. $extraFieldValue->saveFieldValues($user_data);
  136. }
  137. $tpl = new Template(get_lang('Diagnosis'));
  138. $tpl->assign('form', $view.$userFormToString);
  139. $content = $tpl->fetch('default/user_portal/search_extra_field.tpl');
  140. $tpl->assign('content', $content);
  141. $tpl->display_one_col_template();