+
+
|
-
-
|
+
+
diff --git a/grade/edit/favoutcomes/index.php b/grade/edit/favoutcomes/index.php
new file mode 100644
index 00000000000..c367900829a
--- /dev/null
+++ b/grade/edit/favoutcomes/index.php
@@ -0,0 +1,83 @@
+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);
+
+
+?>
diff --git a/grade/edit/outcome/edit.php b/grade/edit/outcome/edit.php
new file mode 100644
index 00000000000..d24c5132958
--- /dev/null
+++ b/grade/edit/outcome/edit.php
@@ -0,0 +1,123 @@
+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();
+}
+
+?>
diff --git a/grade/edit/outcome/edit_form.php b/grade/edit/outcome/edit_form.php
new file mode 100644
index 00000000000..cd08325661b
--- /dev/null
+++ b/grade/edit/outcome/edit_form.php
@@ -0,0 +1,132 @@
+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;
+ }
+ }
+
+
+}
+
+?>
diff --git a/grade/edit/outcome/index.php b/grade/edit/outcome/index.php
index 30404ce4c54..526781ea3ab 100644
--- a/grade/edit/outcome/index.php
+++ b/grade/edit/outcome/index.php
@@ -1 +1,163 @@
-TODO
\ No newline at end of file
+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 .= "id\"> pixpath/t/edit.gif\" class=\"iconsmall\" alt=\"$stredit\" /> ";
+ if (empty($outcomes_uses)) {
+ $buttons .= "id&action=delete&sesskey=$USER->sesskey\"> pixpath/t/delete.gif\" class=\"iconsmall\" alt=\"$strdelete\" /> ";
+ }
+ $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 .= "id\"> pixpath/t/edit.gif\" class=\"iconsmall\" alt=\"$stredit\" /> ";
+ }
+ if (empty($outcomes_uses) and has_capability('moodle/grade:manage', get_context_instance(CONTEXT_SYSTEM))) {
+ $buttons .= "id&action=delete&sesskey=$USER->sesskey\"> pixpath/t/delete.gif\" class=\"iconsmall\" alt=\"$strdelete\" /> ";
+ }
+ $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 '';
+print_single_button('edit.php', array('courseid'=>$courseid), $srtcreatenewoutcome);
+echo ' ';
+
+if ($courseid) {
+ print_footer($course);
+} else {
+ admin_externalpage_print_footer();
+}
+
+
+?>
diff --git a/grade/edit/scale/edit.php b/grade/edit/scale/edit.php
index 38b08bcd9fd..ba1d2d4d4d3 100644
--- a/grade/edit/scale/edit.php
+++ b/grade/edit/scale/edit.php
@@ -5,39 +5,66 @@ require_once $CFG->dirroot.'/grade/lib.php';
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);
+
+// 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);
+ }
+
+} 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 {
+ /// 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='.$course->id);
+$returnurl = $gpr->get_return_url('index.php?id='.$courseid);
$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)) {
- 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 {
- $mform->set_data(array('courseid'=>$courseid, 'custom'=>1));
-}
+$mform->set_data($scale_rec);
if ($mform->is_cancelled()) {
redirect($returnurl);
@@ -48,17 +75,17 @@ if ($mform->is_cancelled()) {
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();
}
@@ -70,15 +97,24 @@ $strgrades = get_string('grades');
$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'));
+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));
-$navigation = build_navigation($nav);
-
-
-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();
+}
+
+?>
diff --git a/grade/edit/scale/edit_form.php b/grade/edit/scale/edit_form.php
index 93b78dc8da5..20eed49bf27 100644
--- a/grade/edit/scale/edit_form.php
+++ b/grade/edit/scale/edit_form.php
@@ -14,7 +14,7 @@ class edit_scale_form extends moodleform {
$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'));
@@ -48,21 +48,33 @@ class edit_scale_form extends moodleform {
$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');
}
}
}
diff --git a/grade/edit/scale/index.php b/grade/edit/scale/index.php
index bf2e4553a76..32d652cf114 100644
--- a/grade/edit/scale/index.php
+++ b/grade/edit/scale/index.php
@@ -5,16 +5,21 @@ require_once '../../../config.php';
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));
@@ -29,13 +34,13 @@ $navigation = build_navigation($navlinks);
$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':
@@ -49,6 +54,8 @@ switch ($action) {
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()) {
@@ -60,16 +67,46 @@ switch ($action) {
break;
}
-/// Print header
-print_header_simple($strgrades.': '.$pagename, ': '.$strgrades, $navigation,
- '', '', true, '', navmenu($course));
+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');
-/// Print the plugin selector at the top
-print_grade_plugin_selector($courseid, 'edit', 'scale');
+} else {
+ admin_externalpage_print_header();
+}
+if ($courseid and $scales = grade_scale::fetch_all_local($courseid)) {
+ print_heading($strcustomscales);
+ $data = array();
+ foreach($scales as $scale) {
+ $line = array();
+ $line[] = format_string($scale->name).''.str_replace(",",", ",$scale->scale).' ';
-print_heading($strstandardscale);
-if ($scales = grade_scale::fetch_all(array('courseid'=>0))) {
+ $scales_uses = $scale->get_uses_count();
+ $line[] = $scales_uses;
+
+ $buttons = "";
+ $buttons .= "id\"> pixpath/t/edit.gif\" class=\"iconsmall\" alt=\"$stredit\" /> ";
+ if (empty($scales_uses)) {
+ $buttons .= "id&action=delete&sesskey=$USER->sesskey\"> pixpath/t/delete.gif\" class=\"iconsmall\" alt=\"$strdelete\" /> ";
+ }
+ $line[] = $buttons;
+ $data[] = $line;
+ }
+ $table->head = array($strscale, $stractivities, $stredit);
+ $table->size = array('70%', '20%', '10%');
+ $table->align = array('left', 'center', 'center');
+ $table->width = '90%';
+ $table->data = $data;
+ print_table($table);
+}
+
+if ($scales = grade_scale::fetch_all_global()) {
+ print_heading($strstandardscale);
$data = array();
foreach($scales as $scale) {
$line = array();
@@ -80,45 +117,17 @@ if ($scales = grade_scale::fetch_all(array('courseid'=>0))) {
$buttons = "";
if (has_capability('moodle/course:managescales', get_context_instance(CONTEXT_SYSTEM))) {
- $buttons .= "id&id=$scale->id\"> id\"> pixpath/t/edit.gif\" class=\"iconsmall\" alt=\"$stredit\" /> ";
}
if (empty($scales_uses) and has_capability('moodle/course:managescales', get_context_instance(CONTEXT_SYSTEM))) {
- $buttons .= "id&scaleid=$scale->id&action=delete&sesskey=$USER->sesskey\"> id&action=delete&sesskey=$USER->sesskey\"> pixpath/t/delete.gif\" class=\"iconsmall\" alt=\"$strdelete\" /> ";
}
$line[] = $buttons;
$data[] = $line;
}
- $table->head = array($strscale, $stractivities, $stroptions);
- $table->size = array('70%', '20%', '10%');
- $table->align = array('left', 'center', 'center');
- $table->width = '90%';
- $table->data = $data;
- print_table($table);
-}
-
-print_heading($strcustomscales);
-if ($scales = grade_scale::fetch_all(array('courseid'=>$courseid))) {
- $data = array();
- foreach($scales as $scale) {
- $line = array();
- $line[] = format_string($scale->name).''.str_replace(",",", ",$scale->scale).' ';
-
- $scales_uses = $scale->get_uses_count();
- $line[] = $scales_uses;
-
- $buttons = "";
- $buttons .= "id&id=$scale->id\"> pixpath/t/edit.gif\" class=\"iconsmall\" alt=\"$stredit\" /> ";
- if (empty($scales_uses)) {
- $buttons .= "id&scaleid=$scale->id&action=delete&sesskey=$USER->sesskey\"> pixpath/t/delete.gif\" class=\"iconsmall\" alt=\"$strdelete\" /> ";
- }
- $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%';
@@ -130,7 +139,11 @@ echo '';
print_single_button('edit.php', array('courseid'=>$courseid), $srtcreatenewscale);
echo ' ';
-print_footer($course);
+if ($courseid) {
+ print_footer($course);
+} else {
+ admin_externalpage_print_footer();
+}
?>
diff --git a/grade/lib.php b/grade/lib.php
index 5ca2cfb583d..b5da2e41294 100644
--- a/grade/lib.php
+++ b/grade/lib.php
@@ -113,13 +113,21 @@ function print_grade_plugin_selector($courseid, $active_type, $active_plugin, $r
$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
diff --git a/grade/report/grader/lib.php b/grade/report/grader/lib.php
index 8626d914c79..264ac4da5d1 100644
--- a/grade/report/grader/lib.php
+++ b/grade/report/grader/lib.php
@@ -743,7 +743,7 @@ class grade_report_grader extends grade_report {
$groupwheresql = null;
}
- if ($meanselection == GRADE_AGGREGATE_MEAN_GRADED) {
+ if ($meanselection == GRADE_AGGREGATE_MEAN_GRADED) {
$totalcount = 0;
} else {
$totalcount = $this->get_numusers();
@@ -768,7 +768,7 @@ class grade_report_grader extends grade_report {
$sum_array[$itemid] = $csum->sum;
if ($totalcount) {
$count_array[$itemid] = $totalcount;
- } else {
+ } else {
$count_array[$itemid] = $csum->count;
}
}
diff --git a/grade/report/outcomes/course.php b/grade/report/outcomes/course.php
deleted file mode 100755
index 4700096e06a..00000000000
--- a/grade/report/outcomes/course.php
+++ /dev/null
@@ -1,178 +0,0 @@
-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 '';
- 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[] = '
- '; // 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 ''.get_string('addoutcome', 'gradereport_outcomes').'';
- }
- 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;
-}
-?>
diff --git a/grade/report/outcomes/db/access.php b/grade/report/outcomes/db/access.php
index 3ad46d7d48a..2a6ac0d7e23 100644
--- a/grade/report/outcomes/db/access.php
+++ b/grade/report/outcomes/db/access.php
@@ -11,16 +11,6 @@ $gradereport_outcomes_capabilities = array(
'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
- )
)
);
diff --git a/grade/report/outcomes/index.php b/grade/report/outcomes/index.php
index 29e2041400f..0eb325ea0a7 100644
--- a/grade/report/outcomes/index.php
+++ b/grade/report/outcomes/index.php
@@ -4,16 +4,17 @@ include_once('../../../config.php');
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');
@@ -26,43 +27,27 @@ $navigation = build_navigation($navlinks);
/// 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);
@@ -113,8 +98,14 @@ foreach ($report_info as $outcomeid => $outcomedata) {
$items_html .= " |