* @author Valery Fremaux [valery.fremaux@club-internet.fr] > 1.8
* @date 2008/03/31
* @license http://www.gnu.org/copyleft/gpl.html GNU Public License
+* @version Moodle 2.0
*
* document handling for assignment activity module
*
/**
* includes and requires
*/
-require_once("$CFG->dirroot/search/documents/document.php");
-require_once("$CFG->dirroot/mod/assignment/lib.php");
+require_once($CFG->dirroot.'/search/documents/document.php');
+require_once($CFG->dirroot.'/mod/assignment/lib.php');
/**
* a class for representing searchable information
/**
* part of search engine API
+* @uses $DB
*
*/
function assignment_iterator() {
- $assignments = get_records('assignment');
- return $assignments;
+ global $DB;
+
+ if ($assignments = $DB->get_records('assignment'))
+ return $assignments;
+ else
+ return array();
}
/**
* part of search engine API
+* @uses $CFG, $DB
*
*/
function assignment_get_content_for_index(&$assignment) {
- global $CFG;
+ global $CFG, $DB;
$documents = array();
- $course = get_record('course', 'id', $assignment->course);
- $coursemodule = get_field('modules', 'id', 'name', 'assignment');
- $cm = get_record('course_modules', 'course', $assignment->course, 'module', $coursemodule, 'instance', $assignment->id);
+ $course = $DB->get_record('course', array('id' => $assignment->course));
+ $coursemodule = $DB->get_field('modules', 'id', array('name' => 'assignment'));
+ $cm = $DB->get_record('course_modules', array('course' => $assignment->course, 'module' => $coursemodule, 'instance' => $assignment->id));
if ($cm){
$context = get_context_instance(CONTEXT_MODULE, $cm->id);
$submissions = assignment_get_all_submissions($assignment);
if ($submissions){
foreach($submissions as $submission){
- $owner = get_record('user', 'id', $submission->userid);
+ $owner = $DB->get_record('user', array('id' => $submission->userid));
$submission->authors = fullname($owner);
$submission->assignmenttype = $assignment->assignmenttype;
$submission->date = $submission->timemodified;
/**
* get text from a physical file in an assignment submission
+* @uses $CFG, $DB
* @param object $submission a submission for which to fetch some representative text
* @param object $assignment the relevant assignment as a context
* @param object $cm the corresponding coursemodule
* @param string $path a file from which to fetch some representative text
* @param int $contextid the moodle context if needed
-* @param documents the array of documents, by ref, where to add the new document.
+* @param array $documents the array of documents, by ref, where to add the new document.
* @return a search document when unique or false.
*/
function assignment_get_physical_file(&$submission, &$assignment, &$cm, $path, $context_id, &$documents = null){
- global $CFG;
+ global $CFG, $DB;
$fileparts = pathinfo($path);
// cannot index unknown or masked types
$submission->description = $function_name(null, $path);
// get authors
- $user = get_record('user', 'id', $submission->userid);
+ $user = $DB->get_record('user', array('id' => $submission->userid));
$submission->authors = fullname($user);
// we need a real id on file
/**
* returns a single data search document based on an assignment
+* @uses $DB
* @param string $id the id of the searchable item
* @param string $itemtype the type of information
*/
function assignment_single_document($id, $itemtype) {
+ global $DB;
+
if ($itemtype == 'requirement'){
- if (!$assignment = get_record('assignment', 'id', $id)){
+ if (!$assignment = $DB->get_record('assignment', 'id', $id)){
return null;
}
} elseif ($itemtype == 'submission') {
- if ($submission = get_record('assignment_submissions', 'id', $id)){
- $assignment = get_record('assignment', 'id', $submission->assignment);
+ if ($submission = $DB->get_record('assignment_submissions', array('id' => $id))){
+ $assignment = $DB->get_record('assignment', array('id' => $submission->assignment));
} else {
return null;
}
}
- $course = get_record('course', 'id', $assignment->course);
- $coursemodule = get_field('modules', 'id', 'name', 'assignment');
- $cm = get_record('course_modules', 'course', $course->id, 'module', $coursemodule, 'instance', $assignment->id);
+ $course = $DB->get_record('course', array('id' => $assignment->course));
+ $coursemodule = $DB->get_field('modules', 'id', array('name' => 'assignment'));
+ $cm = $DB->get_record('course_modules', array('course' => $course->id, 'module' => $coursemodule, 'instance' => $assignment->id));
if ($cm){
$context = get_context_instance(CONTEXT_MODULE, $cm->id);
* - user is legitimate in the surrounding context
* - user may be guest and guest access is allowed to the module
* - the function may perform local checks within the module information logic
-* @param path the access path to the module script code
-* @param itemtype the information subclassing (usefull for complex modules, defaults to 'standard')
-* @param this_id the item id within the information class denoted by entry_type. In chats, this id
+* @uses $CFG, $USER, $DB
+* @param string $path the access path to the module script code
+* @param string $itemtype the information subclassing (usefull for complex modules, defaults to 'standard')
+* @param int $this_id the item id within the information class denoted by entry_type. In chats, this id
* 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
+* @param int $user the user record denoting the user who searches
+* @param int $group_id the current group used by the user when searching
* @return true if access is allowed, false elsewhere
*/
function assignment_check_text_access($path, $itemtype, $this_id, $user, $group_id, $context_id){
- global $CFG, $USER;
+ global $CFG, $USER, $DB;
include_once("{$CFG->dirroot}/{$path}/lib.php");
// get the chat session and all related stuff
if ($itemtype == 'description'){
- $assignment = get_record('assignment', 'id', $this_id);
+ $assignment = $DB->get_record('assignment', array('id' => $this_id));
} elseif ($itemtype == 'submitted'){
- $submission = get_record('assignment_submissions', 'id', $this_id);
- $assignment = get_record('assignment', 'id', $submission->assignment);
+ $submission = $DB->get_record('assignment_submissions', array('id' => $this_id));
+ $assignment = $DB->get_record('assignment', array('id' => $submission->assignment));
}
- $context = get_record('context', 'id', $context_id);
- $cm = get_record('course_modules', 'id', $context->instanceid);
+ $context = $DB->get_record('context', array('id' => $context_id));
+ $cm = $DB->get_record('course_modules', array('id' => $context->instanceid));
if (!$cm->visible and !has_capability('moodle/course:viewhiddenactivities', $context)){
if (!empty($CFG->search_access_debug)) echo "search reject : hidden assignment ";
*
*/
function assignment_link_post_processing($title){
+ global $CFG;
if (!function_exists('search_assignment_getstring')){
function search_assignment_getstring($matches){
}
}
- $title = preg_replace_callback('/^(description|submitted)/', 'search_assignment_getstring', $title);
- return mb_convert_encoding($title, 'auto', 'UTF-8');
+ $title = preg_replace_callback('/^(description|submitted)/', 'search_assignment_getstring', $title);
+
+ if ($CFG->block_search_utf8dir){
+ return mb_convert_encoding($title, 'UTF-8', 'auto');
+ }
+ return mb_convert_encoding($title, 'auto', 'UTF-8');
}
?>
\ No newline at end of file
* @author Valery Fremaux [valery.fremaux@club-internet.fr] > 1.8
* @date 2008/03/31
* @license http://www.gnu.org/copyleft/gpl.html GNU Public License
+* @version Moodle 2.0
*
* document handling for chat activity module
* This file contains the mapping between a chat history and it's indexable counterpart,
/**
* includes and requires
*/
-require_once("$CFG->dirroot/search/documents/document.php");
-require_once("$CFG->dirroot/mod/chat/lib.php");
+require_once($CFG->dirroot.'/search/documents/document.php');
+require_once($CFG->dirroot.'/mod/chat/lib.php');
/**
* a class for representing searchable information
/**
* constructs a valid link to a chat content
* @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
+* @param int $start the start time of the session
+* @param int $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) {
* @param int $chat_id the database
* @param int $fromtime
* @param int $totime
-* @uses CFG
+* @uses $CFG, $DB
* @return an array of objects representing the chat sessions.
*/
function chat_get_session_tracks($chat_id, $fromtime = 0, $totime = 0) {
- global $CFG;
+ global $CFG, $DB;
- $chat = get_record('chat', 'id', $chat_id);
- $course = get_record('course', 'id', $chat->course);
- $coursemodule = get_field('modules', 'id', 'name', 'data');
- $cm = get_record('course_modules', 'course', $course->id, 'module', $coursemodule, 'instance', $chat->id);
+ $chat = $DB->get_record('chat', array('id' => $chat_id));
+ $course = $DB->get_record('course', array('id' => $chat->course));
+ $coursemodule = $DB->get_field('modules', 'id', array('name' => 'data'));
+ $cm = $DB->get_record('course_modules', array('course' => $course->id, 'module' => $coursemodule, 'instance' => $chat->id));
$groupmode = groupmode($course, $cm);
$fromtimeclause = ($fromtime) ? "AND timestamp >= {$fromtime}" : '';
$totimeclause = ($totime) ? "AND timestamp <= {$totime}" : '';
$tracks = array();
- $messages = get_records_select('chat_messages', "chatid = '{$chat_id}' $fromtimeclause $totimeclause", "timestamp DESC");
+ $messages = $DB->get_records_select('chat_messages', "chatid = ':chatid' :from :to", array('chatid' => $chat_id, 'from' => $fromtimeclause, 'to' => $totimeclause), 'timestamp DESC');
if ($messages){
// splits discussions against groups
$groupedMessages = array();
/**
* part of search engine API
+* @uses $DB
*
*/
function chat_iterator() {
- $chatrooms = get_records('chat');
+ global $DB;
+
+ $chatrooms = $DB->get_records('chat');
return $chatrooms;
}
/**
* part of search engine API
+* @uses $DB
+* @param reference $chat
*
*/
function chat_get_content_for_index(&$chat) {
+ global $DB;
+
$documents = array();
- $course = get_record('course', 'id', $chat->course);
- $coursemodule = get_field('modules', 'id', 'name', 'chat');
- $cm = get_record('course_modules', 'course', $chat->course, 'module', $coursemodule, 'instance', $chat->id);
+ $course = $DB->get_record('course', array('id' => $chat->course));
+ $coursemodule = $DB->get_field('modules', 'id', array('name' => 'chat'));
+ $cm = $DB->get_record('course_modules', array('course' => $chat->course, 'module' => $coursemodule, 'instance' => $chat->id));
if ($cm){
$context = get_context_instance(CONTEXT_MODULE, $cm->id);
if ($sessionTracks){
foreach($sessionTracks as $aTrackId => $aTrack) {
foreach($aTrack->sessionusers as $aUserId){
- $user = get_record('user', 'id', $aUserId);
+ $user = $DB->get_record('user', array('id' => $aUserId));
$aTrack->authors = ($user) ? fullname($user) : '' ;
$documents[] = new ChatTrackSearchDocument(get_object_vars($aTrack), $chat->id, $cm->id, $chat->course, $aTrack->groupid, $context->id);
}
* - the chat id
* - the timestamp when the session starts
* - the timestamp when the session ends
+* @uses $DB
* @param id the multipart chat session id
* @param itemtype the type of information (session is the only type)
*/
function chat_single_document($id, $itemtype) {
+ global $DB;
+
list($chat_id, $sessionstart, $sessionend) = split('-', $id);
- $chat = get_record('chat', 'id', $chat_id);
- $course = get_record('course', 'id', $chat->course);
- $coursemodule = get_field('modules', 'id', 'name', 'chat');
- $cm = get_record('course_modules', 'course', $course->id, 'module', $coursemodule, 'instance', $chat->id);
+ $chat = $DB->get_record('chat', array('id' => $chat_id));
+ $course = $DB->get_record('course', array('id' => $chat->course));
+ $coursemodule = $DB->get_field('modules', 'id', array('name' => 'chat'));
+ $cm = $DB->get_record('course_modules', array('course' => $course->id, 'module' => $coursemodule, 'instance' => $chat->id));
if ($cm){
$context = get_context_instance(CONTEXT_MODULE, $cm->id);
* - user is legitimate in the surrounding context
* - user may be guest and guest access is allowed to the module
* - the function may perform local checks within the module information logic
-* @param path the access path to the module script code
-* @param itemtype the information subclassing (usefull for complex modules, defaults to 'standard')
-* @param this_id the item id within the information class denoted by entry_type. In chats, this id
+* @param string $path the access path to the module script code
+* @param string $itemtype the information subclassing (usefull for complex modules, defaults to 'standard')
+* @param int $this_id the item id within the information class denoted by entry_type. In chats, this id
* 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
+* @param int $user the user record denoting the user who searches
+* @param int $group_id the current group used by the user when searching
+* @uses $CFG, $DB
* @return true if access is allowed, false elsewhere
*/
function chat_check_text_access($path, $itemtype, $this_id, $user, $group_id, $context_id){
- global $CFG;
+ global $CFG, $DB;
include_once("{$CFG->dirroot}/{$path}/lib.php");
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);
- $cm = get_record('course_modules', 'id', $context->instanceid);
- // $cm = get_coursemodule_from_instance('chat', $chat->id, $chat->course);
- // $context = get_context_instance(CONTEXT_MODULE, $cm->id);
+ $chat = $DB->get_record('chat', array('id' => $chat_id));
+ $context = $DB->get_record('context', array('id' => $context_id));
+ $cm = $DB->get_record('course_modules', array('id' => $context->instanceid));
if (!$cm->visible and !has_capability('moodle/course:viewhiddenactivities', $context)){
if (!empty($CFG->search_access_debug)) echo "search reject : hidden chat ";
//group consistency check : checks the following situations about groups
// trap if user is not same group and groups are separated
- $course = get_record('course', 'id', $chat->course);
+ $course = $DB->get_record('course', array('id' => $chat->course));
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;
/**
* this call back is called when displaying the link for some last post processing
+* @uses $CFG
+* @param string $title
*
*/
function chat_link_post_processing($title){
- setLocale(LC_TIME, substr(current_language(), 0, 2));
- $title = preg_replace('/TT_(.*)_TT/e', "userdate(\\1)", $title);
- return mb_convert_encoding($title, 'UTF-8', 'auto');
+ global $CFG;
+ setLocale(LC_TIME, substr(current_language(), 0, 2));
+ $title = preg_replace('/TT_(.*)_TT/e', "userdate(\\1)", $title);
+
+ if ($CFG->block_search_utf8dir){
+ return mb_convert_encoding($title, 'UTF-8', 'auto');
+ }
+ return mb_convert_encoding($title, 'auto', 'UTF-8');
}
?>
\ No newline at end of file
* @author Valery Fremaux [valery.fremaux@club-internet.fr] > 1.8
* @date 2008/03/31
* @license http://www.gnu.org/copyleft/gpl.html GNU Public License
+* @version Moodle 2.0
*
* document handling for data activity module
* This file contains the mapping between a database object and it's indexable counterpart,
/**
* includes and requires
*/
-require_once("$CFG->dirroot/search/documents/document.php");
-require_once("$CFG->dirroot/mod/data/lib.php");
+require_once($CFG->dirroot.'/search/documents/document.php');
+require_once($CFG->dirroot.'/mod/data/lib.php');
/**
* a class for representing searchable information (data records)
* constructor
*/
public function __construct(&$record, $course_id, $context_id) {
+ global $DB;
+
// generic information; required
$doc->docid = $record['id'];
$doc->documenttype = SEARCH_TYPE_DATA;
$doc->date = $record['timemodified'];
//remove '(ip.ip.ip.ip)' from data record author field
if ($record['userid']){
- $user = get_record('user', 'id', $record['userid']);
+ $user = $DB->get_record('user', array('id' => $record['userid']));
}
$doc->author = (isset($user)) ? $user->firstname.' '.$user->lastname : '' ;
$doc->contents = $record['content'];
/**
* constructs a valid link to a data record content
-* @param database_id the database reference
-* @param record_id the record reference
-* @uses CFG
+* @param int $database_id the database reference
+* @param int $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) {
/**
* 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
+* @param int $database_id the database
+* @param string $typematch a comma separated list of types that should be considered for searching or *
+* @uses $CFG, $DB
* @return an array of objects representing the data records.
*/
function data_get_records($database_id, $typematch = '*') {
- global $CFG;
+ global $CFG, $DB;
- $fieldset = get_records('data_fields', 'dataid', $database_id);
+ $fieldset = $DB->get_records('data_fields', array('dataid' => $database_id));
$query = "
SELECT
c.*
FROM
- {data_content} as c,
- {data_records} as r
+ {data_content} c,
+ {data_records} r
WHERE
c.recordid = r.id AND
- r.dataid = {$database_id}
+ r.dataid = ?
ORDER BY
c.fieldid
";
- $data = get_records_sql($query);
+ $data = $DB->get_records_sql($query, array($database_id));
$records = array();
if ($data){
foreach($data as $aDatum){
/**
* fetches all the comments for a given database
-* @param database_id the database
-* @uses CFG
+* @param int $database_id the database
+* @uses $CFG, $DB
* @return an array of objects representing the data record comments.
*/
function data_get_comments($database_id) {
- global $CFG;
+ global $CFG, $DB;
$query = "
SELECT
c.modified,
r.dataid
FROM
- {data_comments} as c,
- {data_records} as r
+ {data_comments} c,
+ {data_records} r
WHERE
- c.recordid = r.id
+ c.recordid = r.id AND
+ r.dataid = ?
";
- $comments = get_records_sql($query);
+ $comments = $DB->get_records_sql($query, array($database_id));
return $comments;
}
/**
* part of search engine API
+* @uses $DB
*
*/
function data_iterator() {
- $databases = get_records('data');
+ global $DB;
+
+ $databases = $DB->get_records('data');
return $databases;
}
/**
* part of search engine API
-* @param database the database instance
+* @uses $DB
+* @param reference $database the database instance
* @return an array of searchable documents
*/
function data_get_content_for_index(&$database) {
+ global $DB;
$documents = array();
$recordTitles = array();
- $coursemodule = get_field('modules', 'id', 'name', 'data');
- $cm = get_record('course_modules', 'course', $database->course, 'module', $coursemodule, 'instance', $database->id);
+ $coursemodule = $DB->get_field('modules', 'id', array('name' => 'data'));
+ $cm = $DB->get_record('course_modules', array('course' => $database->course, 'module' => $coursemodule, 'instance' => $database->id));
$context = get_context_instance(CONTEXT_MODULE, $cm->id);
// getting records for indexing
$records_content = data_get_records($database->id, 'text');
if ($records_content){
- foreach(array_keys($records_content) as $aRecordId) {
+ foreach(array_keys($records_content) as $arecordid) {
// extract title as first record in order
- $first = $records_content[$aRecordId]['_first'];
- unset($records_content[$aRecordId]['_first']);
+ $first = $records_content[$arecordid]['_first'];
+ unset($records_content[$arecordid]['_first']);
// concatenates all other texts
- foreach($records_content[$aRecordId] as $aField){
- $content = @$content.' '.$aField;
+ $content = '';
+ foreach($records_content[$arecordid] as $afield){
+ $content = @$content.' '.$afield;
}
if (strlen($content) > 0) {
unset($recordMetaData);
- $recordMetaData = get_record('data_records', 'id', $aRecordId);
+ $recordMetaData = $DB->get_record('data_records', array('id' => $arecordid));
$recordMetaData->title = $first;
- $recordTitles[$aRecordId] = $first;
+ $recordTitles[$arecordid] = $first;
$recordMetaData->content = $content;
$documents[] = new DataSearchDocument(get_object_vars($recordMetaData), $database->course, $context->id);
}
/**
* returns a single data search document based on a data entry id
-* @param id the id of the record
-* @param the type of the information
+* @uses $DB
+* @param in $id the id of the record
+* @param string $itemtype the type of the information
* @return a single searchable document
*/
function data_single_document($id, $itemtype) {
+ global $DB;
if ($itemtype == 'record'){
// get main record
- $recordMetaData = get_record('data_records', 'id', $id);
+ $recordMetaData = $DB->get_record('data_records', array('id' => $id));
// get context
- $record_course = get_field('data', 'course', 'id', $recordMetaData->dataid);
- $coursemodule = get_field('modules', 'id', 'name', 'data');
- $cm = get_record('course_modules', 'course', $record_course, 'module', $coursemodule, 'instance', $recordMetaData->dataid);
+ $record_course = $DB->get_field('data', 'course', array('id' => $recordMetaData->dataid));
+ $coursemodule = $DB->get_field('modules', 'id', array('name' => 'data'));
+ $cm = $DB->get_record('course_modules', array('course' => $record_course, 'module' => $coursemodule, 'instance' => $recordMetaData->dataid));
$context = get_context_instance(CONTEXT_MODULE, $cm->id);
// compute text
- $recordData = get_records_select('data_content', "recordid = $id AND type = 'text'", 'recordid');
+ $recordData = $DB->get_records_select('data_content', "recordid = ? AND type = 'text'", array($id), 'recordid');
$accumulator = '';
if ($recordData){
$first = $recordData[0];
$documents[] = new DataSearchDocument(get_object_vars($recordMetaData), $record_course, $context->id);
} elseif($itemtype == 'comment') {
// get main records
- $comment = get_record('data_comments', 'id', $id);
- $record = get_record('data_records', 'id', $comment->recordid);
+ $comment = $DB->get_record('data_comments', array('id' => $id));
+ $record = $DB->get_record('data_records', array('id' => $comment->recordid));
// get context
- $record_course = get_field('data', 'course', 'id', $record->dataid);
- $coursemodule = get_field('modules', 'id', 'name', 'data');
- $cm = get_record('course_modules', 'course', $record_course, 'module', $coursemodule, 'instance', $recordMetaData->dataid);
+ $record_course = $DB->get_field('data', 'course', array('id' => $record->dataid));
+ $coursemodule = $DB->get_field('modules', 'id', array('name' => 'data'));
+ $cm = $DB->get_record('course_modules', array('course' => $record_course, 'module' => $coursemodule, 'instance' => $recordMetaData->dataid));
$context = get_context_instance(CONTEXT_MODULE, $cm->id);
// add extra fields
- $comment->title = get_field('search_document', 'title', 'docid', $record->id, 'itemtype', 'record');
+ $comment->title = $DB->get_field('search_document', 'title', array('docid' => $record->id, 'itemtype' => 'record'));
$comment->dataid = $record->dataid;
$comment->groupid = $record->groupid;
// make document
* - user is legitimate in the surrounding context
* - user may be guest and guest access is allowed to the module
* - the function may perform local checks within the module information logic
-* @param path the access path to the module script code
-* @param itemtype the information subclassing (usefull for complex modules, defaults to 'standard')
-* @param this_id the item id within the information class denoted by itemtype. In databases, this id
+* @param string $path the access path to the module script code
+* @param string $itemtype the information subclassing (usefull for complex modules, defaults to 'standard')
+* @param int $this_id the item id within the information class denoted by itemtype. In databases, this id
* 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
+* @param object $user the user record denoting the user who searches
+* @param int $group_id the current group used by the user when searching
+* @uses $CFG, $DB
* @return true if access is allowed, false elsewhere
*/
function data_check_text_access($path, $itemtype, $this_id, $user, $group_id, $context_id){
- global $CFG;
+ global $CFG, $DB;
// get the database object and all related stuff
if ($itemtype == 'record'){
- $record = get_record('data_records', 'id', $this_id);
+ $record = $DB->get_record('data_records', array('id' => $this_id));
}
elseif($itemtype == 'comment'){
- $comment = get_record('data_comments', 'id', $this_id);
- $record = get_record('data_records', 'id', $comment->recordid);
+ $comment = $DB->get_record('data_comments', array('id' => $this_id));
+ $record = $DB->get_record('data_records', array('id' => $comment->recordid));
}
else{
// we do not know what type of information is required
return false;
}
- $data = get_record('data', 'id', $record->dataid);
- $context = get_record('context', 'id', $context_id);
- $cm = get_record('course_modules', 'id', $context->instanceid);
- // $cm = get_coursemodule_from_instance('data', $data->id, $data->course);
- // $context = get_context_instance(CONTEXT_MODULE, $cm->id);
+ $data = $DB->get_record('data', array('id' => $record->dataid));
+ $context = $DB->get_record('context', array('id' => $context_id));
+ $cm = $DB->get_record('course_modules', array('id' => $context->instanceid));
- if (!$cm->visible and !has_capability('moodle/course:viewhiddenactivities', $context)) {
+ if (!$cm->visible && !has_capability('moodle/course:viewhiddenactivities', $context)) {
if (!empty($CFG->search_access_debug)) echo "search reject : hidden database ";
return false;
}
//group consistency check : checks the following situations about groups
// trap if user is not same group and groups are separated
- $course = get_record('course', 'id', $data->course);
+ $course = $DB->get_record('course', 'id', $data->course);
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;
//approval check
// 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);
+ $approval = $DB->get_field('data_records', 'approved', array('id' => $record->id));
if (!$approval && !has_capability('mod/data:manageentries', $context)){
if (!empty($CFG->search_access_debug)) echo "search reject : unapproved resource ";
return false;
//minimum records to view check
// trap if too few records
// TODO : report a potential capability lack of : mod/data:viewhiddenentries
- $recordsAmount = count_records('data_records', 'dataid', $data->id);
+ $recordsAmount = $DB->count_records('data_records', array('dataid' => $data->id));
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;
* @param string $title
*/
function data_link_post_processing($title){
- return mb_convert_encoding($title, 'UTF-8', 'auto');
+ global $CFG;
+
+ if ($CFG->block_search_utf8dir){
+ return mb_convert_encoding($title, 'UTF-8', 'auto');
+ }
+ return mb_convert_encoding($title, 'auto', 'UTF-8');
}
?>
\ No newline at end of file
*
*/
abstract class SearchDocument extends Zend_Search_Lucene_Document {
- public function __construct(&$doc, &$data, $course_id, $group_id, $user_id, $path) {
+ public function __construct(&$doc, &$data, $course_id, $group_id, $user_id, $path, $additional_keyset = null) {
//document identification and indexing
$this->addField(Zend_Search_Lucene_Field::Keyword('docid', $doc->docid));
//document type : the name of the Moodle element that manages it
// of multiple capabilities in their code. This possibility should be left open here.
$this->addField(Zend_Search_Lucene_Field::UnIndexed('capabilities', $caps));
*/
+
+ /*
+ // Additional key set allows a module to ask for extensible criteria based search
+ // depending on the module internal needs.
+ */
+ if (!empty($additional_keyset)){
+ foreach($additional_keyset as $keyname => $keyvalue){
+ $this->addField(Zend_Search_Lucene_Field::Keyword($keyname, $keyvalue));
+ }
+ }
}
}
* @author Michael Campanis (mchampan) [cynnical@gmail.com], Valery Fremaux [valery.fremaux@club-internet.fr] > 1.8
* @date 2008/03/31
* @license http://www.gnu.org/copyleft/gpl.html GNU Public License
+* @version Moodle 2.0
*
* document handling for forum activity module
* This file contains the mapping between a forum post and it's indexable counterpart,
/**
* includes and requires
*/
-require_once("$CFG->dirroot/search/documents/document.php");
-require_once("$CFG->dirroot/mod/forum/lib.php");
+require_once($CFG->dirroot.'/search/documents/document.php');
+require_once($CFG->dirroot.'/mod/forum/lib.php');
/**
* a class for representing searchable information
/**
* constructor
+ * @uses $DB;
*/
public function __construct(&$post, $forum_id, $course_id, $itemtype, $context_id) {
+ global $DB;
+
// generic information
$doc->docid = $post['id'];
$doc->documenttype = SEARCH_TYPE_FORUM;
$doc->title = $post['subject'];
- $user = get_record('user', 'id', $post['userid']);
+ $user = $DB->get_record('user', array('id' => $post['userid']));
$doc->author = fullname($user);
$doc->contents = $post['message'];
$doc->date = $post['created'];
/**
* constructs a valid link to a chat content
-* @param discussion_id the discussion
-* @param post_id the id of a single post
+* @uses $CFG
+* @param int $discussion_id the discussion
+* @param int $post_id the id of a single post
* @return a well formed link to forum message display
*/
function forum_make_link($discussion_id, $post_id) {
/**
* search standard API
+* @uses $DB;
*
*/
function forum_iterator() {
- $forums = get_records('forum');
+ global $DB;
+
+ $forums = $DB->get_records('forum');
return $forums;
}
/**
* search standard API
-* @param forum a forum instance
+* @uses $DB
+* @param reference $forum a forum instance
* @return an array of searchable documents
*/
function forum_get_content_for_index(&$forum) {
+ global $DB;
$documents = array();
if (!$forum) return $documents;
mtrace("Found ".count($posts)." discussions to analyse in forum ".$forum->name);
if (!$posts) return $documents;
- $coursemodule = get_field('modules', 'id', 'name', 'forum');
- $cm = get_record('course_modules', 'course', $forum->course, 'module', $coursemodule, 'instance', $forum->id);
+ $coursemodule = $DB->get_field('modules', 'id', array('name' => 'forum'));
+ $cm = $DB->get_record('course_modules', array('course' => $forum->course, 'module' => $coursemodule, 'instance' => $forum->id));
$context = get_context_instance(CONTEXT_MODULE, $cm->id);
foreach($posts as $aPost) {
/**
* returns a single forum search document based on a forum entry id
-* @param id an id for a single information stub
-* @param itemtype the type of information
+* @uses $DB
+* @param int $id an id for a single information stub
+* @param string $itemtype the type of information
*/
function forum_single_document($id, $itemtype) {
+ global $DB;
// both known item types are posts so get them the same way
- $post = get_record('forum_posts', 'id', $id);
- $discussion = get_record('forum_discussions', 'id', $post->discussion);
- $coursemodule = get_field('modules', 'id', 'name', 'forum');
- $cm = get_record('course_modules', 'course', $discussion->course, 'module', $coursemodule, 'instance', $discussion->forum);
+ $post = $DB->get_record('forum_posts', array('id' => $id));
+ $discussion = $DB->get_record('forum_discussions', array('id' => $post->discussion));
+ $coursemodule = $DB->get_field('modules', 'id', array('name' => 'forum'));
+ $cm = $DB->get_record('course_modules', array('course' => $discussion->course, 'module' => $coursemodule, 'instance' => $discussion->forum));
if ($cm){
$context = get_context_instance(CONTEXT_MODULE, $cm->id);
$post->groupid = $discussion->groupid;
/**
* reworked faster version from /mod/forum/lib.php
-* @param forum_id a forum identifier
-* @uses CFG, USER
+* @param int $forum_id a forum identifier
+* @uses $CFG, $USER, $DB
* @return an array of posts
+* @todo get rid of old isteacher() call
*/
function forum_get_discussions_fast($forum_id) {
- global $CFG, $USER;
+ global $CFG, $USER, $DB;
$timelimit='';
if (!empty($CFG->forum_enabletimedposts)) {
if (!((has_capability('moodle/site:doanything', get_context_instance(CONTEXT_SYSTEM))
- and !empty($CFG->admineditalways)) || isteacher(get_field('forum', 'course', 'id', $forum_id)))) {
+ && !empty($CFG->admineditalways)) || isteacher(get_field('forum', 'course', 'id', $forum_id)))) {
$now = time();
$timelimit = " AND ((d.timestart = 0 OR d.timestart <= '$now') AND (d.timeend = 0 OR d.timeend > '$now')";
if (!empty($USER->id)) {
}
$query = "
- SELECT
+ SELECT
p.id,
p.subject,
p.discussion,
ON
p.userid = u.id
WHERE
- d.forum = '{$forum_id}' AND
+ d.forum = ? AND
p.parent = 0
$timelimit
ORDER BY
d.timemodified DESC
";
- return get_records_sql($query);
+ return $DB->get_records_sql($query, array($forum_id));
}
/**
* 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
+* @param int $parent the id of the first post within the discussion
+* @param int $forum_id the forum identifier
+* @uses $CFG, $DB
* @return an array of posts
*/
function forum_get_child_posts_fast($parent, $forum_id) {
- global $CFG;
+ global $CFG, $DB;
$query = "
SELECT
p.discussion,
p.message,
p.created,
- {$forum_id} AS forum,
+ ? AS forum,
p.userid,
d.groupid,
u.firstname,
ON
p.userid = u.id
WHERE
- p.parent = '{$parent}'
+ p.parent = ?
ORDER BY
p.created ASC
";
- return get_records_sql($query);
+ return $DB->get_records_sql($query, array($forum_id, $parent));
}
/**
* - user is legitimate in the surrounding context
* - user may be guest and guest access is allowed to the module
* - the function may perform local checks within the module information logic
-* @param path the access path to the module script code
-* @param itemtype the information subclassing (usefull for complex modules, defaults to 'standard')
-* @param this_id the item id within the information class denoted by itemtype. In forums, this id
+* @param string $path the access path to the module script code
+* @param string $itemtype the information subclassing (usefull for complex modules, defaults to 'standard')
+* @param int $this_id the item id within the information class denoted by itemtype. In forums, this 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
+* @param object $user the user record denoting the user who searches
+* @param int $group_id the current group used by the user when searching
+* @uses $CFG, $USER, $DB
* @return true if access is allowed, false elsewhere
*/
function forum_check_text_access($path, $itemtype, $this_id, $user, $group_id, $context_id){
- global $CFG, $USER;
+ global $CFG, $USER, $DB;
include_once("{$CFG->dirroot}/{$path}/lib.php");
// get the forum post and all related stuff
- $post = get_record('forum_posts', 'id', $this_id);
- $discussion = get_record('forum_discussions', 'id', $post->discussion);
- $context = get_record('context', 'id', $context_id);
- $cm = get_record('course_modules', 'id', $context->instanceid);
+ $post = $DB->get_record('forum_posts', array('id' => $this_id));
+ $discussion = $DB->get_record('forum_discussions', array('id' => $post->discussion));
+ $context = $DB->get_record('context', array('id' => $context_id));
+ $cm = $DB->get_record('course_modules', array('id' => $context->instanceid));
// $cm = get_coursemodule_from_instance('forum', $discussion->forum, $discussion->course);
// $context = get_context_instance(CONTEXT_MODULE, $cm->id);
if (!$cm->visible and !has_capability('moodle/course:viewhiddenactivities', $context)){
// group check : entries should be in accessible groups
$current_group = get_current_group($discussion->course);
- $course = get_record('course', 'id', $discussion->course);
+ $course = $DB->get_record('course', array('id' => $discussion->course));
if ($group_id >= 0 && (groupmode($course, $cm) == SEPARATEGROUPS) && ($group_id != $current_group) && !has_capability('mod/forum:viewdiscussionsfromallgroups', $context)){
if (!empty($CFG->search_access_debug)) echo "search reject : separated grouped forum item";
return false;
/**
* post processes the url for cleaner output.
+* @uses $CFG
* @param string $title
*/
function forum_link_post_processing($title){
- // return mb_convert_encoding($title, 'UTF-8', 'auto');
+ global $CFG;
+
+ if ($CFG->block_search_utf8dir){
+ return mb_convert_encoding($title, 'UTF-8', 'auto');
+ }
return mb_convert_encoding($title, 'auto', 'UTF-8');
}
* @author Michael Campanis (mchampan) [cynnical@gmail.com], Valery Fremaux [valery.fremaux@club-internet.fr] > 1.8
* @date 2008/03/31
* @license http://www.gnu.org/copyleft/gpl.html GNU Public License
+* @version Moodle 2.0
*
* document handling for glossary activity module
* This file contains a mapping between a glossary entry and it's indexable counterpart,
/**
* includes and requires
*/
-require_once("$CFG->dirroot/search/documents/document.php");
+require_once($CFG->dirroot.'/search/documents/document.php');
/**
* a class for representing searchable information
*
*/
public function __construct(&$entry, $course_id, $context_id) {
+ global $DB;
+
// generic information; required
$doc->docid = $entry['id'];
$doc->documenttype = SEARCH_TYPE_GLOSSARY;
$doc->date = $entry['timecreated'];
if ($entry['userid'])
- $user = get_record('user', 'id', $entry['userid']);
+ $user = $DB->get_record('user', array('id' => $entry['userid']));
$doc->author = ($user ) ? $user->firstname.' '.$user->lastname : '' ;
$doc->contents = strip_tags($entry['definition']);
$doc->url = glossary_make_link($entry['id']);
/**
* document constructor
+ * @uses $DB
*/
public function __construct(&$entry, $glossary_id, $course_id, $context_id) {
+ global $DB;
+
// generic information; required
$doc->docid = $entry['id'];
$doc->documenttype = SEARCH_TYPE_GLOSSARY;
$doc->date = $entry['timemodified'];
if ($entry['userid'])
- $user = get_record('user', 'id', $entry['userid']);
+ $user = $DB->get_record('user', array('id' => $entry['userid']));
$doc->author = ($user ) ? $user->firstname.' '.$user->lastname : '' ;
$doc->contents = strip_tags($entry['entrycomment']);
$doc->url = glossary_make_link($entry['entryid']);
$data->glossary = $glossary_id;
// 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);
}
}
/**
* constructs valid access links to information
-* @param entry_id the id of the glossary entry
+* @uses $CFG
+* @param int $entry_id the id of the glossary entry
* @return a full featured link element as a string
*/
function glossary_make_link($entry_id) {
// Suggestion : bounce on popup within the glossarie's showentry page
// 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);";
+ 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);";
}
/**
*
*/
function glossary_iterator() {
- $glossaries = get_records('glossary');
- return $glossaries;
+ global $DB;
+
+ $glossaries = $DB->get_records('glossary');
+ return $glossaries;
}
/**
* part of search engine API
-* @glossary a glossary instance
+* @uses $DB
+* @param object $glossary a glossary instance
* @return an array of searchable documents
*/
function glossary_get_content_for_index(&$glossary) {
global $DB;
// get context
- $coursemodule = get_field('modules', 'id', 'name', 'glossary');
- $cm = get_record('course_modules', 'course', $glossary->course, 'module', $coursemodule, 'instance', $glossary->id);
+ $coursemodule = $DB->get_field('modules', 'id', array('name' => 'glossary'));
+ $cm = $DB->get_record('course_modules', array('course' => $glossary->course, 'module' => $coursemodule, 'instance' => $glossary->id));
$context = get_context_instance(CONTEXT_MODULE, $cm->id);
$documents = array();
$entryIds = array();
// index entries
- $entries = get_records('glossary_entries', 'glossaryid', $glossary->id);
+ $entries = $DB->get_records('glossary_entries', array('glossaryid' => $glossary->id));
if ($entries){
foreach($entries as $entry) {
$concepts[$entry->id] = $entry->concept;
/**
* part of search engine API
-* @param id the glossary entry identifier
-* @itemtype the type of information
+* @uses $DB
+* @param int $id the glossary entry identifier
+* @param string $itemtype the type of information
* @return a single search document based on a glossary entry
*/
function glossary_single_document($id, $itemtype) {
+ global $DB;
+
if ($itemtype == 'standard'){
- $entry = get_record('glossary_entries', 'id', $id);
+ $entry = $DB->get_record('glossary_entries', array('id' => $id));
}
elseif ($itemtype == 'comment'){
- $comment = get_record('glossary_comments', 'id', $id);
- $entry = get_record('glossary_entries', 'id', $comment->entryid);
+ $comment = $DB->get_record('glossary_comments', array('id' => $id));
+ $entry = $DB->get_record('glossary_entries', array('id' => $comment->entryid));
}
- $glossary_course = get_field('glossary', 'course', 'id', $entry->glossaryid);
- $coursemodule = get_field('modules', 'id', 'name', 'glossary');
- $cm = get_record('course_modules', 'course', $glossary_course, 'module', $coursemodule, 'instance', $entry->glossaryid);
+ $glossary_course = $DB->get_field('glossary', 'course', array('id' => $entry->glossaryid));
+ $coursemodule = $DB->get_field('modules', 'id', array('name' => 'glossary'));
+ $cm = $DB->get_record('course_modules', array('course' => $glossary_course, 'module' => $coursemodule, 'instance' => $entry->glossaryid));
$context = get_context_instance(CONTEXT_MODULE, $cm->id);
if ($itemtype == 'standard'){
return new GlossarySearchDocument(get_object_vars($entry), $glossary_course, $context->id);
* - user is legitimate in the surrounding context
* - user may be guest and guest access is allowed to the module
* - the function may perform local checks within the module information logic
+* @uses $CFG, $DB
* @param string $path the access path to the module script code
* @param string $itemtype the information subclassing (usefull for complex modules, defaults to 'standard')
* @param int $this_id the item id within the information class denoted by itemtype. In glossaries, this id
* @return true if access is allowed, false elsewhere
*/
function glossary_check_text_access($path, $itemtype, $this_id, $user, $group_id, $context_id){
- global $CFG;
+ global $CFG, $DB;
// get the glossary object and all related stuff
- $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);
- // $cm = get_coursemodule_from_instance('glossary', $glossary->id, $glossary->course);
- // $context = get_context_instance(CONTEXT_MODULE, $cm->id);
+ $entry = $DB->get_record('glossary_entries', array('id' => $this_id));
+ $glossary = $DB->get_record('glossary', array('id' => $entry->glossaryid));
+ $context = $DB->get_record('context', array('id' => $context_id));
+ $cm = $DB->get_record('course_modules', array('id' => $context->instanceid));
if (!$cm->visible && !has_capability('moodle/course:viewhiddenactivities', $context)) {
return false;
* @param string $title
*/
function glossary_link_post_processing($title){
+ global $CFG;
+
+ if ($CFG->block_search_utf8dir){
+ return mb_convert_encoding($title, 'UTF-8', 'auto');
+ }
return mb_convert_encoding($title, 'auto', 'UTF-8');
}
--- /dev/null
+<?php
+/**
+* Global Search Engine for Moodle
+*
+* @package search
+* @category core
+* @subpackage document_wrappers
+* @author Valery Fremaux [valery.fremaux@club-internet.fr] > 1.9
+* @date 2008/03/31
+* @license http://www.gnu.org/copyleft/gpl.html GNU Public License
+* @version Moodle 2.0
+*
+* 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 LabelSearchDocument extends SearchDocument {
+ public function __construct(&$label, $context_id) {
+ // generic information; required
+ $doc->docid = $label['id'];
+ $doc->documenttype = SEARCH_TYPE_LABEL;
+ $doc->itemtype = 'label';
+ $doc->contextid = $context_id;
+
+ $doc->title = strip_tags($label['name']);
+ $doc->date = $label['timemodified'];
+ $doc->author = '';
+ $doc->contents = strip_tags($label['content']);
+ $doc->url = label_make_link($label['course']);
+
+ // module specific information; optional
+ $data = array();
+
+ // construct the parent class
+ parent::__construct($doc, $data, $label['course'], 0, 0, 'mod/'.SEARCH_TYPE_LABEL);
+ } //constructor
+}
+
+/**
+* constructs valid access links to information
+* @param int $resourceId the of the resource
+* @return a full featured link element as a string
+*/
+function label_make_link($course_id) {
+ global $CFG;
+
+ return $CFG->wwwroot.'/course/view.php?id='.$course_id;
+}
+
+/**
+* part of standard API
+*
+*/
+function label_iterator() {
+ global $DB;
+
+ //trick to leave search indexer functionality intact, but allow
+ //this document to only use the below function to return info
+ //to be searched
+ $labels = $DB->get_records('label');
+ return $labels;
+}
+
+/**
+* part of standard API
+* this function does not need a content iterator, returns all the info
+* itself;
+* @param $label notneeded to comply API, remember to fake the iterator array though
+* @uses $CFG, $DB
+* @return an array of searchable documents
+*/
+function label_get_content_for_index(&$label) {
+ global $CFG, $DB;
+
+ // starting with Moodle native resources
+ $documents = array();
+
+ $coursemodule = $DB->get_field('modules', 'id', array('name' => 'label'));
+ $cm = $DB->get_record('course_modules', array('course' => $label->course, 'module' => $coursemodule, 'instance' => $label->id));
+ $context = get_context_instance(CONTEXT_MODULE, $cm->id);
+
+ $documents[] = new LabelSearchDocument(get_object_vars($label), $context->id);
+
+ mtrace("finished label {$label->id}");
+ return $documents;
+}
+
+/**
+* part of standard API.
+* returns a single resource search document based on a label id
+* @uses $CFG, $DB
+* @param int $id the id of the accessible document
+* @param string $itemtype the nature of the information making the document
+* @return a searchable object or null if failure
+*/
+function label_single_document($id, $itemtype) {
+ global $CFG, $DB;
+
+ $label = $DB->get_record('label', array('id' => $id));
+
+ if ($label){
+ $coursemodule = $DB->get_field('modules', 'id', array('name' => 'label'));
+ $cm = $DB->get_record('course_modules', array('id' => $label->id));
+ $context = get_context_instance(CONTEXT_MODULE, $cm->id);
+ return new LabelSearchDocument(get_object_vars($label), $context->id);
+ }
+ return null;
+}
+
+/**
+* dummy delete function that aggregates id with itemtype.
+* this was here for a reason, but I can't remember it at the moment.
+*
+*/
+function label_delete($info, $itemtype) {
+ $object->id = $info;
+ $object->itemtype = $itemtype;
+ return $object;
+} //resource_delete
+
+/**
+* returns the var names needed to build a sql query for addition/deletions
+*
+*/
+function label_db_names() {
+ //[primary id], [table name], [time created field name], [time modified field name], [docsubtype], [additional where conditions for sql]
+ return array(array('id', 'label', 'timemodified', 'timemodified', 'label', ''));
+}
+
+/**
+* this function handles the access policy to contents indexed as searchable documents. If this
+* function does not exist, the search engine assumes access is allowed.
+* @uses $CFG, $DB
+* @param string $path the access path to the module script code
+* @param string $itemtype the information subclassing (usefull for complex modules, defaults to 'standard')
+* @param int $this_id the item id within the information class denoted by itemtype. In resources, this id
+* points to the resource record and not to the module that shows it.
+* @param object $user the user record denoting the user who searches
+* @param int $group_id the current group used by the user when searching
+* @return true if access is allowed, false elsewhere
+*/
+function label_check_text_access($path, $itemtype, $this_id, $user, $group_id, $context_id){
+ global $CFG, $DB;
+
+ $r = $DB->get_record('label', array('id' => $this_id));
+ $module_context = $DB->get_record('context', array('id' => $context_id));
+ $cm = $DB->get_record('course_modules', array('id' => $module_context->instanceid));
+ $course_context = get_context_instance(CONTEXT_COURSE, $r->course);
+
+ //check if englobing course is visible
+ if (!has_capability('moodle/course:view', $course_context)){
+ return false;
+ }
+
+ //check if found course module is visible
+ if (!$cm->visible and !has_capability('moodle/course:viewhiddenactivities', $module_context)){
+ return false;
+ }
+
+ return true;
+}
+
+/**
+* post processes the url for cleaner output.
+* @param string $title
+*/
+function label_link_post_processing($title){
+ global $CFG;
+
+ if ($CFG->block_search_utf8dir){
+ return mb_convert_encoding("(".shorten_text(clean_text($title), 60)."...) ", 'UTF-8', 'auto');
+ }
+ return mb_convert_encoding("(".shorten_text(clean_text($title), 60)."...) ", 'auto', 'UTF-8');
+}
+?>
\ No newline at end of file
* @author Michael Campanis (mchampan) [cynnical@gmail.com], Valery Fremaux [valery.fremaux@club-internet.fr] > 1.8
* @date 2008/03/31
* @license http://www.gnu.org/copyleft/gpl.html GNU Public License
+* @version Moodle 2.0
*
* document handling for lesson activity module
* This file contains the mapping between a lesson page and it's indexable counterpart,
/**
* includes and requires
*/
-require_once("$CFG->dirroot/search/documents/document.php");
-require_once("$CFG->dirroot/mod/lesson/lib.php");
+require_once($CFG->dirroot.'/search/documents/document.php');
+require_once($CFG->dirroot.'/mod/lesson/lib.php');
/**
* a class for representing searchable information
* constructs a valid link to a chat content
* @param int $lessonid the lesson module
* @param int $itemid the id of a single page
+* @param string $itemtype the nature of the indexed object
* @return a well formed link to lesson page
*/
function lesson_make_link($lessonmoduleid, $itemid, $itemtype) {
global $CFG;
if ($itemtype == 'page'){
- return "{$CFG->wwwroot}/mod/lesson/view.php?id={$lessonmoduleid}&pageid={$itemid}";
+ return $CFG->wwwroot."/mod/lesson/view.php?id={$lessonmoduleid}&pageid={$itemid}";
}
return $CFG->wwwroot.'/mod/lesson/view.php?id='.$lessonmoduleid;
}
/**
* search standard API
+* @uses $DB
*
*/
function lesson_iterator() {
- $lessons = get_records('lesson');
- return $lessons;
+ global $DB;
+
+ if ($lessons = $DB->get_records('lesson')){
+ return $lessons;
+ } else {
+ return array();
+ }
}
/**
* search standard API
-* @param object $lesson a lesson instance (by ref)
+* @uses $DB
+* @param reference $lesson a lesson instance (by ref)
* @return an array of searchable documents
*/
function lesson_get_content_for_index(&$lesson) {
+ global $DB;
$documents = array();
if (!$lesson) return $documents;
- $pages = get_records('lesson_pages', 'lessonid', $lesson->id);
+ $pages = $DB->get_records('lesson_pages', array('lessonid' => $lesson->id));
if ($pages){
- $coursemodule = get_field('modules', 'id', 'name', 'lesson');
- $cm = get_record('course_modules', 'course', $lesson->course, 'module', $coursemodule, 'instance', $lesson->id);
+ $coursemodule = $DB->get_field('modules', 'id', array('name' => 'lesson'));
+ $cm = $DB->get_record('course_modules', array('course' => $lesson->course, 'module' => $coursemodule, 'instance' => $lesson->id));
$context = get_context_instance(CONTEXT_MODULE, $cm->id);
foreach($pages as $aPage){
$documents[] = new LessonPageSearchDocument(get_object_vars($aPage), $cm->id, $lesson->course, 'page', $context->id);
/**
* returns a single lesson search document based on a lesson page id
+* @uses $DB
* @param int $id an id for a single information item
* @param string $itemtype the type of information
*/
function lesson_single_document($id, $itemtype) {
+ global $DB;
// only page is known yet
- $page = get_record('lesson_pages', 'id', $id);
- $lesson = get_record('lesson', 'id', $page->lessonid);
- $coursemodule = get_field('modules', 'id', 'name', 'lesson');
- $cm = get_record('course_modules', 'course', $lesson->course, 'module', $coursemodule, 'instance', $page->lessonid);
+ $page = $DB->get_record('lesson_pages', array('id' => $id));
+ $lesson = $DB->get_record('lesson', array('id' => $page->lessonid));
+ $coursemodule = $DB->get_field('modules', 'id', array('name' => 'lesson'));
+ $cm = $DB->get_record('course_modules', array('course' => $lesson->course, 'module' => $coursemodule, 'instance' => $page->lessonid));
if ($cm){
$context = get_context_instance(CONTEXT_MODULE, $cm->id);
$lesson->groupid = 0;
* @param object $user the user record denoting the user who searches
* @param int $group_id the current group used by the user when searching
* @param int $context_id the id of the context used when indexing
-* @uses CFG, USER
+* @uses $CFG, $USER, $DB
* @return true if access is allowed, false elsewhere
*/
function lesson_check_text_access($path, $itemtype, $this_id, $user, $group_id, $context_id){
- global $CFG, $USER;
+ global $CFG, $USER, $DB;
include_once("{$CFG->dirroot}/{$path}/lib.php");
// get the lesson page
- $page = get_record('lesson_pages', 'id', $this_id);
- $lesson = get_record('lesson', 'id', $page->lessonid);
- $context = get_record('context', 'id', $context_id);
- $cm = get_record('course_modules', 'id', $context->instanceid);
- // $lesson = get_record('lesson', 'id', $page->lessonid);
- // $cm = get_coursemodule_from_instance('lesson', $page->lessonid, $lesson->course);
- // $context = get_context_instance(CONTEXT_MODULE, $cm->id);
+ $page = $DB->get_record('lesson_pages', array('id' => $this_id));
+ $lesson = $DB->get_record('lesson', array('id' => $page->lessonid));
+ $context = $DB->get_record('context', array('id' => $context_id));
+ $cm = $DB->get_record('course_modules', array('id' => $context->instanceid));
if (!$cm->visible and !has_capability('moodle/course:viewhiddenactivities', $context)){
if (!empty($CFG->search_access_debug)) echo "search reject : hidden lesson ";
*
*/
function lesson_link_post_processing($title){
- return mb_convert_encoding($title, 'auto', 'UTF-8');
+ global $CFG;
+
+ if ($CFG->block_search_utf8dir){
+ return mb_convert_encoding($title, 'UTF-8', 'auto');
+ }
+ return mb_convert_encoding($title, 'auto', 'UTF-8');
}
?>
\ No newline at end of file
* @author Valery Fremaux [valery.fremaux@club-internet.fr] > 1.8
* @date 2008/03/31
* @license http://www.gnu.org/copyleft/gpl.html GNU Public License
+* @version revised for Moodle 2.0
*
* 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
+* @param object $resource
+* @param string $directfile if the resource is given as a direct file path, use it as reference to the file
* @uses $CFG
*/
function get_text_for_indexing_doc(&$resource, $directfile = ''){
// SECURITY : do not allow non admin execute anything on system !!
if (!has_capability('moodle/site:doanything', get_context_instance(CONTEXT_SYSTEM))) return;
- $moodleroot = (@$CFG->block_search_usemoodleroot) ? "{$CFG->dirroot}/" : '' ;
+ // adds moodle root switch if none was defined
+ if (!isset($CFG->block_search_usemoodleroot)){
+ set_config('block_search_usemoodleroot', 1);
+ }
+
+ $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)){
* @author Valery Fremaux [valery.fremaux@club-internet.fr] > 1.8
* @date 2008/03/31
* @license http://www.gnu.org/copyleft/gpl.html GNU Public License
+* @version revised for Moodle 2.0
*
* 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
+* @param string $directfile if the resource is given as a direct file path, use it as reference to the file
* @uses $CFG
*/
function get_text_for_indexing_htm(&$resource, $directfile = ''){
* @author Valery Fremaux [valery.fremaux@club-internet.fr] > 1.8
* @date 2008/03/31
* @license http://www.gnu.org/copyleft/gpl.html GNU Public License
+* @version revised for Moodle 2.0
*
* this is a format handler for getting text out of a standard html format
* so it can be indexed by Lucene search engine
--- /dev/null
+<?php
+/**
+* Global Search Engine for Moodle
+*
+* @package search
+* @category core
+* @subpackage document_wrappers
+* @author Valery Fremaux [valery.fremaux@club-internet.fr] > 1.8
+* @date 2008/03/31
+* @license http://www.gnu.org/copyleft/gpl.html GNU Public License
+* @version revised for Moodle 2.0
+*
+* this is a format handler for getting text out of the opensource ODT binary format
+* so it can be indexed by Lucene search engine
+*/
+
+/**
+* OpenOffice Odt extractor
+* @param object $resource
+* @param string $directfile if the resource is given as a direct file path, use it as reference to the file
+* @uses $CFG
+*/
+function get_text_for_indexing_odt(&$resource, $directfile = ''){
+ global $CFG;
+
+ // SECURITY : do not allow non admin execute anything on system !!
+ if (!has_capability('moodle/site:doanything', get_context_instance(CONTEXT_SYSTEM))) return;
+
+ // adds moodle root switch if none was defined
+ if (!isset($CFG->block_search_usemoodleroot)){
+ set_config('block_search_usemoodleroot', 1);
+ }
+
+ $moodleroot = ($CFG->block_search_usemoodleroot) ? "{$CFG->dirroot}/" : '' ;
+
+ // just call pdftotext over stdout and capture the output
+ if (!empty($CFG->block_search_odt_to_text_cmd)){
+ if (!file_exists("{$moodleroot}{$CFG->block_search_odt_to_text_cmd}")){
+ mtrace('Error with OpenOffice ODT to text converter command : exectuable not found.');
+ } else {
+ if ($directfile == ''){
+ $file = escapeshellarg("{$CFG->dataroot}/{$resource->course}/{$resource->reference}");
+ } else {
+ $file = escapeshellarg("{$CFG->dataroot}/{$directfile}");
+ }
+ $command = trim($CFG->block_search_odt_to_text_cmd);
+ $text_converter_cmd = "{$moodleroot}{$command} --encoding=UTF-8 $file";
+ mtrace("Executing : $text_converter_cmd");
+ $result = shell_exec($text_converter_cmd);
+ if ($result){
+ return $result;
+ } else {
+ mtrace('Error with OpenOffice ODT to text converter command : execution failed. ');
+ return '';
+ }
+ }
+ } else {
+ mtrace('Error with OpenOffice ODT to text converter command : command not set up. Execute once search block configuration.');
+ return '';
+ }
+}
+?>
\ No newline at end of file
* @author Valery Fremaux [valery.fremaux@club-internet.fr] > 1.8
* @date 2008/03/31
* @license http://www.gnu.org/copyleft/gpl.html GNU Public License
+* @version revised for Moodle 2.0
*
* 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
+* @param string $directfile if the resource is given as a direct file path, use it as reference to the file
* @uses $CFG
*/
function get_text_for_indexing_pdf(&$resource, $directfile = ''){
* @author Valery Fremaux [valery.fremaux@club-internet.fr] > 1.8
* @date 2008/03/31
* @license http://www.gnu.org/copyleft/gpl.html GNU Public License
+* @version revised for Moodle 2.0
*
* 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
+* @param string $directfile if the resource is given as a direct file path, use it as reference to the file
* @uses $CFG
*/
function get_text_for_indexing_ppt(&$resource, $directfile = ''){
* @author Valery Fremaux [valery.fremaux@club-internet.fr] > 1.8
* @date 2008/03/31
* @license http://www.gnu.org/copyleft/gpl.html GNU Public License
+* @version revised for Moodle 2.0
*
* @note : The Adobe SWF Converters library is not GPL, although it can be of free use in some
* situations. This file is provided for convenience, but should use having a glance at
/**
* @param object $resource
+* @param string $directfile if the resource is given as a direct file path, use it as reference to the file
* @uses $CFG
*/
function get_text_for_indexing_swf(&$resource, $directfile = ''){
* @author Valery Fremaux [valery.fremaux@club-internet.fr] > 1.8
* @date 2008/03/31
* @license http://www.gnu.org/copyleft/gpl.html GNU Public License
+* @version revised for Moodle 2.0
*
* 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
+* @param string $directfile if the resource is given as a direct file path, use it as reference to the file
* @uses $CFG
*/
function get_text_for_indexing_txt(&$resource, $directfile = ''){
* @author Valery Fremaux [valery.fremaux@club-internet.fr] > 1.8
* @date 2008/03/31
* @license http://www.gnu.org/copyleft/gpl.html GNU Public License
+* @version revised for Moodle 2.0
*
* 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
+* @param string $directfile if the resource is given as a direct file path, use it as reference to the file
* @uses $CFG
*/
function get_text_for_indexing_xml(&$resource, $directfile = ''){
* @author Michael Campanis (mchampan) [cynnical@gmail.com], Valery Fremaux [valery.fremaux@club-internet.fr] > 1.8
* @date 2008/03/31
* @license http://www.gnu.org/copyleft/gpl.html GNU Public License
+* @version Moodle 2.0
*
* document handling for all resources
* This file contains the mapping between a resource and it's indexable counterpart,
/**
* requires and includes
*/
-require_once("$CFG->dirroot/search/documents/document.php");
-require_once("$CFG->dirroot/mod/resource/lib.php");
+require_once($CFG->dirroot.'/search/documents/document.php');
+require_once($CFG->dirroot.'/mod/resource/lib.php');
/* *
* a class for representing searchable information
// construct the parent class
parent::__construct($doc, $data, $resource['course'], 0, 0, 'mod/'.SEARCH_TYPE_RESOURCE);
- } //constructor
-} //ResourceSearchDocument
+ }
+}
/**
* constructs valid access links to information
global $CFG;
return $CFG->wwwroot.'/mod/resource/view.php?id='.$resource_id;
-} //resource_make_link
+}
/**
* part of standard API
//this document to only use the below function to return info
//to be searched
return array(true);
- } //resource_iterator
+ }
/**
* part of standard API
* this function does not need a content iterator, returns all the info
* itself;
-* @param notneeded to comply API, remember to fake the iterator array though
-* @uses CFG
+* @param void $notneeded to comply API, remember to fake the iterator array though
+* @uses $CFG, $DB
* @return an array of searchable documents
*/
function resource_get_content_for_index(&$notneeded) {
- global $CFG;
+ global $CFG, $DB;
// starting with Moodle native resources
$documents = array();
id as trueid,
r.*
FROM
- {resource} as r
+ {resource} r
WHERE
alltext != '' AND
alltext != ' ' AND
alltext != ' ' AND
type != 'file'
";
- $resources = get_records_sql($query);
-
- foreach($resources as $aResource){
- $coursemodule = get_field('modules', 'id', 'name', 'resource');
- $cm = get_record('course_modules', 'course', $aResource->course, 'module', $coursemodule, 'instance', $aResource->id);
- $context = get_context_instance(CONTEXT_MODULE, $cm->id);
- $aResource->id = $cm->id;
- $documents[] = new ResourceSearchDocument(get_object_vars($aResource), $context->id);
- mtrace("finished $aResource->name");
+ if ($resources = $DB->get_records_sql($query)){
+ foreach($resources as $aResource){
+ $coursemodule = $DB->get_field('modules', 'id', array('name' => 'resource'));
+ $cm = $DB->get_record('course_modules', array('course' => $aResource->course, 'module' => $coursemodule, 'instance' => $aResource->id));
+ $context = get_context_instance(CONTEXT_MODULE, $cm->id);
+ $aResource->id = $cm->id;
+ $documents[] = new ResourceSearchDocument(get_object_vars($aResource), $context->id);
+ mtrace("finished $aResource->name");
+ }
}
// special physical files handling
r.type as type,
r.timemodified as timemodified
FROM
- {resource} as r,
- {course_modules} as cm,
- {modules} as m
+ {resource} r,
+ {course_modules} cm,
+ {modules} m
WHERE
r.type = 'file' AND
cm.instance = r.id AND
cm.module = m.id AND
m.name = 'resource'
";
- $resources = get_records_sql($query);
-
+ if ($resources = $DB->get_records_sql($query)){
// invokes external content extractor if exists.
- if ($resources){
foreach($resources as $aResource){
// fetches a physical indexable document and adds it to documents passed by ref
- $coursemodule = get_field('modules', 'id', 'name', 'resource');
- $cm = get_record('course_modules', 'id', $aResource->id);
+ $coursemodule = $DB->get_field('modules', 'id', array('name' => 'resource'));
+ $cm = $DB->get_record('course_modules', array('id' => $aResource->id));
$context = get_context_instance(CONTEXT_MODULE, $cm->id);
resource_get_physical_file($aResource, $context->id, false, $documents);
}
}
}
return $documents;
-} //resource_get_content_for_index
+}
/**
* get text from a physical file
-* @param resource a resource for which to fetch some representative text
-* @param getsingle if true, returns a single search document, elsewhere return the array
+* @uses $CFG
+* @param reference $resource a resource for which to fetch some representative text
+* @param int $context_id the context associated with the resource
+* @param bool $getsingle if true, returns a single search document, elsewhere return the array
* given as documents increased by one
-* @param documents the array of documents, by ref, where to add the new document.
+* @param array $documents the array of documents, by ref, where to add the new document.
* @return a search document when unique or false.
*/
function resource_get_physical_file(&$resource, $context_id, $getsingle, &$documents = null){
/**
* part of standard API.
* returns a single resource search document based on a resource_entry id
+* @uses $CFG, $DB
* @param id the id of the accessible document
* @return a searchable object or null if failure
*/
function resource_single_document($id, $itemtype) {
- global $CFG;
+ global $CFG, $DB;
// rewriting with legacy moodle databse API
$query = "
r.type as type,
r.timemodified as timemodified
FROM
- {resource} as r,
- {course_modules} as cm,
- {modules} as m
+ {resource} r,
+ {course_modules} cm,
+ {modules} m
WHERE
cm.instance = r.id AND
cm.course = r.course AND
r.alltext != ' ' AND
r.alltext != ' ') OR
r.type = 'file') AND
- r.id = '{$id}'
+ r.id = '?'
";
- $resource = get_record_sql($query);
+ $resource = $DB->get_record_sql($query, array($id));
if ($resource){
- $coursemodule = get_field('modules', 'id', 'name', 'resource');
- $cm = get_record('course_modules', 'id', $resource->id);
+ $coursemodule = $DB->get_field('modules', 'id', array('name' => 'resource'));
+ $cm = $DB->get_record('course_modules', array('id' => $resource->id));
$context = get_context_instance(CONTEXT_MODULE, $cm->id);
if ($resource->type == 'file' && @$CFG->block_search_enable_file_indexing){
$document = resource_get_physical_file($resource, true, $context->id);
return new ResourceSearchDocument(get_object_vars($resource), $context->id);
}
}
- mtrace("null resource");
+ mtrace('null resource');
return null;
-} //resource_single_document
+}
/**
* dummy delete function that aggregates id with itemtype.
$object->id = $info;
$object->itemtype = $itemtype;
return $object;
-} //resource_delete
+}
/**
* returns the var names needed to build a sql query for addition/deletions
function resource_db_names() {
//[primary id], [table name], [time created field name], [time modified field name], [additional where conditions for sql]
return array(array('id', 'resource', 'timemodified', 'timemodified', 'any', " (alltext != '' AND alltext != ' ' AND alltext != ' ' AND TYPE != 'file') OR TYPE = 'file' "));
-} //resource_db_names
+}
/**
* this function handles the access policy to contents indexed as searchable documents. If this
* function does not exist, the search engine assumes access is allowed.
+* @uses $CFG, $DB
* @param path the access path to the module script code
* @param itemtype the information subclassing (usefull for complex modules, defaults to 'standard')
* @param this_id the item id within the information class denoted by itemtype. In resources, this id
* @return true if access is allowed, false elsewhere
*/
function resource_check_text_access($path, $itemtype, $this_id, $user, $group_id, $context_id){
- global $CFG;
+ global $CFG, $DB;
- include_once("{$CFG->dirroot}/{$path}/lib.php");
+ // include_once("{$CFG->dirroot}/{$path}/lib.php");
- $r = get_record('resource', 'id', $this_id);
- $module_context = get_record('context', 'id', $context_id);
- $cm = get_record('course_modules', 'id', $module_context->instanceid);
+ $r = $DB->get_record('resource', array('id' => $this_id));
+ $module_context = $DB->get_record('context', array('id' => $context_id));
+ $cm = $DB->get_record('course_modules', array('id' => $module_context->instanceid));
+ $course = $DB->get_record('course', array('id' => $r->course));
+ $course_context = get_context_instance(CONTEXT_COURSE, $r->course);
+
+ //check if course is visible
+ if (!$course->visible && !has_capability('moodle/course:viewhiddencourses', $course_context)) {
+ return false;
+ }
+
+ //check if user is registered in course or course is open to guests
+ if (!$course->guest && !has_capability('moodle/course:view', $course_context)) {
+ return false;
+ }
+
//check if found course module is visible
if (!$cm->visible and !has_capability('moodle/course:viewhiddenactivities', $module_context)){
* @param string $title
*/
function resource_link_post_processing($title){
- // return mb_convert_encoding($title, 'UTF-8', 'auto');
+ global $CFG;
+
+ if ($CFG->block_search_utf8dir){
+ return mb_convert_encoding($title, 'UTF-8', 'auto');
+ }
return mb_convert_encoding($title, 'auto', 'UTF-8');
}
?>
\ No newline at end of file
* @author Valery Fremaux [valery.fremaux@club-internet.fr] > 1.8
* @date 2008/03/31
* @license http://www.gnu.org/copyleft/gpl.html GNU Public License
+* @version Moodle 2.0
*
* special (EXTRA) document handling for user related data
*
/**
* includes and requires
*/
-require_once("$CFG->dirroot/search/documents/document.php");
-require_once("$CFG->dirroot/blog/lib.php");
+require_once($CFG->dirroot.'/search/documents/document.php');
+require_once($CFG->dirroot.'/blog/lib.php');
/**
* a class for representing searchable information in user metadata
/**
* constructor
+ * @uses $DB
*/
public function __construct(&$userhash, $user_id, $context_id) {
+ global $DB;
// generic information; required
$doc->docid = $userhash['id'];
$doc->itemtype = 'user';
$doc->contextid = $context_id;
- $user = get_record('user', 'id', $user_id);
+ $user = $DB->get_record('user', array('id' => $user_id));
$doc->title = get_string('user').': '.fullname($user);
$doc->date = ($userhash['lastaccess']) ? $userhash['lastaccess'] : time() ;
//remove '(ip.ip.ip.ip)' from chat author list
- $doc->author = '';
+ $doc->author = $user->id;
$doc->contents = $userhash['description'];
$doc->url = user_make_link($user_id, 'user');
/**
* constructor
+ * @uses $DB
*/
public function __construct(&$post, $user_id, $context_id) {
+ global $DB;
+
// generic information; required
$doc->docid = $post['id'];
$doc->documenttype = SEARCH_TYPE_USER;
$doc->itemtype = 'post';
$doc->contextid = $context_id;
- $user = get_record('user', 'id', $user_id);
+ $user = $DB->get_record('user', array('id' => $user_id));
// we cannot call userdate with relevant locale at indexing time.
$doc->title = get_string('post').': '.fullname($user);
/**
* constructor
+ * @uses $DB
*/
public function __construct(&$post, $context_id) {
+ global $DB;
+
// generic information; required
$doc->docid = $post['id'];
$doc->documenttype = SEARCH_TYPE_USER;
$doc->itemtype = 'attachment';
$doc->contextid = $context_id;
- $user = get_record('user', 'id', $post['userid']);
+ $user = $DB->get_record('user', 'id', $post['userid']);
// we cannot call userdate with relevant locale at indexing time.
$doc->title = get_string('file').' : '.$post['subject'];
/**
* constructs a valid link to a user record
-* @param userid the user
-* @param itemtype
-* @uses CFG
+* @param int $userid the user
+* @param string $itemtype
+* @uses $CFG, $DB
* @return a well formed link to user information
*/
function user_make_link($itemid, $itemtype) {
- global $CFG;
+ global $CFG, $DB;
if ($itemtype == 'user'){
return $CFG->wwwroot.'/user/view.php?id='.$itemid;
} elseif ($itemtype == 'post') {
return $CFG->wwwroot.'/blog/index.php?userid='.$itemid;
} elseif ($itemtype == 'attachment') {
- $post = get_record('post', 'id', $itemid);
+ $post = $DB->get_record('post', array('id' => $itemid));
if (!$CFG->slasharguments){
return $CFG->wwwroot."/file.php?file=/blog/attachments/{$post->id}/{$post->attachment}";
} else {
/**
* part of search engine API
+* @uses $DB
*
*/
function user_iterator() {
- $users = get_records('user');
+ global $DB;
+
+ $users = $DB->get_records('user');
return $users;
}
/**
* part of search engine API
-* @uses CFG
+* @uses $CFG, $DB
+* @param reference $user a user record
* @return an array of documents generated from data
*/
function user_get_content_for_index(&$user) {
- global $CFG;
+ global $CFG, $DB;
$documents = array();
$userhash = get_object_vars($user);
$documents[] = new UserSearchDocument($userhash, $user->id, null);
- if ($posts = get_records('post', 'userid', $user->id, 'created')){
+ if ($posts = $DB->get_records('post', array('userid' => $user->id), 'created')){
foreach($posts as $post){
$texts = array();
$texts[] = $post->subject;
$texts[] = $post->summary;
$texts[] = $post->content;
- $post->description = implode(" ", $texts);
+ $post->description = implode(' ', $texts);
// record the attachment if any and physical files can be indexed
if (@$CFG->block_search_enable_file_indexing){
/**
* get text from a physical file
+* @uses $CFG
* @param object $post a post to whech the file is attached to
* @param boolean $context_id if in future we need recording a context along with the search document, pass it here
* @param boolean $getsingle if true, returns a single search document, elsewhere return the array
}
/**
-* returns a single user search document
+* returns a single user search document
+* @uses $DB
* @param composite $id a unique document id made with
* @param itemtype the type of information (session is the only type)
*/
function user_single_document($id, $itemtype) {
+ global $DB;
+
if ($itemtype == 'user'){
- if ($user = get_record('user', 'id', $id)){
+ if ($user = $DB->get_record('user', array('id' => $id))){
$userhash = get_object_vars($user);
return new UserSearchDocument($userhash, $user->id, 'user', null);
}
} elseif ($itemtype == 'post') {
- if ($post = get_records('post', 'id', $id)){
+ if ($post = $DB->get_records('post', array('id' => $id))){
$texts = array();
$texts[] = $post->subject;
$texts[] = $post->summary;
return new UserPostSearchDocument($posthash, $user->id, 'post', null);
}
} elseif ($itemtype == 'attachment' && @$CFG->block_search_enable_file_indexing) {
- if ($post = get_records('post', 'id', $id)){
+ if ($post = $DB->get_records('post', array('id' => $id))){
if ($post->attachment){
return user_get_physical_file($post, null, true);
}
* - user is legitimate in the surrounding context
* - user may be guest and guest access is allowed to the module
* - the function may perform local checks within the module information logic
-* @param path the access path to the module script code
-* @param itemtype the information subclassing (usefull for complex modules, defaults to 'standard')
-* @param this_id the item id within the information class denoted by entry_type. In chats, this id
+* @param string $path the access path to the module script code
+* @param string $itemtype the information subclassing (usefull for complex modules, defaults to 'standard')
+* @param int $this_id the item id within the information class denoted by entry_type. In chats, this id
* 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
+* @param object $user the user record denoting the user who searches
+* @param int $group_id the current group used by the user when searching
+* @uses $CFG, $DB
* @return true if access is allowed, false elsewhere
*/
function user_check_text_access($path, $itemtype, $this_id, $user, $group_id, $context_id){
- global $CFG;
+ global $CFG, $DB;
include_once("{$CFG->dirroot}/{$path}/lib.php");
if ($itemtype == 'user'){
// get the user
- $userrecord = get_record('user', 'id', $this_id);
+ $userrecord = $DB->get_record('user', array('id' => $this_id));
// we cannot see nothing from unconfirmed users
if (!$userrecord->confirmed and !has_capability('moodle/site:doanything', get_context_instance(CONTEXT_SYSTEM))){
}
} elseif ($itemtype == 'post' || $itemtype == 'attachment'){
// get the post
- $post = get_record('post', 'id', $this_id);
- $userrecord = get_record('user', 'id', $post->userid);
+ $post = $DB->get_record('post', array('id' => $this_id));
+ $userrecord = $DB->get_record('user', array('id' => $post->userid));
// we can try using blog visibility check
return blog_user_can_view_user_post($user->id, $post);
}
- $context = get_record('context', 'id', $context_id);
+ $context = $DB->get_record('context', array('id' => $context_id));
return true;
}
*
*/
function user_link_post_processing($title){
- return mb_convert_encoding($title, 'UTF-8', 'auto');
+ global $CFG;
+
+ if ($CFG->block_search_utf8dir){
+ return mb_convert_encoding($title, 'UTF-8', 'auto');
+ }
+ return mb_convert_encoding($title, 'auto', 'UTF-8');
}
?>
\ No newline at end of file
* @author Michael Campanis (mchampan) [cynnical@gmail.com], Valery Fremaux [valery.fremaux@club-internet.fr] > 1.8
* @date 2008/03/31
* @license http://www.gnu.org/copyleft/gpl.html GNU Public License
+* @version Moodle 2.0
*
* document handling for wiki activity module
* This file contains the mapping between a wiki page and it's indexable counterpart,
/**
* includes and requires
*/
-require_once("$CFG->dirroot/search/documents/document.php");
-require_once("$CFG->dirroot/mod/wiki/lib.php");
+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!
* @param int $wikiId
* @param string $title
* @param int $version
-* @uses CFG
+* @uses $CFG
*/
function wiki_make_link($wikiId, $title, $version) {
global $CFG;
return $CFG->wwwroot.'/mod/wiki/view.php?wid='.$wikiId.'&page='.wiki_name_convert($title).'&version='.$version;
-} //wiki_make_link
+}
/**
* rescued and converted from ewikimoodlelib.php
* retrieves latest version of a page
+* @uses $DB
* @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) {
+ global $DB;
+
$pagename = "'".addslashes($pagename)."'";
- if ($version > 0 and is_int($version)) {
- $version = "AND (version=$version)";
+ if ($version > 0 && is_int($version)) {
+ $versionclause = "AND ( version = '$version' )";
} else {
- $version = '';
+ $versionclause = '';
}
- $select = "(pagename=$pagename) AND wiki=".$entry->id." $version ";
+ $select = "( pagename = ':pagename' ) AND wiki = :wikiid :versionclause ";
$sort = 'version DESC';
//change this to recordset_select, as per http://docs.moodle.org/en/Datalib_Notes
- if ($result_arr = get_records_select('wiki_pages', $select, $sort, '*', 0, 1)) {
+ if ($result_arr = $DB->get_records_select('wiki_pages', $select, array('pagename' => $pagename, 'wikiid' => $entry->id, 'versionclause' => $versionclause), $sort, '*', 0, 1)) {
foreach ($result_arr as $obj) {
$result_obj = $obj;
}
/**
* fetches all pages, including old versions
+* @uses $DB
* @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);
+ global $DB;
+
+ return $DB->get_records('wiki_pages', array('wiki', $entry->id));
}
/**
* fetches all the latest versions of all the pages
-* @param object $entry
+* @uses $DB
+* @param reference $entry
*/
function wiki_get_latest_pages(&$entry) {
+ global $DB;
+
//== (My)SQL for this
/* select * from wiki_pages
inner join
$pages = array();
//http://moodle.org/bugs/bug.php?op=show&bugid=5877&pos=0
- if ($ids = get_records('wiki_pages', 'wiki', $entry->id, '', 'distinct pagename')) {
- if ($pagesets = get_records('wiki_pages', 'wiki', $entry->id, '', 'distinct pagename')) {
+ if ($ids = $DB->get_records('wiki_pages', array('wiki' => $entry->id), '', 'distinct pagename')) {
+ if ($pagesets = $DB->get_records('wiki_pages', array('wiki' => $entry->id), '', 'distinct pagename')) {
foreach ($pagesets as $aPageset) {
$pages[] = wiki_get_latest_page($entry, $aPageset->pagename);
}
/**
* part of search engine API
+* @uses $DB;
*
*/
function wiki_iterator() {
- $wikis = get_records('wiki');
+ global $DB;
+
+ $wikis = $DB->get_records('wiki');
return $wikis;
}
/**
* part of search engine API
-* @param wiki a wiki instance
+* @uses $DB
+* @param reference $wiki a wiki instance
* @return an array of searchable deocuments
*/
function wiki_get_content_for_index(&$wiki) {
+ global $DB;
$documents = array();
$entries = wiki_get_entries($wiki);
if ($entries){
- $coursemodule = get_field('modules', 'id', 'name', 'wiki');
- $cm = get_record('course_modules', 'course', $wiki->course, 'module', $coursemodule, 'instance', $wiki->id);
+ $coursemodule = $DB->get_field('modules', 'id', array('name' => 'wiki'));
+ $cm = $DB->get_record('course_modules', array('course' => $wiki->course, 'module' => $coursemodule, 'instance' => $wiki->id));
$context = get_context_instance(CONTEXT_MODULE, $cm->id);
foreach($entries as $entry) {
/**
* 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)
+* @uses $DB;
+* @param int $id the id of the wiki
+* @param string $itemtype the type of information (standard)
* @return a searchable document
*/
function wiki_single_document($id, $itemtype) {
- $page = get_record('wiki_pages', 'id', $id);
- $entry = get_record('wiki_entries', 'id', $page->wiki);
- $coursemodule = get_field('modules', 'id', 'name', 'wiki');
- $cm = get_record('course_modules', 'course', $entry->course, 'module', $coursemodule, 'instance', $entry->wikiid);
+ global $DB;
+
+ $page = $DB->get_record('wiki_pages', array('id' => $id));
+ $entry = $DB->get_record('wiki_entries', array('id' => $page->wiki));
+ $coursemodule = $DB->get_field('modules', 'id', array('name' => 'wiki'));
+ $cm = $DB->get_record('course_modules', array('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);
}
* - user is legitimate in the surrounding context
* - user may be guest and guest access is allowed to the module
* - the function may perform local checks within the module information logic
-* @param path the access path to the module script code
-* @param itemtype the information subclassing (usefull for complex modules, defaults to 'standard')
-* @param this_id the item id within the information class denoted by itemtype. In wikies, this id
+* @param string $path the access path to the module script code
+* @param string $itemtype the information subclassing (usefull for complex modules, defaults to 'standard')
+* @param int $this_id the item id within the information class denoted by itemtype. In wikies, this id
* 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
+* @param object $user the user record denoting the user who searches
+* @param int $group_id the current group used by the user when searching
+* @param int $context_id a context that eventually comes with the object
+* @uses $CFG, $DB
* @return true if access is allowed, false elsewhere
*/
function wiki_check_text_access($path, $itemtype, $this_id, $user, $group_id, $context_id){
- global $CFG;
+ global $CFG, $DB;
// get the wiki object and all related stuff
- $page = get_record('wiki_pages', 'id', $id);
- $entry = get_record('wiki_entries', 'id', $page->wiki);
- $course = get_record('course', 'id', $entry->course);
- $context = get_record('context', 'id', $context_id);
- $cm = get_record('course_modules', 'id', $context->instanceid);
- // $cm = get_coursemodule_from_instance('wiki', $wiki->id, $wiki->course);
- // $context = get_record('context', 'id', $cm->id);
- if (!$cm->visible and !has_capability('moodle/course:viewhiddenactivities', $context)) {
+ $page = $DB->get_record('wiki_pages', array('id' => $id));
+ $entry = $DB->get_record('wiki_entries', array('id' => $page->wiki));
+ $course = $DB->get_record('course', array('id' => $entry->course));
+ $context = $DB->get_record('context', array('id' => $context_id));
+ $cm = $DB->get_record('course_modules', array('id' => $context->instanceid));
+ if (!$cm->visible && !has_capability('moodle/course:viewhiddenactivities', $context)) {
if (!empty($CFG->search_access_debug)) echo "search reject : hidden wiki ";
return false;
}
*
*/
function wiki_link_post_processing($title){
- return mb_convert_encoding($title, 'UTF-8', 'auto');
+ global $CFG;
+
+ if ($CFG->block_search_utf8dir){
+ return mb_convert_encoding($title, 'UTF-8', 'auto');
+ }
+ return mb_convert_encoding($title, 'auto', 'UTF-8');
}
?>
\ No newline at end of file