get_terms_on_db($prefix, $course_code, $tool_id, $ref_id_high_level); // don't do anything if no change, verify only at DB, not the search engine if ((count(array_diff($terms, $stored_terms)) == 0) && (count(array_diff($stored_terms, $terms)) == 0) ) { return false; } require_once api_get_path(LIBRARY_PATH).'search/xapian/XapianQuery.php'; // compare terms $doc = $this->get_document($search_did); $xapian_terms = xapian_get_doc_terms($doc, $prefix); $xterms = []; foreach ($xapian_terms as $xapian_term) { $xterms[] = substr($xapian_term['name'], 1); } $dterms = $terms; $missing_terms = array_diff($dterms, $xterms); $deprecated_terms = array_diff($xterms, $dterms); // save it to search engine foreach ($missing_terms as $term) { $this->add_term_to_doc($prefix.$term, $doc); } foreach ($deprecated_terms as $term) { $this->remove_term_from_doc($prefix.$term, $doc); } // don't do anything if no change if ((count($missing_terms) > 0) || (count($deprecated_terms) > 0)) { $this->replace_document($doc, (int) $search_did); } return true; } /** * Get the terms stored at database. * * @return array Array of terms */ public function get_terms_on_db($prefix, $course_code, $tool_id, $ref_id) { require_once api_get_path(LIBRARY_PATH).'specific_fields_manager.lib.php'; $terms = get_specific_field_values_list_by_prefix( $prefix, $course_code, $tool_id, $ref_id ); $prefix_terms = []; foreach ($terms as $term) { $prefix_terms[] = $term['value']; } return $prefix_terms; } }