You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							208 lines
						
					
					
						
							6.6 KiB
						
					
					
				
			
		
		
	
	
							208 lines
						
					
					
						
							6.6 KiB
						
					
					
				<?php
 | 
						|
/* For licensing terms, see /license.txt */
 | 
						|
 | 
						|
/**
 | 
						|
 * Script to draw the results from a query
 | 
						|
 * @package chamilo.learnpath
 | 
						|
 * @author Diego Escalante Urrelo <diegoe@gmail.com>
 | 
						|
 * @author Marco Antonio Villegas Vega <marvil07@gmail.com>
 | 
						|
 * @author Julio Montoya <gugli100@gmail.com> bug fixing
 | 
						|
 *
 | 
						|
 */
 | 
						|
 | 
						|
require api_get_path(LIBRARY_PATH).'search/search_widget.php';
 | 
						|
require api_get_path(LIBRARY_PATH).'search/ChamiloQuery.php';
 | 
						|
require_once api_get_path(LIBRARY_PATH).'search/IndexableChunk.class.php';
 | 
						|
require_once api_get_path(LIBRARY_PATH).'specific_fields_manager.lib.php';
 | 
						|
 | 
						|
Event::event_access_tool(TOOL_SEARCH);
 | 
						|
 | 
						|
if (isset($_SESSION['gradebook'])) {
 | 
						|
    $gradebook = $_SESSION['gradebook'];
 | 
						|
}
 | 
						|
 | 
						|
if (!empty($gradebook) && $gradebook == 'view') {
 | 
						|
    $interbreadcrumb[] = array(
 | 
						|
        'url' => '../gradebook/'.$_SESSION['gradebook_dest'],
 | 
						|
        'name' => get_lang('ToolGradebook')
 | 
						|
    );
 | 
						|
}
 | 
						|
 | 
						|
$interbreadcrumb[] = array('url' => './index.php', 'name' => get_lang(ucfirst(TOOL_SEARCH)));
 | 
						|
search_widget_prepare($htmlHeadXtra);
 | 
						|
Display::display_header(null, 'Path');
 | 
						|
 | 
						|
if (api_get_setting('search_enabled') !== 'true') {
 | 
						|
    Display::display_error_message(get_lang('SearchFeatureNotEnabledComment'));
 | 
						|
} else {
 | 
						|
    if (!empty($_GET['action'])) {
 | 
						|
        search_widget_show($_GET['action']);
 | 
						|
    } else {
 | 
						|
        search_widget_show();
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
// Initialize.
 | 
						|
$op = 'or';
 | 
						|
if (!empty($_REQUEST['operator']) && in_array($op, array('or', 'and'))) {
 | 
						|
    $op = $_REQUEST['operator'];
 | 
						|
}
 | 
						|
 | 
						|
$query = null;
 | 
						|
 | 
						|
if (isset($_REQUEST['query'])) {
 | 
						|
    $query = stripslashes(htmlspecialchars_decode($_REQUEST['query'], ENT_QUOTES));
 | 
						|
}
 | 
						|
 | 
						|
$mode = 'default';
 | 
						|
if (isset($_GET['mode']) && in_array($_GET['mode'], array('gallery', 'default'))) {
 | 
						|
    $mode = $_GET['mode'];
 | 
						|
}
 | 
						|
 | 
						|
$term_array = array();
 | 
						|
$specific_fields = get_specific_field_list();
 | 
						|
foreach ($specific_fields as $specific_field) {
 | 
						|
    if (!empty($_REQUEST['sf_'.$specific_field['code']])) {
 | 
						|
        $values = $_REQUEST['sf_'.$specific_field['code']];
 | 
						|
        if (in_array('__all__', $values)) {
 | 
						|
            $sf_terms_for_code = xapian_get_all_terms(1000, $specific_field['code']);
 | 
						|
            foreach ($sf_terms_for_code as $term) {
 | 
						|
                if (!empty($term)) {
 | 
						|
                    $term_array[] = chamilo_get_boolean_query($term['name']); // Here name includes prefix.
 | 
						|
                }
 | 
						|
            }
 | 
						|
        } else {
 | 
						|
            foreach ($values as $term) {
 | 
						|
                if (!empty($term)) {
 | 
						|
                    $prefix = $specific_field['code'];
 | 
						|
                    $term_array[] = chamilo_get_boolean_query($prefix.$term);
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
    } else {
 | 
						|
        $sf_terms_for_code = xapian_get_all_terms(1000, $specific_field['code']);
 | 
						|
        foreach ($sf_terms_for_code as $term) {
 | 
						|
            if (!empty($term)) {
 | 
						|
                // Here name includes prefix.
 | 
						|
                $term_array[] = chamilo_get_boolean_query($term['name']);
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
// Get right group of terms to show on multiple select.
 | 
						|
$fixed_queries = array();
 | 
						|
$course_filter = null;
 | 
						|
if (($cid = api_get_course_id()) != -1) {
 | 
						|
    // Results only from actual course.
 | 
						|
    $course_filter = chamilo_get_boolean_query(XAPIAN_PREFIX_COURSEID.$cid);
 | 
						|
}
 | 
						|
 | 
						|
if (count($term_array)) {
 | 
						|
    $fixed_queries = chamilo_join_queries($term_array, null, $op);
 | 
						|
 | 
						|
    if ($course_filter != null) {
 | 
						|
        $fixed_queries = chamilo_join_queries(
 | 
						|
            $fixed_queries,
 | 
						|
            $course_filter,
 | 
						|
            'and'
 | 
						|
        );
 | 
						|
    }
 | 
						|
} else {
 | 
						|
    if (!empty($query)) {
 | 
						|
        $fixed_queries = array($course_filter);
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
if ($query) {
 | 
						|
    list($count, $results) = chamilo_query_query(
 | 
						|
        api_convert_encoding($query, 'UTF-8', $charset),
 | 
						|
        0,
 | 
						|
        1000,
 | 
						|
        $fixed_queries
 | 
						|
    );
 | 
						|
} else {
 | 
						|
    $count = 0;
 | 
						|
    $results = [];
 | 
						|
}
 | 
						|
 | 
						|
// Prepare blocks to show.
 | 
						|
$blocks = array();
 | 
						|
 | 
						|
if ($count > 0) {
 | 
						|
    foreach ($results as $result) {
 | 
						|
        // Fill the result array.
 | 
						|
        if (empty($result['thumbnail'])) {
 | 
						|
            $result['thumbnail'] = Display::returnIconPath('no_document_thumb.jpg');
 | 
						|
        }
 | 
						|
 | 
						|
        if (!empty($result['url'])) {
 | 
						|
            $a_prefix = '<a href="'.$result['url'].'">';
 | 
						|
            $a_suffix = '</a>';
 | 
						|
        } else {
 | 
						|
            $a_prefix = '';
 | 
						|
            $a_suffix = '';
 | 
						|
        }
 | 
						|
 | 
						|
        if ($mode == 'gallery') {
 | 
						|
            $title = $a_prefix.str_replace('_', ' ', $result['title']).$a_suffix;
 | 
						|
            $blocks[] = array(1 =>
 | 
						|
                $a_prefix.'<img src="'.$result['thumbnail'].'" />'.$a_suffix.'<br />'.$title.'<br />'.$result['author'],
 | 
						|
            );
 | 
						|
        } else {
 | 
						|
            $title = '<div style="text-align:left;">'.$a_prefix.$result['title'].$a_suffix.(!empty($result['author']) ? ' '.$result['author'] : '').'<div>';
 | 
						|
            $blocks[] = array(1 => $title);
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
// Show results.
 | 
						|
if (count($blocks) > 0) {
 | 
						|
    $s = new SortableTableFromArray($blocks);
 | 
						|
    $s->display_mode = $mode; // default
 | 
						|
    $s->display_mode_params = 3;
 | 
						|
    $s->per_page = 9;
 | 
						|
    $additional_parameters = array(
 | 
						|
        'mode' => $mode,
 | 
						|
        'action' => 'search',
 | 
						|
        'query' => Security::remove_XSS($_REQUEST['query']),
 | 
						|
    );
 | 
						|
    $get_params = '';
 | 
						|
    foreach ($specific_fields as $specific_field) {
 | 
						|
        if (isset($_REQUEST['sf_'.$specific_field['code']])) {
 | 
						|
            $values = $_REQUEST['sf_'.$specific_field['code']];
 | 
						|
            //Sortable additional_parameters doesn't accept multi dimensional arrays
 | 
						|
            //$additional_parameters[ 'sf_'. $specific_field['code'] ] = $values;
 | 
						|
            foreach ($values as $value) {
 | 
						|
                $get_params .= '&sf_'.$specific_field['code'].'[]='.$value;
 | 
						|
            }
 | 
						|
            $get_params .= '&';
 | 
						|
        }
 | 
						|
    }
 | 
						|
    $additional_parameters['operator'] = $op;
 | 
						|
 | 
						|
    $s->additional_parameters = $additional_parameters;
 | 
						|
 | 
						|
    if ($mode == 'default') {
 | 
						|
        $s->set_header(0, get_lang(ucfirst(TOOL_SEARCH)), false);
 | 
						|
    }
 | 
						|
 | 
						|
    $search_link = '<a href="%ssearch/index.php?mode=%s&action=search&query=%s%s">';
 | 
						|
 | 
						|
    $iconGallery = (($mode == 'gallery') ? 'ButtonGallOn' : 'ButtonGallOff').'.png';
 | 
						|
    $iconDefault = (($mode == 'default') ? 'ButtonListOn' : 'ButtonListOff').'.png';
 | 
						|
 | 
						|
    $mode_selector = '<div id="mode-selector">';
 | 
						|
    $mode_selector .= sprintf($search_link, api_get_path(WEB_CODE_PATH), 'gallery', $_REQUEST['query'], $get_params);
 | 
						|
    $mode_selector .= Display::return_icon($iconGallery).'</a>';
 | 
						|
    $mode_selector .= sprintf($search_link, api_get_path(WEB_CODE_PATH), 'default', $_REQUEST['query'], $get_params);
 | 
						|
    $mode_selector .= Display::return_icon($iconDefault).'</a>';
 | 
						|
    $mode_selector .= '</div>';
 | 
						|
 | 
						|
    echo '<div id="search-results-container">';
 | 
						|
    echo $mode_selector;
 | 
						|
    $s->display();
 | 
						|
    echo '</div>';
 | 
						|
}
 | 
						|
 | 
						|
Display::display_footer();
 | 
						|
 |