backup_unique_code, $mod->modtype, $mod->id); if ($data) { //Now get completed xmlized object $info = $data->info; if ($DB->count_records('attforblock', array('course'=> $restore->course_id))) { return false; } //Now, build the attforblock record structure $attforblock->course = $restore->course_id; // $attforblock->teacher = backup_todb($info['MOD']['#']['TEACHER']['0']['#']); $attforblock->name = backup_todb($info['MOD']['#']['NAME']['0']['#']); if (isset($info['MOD']['#']['GRADE'])) { $attforblock->grade = backup_todb($info['MOD']['#']['GRADE']['0']['#']); } else { $attforblock->grade = 100; } //The structure is equal to the db, so insert the attforblock $newid = $DB->insert_record ('attforblock', $attforblock); if ($newid) { //We have the newid, update backup_ids backup_putid($restore->backup_unique_code, $mod->modtype, $mod->id, $newid); attforblock_restore_attendance_statuses ($mod->id, $newid, $info, $restore); attforblock_restore_attendance_sessions ($mod->id, $newid, $info, $restore); //Now check if want to restore user data and do it. if (restore_userdata_selected($restore, 'attforblock', $mod->id)) { attforblock_restore_attendance_log ($mod->id, $newid, $info, $restore); } } else { $status = false; } } else { $status = false; } return $status; } function attforblock_restore_attendance_sessions ($old_attforblock_id, $new_attforblock_id, $info, $restore) { global $CFG, $oldidarray, $DB; $status = true; if (isset($info['MOD']['#']['SESSIONS'])) { @$stats = $info['MOD']['#']['SESSIONS']['0']['#']['SESSION']; }else { @$stats = $info['MOD']['#']['ATTFORBLOCK_SESSIONS']['0']['#']['ROWS']; } for($i = 0; $i < sizeof($stats); $i++) { $stat_info = $stats[$i]; //Now, build the attforblock_SESSIONS record structure $stat->courseid = $restore->course_id; $stat->groupid = backup_todb($stat_info['#']['GROUPID']['0']['#']); $group = restore_group_getid($restore, $stat->groupid); if ($group) { $stat->groupid = $group->new_id; } // $stat->creator = backup_todb($stat_info['#']['CREATOR']['0']['#']); $stat->sessdate = backup_todb($stat_info['#']['SESSDATE']['0']['#']); $stat->timemodified = backup_todb($stat_info['#']['TIMEMODIFIED']['0']['#']); $stat->description = backup_todb($stat_info['#']['DESCRIPTION']['0']['#']); if (isset($info['MOD']['#']['SESSIONS'])) { $stat->duration = backup_todb($stat_info['#']['DURATION']['0']['#']);; $stat->lasttaken = backup_todb($stat_info['#']['LASTTAKEN']['0']['#']); $stat->lasttakenby = backup_todb($stat_info['#']['LASTTAKENBY']['0']['#']); } else { //Old backup $stat->duration = 0; $stat->lasttaken = backup_todb($stat_info['#']['TIMETAKEN']['0']['#']); $stat->lasttakenby = backup_todb($stat_info['#']['TAKENBY']['0']['#']); } if (restore_userdata_selected($restore, 'attforblock', $old_attforblock_id)) { if ($user = backup_getid($restore->backup_unique_code, 'user', $stat->lasttakenby)) { $stat->lasttakenby = $user->new_id; } } else { $stat->lasttaken = 0; $stat->lasttakenby = 0; } $newid = $DB->insert_record ('attendance_sessions', $stat); $oldidarray[$old_attforblock_id]['attendance_sessions'][backup_todb($stat_info['#']['ID']['0']['#'])] = $newid; } return $status; } function attforblock_restore_attendance_statuses ($old_attforblock_id, $new_attforblock_id,$info,$restore) { global $CFG, $oldidarray, $DB; $status = true; //Get the statuses array if (isset($info['MOD']['#']['STATUSES'])) { $stats = $info['MOD']['#']['STATUSES']['0']['#']['STATUS']; for($i = 0; $i < sizeof($stats); $i++) { $stat_info = $stats[$i]; //Now, build the attforblock_STATUS record structure $stat->courseid = $restore->course_id; $stat->acronym = backup_todb($stat_info['#']['ACRONYM']['0']['#']); $stat->description = backup_todb($stat_info['#']['DESCRIPTION']['0']['#']); $stat->grade = backup_todb($stat_info['#']['GRADE']['0']['#']); $stat->visible = backup_todb($stat_info['#']['VISIBLE']['0']['#']); $stat->deleted = backup_todb($stat_info['#']['DELETED']['0']['#']); //if user's data not required, we don't restore invisible and deleted statuses if (!restore_userdata_selected($restore, 'attforblock', $old_attforblock_id) and (!$stat->visible or $stat->deleted)) { continue; } $newid = $DB->insert_record ('attendance_statuses', $stat); $oldidarray[$old_attforblock_id]['attendance_statuses'][backup_todb($stat_info['#']['ID']['0']['#'])] = $newid; } } elseif (isset($info['MOD']['#']['ATTFORBLOCK_SETTINGS'])) { $stats = $info['MOD']['#']['ATTFORBLOCK_SETTINGS']['0']['#']['ROWS']; for($i = 0; $i < sizeof($stats); $i++) { $stat_info = $stats[$i]; //Now, build the attforblock_STATUS record structure $stat->courseid = $restore->course_id; $stat->acronym = backup_todb($stat_info['#']['ACRONYM']['0']['#']); $stat->description = backup_todb($stat_info['#']['DESCRIPTION']['0']['#']); $stat->grade = backup_todb($stat_info['#']['GRADE']['0']['#']); $stat->visible = 1; $stat->deleted = 0; $newid = $DB->insert_record ('attendance_statuses', $stat); $oldidarray[$old_attforblock_id]['attendance_statuses'][backup_todb($stat_info['#']['STATUS']['0']['#'])] = $newid; } } else { // ATTFORBLOCK_SETTINGS tag don't exists // so course used default statuses (can be only in old version) $stats = $DB->get_records('attendance_statuses', array('courseid'=> 0), 'id ASC'); $oldstats = array('P', 'A', 'L', 'E'); $i = 0; foreach($stats as $stat) { // $stat = $stats[$i]; $stat->courseid = $restore->course_id; $newid = $DB->insert_record('attendance_statuses', $stat); $oldidarray[$old_attforblock_id]['attendance_statuses'][$oldstats[$i++]] = $newid; // $i++; } } return $status; } function attforblock_restore_attendance_log ($old_attforblock_id, $new_attforblock_id,$info,$restore) { global $CFG, $oldidarray, $DB; $status = true; //Get the logs array if (isset($info['MOD']['#']['LOGS'])) { @$logs = $info['MOD']['#']['LOGS']['0']['#']['LOG']; } else { @$logs = $info['MOD']['#']['ATTFORBLOCK_LOG']['0']['#']['ROWS']; } $stats = $DB->get_records_menu('attendance_statuses', array('courseid'=> $restore->course_id)); $statslist = implode(',', array_keys($stats)); $sessions = $DB->get_records('attendance_sessions', 'courseid', $restore->course_id); //Iterate over logs for($i = 0; $i < sizeof($logs); $i++) { $log_info = $logs[$i]; //Now, build the attforblock_LOG record structure $log->studentid = backup_todb($log_info['#']['STUDENTID']['0']['#']); $log->remarks = backup_todb($log_info['#']['REMARKS']['0']['#']); $user = backup_getid($restore->backup_unique_code, 'user', $log->studentid); if ($user) { $log->studentid = $user->new_id; } if (isset($info['MOD']['#']['LOGS'])) { $log->sessionid = $oldidarray[$old_attforblock_id]['attendance_sessions'][backup_todb($log_info['#']['SESSIONID']['0']['#'])]; $log->statusid = $oldidarray[$old_attforblock_id]['attendance_statuses'][backup_todb($log_info['#']['STATUSID']['0']['#'])]; $log->timetaken = backup_todb($log_info['#']['TIMETAKEN']['0']['#']); $log->statusset = backup_todb($log_info['#']['STATUSSET']['0']['#']); $ids = explode(',', $log->statusset); foreach ($ids as $id) { $new_ids[] = $oldidarray[$old_attforblock_id]['attendance_statuses'][$id]; } $log->statusset = implode(',', $new_ids); $log->takenby = backup_todb($log_info['#']['TAKENBY']['0']['#']); $user = backup_getid($restore->backup_unique_code, 'user', $log->takenby); if ($user) { $log->takenby = $user->new_id; } } else { //Old version // Catching bug of first version of backup if (isset($oldidarray[$old_attforblock_id]['attendance_sessions'][backup_todb($log_info['#']['ATTSID']['0']['#'])])) { $log->sessionid = $oldidarray[$old_attforblock_id]['attendance_sessions'][backup_todb($log_info['#']['ATTSID']['0']['#'])]; } else { continue; } $log->statusid = $oldidarray[$old_attforblock_id]['attendance_statuses'][backup_todb($log_info['#']['STATUS']['0']['#'])]; $log->statusset = $statslist; // $log->timetaken = get_field('attendance_sessions', 'lasttaken', 'id', $log->sessionid); $log->timetaken = $sessions[$log->sessionid]->lasttaken; $log->takenby = $sessions[$log->sessionid]->lasttakenby; // $log->takenby = backup_todb($log_info['#']['TAKENBY']['0']['#']); } $newid = $DB->insert_record ('attendance_log', $log); $oldidarray[$old_attforblock_id]['attendance_log'][backup_todb($log_info['#']['ID']['0']['#'])] = $newid; //Do some output if (($i+1) % 50 == 0) { if (!defined('RESTORE_SILENTLY')) { echo '.'; if (($i+1) % 1000 == 0) { echo '
'; } } backup_flush(300); } } return $status; } // function attforblock_restore_logs($restore,$log) { // // $status = true; // // return $status; // } ?>