Diff for /loncom/interface/loncoursequeueadmin.pm between versions 1.12.2.2 and 1.15

version 1.12.2.2, 2009/12/07 04:48:04 version 1.15, 2010/01/16 16:15:08
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($uname,$udom,  
                                                    $access_start,$access_end);  
                     }  
                     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 1069  sub can_clone_course { Line 1043  sub can_clone_course {
     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)) {
           my $rolename = &Apache::lonnet::plaintext('st');
           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'};
                       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.2  
changed lines
  Added in v.1.15


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>
500 Internal Server Error

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at root@localhost to inform them of the time this error occurred, and the actions you performed just before this error.

More information about this error may be available in the server error log.