upgrade
This commit is contained in:
99
main/inc/lib/search/get_terms.php
Normal file
99
main/inc/lib/search/get_terms.php
Normal file
@@ -0,0 +1,99 @@
|
||||
<?php
|
||||
|
||||
/* For licensing terms, see /license.txt */
|
||||
/**
|
||||
* This script retrieves a list of terms that have xapian documents
|
||||
* related with the term passed.
|
||||
*
|
||||
* @package chamilo.include.search
|
||||
*/
|
||||
$terms_list = [];
|
||||
|
||||
// verify parameter and return a right value to avoid problems parsing it
|
||||
if (empty($_GET['term']) || empty($_GET['prefix']) || !in_array($_GET['operator'], ['or', 'and'])) {
|
||||
echo json_encode($terms_list);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
require_once __DIR__.'../../../global.inc.php';
|
||||
require_once api_get_path(LIBRARY_PATH).'search/ChamiloQuery.php';
|
||||
|
||||
/**
|
||||
* Search with filter and build base array avoiding repeated terms.
|
||||
*
|
||||
* @param array $filter XapianQuery array
|
||||
* @param array $specific_fields
|
||||
*
|
||||
* @return array $sf_terms
|
||||
*/
|
||||
function get_usual_sf_terms($filter, $specific_fields)
|
||||
{
|
||||
$sf_terms = [];
|
||||
$dkterms = chamilo_query_simple_query('', 0, 1000, $filter);
|
||||
|
||||
if (is_array($dkterms) && is_array($dkterms[1])) {
|
||||
foreach ($specific_fields as $specific_field) {
|
||||
foreach ($dkterms[1] as $obj) {
|
||||
foreach ($obj['sf-'.$specific_field['code']] as $raw_term) {
|
||||
if (count($raw_term['name']) > 1) {
|
||||
$normal_term = substr($raw_term['name'], 1);
|
||||
$sf_terms[$specific_field['code']][$normal_term] = $normal_term;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $sf_terms;
|
||||
}
|
||||
|
||||
$term = $_GET['term'];
|
||||
$prefix = $_GET['prefix'];
|
||||
$operator = $_GET['operator'];
|
||||
|
||||
$specific_fields = get_specific_field_list();
|
||||
$sf_terms = [];
|
||||
|
||||
if (($cid = api_get_course_id()) != -1) { // with cid
|
||||
// course filter
|
||||
$filter[] = chamilo_get_boolean_query(XAPIAN_PREFIX_COURSEID.$cid);
|
||||
// term filter
|
||||
if ($term != '__all__') {
|
||||
$filter[] = chamilo_get_boolean_query($prefix.$term);
|
||||
// always and between term and courseid
|
||||
$filter = chamilo_join_queries($filter, null, 'and');
|
||||
}
|
||||
|
||||
$sf_terms = get_usual_sf_terms($filter, $specific_fields);
|
||||
} else { // without cid
|
||||
if ($term != '__all__') {
|
||||
$filter[] = chamilo_get_boolean_query($prefix.$term);
|
||||
|
||||
$sf_terms = get_usual_sf_terms($filter, $specific_fields);
|
||||
} else { // no cid and all/any terms
|
||||
foreach ($specific_fields as $specific_field) {
|
||||
foreach (xapian_get_all_terms(1000, $specific_field['code']) as $raw_term) {
|
||||
if (count($raw_term['name']) > 1) {
|
||||
$normal_term = substr($raw_term['name'], 1);
|
||||
$sf_terms[$specific_field['code']][$normal_term] = $normal_term;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// build array to return
|
||||
foreach ($sf_terms as $sf_prefix => $term_group) {
|
||||
//if (count($tem_group) > 0) {
|
||||
$first_term = ['__all__' => ($operator == 'or' ? '-- Any --' : '-- All -- ')];
|
||||
//}
|
||||
if ($sf_prefix != $prefix) {
|
||||
$terms_list[] = [
|
||||
'prefix' => $sf_prefix,
|
||||
'terms' => array_merge($first_term, $term_group),
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
echo json_encode($terms_list);
|
||||
Reference in New Issue
Block a user