[LON-CAPA-cvs] cvs: loncom /interface loncoursedata.pm
raeburn
raeburn at source.lon-capa.org
Mon Aug 15 20:46:58 EDT 2016
raeburn Tue Aug 16 00:46:58 2016 EDT
Modified files:
/loncom/interface loncoursedata.pm
Log:
- Preserve student_id (originally from auto increment) when ensuring course's
"temporary" MySQL tables for student information are current.
Index: loncom/interface/loncoursedata.pm
diff -u loncom/interface/loncoursedata.pm:1.200 loncom/interface/loncoursedata.pm:1.201
--- loncom/interface/loncoursedata.pm:1.200 Sun Aug 14 16:13:21 2016
+++ loncom/interface/loncoursedata.pm Tue Aug 16 00:46:58 2016
@@ -1,6 +1,6 @@
# The LearningOnline Network with CAPA
#
-# $Id: loncoursedata.pm,v 1.200 2016/08/14 16:13:21 raeburn Exp $
+# $Id: loncoursedata.pm,v 1.201 2016/08/16 00:46:58 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -1423,14 +1423,62 @@
$updatetime = $tableinfo{'Update_time'};
}
if ((!defined($updatetime)) || ($modifiedtime > $updatetime)) {
- if (&Apache::lonmysql::drop_table($student_table)) {
- if (&init_dbs($courseid)) {
- return "error creating $student_table\n";
- } else {
- &populate_student_table($courseid);
+ &update_student_table($cdom,$cnum);
+ }
+ return;
+}
+
+sub update_student_table {
+ my ($cdom,$cnum) = @_;
+ return unless (($cdom ne '') && ($cnum ne ''));
+ my (%roster,%sqldata);
+ my $classlist = &get_classlist($cdom,$cnum);
+ while (my ($student,$data) = each (%$classlist)) {
+ my ($section,$start,$end) = ($data->[&CL_SECTION()],
+ $data->[&CL_START()],
+ $data->[&CL_END()]);
+ if ($section eq '' || $section =~ /^\s*$/) {
+ $section = 'none';
+ }
+ if ($start eq '') { $start = 0; }
+ if ($end eq '') { $end = 0; }
+ $roster{$student}{'section'} = $section;
+ $roster{$student}{'start'} = $start;
+ $roster{$student}{'end'} = $end;
+ }
+ my $dbh = &Apache::lonmysql::get_dbh();
+ my $statement = "SELECT student_id,student,section,start,end FROM $student_table";
+ my $sth = $dbh->prepare($statement);
+ $sth->execute();
+ if ($sth->err()) {
+ &Apache::lonnet::logthis("Unable to execute MySQL request:");
+ &Apache::lonnet::logthis("\n".$statement."\n");
+ &Apache::lonnet::logthis("error is:".$sth->errstr());
+ return undef;
+ }
+ foreach my $row (@{$sth->fetchall_arrayref}) {
+ my ($id,$student,$section,$start,$end) = (@$row);
+ if (ref($roster{$student}) eq 'HASH') {
+ if (($roster{$student}{'section'} ne $section) ||
+ ($roster{$student}{'start'} ne $start) ||
+ ($roster{$student}{'end'} ne $end)) {
+ $sqldata{$id} = {
+ section => $roster{$student}{'section'},
+ start => $roster{$student}{'start'},
+ end => $roster{$student}{'end'},
+ };
}
}
}
+ $sth->finish();
+ if (keys(%sqldata)) {
+ foreach my $id (sort { $a <=> $b } keys(%sqldata)) {
+ my $request = "UPDATE $student_table SET section='$sqldata{$id}{section}'".
+ ", start='$sqldata{$id}{start}'".
+ ", end='$sqldata{$id}{end}' WHERE student_id='$id'";
+ $dbh->do($request);
+ }
+ }
return;
}
More information about the LON-CAPA-cvs
mailing list