MDL-14458 - optgroups Fields and Other in search menu; removed unused search code, html labels, added option to sort by time modified; merged from MOODLE_19_STABLE

This commit is contained in:
skodak 2008-04-21 14:17:02 +00:00
parent ea6073bb48
commit 3239b0104e
4 changed files with 84 additions and 81 deletions

View file

@ -42,24 +42,24 @@
if ($id) { if ($id) {
if (! $cm = get_coursemodule_from_id('data', $id)) { if (! $cm = get_coursemodule_from_id('data', $id)) {
print_error('Course Module ID was incorrect'); error('Course Module ID was incorrect');
} }
if (! $course = get_record('course', 'id', $cm->course)) { if (! $course = get_record('course', 'id', $cm->course)) {
print_error('Course is misconfigured'); error('Course is misconfigured');
} }
if (! $data = get_record('data', 'id', $cm->instance)) { if (! $data = get_record('data', 'id', $cm->instance)) {
print_error('Course module is incorrect'); error('Course module is incorrect');
} }
} else { } else {
if (! $data = get_record('data', 'id', $d)) { if (! $data = get_record('data', 'id', $d)) {
print_error('Data ID is incorrect'); error('Data ID is incorrect');
} }
if (! $course = get_record('course', 'id', $data->course)) { if (! $course = get_record('course', 'id', $data->course)) {
print_error('Course is misconfigured'); error('Course is misconfigured');
} }
if (! $cm = get_coursemodule_from_instance('data', $data->id, $course->id)) { if (! $cm = get_coursemodule_from_instance('data', $data->id, $course->id)) {
print_error('Course Module ID was incorrect'); error('Course Module ID was incorrect');
} }
} }
@ -169,7 +169,7 @@
$rec->defaultsort = 0; $rec->defaultsort = 0;
$rec->defaultsortdir = 0; $rec->defaultsortdir = 0;
if (!update_record('data', $rec)) { if (!update_record('data', $rec)) {
print_error('There was an error updating the database'); error('There was an error updating the database');
} }
} }
@ -206,7 +206,7 @@
if (update_record('data', $rec)) { if (update_record('data', $rec)) {
redirect($CFG->wwwroot.'/mod/data/field.php?d='.$data->id, get_string('changessaved'), 2); redirect($CFG->wwwroot.'/mod/data/field.php?d='.$data->id, get_string('changessaved'), 2);
} else { } else {
print_error('There was an error updating the database'); error('There was an error updating the database');
} }
exit; exit;
} }
@ -288,40 +288,58 @@
echo '<div class="fieldadd">'; echo '<div class="fieldadd">';
echo get_string('newfield','data').': '; echo '<label for="fieldform_jump">'.get_string('newfield','data').'</label>';
popup_form($CFG->wwwroot.'/mod/data/field.php?d='.$data->id.'&amp;mode=new&amp;sesskey='. popup_form($CFG->wwwroot.'/mod/data/field.php?d='.$data->id.'&amp;mode=new&amp;sesskey='.
sesskey().'&amp;newtype=', $menufield, 'fieldform', '', 'choose'); sesskey().'&amp;newtype=', $menufield, 'fieldform', '', 'choose');
helpbutton('fields', get_string('addafield','data'), 'data'); helpbutton('fields', get_string('addafield','data'), 'data');
echo '</div>'; echo '</div>';
echo '<div class="sortdefault">';
echo '<form id="sortdefault" action="'.$CFG->wwwroot.'/mod/data/field.php" method="get">';
echo '<div>';
echo '<input type="hidden" name="d" value="'.$data->id.'" />';
echo '<input type="hidden" name="mode" value="sort" />';
echo '<input type="hidden" name="sesskey" value="'.sesskey().'" />';
echo '<label for="defaultsort">'.get_string('defaultsortfield','data').'</label>';
echo '<select id="defaultsort" name="defaultsort">';
if ($fields = get_records('data_fields','dataid',$data->id)) { if ($fields = get_records('data_fields','dataid',$data->id)) {
echo '<div class="sortdefault">'; echo '<optgroup label="'.get_string('fields', 'data').'">';
echo '<form id="sortdefault" action="'.$CFG->wwwroot.'/mod/data/field.php" method="get">';
echo '<fieldset class="invisiblefieldset">';
echo '<input type="hidden" name="d" value="'.$data->id.'" />';
echo '<input type="hidden" name="mode" value="sort" />';
echo '<input type="hidden" name="sesskey" value="'.sesskey().'" />';
echo '&nbsp;'.get_string('defaultsortfield','data').':';
echo '<select name="defaultsort"><option value="0">'.get_string('dateentered','data').'</option>';
foreach ($fields as $field) { foreach ($fields as $field) {
if ($field->id == $data->defaultsort) { if ($data->defaultsort == $field->id) {
echo '<option value="'.$field->id.'" selected="selected">'.$field->name.'</option>'; echo '<option value="'.$field->id.'" selected="selected">'.$field->name.'</option>';
} else { } else {
echo '<option value="'.$field->id.'">'.$field->name.'</option>'; echo '<option value="'.$field->id.'">'.$field->name.'</option>';
} }
} }
echo '</select>'; echo '</optgroup>';
echo '&nbsp;';
$options = array(0 => get_string('ascending', 'data'),
1 => get_string('descending', 'data'));
choose_from_menu($options, 'defaultsortdir', $data->defaultsortdir, '');
echo '<input type="submit" value="'.get_string('go').'" />';
echo '</fieldset>';
echo '</form>';
echo '</div>';
} }
$options = array();
$options[DATA_TIMEADDED] = get_string('timeadded', 'data');
// TODO: we will need to change defaultsort db to unsinged to make these work in 2.0
/* $options[DATA_TIMEMODIFIED] = get_string('timemodified', 'data');
$options[DATA_FIRSTNAME] = get_string('authorfirstname', 'data');
$options[DATA_LASTNAME] = get_string('authorlastname', 'data');
if ($data->approval and has_capability('mod/data:approve', $context)) {
$options[DATA_APPROVED] = get_string('approved', 'data');
}*/
echo '<optgroup label="'.get_string('other', 'data').'">';
foreach ($options as $key => $name) {
if ($data->defaultsort == $key) {
echo '<option value="'.$key.'" selected="selected">'.$name.'</option>';
} else {
echo '<option value="'.$key.'">'.$name.'</option>';
}
}
echo '</optgroup>';
echo '</select>';
$options = array(0 => get_string('ascending', 'data'),
1 => get_string('descending', 'data'));
choose_from_menu($options, 'defaultsortdir', $data->defaultsortdir, '');
echo '<input type="submit" value="'.get_string('save', 'data').'" />';
echo '</div>';
echo '</form>';
echo '</div>';
} }

View file

@ -29,6 +29,8 @@ define ('DATA_PERPAGE_SINGLE', 1);
define ('DATA_FIRSTNAME', -1); define ('DATA_FIRSTNAME', -1);
define ('DATA_LASTNAME', -2); define ('DATA_LASTNAME', -2);
define ('DATA_APPROVED', -3); define ('DATA_APPROVED', -3);
define ('DATA_TIMEADDED', 0);
define ('DATA_TIMEMODIFIED', -4);
class data_field_base { /// Base class for Database Field Types (see field/*/field.class.php) class data_field_base { /// Base class for Database Field Types (see field/*/field.class.php)
@ -1064,17 +1066,27 @@ function data_print_preference_form($data, $perpage, $search, $sort='', $order='
echo ';" >&nbsp;&nbsp;&nbsp;<label for="pref_search">'.get_string('search').'</label> <input type="text" size="16" name="search" id= "pref_search" value="'.s($search).'" /></div>'; echo ';" >&nbsp;&nbsp;&nbsp;<label for="pref_search">'.get_string('search').'</label> <input type="text" size="16" name="search" id= "pref_search" value="'.s($search).'" /></div>';
echo '&nbsp;&nbsp;&nbsp;<label for="pref_sortby">'.get_string('sortby').'</label> '; echo '&nbsp;&nbsp;&nbsp;<label for="pref_sortby">'.get_string('sortby').'</label> ';
//foreach field, print the option //foreach field, print the option
$fields = get_records('data_fields','dataid',$data->id, 'name'); echo '<select name="sort" id="pref_sortby">';
$options = array(); if ($fields = get_records('data_fields','dataid',$data->id, 'name')) {
foreach ($fields as $field) { echo '<optgroup label="'.get_string('fields', 'data').'">';
$options[$field->id] = $field->name; foreach ($fields as $field) {
if ($field->id == $sort) {
echo '<option value="'.$field->id.'" selected="selected">'.$field->name.'</option>';
} else {
echo '<option value="'.$field->id.'">'.$field->name.'</option>';
}
}
echo '</optgroup>';
} }
$options[DATA_FIRSTNAME] = get_string('authorfirstname', 'data'); $options = array();
$options[DATA_LASTNAME] = get_string('authorlastname', 'data'); $options[DATA_TIMEADDED] = get_string('timeadded', 'data');
$options[DATA_TIMEMODIFIED] = get_string('timemodified', 'data');
$options[DATA_FIRSTNAME] = get_string('authorfirstname', 'data');
$options[DATA_LASTNAME] = get_string('authorlastname', 'data');
if ($data->approval and has_capability('mod/data:approve', $context)) { if ($data->approval and has_capability('mod/data:approve', $context)) {
$options[DATA_APPROVED] = get_string('approved', 'data'); $options[DATA_APPROVED] = get_string('approved', 'data');
} }
echo '<select name="sort" id="pref_sortby"><option value="0">'.get_string('dateentered','data').'</option>'; echo '<optgroup label="'.get_string('other', 'data').'">';
foreach ($options as $key => $name) { foreach ($options as $key => $name) {
if ($key == $sort) { if ($key == $sort) {
echo '<option value="'.$key.'" selected="selected">'.$name.'</option>'; echo '<option value="'.$key.'" selected="selected">'.$name.'</option>';
@ -1082,6 +1094,7 @@ function data_print_preference_form($data, $perpage, $search, $sort='', $order='
echo '<option value="'.$key.'">'.$name.'</option>'; echo '<option value="'.$key.'">'.$name.'</option>';
} }
} }
echo '</optgroup>';
echo '</select>'; echo '</select>';
echo '<label for="pref_order" class="accesshide">'.get_string('order').'</label>'; echo '<label for="pref_order" class="accesshide">'.get_string('order').'</label>';
echo '<select id="pref_order" name="order">'; echo '<select id="pref_order" name="order">';

View file

@ -20,6 +20,17 @@
text-align: right; text-align: right;
} }
.mod-data-field .fieldadd,
.mod-data-field .sortdefault {
margin-bottom: 1em;
margin-top: 1em;
}
.mod-data-field .fieldadd select,
.mod-data-field .sortdefault select {
margin-left: 1em;
}
.mod-data-field .fieldname { .mod-data-field .fieldname {
width:300px; width:300px;
} }

View file

@ -415,7 +415,7 @@
$ilike = sql_ilike(); //Be case-insensitive $ilike = sql_ilike(); //Be case-insensitive
/// Find the field we are sorting on /// Find the field we are sorting on
if ($sort <= 0) { if ($sort <= 0 or !$sortfield = data_get_field_from_id($sort, $data)) {
switch ($sort) { switch ($sort) {
case DATA_LASTNAME: case DATA_LASTNAME:
@ -427,7 +427,12 @@
case DATA_APPROVED: case DATA_APPROVED:
$ordering = "r.approved $order, r.timecreated $order"; $ordering = "r.approved $order, r.timecreated $order";
break; break;
case DATA_TIMEMODIFIED:
$ordering = "r.timemodified $order";
break;
case DATA_TIMEADDED:
default: default:
$sort = 0;
$ordering = "r.timecreated $order"; $ordering = "r.timecreated $order";
} }
@ -462,7 +467,7 @@
$searchselect = ' '; $searchselect = ' ';
} }
} else if ($sort > 0 and $sortfield = data_get_field_from_id($sort, $data)) { } else {
$sortcontent = $sortfield->get_sort_field(); $sortcontent = $sortfield->get_sort_field();
$sortcontentfull = $sortfield->get_sort_sql('c.'.$sortcontent); $sortcontentfull = $sortfield->get_sort_sql('c.'.$sortcontent);
@ -498,52 +503,8 @@
} else { } else {
$searchselect = ' '; $searchselect = ' ';
} }
} else if ($search) {
$what = ' DISTINCT r.id, r.approved, r.timecreated, r.timemodified, r.userid, u.firstname, u.lastname ';
$count = ' COUNT(DISTINCT c.recordid) ';
$tables = $CFG->prefix.'data_content c,'.$CFG->prefix.'data_records r, '.$CFG->prefix.'user u ';
$where = 'WHERE c.recordid = r.id
AND r.userid = u.id
AND r.dataid = '.$data->id;
$sortorder = ' ORDER BY r.id ASC ';
$searchselect = '';
// If requiredentries is not reached, only show current user's entries
if (!$requiredentries_allowed) {
$where .= ' AND u.id = ' . $USER->id;
}
if (!empty($advanced)) { //Advanced search box again.
foreach($search_array as $key => $val) {
if ($key == DATA_FIRSTNAME or $key == DATA_LASTNAME) {
$searchselect .= " AND $val->field $ilike '%{$val->data}%'";
continue;
}
$tables .= ', '.$CFG->prefix.'data_content c'.$key.' ';
$where .= ' AND c'.$key.'.recordid = r.id ';
$searchselect .= ' AND ('.$val->sql.') ';
}
} else {
$searchselect = " AND (c.content $ilike '%$search%' OR u.firstname $ilike '%$search%' OR u.lastname $ilike '%$search%' ) ";
}
} else {
$what = ' DISTINCT r.id, r.approved, r.timecreated, r.timemodified, r.userid, u.firstname, u.lastname ';
$count = ' COUNT(r.id) ';
$tables = $CFG->prefix.'data_records r, '.$CFG->prefix.'user u ';
$where = 'WHERE r.dataid = '.$data->id. ' AND r.userid = u.id ';
$sortorder = ' ORDER BY r.timecreated '.$order. ' ';
$searchselect = ' ';
// If requiredentries is not reached, only show current user's entries
if (!$requiredentries_allowed) {
$where .= ' AND u.id = ' . $USER->id;
}
} }
/// To actually fetch the records /// To actually fetch the records
$fromsql = "FROM $tables $where $groupselect $approveselect $searchselect"; $fromsql = "FROM $tables $where $groupselect $approveselect $searchselect";