Moodle  2.2.1
http://www.collinsharper.com
C:/xampp/htdocs/moodle/grade/querylib.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 
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 
 All Data Structures Namespaces Files Functions Variables Enumerations