forked from moodle/moodle
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
code review for packaging and code cleaning
fixes type wilcard issue on add/delete/update cron scripts
- Loading branch information
diml
committed
Mar 31, 2008
1 parent
20b8b48
commit 3319ef8
Showing
12 changed files
with
1,237 additions
and
1,089 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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)) { | ||
error(get_string('globalsearchdisabled', 'search')); | ||
} | ||
|
||
if (!isadmin()) { | ||
error(get_string('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()); | ||
|
||
?> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.