added new favoutcomes plugin settings page - to be used later, this replaces the grade_outcomes_grades table
admin settings - outcomes and scales both have settings page now
$temp->add(new admin_setting_configcheckbox('enableoutcomes', get_string('enableoutcomes', 'grades'), get_string('configenableoutcomes', 'grades'), 0, PARAM_INT));
$ADMIN->add('grades', $temp);
+/// Scales and outcomes
+
+$scales = new admin_externalpage('scales', get_string('scales'), $CFG->wwwroot.'/grade/edit/scale/index.php', 'moodle/grade:manage');
+$ADMIN->add('grades', $scales);
+$outcomes = new admin_externalpage('outcomes', get_string('outcomes', 'grades'), $CFG->wwwroot.'/grade/edit/outcome/index.php', 'moodle/grade:manage');
+$ADMIN->add('grades', $outcomes);
+
+
// The plugins must implement a settings.php file that adds their admin settings to the $settings object
// Reports
foreach (get_list_of_plugins('grade/report') as $plugin) {
// Include all the settings commands for this plugin if there are any
if ($first) {
- $ADMIN->add('grades', new admin_category('gradereports', get_string('reports')));
+ $ADMIN->add('grades', new admin_category('gradereports', get_string('reportsettings', 'grades')));
$first = false;
}
- if ($plugin == 'outcomes') {
- $settings = new admin_externalpage('gradereport'.$plugin, get_string('modulename', 'gradereport_'.$plugin), $CFG->wwwroot.'/grade/report/outcomes/site.php');
- $ADMIN->add('gradereports', $settings);
- } else if (file_exists($CFG->dirroot.'/grade/report/'.$plugin.'/settings.php')) {
+ if (file_exists($CFG->dirroot.'/grade/report/'.$plugin.'/settings.php')) {
$settings = new admin_settingpage('gradereport'.$plugin, get_string('modulename', 'gradereport_'.$plugin));
include_once($CFG->dirroot.'/grade/report/'.$plugin.'/settings.php');
}
$settings = new admin_settingpage('gradeimport'.$plugin, get_string('modulename', 'gradeimport_'.$plugin));
-
include_once($CFG->dirroot.'/grade/import/'.$plugin.'/settings.php');
-
$ADMIN->add('gradeimports', $settings);
}
}
}
$settings = new admin_settingpage('gradeexport'.$plugin, get_string('modulename', 'gradeexport_'.$plugin));
-
include_once($CFG->dirroot.'/grade/export/'.$plugin.'/settings.php');
-
$ADMIN->add('gradeexports', $settings);
}
}
-<form action="course.php" method="post">
+<form action="index.php" method="post">
<div>
<table style="margin-left:auto;margin-right:auto">
<tr>
<td>
+ <label for="addoutcomes"><?php print_string('globaloutcomes', 'grades'); ?></label>
+ <br />
<select id="addoutcomes" size="20" name="addoutcomes[]" multiple="multiple">
<?php
foreach ($outcomes as $outcome) {
-
- // do not include items already used in course
- if (in_array($outcome->id, array_keys($courseoutcomes))) {
- continue;
- }
-
- echo '<option value="'.$outcome->id.'">'.truncate($outcome->fullname, 150).'</option>';
+ echo '<option value="'.$outcome->id.'">'.$outcome->get_name().'</option>';
}
?>
</select>
</td>
<td>
- <?php
- // only show arrows if user has privilages to manage
- if (has_capability('gradereport/outcomes:manage', get_context_instance(CONTEXT_COURSE, $courseid))) {
- ?>
<p class="arrow_button">
<input name="add" id="add" type="submit" value="<?php echo ' '.$THEME->rarrow.' '.get_string('add'); ?>" title="<?php print_string('add'); ?>" />
<br />
<input name="remove" id="remove" type="submit" value="<?php echo ' '.$THEME->larrow.' '.get_string('remove'); ?>" title="<?php print_string('remove'); ?>" />
</p>
- <?php } ?>
</td>
<td>
+ <label for="removeoutcomes"><?php print_string('favoutcomes', 'grades'); ?></label>
+ <br />
<select id="removeoutcomes" size="20" name="removeoutcomes[]" multiple="multiple">
<?php
- foreach ($courseoutcomes as $courseoutcome) {
- echo '<option value="'.$courseoutcome->id.'">'.truncate($courseoutcome->fullname, 150).'</option>';
+ foreach ($favoutcomes as $outcome) {
+ echo '<option value="'.$outcome->id.'">'.$outcome->get_name().'</option>';
}
?>
</select>
--- /dev/null
+<?php // $Id$
+ // Allows a creator to edit custom outcomes, and also display help about outcomes
+
+require_once '../../../config.php';
+require_once $CFG->dirroot.'/grade/lib.php';
+require_once $CFG->libdir.'/gradelib.php';
+
+$courseid = required_param('id', PARAM_INT);
+
+/// Make sure they can even access this course
+if (!$course = get_record('course', 'id', $courseid)) {
+ print_error('nocourseid');
+}
+require_login($course);
+$context = get_context_instance(CONTEXT_COURSE, $course->id);
+require_capability('moodle/course:update', $context);
+
+/// return tracking object
+$gpr = new grade_plugin_return(array('type'=>'edit', 'plugin'=>'favoutcomes', 'courseid'=>$courseid));
+
+$strgrades = get_string('grades');
+$pagename = get_string('favoutcomes', 'grades');
+
+$navlinks = array(array('name'=>$strgrades, 'link'=>$CFG->wwwroot.'/grade/index.php?id='.$courseid, 'type'=>'misc'),
+ array('name'=>$pagename, 'link'=>'', 'type'=>'misc'));
+$navigation = build_navigation($navlinks);
+
+if ($fav_outcomes_ids = get_user_preferences('grade_favourite_outcomes', null)) {
+ $fav_outcomes_ids = unserialize($fav_outcomes_ids);
+} else {
+ $fav_outcomes_ids = array();
+}
+
+$outcomes = grade_outcome::fetch_all_global();
+$favoutcomes = array();
+foreach($outcomes as $outcome) {
+ if (in_array($outcome->id, $fav_outcomes_ids)) {
+ unset($outcomes[$outcome->id]);
+ $favoutcomes[$outcome->id] = $outcome;
+ }
+}
+
+// store user preferences
+if ($data = data_submitted()) {
+ if (!empty($data->add) && !empty($data->addoutcomes)) {
+ /// add all selected to favourite list
+ foreach ($data->addoutcomes as $add) {
+ if (isset($outcomes[$add])) {
+ $outcome = $outcomes[$add];
+ unset($outcomes[$outcome->id]);
+ $favoutcomes[$outcome->id] = $outcome;
+ }
+ }
+ } else if (!empty($data->remove) && !empty($data->removeoutcomes)) {
+ /// remove all selected from favourites
+ foreach ($data->removeoutcomes as $remove) {
+ if (isset($favoutcomes[$remove])) {
+ $outcome = $favoutcomes[$remove];
+ unset($favoutcomes[$outcome->id]);
+ $outcomes[$outcome->id] = $outcome;
+ }
+ }
+ }
+
+ $pref = array_keys($favoutcomes);
+ $pref = serialize($pref);
+ set_user_preference('grade_favourite_outcomes', $pref);
+}
+
+/// Print header
+print_header_simple($strgrades.': '.$pagename, ': '.$strgrades, $navigation, '', '', true, '', navmenu($course));
+
+/// Print the plugin selector at the top
+print_grade_plugin_selector($courseid, 'edit', 'favoutcomes');
+
+
+check_theme_arrows();
+include_once('form.html');
+
+print_footer($course);
+
+
+?>
--- /dev/null
+<?php //$Id$
+
+require_once '../../../config.php';
+require_once $CFG->dirroot.'/grade/lib.php';
+require_once $CFG->dirroot.'/grade/report/lib.php';
+require_once 'edit_form.php';
+
+$courseid = optional_param('courseid', 0, PARAM_INT);
+$id = optional_param('id', 0, PARAM_INT);
+
+$systemcontext = get_context_instance(CONTEXT_SYSTEM);
+
+// a bit complex access control :-O
+if ($id) {
+ /// editing existing outcome
+ if (!$outcome_rec = get_record('grade_outcomes', 'id', $id)) {
+ error('Incorrect outcome id');
+ }
+ if ($outcome_rec->courseid) {
+ $outcome_rec->standard = 0;
+ if (!$course = get_record('course', 'id', $outcome_rec->courseid)) {
+ error('Incorrect course id');
+ }
+ require_login($course);
+ $context = get_context_instance(CONTEXT_COURSE, $course->id);
+ require_capability('moodle/grade:manage', $context);
+ $courseid = $course->id;
+ } else {
+ if ($courseid) {
+ if (!$course = get_record('course', 'id', $courseid)) {
+ error('Incorrect course id');
+ }
+ }
+ $outcome_rec->standard = 1;
+ $outcome_rec->courseid = $courseid;
+ require_login();
+ require_capability('moodle/grade:manage', $systemcontext);
+ }
+
+} else if ($courseid){
+ /// adding new outcome from course
+ if (!$course = get_record('course', 'id', $courseid)) {
+ print_error('nocourseid');
+ }
+ $outcome_rec = new object();
+ $outcome_rec->standard = 0;
+ $outcome_rec->courseid = $courseid;
+ require_login($course);
+ $context = get_context_instance(CONTEXT_COURSE, $course->id);
+ require_capability('moodle/grade:manage', $context);
+
+} else {
+ /// adding new outcome from admin section
+ $outcome_rec = new object();
+ $outcome_rec->standard = 1;
+ $outcome_rec->courseid = 0;
+ require_login();
+ require_capability('moodle/grade:manage', $systemcontext);
+}
+
+// default return url
+$gpr = new grade_plugin_return();
+$returnurl = $gpr->get_return_url('index.php?id='.$courseid);
+
+$mform = new edit_outcome_form(null, array('gpr'=>$gpr));
+
+$mform->set_data($outcome_rec);
+
+if ($mform->is_cancelled()) {
+ redirect($returnurl);
+
+} else if ($data = $mform->get_data(false)) {
+ $outcome = new grade_outcome(array('id'=>$id));
+ $data->usermodified = $USER->id;
+ grade_outcome::set_properties($outcome, $data);
+
+ if (empty($outcome->id)) {
+ if (!has_capability('moodle/grade:manage', $systemcontext)) {
+ $data->standard = 0;
+ }
+ $outcome->courseid = !empty($data->standard) ? null : $courseid;
+ if (empty($outcome->courseid)) {
+ $outcome->courseid = null;
+ }
+ $outcome->insert();
+
+ } else {
+ if (isset($data->standard)) {
+ $outcome->courseid = !empty($data->standard) ? null : $courseid;
+ } else {
+ unset($outcome->couseid); // keep previous
+ }
+ $outcome->update();
+ }
+
+ redirect($returnurl, 'temp debug delay', 3);
+}
+
+$strgrades = get_string('grades');
+$strgraderreport = get_string('graderreport', 'grades');
+$stroutcomeedit = get_string('outcome', 'grades');
+
+if ($courseid) {
+ $nav = array(array('name'=>$strgrades,'link'=>$CFG->wwwroot.'/grade/index.php?id='.$courseid, 'type'=>'misc'),
+ array('name'=>$stroutcomeedit, 'link'=>'', 'type'=>'misc'));
+ $navigation = build_navigation($nav);
+ print_header_simple($strgrades.': '.$strgraderreport, ': '.$stroutcomeedit, $navigation, '', '', true, '', navmenu($course));
+
+} else {
+ require_once $CFG->libdir.'/adminlib.php';
+ admin_externalpage_setup('outcomes');
+ admin_externalpage_print_header();
+}
+
+$mform->display();
+
+if ($courseid) {
+ print_footer($course);
+} else {
+ admin_externalpage_print_footer();
+}
+
+?>
--- /dev/null
+<?php //$Id$
+
+require_once $CFG->libdir.'/formslib.php';
+
+class edit_outcome_form extends moodleform {
+ function definition() {
+ global $CFG, $COURSE;
+ $mform =& $this->_form;
+
+ // visible elements
+ $mform->addElement('header', 'general', get_string('outcomes', 'grades'));
+
+ $mform->addElement('text', 'fullname', get_string('fullname'));
+ $mform->addRule('fullname', get_string('required'), 'required');
+ $mform->setType('fullname', PARAM_TEXT);
+
+ $mform->addElement('text', 'shortname', get_string('shortname'));
+ $mform->addRule('shortname', get_string('required'), 'required');
+ $mform->setType('shortname', PARAM_NOTAGS);
+
+ $mform->addElement('advcheckbox', 'standard', get_string('outcomestandard', 'grades'));
+
+ $options = array();
+
+ $mform->addElement('select', 'scaleid', get_string('scale'), $options);
+ $mform->addRule('scaleid', get_string('required'), 'required');
+
+
+ // hidden params
+ $mform->addElement('hidden', 'id', 0);
+ $mform->setType('id', PARAM_INT);
+
+ $mform->addElement('hidden', 'courseid', 0);
+ $mform->setType('courseid', PARAM_INT);
+
+/// add return tracking info
+ $gpr = $this->_customdata['gpr'];
+ $gpr->add_mform_elements($mform);
+
+//-------------------------------------------------------------------------------
+ // buttons
+ $this->add_action_buttons();
+ }
+
+
+/// tweak the form - depending on existing data
+ function definition_after_data() {
+ global $CFG;
+
+ $mform =& $this->_form;
+
+ // first load proper scales
+ if ($courseid = $mform->getElementValue('courseid')) {
+ $options = array();
+ if ($scales = grade_scale::fetch_all_local($courseid)) {
+ $options[-1] = '--'.get_string('scalescustom');
+ foreach($scales as $scale) {
+ $options[$scale->id] = $scale->get_name();
+ }
+ }
+ if ($scales = grade_scale::fetch_all_global()) {
+ $options[-2] = '--'.get_string('scalesstandard');
+ foreach($scales as $scale) {
+ $options[$scale->id] = $scale->get_name();
+ }
+ }
+ $scale_el =& $mform->getElement('scaleid');
+ $scale_el->load($options);
+
+ } else {
+ $options = array();
+ if ($scales = grade_scale::fetch_all_global()) {
+ foreach($scales as $scale) {
+ $options[$scale->id] = $scale->get_name();
+ }
+ }
+ $scale_el =& $mform->getElement('scaleid');
+ $scale_el->load($options);
+ }
+
+ if ($id = $mform->getElementValue('id')) {
+ $outcome = grade_outcome::fetch(array('id'=>$id));
+ $count = $outcome->get_uses_count();
+
+ if ($count) {
+ $mform->hardFreeze('scaleid');
+ }
+
+ if (empty($courseid)) {
+ $mform->hardFreeze('standard');
+
+ } else if (empty($outcome->courseid) and !has_capability('moodle/grade:manage', get_context_instance(CONTEXT_SYSTEM))) {
+ $mform->hardFreeze('standard');
+
+ } else if ($count and !empty($outcome->courseid)) {
+ $mform->hardFreeze('standard');
+ }
+
+
+ } else {
+ if (empty($courseid) or !has_capability('moodle/grade:manage', get_context_instance(CONTEXT_SYSTEM))) {
+ $mform->hardFreeze('standard');
+ }
+ }
+ }
+
+/// perform extra validation before submission
+ function validation($data){
+ $errors = array();
+
+ if ($data['scaleid'] < 1) {
+ $errors['scaleid'] = get_string('required');
+ }
+
+ if (!empty($data['standard']) and $scale = grade_scale::fetch(array('id'=>$data['scaleid']))) {
+ if (!empty($scale->courseid)) {
+ //TODO: localize
+ $errors['scaleid'] = 'Can not use custom scale in global outcome!';
+ }
+ }
+
+ if (0 == count($errors)){
+ return true;
+ } else {
+ return $errors;
+ }
+ }
+
+
+}
+
+?>
-TODO
\ No newline at end of file
+<?php // $Id$
+ // Allows a creator to edit custom outcomes, and also display help about outcomes
+
+require_once '../../../config.php';
+require_once $CFG->dirroot.'/grade/lib.php';
+require_once $CFG->libdir.'/gradelib.php';
+
+$courseid = optional_param('id', 0, PARAM_INT);
+$action = optional_param('action', '', PARAM_ALPHA);
+
+/// Make sure they can even access this course
+if ($courseid) {
+ if (!$course = get_record('course', 'id', $courseid)) {
+ print_error('nocourseid');
+ }
+ require_login($course);
+ $context = get_context_instance(CONTEXT_COURSE, $course->id);
+ require_capability('moodle/grade:manage', $context);
+
+} else {
+ require_once $CFG->libdir.'/adminlib.php';
+ admin_externalpage_setup('outcomes');
+}
+
+/// return tracking object
+$gpr = new grade_plugin_return(array('type'=>'edit', 'plugin'=>'outcome', 'courseid'=>$courseid));
+
+
+$strgrades = get_string('grades');
+$pagename = get_string('outcomes', 'grades');
+
+$navlinks = array(array('name'=>$strgrades, 'link'=>$CFG->wwwroot.'/grade/index.php?id='.$courseid, 'type'=>'misc'),
+ array('name'=>$pagename, 'link'=>'', 'type'=>'misc'));
+$navigation = build_navigation($navlinks);
+
+$strshortname = get_string('shortname');
+$strfullname = get_string('fullname');
+$strscale = get_string('scale');
+$strstandardoutcome = get_string('outcomesstandard', 'grades');
+$strcustomoutcomes = get_string('outcomescustom', 'grades');
+$strdelete = get_string('delete');
+$stredit = get_string('edit');
+$srtcreatenewoutcome = get_string('outcomecreate', 'grades');
+$stractivities = get_string('activities');
+$stredit = get_string('edit');
+
+switch ($action) {
+ case 'delete':
+ if (!confirm_sesskey()) {
+ break;
+ }
+ $outcomeid = required_param('outcomeid', PARAM_INT);
+ if (!$outcome = grade_outcome::fetch(array('id'=>$outcomeid))) {
+ break;
+ }
+
+ if (empty($outcome->courseid)) {
+ require_capability('moodle/grade:manage', get_context_instance(CONTEXT_SYSTEM));
+ } else if ($outcome->courseid != $courseid) {
+ error('Incorrect courseid!');
+ }
+
+ if (!$outcome->can_delete()) {
+ break;
+ }
+
+ //TODO: add confirmation
+ $outcome->delete();
+ break;
+}
+
+if ($courseid) {
+ /// Print header
+ print_header_simple($strgrades.': '.$pagename, ': '.$strgrades, $navigation, '', '', true, '', navmenu($course));
+ /// Print the plugin selector at the top
+ print_grade_plugin_selector($courseid, 'edit', 'outcome');
+
+} else {
+ admin_externalpage_print_header();
+}
+
+
+if ($courseid and $outcomes = grade_outcome::fetch_all_local($courseid)) {
+ print_heading($strcustomoutcomes);
+ $data = array();
+ foreach($outcomes as $outcome) {
+ $line = array();
+ $line[] = $outcome->get_name();
+ $line[] = $outcome->get_shortname();
+
+ $scale = $outcome->load_scale();
+ $line[] = $scale->get_name();
+
+ $outcomes_uses = $outcome->get_uses_count();
+ $line[] = $outcomes_uses;
+
+ $buttons = "";
+ $buttons .= "<a title=\"$stredit\" href=\"edit.php?courseid=$courseid&id=$outcome->id\"><img".
+ " src=\"$CFG->pixpath/t/edit.gif\" class=\"iconsmall\" alt=\"$stredit\" /></a> ";
+ if (empty($outcomes_uses)) {
+ $buttons .= "<a title=\"$strdelete\" href=\"index.php?id=$courseid&outcomeid=$outcome->id&action=delete&sesskey=$USER->sesskey\"><img".
+ " src=\"$CFG->pixpath/t/delete.gif\" class=\"iconsmall\" alt=\"$strdelete\" /></a> ";
+ }
+ $line[] = $buttons;
+ $data[] = $line;
+ }
+ $table = new object();
+ $table->head = array($strfullname, $strshortname, $strscale, $stractivities, $stredit);
+ $table->size = array('30%', '20%', '20%', '20%', '10%');
+ $table->align = array('left', 'left', 'left', 'center', 'center');
+ $table->width = '90%';
+ $table->data = $data;
+ print_table($table);
+}
+
+if ($outcomes = grade_outcome::fetch_all_global()) {
+ print_heading($strstandardoutcome);
+ $data = array();
+ foreach($outcomes as $outcome) {
+ $line = array();
+ $line[] = $outcome->get_name();
+ $line[] = $outcome->get_shortname();
+
+ $scale = $outcome->load_scale();
+ $line[] = $scale->get_name();
+
+ $outcomes_uses = $outcome->get_uses_count();
+ $line[] = $outcomes_uses;
+
+ $buttons = "";
+ if (has_capability('moodle/grade:manage', get_context_instance(CONTEXT_SYSTEM))) {
+ $buttons .= "<a title=\"$stredit\" href=\"edit.php?courseid=$courseid&id=$outcome->id\"><img".
+ " src=\"$CFG->pixpath/t/edit.gif\" class=\"iconsmall\" alt=\"$stredit\" /></a> ";
+ }
+ if (empty($outcomes_uses) and has_capability('moodle/grade:manage', get_context_instance(CONTEXT_SYSTEM))) {
+ $buttons .= "<a title=\"$strdelete\" href=\"index.php?id=$courseid&outcomeid=$outcome->id&action=delete&sesskey=$USER->sesskey\"><img".
+ " src=\"$CFG->pixpath/t/delete.gif\" class=\"iconsmall\" alt=\"$strdelete\" /></a> ";
+ }
+ $line[] = $buttons;
+ $data[] = $line;
+ }
+ $table = new object();
+ $table->head = array($strfullname, $strshortname, $strscale, $stractivities, $stredit);
+ $table->size = array('30%', '20%', '20%', '20%', '10%');
+ $table->align = array('left', 'left', 'left', 'center', 'center');
+ $table->width = '90%';
+ $table->data = $data;
+ print_table($table);
+}
+
+
+echo '<div class="buttons">';
+print_single_button('edit.php', array('courseid'=>$courseid), $srtcreatenewoutcome);
+echo '</div>';
+
+if ($courseid) {
+ print_footer($course);
+} else {
+ admin_externalpage_print_footer();
+}
+
+
+?>
require_once $CFG->dirroot.'/grade/report/lib.php';
require_once 'edit_form.php';
-$courseid = required_param('courseid', PARAM_INT);
+$courseid = optional_param('courseid', 0, PARAM_INT);
$id = optional_param('id', 0, PARAM_INT);
-if (!$course = get_record('course', 'id', $courseid)) {
- print_error('nocourseid');
-}
-
-require_login($course);
-$context = get_context_instance(CONTEXT_COURSE, $course->id);
$systemcontext = get_context_instance(CONTEXT_SYSTEM);
-require_capability('moodle/course:managescales', $context);
-// default return url
-$gpr = new grade_plugin_return();
-$returnurl = $gpr->get_return_url('index.php?id='.$course->id);
-
-$mform = new edit_scale_form(null, array('gpr'=>$gpr));
-if ($scale = get_record('scale', 'id', $id)) {
- $scale->custom = (int)(!empty($scale->courseid));
- if (!empty($scale->courseid)) {
+// a bit complex access control :-O
+if ($id) {
+ /// editing existing scale
+ if (!$scale_rec = get_record('scale', 'id', $id)) {
+ error('Incorrect scale id');
+ }
+ if ($scale_rec->courseid) {
+ $scale_rec->standard = 0;
+ if (!$course = get_record('course', 'id', $scale_rec->courseid)) {
+ error('Incorrect course id');
+ }
+ require_login($course);
+ $context = get_context_instance(CONTEXT_COURSE, $course->id);
+ require_capability('moodle/course:managescales', $context);
+ $courseid = $course->id;
+ } else {
+ if ($courseid) {
+ if (!$course = get_record('course', 'id', $courseid)) {
+ error('Incorrect course id');
+ }
+ }
+ $scale_rec->standard = 1;
+ $scale_rec->courseid = $courseid;
+ require_login();
require_capability('moodle/course:managescales', $systemcontext);
}
- $scale->courseid = $courseid;
- $options = new object();
- $options->smiley = false;
- $options->filter = false;
- $options->noclean = false;
- $scale->description = format_text($scale->description, FORMAT_MOODLE, $options);
- $mform->set_data($scale);
+
+} else if ($courseid){
+ /// adding new scale from course
+ if (!$course = get_record('course', 'id', $courseid)) {
+ print_error('nocourseid');
+ }
+ $scale_rec = new object();
+ $scale_rec->standard = 0;
+ $scale_rec->courseid = $courseid;
+ require_login($course);
+ $context = get_context_instance(CONTEXT_COURSE, $course->id);
+ require_capability('moodle/course:managescales', $context);
} else {
- $mform->set_data(array('courseid'=>$courseid, 'custom'=>1));
+ /// adding new scale from admin section
+ $scale_rec = new object();
+ $scale_rec->standard = 1;
+ $scale_rec->courseid = 0;
+ require_login();
+ require_capability('moodle/course:managescales', $systemcontext);
}
+// default return url
+$gpr = new grade_plugin_return();
+$returnurl = $gpr->get_return_url('index.php?id='.$courseid);
+
+$mform = new edit_scale_form(null, array('gpr'=>$gpr));
+
+$mform->set_data($scale_rec);
+
if ($mform->is_cancelled()) {
redirect($returnurl);
grade_scale::set_properties($scale, $data);
if (empty($scale->id)) {
- $scale->courseid = $courseid;
- if (empty($data->custom) and has_capability('moodle/course:managescales', $systemcontext)) {
- $scale->courseid = 0;
+ if (!has_capability('moodle/grade:manage', $systemcontext)) {
+ $data->standard = 0;
}
+ $scale->courseid = !empty($data->standard) ? 0 : $courseid;
$scale->insert();
} else {
- if (isset($data->custom)) {
- $scale->courseid = $data->custom ? $courseid : 0;
+ if (isset($data->standard)) {
+ $scale->courseid = !empty($data->standard) ? 0 : $courseid;
} else {
- unset($scale->couseid);
+ unset($scale->couseid); // keep previous
}
$scale->update();
}
$strgraderreport = get_string('graderreport', 'grades');
$strscaleedit = get_string('scale');
-$nav = array(array('name'=>$strgrades,'link'=>$CFG->wwwroot.'/grade/index.php?id='.$courseid, 'type'=>'misc'),
- array('name'=>$strscaleedit, 'link'=>'', 'type'=>'misc'));
-
-$navigation = build_navigation($nav);
+if ($courseid) {
+ $nav = array(array('name'=>$strgrades,'link'=>$CFG->wwwroot.'/grade/index.php?id='.$courseid, 'type'=>'misc'),
+ array('name'=>$strscaleedit, 'link'=>'', 'type'=>'misc'));
+ $navigation = build_navigation($nav);
+ print_header_simple($strgrades.': '.$strgraderreport, ': '.$strscaleedit, $navigation, '', '', true, '', navmenu($course));
-
-print_header_simple($strgrades . ': ' . $strgraderreport, ': ' . $strscaleedit, $navigation, '', '', true, '', navmenu($course));
+} else {
+ require_once $CFG->libdir.'/adminlib.php';
+ admin_externalpage_setup('outcomes');
+ admin_externalpage_print_header();
+}
$mform->display();
-print_footer($course);
-die;
+if ($courseid) {
+ print_footer($course);
+} else {
+ admin_externalpage_print_footer();
+}
+
+?>
$mform->addRule('name', get_string('required'), 'required', null, 'client');
$mform->setType('name', PARAM_TEXT);
- $mform->addElement('advcheckbox', 'custom', get_string('coursescale', 'grades'));
+ $mform->addElement('advcheckbox', 'standard', get_string('scalestandard'));
$mform->addElement('static', 'activities', get_string('activities'));
$mform =& $this->_form;
+ $courseid = $mform->getElementValue('courseid');
+
if ($id = $mform->getElementValue('id')) {
$scale = grade_scale::fetch(array('id'=>$id));
- if ($count = $scale->get_uses_count()) {
- if (empty($scale->courseid)) {
- $mform->hardFreeze('custom');
- }
+ $count = $scale->get_uses_count();
+
+ if ($count) {
$mform->hardFreeze('scale');
}
+
+ if (empty($courseid)) {
+ $mform->hardFreeze('standard');
+
+ } else if (empty($scale->courseid) and !has_capability('moodle/course:managescales', get_context_instance(CONTEXT_SYSTEM))) {
+ $mform->hardFreeze('standard');
+
+ } else if ($count and !empty($scale->courseid)) {
+ $mform->hardFreeze('standard');
+ }
+
$activities_el =& $mform->getElement('activities');
$activities_el->setValue(get_string('usedinnplaces', '', $count));
} else {
$mform->removeElement('activities');
- if (!has_capability('moodle/course:managescales', get_context_instance(CONTEXT_SYSTEM))) {
- $mform->hardFreeze('custom');
+ if (empty($courseid) or !has_capability('moodle/course:managescales', get_context_instance(CONTEXT_SYSTEM))) {
+ $mform->hardFreeze('standard');
}
}
}
require_once $CFG->dirroot.'/grade/lib.php';
require_once $CFG->libdir.'/gradelib.php';
-$courseid = required_param('id', PARAM_INT);
+$courseid = optional_param('id', 0, PARAM_INT);
$action = optional_param('action', '', PARAM_ALPHA);
/// Make sure they can even access this course
-if (!$course = get_record('course', 'id', $courseid)) {
- print_error('nocourseid');
+if ($courseid) {
+ if (!$course = get_record('course', 'id', $courseid)) {
+ print_error('nocourseid');
+ }
+ require_login($course);
+ $context = get_context_instance(CONTEXT_COURSE, $course->id);
+ require_capability('moodle/course:managescales', $context);
+} else {
+ require_once $CFG->libdir.'/adminlib.php';
+ admin_externalpage_setup('scales');
}
-require_login($course);
-$context = get_context_instance(CONTEXT_COURSE, $course->id);
-require_capability('moodle/course:managescales', $context);
/// return tracking object
$gpr = new grade_plugin_return(array('type'=>'edit', 'plugin'=>'scale', 'courseid'=>$courseid));
$strscale = get_string('scale');
$strstandardscale = get_string('scalesstandard');
-$strcustomscales = get_string('coursescales', 'grades');
+$strcustomscales = get_string('scalescustom');
$strname = get_string('name');
$strdelete = get_string('delete');
$stredit = get_string('edit');
$srtcreatenewscale = get_string('scalescustomcreate');
$stractivities = get_string('activities');
-$stroptions = get_string('action');
+$stredit = get_string('edit');
switch ($action) {
case 'delete':
if (empty($scale->courseid)) {
require_capability('moodle/course:managescales', get_context_instance(CONTEXT_SYSTEM));
+ } else if ($scale->courseid != $courseid) {
+ error('Incorrect courseid!');
}
if (!$scale->can_delete()) {
break;
}
-/// Print header
-print_header_simple($strgrades.': '.$pagename, ': '.$strgrades, $navigation,
- '', '', true, '', navmenu($course));
-
-/// Print the plugin selector at the top
-print_grade_plugin_selector($courseid, 'edit', 'scale');
+if ($courseid) {
+ /// Print header
+ print_header_simple($strgrades.': '.$pagename, ': '.$strgrades, $navigation, '', '', true, '', navmenu($course));
+ /// Print the plugin selector at the top
+ print_grade_plugin_selector($courseid, 'edit', 'scale');
+} else {
+ admin_externalpage_print_header();
+}
-print_heading($strstandardscale);
-if ($scales = grade_scale::fetch_all(array('courseid'=>0))) {
+if ($courseid and $scales = grade_scale::fetch_all_local($courseid)) {
+ print_heading($strcustomscales);
$data = array();
foreach($scales as $scale) {
$line = array();
$line[] = $scales_uses;
$buttons = "";
- if (has_capability('moodle/course:managescales', get_context_instance(CONTEXT_SYSTEM))) {
- $buttons .= "<a title=\"$stredit\" href=\"edit.php?courseid=$course->id&id=$scale->id\"><img".
- " src=\"$CFG->pixpath/t/edit.gif\" class=\"iconsmall\" alt=\"$stredit\" /></a> ";
- }
- if (empty($scales_uses) and has_capability('moodle/course:managescales', get_context_instance(CONTEXT_SYSTEM))) {
- $buttons .= "<a title=\"$strdelete\" href=\"index.php?id=$course->id&scaleid=$scale->id&action=delete&sesskey=$USER->sesskey\"><img".
+ $buttons .= "<a title=\"$stredit\" href=\"edit.php?courseid=$courseid&id=$scale->id\"><img".
+ " src=\"$CFG->pixpath/t/edit.gif\" class=\"iconsmall\" alt=\"$stredit\" /></a> ";
+ if (empty($scales_uses)) {
+ $buttons .= "<a title=\"$strdelete\" href=\"index.php?id=$courseid&scaleid=$scale->id&action=delete&sesskey=$USER->sesskey\"><img".
" src=\"$CFG->pixpath/t/delete.gif\" class=\"iconsmall\" alt=\"$strdelete\" /></a> ";
}
$line[] = $buttons;
$data[] = $line;
}
- $table->head = array($strscale, $stractivities, $stroptions);
+ $table->head = array($strscale, $stractivities, $stredit);
$table->size = array('70%', '20%', '10%');
$table->align = array('left', 'center', 'center');
$table->width = '90%';
print_table($table);
}
-print_heading($strcustomscales);
-if ($scales = grade_scale::fetch_all(array('courseid'=>$courseid))) {
+if ($scales = grade_scale::fetch_all_global()) {
+ print_heading($strstandardscale);
$data = array();
foreach($scales as $scale) {
$line = array();
$line[] = $scales_uses;
$buttons = "";
- $buttons .= "<a title=\"$stredit\" href=\"edit.php?courseid=$course->id&id=$scale->id\"><img".
- " src=\"$CFG->pixpath/t/edit.gif\" class=\"iconsmall\" alt=\"$stredit\" /></a> ";
- if (empty($scales_uses)) {
- $buttons .= "<a title=\"$strdelete\" href=\"index.php?id=$course->id&scaleid=$scale->id&action=delete&sesskey=$USER->sesskey\"><img".
+ if (has_capability('moodle/course:managescales', get_context_instance(CONTEXT_SYSTEM))) {
+ $buttons .= "<a title=\"$stredit\" href=\"edit.php?courseid=$courseid&id=$scale->id\"><img".
+ " src=\"$CFG->pixpath/t/edit.gif\" class=\"iconsmall\" alt=\"$stredit\" /></a> ";
+ }
+ if (empty($scales_uses) and has_capability('moodle/course:managescales', get_context_instance(CONTEXT_SYSTEM))) {
+ $buttons .= "<a title=\"$strdelete\" href=\"index.php?id=$courseid&scaleid=$scale->id&action=delete&sesskey=$USER->sesskey\"><img".
" src=\"$CFG->pixpath/t/delete.gif\" class=\"iconsmall\" alt=\"$strdelete\" /></a> ";
}
$line[] = $buttons;
$data[] = $line;
}
- $table->head = array($strscale, $stractivities, $stroptions);
+ $table->head = array($strscale, $stractivities, $stredit);
$table->size = array('70%', '20%', '10%');
$table->align = array('left', 'center', 'center');
$table->width = '90%';
print_single_button('edit.php', array('courseid'=>$courseid), $srtcreatenewscale);
echo '</div>';
-print_footer($course);
+if ($courseid) {
+ print_footer($course);
+} else {
+ admin_externalpage_print_footer();
+}
?>
$menu[$url] = get_string('scales');
}
- if (has_capability('moodle/grade:manage', $context)) { // TODO: add outcome cap
+ if (has_capability('moodle/grade:manage', $context)) {
$url = 'edit/outcome/index.php?id='.$courseid;
if ($active_type == 'edit' and $active_plugin == 'outcome' ) {
$active = $url;
}
$menu[$url] = get_string('outcomes', 'grades');
}
+
+ if (has_capability('course:update', $context)) {
+ $url = 'edit/favoutcomes/index.php?id='.$courseid;
+ if ($active_type == 'edit' and $active_plugin == 'favoutcomes' ) {
+ $active = $url;
+ }
+ $menu[$url] = get_string('favouriteoutcomes', 'grades');
+ }
}
/// finally print/return the popup form
$groupwheresql = null;
}
- if ($meanselection == GRADE_AGGREGATE_MEAN_GRADED) {
+ if ($meanselection == GRADE_AGGREGATE_MEAN_GRADED) {
$totalcount = 0;
} else {
$totalcount = $this->get_numusers();
$sum_array[$itemid] = $csum->sum;
if ($totalcount) {
$count_array[$itemid] = $totalcount;
- } else {
+ } else {
$count_array[$itemid] = $csum->count;
}
}
+++ /dev/null
-<?php
-/*********************************
- * Course outcomes editting page *
- *********************************/
-
-include_once('../../../config.php');
-require_once($CFG->libdir.'/tablelib.php');
-require_once $CFG->dirroot.'/grade/lib.php';
-
-$page = optional_param('page', 0, PARAM_INT); // current page
-$search = optional_param('search', 0, PARAM_TEXT);
-$deleteid = optional_param('deleteid', 0, PARAM_INT); // which outcome to delete
-$confirm = optional_param('confirm', 0, PARAM_INT);
-$perpage = 30;
-
-$courseid = required_param('id', PARAM_INT); // course id
-if (!$course = get_record('course', 'id', $courseid)) {
- print_error('nocourseid');
-}
-
-require_login($courseid);
-require_capability('gradereport/outcomes:view', get_context_instance(CONTEXT_SYSTEM));
-
- /// form processing
- if ($deleteid && confirm_sesskey()) {
- require_capability('gradereport/outcomes:manage', get_context_instance(CONTEXT_COURSE, $courseid));
- if ($confirm) {
- // delete all outcomes used in courses
- // delete all outcomes used in grade items
- delete_records('grade_outcomes_courses', 'outcomeid', $deleteid);
- delete_records('grade_outcomes', 'id', $deleteid);
- } else {
- // prints confirmation
- $strgrades = get_string('grades');
- $stroutcomes = get_string('outcomes', 'grades');
- $navlinks = array();
- $navlinks[] = array('name' => $strgrades, 'link' => $CFG->wwwroot . '/grade/index.php?id='.$courseid, 'type' => 'misc');
- $navlinks[] = array('name' => $stroutcomes, 'link' => '', 'type' => 'misc');
-
- $navigation = build_navigation($navlinks);
-
-/// Print header
- print_header_simple($strgrades.':'.$stroutcomes, ':'.$strgrades, $navigation, '', '', true);
-
- $strdeleteoutcomecheck = get_string('deleteoutcomecheck', 'grades');
- notice_yesno($strdeleteoutcomecheck,
- 'course.php?id='.$courseid.'&deleteid='.$deleteid.'&confirm=1&sesskey='.sesskey(),
- 'course.php?id='.$courseid.'&');
- print_footer();
- exit;
- }
- }
-
- if ($data = data_submitted()) {
- require_capability('gradereport/outcomes:manage', get_context_instance(CONTEXT_COURSE, $courseid));
- if (!empty($data->add) && !empty($data->addoutcomes)) {
- /// add all selected to course list
- foreach ($data->addoutcomes as $add) {
- $goc -> courseid = $courseid;
- $goc -> outcomeid = $add;
- insert_record('grade_outcomes_courses', $goc);
- }
- } else if (!empty($data->remove) && !empty($data->removeoutcomes)) {
- /// remove all selected from course outcomes list
- foreach ($data->removeoutcomes as $remove) {
- delete_records('grade_outcomes_courses', 'courseid', $courseid, 'outcomeid', $remove);
- }
- }
- }
-
-// Build navigation
-$strgrades = get_string('grades');
-$stroutcomes = get_string('outcomes', 'grades');
-$navlinks = array();
-$navlinks[] = array('name' => $strgrades, 'link' => $CFG->wwwroot . '/grade/index.php?id='.$courseid, 'type' => 'misc');
-$navlinks[] = array('name' => $stroutcomes, 'link' => '', 'type' => 'misc');
-
-$navigation = build_navigation($navlinks);
-
-/// Print header
-print_header_simple($strgrades.':'.$stroutcomes, ':'.$strgrades, $navigation, '', '', true);
-print_grade_plugin_selector($courseid, 'report', 'outcomes');
- // Add tabs
- $currenttab = 'courseoutcomes';
- include('tabs.php');
-
- /// listing of all site outcomes + this course specific outcomes
- $outcomes = get_records_sql('SELECT * FROM '.$CFG->prefix.'grade_outcomes
- WHERE courseid IS NULL');
-
- // outcomes used in this course
- $courseoutcomes = get_records_sql('SELECT go.id, go.fullname
- FROM '.$CFG->prefix.'grade_outcomes_courses goc,
- '.$CFG->prefix.'grade_outcomes go
- WHERE goc.courseid = '.$courseid.'
- AND goc.outcomeid = go.id');
-
- if (empty($courseoutcomes)) {
- $courseoutcomes = get_records('grade_outcomes', 'courseid', $courseid);
- } elseif ($mcourseoutcomes = get_records('grade_outcomes', 'courseid', $courseid)) {
- $courseoutcomes += $mcourseoutcomes;
- }
-
- check_theme_arrows();
- include_once('course.html');
-
- /// interface to add/edit/delete course specific outcomes
- echo '<p/>';
- print_heading(get_string('coursespecoutcome', 'gradereport_outcomes')); // course sepcific outcomes
-
- $totalcount = count_records('grade_outcomes_courses', 'courseid', $courseid);
- $baseurl = "course.php";
- print_paging_bar($totalcount, $page, $perpage, $baseurl);
-
- if ($outcomes = get_recordset('grade_outcomes', 'courseid', $courseid, '', '*', $page * $perpage, $perpage)) {
-
- $tablecolumns = array('outcome', 'scale', 'edit', 'usedgradeitems');
- $tableheaders = array(get_string('outcomes', 'grades'),
- get_string('scale'),
- '',
- get_string('activities'));
-
- $table = new flexible_table('outcomes');
- $table->define_columns($tablecolumns);
- $table->define_headers($tableheaders);
- $table->define_baseurl($baseurl);
- $table->set_attribute('cellspacing', '0');
- $table->set_attribute('id', 'user-grade');
- $table->set_attribute('class', 'boxaligncenter generaltable');
-
- $table->setup();
-
- while ($outcome = rs_fetch_next_record($outcomes)) {
- $data = array();
-
- // full name of the outcome
- $data[] = $outcome->fullname;
-
- // full name of the scale used by this outcomes
- $scale= get_record('scale', 'id', $outcome->scaleid);
- $data[] = $scale->name;
-
- if (has_capability('gradereport/outcomes:manage', get_context_instance(CONTEXT_COURSE, $courseid))) {
- // add operations
- $data[] = '<a href="editoutcomes.php?id='.$outcome->id.'&courseid='.$courseid.'&sesskey='.sesskey().'"><img alt="Update" class="iconsmall" src="'.$CFG->wwwroot.'/pix/t/edit.gif"/></a>
- <a href="course.php?deleteid='.$outcome->id.'&id='.$courseid.'&sesskey='.sesskey().'"><img alt="Delete" class="iconsmall" src="'.$CFG->wwwroot.'/pix/t/delete.gif"/></a>'; // icons and links
- } else {
- $data[] = '';
- }
- // num of gradeitems using this
- $num = count_records('grade_items', 'outcomeid' ,$outcome->id);
- $data[] = (int) $num;
-
- // num of courses using this outcome
- $table->add_data($data);
- }
-
- $table->print_html();
- }
- if (has_capability('gradereport/outcomes:manage', get_context_instance(CONTEXT_COURSE, $courseid))) {
- echo '<a href="editoutcomes.php?courseid='.$courseid.'">'.get_string('addoutcome', 'gradereport_outcomes').'</a>';
- }
- print_footer();
-
-/**
- * truncates a string to a length of num
- * @param string string
- * @param int num
- * @return string
- */
-function truncate($string, $num) {
- if (strlen($string) > $num + 3) {
- $text = substr($string, 0, $num);
- $text = $text."...";
- }
- return $string;
-}
-?>
'editingteacher' => CAP_ALLOW,
'admin' => CAP_ALLOW
)
- ),
-
- 'gradereport/outcomes:manage' => array(
- 'riskbitmask' => RISK_CONFIG,
- 'captype' => 'write',
- 'contextlevel' => CONTEXT_COURSE,
- 'legacy' => array(
- 'editingteacher' => CAP_ALLOW,
- 'admin' => CAP_ALLOW
- )
)
);
require_once($CFG->libdir . '/gradelib.php');
require_once $CFG->dirroot.'/grade/lib.php';
-$courseid = required_param('id'); // course id
+$courseid = required_param('id', PARAM_INT); // course id
if (!$course = get_record('course', 'id', $courseid)) {
print_error('nocourseid');
}
require_login($course->id);
-
$context = get_context_instance(CONTEXT_COURSE, $course->id);
+require_capability('gradereport/outcomes:view', $context);
+
// Build navigation
$strgrades = get_string('grades');
$stroutcomes = get_string('outcomes', 'grades');
/// Print header
print_header_simple($strgrades.':'.$stroutcomes, ':'.$strgrades, $navigation, '', '', true);
print_grade_plugin_selector($courseid, 'report', 'outcomes');
-// Add tabs
-$currenttab = 'outcomereport';
-include('tabs.php');
-
-// Grab all outcomes, distinguishing between site-level and course-level outcomes
-$sql = "SELECT mdl_grade_outcomes.id,
- mdl_grade_outcomes_courses.courseid,
- mdl_grade_outcomes.shortname,
- mdl_grade_outcomes.scaleid
- FROM mdl_grade_outcomes
- LEFT JOIN mdl_grade_outcomes_courses
- ON (mdl_grade_outcomes.id = mdl_grade_outcomes_courses.outcomeid AND mdl_grade_outcomes_courses.courseid = $courseid)
- ORDER BY mdl_grade_outcomes_courses.courseid DESC";
+
+//first make sure we have proper final grades
+grade_regrade_final_grades($courseid);
+
+// Grab all outcomes used in course
+$sql = "SELECT go.* FROM {$CFG->prefix}grade_outcomes go
+ WHERE go.id IN (SELECT gi.outcomeid FROM {$CFG->prefix}grade_items gi WHERE gi.courseid = $courseid)";
$report_info = array();
$outcomes = get_records_sql($sql);
// Get grade_items that use each outcome
foreach ($outcomes as $outcomeid => $outcome) {
- $sql = "SELECT mdl_grade_items.id,
- mdl_grade_items.itemname,
- mdl_grade_items.itemmodule,
- mdl_grade_items.iteminstance,
- mdl_grade_items.itemtype,
- mdl_grade_items.itemnumber,
- mdl_grade_items.courseid,
- mdl_grade_items.idnumber
- FROM mdl_grade_items
- WHERE mdl_grade_items.outcomeid = $outcomeid";
- $report_info[$outcomeid]['items'] = get_records_sql($sql);
+ $report_info[$outcomeid]['items'] = get_records_select('grade_items', "outcomeid = $outcomeid AND courseid = $courseid");
$report_info[$outcomeid]['outcome'] = $outcome;
// Get average grades for each item
if (is_array($report_info[$outcomeid]['items'])) {
foreach ($report_info[$outcomeid]['items'] as $itemid => $item) {
$sql = "SELECT id, AVG(finalgrade) AS `avg`, COUNT(finalgrade) AS `count`
- FROM mdl_grade_grades
+ FROM {$CFG->prefix}grade_grades
WHERE itemid = $itemid
GROUP BY itemid";
$info = get_records_sql($sql);
$items_html .= "<tr>\n";
}
- $cm = get_coursemodule_from_instance($item->itemmodule, $item->iteminstance, $item->courseid);
- $itemname = '<a href="'.$CFG->wwwroot.'/mod/'.$item->itemmodule.'/view.php?id='.$cm->id.'">'.$item->itemname.'</a>';
+ $grade_item = new grade_item($item, false);
+
+ if ($item->itemtype == 'mod') {
+ $cm = get_coursemodule_from_instance($item->itemmodule, $item->iteminstance, $item->courseid);
+ $itemname = '<a href="'.$CFG->wwwroot.'/mod/'.$item->itemmodule.'/view.php?id='.$cm->id.'">'.$item->itemname.'</a>';
+ } else {
+ $itemname = $grade_item->get_name();
+ }
$outcomedata['outcome']->sum += $item->avg;
$gradehtml = $scale->get_nearest_item($item->avg);
<?PHP // $Id$
-$plugin->version = 2007072501;
+$plugin->version = 2007073000;
$plugin->requires = 2007072402;
?>
$string['onascaleof'] = ' on a scale of $a->grademin to $a->grademax';
$string['operations'] = 'Operations';
$string['outcome'] = 'Outcome';
+$string['outcomecreate'] = 'Add a new outcome';
$string['outcomes'] = 'Outcomes';
+$string['outcomescustom'] = 'Custom outcomes';
$string['outcomename'] = 'Outcome name';
$string['outcomereport'] = 'Outcome report';
+$string['outcomesstandard'] = 'Standard outcomes';
+$string['outcomestandard'] = 'Standard outcome';
$string['outcomes'] = 'Outcomes';
$string['overridden'] = 'Overridden';
$string['overallavg'] = 'Overall average';
$string['real'] = 'Real';
$string['rawpct'] = 'Raw %%';
$string['reportplugins'] = 'Report plugins';
+$string['reportsettings'] = 'Report settings';
$string['reprintheaders'] = 'Reprint Headers';
$string['right'] = 'Right';
$string['savechanges'] = 'Save Changes';
$string['scalescustomcreate'] = 'Add a new scale';
$string['scalescustomno'] = 'No custom scales have been created yet';
$string['scalesstandard'] = 'Standard scales';
+$string['scalestandard'] = 'Standard scale';
$string['scalestip'] = 'To create custom scales, use the \'Scales...\' link in your course administration menu.';
$string['schedule'] = 'Schedule';
$string['scheduledbackupstatus'] = 'Scheduled backup status';
<?xml version="1.0" encoding="UTF-8" ?>
-<XMLDB PATH="lib/db" VERSION="20070725" COMMENT="XMLDB file for core Moodle tables"
+<XMLDB PATH="lib/db" VERSION="20070730" COMMENT="XMLDB file for core Moodle tables"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="../../lib/xmldb/xmldb.xsd"
>
<KEY NAME="handlerid" TYPE="foreign" FIELDS="handlerid" REFTABLE="events_handlers" REFFIELDS="id" PREVIOUS="queuedeventid"/>
</KEYS>
</TABLE>
- <TABLE NAME="grade_outcomes" COMMENT="This table describes the outcomes used in the system. An outcome is a statement tied to a rubric scale from low to high, such as “Not met, Borderline, Met” (stored as 0,1 or 2)" PREVIOUS="events_queue_handlers" NEXT="grade_outcomes_courses">
+ <TABLE NAME="grade_outcomes" COMMENT="This table describes the outcomes used in the system. An outcome is a statement tied to a rubric scale from low to high, such as “Not met, Borderline, Met” (stored as 0,1 or 2)" PREVIOUS="events_queue_handlers" NEXT="grade_categories">
<FIELDS>
<FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" SEQUENCE="true" ENUM="false" COMMENT="id of the table, please edit me" NEXT="courseid"/>
<FIELD NAME="courseid" TYPE="int" LENGTH="10" NOTNULL="false" UNSIGNED="true" SEQUENCE="false" ENUM="false" COMMENT="Mostly these are defined site wide ie NULL" PREVIOUS="id" NEXT="shortname"/>
<KEY NAME="usermodified" TYPE="foreign" FIELDS="usermodified" REFTABLE="user" REFFIELDS="id" PREVIOUS="scaleid"/>
</KEYS>
</TABLE>
- <TABLE NAME="grade_outcomes_courses" COMMENT="stores what outcomes are used in what courses." PREVIOUS="grade_outcomes" NEXT="grade_categories">
- <FIELDS>
- <FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="false" SEQUENCE="true" ENUM="false" COMMENT="id of the table, please edit me" NEXT="courseid"/>
- <FIELD NAME="courseid" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" SEQUENCE="false" ENUM="false" COMMENT="id of the course" PREVIOUS="id" NEXT="outcomeid"/>
- <FIELD NAME="outcomeid" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" SEQUENCE="false" ENUM="false" COMMENT="id of the outcome" PREVIOUS="courseid"/>
- </FIELDS>
- <KEYS>
- <KEY NAME="primary" TYPE="primary" FIELDS="id" COMMENT="primary key of the table, please edit me" NEXT="courseid"/>
- <KEY NAME="courseid" TYPE="foreign" FIELDS="courseid" REFTABLE="course" REFFIELDS="id" PREVIOUS="primary" NEXT="outcomeid"/>
- <KEY NAME="outcomeid" TYPE="foreign" FIELDS="outcomeid" REFTABLE="grade_outcomes" REFFIELDS="id" PREVIOUS="courseid" NEXT="courseid-outcomeid"/>
- <KEY NAME="courseid-outcomeid" TYPE="unique" FIELDS="courseid, outcomeid" PREVIOUS="outcomeid"/>
- </KEYS>
- </TABLE>
- <TABLE NAME="grade_categories" COMMENT="This table keeps information about categories, used for grouping items." PREVIOUS="grade_outcomes_courses" NEXT="grade_items">
+ <TABLE NAME="grade_categories" COMMENT="This table keeps information about categories, used for grouping items." PREVIOUS="grade_outcomes" NEXT="grade_items">
<FIELDS>
<FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" SEQUENCE="true" ENUM="false" COMMENT="id of the table, please edit me" NEXT="courseid"/>
<FIELD NAME="courseid" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" SEQUENCE="false" ENUM="false" COMMENT="The course this grade category is part of" PREVIOUS="id" NEXT="parent"/>
$result = $result && create_table($table);
- /// Define table grade_outcomes_courses to be created
- $table = new XMLDBTable('grade_outcomes_courses');
-
- /// Adding fields to table grade_outcomes_courses
- $table->addFieldInfo('id', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null);
- $table->addFieldInfo('courseid', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, null);
- $table->addFieldInfo('outcomeid', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, null);
-
- /// Adding keys to table grade_outcomes_courses
- $table->addKeyInfo('primary', XMLDB_KEY_PRIMARY, array('id'));
- $table->addKeyInfo('courseid', XMLDB_KEY_FOREIGN, array('courseid'), 'course', array('id'));
- $table->addKeyInfo('outcomeid', XMLDB_KEY_FOREIGN, array('outcomeid'), 'grade_outcomes', array('id'));
-
- /// Launch create table for grade_outcomes_courses
- $result = $result && create_table($table);
-
-
/// Define table grade_categories to be created
$table = new XMLDBTable('grade_categories');
$result = $result && change_field_default($table, $field);
}
- if ($result && $oldversion < 2007072500) {
-
- /// Define key courseid-outcomeid (unique) to be added to grade_outcomes_courses
+ if ($result && $oldversion < 2007073000) {
+ // not used anymore
$table = new XMLDBTable('grade_outcomes_courses');
- $key = new XMLDBKey('courseid-outcomeid');
- $key->setAttributes(XMLDB_KEY_UNIQUE, array('courseid', 'outcomeid'));
-
- /// Launch add key courseid-outcomeid
- $result = $result && add_key($table, $key);
+ if (table_exists($table)) {
+ drop_table($table);
+ }
}
+
/*
/// drop old gradebook tables
if ($result && $oldversion < 2007072209) {
* @return object grade_outcome instance or false if none found.
*/
function fetch($params) {
- if ($outcome = grade_object::fetch_helper('grade_outcomes', 'grade_outcome', $params)) {
- if (!empty($outcome->scaleid)) {
- $outcome->scale = new grade_scale(array('id'=>$outcome->scaleid));
- $outcome->scale->load_items();
- }
- return $outcome;
-
- } else {
- return false;
- }
+ return grade_object::fetch_helper('grade_outcomes', 'grade_outcome', $params);
}
/**
* @static
*
* @param array $params associative arrays varname=>value
- * @param bool $fetch_sitewide_outcomes Whether or not to also fetch all sitewide outcomes (with no courseid)
* @return array array of grade_outcome insatnces or false if none found.
*/
- function fetch_all($params, $fetch_sitewide_outcomes=false) {
- global $CFG;
+ function fetch_all($params) {
+ return grade_object::fetch_all_helper('grade_outcomes', 'grade_outcome', $params);
+ }
- if ($outcomes = grade_object::fetch_all_helper('grade_outcomes', 'grade_outcome', $params)) {
- // Fetch sitewide outcomes if requested
- if ($fetch_sitewide_outcomes) {
- $sitewide_outcomes = array();
- $records = get_records_sql("SELECT * FROM {$CFG->prefix}grade_outcomes WHERE courseid IS NULL");
- foreach ($records as $outcomeid => $outcome) {
- $sitewide_outcomes[$outcomeid] = new grade_outcome($outcome, false);
- }
- $outcomes = array_merge($sitewide_outcomes, $outcomes);
- }
+ /**
+ * Instantiates a grade_scale object whose data is retrieved from the
+ * @return object grade_scale
+ */
+ function load_scale() {
+ if (empty($this->scale->id) or $this->scale->id != $this->scaleid) {
+ $this->scale = grade_scale::fetch(array('id'=>$this->scaleid));
+ $this->scale->load_items();
+ }
+ return $this->scale;
+ }
- foreach ($outcomes as $key=>$value) {
- if (!empty($outcomes[$key]->scaleid)) {
- $outcomes[$key]->scale = new grade_scale(array('id'=>$outcomes[$key]->scaleid));
- $outcomes[$key]->scale->load_items();
- }
- }
- return $outcomes;
+ /**
+ * Static function returning all global outcomes
+ * @return object
+ */
+ function fetch_all_global() {
+ return grade_outcome::fetch_all(array('courseid'=>null));
+ }
- } else {
- return false;
- }
+ /**
+ * Static function returning all local course outcomes
+ * @return object
+ */
+ function fetch_all_local($courseid) {
+ return grade_outcome::fetch_all(array('courseid'=>$courseid));
}
/**
* @return string name
*/
function get_name() {
- return $this->shortname;
+ return format_string($this->fullname);
+ }
+
+ /**
+ * Returns outcome short name.
+ * @return string name
+ */
+ function get_shortname() {
+ return format_string($this->shortname);
+ }
+
+ /**
+ * Checks if outcome can be deleted.
+ * @return boolean
+ */
+ function can_delete() {
+ $count = $this->get_uses_count();
+ return empty($count);
+ }
+
+ /**
+ * Returns the number of places where outcome is used.
+ * @return int
+ */
+ function get_uses_count() {
+ global $CFG;
+
+ $count = 0;
+
+ // count grade items
+ $sql = "SELECT COUNT(id) FROM {$CFG->prefix}grade_items WHERE outcomeid = {$this->id}";
+ if ($scales_uses = count_records_sql($sql)) {
+ $count += $scales_uses;
+ }
+
+ return $count;
}
/**
return grade_object::fetch_all_helper('scale', 'grade_scale', $params);
}
+ /**
+ * Returns the most descriptive field for this object. This is a standard method used
+ * when we do not know the exact type of an object.
+ * @return string name
+ */
+ function get_name() {
+ return format_string($this->name);
+ }
+
/**
* Loads the scale's items into the $scale_items array.
* There are three ways to achieve this:
}
/**
- * Determines if scale can be deleted.
+ * Static function returning all global scales
+ * @return object
+ */
+ function fetch_all_global() {
+ return grade_scale::fetch_all(array('courseid'=>0));
+ }
+
+ /**
+ * Static function returning all local course scales
+ * @return object
+ */
+ function fetch_all_local($courseid) {
+ return grade_scale::fetch_all(array('courseid'=>$courseid));
+ }
+
+ /**
+ * Checks if scale can be deleted.
* @return boolean
*/
function can_delete() {
padding: 5px;
}
+/* outcomes edit */
+
+.grade-edit-outcome .buttons {
+ margin: 20px;
+ text-align:center;
+}
+
+.grade-edit-outcome .buttons .singlebutton {
+ display: inline;
+ padding: 5px;
+}
+
/* gradebook edit tree */
.grade-edit-tree .gradetreebox {
// This is compared against the values stored in the database to determine
// whether upgrades should be performed (see lib/db/*.php)
- $version = 2007072500; // YYYYMMDD = date
+ $version = 2007073000; // YYYYMMDD = date
// XY = increments within a single day
$release = '1.9 dev'; // Human-friendly version name