|
Moodle
2.2.1
http://www.collinsharper.com
|
00001 <?php 00002 00003 // This file is part of Moodle - http://moodle.org/ 00004 // 00005 // Moodle is free software: you can redistribute it and/or modify 00006 // it under the terms of the GNU General Public License as published by 00007 // the Free Software Foundation, either version 3 of the License, or 00008 // (at your option) any later version. 00009 // 00010 // Moodle is distributed in the hope that it will be useful, 00011 // but WITHOUT ANY WARRANTY; without even the implied warranty of 00012 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00013 // GNU General Public License for more details. 00014 // 00015 // You should have received a copy of the GNU General Public License 00016 // along with Moodle. If not, see <http://www.gnu.org/licenses/>. 00017 00018 require_once '../../../config.php'; 00019 require_once $CFG->dirroot.'/grade/lib.php'; 00020 require_once $CFG->dirroot.'/grade/report/lib.php'; 00021 require_once 'category_form.php'; 00022 00023 $courseid = required_param('courseid', PARAM_INT); 00024 $id = optional_param('id', 0, PARAM_INT); // grade_category->id 00025 00026 $url = new moodle_url('/grade/edit/tree/category.php', array('courseid'=>$courseid)); 00027 if ($id !== 0) { 00028 $url->param('id', $id); 00029 } 00030 $PAGE->set_url($url); 00031 $PAGE->set_pagelayout('admin'); 00032 00033 if (!$course = $DB->get_record('course', array('id' => $courseid))) { 00034 print_error('nocourseid'); 00035 } 00036 00037 require_login($course); 00038 $context = get_context_instance(CONTEXT_COURSE, $course->id); 00039 require_capability('moodle/grade:manage', $context); 00040 00041 // default return url 00042 $gpr = new grade_plugin_return(); 00043 $returnurl = $gpr->get_return_url('index.php?id='.$course->id); 00044 00045 00046 $heading = get_string('categoryedit', 'grades'); 00047 00048 if ($id) { 00049 if (!$grade_category = grade_category::fetch(array('id'=>$id, 'courseid'=>$course->id))) { 00050 print_error('invalidcategory'); 00051 } 00052 $grade_category->apply_forced_settings(); 00053 $category = $grade_category->get_record_data(); 00054 // set parent 00055 $category->parentcategory = $grade_category->parent; 00056 $grade_item = $grade_category->load_grade_item(); 00057 // nomalize coef values if needed 00058 $parent_category = $grade_category->get_parent_category(); 00059 00060 foreach ($grade_item->get_record_data() as $key => $value) { 00061 $category->{"grade_item_$key"} = $value; 00062 } 00063 00064 $decimalpoints = $grade_item->get_decimals(); 00065 00066 $category->grade_item_grademax = format_float($category->grade_item_grademax, $decimalpoints); 00067 $category->grade_item_grademin = format_float($category->grade_item_grademin, $decimalpoints); 00068 $category->grade_item_gradepass = format_float($category->grade_item_gradepass, $decimalpoints); 00069 $category->grade_item_multfactor = format_float($category->grade_item_multfactor, 4); 00070 $category->grade_item_plusfactor = format_float($category->grade_item_plusfactor, 4); 00071 00072 if (!$parent_category) { 00073 // keep as is 00074 } else if ($parent_category->aggregation == GRADE_AGGREGATE_SUM or $parent_category->aggregation == GRADE_AGGREGATE_WEIGHTED_MEAN2) { 00075 $category->grade_item_aggregationcoef = $category->grade_item_aggregationcoef == 0 ? 0 : 1; 00076 } else { 00077 $category->grade_item_aggregationcoef = format_float($category->grade_item_aggregationcoef, 4); 00078 } 00079 00080 } else { 00081 $heading = get_string('newcategory', 'grades'); 00082 $grade_category = new grade_category(array('courseid'=>$courseid), false); 00083 $grade_category->apply_default_settings(); 00084 $grade_category->apply_forced_settings(); 00085 00086 $category = $grade_category->get_record_data(); 00087 00088 $grade_item = new grade_item(array('courseid'=>$courseid, 'itemtype'=>'manual'), false); 00089 foreach ($grade_item->get_record_data() as $key => $value) { 00090 $category->{"grade_item_$key"} = $value; 00091 } 00092 } 00093 00094 $mform = new edit_category_form(null, array('current'=>$category, 'gpr'=>$gpr)); 00095 00096 if ($mform->is_cancelled()) { 00097 redirect($returnurl); 00098 00099 } else if ($data = $mform->get_data(false)) { 00100 // If no fullname is entered for a course category, put ? in the DB 00101 if (!isset($data->fullname) || $data->fullname == '') { 00102 $data->fullname = '?'; 00103 } 00104 00105 if (!isset($data->aggregateonlygraded)) { 00106 $data->aggregateonlygraded = 0; 00107 } 00108 if (!isset($data->aggregateoutcomes)) { 00109 $data->aggregateoutcomes = 0; 00110 } 00111 grade_category::set_properties($grade_category, $data); 00112 00114 if (empty($grade_category->id)) { 00115 $grade_category->insert(); 00116 00117 } else { 00118 $grade_category->update(); 00119 } 00120 00122 // grade item data saved with prefix "grade_item_" 00123 $itemdata = new stdClass(); 00124 foreach ($data as $k => $v) { 00125 if (preg_match('/grade_item_(.*)/', $k, $matches)) { 00126 $itemdata->{$matches[1]} = $v; 00127 } 00128 } 00129 00130 if (!isset($itemdata->aggregationcoef)) { 00131 $itemdata->aggregationcoef = 0; 00132 } 00133 00134 if (!isset($itemdata->gradepass) || $itemdata->gradepass == '') { 00135 $itemdata->gradepass = 0; 00136 } 00137 00138 if (!isset($itemdata->grademax) || $itemdata->grademax == '') { 00139 $itemdata->grademax = 0; 00140 } 00141 00142 if (!isset($itemdata->grademin) || $itemdata->grademin == '') { 00143 $itemdata->grademin = 0; 00144 } 00145 00146 $hidden = empty($itemdata->hidden) ? 0: $itemdata->hidden; 00147 $hiddenuntil = empty($itemdata->hiddenuntil) ? 0: $itemdata->hiddenuntil; 00148 unset($itemdata->hidden); 00149 unset($itemdata->hiddenuntil); 00150 00151 $locked = empty($itemdata->locked) ? 0: $itemdata->locked; 00152 $locktime = empty($itemdata->locktime) ? 0: $itemdata->locktime; 00153 unset($itemdata->locked); 00154 unset($itemdata->locktime); 00155 00156 $convert = array('grademax', 'grademin', 'gradepass', 'multfactor', 'plusfactor', 'aggregationcoef'); 00157 foreach ($convert as $param) { 00158 if (property_exists($itemdata, $param)) { 00159 $itemdata->$param = unformat_float($itemdata->$param); 00160 } 00161 } 00162 00163 // When creating a new category, a number of grade item fields are filled out automatically, and are required. 00164 // If the user leaves these fields empty during creation of a category, we let the default values take effect 00165 // Otherwise, we let the user-entered grade item values take effect 00166 $grade_item = $grade_category->load_grade_item(); 00167 $grade_item_copy = fullclone($grade_item); 00168 grade_item::set_properties($grade_item, $itemdata); 00169 00170 if (empty($grade_item->id)) { 00171 $grade_item->id = $grade_item_copy->id; 00172 } 00173 if (empty($grade_item->grademax) && $grade_item->grademax != '0') { 00174 $grade_item->grademax = $grade_item_copy->grademax; 00175 } 00176 if (empty($grade_item->grademin) && $grade_item->grademin != '0') { 00177 $grade_item->grademin = $grade_item_copy->grademin; 00178 } 00179 if (empty($grade_item->gradepass) && $grade_item->gradepass != '0') { 00180 $grade_item->gradepass = $grade_item_copy->gradepass; 00181 } 00182 if (empty($grade_item->aggregationcoef) && $grade_item->aggregationcoef != '0') { 00183 $grade_item->aggregationcoef = $grade_item_copy->aggregationcoef; 00184 } 00185 00186 // Handle null decimals value - must be done before update! 00187 if (!property_exists($itemdata, 'decimals') or $itemdata->decimals < 0) { 00188 $grade_item->decimals = null; 00189 } 00190 00191 $grade_item->outcomeid = null; 00192 00193 // update hiding flag 00194 if ($hiddenuntil) { 00195 $grade_item->set_hidden($hiddenuntil, false); 00196 } else { 00197 $grade_item->set_hidden($hidden, false); 00198 } 00199 00200 $grade_item->set_locktime($locktime); // locktime first - it might be removed when unlocking 00201 $grade_item->set_locked($locked, false, true); 00202 00203 $grade_item->update(); // We don't need to insert it, it's already created when the category is created 00204 00205 // set parent if needed 00206 if (isset($data->parentcategory)) { 00207 $grade_category->set_parent($data->parentcategory, 'gradebook'); 00208 } 00209 00210 redirect($returnurl); 00211 } 00212 00213 $return = false; 00214 $buttons = false; 00215 $shownavigation = false; 00216 print_grade_page_head($courseid, 'edittree', null, $heading, $return, $buttons, $shownavigation); 00217 00218 $mform->display(); 00219 00220 echo $OUTPUT->footer(); 00221 die;