From 27af904b852f47906aa997cb6a9940d3077b92e6 Mon Sep 17 00:00:00 2001 From: diml Date: Sat, 31 May 2008 17:09:59 +0000 Subject: [PATCH] fixes result list ordering issue engine give nicer results with adequate pagination. Adding icon and reference to course origine. Generalizing replacement of isadmin by doanithing capability check should contribute to close many global search related issues from http://tracker.moodle.org/browse/MDL-14646 startpoint --- search/documents/assignment_document.php | 8 +++++--- search/documents/chat_document.php | 18 ++++++++---------- search/documents/data_document.php | 13 ++++++------- search/documents/forum_document.php | 8 ++++++-- search/documents/glossary_document.php | 6 +++--- search/documents/lesson_document.php | 4 ++-- search/documents/physical_doc.php | 6 +++--- search/documents/physical_htm.php | 4 ++-- search/documents/physical_pdf.php | 4 ++-- search/documents/physical_ppt.php | 4 ++-- search/documents/physical_swf.php | 6 +++--- search/documents/physical_txt.php | 4 ++-- search/documents/physical_xml.php | 4 ++-- search/documents/resource_document.php | 5 +++-- search/documents/wiki_document.php | 2 +- 15 files changed, 50 insertions(+), 46 deletions(-) diff --git a/search/documents/assignment_document.php b/search/documents/assignment_document.php index 3dc0087d21..475f9a524a 100644 --- a/search/documents/assignment_document.php +++ b/search/documents/assignment_document.php @@ -49,7 +49,7 @@ class AssignmentSearchDocument extends SearchDocument { $data->assignmenttype = $assignmentitem['assignmenttype']; // construct the parent class - parent::__construct($doc, $data, $course_id, 0, 0, PATH_FOR_SEARCH_TYPE_ASSIGNMENT); + parent::__construct($doc, $data, $course_id, 0, 0, 'mod/'.SEARCH_TYPE_ASSIGNMENT); } } @@ -343,8 +343,10 @@ function assignment_check_text_access($path, $itemtype, $this_id, $user, $group_ */ function assignment_link_post_processing($title){ - function search_assignment_getstring($matches){ - return get_string($matches[1], 'assignment'); + if (!function_exists('search_assignment_getstring')){ + function search_assignment_getstring($matches){ + return get_string($matches[1], 'assignment'); + } } $title = preg_replace_callback('/^(description|submitted)/', 'search_assignment_getstring', $title); diff --git a/search/documents/chat_document.php b/search/documents/chat_document.php index 371c8584c9..aca20523bc 100644 --- a/search/documents/chat_document.php +++ b/search/documents/chat_document.php @@ -32,9 +32,9 @@ class ChatTrackSearchDocument extends SearchDocument { /** * constructor */ - public function __construct(&$chatsession, $chat_module_id, $course_id, $group_id, $context_id) { + public function __construct(&$chatsession, $chat_id, $chat_module_id, $course_id, $group_id, $context_id) { // generic information; required - $doc->docid = $chat_module_id.'-'.$chatsession['sessionstart'].'-'.$chatsession['sessionend']; + $doc->docid = $chat_id.'-'.$chatsession['sessionstart'].'-'.$chatsession['sessionend']; $doc->documenttype = SEARCH_TYPE_CHAT; $doc->itemtype = 'session'; $doc->contextid = $context_id; @@ -50,10 +50,10 @@ class ChatTrackSearchDocument extends SearchDocument { $doc->url = chat_make_link($chat_module_id, $chatsession['sessionstart'], $chatsession['sessionend']); // module specific information; optional - $data->chat = $chat_module_id; + $data->chat = $chat_id; // construct the parent class - parent::__construct($doc, $data, $course_id, $group_id, 0, PATH_FOR_SEARCH_TYPE_CHAT); + parent::__construct($doc, $data, $course_id, $group_id, 0, 'mod/'.SEARCH_TYPE_CHAT); } } @@ -176,7 +176,7 @@ function chat_get_content_for_index(&$chat) { foreach($aTrack->sessionusers as $aUserId){ $user = get_record('user', 'id', $aUserId); $aTrack->authors = ($user) ? fullname($user) : '' ; - $documents[] = new ChatTrackSearchDocument(get_object_vars($aTrack), $cm->id, $chat->course, $aTrack->groupid, $context->id); + $documents[] = new ChatTrackSearchDocument(get_object_vars($aTrack), $chat->id, $cm->id, $chat->course, $aTrack->groupid, $context->id); } } } @@ -207,7 +207,7 @@ function chat_single_document($id, $itemtype) { $tracks = chat_get_session_tracks($chat->id, $sessionstart, $sessionstart); if ($tracks){ $aTrack = $tracks[0]; - $document = new ChatTrackSearchDocument(get_object_vars($aTrack), $cm->id, $chat->course, $aTrack->groupid, $context->id); + $document = new ChatTrackSearchDocument(get_object_vars($aTrack), $chat_id, $cm->id, $chat->course, $aTrack->groupid, $context->id); return $document; } } @@ -255,8 +255,7 @@ function chat_check_text_access($path, $itemtype, $this_id, $user, $group_id, $c include_once("{$CFG->dirroot}/{$path}/lib.php"); - list($chat_id, $sessionstart, $sessionend) = split('-', $id); - + list($chat_id, $sessionstart, $sessionend) = split('-', $this_id); // get the chat session and all related stuff $chat = get_record('chat', 'id', $chat_id); $context = get_record('context', 'id', $context_id); @@ -271,9 +270,8 @@ function chat_check_text_access($path, $itemtype, $this_id, $user, $group_id, $c //group consistency check : checks the following situations about groups // trap if user is not same group and groups are separated - $current_group = get_current_group($course->id); $course = get_record('course', 'id', $chat->course); - if ((groupmode($course, $cm) == SEPARATEGROUPS) && !groups_is_member($group_id) && !has_capability('moodle/site:accessallgroups', $context)){ + if ((groupmode($course, $cm) == SEPARATEGROUPS) && !ismember($group_id) && !has_capability('moodle/site:accessallgroups', $context)){ if (!empty($CFG->search_access_debug)) echo "search reject : chat element is in separated group "; return false; } diff --git a/search/documents/data_document.php b/search/documents/data_document.php index 655b5d5ae0..3462c123bd 100644 --- a/search/documents/data_document.php +++ b/search/documents/data_document.php @@ -54,7 +54,7 @@ class DataSearchDocument extends SearchDocument { $data->database = $record['dataid']; // construct the parent class - parent::__construct($doc, $data, $course_id, $record['groupid'], $record['userid'], PATH_FOR_SEARCH_TYPE_DATA); + parent::__construct($doc, $data, $course_id, $record['groupid'], $record['userid'], 'mod/'.SEARCH_TYPE_DATA); } } @@ -348,9 +348,8 @@ function data_check_text_access($path, $itemtype, $this_id, $user, $group_id, $c //group consistency check : checks the following situations about groups // trap if user is not same group and groups are separated - $current_group = get_current_group($course->id); $course = get_record('course', 'id', $data->course); - if ((groupmode($course, $cm) == SEPARATEGROUPS) && !groups_is_member($group_id) && !has_capability('moodle/site:accessallgroups', $context)){ + if ((groupmode($course, $cm) == SEPARATEGROUPS) && !ismember($group_id) && !has_capability('moodle/site:accessallgroups', $context)){ if (!empty($CFG->search_access_debug)) echo "search reject : separated group owned resource "; return false; } @@ -368,7 +367,7 @@ function data_check_text_access($path, $itemtype, $this_id, $user, $group_id, $c // trap if unapproved and has not approval capabilities // TODO : report a potential capability lack of : mod/data:approve $approval = get_field('data_records', 'approved', 'id', $record->id); - if (!$approval && !isteacher($data->course) && !has_capability('mod/data:manageentries', $context)){ + if (!$approval && !has_capability('mod/data:manageentries', $context)){ if (!empty($CFG->search_access_debug)) echo "search reject : unapproved resource "; return false; } @@ -377,7 +376,7 @@ function data_check_text_access($path, $itemtype, $this_id, $user, $group_id, $c // trap if too few records // TODO : report a potential capability lack of : mod/data:viewhiddenentries $recordsAmount = count_records('data_records', 'dataid', $data->id); - if ($data->requiredentriestoview > $recordsAmount && !isteacher($data->course) && !has_capability('mod/data:manageentries', $context)) { + if ($data->requiredentriestoview > $recordsAmount && !has_capability('mod/data:manageentries', $context)) { if (!empty($CFG->search_access_debug)) echo "search reject : not enough records to view "; return false; } @@ -387,12 +386,12 @@ function data_check_text_access($path, $itemtype, $this_id, $user, $group_id, $c // TODO : report a potential capability lack of : mod/data:viewhiddenentries $now = usertime(time()); if ($data->timeviewfrom > 0) - if ($now < $data->timeviewfrom && !isteacher($data->course) && !has_capability('mod/data:manageentries', $context)) { + if ($now < $data->timeviewfrom && !has_capability('mod/data:manageentries', $context)) { if (!empty($CFG->search_access_debug)) echo "search reject : still not open activity "; return false; } if ($data->timeviewto > 0) - if ($now > $data->timeviewto && !isteacher($data->course) && !has_capability('mod/data:manageentries', $context)) { + if ($now > $data->timeviewto && !has_capability('mod/data:manageentries', $context)) { if (!empty($CFG->search_access_debug)) echo "search reject : closed activity "; return false; } diff --git a/search/documents/forum_document.php b/search/documents/forum_document.php index a26afd4a4c..5393752841 100644 --- a/search/documents/forum_document.php +++ b/search/documents/forum_document.php @@ -51,7 +51,7 @@ class ForumSearchDocument extends SearchDocument { $data->forum = $forum_id; $data->discussion = $post['discussion']; - parent::__construct($doc, $data, $course_id, $post['groupid'], $post['userid'], PATH_FOR_SEARCH_TYPE_FORUM); + parent::__construct($doc, $data, $course_id, $post['groupid'], $post['userid'], 'mod/'.SEARCH_TYPE_FORUM); } } @@ -87,6 +87,7 @@ function forum_get_content_for_index(&$forum) { if (!$forum) return $documents; $posts = forum_get_discussions_fast($forum->id); + mtrace("Found ".count($posts)." discussions to analyse in forum ".$forum->name); if (!$posts) return $documents; $coursemodule = get_field('modules', 'id', 'name', 'forum'); @@ -96,11 +97,13 @@ function forum_get_content_for_index(&$forum) { foreach($posts as $aPost) { $aPost->itemtype = 'head'; if ($aPost) { - if (strlen($aPost->message) > 0) { + if (!empty($aPost->message)) { + echo "*"; $documents[] = new ForumSearchDocument(get_object_vars($aPost), $forum->id, $forum->course, 'head', $context->id); } if ($children = forum_get_child_posts_fast($aPost->id, $forum->id)) { foreach($children as $aChild) { + echo "."; $aChild->itemtype = 'post'; if (strlen($aChild->message) > 0) { $documents[] = new ForumSearchDocument(get_object_vars($aChild), $forum->id, $forum->course, 'post', $context->id); @@ -109,6 +112,7 @@ function forum_get_content_for_index(&$forum) { } } } + mtrace("Finished discussion"); return $documents; } diff --git a/search/documents/glossary_document.php b/search/documents/glossary_document.php index 2ec59ef8fd..8950a1c6e0 100644 --- a/search/documents/glossary_document.php +++ b/search/documents/glossary_document.php @@ -52,7 +52,7 @@ class GlossarySearchDocument extends SearchDocument { $data->glossary = $entry['glossaryid']; // construct the parent class - parent::__construct($doc, $data, $course_id, -1, $entry['userid'], PATH_FOR_SEARCH_TYPE_GLOSSARY); + parent::__construct($doc, $data, $course_id, -1, $entry['userid'], 'mod/'.SEARCH_TYPE_GLOSSARY); } } @@ -227,7 +227,7 @@ function glossary_check_text_access($path, $itemtype, $this_id, $user, $group_id global $CFG; // get the glossary object and all related stuff - $entry = get_record('glossary_entries', 'id', $id); + $entry = get_record('glossary_entries', 'id', $this_id); $glossary = get_record('glossary', 'id', $entry->glossaryid); $context = get_record('context', 'id', $context_id); $cm = get_record('course_modules', 'id', $context->instanceid); @@ -251,7 +251,7 @@ function glossary_check_text_access($path, $itemtype, $this_id, $user, $group_id * @param string $title */ function glossary_link_post_processing($title){ - return mb_convert_encoding($title, 'UTF-8', 'auto'); + return mb_convert_encoding($title, 'auto', 'UTF-8'); } ?> \ No newline at end of file diff --git a/search/documents/lesson_document.php b/search/documents/lesson_document.php index 674dc0b63c..476556bde0 100644 --- a/search/documents/lesson_document.php +++ b/search/documents/lesson_document.php @@ -49,7 +49,7 @@ class LessonPageSearchDocument extends SearchDocument { // module specific information $data->lesson = $page['lessonid']; - parent::__construct($doc, $data, $course_id, 0, 0, PATH_FOR_SEARCH_TYPE_LESSON); + parent::__construct($doc, $data, $course_id, 0, 0, 'mod/'.SEARCH_TYPE_LESSON); } } @@ -210,7 +210,7 @@ function lesson_check_text_access($path, $itemtype, $this_id, $user, $group_id, * */ function lesson_link_post_processing($title){ - return mb_convert_encoding($title, 'UTF-8', 'auto'); + return mb_convert_encoding($title, 'auto', 'UTF-8'); } ?> \ No newline at end of file diff --git a/search/documents/physical_doc.php b/search/documents/physical_doc.php index 9586ff12cc..2cd48cd4fa 100644 --- a/search/documents/physical_doc.php +++ b/search/documents/physical_doc.php @@ -16,10 +16,10 @@ /** * MS Word extractor * @param object $resource -* @uses CFG, USER +* @uses $CFG */ function get_text_for_indexing_doc(&$resource, $directfile = ''){ - global $CFG, $USER; + global $CFG; // SECURITY : do not allow non admin execute anything on system !! if (!has_capability('moodle/site:doanything', get_context_instance(CONTEXT_SYSTEM))) return; @@ -44,7 +44,7 @@ function get_text_for_indexing_doc(&$resource, $directfile = ''){ mtrace("Executing : $text_converter_cmd"); $result = shell_exec($text_converter_cmd); if ($result){ - return mb_convert_encoding($result, 'UTF8', 'auto'); + return mb_convert_encoding($result, 'UTF-8', 'auto'); } else { mtrace('Error with MSWord to text converter command : execution failed. '); return ''; diff --git a/search/documents/physical_htm.php b/search/documents/physical_htm.php index aa3e6bc0f1..6cfe5967f5 100644 --- a/search/documents/physical_htm.php +++ b/search/documents/physical_htm.php @@ -15,10 +15,10 @@ /** * @param object $resource -* @uses CFG, USER +* @uses $CFG */ function get_text_for_indexing_htm(&$resource, $directfile = ''){ - global $CFG, $USER; + global $CFG; // SECURITY : do not allow non admin execute anything on system !! if (!has_capability('moodle/site:doanything', get_context_instance(CONTEXT_SYSTEM))) return; diff --git a/search/documents/physical_pdf.php b/search/documents/physical_pdf.php index 347b61f975..f1b73f7eaf 100644 --- a/search/documents/physical_pdf.php +++ b/search/documents/physical_pdf.php @@ -15,10 +15,10 @@ /** * @param object $resource -* @uses CFG, USER +* @uses $CFG */ function get_text_for_indexing_pdf(&$resource, $directfile = ''){ - global $CFG, $USER; + global $CFG; // SECURITY : do not allow non admin execute anything on system !! if (!has_capability('moodle/site:doanything', get_context_instance(CONTEXT_SYSTEM))) return; diff --git a/search/documents/physical_ppt.php b/search/documents/physical_ppt.php index 840d7dff26..76b97ae7bd 100644 --- a/search/documents/physical_ppt.php +++ b/search/documents/physical_ppt.php @@ -29,10 +29,10 @@ /** * @param object $resource -* @uses CFG, USER +* @uses $CFG */ function get_text_for_indexing_ppt(&$resource, $directfile = ''){ - global $CFG, $USER; + global $CFG; $indextext = null; diff --git a/search/documents/physical_swf.php b/search/documents/physical_swf.php index b6d33445a0..2d8a2628c8 100644 --- a/search/documents/physical_swf.php +++ b/search/documents/physical_swf.php @@ -19,10 +19,10 @@ /** * @param object $resource -* @uses CFG, USER +* @uses $CFG */ function get_text_for_indexing_swf(&$resource, $directfile = ''){ - global $CFG, $USER; + global $CFG; // SECURITY : do not allow non admin execute anything on system !! if (!has_capability('moodle/site:doanything', get_context_instance(CONTEXT_SYSTEM))) return; @@ -36,6 +36,7 @@ function get_text_for_indexing_swf(&$resource, $directfile = ''){ // just call pdftotext over stdout and capture the output if (!empty($CFG->block_search_pdf_to_text_cmd)){ + $command = trim($CFG->block_search_swf_to_text_cmd); if (!file_exists("{$moodleroot}{$command}")){ mtrace('Error with swf to text converter command : executable not found as '.$moodleroot.$command); } else { @@ -44,7 +45,6 @@ function get_text_for_indexing_swf(&$resource, $directfile = ''){ } else { $file = escapeshellarg("{$CFG->dataroot}/{$directfile}"); } - $command = trim($CFG->block_search_swf_to_text_cmd); $text_converter_cmd = "{$moodleroot}{$command} -t $file"; $result = shell_exec($text_converter_cmd); diff --git a/search/documents/physical_txt.php b/search/documents/physical_txt.php index 4917f032b6..9db35f1bad 100644 --- a/search/documents/physical_txt.php +++ b/search/documents/physical_txt.php @@ -15,10 +15,10 @@ /** * @param object $resource -* @uses CFG, USER +* @uses $CFG */ function get_text_for_indexing_txt(&$resource, $directfile = ''){ - global $CFG, $USER; + global $CFG; // SECURITY : do not allow non admin execute anything on system !! if (!has_capability('moodle/site:doanything', get_context_instance(CONTEXT_SYSTEM))) return; diff --git a/search/documents/physical_xml.php b/search/documents/physical_xml.php index 68e39c5c2b..9654b54e4f 100644 --- a/search/documents/physical_xml.php +++ b/search/documents/physical_xml.php @@ -15,10 +15,10 @@ /** * @param object $resource -* @uses CFG, USER +* @uses $CFG */ function get_text_for_indexing_xml(&$resource, $directfile = ''){ - global $CFG, $USER; + global $CFG; // SECURITY : do not allow non admin execute anything on system !! if (!has_capability('moodle/site:doanything', get_context_instance(CONTEXT_SYSTEM))) return; diff --git a/search/documents/resource_document.php b/search/documents/resource_document.php index 844da54bc7..bc73bf89d7 100644 --- a/search/documents/resource_document.php +++ b/search/documents/resource_document.php @@ -44,7 +44,7 @@ class ResourceSearchDocument extends SearchDocument { $data = array(); // construct the parent class - parent::__construct($doc, $data, $resource['course'], 0, 0, PATH_FOR_SEARCH_TYPE_RESOURCE); + parent::__construct($doc, $data, $resource['course'], 0, 0, 'mod/'.SEARCH_TYPE_RESOURCE); } //constructor } //ResourceSearchDocument @@ -323,6 +323,7 @@ function resource_check_text_access($path, $itemtype, $this_id, $user, $group_id * @param string $title */ function resource_link_post_processing($title){ - return mb_convert_encoding($title, 'UTF-8', 'auto'); + // return mb_convert_encoding($title, 'UTF-8', 'auto'); + return mb_convert_encoding($title, 'auto', 'UTF-8'); } ?> \ No newline at end of file diff --git a/search/documents/wiki_document.php b/search/documents/wiki_document.php index d23ca9e8a4..e67f7154b0 100644 --- a/search/documents/wiki_document.php +++ b/search/documents/wiki_document.php @@ -50,7 +50,7 @@ class WikiSearchDocument extends SearchDocument { $data->wiki = $wiki_id; // construct the parent class - parent::__construct($doc, $data, $course_id, $group_id, $user_id, PATH_FOR_SEARCH_TYPE_WIKI); + parent::__construct($doc, $data, $course_id, $group_id, $user_id, 'mod/'.SEARCH_TYPE_WIKI); } } -- 2.39.5