version 1.191, 2011/06/28 09:38:05
|
version 1.198, 2016/04/26 13:51:38
|
Line 58 use Digest::MD5();
|
Line 58 use Digest::MD5();
|
|
|
=pod |
=pod |
|
|
=head 2 make_into_hash |
=head2 make_into_hash |
|
|
Turn a colon separated string into a hash and return a reference |
Turn a colon separated string into a hash and return a reference |
to it. Numbering from 0 even elements are keys and odd elements |
to it. Numbering from 0 even elements are keys and odd elements |
Line 454 sub init_dbs {
|
Line 454 sub init_dbs {
|
Drops all of the tables in the local mysql cache associated with the |
Drops all of the tables in the local mysql cache associated with the |
specified course id. |
specified course id. |
|
|
TODO: The drops shoulid be pushed into lonmysql to further isolate |
TODO: The drops should be pushed into lonmysql to further isolate |
mysql code from other modules. |
mysql code from other modules. |
|
|
=cut |
=cut |
Line 1251 sub ensure_current_data {
|
Line 1251 sub ensure_current_data {
|
} |
} |
|
|
my $student_id = &get_student_id($sname,$sdom); |
my $student_id = &get_student_id($sname,$sdom); |
|
&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 1277 sub ensure_current_full_data {
|
Line 1278 sub ensure_current_full_data {
|
($sdom,$sname,$courseid.'.db',$getuserdir); |
($sdom,$sname,$courseid.'.db',$getuserdir); |
# |
# |
my $student_id = &get_student_id($sname,$sdom); |
my $student_id = &get_student_id($sname,$sdom); |
|
&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 1289 sub ensure_current_full_data {
|
Line 1291 sub ensure_current_full_data {
|
return $status; |
return $status; |
} |
} |
|
|
|
sub ensure_current_groups { |
|
my ($courseid) = @_; |
|
my ($cdom,$cnum); |
|
if (defined($courseid)) { |
|
my %coursehash = &Apache::lonnet::coursedescription($courseid); |
|
$cdom = $coursehash{'domain'}; |
|
$cnum = $coursehash{'num'}; |
|
} elsif ($env{'request.course.id'}) { |
|
$courseid = $env{'request.course.id'}; |
|
$cdom = $env{'course.'.$courseid.'.domain'}; |
|
$cnum = $env{'course.'.$courseid.'.num'}; |
|
} |
|
if ($cdom eq '' || $cnum eq '') { |
|
return 'error: invalid course'; |
|
} |
|
&setup_table_names($courseid); |
|
my @CurrentTables = &Apache::lonmysql::tables_in_db(); |
|
unless (grep(/^\Q$groupnames_table\E$/,@CurrentTables)) { |
|
return; |
|
} |
|
# Get the update time for the groupnames table |
|
my $getuserdir = 1; |
|
my $modifiedtime = &Apache::lonnet::GetFileTimestamp |
|
($cdom,$cnum,'coursegroups.db',$getuserdir); |
|
my %tableinfo = &Apache::lonmysql::table_information($groupnames_table); |
|
my $updatetime; |
|
if ($tableinfo{'Update_time'}) { |
|
$updatetime = $tableinfo{'Update_time'}; |
|
} |
|
if (! defined($updatetime) || $modifiedtime > $updatetime) { |
|
my (%groups_in_sql,%removegroups,$addgroup); |
|
my %curr_groups = &Apache::longroup::coursegroups($cdom,$cnum); |
|
my @Result = &Apache::lonmysql::get_rows($groupnames_table); |
|
foreach my $row (@Result) { |
|
my ($id,$name) = @{$row}; |
|
unless (exists($curr_groups{$name})) { |
|
$groups_in_sql{$name}=$id; |
|
} elsif ($id) { |
|
$removegroups{$id} = $name; |
|
} |
|
} |
|
foreach my $group (keys(%curr_groups)) { |
|
unless (exists($groups_in_sql{$group})) { |
|
$addgroup = 1; |
|
last; |
|
} |
|
} |
|
if (keys(%removegroups)) { |
|
my $dbh = &Apache::lonmysql::get_dbh(); |
|
foreach my $group_id (keys(%removegroups)) { |
|
my $command = 'DELETE FROM '.$groupnames_table.' WHERE group_id='. |
|
$group_id; |
|
$dbh->do($command); |
|
if ($dbh->err()) { |
|
&Apache::lonnet::logthis("error ".$dbh->errstr(). |
|
" occurred executing \n". |
|
"SQL command: $command"); |
|
} |
|
} |
|
} |
|
if ($addgroup) { |
|
&populate_groupnames_table($courseid); |
|
} |
|
} |
|
return; |
|
} |
|
|
|
sub ensure_current_students_groups { |
|
my ($courseid) = @_; |
|
my ($cdom,$cnum); |
|
if (defined($courseid)) { |
|
my %coursehash = &Apache::lonnet::coursedescription($courseid); |
|
$cdom = $coursehash{'domain'}; |
|
$cnum = $coursehash{'num'}; |
|
} elsif ($env{'request.course.id'}) { |
|
$courseid = $env{'request.course.id'}; |
|
$cdom = $env{'course.'.$courseid.'.domain'}; |
|
$cnum = $env{'course.'.$courseid.'.num'}; |
|
} |
|
&setup_table_names($courseid); |
|
my @CurrentTables = &Apache::lonmysql::tables_in_db(); |
|
unless (grep(/^\Q$students_groups_table\E$/,@CurrentTables)) { |
|
return; |
|
} |
|
# Get the update time for the groupnames table |
|
my $getuserdir = 1; |
|
my $modifiedtime = &Apache::lonnet::GetFileTimestamp |
|
($cdom,$cnum,'groupmembership.db',$getuserdir); |
|
my %tableinfo = &Apache::lonmysql::table_information($students_groups_table); |
|
my $updatetime; |
|
if ($tableinfo{'Update_time'}) { |
|
$updatetime = $tableinfo{'Update_time'}; |
|
} |
|
if ((!defined($updatetime)) || ($modifiedtime > $updatetime)) { |
|
if (&Apache::lonmysql::drop_table($students_groups_table)) { |
|
if (&init_dbs($courseid)) { |
|
return "error creating $students_groups_table\n"; |
|
} else { |
|
&populate_students_groups_table($courseid); |
|
} |
|
} |
|
} |
|
return; |
|
} |
|
|
sub get_student_data_from_performance_cache { |
sub get_student_data_from_performance_cache { |
my ($sname,$sdom,$symb,$courseid)=@_; |
my ($sname,$sdom,$symb,$courseid)=@_; |
Line 2291 sub CL_FULLNAME { return 6; }
|
Line 2397 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_CREDITS { return 10; } |
sub CL_PERMANENTEMAIL { return 11; } |
sub CL_GROUP { return 11; } |
sub CL_ROLE { return 12; } |
sub CL_PERMANENTEMAIL { return 12; } |
sub CL_EXTENT { return 13; } |
sub CL_ROLE { return 13; } |
sub CL_PHOTO { return 14; } |
sub CL_EXTENT { return 14; } |
sub CL_THUMBNAIL { return 15; } |
sub CL_PHOTO { return 15; } |
|
sub CL_THUMBNAIL { return 16; } |
|
sub CL_AUTHORQUOTA { return 17; } |
|
sub CL_AUTHORUSAGE { return 18; } |
|
|
sub get_classlist { |
sub get_classlist { |
my ($cdom,$cnum) = @_; |
my ($cdom,$cnum) = @_; |
Line 2316 sub get_classlist {
|
Line 2425 sub get_classlist {
|
} |
} |
my ($sname,$sdom) = split(/:/,$student); |
my ($sname,$sdom) = split(/:/,$student); |
my @Values = split(/:/,$info); |
my @Values = split(/:/,$info); |
my ($end,$start,$id,$section,$fullname,$type,$lockedtype); |
my ($end,$start,$id,$section,$fullname,$type,$lockedtype,$credits); |
if (@Values > 2) { |
if (@Values > 2) { |
($end,$start,$id,$section,$fullname,$type,$lockedtype) = @Values; |
($end,$start,$id,$section,$fullname,$type,$lockedtype,$credits) = @Values; |
} else { # We have to get the data ourselves |
} else { # We have to get the data ourselves |
($end,$start) = @Values; |
($end,$start) = @Values; |
$section = &Apache::lonnet::getsection($sdom,$sname,$cid); |
$section = &Apache::lonnet::getsection($sdom,$sname,$cid); |
Line 2357 sub get_classlist {
|
Line 2466 sub get_classlist {
|
$status='Future'; |
$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,$credits]; |
} |
} |
if (wantarray()) { |
if (wantarray()) { |
return (\%classlist,['domain','username','end','start','id', |
return (\%classlist,['domain','username','end','start','id', |
'section','fullname','status','type','lockedtype']); |
'section','fullname','status','type', |
|
'lockedtype','credits']); |
} else { |
} else { |
return \%classlist; |
return \%classlist; |
} |
} |
Line 2982 Inputs: $starttime, $endtime, $table
|
Line 3093 Inputs: $starttime, $endtime, $table
|
Returns: $time_limits |
Returns: $time_limits |
|
|
|
|
=item C<&limit_by_section_and_status()C< |
=item C<&limit_by_section_and_status()C> |
|
|
Build SQL WHERE condition which limits the data collected by section and |
Build SQL WHERE condition which limits the data collected by section and |
student status. |
student status. |
Line 3091 $env{'course.'.$cid.'.domain'}, and $env
|
Line 3202 $env{'course.'.$cid.'.domain'}, and $env
|
|
|
Returns a reference to a hash which contains: |
Returns a reference to a hash which contains: |
keys '$sname:$sdom' |
keys '$sname:$sdom' |
values [$sdom,$sname,$end,$start,$id,$section,$fullname,$status,$type,$lockedtype] |
values [$sdom,$sname,$end,$start,$id,$section,$fullname,$status,$type, |
|
$lockedtype,$credits] |
|
|
The constant values CL_SDOM, CL_SNAME, CL_END, etc. can be used |
The constant values CL_SDOM, CL_SNAME, CL_END, etc. can be used |
as indices into the returned list to future-proof clients against |
as indices into the returned list to future-proof clients against |