Moodle  2.2.1
http://www.collinsharper.com
C:/xampp/htdocs/moodle/grade/edit/tree/category.php
Go to the documentation of this file.
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;
 All Data Structures Namespaces Files Functions Variables Enumerations