/**
 * Processes all the TDRs in the datbase updating skillsoft_au_track and gradebook
 *
 * @param $trace false default, flag to indicate if mtrace messages should be sent
 * @return unknown_type
 */
function skillsoft_process_received_tdrs($trace = false)
{
    global $CFG, $DB;
    if ($trace) {
        mtrace(get_string('skillsoft_odcprocessinginit', 'skillsoft'));
    }
    if ($unmatchedtdrs = $DB->get_records_select('skillsoft_tdr', 'userid=0', null, 'tdrid ASC')) {
        foreach ($unmatchedtdrs as $tdr) {
            $tdr->userid = skillsoft_getusername_from_loginname($tdr->username);
            if ($tdr->userid != 0) {
                $id = update_record('skillsoft_tdr', $tdr);
            }
        }
    }
    //Select all the unprocessed TDR's
    //We do it this way so that if we create a new Moodle SkillSoft activity for an asset we
    //have TDR's for already we can "catch up"
    $sql = "SELECT t.id as id, s.id AS skillsoftid, u.id AS userid, t.tdrid, t.timestamp, t.reset, t.format, t.data, t.context, t.processed ";
    $sql .= "FROM {skillsoft_tdr} t INNER JOIN {user} u ON u.id = t.userid INNER JOIN {skillsoft} s ON t.assetid = s.assetid ";
    $sql .= "WHERE t.processed=0 ";
    $sql .= "ORDER BY s.id,u.id,t.tdrid ";
    $attempt = 1;
    $lasttdr = new stdClass();
    $lasttdr->skillsoftid = NULL;
    $lasttdr->userid = NULL;
    $rs = $DB->get_recordset_sql($sql);
    if ($rs->valid()) {
        foreach ($rs as $processedtdr) {
            if ($trace) {
                mtrace(get_string('skillsoft_odcprocessretrievedtdr', 'skillsoft', $processedtdr));
            }
            if ($processedtdr->skillsoftid != $lasttdr->skillsoftid || $processedtdr->userid != $lasttdr->userid) {
                $conditions = array('id' => $processedtdr->skillsoftid);
                $skillsoft = $DB->get_record('skillsoft', $conditions);
                $conditions2 = array('id' => $processedtdr->userid);
                $user = $DB->get_record('user', $conditions2);
                $handler = new aicchandler($user, $skillsoft, $attempt, $CFG->skillsoft_strictaiccstudentid);
            }
            //Process the TDR as AICC Data
            if ($skillsoft->completable) {
                $handler->processtdr($processedtdr, $attempt);
            } else {
                $handler->processtdr($processedtdr, 1);
            }
            $processedtdr->processed = 1;
            $id = $DB->update_record('skillsoft_tdr', $processedtdr);
            $lasttdr = $processedtdr;
        }
    }
    $rs->close();
    if ($trace) {
        mtrace(get_string('skillsoft_odcprocessingend', 'skillsoft'));
    }
}