--- loncom/interface/loncommon.pm 2005/09/16 16:01:18 1.274 +++ loncom/interface/loncommon.pm 2005/10/13 22:37:40 1.279 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # a pile of common routines # -# $Id: loncommon.pm,v 1.274 2005/09/16 16:01:18 raeburn Exp $ +# $Id: loncommon.pm,v 1.279 2005/10/13 22:37:40 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -3018,11 +3018,10 @@ Returns number of sections. sub get_sections { my ($cdom,$cnum,$sectioncount,$possible_roles) = @_; if (!($cdom && $cnum)) { return 0; } - my $cid = $cdom.'_'.$cnum; my $numsections = 0; if (!defined($possible_roles) || (grep/^st$/,@$possible_roles)) { - my ($classlist) = &Apache::loncoursedata::get_classlist($cid,$cdom,$cnum); + my ($classlist) = &Apache::loncoursedata::get_classlist($cdom,$cnum); my $sec_index = &Apache::loncoursedata::CL_SECTION(); my $status_index = &Apache::loncoursedata::CL_STATUS(); while (my ($student,$data) = each %$classlist) { @@ -3054,6 +3053,87 @@ sub get_sections { ############################################### +=pod + +=item get_course_users + +Retrieves usernames:domains for users in the specified course +with specific role(s), and access status. + +Incoming parameters: +1. course domain +2. course number +3. access status: users must have - either active, +previous, future, or all. +4. reference to array of permissible roles +5. reference to results object (hash of hashes). +Keys of top level hash are roles. +Keys of inner hashes are username:domain, with +values set to access type. + +=cut + +############################################### + +sub get_course_users { + my ($cdom,$cnum,$types,$roles,$users) = @_; + if (grep/^st$/,@{$roles}) { + my $statusidx = &Apache::loncoursedata::CL_STATUS(); + my $startidx = &Apache::loncoursedata::CL_START(); + my $endidx = &Apache::loncoursedata::CL_END(); + my ($classlist,$keylist)=&Apache::loncoursedata::get_classlist($cdom,$cnum); + my $now = time; + foreach my $student (keys(%{$classlist})) { + if (defined($$types{'active'})) { + if ($$classlist{$student}[$statusidx] eq 'Active') { + push(@{$$users{st}{$student}},'active'); + } + } + if (defined($$types{'previous'})) { + if ($$classlist{$student}[$endidx] <= $now) { + push(@{$$users{st}{$student}},'previous'); + } + } + if (defined($$types{'future'})) { + if (($$classlist{$student}[$startidx] > $now) && ($$classlist{$student}[$endidx] > $now) || ($$classlist{$student}[$endidx] == 0) || ($$classlist{$student}[$endidx] eq '')) { + push(@{$$users{st}{$student}},'future'); + } + } + } + } + if ((@{$roles} > 0) && (@{$roles} ne "st")) { + my @coursepersonnel = &Apache::lonnet::getkeys('nohist_userroles',$cdom,$cnum); + foreach my $person (@coursepersonnel) { + my ($role,$user) = ($person =~ /^([^:]*):([^:]+:[^:]+)/); + $user =~ s/:$//; + if (($role) && (grep(/^$role$/,@{$roles}))) { + my ($uname,$udom) = split(/:/,$user); + if ($uname ne '' && $udom ne '') { + my $status = &check_user_status($udom,$uname,$cdom,$cnum,$role); + foreach my $type (keys(%{$types})) { + if ($status eq $type) { + $$users{$role}{$user} = $type; + } + } + } + } + } + if (grep/^ow$/,@{$roles}) { + if ((defined($cdom)) && (defined($cnum))) { + my %csettings = &Apache::lonnet::get('environment',['internal.courseowner'],$cdom,$cnum); + if ( defined($csettings{'internal.courseowner'}) ) { + my $owner = $csettings{'internal.courseowner'}; + $$users{'ow'}{$owner.':'.$cdom} = 'any'; + } + } + } + } + return; +} + + + +############################################### sub get_posted_cgi { my $r=shift;