--- loncom/interface/loncoursedata.pm 2006/12/28 21:01:39 1.178 +++ loncom/interface/loncoursedata.pm 2007/11/06 04:39:19 1.184 @@ -1,6 +1,6 @@ # The LearningOnline Network with CAPA # -# $Id: loncoursedata.pm,v 1.178 2006/12/28 21:01:39 albertel Exp $ +# $Id: loncoursedata.pm,v 1.184 2007/11/06 04:39:19 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -38,26 +38,24 @@ Set of functions that download and proce =head1 PACKAGES USED - Apache::Constants qw(:common :http) - Apache::lonnet() - Apache::lonhtmlcommon - HTML::TokeParser - GDBM_File - + Apache::lonnet + Apache::longroup + Time::HiRes + Apache::lonmysql + LONCAPA + Digest::MD5 + =cut package Apache::loncoursedata; use strict; use Apache::lonnet; -use Apache::lonhtmlcommon; -use Apache::longroup; -use Time::HiRes; -use Apache::lonmysql; -use HTML::TokeParser; -use GDBM_File; -use lib '/home/httpd/lib/perl/'; +use Apache::longroup(); +use Time::HiRes(); +use Apache::lonmysql(); use LONCAPA; +use Digest::MD5(); =pod @@ -1177,6 +1175,8 @@ sub update_full_student_data { while (my ($key,$value) = each(%studentdata)) { next if ($key =~ /^(\d+):(resource$|subnum$|keys:)/); my ($transaction,$symb,$parameter) = split(':',$key); + $symb = &unescape($symb); + $parameter = &unescape($parameter); my $symb_id = &get_symb_id($symb); if ($parameter eq 'timestamp') { # We can deal with 'timestamp' right away @@ -1316,7 +1316,7 @@ sub update_full_student_data { chop($store_command); $dbh->do($store_command); if ($dbh->err) { - $returnstatus = 'error storing part data'; + $returnstatus = 'error saving part data'; &Apache::lonnet::logthis('insert error '.$dbh->errstr()); &Apache::lonnet::logthis("While attempting\n".$store_command); } @@ -1356,7 +1356,7 @@ sub update_full_student_data { chop($store_command); $dbh->do($store_command); if ($dbh->err) { - $returnstatus = 'error storing response data'; + $returnstatus = 'error saving response data'; &Apache::lonnet::logthis('insert error '.$dbh->errstr()); &Apache::lonnet::logthis("While attempting\n".$store_command); } @@ -1368,9 +1368,9 @@ sub update_full_student_data { ($sname,$sdom,$courseid, &Apache::lonnet::convert_dump_to_currentdump(\%studentdata)); if ($returnstatus eq 'okay' && $status ne 'okay') { - $returnstatus = 'error storing current data:'.$status; + $returnstatus = 'error saving current data:'.$status; } elsif ($status ne 'okay') { - $returnstatus .= ' error storing current data:'.$status; + $returnstatus .= ' error saving current data:'.$status; } ## ## Update the students time...... @@ -1682,7 +1682,7 @@ sub ensure_current_data { "student_id ='$student_id'"); my $data = undef; if (@Result) { - $updatetime = $Result[0]->[5]; # Ack! This is dumb! + $updatetime = $Result[0]->[6]; # Ack! This is dumb! } if ($modifiedtime > $updatetime) { ($status,$data) = &update_student_data($sname,$sdom,$courseid); @@ -1730,7 +1730,7 @@ sub ensure_current_full_data { "student_id ='$student_id'"); my $updatetime; if (@Result && ref($Result[0]) eq 'ARRAY') { - $updatetime = $Result[0]->[6]; + $updatetime = $Result[0]->[7]; } if (! defined($updatetime) || $modifiedtime > $updatetime) { $status = &update_full_student_data($sname,$sdom,$courseid); @@ -2005,7 +2005,7 @@ sub get_problem_statistics { &setup_table_names($courseid); my $symb_id = &get_symb_id($symb); my $part_id = &get_part_id($part); - my $stats_table = $courseid.'_problem_stats'; + my $stats_table = &temp_table_name($courseid,'problem_stats'); # my $dbh = &Apache::lonmysql::get_dbh(); return undef if (! defined($dbh)); @@ -2518,7 +2518,7 @@ sub score_stats { my $time_limits = &limit_by_start_end_time($starttime,$endtime,'a'); my @Symbids = map { &get_symb_id($_); } @{$symbs}; # - my $stats_table = $courseid.'_problem_stats'; + my $stats_table = &temp_table_name($courseid,'problem_stats'); my $symb_restriction = join(' OR ',map {'a.symb_id='.$_;} @Symbids); my $request = 'DROP TABLE '.$stats_table; $dbh->do($request); @@ -2597,7 +2597,7 @@ sub count_stats { my $time_limits = &limit_by_start_end_time($starttime,$endtime,'a'); my @Symbids = map { &get_symb_id($_); } @{$symbs}; # - my $stats_table = $courseid.'_problem_stats'; + my $stats_table = &temp_table_name($courseid,'problem_stats'); my $symb_restriction = join(' OR ',map {'a.symb_id='.$_;} @Symbids); my $request = 'DROP TABLE '.$stats_table; $dbh->do($request); @@ -2895,7 +2895,7 @@ sub get_student_scores { &setup_table_names($courseid); my $dbh = &Apache::lonmysql::get_dbh(); return (undef) if (! defined($dbh)); - my $tmptable = $courseid.'_temp_'.time; + my $tmptable = &temp_table_name($courseid,'temp_'.time); my $request = 'DROP TABLE IF EXISTS '.$tmptable; # &Apache::lonnet::logthis('request = '.$/.$request); $dbh->do($request); @@ -3007,7 +3007,7 @@ sub setup_table_names { } # # Set up database names - my $base_id = $courseid; + my $base_id = 'md5_'.&Digest::MD5::md5_hex($courseid); $symb_table = $base_id.'_'.'symb'; $part_table = $base_id.'_'.'part'; $student_table = $base_id.'_'.'student'; @@ -3036,6 +3036,12 @@ sub setup_table_names { return; } +sub temp_table_name { + my ($courseid,$affix) = @_; + my $base_id = 'md5_'.&Digest::MD5::md5_hex($courseid); + return $base_id.'_'.$affix; +} + ################################################ ################################################ @@ -3093,6 +3099,10 @@ sub CL_FULLNAME { return 6; } sub CL_STATUS { return 7; } sub CL_TYPE { return 8; } sub CL_LOCKEDTYPE { return 9; } +sub CL_GROUP { return 10; } +sub CL_PERMANENTEMAIL { return 11; } +sub CL_ROLE { return 12; } +sub CL_EXTENT { return 13; } sub get_classlist { my ($cdom,$cnum) = @_; @@ -3179,7 +3189,7 @@ sub get_group_memberships { my $access_end = $env{'course.'.$cid.'.default_enrollment_end_date'}; my %curr_groups =&Apache::longroup::coursegroups($cdom,$cnum); if (%curr_groups) { - my $grpindex = scalar(@{$keylist}); + my $grpindex = &CL_GROUP(); my %groupmemberhash = &Apache::lonnet::get_group_membership($cdom,$cnum); foreach my $student (keys(%{$classlist})) {