version 1.179, 2007/01/11 21:09:39
|
version 1.187, 2008/04/17 14:51:43
|
Line 38 Set of functions that download and proce
|
Line 38 Set of functions that download and proce
|
|
|
=head1 PACKAGES USED |
=head1 PACKAGES USED |
|
|
Apache::Constants qw(:common :http) |
Apache::lonnet |
Apache::lonnet() |
Apache::longroup |
Apache::lonhtmlcommon |
Time::HiRes |
HTML::TokeParser |
Apache::lonmysql |
GDBM_File |
LONCAPA |
|
Digest::MD5 |
|
|
=cut |
=cut |
|
|
package Apache::loncoursedata; |
package Apache::loncoursedata; |
|
|
use strict; |
use strict; |
use Apache::lonnet; |
use Apache::lonnet; |
use Apache::lonhtmlcommon; |
use Apache::longroup(); |
use Apache::longroup; |
use Time::HiRes(); |
use Time::HiRes; |
use Apache::lonmysql(); |
use Apache::lonmysql; |
|
use HTML::TokeParser; |
|
use GDBM_File; |
|
use lib '/home/httpd/lib/perl/'; |
|
use LONCAPA; |
use LONCAPA; |
|
use Digest::MD5(); |
|
|
=pod |
=pod |
|
|
Line 1318 sub update_full_student_data {
|
Line 1316 sub update_full_student_data {
|
chop($store_command); |
chop($store_command); |
$dbh->do($store_command); |
$dbh->do($store_command); |
if ($dbh->err) { |
if ($dbh->err) { |
$returnstatus = 'error storing part data'; |
$returnstatus = 'error saving part data'; |
&Apache::lonnet::logthis('insert error '.$dbh->errstr()); |
&Apache::lonnet::logthis('insert error '.$dbh->errstr()); |
&Apache::lonnet::logthis("While attempting\n".$store_command); |
&Apache::lonnet::logthis("While attempting\n".$store_command); |
} |
} |
Line 1358 sub update_full_student_data {
|
Line 1356 sub update_full_student_data {
|
chop($store_command); |
chop($store_command); |
$dbh->do($store_command); |
$dbh->do($store_command); |
if ($dbh->err) { |
if ($dbh->err) { |
$returnstatus = 'error storing response data'; |
$returnstatus = 'error saving response data'; |
&Apache::lonnet::logthis('insert error '.$dbh->errstr()); |
&Apache::lonnet::logthis('insert error '.$dbh->errstr()); |
&Apache::lonnet::logthis("While attempting\n".$store_command); |
&Apache::lonnet::logthis("While attempting\n".$store_command); |
} |
} |
Line 1370 sub update_full_student_data {
|
Line 1368 sub update_full_student_data {
|
($sname,$sdom,$courseid, |
($sname,$sdom,$courseid, |
&Apache::lonnet::convert_dump_to_currentdump(\%studentdata)); |
&Apache::lonnet::convert_dump_to_currentdump(\%studentdata)); |
if ($returnstatus eq 'okay' && $status ne 'okay') { |
if ($returnstatus eq 'okay' && $status ne 'okay') { |
$returnstatus = 'error storing current data:'.$status; |
$returnstatus = 'error saving current data:'.$status; |
} elsif ($status ne 'okay') { |
} elsif ($status ne 'okay') { |
$returnstatus .= ' error storing current data:'.$status; |
$returnstatus .= ' error saving current data:'.$status; |
} |
} |
## |
## |
## Update the students time...... |
## Update the students time...... |
Line 1671 sub ensure_current_data {
|
Line 1669 sub ensure_current_data {
|
# |
# |
# Get the update time for the user |
# Get the update time for the user |
my $updatetime = 0; |
my $updatetime = 0; |
|
my $getuserdir = 1; |
my $modifiedtime = &Apache::lonnet::GetFileTimestamp |
my $modifiedtime = &Apache::lonnet::GetFileTimestamp |
($sdom,$sname,$courseid.'.db', |
($sdom,$sname,$courseid.'.db',$getuserdir); |
$Apache::lonnet::perlvar{'lonUsersDir'}); |
|
# |
# |
if ($modifiedtime == -1) { |
if ($modifiedtime == -1) { |
return ('no data',undef); |
return ('no data',undef); |
Line 1684 sub ensure_current_data {
|
Line 1682 sub ensure_current_data {
|
"student_id ='$student_id'"); |
"student_id ='$student_id'"); |
my $data = undef; |
my $data = undef; |
if (@Result) { |
if (@Result) { |
$updatetime = $Result[0]->[5]; # Ack! This is dumb! |
$updatetime = $Result[0]->[6]; # Ack! This is dumb! |
} |
} |
if ($modifiedtime > $updatetime) { |
if ($modifiedtime > $updatetime) { |
($status,$data) = &update_student_data($sname,$sdom,$courseid); |
($status,$data) = &update_student_data($sname,$sdom,$courseid); |
Line 1723 sub ensure_current_full_data {
|
Line 1721 sub ensure_current_full_data {
|
&ensure_tables_are_set_up($courseid); |
&ensure_tables_are_set_up($courseid); |
# |
# |
# Get the update time for the user |
# Get the update time for the user |
|
my $getuserdir = 1; |
my $modifiedtime = &Apache::lonnet::GetFileTimestamp |
my $modifiedtime = &Apache::lonnet::GetFileTimestamp |
($sdom,$sname,$courseid.'.db', |
($sdom,$sname,$courseid.'.db',$getuserdir); |
$Apache::lonnet::perlvar{'lonUsersDir'}); |
|
# |
# |
my $student_id = &get_student_id($sname,$sdom); |
my $student_id = &get_student_id($sname,$sdom); |
my @Result = &Apache::lonmysql::get_rows($student_table, |
my @Result = &Apache::lonmysql::get_rows($student_table, |
"student_id ='$student_id'"); |
"student_id ='$student_id'"); |
my $updatetime; |
my $updatetime; |
if (@Result && ref($Result[0]) eq 'ARRAY') { |
if (@Result && ref($Result[0]) eq 'ARRAY') { |
$updatetime = $Result[0]->[6]; |
$updatetime = $Result[0]->[7]; |
} |
} |
if (! defined($updatetime) || $modifiedtime > $updatetime) { |
if (! defined($updatetime) || $modifiedtime > $updatetime) { |
$status = &update_full_student_data($sname,$sdom,$courseid); |
$status = &update_full_student_data($sname,$sdom,$courseid); |
Line 2007 sub get_problem_statistics {
|
Line 2005 sub get_problem_statistics {
|
&setup_table_names($courseid); |
&setup_table_names($courseid); |
my $symb_id = &get_symb_id($symb); |
my $symb_id = &get_symb_id($symb); |
my $part_id = &get_part_id($part); |
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(); |
my $dbh = &Apache::lonmysql::get_dbh(); |
return undef if (! defined($dbh)); |
return undef if (! defined($dbh)); |
Line 2520 sub score_stats {
|
Line 2518 sub score_stats {
|
my $time_limits = &limit_by_start_end_time($starttime,$endtime,'a'); |
my $time_limits = &limit_by_start_end_time($starttime,$endtime,'a'); |
my @Symbids = map { &get_symb_id($_); } @{$symbs}; |
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 $symb_restriction = join(' OR ',map {'a.symb_id='.$_;} @Symbids); |
my $request = 'DROP TABLE '.$stats_table; |
my $request = 'DROP TABLE '.$stats_table; |
$dbh->do($request); |
$dbh->do($request); |
Line 2599 sub count_stats {
|
Line 2597 sub count_stats {
|
my $time_limits = &limit_by_start_end_time($starttime,$endtime,'a'); |
my $time_limits = &limit_by_start_end_time($starttime,$endtime,'a'); |
my @Symbids = map { &get_symb_id($_); } @{$symbs}; |
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 $symb_restriction = join(' OR ',map {'a.symb_id='.$_;} @Symbids); |
my $request = 'DROP TABLE '.$stats_table; |
my $request = 'DROP TABLE '.$stats_table; |
$dbh->do($request); |
$dbh->do($request); |
Line 2897 sub get_student_scores {
|
Line 2895 sub get_student_scores {
|
&setup_table_names($courseid); |
&setup_table_names($courseid); |
my $dbh = &Apache::lonmysql::get_dbh(); |
my $dbh = &Apache::lonmysql::get_dbh(); |
return (undef) if (! defined($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; |
my $request = 'DROP TABLE IF EXISTS '.$tmptable; |
# &Apache::lonnet::logthis('request = '.$/.$request); |
# &Apache::lonnet::logthis('request = '.$/.$request); |
$dbh->do($request); |
$dbh->do($request); |
Line 3009 sub setup_table_names {
|
Line 3007 sub setup_table_names {
|
} |
} |
# |
# |
# Set up database names |
# Set up database names |
my $base_id = $courseid; |
my $base_id = 'md5_'.&Digest::MD5::md5_hex($courseid); |
$symb_table = $base_id.'_'.'symb'; |
$symb_table = $base_id.'_'.'symb'; |
$part_table = $base_id.'_'.'part'; |
$part_table = $base_id.'_'.'part'; |
$student_table = $base_id.'_'.'student'; |
$student_table = $base_id.'_'.'student'; |
Line 3038 sub setup_table_names {
|
Line 3036 sub setup_table_names {
|
return; |
return; |
} |
} |
|
|
|
sub temp_table_name { |
|
my ($courseid,$affix) = @_; |
|
my $base_id = 'md5_'.&Digest::MD5::md5_hex($courseid); |
|
return $base_id.'_'.$affix; |
|
} |
|
|
################################################ |
################################################ |
################################################ |
################################################ |
|
|
Line 3095 sub CL_FULLNAME { return 6; }
|
Line 3099 sub CL_FULLNAME { return 6; }
|
sub CL_STATUS { return 7; } |
sub CL_STATUS { return 7; } |
sub CL_TYPE { return 8; } |
sub CL_TYPE { return 8; } |
sub CL_LOCKEDTYPE { return 9; } |
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 CL_PHOTO { return 14; } |
|
sub CL_THUMBNAIL { return 15; } |
|
|
sub get_classlist { |
sub get_classlist { |
my ($cdom,$cnum) = @_; |
my ($cdom,$cnum) = @_; |
Line 3181 sub get_group_memberships {
|
Line 3191 sub get_group_memberships {
|
my $access_end = $env{'course.'.$cid.'.default_enrollment_end_date'}; |
my $access_end = $env{'course.'.$cid.'.default_enrollment_end_date'}; |
my %curr_groups =&Apache::longroup::coursegroups($cdom,$cnum); |
my %curr_groups =&Apache::longroup::coursegroups($cdom,$cnum); |
if (%curr_groups) { |
if (%curr_groups) { |
my $grpindex = scalar(@{$keylist}); |
my $grpindex = &CL_GROUP(); |
my %groupmemberhash = |
my %groupmemberhash = |
&Apache::lonnet::get_group_membership($cdom,$cnum); |
&Apache::lonnet::get_group_membership($cdom,$cnum); |
foreach my $student (keys(%{$classlist})) { |
foreach my $student (keys(%{$classlist})) { |