From d3516fb62c895a5eb34bef052a683f2a879208b3 Mon Sep 17 00:00:00 2001 From: diml Date: Mon, 31 Mar 2008 22:22:20 +0000 Subject: [PATCH] code review for packaging and code cleaning --- search/documents/chat_document.php | 47 ++++++++++-------- search/documents/data_document.php | 66 +++++++++++++------------ search/documents/document.php | 19 +++++--- search/documents/forum_document.php | 49 ++++++++++--------- search/documents/glossary_document.php | 50 ++++++++++--------- search/documents/lesson_document.php | 42 ++++++++-------- search/documents/physical_doc.php | 22 ++++++--- search/documents/physical_htm.php | 13 ++++- search/documents/physical_html.php | 14 ++++-- search/documents/physical_pdf.php | 19 ++++++-- search/documents/physical_ppt.php | 15 ++++-- search/documents/physical_txt.php | 13 ++++- search/documents/physical_xml.php | 13 ++++- search/documents/resource_document.php | 19 +++++--- search/documents/wiki_document.php | 67 ++++++++++++++------------ search/tests/index.php | 4 +- 16 files changed, 287 insertions(+), 185 deletions(-) diff --git a/search/documents/chat_document.php b/search/documents/chat_document.php index c4db95cee7..ff624916df 100644 --- a/search/documents/chat_document.php +++ b/search/documents/chat_document.php @@ -1,8 +1,13 @@ 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.'&start='.$start.'&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 +} ?> \ No newline at end of file diff --git a/search/documents/data_document.php b/search/documents/data_document.php index 63f3c23bc9..aaeeea3928 100644 --- a/search/documents/data_document.php +++ b/search/documents/data_document.php @@ -1,8 +1,13 @@ 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.'&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 +} ?> \ No newline at end of file diff --git a/search/documents/document.php b/search/documents/document.php index 205a2ac18a..266dead49a 100644 --- a/search/documents/document.php +++ b/search/documents/document.php @@ -1,14 +1,21 @@ 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 + } +} ?> \ No newline at end of file diff --git a/search/documents/forum_document.php b/search/documents/forum_document.php index b8d7755388..ae3b3b2190 100644 --- a/search/documents/forum_document.php +++ b/search/documents/forum_document.php @@ -1,9 +1,13 @@ 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 +} ?> \ No newline at end of file diff --git a/search/documents/glossary_document.php b/search/documents/glossary_document.php index b275baabd1..3a533ec521 100644 --- a/search/documents/glossary_document.php +++ b/search/documents/glossary_document.php @@ -1,9 +1,13 @@ 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 - +} ?> \ No newline at end of file diff --git a/search/documents/lesson_document.php b/search/documents/lesson_document.php index 7f7a42682c..42615b8927 100644 --- a/search/documents/lesson_document.php +++ b/search/documents/lesson_document.php @@ -1,29 +1,31 @@ 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}&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 +} ?> \ No newline at end of file diff --git a/search/documents/physical_doc.php b/search/documents/physical_doc.php index b2f6ccfff5..28356721ed 100644 --- a/search/documents/physical_doc.php +++ b/search/documents/physical_doc.php @@ -1,31 +1,39 @@ 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); } diff --git a/search/documents/physical_htm.php b/search/documents/physical_htm.php index 36878ba492..5df8524a4f 100644 --- a/search/documents/physical_htm.php +++ b/search/documents/physical_htm.php @@ -1,13 +1,22 @@ 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; diff --git a/search/documents/physical_html.php b/search/documents/physical_html.php index 8455e709b4..e03d44566f 100644 --- a/search/documents/physical_html.php +++ b/search/documents/physical_html.php @@ -1,13 +1,21 @@ 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 diff --git a/search/documents/physical_pdf.php b/search/documents/physical_pdf.php index fabea26636..fb48cc2ecc 100644 --- a/search/documents/physical_pdf.php +++ b/search/documents/physical_pdf.php @@ -1,28 +1,39 @@ 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; diff --git a/search/documents/physical_ppt.php b/search/documents/physical_ppt.php index 7d89e74ed7..2de768ffaf 100644 --- a/search/documents/physical_ppt.php +++ b/search/documents/physical_ppt.php @@ -1,14 +1,19 @@ 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; diff --git a/search/documents/physical_txt.php b/search/documents/physical_txt.php index 1ef3fd8d37..b20be4152f 100644 --- a/search/documents/physical_txt.php +++ b/search/documents/physical_txt.php @@ -1,13 +1,22 @@ 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; diff --git a/search/documents/physical_xml.php b/search/documents/physical_xml.php index 64162a252b..0fde56cb06 100644 --- a/search/documents/physical_xml.php +++ b/search/documents/physical_xml.php @@ -1,13 +1,22 @@ 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; diff --git a/search/documents/resource_document.php b/search/documents/resource_document.php index 95698a0850..918bb10c8b 100644 --- a/search/documents/resource_document.php +++ b/search/documents/resource_document.php @@ -1,24 +1,31 @@ 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 diff --git a/search/documents/wiki_document.php b/search/documents/wiki_document.php index f198a3fec7..23a5316837 100644 --- a/search/documents/wiki_document.php +++ b/search/documents/wiki_document.php @@ -1,9 +1,13 @@ 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 +} ?> \ No newline at end of file diff --git a/search/tests/index.php b/search/tests/index.php index 2b0290292b..f09e3cc9eb 100644 --- a/search/tests/index.php +++ b/search/tests/index.php @@ -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 -- 2.39.5