extra_field.ajax.php 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. <?php
  2. /* For licensing terms, see /license.txt */
  3. use Chamilo\CoreBundle\Entity\Tag;
  4. require_once '../global.inc.php';
  5. $action = isset($_GET['a']) ? $_GET['a'] : '';
  6. switch ($action) {
  7. case 'get_second_select_options':
  8. $type = isset($_REQUEST['type']) ? $_REQUEST['type'] : null;
  9. $field_id = isset($_REQUEST['field_id']) ? $_REQUEST['field_id'] : null;
  10. $option_value_id = isset($_REQUEST['option_value_id']) ? $_REQUEST['option_value_id'] : null;
  11. if (!empty($type) && !empty($field_id) && !empty($option_value_id)) {
  12. $field_options = new ExtraFieldOption($type);
  13. echo $field_options->get_second_select_field_options_by_field(
  14. $field_id,
  15. $option_value_id,
  16. true
  17. );
  18. }
  19. break;
  20. case 'search_tags':
  21. $type = isset($_REQUEST['type']) ? $_REQUEST['type'] : null;
  22. $fieldId = isset($_REQUEST['field_id']) ? $_REQUEST['field_id'] : null;
  23. $tag = isset($_REQUEST['tag']) ? $_REQUEST['tag'] : null;
  24. $extraFieldOption = new ExtraFieldOption($type);
  25. $result = [];
  26. $tags = Database::getManager()
  27. ->getRepository('ChamiloCoreBundle:Tag')
  28. ->createQueryBuilder('t')
  29. ->where("t.tag LIKE :tag")
  30. ->andWhere('t.fieldId = :field')
  31. ->setParameter('field', $fieldId)
  32. ->setParameter('tag', "$tag%")
  33. ->getQuery()
  34. ->getResult();
  35. /** @var Tag $tag */
  36. foreach ($tags as $tag) {
  37. $result[] = [
  38. 'key' => $tag->getTag(),
  39. 'value' => $tag->getTag()
  40. ];
  41. }
  42. echo json_encode($result);
  43. break;
  44. case 'search_options_from_tags':
  45. $type = isset($_REQUEST['type']) ? $_REQUEST['type'] : null;
  46. $fieldId = isset($_REQUEST['field_id']) ? $_REQUEST['field_id'] : null;
  47. $tag = isset($_REQUEST['tag']) ? $_REQUEST['tag'] : null;
  48. $extraFieldOption = new ExtraFieldOption($type);
  49. $from = isset($_REQUEST['from']) ? $_REQUEST['from'] : '';
  50. $search = isset($_REQUEST['search']) ? $_REQUEST['search'] : '';
  51. $options = isset($_REQUEST['options']) ? json_decode($_REQUEST['options']) : '';
  52. $extraField = new ExtraField('session');
  53. $extraFieldInfo = $extraField->get_handler_field_info_by_field_variable(str_replace('extra_', '', $from));
  54. $id = $extraFieldInfo['id'];
  55. $extraFieldInfoTag = $extraField->get_handler_field_info_by_field_variable(str_replace('extra_', '', $search));
  56. $tagId = $extraFieldInfoTag['id'];
  57. $table = Database::get_main_table(TABLE_EXTRA_FIELD_VALUES);
  58. $tagRelExtraTable = Database::get_main_table(TABLE_MAIN_EXTRA_FIELD_REL_TAG);
  59. $tagTable = Database::get_main_table(TABLE_MAIN_TAG);
  60. $optionsTable = Database::get_main_table(TABLE_EXTRA_FIELD_OPTIONS);
  61. $sql = "SELECT DISTINCT t.* FROM $tagRelExtraTable te INNER JOIN $tagTable t
  62. ON (t.id = te.tag_id)
  63. WHERE te.field_id = $tagId AND te.item_id IN (
  64. SELECT DISTINCT item_id
  65. FROM $table
  66. WHERE
  67. field_id = $id AND
  68. value IN ('".implode("','", $options)."')
  69. )
  70. ";
  71. $sql = "SELECT DISTINCT t.*, v.value, o.display_text
  72. FROM $tagRelExtraTable te
  73. INNER JOIN $tagTable t
  74. ON (t.id = te.tag_id AND te.field_id = t.field_id AND te.field_id = $tagId)
  75. INNER JOIN $table v
  76. ON (te.item_id = v.item_id AND v.field_id = $id)
  77. INNER JOIN $optionsTable o
  78. ON (o.option_value = v.value)
  79. WHERE v.value IN ('".implode("','", $options)."')
  80. ORDER BY v.value
  81. ";
  82. $result = Database::query($sql);
  83. $result = Database::store_result($result);
  84. $options = [];
  85. $groups = [];
  86. foreach ($result as $data) {
  87. $groups[$data['display_text']][$data['id']] = [
  88. 'id' => $data['id'],
  89. 'text' => $data['tag']
  90. ];
  91. }
  92. foreach ($groups as $key => $data) {
  93. $options[] = [
  94. 'text' => $key,
  95. 'children' => $groups[$key]
  96. ];
  97. }
  98. echo json_encode($options);
  99. break;
  100. default:
  101. exit;
  102. break;
  103. }
  104. exit;