/** * returns a single data search document based on a data entry id * @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 = $DB->get_record('data_records', array('id' => $id)); // get context $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 = data_get_records($recordMetaData->dataid, 'text,textarea', $id); if ($recordData) { $dataArray = array_values($recordData); $record_content = $dataArray[0]; // We cannot have more than one record here // extract title as first record in order $first = $record_content['_first']; unset($record_content['_first']); // concatenates all other texts $content = ''; foreach ($record_content as $aField) { $content = @$content . ' ' . $aField; } unset($recordMetaData); $recordMetaData = $DB->get_record('data_records', array('id' => $id)); $recordMetaData->title = $first; $recordMetaData->content = $content; return new DataSearchDocument(get_object_vars($recordMetaData), $record_course, $context->id); } } elseif ($itemtype == 'comment') { // get main records $comment = $DB->get_record('data_comments', array('id' => $id)); $record = $DB->get_record('data_records', array('id' => $comment->recordid)); // get context $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 = $DB->get_field('search_document', 'title', array('docid' => $record->id, 'itemtype' => 'record')); $comment->dataid = $record->dataid; $comment->groupid = $record->groupid; $authoruser = $DB->get_record('user', array('id' => $comment->userid)); $comment->author = fullname($authoruser); // make document return new DataCommentSearchDocument(get_object_vars($comment), $record_course, $context->id); } else { mtrace('Error : bad or missing item type'); return NULL; } }
/** * part of search engine API * @param database the database instance * @return an array of searchable documents */ function data_get_content_for_index(&$database) { $documents = array(); $recordTitles = array(); $coursemodule = get_field('modules', 'id', 'name', 'data'); $cm = get_record('course_modules', '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) { // extract title as first record in order $first = $records_content[$aRecordId]['_first']; unset($records_content[$aRecordId]['_first']); // concatenates all other texts foreach ($records_content[$aRecordId] as $aField) { $content = @$content . ' ' . $aField; } if (strlen($content) > 0) { unset($recordMetaData); $recordMetaData = get_record('data_records', 'id', $aRecordId); $recordMetaData->title = $first; $recordTitles[$aRecordId] = $first; $recordMetaData->content = $content; $documents[] = new DataSearchDocument(get_object_vars($recordMetaData), $database->course, $context->id); } } } // getting comments for indexing $records_comments = data_get_comments($database->id); if ($records_comments) { foreach ($records_comments as $aComment) { $aComment->title = $recordsTitle[$aComment->recordid]; $documents[] = new DataCommentSearchDocument(get_object_vars($aComment), $database->course, $context->id); } } return $documents; }