lp_list_search.php 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. <?php
  2. /**
  3. * Script to draw the results from a query
  4. * @package: dokeos.learnpath
  5. * @author: Diego Escalante Urrelo <diegoe@gmail.com>
  6. * @author: Marco Antonio Villegas Vega <marvil07@gmail.com>
  7. */
  8. require api_get_path(LIBRARY_PATH).'search/search_widget.php';
  9. require api_get_path(LIBRARY_PATH).'search/DokeosQuery.php';
  10. require_once(api_get_path(LIBRARY_PATH).'search/IndexableChunk.class.php');
  11. require_once api_get_path(LIBRARY_PATH).'/specific_fields_manager.lib.php';
  12. $htmlHeadXtra[] = '
  13. <link rel="stylesheet" type="text/css" href="'. api_get_path(WEB_PATH) .'main/newscorm/lp_list_search.css" />
  14. ';
  15. event_access_tool(TOOL_SEARCH);
  16. $interbreadcrumb[]= array ("url"=>"./index.php", "name"=> get_lang(ucfirst(TOOL_SEARCH)));
  17. search_widget_prepare(&$htmlHeadXtra);
  18. Display::display_header(null,'Path');
  19. if (api_get_setting('search_enabled') !== 'true') {
  20. Display::display_error_message(get_lang('SearchFeatureNotEnabledComment'));
  21. } else {
  22. if (!empty($_GET['action'])) {
  23. search_widget_show($_GET['action']);
  24. } else {
  25. search_widget_show();
  26. }
  27. }
  28. // initialize
  29. $op = 'or';
  30. if (!empty($_REQUEST['operator']) && in_array($op, array('or','and'))) {
  31. $op = $_REQUEST['operator'];
  32. }
  33. $query = stripslashes(htmlspecialchars_decode($_REQUEST['query'], ENT_QUOTES));
  34. $mode = 'default';
  35. if (in_array($_GET['mode'], array('gallery', 'default'))) {
  36. $mode = $_GET['mode'];
  37. }
  38. $term_array = array();
  39. $specific_fields = get_specific_field_list();
  40. foreach ($specific_fields as $specific_field) {
  41. if (!empty($_REQUEST[ 'sf_'. $specific_field['code'] ])) {
  42. $values = $_REQUEST[ 'sf_'. $specific_field['code'] ];
  43. if (in_array('__all__', $values)) {
  44. $sf_terms_for_code = xapian_get_all_terms(1000, $specific_field['code']);
  45. foreach ($sf_terms_for_code as $term) {
  46. if (!empty($term)) {
  47. $term_array[] = dokeos_get_boolean_query($term['name']); //here name includes prefix
  48. }
  49. }
  50. } else {
  51. foreach ($values as $term) {
  52. if (!empty($term)) {
  53. $prefix = $specific_field['code'];
  54. $term_array[] = dokeos_get_boolean_query($prefix . $term);
  55. }
  56. }
  57. }
  58. }
  59. }
  60. // get right group of terms to show on multiple select
  61. $fixed_queries = array();
  62. $course_filter = NULL;
  63. if ( ($cid=api_get_course_id()) != -1 ) {
  64. // results only from actual course
  65. $course_filter = dokeos_get_boolean_query(XAPIAN_PREFIX_COURSEID . $cid);
  66. }
  67. if (count($term_array)) {
  68. $fixed_queries = dokeos_join_queries($term_array, null, $op);
  69. if ($course_filter != NULL) {
  70. $fixed_queries = dokeos_join_queries($fixed_queries, $course_filter, 'and');
  71. }
  72. } else {
  73. if (!empty($query)) {
  74. $fixed_queries = array($course_filter);
  75. }
  76. }
  77. list($count, $results) = dokeos_query_query(mb_convert_encoding($query,'UTF-8',$charset), 0, 1000, $fixed_queries);
  78. // prepare blocks to show
  79. $blocks = array();
  80. if ($count > 0) {
  81. foreach ($results as $result) {
  82. // Fill the result array
  83. if (empty($result['thumbnail'])) {
  84. $result['thumbnail'] = '../img/no_document_thumb.jpg';
  85. }
  86. if (!empty($result['url'])) {
  87. $a_prefix = '<a href="'.$result['url'].'">';
  88. $a_sufix = '</a>';
  89. } else {
  90. $a_prefix = '';
  91. $a_sufix = '';
  92. }
  93. if ($mode == 'gallery') {
  94. $title = $a_prefix.str_replace('_',' ',$result['title']). $a_sufix;
  95. $blocks[] = array(
  96. $a_prefix .'<img src="'.$result['thumbnail'].'" />'. $a_sufix .'<br />'.$title.'<br />'.$result['author'],
  97. );
  98. } else {
  99. $title = '<div style="text-align:left;">'. $a_prefix . $result['title']. $a_sufix .(!empty($result['author'])?$result['author']:'').'<div>';
  100. $blocks[] = array(
  101. $title,
  102. );
  103. }
  104. }
  105. }
  106. // show results
  107. if (count($blocks) > 0) {
  108. $s = new SortableTableFromArray($blocks);
  109. $s->display_mode = $mode;//default
  110. $s->display_mode_params = 3;
  111. $s->per_page = 9;
  112. $additional_parameters = array(
  113. 'mode' => $mode,
  114. 'action' => 'search',
  115. 'query' => $_REQUEST['query'],
  116. );
  117. $get_params = '';
  118. foreach ($specific_fields as $specific_field) {
  119. if (isset($_REQUEST[ 'sf_'. $specific_field['code'] ])) {
  120. $values = $_REQUEST[ 'sf_'. $specific_field['code'] ];
  121. $additional_parameters[ 'sf_'. $specific_field['code'] ] = $values;
  122. foreach ( $values as $value ) {
  123. $get_params .= '&sf_' . $specific_field['code'] .'[]='. $value;
  124. }
  125. $get_params .= '&';
  126. }
  127. }
  128. $additional_parameters['operator'] = $op;
  129. $s->additional_parameters = $additional_parameters;
  130. if ($mode == 'default') {
  131. $s->set_header(0, get_lang(ucfirst(TOOL_SEARCH)));
  132. }
  133. $search_link = '<a href="%ssearch/index.php?mode=%s&action=search&query=%s%s">';
  134. $mode_selector = '<div id="mode-selector">';
  135. $mode_selector .= sprintf($search_link, api_get_path(WEB_CODE_PATH), 'gallery', $_REQUEST['query'], $get_params);
  136. $mode_selector .= '<img src="../img/'. (($mode=='gallery')?'ButtonGallOn':'ButtonGallOff') .'.png" /></a>';
  137. $mode_selector .= sprintf($search_link, api_get_path(WEB_CODE_PATH), 'default', $_REQUEST['query'], $get_params);
  138. $mode_selector .= '<img src="../img/'.(($mode=='default')?'ButtonListOn':'ButtonListOff').'.png" /></a>';
  139. $mode_selector .= '</div>';
  140. echo '<div id="search-results-container">';
  141. echo $mode_selector;
  142. $s->display();
  143. echo '</div>';
  144. }
  145. Display::display_footer();
  146. ?>