Diff for /loncom/interface/loncoursequeueadmin.pm between versions 1.12.2.4 and 1.18

version 1.12.2.4, 2010/01/07 17:07:45 version 1.18, 2010/02/21 02:38:23
Line 33  Apache::loncoursequeueadmin.pm Line 33  Apache::loncoursequeueadmin.pm
   
 =head1 SYNOPSIS  =head1 SYNOPSIS
   
 Adminitsration utilities used by domain coordinators for queued course creation requests, and by course coordinators for queued self-enrollment requests.  Utilities used by domain coordinators to administer queued course creation requests,
   and by course coordinators for queued self-enrollment requests, and by general
   users to display their queued self-enrollment requests.  
   
 This is part of the LearningOnline Network with CAPA project  This is part of the LearningOnline Network with CAPA project
 described at http://www.lon-capa.org.  described at http://www.lon-capa.org.
Line 50  described at http://www.lon-capa.org. Line 52  described at http://www.lon-capa.org.
   
 =item get_student_counts()  =item get_student_counts()
   
   =item course_creation()
   
   =item build_batchcreatehash()
    
   =item can_clone_course()
   
   =item get_processtype()
   
   =item queued_selfenrollment()
   
 =back  =back
   
 =cut  =cut
Line 57  described at http://www.lon-capa.org. Line 69  described at http://www.lon-capa.org.
 package Apache::loncoursequeueadmin;  package Apache::loncoursequeueadmin;
   
 use strict;  use strict;
 use Apache::Constants qw(:common :http);  
 use Apache::lonnet;  use Apache::lonnet;
 use Apache::loncommon;  use Apache::loncommon;
 use Apache::lonmsg;  use Apache::lonmsg;
Line 366  sub update_request_queue { Line 377  sub update_request_queue {
         @existing,@missingreq,@invalidusers,@limitexceeded,@completed,          @existing,@missingreq,@invalidusers,@limitexceeded,@completed,
         @processing_errors,@warn_approves,@warn_rejects,@approvals,          @processing_errors,@warn_approves,@warn_rejects,@approvals,
         @rejections,@rejectionerrors,@nopermissions,%courseroles,          @rejections,@rejectionerrors,@nopermissions,%courseroles,
         %communityroles,%domdefs,%approvalmsg,%rejectionmsg,$crstype,          %communityroles,%domdefs,%approvalmsg,%rejectionmsg,$crstype);
         @warn_coursereqs);  
     @approvals = &Apache::loncommon::get_env_multiple('form.approvereq');      @approvals = &Apache::loncommon::get_env_multiple('form.approvereq');
     @rejections = &Apache::loncommon::get_env_multiple('form.rejectreq');      @rejections = &Apache::loncommon::get_env_multiple('form.rejectreq');
     $now = time;      $now = time;
Line 456  sub update_request_queue { Line 466  sub update_request_queue {
             my $uhome = &Apache::lonnet::homeserver($uname,$udom);              my $uhome = &Apache::lonnet::homeserver($uname,$udom);
             if ($uhome ne 'no_host') {              if ($uhome ne 'no_host') {
                 if (exists($requesthash{$uname.':'.$udom})) {                  if (exists($requesthash{$uname.':'.$udom})) {
                     if ($cdom eq 'gci' && $cnum eq '9615072b469884921gcil1') {  
                         my $enresult = &enable_gci_submission($udom,$uname,  
                                                    $access_end,$access_start);  
                     }  
                     if (exists($classlist->{$uname.':'.$udom})) {                      if (exists($classlist->{$uname.':'.$udom})) {
                         if (ref($classlist->{$uname.':'.$udom}) eq 'ARRAY') {                          if (ref($classlist->{$uname.':'.$udom}) eq 'ARRAY') {
                             if (($classlist->{$uname.':'.$udom}->[$idx->{'status'}] eq 'Active') ||                              if (($classlist->{$uname.':'.$udom}->[$idx->{'status'}] eq 'Active') ||
Line 505  sub update_request_queue { Line 512  sub update_request_queue {
                             &Apache::lonnet::put($namespace,\%userrequest,$udom,$uname);                              &Apache::lonnet::put($namespace,\%userrequest,$udom,$uname);
                         if ($userresult ne 'ok') {                          if ($userresult ne 'ok') {
                             push(@warn_approves,$uname.':'.$udom);                              push(@warn_approves,$uname.':'.$udom);
                         } elsif ($udom eq 'gci') {  
                             my %changehash = (  
                                 'reqcrsotherdom.unofficial' => 'gcitest:autolimit=',  
                             );  
                             my $reqresult = &Apache::lonnet::put('environment',\%changehash,  
                                                                  $udom,$uname);  
                             if ($reqresult ne 'ok') {  
                                 push(@warn_coursereqs,$uname.':'.$udom);  
                             }  
                         }                          }
                     } else {                      } else {
                         push(@processing_errors,$uname.':'.$udom);                          push(@processing_errors,$uname.':'.$udom);
Line 898  sub update_request_queue { Line 896  sub update_request_queue {
             $output .= '</ul></p>';              $output .= '</ul></p>';
         }          }
     }      }
     if (@warn_coursereqs) {  
         $output .= '<p>'..&mt("For the following users, an error occurred when setting rights to request creation of Concept Test courses:").'<ul>';  
             foreach my $user (@warn_coursereqs) {  
                 $output .= '<li>'.$user.'</li>';  
             }  
             $output .= '</ul></p>';  
     }  
     return $output;      return $output;
 }  }
   
 sub enable_gci_submission {  
     my ($udom,$uname,$access_end,$access_start) = @_;  
     my $cdom = 'gci';  
     my $cnum = '1H96711d710194bfegcil1';  
     my ($stucounts,$idx,$classlist) = &get_student_counts($cdom,$cnum);  
     if (exists($classlist->{$uname.':'.$udom})) {  
         if (ref($classlist->{$uname.':'.$udom}) eq 'ARRAY') {  
             if (($classlist->{$uname.':'.$udom}->[$idx->{'status'}] eq 'Active') ||  
                 ($classlist->{$uname.':'.$udom}->[$idx->{'status'}] eq 'Future')) {  
                 return;  
             }  
         }  
     }  
     return  
         &Apache::lonnet::modify_student_enrollment($udom,$uname,undef,undef,undef,undef,undef,undef,$access_end,$access_start,'selfenroll',undef,$cdom.'_'.$cnum,1);  
 }  
   
 sub get_student_counts {  sub get_student_counts {
     my ($cdom,$cnum) = @_;      my ($cdom,$cnum) = @_;
     my (%idx,%stucounts);      my (%idx,%stucounts);
Line 981  sub build_batchcreatehash { Line 955  sub build_batchcreatehash {
     my ($dom,$context,$details,$owneremail,$domdefs) = @_;      my ($dom,$context,$details,$owneremail,$domdefs) = @_;
     my %batchhash;      my %batchhash;
     my @items = qw{owner domain coursehome clonecrs clonedom datemode dateshift enrollstart enrollend accessstart accessend sections crosslists users};      my @items = qw{owner domain coursehome clonecrs clonedom datemode dateshift enrollstart enrollend accessstart accessend sections crosslists users};
     if ($dom eq 'gcitest') {  
         push(@items,'firstres');  
     }  
     if ((ref($details) eq 'HASH') && (ref($domdefs) eq 'HASH')) {      if ((ref($details) eq 'HASH') && (ref($domdefs) eq 'HASH')) {
         my $emailenc = &Apache::lonnet::escape($owneremail);          my $emailenc = &escape($owneremail);
         my $owner = $details->{'owner'}.':'.$details->{'domain'};          my $owner = $details->{'owner'}.':'.$details->{'domain'};
         foreach my $item (@items) {          foreach my $item (@items) {
             $batchhash{$item} = $details->{$item};              $batchhash{$item} = $details->{$item};
Line 1068  sub can_clone_course { Line 1039  sub can_clone_course {
                 $canclone = 1;                  $canclone = 1;
             }              }
         }          }
           unless ($canclone) {
               if (&Apache::lonnet::is_course_owner($clonedom,$clonecrs,$uname,$udom)) {
                   $can_clone = 1;
               }
           }
     }      }
     return $canclone;      return $canclone;
 }  }
   
   sub get_processtype {
       my ($uname,$udom,$isadv,$dom,$crstype,$inststatuses,$domconfig) = @_;
       return unless ((ref($inststatuses) eq 'ARRAY') && (ref($domconfig) eq 'HASH'));
       if ($uname eq '' || $udom eq '') {
           $uname = $env{'user.name'};
           $udom = $env{'user.domain'};
           $isadv = $env{'user.adv'};
       }
       my (%userenv,%settings,$val);
       my @options = ('autolimit','validate','approval');
       if ($dom eq $udom) {
           %userenv =
               &Apache::lonnet::userenvironment($udom,$uname,'requestcourses.'.$crstype,'inststatus');
           if ($userenv{'requestcourses.'.$crstype}) {
               $val = $userenv{'requestcourses.'.$crstype};
               @{$inststatuses} = ('_custom_');
           } else {
               my ($task,%alltasks);
               if (ref($domconfig->{'requestcourses'}) eq 'HASH') {
                   %settings = %{$domconfig->{'requestcourses'}};
                   if (ref($settings{$crstype}) eq 'HASH') {
                       if (($isadv) && ($settings{$crstype}{'_LC_adv'} ne '')) {
                           $val = $settings{$crstype}{'_LC_adv'};
                           @{$inststatuses} = ('_LC_adv_');
                       } else {
                           if ($userenv{'inststatus'} ne '') {
                               @{$inststatuses} = split(',',$userenv{'inststatus'});
                           } else {
                               @{$inststatuses} = ('default');
                           }
                           foreach my $status (@{$inststatuses}) {
                               if (exists($settings{$crstype}{$status})) {
                                   my $value = $settings{$crstype}{$status};
                                   next unless ($value);
                                   unless (exists($alltasks{$value})) {
                                       if (ref($alltasks{$value}) eq 'ARRAY') {
                                           unless(grep(/^\Q$status\E$/,@{$alltasks{$value}})) {
                                               push(@{$alltasks{$value}},$status);
                                           }
                                       } else {
                                           @{$alltasks{$value}} = ($status);
                                       }
                                   }
                               }
                           }
                           my $maxlimit = 0;
   
                           foreach my $key (sort(keys(%alltasks))) {
                               if ($key =~ /^autolimit=(\d*)$/) {
                                   if ($1 eq '') {
                                       $val ='autolimit=';
                                       last;
                                   } elsif ($1 > $maxlimit) {
                                       $maxlimit = $1;
                                   }
                               }
                           }
                           if ($maxlimit) {
                               $val = 'autolimit='.$maxlimit;
                           } else {
                               foreach my $option (@options) {
                                   if ($alltasks{$option}) {
                                       $val = $option;
                                       last;
                                   }
                               }
                           }
                       }
                   }
               }
           }
       } else {
           %userenv = &Apache::lonnet::userenvironment($udom,$uname,'reqcrsotherdom.'.$crstype);
           if ($userenv{'reqcrsotherdom.'.$crstype}) {
               my @doms = split(',',$userenv{'reqcrsotherdom.'.$crstype});
               my $optregex = join('|',@options);
               foreach my $item (@doms) {
                   my ($extdom,$extopt) = split(':',$item);
                   if ($extdom eq $dom) {
                       if ($extopt =~ /^($optregex)(=?\d*)$/) {
                           $val = $1.$2;
                       }
                       last;
                   }
               }
               @{$inststatuses} = ('_external_');
           }
       }
       return $val;
   }
   
   sub queued_selfenrollment {
       my ($notitle) = @_;
       my $output;
       my %selfenrollrequests = &Apache::lonnet::dump('selfenrollrequests');
       my %reqs_by_date;
       foreach my $item (keys(%selfenrollrequests)) {
           if (ref($selfenrollrequests{$item}) eq 'HASH') {
               if ($selfenrollrequests{$item}{'status'} eq 'request') {
                   if ($selfenrollrequests{$item}{'timestamp'}) {
                       push(@{$reqs_by_date{$selfenrollrequests{$item}{'timestamp'}}},$item);
                   }
               }
           }
       }
       if (keys(%reqs_by_date)) {
           unless ($notitle) {
               $output .= '<b>'.&mt('Enrollment requests pending Course Coordinator approval').'</b><br />';
           }
           $output .= &Apache::loncommon::start_data_table().
                      &Apache::loncommon::start_data_table_header_row().
                      '<th>'.&mt('Date requested').'</th><th>'.&mt('Course title').'</th>'.
                      '<th>'.&mt('User role').'</th><th>'.&mt('Section').'</th>'.
                      &Apache::loncommon::end_data_table_header_row();
           my @sorted = sort { $a <=> $b } (keys(%reqs_by_date));
           foreach my $item (@sorted) {
               if (ref($reqs_by_date{$item}) eq 'ARRAY') {
                   foreach my $crs (@{$reqs_by_date{$item}}) {
                       my %courseinfo = &Apache::lonnet::coursedescription($crs);
                       my $usec = $selfenrollrequests{$crs}{'section'};
                       my $rolename = &Apache::lonnet::plaintext('st',$courseinfo{'type'},$crs);
                       if ($usec eq '') {
                           $usec = &mt('No section');
                       }
                       $output .= &Apache::loncommon::start_data_table_row().
                                  '<td>'.&Apache::lonlocal::locallocaltime($item).'</td>'.
                                  '<td>'.$courseinfo{'description'}.'</td>'.
                                  '<td>'.$rolename.'</td><td>'.$usec.'</td>'.
                                  &Apache::loncommon::end_data_table_row();
                   }
               }
           }
           $output .= &Apache::loncommon::end_data_table();
       }
       return $output;
   }
   
 1;  1;

Removed from v.1.12.2.4  
changed lines
  Added in v.1.18


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>