Permalink
Browse files

sync with HEAD/1.8 compatible

  • Loading branch information...
1 parent ee95c70 commit d3d9d95f425bde66ae877bd2b6112ba6e4b5d5c0 diml committed Apr 7, 2008
Showing with 1,265 additions and 1,113 deletions.
  1. +1 −1 search/LISEZMOI.txt
  2. +1 −0 search/READMETOO.txt
  3. +131 −117 search/add.php
  4. +1 −0 search/cron_php5.php
  5. +111 −101 search/delete.php
  6. +11 −2 search/index.php
  7. +173 −154 search/indexer.php
  8. +66 −52 search/indexersplash.php
  9. +41 −30 search/indexlib.php
  10. +12 −6 search/lib.php
  11. +336 −321 search/query.php
  12. +94 −65 search/querylib.php
  13. +159 −148 search/stats.php
  14. +128 −116 search/update.php
View
@@ -1,5 +1,5 @@
Cette distribution partielle contient une refonte du moteur de
-recherche globalde Moodle.
+recherche globale de Moodle.
Le moteur de recherche est capable d'indexer et de rechercher
des informations dans un grand nombre de contenus stock�s
@@ -67,6 +67,7 @@ In the actual state, the engine indexes the following information:
- wiki pages
- techproject descriptions
- char sessions
+- lesson pages
Extensions
##########
View
@@ -1,144 +1,158 @@
<?php
/**
* Global Search Engine for Moodle
-* Michael Champanis (mchampan) [cynnical@gmail.com]
-* review 1.8+ : Valery Fremaux [valery.fremaux@club-internet.fr]
-* 2007/08/02
+*
+* @package search
+* @category core
+* @subpackage search_engine
+* @author Michael Champanis (mchampan) [cynnical@gmail.com], Valery Fremaux [valery.fremaux@club-internet.fr] > 1.8
+* @date 2008/03/31
+* @license http://www.gnu.org/copyleft/gpl.html GNU Public License
*
* Asynchronous adder for new indexable contents
*
* Major chages in this review is passing the xxxx_db_names return to
* multiple arity to handle multiple document types modules
*/
+/**
+* includes and requires
+*/
require_once('../config.php');
require_once("$CFG->dirroot/search/lib.php");
-require_login();
-
-if (empty($CFG->enableglobalsearch)) {
- print_error('globalsearchdisabled', 'search');
-}
-
-if (!isadmin()) {
- print_error('beadmin', 'search', "$CFG->wwwroot/login/index.php");
-}
-
-//check for php5 (lib.php)
-if (!search_check_php5()) {
- $phpversion = phpversion();
- mtrace("Sorry, global search requires PHP 5.0.0 or later (currently using version $phpversion)");
- exit(0);
-}
-
-require_once("$CFG->dirroot/search/indexlib.php");
-
-$index = new Zend_Search_Lucene(SEARCH_INDEX_PATH);
-$dbcontrol = new IndexDBControl();
-$addition_count = 0;
-$startindextime = time();
-
-$indexdate = $CFG->search_indexer_run_date;
-
-mtrace('Starting index update (additions)...');
-mtrace('Index size before: '.$CFG->search_index_size."\n");
+/// checks global search activation
+
+ require_login();
+
+ if (empty($CFG->enableglobalsearch)) {
+ error(get_string('globalsearchdisabled', 'search'));
+ }
+
+ if (!isadmin()) {
+ error(get_string('beadmin', 'search'), "$CFG->wwwroot/login/index.php");
+ }
+
+/// check for php5 (lib.php)
-//get all modules
-if ($mods = get_records_select('modules')) {
+ if (!search_check_php5()) {
+ $phpversion = phpversion();
+ mtrace("Sorry, global search requires PHP 5.0.0 or later (currently using version ".phpversion().")");
+ exit(0);
+ }
+
+ require_once("$CFG->dirroot/search/indexlib.php");
+
+ $index = new Zend_Search_Lucene(SEARCH_INDEX_PATH);
+ $dbcontrol = new IndexDBControl();
+ $addition_count = 0;
+ $startindextime = time();
+
+ $indexdate = $CFG->search_indexer_run_date;
+
+ mtrace('Starting index update (additions)...');
+ mtrace('Index size before: '.$CFG->search_index_size."\n");
+
+/// get all modules
+ if ($mods = get_records_select('modules')) {
+
+/// append virtual modules onto array
-//append virtual modules onto array
-$mods = array_merge($mods, search_get_additional_modules());
- foreach ($mods as $mod) {
- //build include file and function names
- $class_file = $CFG->dirroot.'/search/documents/'.$mod->name.'_document.php';
- $db_names_function = $mod->name.'_db_names';
- $get_document_function = $mod->name.'_single_document';
- $get_newrecords_function = $mod->name.'_new_records';
- $additions = array();
-
- if (file_exists($class_file)) {
- require_once($class_file);
+ $mods = array_merge($mods, search_get_additional_modules());
+ foreach ($mods as $mod) {
+ //build include file and function names
+ $class_file = $CFG->dirroot.'/search/documents/'.$mod->name.'_document.php';
+ $db_names_function = $mod->name.'_db_names';
+ $get_document_function = $mod->name.'_single_document';
+ $get_newrecords_function = $mod->name.'_new_records';
+ $additions = array();
- //if both required functions exist
- if (function_exists($db_names_function) and function_exists($get_document_function)) {
- mtrace("Checking $mod->name module for additions.");
- $valuesArray = $db_names_function();
- if ($valuesArray){
- foreach($valuesArray as $values){
- $where = (isset($values[5])) ? 'AND ('.$values[5].')' : '';
- $itemtypes = ($values[4] != '*') ? " AND itemtype = '{$values[4]}' " : '' ;
-
- //select records in MODULE table, but not in SEARCH_DATABASE_TABLE
- $table = SEARCH_DATABASE_TABLE;
- $query = "
- SELECT
- docid,
- itemtype
- FROM
- {$CFG->prefix}{$table}
- WHERE
- doctype = '{$mod->name}'
- $itemtypes
- ";
- $docIds = get_records_sql_menu($query);
- $docIdList = ($docIds) ? implode("','", array_keys($docIds)) : '' ;
-
- $query = "
- SELECT id,
- {$values[0]} as docid
- FROM
- {$CFG->prefix}{$values[1]}
- WHERE
- id NOT IN ('{$docIdList}') and
- {$values[2]} > {$indexdate}
- $where
- ";
- $records = get_records_sql($query);
-
- // foreach record, build a module specific search document using the get_document function
- if (is_array($records)) {
- foreach($records as $record) {
- $add = $get_document_function($record->docid, $values[4]);
- // some documents may not be indexable
- if ($add)
- $additions[] = $add;
+ if (file_exists($class_file)) {
+ require_once($class_file);
+
+ //if both required functions exist
+ if (function_exists($db_names_function) and function_exists($get_document_function)) {
+ mtrace("Checking $mod->name module for additions.");
+ $valuesArray = $db_names_function();
+ if ($valuesArray){
+ foreach($valuesArray as $values){
+ $where = (isset($values[5])) ? 'AND ('.$values[5].')' : '';
+ $itemtypes = ($values[4] != '*' && $values[4] != 'any') ? " AND itemtype = '{$values[4]}' " : '' ;
+
+ //select records in MODULE table, but not in SEARCH_DATABASE_TABLE
+ $table = SEARCH_DATABASE_TABLE;
+ $query = "
+ SELECT
+ docid,
+ itemtype
+ FROM
+ {$CFG->prefix}{$table}
+ WHERE
+ doctype = '{$mod->name}'
+ $itemtypes
+ ";
+ $docIds = get_records_sql_menu($query);
+ $docIdList = ($docIds) ? implode("','", array_keys($docIds)) : '' ;
+
+ $query = "
+ SELECT id,
+ {$values[0]} as docid
+ FROM
+ {$CFG->prefix}{$values[1]}
+ WHERE
+ id NOT IN ('{$docIdList}') and
+ {$values[2]} > {$indexdate}
+ $where
+ ";
+ $records = get_records_sql($query);
+
+ // foreach record, build a module specific search document using the get_document function
+ if (is_array($records)) {
+ foreach($records as $record) {
+ $add = $get_document_function($record->docid, $values[4]);
+ // some documents may not be indexable
+ if ($add)
+ $additions[] = $add;
+ }
}
}
- }
-
- // foreach document, add it to the index and database table
- foreach ($additions as $add) {
- ++$addition_count;
- // object to insert into db
- $dbid = $dbcontrol->addDocument($add);
-
- // synchronise db with index
- $add->addField(Zend_Search_Lucene_Field::Keyword('dbid', $dbid));
-
- mtrace(" Add: $add->title (database id = $add->dbid, moodle instance id = $add->docid)");
-
- $index->addDocument($add);
- }
- }
- else{
- mtrace("No types to add.\n");
- }
- mtrace("Finished $mod->name.\n");
+ // foreach document, add it to the index and database table
+ foreach ($additions as $add) {
+ ++$addition_count;
+
+ // object to insert into db
+ $dbid = $dbcontrol->addDocument($add);
+
+ // synchronise db with index
+ $add->addField(Zend_Search_Lucene_Field::Keyword('dbid', $dbid));
+
+ mtrace(" Add: $add->title (database id = $add->dbid, moodle instance id = $add->docid)");
+
+ $index->addDocument($add);
+ }
+ }
+ else{
+ mtrace("No types to add.\n");
+ }
+ mtrace("Finished $mod->name.\n");
+ }
}
}
}
-}
+
+/// commit changes
-// commit changes
-$index->commit();
+ $index->commit();
+
+/// update index date and size
-// update index date and size
-set_config("search_indexer_run_date", $startindextime);
-set_config("search_index_size", (int)$CFG->search_index_size + (int)$addition_count);
+ set_config("search_indexer_run_date", $startindextime);
+ set_config("search_index_size", (int)$CFG->search_index_size + (int)$addition_count);
+
+/// print some additional info
-// print some additional info
-mtrace("Added $addition_count documents.");
-mtrace('Index size after: '.$index->count());
+ mtrace("Added $addition_count documents.");
+ mtrace('Index size after: '.$index->count());
?>
@@ -4,6 +4,7 @@
* This is a special externalized code for cron handling in PHP5.
* Should never be called by a php 4.3.0 implementation.
*/
+
try{
// overrides php limits
$maxtimelimit = ini_get('max_execution_time');
Oops, something went wrong. Retry.

0 comments on commit d3d9d95

Please sign in to comment.