version 1.167, 2006/05/05 20:03:54
|
version 1.177, 2006/12/21 02:51:53
|
Line 51 package Apache::loncoursedata;
|
Line 51 package Apache::loncoursedata;
|
use strict; |
use strict; |
use Apache::lonnet; |
use Apache::lonnet; |
use Apache::lonhtmlcommon; |
use Apache::lonhtmlcommon; |
|
use Apache::longroup; |
use Time::HiRes; |
use Time::HiRes; |
use Apache::lonmysql; |
use Apache::lonmysql; |
use HTML::TokeParser; |
use HTML::TokeParser; |
use GDBM_File; |
use GDBM_File; |
|
use lib '/home/httpd/lib/perl/'; |
|
use LONCAPA; |
|
|
=pod |
=pod |
|
|
Line 74 and/or itself.
|
Line 77 and/or itself.
|
|
|
Returns a reference to a hash as described by $values. $values is |
Returns a reference to a hash as described by $values. $values is |
assumed to be the result of |
assumed to be the result of |
join(':',map {&Apache::lonnet::escape($_)} %orighash); |
join(':',map {&escape($_)} %orighash); |
|
|
This is a helper function for get_current_state. |
This is a helper function for get_current_state. |
|
|
Line 84 This is a helper function for get_curren
|
Line 87 This is a helper function for get_curren
|
################################################ |
################################################ |
sub make_into_hash { |
sub make_into_hash { |
my $values = shift; |
my $values = shift; |
my %tmp = map { &Apache::lonnet::unescape($_); } |
my %tmp = map { &unescape($_); } split(':',$values); |
split(':',$values); |
|
return \%tmp; |
return \%tmp; |
} |
} |
|
|
Line 965 sub populate_groupnames_table {
|
Line 967 sub populate_groupnames_table {
|
my $dbh = &Apache::lonmysql::get_dbh(); |
my $dbh = &Apache::lonmysql::get_dbh(); |
my $cdom = $env{'course.'.$courseid.'.domain'}; |
my $cdom = $env{'course.'.$courseid.'.domain'}; |
my $cnum = $env{'course.'.$courseid.'.num'}; |
my $cnum = $env{'course.'.$courseid.'.num'}; |
my %curr_groups; |
my %curr_groups = &Apache::longroup::coursegroups($cdom,$cnum); |
my $numgrps = &Apache::loncommon::coursegroups(\%curr_groups,$cdom,$cnum); |
return if (!%curr_groups); |
return if (!$numgrps); |
|
my $request = 'INSERT IGNORE INTO '.$groupnames_table. |
my $request = 'INSERT IGNORE INTO '.$groupnames_table. |
'(groupname) VALUES '; |
'(groupname) VALUES '; |
foreach my $groupname (sort(keys(%curr_groups)),'none') { |
foreach my $groupname (sort(keys(%curr_groups)),'none') { |
Line 1025 sub populate_students_groups_table {
|
Line 1026 sub populate_students_groups_table {
|
"(student_id,group_id) VALUES "; |
"(student_id,group_id) VALUES "; |
my $cdom = $env{'course.'.$courseid.'.domain'}; |
my $cdom = $env{'course.'.$courseid.'.domain'}; |
my $cnum = $env{'course.'.$courseid.'.num'}; |
my $cnum = $env{'course.'.$courseid.'.num'}; |
my $classlist = &get_classlist($cdom,$cnum); |
my ($classlist,$keylist) = &get_classlist($cdom,$cnum); |
my ($classgroups,$studentgroups) = &get_group_memberships($classlist, |
my ($classgroups,$studentgroups) = &get_group_memberships($classlist, |
|
$keylist, |
$cdom,$cnum); |
$cdom,$cnum); |
my $record_count = 0; |
my $record_count = 0; |
foreach my $student (sort(keys(%{$classgroups}))) { |
foreach my $student (sort(keys(%{$classgroups}))) { |
Line 1137 sub update_full_student_data {
|
Line 1139 sub update_full_student_data {
|
&setup_table_names($courseid); |
&setup_table_names($courseid); |
# |
# |
my $student_id = &get_student_id($sname,$sdom); |
my $student_id = &get_student_id($sname,$sdom); |
my @group_ids = &get_students_groupids($student_id); |
|
my $student = $sname.':'.$sdom; |
my $student = $sname.':'.$sdom; |
# |
# |
my $returnstatus = 'okay'; |
my $returnstatus = 'okay'; |
Line 1420 sub update_student_data {
|
Line 1421 sub update_student_data {
|
&setup_table_names($courseid); |
&setup_table_names($courseid); |
# |
# |
my $student_id = &get_student_id($sname,$sdom); |
my $student_id = &get_student_id($sname,$sdom); |
my @group_ids = &get_students_groupids($student_id); |
|
my $student = $sname.':'.$sdom; |
my $student = $sname.':'.$sdom; |
# |
# |
my $returnstatus = 'okay'; |
my $returnstatus = 'okay'; |
# |
# |
# Download students data |
# Download students data |
my $time_of_retrieval = time; |
my $time_of_retrieval = time; |
my @tmp = &Apache::lonnet::currentdump($courseid,$sdom,$sname); |
my %student_data = &Apache::lonnet::currentdump($courseid,$sdom,$sname); |
if ((scalar(@tmp) > 0) && ($tmp[0] =~ /^error:/)) { |
if (&Apache::lonnet::error(%student_data)) { |
&Apache::lonnet::logthis('error getting data for '. |
&Apache::lonnet::logthis('error getting data for '. |
$sname.':'.$sdom.' in course '.$courseid. |
$sname.':'.$sdom.' in course '.$courseid. |
':'.$tmp[0]); |
':'.(%student_data)[0]); |
$returnstatus = 'error getting data'; |
$returnstatus =(%student_data)[0] ; |
return ($returnstatus,undef); |
return ($returnstatus,undef); |
} |
} |
if (scalar(@tmp) < 1) { |
if (scalar(keys(%student_data)) < 1) { |
return ('no data',undef); |
return ('no data',undef); |
} |
} |
my %student_data = @tmp; |
|
my @Results = &store_student_data($sname,$sdom,$courseid,\%student_data); |
my @Results = &store_student_data($sname,$sdom,$courseid,\%student_data); |
# |
# |
# Set the students update time |
# Set the students update time |
Line 1472 sub store_student_data {
|
Line 1471 sub store_student_data {
|
my ($sname,$sdom,$courseid,$student_data) = @_; |
my ($sname,$sdom,$courseid,$student_data) = @_; |
# |
# |
my $student_id = &get_student_id($sname,$sdom); |
my $student_id = &get_student_id($sname,$sdom); |
my @group_ids = &get_students_groupids($student_id); |
|
my $student = $sname.':'.$sdom; |
my $student = $sname.':'.$sdom; |
# |
# |
my $returnstatus = 'okay'; |
my $returnstatus = 'okay'; |
Line 1668 sub ensure_current_data {
|
Line 1666 sub ensure_current_data {
|
($sdom,$sname,$courseid.'.db', |
($sdom,$sname,$courseid.'.db', |
$Apache::lonnet::perlvar{'lonUsersDir'}); |
$Apache::lonnet::perlvar{'lonUsersDir'}); |
# |
# |
|
if ($modifiedtime == -1) { |
|
return ('no data',undef); |
|
} |
|
|
my $student_id = &get_student_id($sname,$sdom); |
my $student_id = &get_student_id($sname,$sdom); |
my @group_ids = &get_students_groupids($student_id); |
|
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 $data = undef; |
my $data = undef; |
Line 1718 sub ensure_current_full_data {
|
Line 1719 sub ensure_current_full_data {
|
$Apache::lonnet::perlvar{'lonUsersDir'}); |
$Apache::lonnet::perlvar{'lonUsersDir'}); |
# |
# |
my $student_id = &get_student_id($sname,$sdom); |
my $student_id = &get_student_id($sname,$sdom); |
my @group_ids = &get_students_groupids($student_id); |
|
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; |
Line 1913 sub get_current_state {
|
Line 1913 sub get_current_state {
|
} else { |
} else { |
if ($status ne 'okay' && $status ne '') { |
if ($status ne 'okay' && $status ne '') { |
&Apache::lonnet::logthis('status = '.$status); |
&Apache::lonnet::logthis('status = '.$status); |
return (); |
return ('error: '.$status,undef); |
} |
} |
my $returnhash = &get_student_data_from_performance_cache($sname,$sdom, |
my $returnhash = &get_student_data_from_performance_cache($sname,$sdom, |
$symb,$courseid); |
$symb,$courseid); |
Line 2599 sub count_stats {
|
Line 2599 sub count_stats {
|
$limit .= ' AND '.$enrollment_limits; |
$limit .= ' AND '.$enrollment_limits; |
} |
} |
if ($group_limits) { |
if ($group_limits) { |
$limit .= $group_limits; |
$limit .= ' AND '.$group_limits; |
} |
} |
$request .= $limit.' GROUP BY a.student_id'; |
$request .= $limit.' GROUP BY a.student_id'; |
# &Apache::lonnet::logthis('request = '.$/.$request); |
# &Apache::lonnet::logthis('request = '.$/.$request); |
Line 2711 sub get_response_data {
|
Line 2711 sub get_response_data {
|
$limit .= ' AND '.$enrollment_requirements; |
$limit .= ' AND '.$enrollment_requirements; |
} |
} |
if (defined($group_limits)) { |
if (defined($group_limits)) { |
$limit .= $group_limits; |
$limit .= ' AND '.$group_limits; |
} |
} |
$request .= $limit.' ORDER BY b.timestamp'; |
$request .= $limit.' ORDER BY b.timestamp'; |
# &Apache::lonnet::logthis("request =\n".$request); |
# &Apache::lonnet::logthis("request =\n".$request); |
Line 2726 sub get_response_data {
|
Line 2726 sub get_response_data {
|
if (ref($dataset) eq 'ARRAY' && scalar(@$dataset)>0) { |
if (ref($dataset) eq 'ARRAY' && scalar(@$dataset)>0) { |
# Clear the \'s from around the submission |
# Clear the \'s from around the submission |
for (my $i =0;$i<scalar(@$dataset);$i++) { |
for (my $i =0;$i<scalar(@$dataset);$i++) { |
$dataset->[$i]->[3] =~ s/(\'$|^\')//g; |
$dataset->[$i]->[&RD_submission()] =~ s/(\'$|^\')//g; |
} |
} |
return $dataset; |
return $dataset; |
} |
} |
Line 2754 sub get_response_data_by_student {
|
Line 2754 sub get_response_data_by_student {
|
# |
# |
my $student_id = &get_student_id($student->{'username'}, |
my $student_id = &get_student_id($student->{'username'}, |
$student->{'domain'}); |
$student->{'domain'}); |
my @group_ids = &get_students_groupids($student_id); |
|
# |
# |
my $dbh = &Apache::lonmysql::get_dbh(); |
my $dbh = &Apache::lonmysql::get_dbh(); |
return undef if (! defined($dbh)); |
return undef if (! defined($dbh)); |
Line 2788 sub get_response_data_by_student {
|
Line 2787 sub get_response_data_by_student {
|
if (ref($dataset) eq 'ARRAY' && scalar(@$dataset)>0) { |
if (ref($dataset) eq 'ARRAY' && scalar(@$dataset)>0) { |
# Clear the \'s from around the submission |
# Clear the \'s from around the submission |
for (my $i =0;$i<scalar(@$dataset);$i++) { |
for (my $i =0;$i<scalar(@$dataset);$i++) { |
$dataset->[$i]->[2] =~ s/(\'$|^\')//g; |
$dataset->[$i]->[&RDs_submission] =~ s/(\'$|^\')//g; |
} |
} |
return $dataset; |
return $dataset; |
} |
} |
Line 3130 sub get_classlist {
|
Line 3129 sub get_classlist {
|
if(((!$end) || $now < $end) && ((!$start) || ($now > $start))) { |
if(((!$end) || $now < $end) && ((!$start) || ($now > $start))) { |
$status='Active'; |
$status='Active'; |
} |
} |
|
if(($now < $start) && ((!$end) || $now < $end )) { |
|
$status='Future'; |
|
} |
$classlist{$student} = |
$classlist{$student} = |
[$sdom,$sname,$end,$start,$id,$section,$fullname,$status,$type,$lockedtype]; |
[$sdom,$sname,$end,$start,$id,$section,$fullname,$status,$type,$lockedtype]; |
} |
} |
Line 3142 sub get_classlist {
|
Line 3144 sub get_classlist {
|
} |
} |
|
|
sub get_group_memberships { |
sub get_group_memberships { |
my ($classlist,$cdom,$cnum) = @_; |
my ($classlist,$keylist,$cdom,$cnum) = @_; |
|
|
|
return ({},{}) if (!ref($classlist) || !ref($keylist)); |
|
|
my $cid = $cdom.'_'.$cnum; |
my $cid = $cdom.'_'.$cnum; |
if (!defined($cdom) || !defined($cnum)) { |
if (!defined($cdom) || !defined($cnum)) { |
$cid = $env{'request.course.id'}; |
$cid = $env{'request.course.id'}; |
Line 3152 sub get_group_memberships {
|
Line 3157 sub get_group_memberships {
|
my (%classgroups,%studentgroups); |
my (%classgroups,%studentgroups); |
my $now = time; |
my $now = time; |
my $access_end = $env{'course.'.$cid.'.default_enrollment_end_date'}; |
my $access_end = $env{'course.'.$cid.'.default_enrollment_end_date'}; |
my (%curr_groups,%groupmemberhash); |
my %curr_groups =&Apache::longroup::coursegroups($cdom,$cnum); |
my $numgroups = &Apache::loncommon::coursegroups(\%curr_groups,$cdom, |
if (%curr_groups) { |
$cnum); |
my $grpindex = scalar(@{$keylist}); |
if ($numgroups) { |
my %groupmemberhash = |
%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})) { |
%{$classgroups{$student}} = (); |
%{$classgroups{$student}} = (); |
my $hasgroup = 0; |
my $hasgroup = 0; |
Line 3196 sub get_group_memberships {
|
Line 3201 sub get_group_memberships {
|
} |
} |
if (!$hasgroup) { |
if (!$hasgroup) { |
$studentgroups{'none'} ++; |
$studentgroups{'none'} ++; |
|
} else { |
|
$classlist->{$student}->[$grpindex] = join(',', |
|
sort(keys(%{$classgroups{$student}{'active'}}))); |
} |
} |
} |
} |
} |
} |