From 67b98646eb59ee89a32d5ee37dcaedd6690fc51d Mon Sep 17 00:00:00 2001 From: diml Date: Mon, 11 May 2009 19:52:13 +0000 Subject: [PATCH] addresses MDL-19154. May not fix every thing here... more tests in progress. --- search/documents/data_document.php | 64 ++++++++++++++++-------------- 1 file changed, 35 insertions(+), 29 deletions(-) diff --git a/search/documents/data_document.php b/search/documents/data_document.php index 065c8c544d0..07cfb283eb1 100644 --- a/search/documents/data_document.php +++ b/search/documents/data_document.php @@ -85,7 +85,7 @@ class DataCommentSearchDocument extends SearchDocument { $data->database = $comment['dataid']; // construct the parent class - parent::__construct($doc, $data, $course_id, $comment['groupid'], $comment['userid'], PATH_FOR_SEARCH_TYPE_DATA); + parent::__construct($doc, $data, $course_id, $comment['groupid'], $comment['userid'], 'mod/'.SEARCH_TYPE_DATA); } } @@ -109,19 +109,21 @@ function data_make_link($database_id, $record_id) { * @uses CFG * @return an array of objects representing the data records. */ -function data_get_records($database_id, $typematch = '*') { +function data_get_records($database_id, $typematch = '*', $recordid = 0) { global $CFG; $fieldset = get_records('data_fields', 'dataid', $database_id); + $uniquerecordclause = ($recordid > 0) ? " AND c.recordid = $recordid " : '' ; $query = " SELECT c.* FROM - {$CFG->prefix}data_content c, - {$CFG->prefix}data_records r + {$CFG->prefix}data_content as c, + {$CFG->prefix}data_records as r WHERE c.recordid = r.id AND r.dataid = {$database_id} + $uniquerecordclause ORDER BY c.fieldid "; @@ -161,8 +163,8 @@ function data_get_comments($database_id) { c.modified, r.dataid FROM - {$CFG->prefix}data_comments c, - {$CFG->prefix}data_records r + {$CFG->prefix}data_comments as c, + {$CFG->prefix}data_records as r WHERE c.recordid = r.id "; @@ -207,14 +209,12 @@ function data_get_content_for_index(&$database) { 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); - } + 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); } } @@ -222,7 +222,7 @@ function data_get_content_for_index(&$database) { $records_comments = data_get_comments($database->id); if ($records_comments){ foreach($records_comments as $aComment){ - $aComment->title = $recordsTitle[$aComment->recordid]; + $aComment->title = $recordsTitles[$aComment->recordid]; $documents[] = new DataCommentSearchDocument(get_object_vars($aComment), $database->course, $context->id); } } @@ -245,23 +245,28 @@ function data_single_document($id, $itemtype) { $coursemodule = get_field('modules', 'id', 'name', 'data'); $cm = get_record('course_modules', 'course', $record_course, 'module', $coursemodule, 'instance', $recordMetaData->dataid); $context = get_context_instance(CONTEXT_MODULE, $cm->id); + // get text fields ids in this data (computable fields) // compute text - $recordData = get_records_select('data_content', "recordid = $id AND type = 'text'", 'recordid'); - $accumulator = ''; + $recordData = data_get_records($recordMetaData->dataid, 'text', $id); if ($recordData){ - $first = $recordData[0]; - if (count($recordData) > 1){ - $others = array_splice($recordData, 0, 1); - foreach($others as $aDatum){ - $accumulator .= $data->content.' '.$data->content1.' '.$data->content2.' '.$data->content3.' '.$data->content4.' '; - } + $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 = get_record('data_records', 'id', $aRecordId); + $recordMetaData->title = $first; + $recordMetaData->content = $content; + return new DataSearchDocument(get_object_vars($recordMetaData), $record_course, $context->id); } - // add extra fields - $recordMetaData->title = $first; - $recordMetaData->content = $accumulator; - // make document - $documents[] = new DataSearchDocument(get_object_vars($recordMetaData), $record_course, $context->id); } elseif($itemtype == 'comment') { // get main records $comment = get_record('data_comments', 'id', $id); @@ -276,9 +281,10 @@ function data_single_document($id, $itemtype) { $comment->dataid = $record->dataid; $comment->groupid = $record->groupid; // make document - $documents[] = new DataCommentSearchDocument(get_object_vars($comment), $record_course, $context->id); + return new DataCommentSearchDocument(get_object_vars($comment), $record_course, $context->id); } else { mtrace('Error : bad or missing item type'); + return NULL; } }