code review for packaging and code cleaning

This commit is contained in:
diml
2008-03-31 22:22:20 +00:00
parent 3319ef8538
commit d3516fb62c
16 changed files with 287 additions and 185 deletions
+27 -20
View File
@@ -1,8 +1,13 @@
<?php
/**
* Global Search Engine for Moodle
* add-on 1.8+ : Valery Fremaux [[email protected]]
* 2007/08/02
*
* @package search
* @category core
* @subpackage document_wrappers
* @author Valery Fremaux [[email protected]] > 1.8
* @date 2008/03/31
* @license http://www.gnu.org/copyleft/gpl.html GNU Public License
*
* document handling for chat activity module
* This file contains the mapping between a chat history and it's indexable counterpart,
@@ -10,23 +15,22 @@
* Functions for iterating and retrieving the necessary records are now also included
* in this file, rather than mod/chat/lib.php
*
* @license http://www.gnu.org/copyleft/gpl.html GNU Public License
* @package search
* @version 2007110400
**/
*/
/**
* includes and requires
*/
require_once("$CFG->dirroot/search/documents/document.php");
require_once("$CFG->dirroot/mod/chat/lib.php");
/*
/**
* a class for representing searchable information
*
**/
*/
class ChatTrackSearchDocument extends SearchDocument {
/**
* constructor
*
*/
public function __construct(&$chatsession, $chat_module_id, $course_id, $group_id, $context_id) {
// generic information; required
@@ -50,8 +54,8 @@ class ChatTrackSearchDocument extends SearchDocument {
// construct the parent class
parent::__construct($doc, $data, $course_id, $group_id, 0, PATH_FOR_SEARCH_TYPE_CHAT);
} //constructor
} //ChatTrackSearchDocument
}
}
/**
@@ -59,19 +63,21 @@ class ChatTrackSearchDocument extends SearchDocument {
* @param cm_id the chat course module
* @param start the start time of the session
* @param end th end time of the session
* @uses CFG
* @return a well formed link to session display
*/
function chat_make_link($cm_id, $start, $end) {
global $CFG;
return $CFG->wwwroot.'/mod/chat/report.php?id='.$cm_id.'&amp;start='.$start.'&amp;end='.$end;
} //chat_make_link
}
/**
* fetches all the records for a given session and assemble them as a unique track
* we revamped here the code of report.php for making sessions, but without any output.
* note that we should collect sessions "by groups" if groupmode() is SEPARATEGROUPS.
* @param chat_id the database
* @uses CFG
* @return an array of objects representing the chat sessions.
*/
function chat_get_session_tracks($chat_id, $fromtime = 0, $totime = 0) {
@@ -140,7 +146,7 @@ function chat_get_session_tracks($chat_id, $fromtime = 0, $totime = 0) {
}
}
return $tracks;
} //chat_get_session_tracks
}
/**
* part of search engine API
@@ -149,7 +155,7 @@ function chat_get_session_tracks($chat_id, $fromtime = 0, $totime = 0) {
function chat_iterator() {
$chatrooms = get_records('chat');
return $chatrooms;
} //chat_iterator
}
/**
* part of search engine API
@@ -177,7 +183,7 @@ function chat_get_content_for_index(&$chat) {
return $documents;
}
return array();
} //chat_get_content_for_index
}
/**
* returns a single data search document based on a chat_session id
@@ -206,7 +212,7 @@ function chat_single_document($id, $itemtype) {
return $document;
}
return null;
} //chat_single_document
}
/**
* dummy delete function that packs id with itemtype.
@@ -217,7 +223,7 @@ function chat_delete($info, $itemtype) {
$object->id = $info;
$object->itemtype = $itemtype;
return $object;
} //chat_delete
}
/**
* returns the var names needed to build a sql query for addition/deletions
@@ -226,7 +232,7 @@ function chat_delete($info, $itemtype) {
function chat_db_names() {
//[primary id], [table name], [time created field name], [time modified field name]
return null;
} //chat_db_names
}
/**
* this function handles the access policy to contents indexed as searchable documents. If this
@@ -241,6 +247,7 @@ function chat_db_names() {
* points out a session history which is a close sequence of messages.
* @param user the user record denoting the user who searches
* @param group_id the current group used by the user when searching
* @uses CFG
* @return true if access is allowed, false elsewhere
*/
function chat_check_text_access($path, $itemtype, $this_id, $user, $group_id, $context_id){
@@ -280,7 +287,7 @@ function chat_check_text_access($path, $itemtype, $this_id, $user, $group_id, $c
}
return true;
} //chat_check_text_access
}
/**
* this call back is called when displaying the link for some last post processing
@@ -290,5 +297,5 @@ function chat_link_post_processing($title){
setLocale(LC_TIME, substr(current_language(), 0, 2));
$title = preg_replace('/TT_(.*)_TT/e', "userdate(\\1)", $title);
return $title;
} //chat_link_post_processing
}
?>
+35 -31
View File
@@ -1,8 +1,13 @@
<?php
/**
* Global Search Engine for Moodle
* add-on 1.8+ : Valery Fremaux [[email protected]]
* 2007/08/02
*
* @package search
* @category core
* @subpackage document_wrappers
* @author Valery Fremaux [[email protected]] > 1.8
* @date 2008/03/31
* @license http://www.gnu.org/copyleft/gpl.html GNU Public License
*
* document handling for data activity module
* This file contains the mapping between a database object and it's indexable counterpart,
@@ -10,23 +15,22 @@
* Functions for iterating and retrieving the necessary records are now also included
* in this file, rather than mod/data/lib.php
*
* @license http://www.gnu.org/copyleft/gpl.html GNU Public License
* @package search
* @version 2007110400
**/
*/
/**
* includes and requires
*/
require_once("$CFG->dirroot/search/documents/document.php");
require_once("$CFG->dirroot/mod/data/lib.php");
/*
/**
* a class for representing searchable information (data records)
*
**/
*/
class DataSearchDocument extends SearchDocument {
/**
* constructor
*
*/
public function __construct(&$record, $course_id, $context_id) {
// generic information; required
@@ -51,18 +55,17 @@ class DataSearchDocument extends SearchDocument {
// construct the parent class
parent::__construct($doc, $data, $course_id, $record['groupid'], $record['userid'], PATH_FOR_SEARCH_TYPE_DATA);
} //constructor
} //ChatSearchDocument
}
}
/*
/**
* a class for representing searchable information (comments on data records)
*
**/
*/
class DataCommentSearchDocument extends SearchDocument {
/**
* constructor
*
*/
public function __construct(&$comment, $course_id, $context_id) {
// generic information; required
@@ -83,25 +86,27 @@ class DataCommentSearchDocument extends SearchDocument {
// construct the parent class
parent::__construct($doc, $data, $course_id, $comment['groupid'], $comment['userid'], PATH_FOR_SEARCH_TYPE_DATA);
} //constructor
} //ChatCommentSearchDocument
}
}
/**
* constructs a valid link to a data record content
* @param database_id the database reference
* @param record_id the record reference
* @uses CFG
* @return a valid url top access the information as a string
*/
function data_make_link($database_id, $record_id) {
global $CFG;
return $CFG->wwwroot.'/mod/data/view.php?d='.$database_id.'&amp;rid='.$record_id;
} //data_make_link
}
/**
* fetches all the records for a given database
* @param database_id the database
* @param typematch a comma separated list of types that should be considered for searching or *
* @uses CFG
* @return an array of objects representing the data records.
*/
function data_get_records($database_id, $typematch = '*') {
@@ -127,19 +132,19 @@ function data_get_records($database_id, $typematch = '*') {
if($typematch == '*' || preg_match("/\\b{$fieldset[$aDatum->fieldid]->type}\\b/", $typematch)){
if (!isset($records[$aDatum->recordid])){
$records[$aDatum->recordid]['_first'] = $aDatum->content.' '.$aDatum->content1.' '.$aDatum->content2.' '.$aDatum->content3.' '.$aDatum->content4.' ';
}
else{
} else {
$records[$aDatum->recordid][$fieldset[$aDatum->fieldid]->name] = $aDatum->content.' '.$aDatum->content1.' '.$aDatum->content2.' '.$aDatum->content3.' '.$aDatum->content4.' ';
}
}
}
}
return $records;
} //data_get_records
}
/**
* fetches all the comments for a given database
* @param database_id the database
* @uses CFG
* @return an array of objects representing the data record comments.
*/
function data_get_comments($database_id) {
@@ -163,7 +168,7 @@ function data_get_comments($database_id) {
";
$comments = get_records_sql($query);
return $comments;
} //data_get_comments
}
/**
@@ -173,7 +178,7 @@ function data_get_comments($database_id) {
function data_iterator() {
$databases = get_records('data');
return $databases;
} //data_iterator
}
/**
* part of search engine API
@@ -221,7 +226,7 @@ function data_get_content_for_index(&$database) {
}
}
return $documents;
} //data_get_content_for_index
}
/**
* returns a single data search document based on a data entry id
@@ -256,8 +261,7 @@ function data_single_document($id, $itemtype) {
$recordMetaData->content = $accumulator;
// make document
$documents[] = new DataSearchDocument(get_object_vars($recordMetaData), $record_course, $context->id);
}
elseif($itemtype == 'comment'){
} elseif($itemtype == 'comment') {
// get main records
$comment = get_record('data_comments', 'id', $id);
$record = get_record('data_records', 'id', $comment->recordid);
@@ -272,11 +276,10 @@ function data_single_document($id, $itemtype) {
$comment->groupid = $record->groupid;
// make document
$documents[] = new DataCommentSearchDocument(get_object_vars($comment), $record_course, $context->id);
}
else{
} else {
mtrace('Error : bad or missing item type');
}
} //data_single_document
}
/**
* dummy delete function that packs id with itemtype.
@@ -287,7 +290,7 @@ function data_delete($info, $itemtype) {
$object->id = $info;
$object->itemtype = $itemtype;
return $object;
} //data_delete
}
/**
* returns the var names needed to build a sql query for addition/deletions
@@ -299,7 +302,7 @@ function data_db_names() {
array('id', 'data_records', 'timecreated', 'timemodified', 'record'),
array('id', 'data_comments', 'created', 'modified', 'comment')
);
} //data_db_names
}
/**
* this function handles the access policy to contents indexed as searchable documents. If this
@@ -314,6 +317,7 @@ function data_db_names() {
* points out an indexed data record page.
* @param user the user record denoting the user who searches
* @param group_id the current group used by the user when searching
* @uses CFG
* @return true if access is allowed, false elsewhere
*/
function data_check_text_access($path, $itemtype, $this_id, $user, $group_id, $context_id){
@@ -394,5 +398,5 @@ function data_check_text_access($path, $itemtype, $this_id, $user, $group_id, $c
}
return true;
} // data_check_text_access
}
?>
+13 -6
View File
@@ -1,14 +1,21 @@
<?php
/**
* Global Search Engine for Moodle
* Michael Champanis (mchampan) [[email protected]]
* review 1.8+ : Valery Fremaux [[email protected]]
* 2007/08/02
*
* @package search
* @category core
* @subpackage document_wrappers
* @author Michael Campanis (mchampan) [[email protected]], Valery Fremaux [[email protected]] > 1.8
* @date 2008/03/31
* @license http://www.gnu.org/copyleft/gpl.html GNU Public License
*
* Base search document from which other module/block types can
* extend.
**/
*/
/**
*
*/
abstract class SearchDocument extends Zend_Search_Lucene_Document {
public function __construct(&$doc, &$data, $course_id, $group_id, $user_id, $path) {
//document identification and indexing
@@ -52,7 +59,7 @@ abstract class SearchDocument extends Zend_Search_Lucene_Document {
// of multiple capabilities in their code. This possibility should be left open here.
$this->addField(Zend_Search_Lucene_Field::UnIndexed('capabilities', $caps));
*/
} //constructor
} //SearchDocument
}
}
?>
+27 -22
View File
@@ -1,9 +1,13 @@
<?php
/**
* Global Search Engine for Moodle
* Michael Champanis (mchampan) [[email protected]]
* review 1.8+ : Valery Fremaux [[email protected]]
* 2007/08/02
*
* @package search
* @category core
* @subpackage document_wrappers
* @author Michael Campanis (mchampan) [[email protected]], Valery Fremaux [[email protected]] > 1.8
* @date 2008/03/31
* @license http://www.gnu.org/copyleft/gpl.html GNU Public License
*
* document handling for forum activity module
* This file contains the mapping between a forum post and it's indexable counterpart,
@@ -11,24 +15,22 @@
* Functions for iterating and retrieving the necessary records are now also included
* in this file, rather than mod/forum/lib.php
*
* @license http://www.gnu.org/copyleft/gpl.html GNU Public License
* @package search
* @version 2007110400
**/
/* see wiki_document.php for descriptions */
*/
/**
* includes and requires
*/
require_once("$CFG->dirroot/search/documents/document.php");
require_once("$CFG->dirroot/mod/forum/lib.php");
/*
/**
* a class for representing searchable information
*
**/
*/
class ForumSearchDocument extends SearchDocument {
/**
* constructor
*
*/
public function __construct(&$post, $forum_id, $course_id, $itemtype, $context_id) {
// generic information
@@ -50,8 +52,8 @@ class ForumSearchDocument extends SearchDocument {
$data->discussion = $post['discussion'];
parent::__construct($doc, $data, $course_id, $post['groupid'], $post['userid'], PATH_FOR_SEARCH_TYPE_FORUM);
} //constructor
} //ForumSearchDocument
}
}
/**
* constructs a valid link to a chat content
@@ -63,7 +65,7 @@ function forum_make_link($discussion_id, $post_id) {
global $CFG;
return $CFG->wwwroot.'/mod/forum/discuss.php?d='.$discussion_id.'#'.$post_id;
} //forum_make_link
}
/**
* search standard API
@@ -72,7 +74,7 @@ function forum_make_link($discussion_id, $post_id) {
function forum_iterator() {
$forums = get_records('forum');
return $forums;
} //forum_iterator
}
/**
* search standard API
@@ -108,7 +110,7 @@ function forum_get_content_for_index(&$forum) {
}
}
return $documents;
} //forum_get_content_for_index
}
/**
* returns a single forum search document based on a forum entry id
@@ -128,7 +130,7 @@ function forum_single_document($id, $itemtype) {
return new ForumSearchDocument(get_object_vars($post), $discussion->forum, $discussion->course, $itemtype, $context->id);
}
return null;
} //forum_single_document
}
/**
* dummy delete function that aggregates id with itemtype.
@@ -139,7 +141,7 @@ function forum_delete($info, $itemtype) {
$object->id = $info;
$object->itemtype = $itemtype;
return $object;
} //forum_delete
}
/**
* returns the var names needed to build a sql query for addition/deletions
@@ -151,11 +153,12 @@ function forum_db_names() {
array('id', 'forum_posts', 'created', 'modified', 'head', 'parent = 0'),
array('id', 'forum_posts', 'created', 'modified', 'post', 'parent != 0')
);
} //forum_db_names
}
/**
* reworked faster version from /mod/forum/lib.php
* @param forum_id a forum identifier
* @uses CFG, USER
* @return an array of posts
*/
function forum_get_discussions_fast($forum_id) {
@@ -202,12 +205,13 @@ function forum_get_discussions_fast($forum_id) {
d.timemodified DESC
";
return get_records_sql($query);
} //forum_get_discussions_fast
}
/**
* reworked faster version from /mod/forum/lib.php
* @param parent the id of the first post within the discussion
* @param forum_id the forum identifier
* @uses CFG
* @return an array of posts
*/
function forum_get_child_posts_fast($parent, $forum_id) {
@@ -241,7 +245,7 @@ function forum_get_child_posts_fast($parent, $forum_id) {
p.created ASC
";
return get_records_sql($query);
} //forum_get_child_posts_fast
}
/**
* this function handles the access policy to contents indexed as searchable documents. If this
@@ -256,6 +260,7 @@ function forum_get_child_posts_fast($parent, $forum_id) {
* points out the individual post.
* @param user the user record denoting the user who searches
* @param group_id the current group used by the user when searching
* @uses CFG, USER
* @return true if access is allowed, false elsewhere
*/
function forum_check_text_access($path, $itemtype, $this_id, $user, $group_id, $context_id){
@@ -290,6 +295,6 @@ function forum_check_text_access($path, $itemtype, $this_id, $user, $group_id, $
}
return true;
} //forum_check_text_access
}
?>
+26 -24
View File
@@ -1,9 +1,13 @@
<?php
/**
* Global Search Engine for Moodle
* Michael Champanis (mchampan) [[email protected]]
* review 1.8+ : Valery Fremaux [[email protected]]
* 2007/08/02
*
* @package search
* @category core
* @subpackage document_wrappers
* @author Michael Campanis (mchampan) [[email protected]], Valery Fremaux [[email protected]] > 1.8
* @date 2008/03/31
* @license http://www.gnu.org/copyleft/gpl.html GNU Public License
*
* document handling for glossary activity module
* This file contains a mapping between a glossary entry and it's indexable counterpart,
@@ -11,17 +15,17 @@
* Functions for iterating and retrieving the necessary records are now also included
* in this file, rather than mod/glossary/lib.php
*
* @license http://www.gnu.org/copyleft/gpl.html GNU Public License
* @package search
* @version 2007110400
**/
*/
/**
* includes and requires
*/
require_once("$CFG->dirroot/search/documents/document.php");
/*
/**
* a class for representing searchable information
*
**/
*/
class GlossarySearchDocument extends SearchDocument {
/**
@@ -49,18 +53,17 @@ class GlossarySearchDocument extends SearchDocument {
// construct the parent class
parent::__construct($doc, $data, $course_id, -1, $entry['userid'], PATH_FOR_SEARCH_TYPE_GLOSSARY);
} //constructor
} //GlossarySearchDocument
}
}
/*
/**
* a class for representing searchable information
*
**/
*/
class GlossaryCommentSearchDocument extends SearchDocument {
/**
* document constructor
*
*/
public function __construct(&$entry, $glossary_id, $course_id, $context_id) {
// generic information; required
@@ -83,8 +86,8 @@ class GlossaryCommentSearchDocument extends SearchDocument {
// construct the parent class
parent::__construct($doc, $data, $course_id, -1, $entry['userid'], PATH_FOR_SEARCH_TYPE_GLOSSARY);
} //constructor
} //GlossaryCommentSearchDocument
}
}
/**
* constructs valid access links to information
@@ -102,7 +105,7 @@ function glossary_make_link($entry_id) {
// preserve glossary pop-up, be careful where you place your ' and "s
//this function is meant to return a url that is placed between href='[url here]'
return "$CFG->wwwroot/mod/glossary/showentry.php?eid=$entry_id' onclick='return openpopup(\"/mod/glossary/showentry.php?eid=$entry_id\", \"entry\", DEFAULT_POPUP_SETTINGS, 0);";
} //glossary_make_link
}
/**
* part of search engine API
@@ -111,7 +114,7 @@ function glossary_make_link($entry_id) {
function glossary_iterator() {
$glossaries = get_records('glossary');
return $glossaries;
} //glossary_iterator
}
/**
* part of search engine API
@@ -153,7 +156,7 @@ function glossary_get_content_for_index(&$glossary) {
}
}
return $documents;
} //glossary_get_content_for_index
}
/**
* part of search engine API
@@ -179,7 +182,7 @@ function glossary_single_document($id, $itemtype) {
elseif ($itemtype == 'comment'){
return new GlossaryCommentSearchDocument(get_object_vars($comment), $entry->glossaryid, $glossary_course, $context->id);
}
} //glossary_single_document
}
/**
* dummy delete function that packs id with itemtype.
@@ -190,7 +193,7 @@ function glossary_delete($info, $itemtype) {
$object->id = $info;
$object->itemtype = $itemtype;
return $object;
} //glossary_delete
}
/**
* returns the var names needed to build a sql query for addition/deletions
@@ -202,7 +205,7 @@ function glossary_db_names() {
array('id', 'glossary_entries', 'timecreated', 'timemodified', 'standard'),
array('id', 'glossary_comments', 'timemodified', 'timemodified', 'comment')
);
} //glossary_db_names
}
/**
* this function handles the access policy to contents indexed as searchable documents. If this
@@ -241,6 +244,5 @@ function glossary_check_text_access($path, $itemtype, $this_id, $user, $group_id
}
return true;
} //glossary_check_text_access
}
?>
+22 -20
View File
@@ -1,29 +1,31 @@
<?php
/**
* Global Search Engine for Moodle
* Michael Champanis (mchampan) [[email protected]]
* creation : Valery Fremaux [[email protected]]
* 2007/08/02
*
* @package search
* @category core
* @subpackage document_wrappers
* @author Michael Campanis (mchampan) [[email protected]], Valery Fremaux [[email protected]] > 1.8
* @date 2008/03/31
* @license http://www.gnu.org/copyleft/gpl.html GNU Public License
*
* document handling for lesson activity module
* This file contains the mapping between a lesson page and it's indexable counterpart,
*
* Functions for iterating and retrieving the necessary records are now also included
* in this file, rather than mod/lesson/lib.php
*
* @license http://www.gnu.org/copyleft/gpl.html GNU Public License
* @package search
* @version 2007110400
**/
/* see wiki_document.php for descriptions */
*/
/**
* includes and requires
*/
require_once("$CFG->dirroot/search/documents/document.php");
require_once("$CFG->dirroot/mod/lesson/lib.php");
/*
/**
* a class for representing searchable information
*
**/
*/
class LessonPageSearchDocument extends SearchDocument {
/**
@@ -48,8 +50,8 @@ class LessonPageSearchDocument extends SearchDocument {
$data->lesson = $page['lessonid'];
parent::__construct($doc, $data, $course_id, 0, 0, PATH_FOR_SEARCH_TYPE_LESSON);
} //constructor
} //LessonPageSearchDocument
}
}
/**
* constructs a valid link to a chat content
@@ -64,7 +66,7 @@ function lesson_make_link($lessonmoduleid, $itemid, $itemtype) {
return "{$CFG->wwwroot}/mod/lesson/view.php?id={$lessonmoduleid}&amp;pageid={$itemid}";
}
return $CFG->wwwroot.'/mod/lesson/view.php?id='.$lessonmoduleid;
} //lesson_make_link
}
/**
* search standard API
@@ -73,7 +75,7 @@ function lesson_make_link($lessonmoduleid, $itemid, $itemtype) {
function lesson_iterator() {
$lessons = get_records('lesson');
return $lessons;
} //lesson_iterator
}
/**
* search standard API
@@ -96,7 +98,7 @@ function lesson_get_content_for_index(&$lesson) {
}
return $documents;
} //lesson_get_content_for_index
}
/**
* returns a single lesson search document based on a lesson page id
@@ -116,7 +118,7 @@ function lesson_single_document($id, $itemtype) {
return new LessonPageSearchDocument(get_object_vars($page), $cm->id, $lesson->course, $itemtype, $context->id);
}
return null;
} //lesson_single_document
}
/**
* dummy delete function that aggregates id with itemtype.
@@ -127,7 +129,7 @@ function lesson_delete($info, $itemtype) {
$object->id = $info;
$object->itemtype = $itemtype;
return $object;
} //lesson_delete
}
/**
* returns the var names needed to build a sql query for addition/deletions
@@ -138,7 +140,7 @@ function lesson_db_names() {
return array(
array('id', 'lesson_pages', 'timecreated', 'timemodified', 'page')
);
} //lesson_db_names
}
/**
* this function handles the access policy to contents indexed as searchable documents. If this
@@ -201,5 +203,5 @@ function lesson_check_text_access($path, $itemtype, $this_id, $user, $group_id,
}
return true;
} //lesson_check_text_access
}
?>
+15 -7
View File
@@ -1,31 +1,39 @@
<?php
/**
* Global Search Engine for Moodle
* add-on 1.8+ : Valery Fremaux [[email protected]]
* 2007/08/02
*
* @package search
* @category core
* @subpackage document_wrappers
* @author Valery Fremaux [[email protected]] > 1.8
* @date 2008/03/31
* @license http://www.gnu.org/copyleft/gpl.html GNU Public License
*
* this is a format handler for getting text out of a proprietary binary format
* so it can be indexed by Lucene search engine
*/
/*
/**
* MS Word extractor
* @param object $resource
* @uses CFG, USER
*/
function get_text_for_indexing_doc(&$resource){
global $CFG, $USER;
// SECURITY : do not allow non admin execute anything on system !!
if (!isadmin($USER->id)) return;
$moodleroot = (@$CFG->block_search_usemoodleroot) ? "{$CFG->dirroot}/" : '' ;
// just call pdftotext over stdout and capture the output
if (!empty($CFG->block_search_word_to_text_cmd)){
if (!file_exists("{$CFG->dirroot}/{$CFG->block_search_word_to_text_cmd}")){
mtrace('Error with MSWord to text converter command : exectuable not found.');
if (!file_exists("{$moodleroot}{$CFG->block_search_word_to_text_cmd}")){
mtrace('Error with MSWord to text converter command : executable not found.');
}
else{
$file = escapeshellarg($CFG->dataroot.'/'.$resource->course.'/'.$resource->reference);
$text_converter_cmd = "{$CFG->dirroot}/{$CFG->block_search_word_to_text_cmd} $file";
$text_converter_cmd = "\"{$moodleroot}{$CFG->block_search_word_to_text_cmd}\" \"$file\"";
if ($CFG->block_search_word_to_text_env){
putenv($CFG->block_search_word_to_text_env);
}
+11 -2
View File
@@ -1,13 +1,22 @@
<?php
/**
* Global Search Engine for Moodle
* add-on 1.8+ : Valery Fremaux [[email protected]]
* 2007/08/02
*
* @package search
* @category core
* @subpackage document_wrappers
* @author Valery Fremaux [[email protected]] > 1.8
* @date 2008/03/31
* @license http://www.gnu.org/copyleft/gpl.html GNU Public License
*
* this is a format handler for getting text out of a proprietary binary format
* so it can be indexed by Lucene search engine
*/
/**
* @param object $resource
* @uses CFG, USER
*/
function get_text_for_indexing_htm(&$resource){
global $CFG, $USER;
+11 -3
View File
@@ -1,13 +1,21 @@
<?php
/**
* Global Search Engine for Moodle
* add-on 1.8+ : Valery Fremaux [[email protected]]
* 2007/08/02
*
* this is a format handler for getting text out of a proprietary binary format
* @package search
* @category core
* @subpackage document_wrappers
* @author Valery Fremaux [[email protected]] > 1.8
* @date 2008/03/31
* @license http://www.gnu.org/copyleft/gpl.html GNU Public License
*
* this is a format handler for getting text out of a standard html format
* so it can be indexed by Lucene search engine
*/
/**
* @param object $resource
*/
function get_text_for_indexing_html(&$resource){
// wraps to htm handler
+15 -4
View File
@@ -1,28 +1,39 @@
<?php
/**
* Global Search Engine for Moodle
* add-on 1.8+ : Valery Fremaux [[email protected]]
* 2007/08/02
*
* @package search
* @category core
* @subpackage document_wrappers
* @author Valery Fremaux [[email protected]] > 1.8
* @date 2008/03/31
* @license http://www.gnu.org/copyleft/gpl.html GNU Public License
*
* this is a format handler for getting text out of a proprietary binary format
* so it can be indexed by Lucene search engine
*/
/**
* @param object $resource
* @uses CFG, USER
*/
function get_text_for_indexing_pdf(&$resource){
global $CFG, $USER;
// SECURITY : do not allow non admin execute anything on system !!
if (!isadmin($USER->id)) return;
$moodleroot = (@$CFG->block_search_usemoodleroot) ? "{$CFG->dirroot}/" : '' ;
// just call pdftotext over stdout and capture the output
if (!empty($CFG->block_search_pdf_to_text_cmd)){
preg_match("/^\S+/", $CFG->block_search_pdf_to_text_cmd, $matches);
if (!file_exists("{$CFG->dirroot}/{$matches[0]}")){
if (!file_exists("{$moodleroot}{$matches[0]}")){
mtrace('Error with pdf to text converter command : exectuable not found.');
}
else{
$file = escapeshellarg($CFG->dataroot.'/'.$resource->course.'/'.$resource->reference);
$text_converter_cmd = "{$CFG->dirroot}/{$CFG->block_search_pdf_to_text_cmd} $file -";
$text_converter_cmd = "\"{$moodleroot}{$CFG->block_search_pdf_to_text_cmd}\" \"$file\" -";
$result = shell_exec($text_converter_cmd);
if ($result){
return $result;
+12 -3
View File
@@ -1,14 +1,19 @@
<?php
/**
* Global Search Engine for Moodle
* add-on 1.8+ : Valery Fremaux [[email protected]]
* 2007/08/02
*
* @package search
* @category core
* @subpackage document_wrappers
* @author Valery Fremaux [[email protected]] > 1.8
* @date 2008/03/31
* @license http://www.gnu.org/copyleft/gpl.html GNU Public License
*
* this is a format handler for getting text out of a proprietary binary format
* so it can be indexed by Lucene search engine
*/
/**
/*
* first implementation is a trivial heuristic based on ppt character stream :
* text sequence always starts with a 00 9F 0F 04 sequence followed by a 15 bytes
* sequence
@@ -22,6 +27,10 @@
* based on these following rules, here is a little empiric texte extractor for PPT
*/
/**
* @param object $resource
* @uses CFG, USER
*/
function get_text_for_indexing_ppt(&$resource){
global $CFG, $USER;
+11 -2
View File
@@ -1,13 +1,22 @@
<?php
/**
* Global Search Engine for Moodle
* add-on 1.8+ : Valery Fremaux [[email protected]]
* 2007/08/02
*
* @package search
* @category core
* @subpackage document_wrappers
* @author Valery Fremaux [[email protected]] > 1.8
* @date 2008/03/31
* @license http://www.gnu.org/copyleft/gpl.html GNU Public License
*
* this is a format handler for getting text out of a proprietary binary format
* so it can be indexed by Lucene search engine
*/
/**
* @param object $resource
* @uses CFG, USER
*/
function get_text_for_indexing_txt(&$resource){
global $CFG, $USER;
+11 -2
View File
@@ -1,13 +1,22 @@
<?php
/**
* Global Search Engine for Moodle
* add-on 1.8+ : Valery Fremaux [[email protected]]
* 2007/08/02
*
* @package search
* @category core
* @subpackage document_wrappers
* @author Valery Fremaux [[email protected]] > 1.8
* @date 2008/03/31
* @license http://www.gnu.org/copyleft/gpl.html GNU Public License
*
* this is a format handler for getting text out of a proprietary binary format
* so it can be indexed by Lucene search engine
*/
/**
* @param object $resource
* @uses CFG, USER
*/
function get_text_for_indexing_xml(&$resource){
global $CFG, $USER;
+13 -6
View File
@@ -1,24 +1,31 @@
<?php
/**
* Global Search Engine for Moodle
* Michael Champanis (mchampan) [[email protected]]
* review 1.8+ : Valery Fremaux [[email protected]]
* 2007/08/02
*
* @package search
* @category core
* @subpackage document_wrappers
* @author Michael Campanis (mchampan) [[email protected]], Valery Fremaux [[email protected]] > 1.8
* @date 2008/03/31
* @license http://www.gnu.org/copyleft/gpl.html GNU Public License
*
* document handling for all resources
* This file contains the mapping between a resource and it's indexable counterpart,
*
* Functions for iterating and retrieving the necessary records are now also included
* in this file, rather than mod/resource/lib.php
**/
*/
/**
* requires and includes
*/
require_once("$CFG->dirroot/search/documents/document.php");
require_once("$CFG->dirroot/mod/resource/lib.php");
/*
/* *
* a class for representing searchable information
*
**/
*/
class ResourceSearchDocument extends SearchDocument {
public function __construct(&$resource, $context_id) {
// generic information; required
+36 -31
View File
@@ -1,9 +1,13 @@
<?php
/**
* Global Search Engine for Moodle
* Michael Champanis (mchampan) [[email protected]]
* review 1.8+ : Valery Fremaux [[email protected]]
* 2007/08/02
*
* @package search
* @category core
* @subpackage document_wrappers
* @author Michael Campanis (mchampan) [[email protected]], Valery Fremaux [[email protected]] > 1.8
* @date 2008/03/31
* @license http://www.gnu.org/copyleft/gpl.html GNU Public License
*
* document handling for wiki activity module
* This file contains the mapping between a wiki page and it's indexable counterpart,
@@ -11,22 +15,21 @@
*
* Functions for iterating and retrieving the necessary records are now also included
* in this file, rather than mod/wiki/lib.php
*
* @license http://www.gnu.org/copyleft/gpl.html GNU Public License
* @package search
* @version 2007110400
**/
*/
/**
* includes and requires
*/
require_once("$CFG->dirroot/search/documents/document.php");
require_once("$CFG->dirroot/mod/wiki/lib.php");
/*
/**
* All the $doc->___ fields are required by the base document class!
* Each and every module that requires search functionality must correctly
* map their internal fields to the five $doc fields (id, title, author, contents
* and url). Any module specific data can be added to the $data object, which is
* serialised into a binary field in the index.
**/
*/
class WikiSearchDocument extends SearchDocument {
public function __construct(&$page, $wiki_id, $course_id, $group_id, $user_id, $context_id) {
// generic information; required
@@ -48,8 +51,8 @@ class WikiSearchDocument extends SearchDocument {
// construct the parent class
parent::__construct($doc, $data, $course_id, $group_id, $user_id, PATH_FOR_SEARCH_TYPE_WIKI);
} //constructor
} //WikiSearchDocument
}
}
/**
* converts a page name to cope Wiki constraints. Transforms spaces in plus.
@@ -58,13 +61,14 @@ class WikiSearchDocument extends SearchDocument {
*/
function wiki_name_convert($str) {
return str_replace(' ', '+', $str);
} //wiki_name_convert
}
/**
* constructs a valid link to a wiki content
* @param wikiId
* @param title
* @param version
* @param int $wikiId
* @param string $title
* @param int $version
* @uses CFG
*/
function wiki_make_link($wikiId, $title, $version) {
global $CFG;
@@ -75,9 +79,9 @@ function wiki_make_link($wikiId, $title, $version) {
/**
* rescued and converted from ewikimoodlelib.php
* retrieves latest version of a page
* @param entry the wiki object as a reference
* @param pagename the name of the page known by the wiki engine
* @param version
* @param object $entry the wiki object as a reference
* @param string $pagename the name of the page known by the wiki engine
* @param int $version
*/
function wiki_get_latest_page(&$entry, $pagename, $version = 0) {
$pagename = "'".addslashes($pagename)."'";
@@ -104,20 +108,20 @@ function wiki_get_latest_page(&$entry, $pagename, $version = 0) {
} else {
return false;
}
} //wiki_get_latest_page
}
/**
* fetches all pages, including old versions
* @param entry the wiki object as a reference
* @param object $entry the wiki object as a reference
* @return an array of record objects that represents pages of this wiki object
*/
function wiki_get_pages(&$entry) {
return get_records('wiki_pages', 'wiki', $entry->id);
} //wiki_get_pages
}
/**
* fetches all the latest versions of all the pages
*
* @param object $entry
*/
function wiki_get_latest_pages(&$entry) {
//== (My)SQL for this
@@ -141,7 +145,7 @@ function wiki_get_latest_pages(&$entry) {
}
}
return $pages;
} //wiki_get_latest_pages
}
/**
* part of search engine API
@@ -150,7 +154,7 @@ function wiki_get_latest_pages(&$entry) {
function wiki_iterator() {
$wikis = get_records('wiki');
return $wikis;
} //wiki_iterator
}
/**
* part of search engine API
@@ -182,13 +186,13 @@ function wiki_get_content_for_index(&$wiki) {
}
}
return $documents;
} //wiki_get_content_for_index
}
/**
* returns a single wiki search document based on a wiki_entry id
* @param id the id of the wiki
* @param itemtype the type of information (standard)
* @retuen a searchable document
* @return a searchable document
*/
function wiki_single_document($id, $itemtype) {
$page = get_record('wiki_pages', 'id', $id);
@@ -197,7 +201,7 @@ function wiki_single_document($id, $itemtype) {
$cm = get_record('course_modules', 'course', $entry->course, 'module', $coursemodule, 'instance', $entry->wikiid);
$context = get_context_instance(CONTEXT_MODULE, $cm->id);
return new WikiSearchDocument(get_object_vars($page), $entry->wikiid, $entry->course, $entry->groupid, $page->userid, $context->id);
} //wiki_single_document
}
/**
* dummy delete function that packs id with itemtype.
@@ -208,13 +212,13 @@ function wiki_delete($info, $itemtype) {
$object->id = $info;
$object->itemtype = $itemtype;
return $object;
} //wiki_delete
}
//returns the var names needed to build a sql query for addition/deletions
function wiki_db_names() {
//[primary id], [table name], [time created field name], [time modified field name]
return array(array('id', 'wiki_pages', 'created', 'lastmodified', 'standard'));
} //wiki_db_names
}
/**
* this function handles the access policy to contents indexed as searchable documents. If this
@@ -229,6 +233,7 @@ function wiki_db_names() {
* points out the indexed wiki page.
* @param user the user record denoting the user who searches
* @param group_id the current group used by the user when searching
* @uses CFG
* @return true if access is allowed, false elsewhere
*/
function wiki_check_text_access($path, $itemtype, $this_id, $user, $group_id, $context_id){
@@ -256,5 +261,5 @@ function wiki_check_text_access($path, $itemtype, $this_id, $user, $group_id, $c
}
return true;
} //wiki_check_text_access
}
?>
+2 -2
View File
@@ -39,10 +39,10 @@ mtrace("Testing global search capabilities:\n");
$phpversion = phpversion();
if (!search_check_php5()) {
mtrace("ERROR: PHP 5.0.0 or later required (currently using version $phpversion).");
mtrace("ERROR: PHP 5.0.0 or later required (currently using version ".phpversion().").");
exit(0);
} else {
mtrace("Success: PHP 5.0.0 or later is installed ($phpversion).\n");
mtrace("Success: PHP 5.0.0 or later is installed (".phpversion().").\n");
} //else
//fix paths for testing