Example #1
0
/**
 * Update workshop grades in the gradebook
 *
 * Needed by grade_update_mod_grades() in lib/gradelib.php
 *
 * @category grade
 * @param stdClass $workshop instance object with extra cmidnumber and modname property
 * @param int $userid        update grade of specific user only, 0 means all participants
 * @return void
 */
function workshop_update_grades(stdclass $workshop, $userid=0) {
    global $CFG, $DB;
    require_once($CFG->libdir.'/gradelib.php');

    $whereuser = $userid ? ' AND authorid = :userid' : '';
    $params = array('workshopid' => $workshop->id, 'userid' => $userid);
    $sql = 'SELECT authorid, grade, gradeover, gradeoverby, feedbackauthor, feedbackauthorformat, timemodified, timegraded
              FROM {workshop_submissions}
             WHERE workshopid = :workshopid AND example=0' . $whereuser;
    $records = $DB->get_records_sql($sql, $params);
    $submissiongrades = array();
    foreach ($records as $record) {
        $grade = new stdclass();
        $grade->userid = $record->authorid;
        if (!is_null($record->gradeover)) {
            $grade->rawgrade = grade_floatval($workshop->grade * $record->gradeover / 100);
            $grade->usermodified = $record->gradeoverby;
        } else {
            $grade->rawgrade = grade_floatval($workshop->grade * $record->grade / 100);
        }
        $grade->feedback = $record->feedbackauthor;
        $grade->feedbackformat = $record->feedbackauthorformat;
        $grade->datesubmitted = $record->timemodified;
        $grade->dategraded = $record->timegraded;
        $submissiongrades[$record->authorid] = $grade;
    }

    $whereuser = $userid ? ' AND userid = :userid' : '';
    $params = array('workshopid' => $workshop->id, 'userid' => $userid);
    $sql = 'SELECT userid, gradinggrade, timegraded
              FROM {workshop_aggregations}
             WHERE workshopid = :workshopid' . $whereuser;
    $records = $DB->get_records_sql($sql, $params);
    $assessmentgrades = array();
    foreach ($records as $record) {
        $grade = new stdclass();
        $grade->userid = $record->userid;
        $grade->rawgrade = grade_floatval($workshop->gradinggrade * $record->gradinggrade / 100);
        $grade->dategraded = $record->timegraded;
        $assessmentgrades[$record->userid] = $grade;
    }

    workshop_grade_item_update($workshop, $submissiongrades, $assessmentgrades);
}
Example #2
0
/**
 * Update workshop grades in the gradebook
 *
 * Needed by grade_update_mod_grades() in lib/gradelib.php
 *
 * @category grade
 * @param stdClass $workshop instance object with extra cmidnumber and modname property
 * @param int $userid        update grade of specific user only, 0 means all participants
 * @return void
 */
function workshop_update_grades(stdclass $workshop, $userid=0) {
    global $CFG, $DB;
    require_once($CFG->libdir.'/gradelib.php');

    //todo: this ignores userid
    if($workshop->teammode) {
        //this is necessary because we need data like the grouping id
        $course     = $DB->get_record('course', array('id' => $workshop->course), '*', MUST_EXIST);
        $cm         = get_coursemodule_from_instance('workshop', $workshop->id, $course->id, false, MUST_EXIST);
        $whereuser  = '';
        if ($userid) {
            $groups = groups_get_all_groups($cm->course, $userid, $cm->groupingid);
            if(count($groups) ==  1) $group = $groups[0];
            $whereuser = $DB->get_in_or_equal(array_keys(groups_get_members($group,'u.id','')));
        } else {
            $allgroups = groups_get_all_groups($cm->course, 0, $cm->groupingid);
            //todo: on duplicate key error out
            $groupmembers = $DB->get_records_list('groups_members','groupid',array_keys($allgroups),'','userid,groupid');
            //invert this array for use later
            $membergroups = array();
            foreach($groupmembers as $i) {
                $membergroups[$i->groupid][] = $i->userid;
            }
        }
        
        $params = array('workshopid' => $workshop->id, 'userid' => $userid);
        $sql = 'SELECT authorid, grade, gradeover, gradeoverby, feedbackauthor, feedbackauthorformat, timemodified, timegraded
                  FROM {workshop_submissions}
                 WHERE workshopid = :workshopid AND example=0' . $whereuser . ' ORDER BY timemodified DESC';

        $records = $DB->get_records_sql($sql, $params);
        $submissions = array();
        
        //this hinges on ORDER BY timemodified DESC
        if ( isset($allgroups) ) {
            foreach($records as $r) {
                $grp = $groupmembers[$r->authorid]->groupid;
                if (isset($submissions[$grp])) continue;
                $submissions[$grp] = $r;
            }
        }
        
//        print_r($submissions);
        
        
        foreach($submissions as $grp => $s) {
            $members = $membergroups[$grp];
            foreach($members as $m) {
                $grade = new stdclass();
                $grade->userid = $m;
                if (!is_null($s->gradeover)) {
                    $grade->rawgrade = grade_floatval($workshop->grade * $s->gradeover / 100);
                    $grade->usermodified = $s->gradeoverby;
                } else {
                    $grade->rawgrade = grade_floatval($workshop->grade * $s->grade / 100);
                }
                $grade->feedback = $s->feedbackauthor;
                $grade->feedbackformat = $s->feedbackauthorformat;
                $grade->datesubmitted = $s->timemodified;
                $grade->dategraded = $s->timegraded;
                $submissiongrades[$m] = $grade;
            }
        }
    } else {
        $whereuser = $userid ? ' AND authorid = :userid' : '';
        $params = array('workshopid' => $workshop->id, 'userid' => $userid);
        $sql = 'SELECT authorid, grade, gradeover, gradeoverby, feedbackauthor, feedbackauthorformat, timemodified, timegraded
                  FROM {workshop_submissions}
                 WHERE workshopid = :workshopid AND example=0' . $whereuser;
        $records = $DB->get_records_sql($sql, $params);
        $submissiongrades = array();
        foreach ($records as $record) {
            $grade = new stdclass();
            $grade->userid = $record->authorid;
            if (!is_null($record->gradeover)) {
                $grade->rawgrade = grade_floatval($workshop->grade * $record->gradeover / 100);
                $grade->usermodified = $record->gradeoverby;
            } else {
                $grade->rawgrade = grade_floatval($workshop->grade * $record->grade / 100);
            }
            $grade->feedback = $record->feedbackauthor;
            $grade->feedbackformat = $record->feedbackauthorformat;
            $grade->datesubmitted = $record->timemodified;
            $grade->dategraded = $record->timegraded;
            $submissiongrades[$record->authorid] = $grade;
        }
    }

    $whereuser = $userid ? ' AND userid = :userid' : '';
    $params = array('workshopid' => $workshop->id, 'userid' => $userid);
    $sql = 'SELECT userid, gradinggrade, timegraded
              FROM {workshop_aggregations}
             WHERE workshopid = :workshopid' . $whereuser;
    $records = $DB->get_records_sql($sql, $params);
    $assessmentgrades = array();
    foreach ($records as $record) {
        $grade = new stdclass();
        $grade->userid = $record->userid;
        $grade->rawgrade = grade_floatval($workshop->gradinggrade * $record->gradinggrade / 100);
        $grade->dategraded = $record->timegraded;
        $assessmentgrades[$record->userid] = $grade;
    }

    workshop_grade_item_update($workshop, $submissiongrades, $assessmentgrades);
}