Exemple #1
0
/**
 * given an import code, commits all entries in buffer tables
 * (grade_import_value and grade_import_newitem)
 * If this function is called, we assume that all data collected
 * up to this point is fine and we can go ahead and commit
 * @param int courseid - id of the course
 * @param string importcode - import batch identifier
 * @param feedback print feedback and continue button
 * @return bool success
 */
function grade_import_commit($courseid, $importcode, $importfeedback = true, $verbose = true)
{
    global $CFG, $USER, $DB;
    $commitstart = time();
    // start time in case we need to roll back
    $newitemids = array();
    // array to hold new grade_item ids from grade_import_newitem table, mapping array
    /// first select distinct new grade_items with this batch
    $params = array($importcode, $USER->id);
    if ($newitems = $DB->get_records_sql("SELECT *\n                                           FROM {grade_import_newitem}\n                                          WHERE importcode = ? AND importer=?", $params)) {
        // instances of the new grade_items created, cached
        // in case grade_update fails, so that we can remove them
        $instances = array();
        $failed = false;
        foreach ($newitems as $newitem) {
            // get all grades with this item
            if ($grades = $DB->get_records('grade_import_values', array('newgradeitem' => $newitem->id))) {
                /// create a new grade item for this - must use false as second param!
                /// TODO: we need some bounds here too
                $gradeitem = new grade_item(array('courseid' => $courseid, 'itemtype' => 'manual', 'itemname' => $newitem->itemname), false);
                $gradeitem->insert('import');
                $instances[] = $gradeitem;
                // insert each individual grade to this new grade item
                foreach ($grades as $grade) {
                    if (!$gradeitem->update_final_grade($grade->userid, $grade->finalgrade, 'import', $grade->feedback, FORMAT_MOODLE)) {
                        $failed = true;
                        break 2;
                    }
                }
            }
        }
        if ($failed) {
            foreach ($instances as $instance) {
                $gradeitem->delete('import');
            }
            import_cleanup($importcode);
            return false;
        }
    }
    /// then find all existing items
    if ($gradeitems = $DB->get_records_sql("SELECT DISTINCT (itemid)\n                                             FROM {grade_import_values}\n                                            WHERE importcode = ? AND importer=? AND itemid > 0", array($importcode, $USER->id))) {
        $modifieditems = array();
        foreach ($gradeitems as $itemid => $notused) {
            if (!($gradeitem = new grade_item(array('id' => $itemid)))) {
                // not supposed to happen, but just in case
                import_cleanup($importcode);
                return false;
            }
            // get all grades with this item
            if ($grades = $DB->get_records('grade_import_values', array('itemid' => $itemid))) {
                // make the grades array for update_grade
                foreach ($grades as $grade) {
                    if (!$importfeedback) {
                        $grade->feedback = false;
                        // ignore it
                    }
                    if (!$gradeitem->update_final_grade($grade->userid, $grade->finalgrade, 'import', $grade->feedback)) {
                        $failed = 1;
                        break 2;
                    }
                }
                //$itemdetails -> idnumber = $gradeitem->idnumber;
                $modifieditems[] = $itemid;
            }
            if (!empty($failed)) {
                import_cleanup($importcode);
                return false;
            }
        }
    }
    if ($verbose) {
        notify(get_string('importsuccess', 'grades'), 'notifysuccess');
        $unenrolledusers = get_unenrolled_users_in_import($importcode, $courseid);
        if ($unenrolledusers) {
            $list = "<ul>\n";
            foreach ($unenrolledusers as $u) {
                $u->fullname = fullname($u);
                $list .= '<li>' . get_string('usergrade', 'grades', $u) . '</li>';
            }
            $list .= "</ul>\n";
            notify(get_string('unenrolledusersinimport', 'grades', $list), 'notifysuccess');
        }
        print_continue($CFG->wwwroot . '/grade/index.php?id=' . $courseid);
    }
    // clean up
    import_cleanup($importcode);
    return true;
}
function blended_grade_student($memberid, grade_item $item, $rawgrade, $newfinalgrade)
{
    $array_members_grades = array();
    $array_members_grades['userid'] = $memberid;
    $array_members_grades['rawgrade'] = $rawgrade == null ? null : (string) $rawgrade;
    $status = grade_update('mod/blended', $item->courseid, $item->itemtype, $item->itemmodule, $item->iteminstance, $item->itemnumber, $array_members_grades);
    $item->update_final_grade($memberid, $newfinalgrade == null ? null : (string) $newfinalgrade, 'mod/blended');
}