|
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 00025 function grade_get_course_grades($courseid, $userid_or_ids=null) { 00026 00027 $grade_item = grade_item::fetch_course_item($courseid); 00028 00029 if ($grade_item->needsupdate) { 00030 grade_regrade_final_grades($courseid); 00031 } 00032 00033 $item = new stdClass(); 00034 $item->scaleid = $grade_item->scaleid; 00035 $item->name = $grade_item->get_name(); 00036 $item->grademin = $grade_item->grademin; 00037 $item->grademax = $grade_item->grademax; 00038 $item->gradepass = $grade_item->gradepass; 00039 $item->locked = $grade_item->is_locked(); 00040 $item->hidden = $grade_item->is_hidden(); 00041 $item->grades = array(); 00042 00043 switch ($grade_item->gradetype) { 00044 case GRADE_TYPE_NONE: 00045 continue; 00046 00047 case GRADE_TYPE_VALUE: 00048 $item->scaleid = 0; 00049 break; 00050 00051 case GRADE_TYPE_TEXT: 00052 $item->scaleid = 0; 00053 $item->grademin = 0; 00054 $item->grademax = 0; 00055 $item->gradepass = 0; 00056 break; 00057 } 00058 00059 if (empty($userid_or_ids)) { 00060 $userids = array(); 00061 00062 } else if (is_array($userid_or_ids)) { 00063 $userids = $userid_or_ids; 00064 00065 } else { 00066 $userids = array($userid_or_ids); 00067 } 00068 00069 if ($userids) { 00070 $grade_grades = grade_grade::fetch_users_grades($grade_item, $userids, true); 00071 foreach ($userids as $userid) { 00072 $grade_grades[$userid]->grade_item =& $grade_item; 00073 00074 $grade = new stdClass(); 00075 $grade->grade = $grade_grades[$userid]->finalgrade; 00076 $grade->locked = $grade_grades[$userid]->is_locked(); 00077 $grade->hidden = $grade_grades[$userid]->is_hidden(); 00078 $grade->overridden = $grade_grades[$userid]->overridden; 00079 $grade->feedback = $grade_grades[$userid]->feedback; 00080 $grade->feedbackformat = $grade_grades[$userid]->feedbackformat; 00081 $grade->usermodified = $grade_grades[$userid]->usermodified; 00082 $grade->dategraded = $grade_grades[$userid]->get_dategraded(); 00083 00084 // create text representation of grade 00085 if ($grade_item->needsupdate) { 00086 $grade->grade = false; 00087 $grade->str_grade = get_string('error'); 00088 $grade->str_long_grade = $grade->str_grade; 00089 00090 } else if (is_null($grade->grade)) { 00091 $grade->str_grade = '-'; 00092 $grade->str_long_grade = $grade->str_grade; 00093 00094 } else { 00095 $grade->str_grade = grade_format_gradevalue($grade->grade, $grade_item); 00096 if ($grade_item->gradetype == GRADE_TYPE_SCALE or $grade_item->get_displaytype() != GRADE_DISPLAY_TYPE_REAL) { 00097 $grade->str_long_grade = $grade->str_grade; 00098 } else { 00099 $a = new stdClass(); 00100 $a->grade = $grade->str_grade; 00101 $a->max = grade_format_gradevalue($grade_item->grademax, $grade_item); 00102 $grade->str_long_grade = get_string('gradelong', 'grades', $a); 00103 } 00104 } 00105 00106 // create html representation of feedback 00107 if (is_null($grade->feedback)) { 00108 $grade->str_feedback = ''; 00109 } else { 00110 $grade->str_feedback = format_text($grade->feedback, $grade->feedbackformat); 00111 } 00112 00113 $item->grades[$userid] = $grade; 00114 } 00115 } 00116 00117 return $item; 00118 } 00119 00127 function grade_get_course_grade($userid, $courseid_or_ids=null) { 00128 00129 if (!is_array($courseid_or_ids)) { 00130 if (empty($courseid_or_ids)) { 00131 if (!$courses = enrol_get_users_courses($userid)) { 00132 return false; 00133 } 00134 $courseids = array_keys($courses); 00135 return grade_get_course_grade($userid, $courseids); 00136 } 00137 if (!is_numeric($courseid_or_ids)) { 00138 return false; 00139 } 00140 if (!$grades = grade_get_course_grade($userid, array($courseid_or_ids))) { 00141 return false; 00142 } else { 00143 // only one grade - not array 00144 $grade = reset($grades); 00145 return $grade; 00146 } 00147 } 00148 00149 foreach ($courseid_or_ids as $courseid) { 00150 $grade_item = grade_item::fetch_course_item($courseid); 00151 $course_items[$grade_item->courseid] = $grade_item; 00152 } 00153 00154 $grades = array(); 00155 foreach ($course_items as $grade_item) { 00156 if ($grade_item->needsupdate) { 00157 grade_regrade_final_grades($courseid); 00158 } 00159 00160 $item = new stdClass(); 00161 $item->scaleid = $grade_item->scaleid; 00162 $item->name = $grade_item->get_name(); 00163 $item->grademin = $grade_item->grademin; 00164 $item->grademax = $grade_item->grademax; 00165 $item->gradepass = $grade_item->gradepass; 00166 $item->locked = $grade_item->is_locked(); 00167 $item->hidden = $grade_item->is_hidden(); 00168 00169 switch ($grade_item->gradetype) { 00170 case GRADE_TYPE_NONE: 00171 continue; 00172 00173 case GRADE_TYPE_VALUE: 00174 $item->scaleid = 0; 00175 break; 00176 00177 case GRADE_TYPE_TEXT: 00178 $item->scaleid = 0; 00179 $item->grademin = 0; 00180 $item->grademax = 0; 00181 $item->gradepass = 0; 00182 break; 00183 } 00184 $grade_grade = new grade_grade(array('userid'=>$userid, 'itemid'=>$grade_item->id)); 00185 $grade_grade->grade_item =& $grade_item; 00186 00187 $grade = new stdClass(); 00188 $grade->grade = $grade_grade->finalgrade; 00189 $grade->locked = $grade_grade->is_locked(); 00190 $grade->hidden = $grade_grade->is_hidden(); 00191 $grade->overridden = $grade_grade->overridden; 00192 $grade->feedback = $grade_grade->feedback; 00193 $grade->feedbackformat = $grade_grade->feedbackformat; 00194 $grade->usermodified = $grade_grade->usermodified; 00195 $grade->dategraded = $grade_grade->get_dategraded(); 00196 $grade->item = $item; 00197 00198 // create text representation of grade 00199 if ($grade_item->needsupdate) { 00200 $grade->grade = false; 00201 $grade->str_grade = get_string('error'); 00202 $grade->str_long_grade = $grade->str_grade; 00203 00204 } else if (is_null($grade->grade)) { 00205 $grade->str_grade = '-'; 00206 $grade->str_long_grade = $grade->str_grade; 00207 00208 } else { 00209 $grade->str_grade = grade_format_gradevalue($grade->grade, $grade_item); 00210 if ($grade_item->gradetype == GRADE_TYPE_SCALE or $grade_item->get_displaytype() != GRADE_DISPLAY_TYPE_REAL) { 00211 $grade->str_long_grade = $grade->str_grade; 00212 } else { 00213 $a = new stdClass(); 00214 $a->grade = $grade->str_grade; 00215 $a->max = grade_format_gradevalue($grade_item->grademax, $grade_item); 00216 $grade->str_long_grade = get_string('gradelong', 'grades', $a); 00217 } 00218 } 00219 00220 // create html representation of feedback 00221 if (is_null($grade->feedback)) { 00222 $grade->str_feedback = ''; 00223 } else { 00224 $grade->str_feedback = format_text($grade->feedback, $grade->feedbackformat); 00225 } 00226 00227 $grades[$grade_item->courseid] = $grade; 00228 } 00229 00230 return $grades; 00231 } 00232 00239 function grade_get_grade_items_for_activity($cm, $only_main_item=false) { 00240 global $CFG, $DB; 00241 00242 if (!isset($cm->modname)) { 00243 $params = array($cm->id); 00244 $cm = $DB->get_record_sql("SELECT cm.*, m.name, md.name as modname 00245 FROM {course_modules} cm, 00246 {modules} md, 00247 WHERE cm.id = ? AND md.id = cm.module", $params); 00248 } 00249 00250 00251 if (empty($cm) or empty($cm->instance) or empty($cm->course)) { 00252 debugging("Incorrect cm parameter in grade_get_grade_items_for_activity()!"); 00253 return false; 00254 } 00255 00256 if ($only_main_item) { 00257 return grade_item::fetch_all(array('itemtype'=>'mod', 'itemmodule'=>$cm->modname, 'iteminstance'=>$cm->instance, 'courseid'=>$cm->course, 'itemnumber'=>0)); 00258 } else { 00259 return grade_item::fetch_all(array('itemtype'=>'mod', 'itemmodule'=>$cm->modname, 'iteminstance'=>$cm->instance, 'courseid'=>$cm->course)); 00260 } 00261 } 00262 00270 function grade_is_user_graded_in_activity($cm, $userid) { 00271 00272 $grade_items = grade_get_grade_items_for_activity($cm, true); 00273 if (empty($grade_items)) { 00274 return false; 00275 } 00276 00277 $grade_item = reset($grade_items); 00278 00279 if ($grade_item->gradetype == GRADE_TYPE_NONE) { 00280 return false; 00281 } 00282 00283 if ($grade_item->needsupdate) { 00284 // activity items should never fail to regrade 00285 grade_regrade_final_grades($grade_item->courseid); 00286 } 00287 00288 if (!$grade = $grade_item->get_final($userid)) { 00289 return false; 00290 } 00291 00292 if (is_null($grade->finalgrade)) { 00293 return false; 00294 } 00295 00296 return true; 00297 } 00298 00306 function grade_get_gradable_activities($courseid, $modulename='') { 00307 global $CFG, $DB; 00308 00309 if (empty($modulename)) { 00310 if (!$modules = $DB->get_records('modules', array('visible' => '1'))) { 00311 return false; 00312 } 00313 $result = array(); 00314 foreach ($modules as $module) { 00315 if ($cms = grade_get_gradable_activities($courseid, $module->name)) { 00316 $result = $result + $cms; 00317 } 00318 } 00319 if (empty($result)) { 00320 return false; 00321 } else { 00322 return $result; 00323 } 00324 } 00325 00326 $params = array($courseid, $modulename, GRADE_TYPE_NONE, $modulename); 00327 $sql = "SELECT cm.*, m.name, md.name as modname 00328 FROM {grade_items} gi, {course_modules} cm, {modules} md, {$modulename} m 00329 WHERE gi.courseid = ? AND 00330 gi.itemtype = 'mod' AND 00331 gi.itemmodule = ? AND 00332 gi.itemnumber = 0 AND 00333 gi.gradetype != ? AND 00334 gi.iteminstance = cm.instance AND 00335 cm.instance = m.id AND 00336 md.name = ? AND 00337 md.id = cm.module"; 00338 00339 return $DB->get_records_sql($sql, $params); 00340 } 00341