From: skodak Date: Tue, 31 Jul 2007 10:57:05 +0000 (+0000) Subject: improced assigning of used course outcomes, added return tracking to scale links... X-Git-Url: http://git.mjollnir.org/gw?a=commitdiff_plain;h=0297e313ce452000d56c5a2e5275feea5a7bd0fd;p=moodle.git improced assigning of used course outcomes, added return tracking to scale links in Edit/Outcomes --- diff --git a/grade/edit/outcome/course.php b/grade/edit/outcome/course.php index 0aae40c463..aa1dd58ea4 100644 --- a/grade/edit/outcome/course.php +++ b/grade/edit/outcome/course.php @@ -15,27 +15,101 @@ 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'=>'outcomes', 'courseid'=>$courseid)); + +// first of all fix the state of outcomes_course table +if (!$standardoutcomes = grade_outcome::fetch_all_global()) { + $standardoutcomes = array(); +} +if (!$co_custom = grade_outcome::fetch_all_local($courseid)) { + $co_custom = array(); +} +$co_standard_used = array(); +$co_standard_notused = array(); + +if ($courseused = get_records('grade_outcomes_courses', 'courseid', $courseid, '', 'outcomeid')) { + $courseused = array_keys($courseused); +} else { + $courseused = array(); +} + +// fix wrong entries in outcomes_courses +foreach ($courseused as $oid) { + if (!array_key_exists($oid, $standardoutcomes) and !array_key_exists($oid, $co_custom)) { + delete_records('grade_outcomes_courses', 'outcomeid', $oid, 'courseid', $courseid); + } +} + +// fix local custom outcomes missing in outcomes_course +foreach($co_custom as $oid=>$outcome) { + if (!in_array($oid, $courseused)) { + $courseused[$oid] = $oid; + $obj = new object(); + $obj->courseid = $courseid; + $obj->outcomeid = $oid; + insert_record('grade_outcomes_courses', $obj); + } +} + +// now check all used standard outcomes are in outcomes_course too +if ($realused = get_records_select('grade_items', "courseid=$courseid and outcomeid IS NOT NULL", '', 'outcomeid')) { + $realused = array_keys($realused); + foreach ($realused as $oid) { + if (array_key_exists($oid, $standardoutcomes)) { + + $co_standard_used[$oid] = $standardoutcomes[$oid]; + unset($standardoutcomes[$oid]); + + if (!in_array($oid, $courseused)) { + $courseused[$oid] = $oid; + $obj = new object(); + $obj->courseid = $courseid; + $obj->outcomeid = $oid; + insert_record('grade_outcomes_courses', $obj); + } + } + } +} + +// find all unused standard course outcomes - candidates for removal +foreach ($standardoutcomes as $oid=>$outcome) { + if (in_array($oid, $courseused)) { + $co_standard_notused[$oid] = $standardoutcomes[$oid]; + unset($standardoutcomes[$oid]); + } +} + + /// form processing if ($data = data_submitted()) { - require_capability('moodle/grade:manageoutcomes', get_context_instance(CONTEXT_COURSE, $courseid)); + require_capability('moodle/grade:manageoutcomes', $context); if (!empty($data->add) && !empty($data->addoutcomes)) { /// add all selected to course list foreach ($data->addoutcomes as $add) { - $goc -> courseid = $courseid; - $goc -> outcomeid = $add; + $add = clean_param($add, PARAM_INT); + if (!array_key_exists($add, $standardoutcomes)) { + continue; + } + $goc = new object(); + $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) { + $remove = clean_param($remove, PARAM_INT); + if (!array_key_exists($remove, $co_standard_notused)) { + continue; + } delete_records('grade_outcomes_courses', 'courseid', $courseid, 'outcomeid', $remove); } } + redirect('course.php?id='.$courseid); // we must redirect to get fresh data } -/// return tracking object -$gpr = new grade_plugin_return(array('type'=>'edit', 'plugin'=>'outcomes', 'courseid'=>$courseid)); - $strgrades = get_string('grades'); $pagename = get_string('outcomescourse', 'grades'); @@ -43,23 +117,6 @@ $navlinks = array(array('name'=>$strgrades, 'link'=>$CFG->wwwroot.'/grade/index. array('name'=>$pagename, 'link'=>'', 'type'=>'misc')); $navigation = build_navigation($navlinks); -$outcomes = grade_outcome::fetch_all_global(); -$courseoutcomes = array(); -if ($coutcomes = 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')) { - foreach ($coutcomes as $id=>$coutcome) { - $courseoutcomes[$id] = new grade_outcome(array('id'=>$id)); - } -} - -if (empty($courseoutcomes)) { - $courseoutcomes = grade_outcome::fetch_all(array('courseid'=>$courseid)); -} elseif ($mcourseoutcomes = grade_outcome::fetch_all(array('courseid'=>$courseid))) { - $courseoutcomes += $mcourseoutcomes; -} /// Print header print_header_simple($strgrades.': '.$pagename, ': '.$strgrades, $navigation, '', '', true, '', navmenu($course)); diff --git a/grade/edit/outcome/course_form.html b/grade/edit/outcome/course_form.html index 002a00d94e..15d98bb2f1 100755 --- a/grade/edit/outcome/course_form.html +++ b/grade/edit/outcome/course_form.html @@ -1,22 +1,22 @@ -
+
+ +
- +

@@ -24,13 +24,32 @@


diff --git a/grade/edit/outcome/index.php b/grade/edit/outcome/index.php index 07b6ed323a..5b3e274e15 100644 --- a/grade/edit/outcome/index.php +++ b/grade/edit/outcome/index.php @@ -113,7 +113,9 @@ if ($courseid and $outcomes = grade_outcome::fetch_all_local($courseid)) { $caneditthisscale = has_capability('moodle/course:managescales', $context); } if ($caneditthisscale) { - $line[] = ''.$scale->get_name().''; + $url = $CFG->wwwroot.'/grade/edit/scale/edit.php?courseid='.$courseid.'&id='.$scale->id; + $url = $gpr->add_url_params($url); + $line[] = ''.$scale->get_name().''; } else { $line[] = $scale->get_name(); } diff --git a/lang/en_utf8/grades.php b/lang/en_utf8/grades.php index 16774abf55..ae43b7405c 100644 --- a/lang/en_utf8/grades.php +++ b/lang/en_utf8/grades.php @@ -229,9 +229,14 @@ $string['outcomeitemsedit'] = 'Edit outcome item'; $string['outcomes'] = 'Outcomes'; $string['outcomescustom'] = 'Custom outcomes'; $string['outcomescourse'] = 'Outcomes used in course'; +$string['outcomescoursecustom'] = 'Custom used (no remove)'; +$string['outcomescoursenotused'] = 'Standard not used'; +$string['outcomescourseused'] = 'Standard used (no remove)'; +$string['outcomescourse'] = 'Outcomes used in course'; $string['outcomename'] = 'Outcome name'; $string['outcomereport'] = 'Outcome report'; $string['outcomesstandard'] = 'Standard outcomes'; +$string['outcomesstandardavailable'] = 'Available standard outcomes'; $string['outcomestandard'] = 'Standard outcome'; $string['outcomes'] = 'Outcomes'; $string['overridden'] = 'Overridden';