Diff for /loncom/interface/loncoursequeueadmin.pm between versions 1.11 and 1.12.2.10

version 1.11, 2009/11/04 17:42:17 version 1.12.2.10, 2010/12/05 21:57:33
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 queued_selfenrollment()
   
 =back  =back
   
 =cut  =cut
Line 57  described at http://www.lon-capa.org. Line 67  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 67  use LONCAPA; Line 76  use LONCAPA;
   
 sub send_selfserve_notification {  sub send_selfserve_notification {
     my ($notifylist,$textstr,$cid,$contextdesc,$timestamp,$context,$sender,      my ($notifylist,$textstr,$cid,$contextdesc,$timestamp,$context,$sender,
         $approvedlist,$rejectedlist) = @_;          $approvedlist,$rejectedlist,$crstype) = @_;
 # FIXME locallocaltime needs to be able to take $sender_lh as an argument  # FIXME locallocaltime needs to be able to take $sender_lh as an argument
 #       so this can be localized to the recipients date display format/time zone  #       so this can be localized to the recipients date display format/time zone
     $timestamp =&Apache::lonlocal::locallocaltime($timestamp);      $timestamp =&Apache::lonlocal::locallocaltime($timestamp);
     my $msgcc;      my $msgcc;
     my ($rawsubj,@rawmsg,$subject,$message,$reviewer);      my ($rawsubj,@rawmsg,$subject,$message,$reviewer,$msgtxt);
     if ($context eq 'coursemanagers') {      if ($context eq 'coursemanagers') {
         $rawsubj = 'Self-enrollment requests processed';          $rawsubj = 'Self-enrollment requests processed';
         push(@rawmsg,{          push(@rawmsg,{
Line 80  sub send_selfserve_notification { Line 89  sub send_selfserve_notification {
                       args => ["\n  $contextdesc"],                        args => ["\n  $contextdesc"],
                      });                       });
     } elsif ($context eq 'domainmanagers') {      } elsif ($context eq 'domainmanagers') {
         $rawsubj = 'Course requests reviewed';          $rawsubj = 'Course/Community requests reviewed';
         push(@rawmsg,{          push(@rawmsg,{
                       mt  => 'Course creation requests in the following domain: [_1] have been reviewed.',                        mt  => 'Course/Community creation requests in the following domain: [_1] have been reviewed.',
                       args => ["\n  $contextdesc"],                        args => ["\n  $contextdesc"],
                      });                       });
         if (ref($textstr) eq 'ARRAY') {          if (ref($textstr) eq 'ARRAY') {
Line 90  sub send_selfserve_notification { Line 99  sub send_selfserve_notification {
         }          }
     } elsif ($context eq 'enroller') {      } elsif ($context eq 'enroller') {
         $rawsubj = 'Enrollment request';          $rawsubj = 'Enrollment request';
           if ($crstype eq 'community') {
               $msgtxt = 'Your request for enrollment in the following community: [_1]requested on [_2]has been reviewed by a Coordinator.'
           } else {
               $msgtxt = 'Your request for enrollment in the following course: [_1]requested on [_2]has been reviewed by a Course Coordinator.';
           } 
         push(@rawmsg,{          push(@rawmsg,{
                       mt  => 'Your request for enrollment in the following course: [_1]requested on [_2]has been reviewed by a Course Coordinator.',                        mt  => $msgtxt,
                       args => ["\n  ".$contextdesc.",\n",$timestamp.",\n"],                        args => ["\n  ".$contextdesc.",\n",$timestamp.",\n"],
   
                      });                       });
Line 99  sub send_selfserve_notification { Line 113  sub send_selfserve_notification {
             push(@rawmsg,@{$textstr});              push(@rawmsg,@{$textstr});
         }          }
     } elsif ($context eq 'courserequestor') {      } elsif ($context eq 'courserequestor') {
         $rawsubj = 'Course request';          if ($crstype eq 'Community') {
               $rawsubj = 'Community request';
               $msgtxt = 'Your request for creation of the following community: [_1]requested on [_2]has been reviewed by a Domain Coordinator.';
           } else {
               $rawsubj = 'Course request';
               $msgtxt = 'Your request for creation of the following course: [_1]requested on [_2]has been reviewed by a Domain Coordinator.';
           }
         push(@rawmsg,{          push(@rawmsg,{
                       mt  => 'Your request for creation of the following course: [_1]requested on [_2]has been reviewed by a Domain Coordinator.',                        mt  => $msgtxt,
                       args => ["\n".$contextdesc.",\n",$timestamp.",\n"],                        args => ["\n".$contextdesc.",\n",$timestamp.",\n"],
   
                      });                       });
Line 109  sub send_selfserve_notification { Line 129  sub send_selfserve_notification {
             push(@rawmsg,@{$textstr});              push(@rawmsg,@{$textstr});
         }          }
     } elsif ($context eq 'coursereq') {      } elsif ($context eq 'coursereq') {
         $rawsubj = 'Course request to review',           if ($crstype eq 'community') {
               $rawsubj = 'Community request to review';
               $msgtxt = 'Creation of the following community: [_1]was requested by [_2] on [_3].';
           } else {
               $rawsubj = 'Course request to review';
               $msgtxt = 'Creation of the following course: [_1]was requested by [_2] on [_3].';
           }
         push(@rawmsg,{          push(@rawmsg,{
                       mt  => 'Creation of the following course: [_1]was requested by [_2] on [_3].',                        mt  => $msgtxt,
                       args => ["\n  $contextdesc\n",$textstr,$timestamp],                        args => ["\n  $contextdesc\n",$textstr,$timestamp],
                      },                       },
                      {                       {
                       mt =>'[_1]As Domain Coordinator, use: [_2]Main Menu -> Create a new course -> Approve or reject course requests[_3]to display a list of pending requests, which you can either approve or reject.',                        mt =>'[_1]As Domain Coordinator, use: [_2]Main Menu -> Course and community creation -> Approve or reject requests[_3]to display a list of pending requests, which you can either approve or reject.',
                       args => ["\n","\n\n  ","\n\n"],                        args => ["\n","\n\n  ","\n\n"],
                      });                       });
     } elsif ($context eq 'selfenrollreq') {      } elsif ($context eq 'selfenrollreq') {
         $rawsubj = 'Self-enrollment request';          $rawsubj = 'Self-enrollment request';
           if ($crstype eq 'community') {
               $msgtxt = 'Enrollment in the following community: [_1] was requested by [_2] on [_3].'
           } else {
               $msgtxt = 'Enrollment in the following course: [_1] was requested by [_2] on [_3].'
           }
         push(@rawmsg,{          push(@rawmsg,{
                       mt  => 'Enrollment in the following course: [_1] was requested by [_2] on [_3].',                        mt  => $msgtxt,
                       args => ["\n  $contextdesc\n",$textstr,$timestamp."\n"],                        args => ["\n  $contextdesc\n",$textstr,$timestamp."\n"],
                      });                       });
         if ($env{'course.'.$env{'request.course.id'}.'.type'} eq 'Community') {          my $directions;  
             push(@rawmsg,          if ($crstype eq 'community') {
                      {              $directions = 'As Coordinator, use: [_1]Main Menu -> Manage Community Users -> Enrollment Requests[_2]to display a list of pending enrollment requests, which you can either approve or reject.';
                       mt =>'As Coordinator, use: [_1]Main Menu -> Manage Course Users -> Enrollment Requests[_2]to display a list of pending enrollment requests, which you can either approve or reject.',  
                       args => ["  \n\n","\n"],  
                      });  
         } else {          } else {
             push(@rawmsg,              $directions = 'As Course Coordinator, use: [_1]Main Menu -> Manage Course Users -> Enrollment Requests[_2]to display a list of pending enrollment requests, which you can either approve or reject.';
           }
           push(@rawmsg,
                      {                       {
                       mt =>'As Course Coordinator, use: [_1]Main Menu -> Manage Course Users -> Enrollment Requests[_2]to display a list of pending enrollment requests, which you can either approve or reject.',                        mt   => $directions,
                       args => ["  \n\n","\n"],                        args => ["  \n\n","\n"],
                      });                       });
   
         }  
     }      }
     my @to_notify = split(/,/,$notifylist);      my @to_notify = split(/,/,$notifylist);
     my $numsent = 0;      my $numsent = 0;
Line 235  sub display_queued_requests { Line 264  sub display_queued_requests {
         if ($context eq 'course') {          if ($context eq 'course') {
             $output .= '<th>'.&mt('Section').'</th>'.              $output .= '<th>'.&mt('Section').'</th>'.
                        '<th>'.&mt('Date requested').'</th>';                         '<th>'.&mt('Date requested').'</th>';
           } else {
             %crstypes = &Apache::lonlocal::texthash (              %crstypes = &Apache::lonlocal::texthash (
                             official   => 'Official course',                              official   => 'Official course',
                             unofficial => 'Unofficial course',                              unofficial => 'Unofficial course',
                             community  => 'Community',                              community  => 'Community',
                         );                          );
         } else {  
             $output .= '<th>'.&mt('Type').'</th>'.              $output .= '<th>'.&mt('Type').'</th>'.
                        '<th>'.&mt('Date requested').'</th>'.                         '<th>'.&mt('Date requested').'</th>'.
                        '<th>'.&mt('Details').'</th>';                         '<th>'.&mt('Details').'</th>';
Line 332  sub display_queued_requests { Line 361  sub display_queued_requests {
         if ($context eq 'course') {          if ($context eq 'course') {
             $output .= &mt('There are currently no enrollment requests.');              $output .= &mt('There are currently no enrollment requests.');
         } else {          } else {
             $output .= &mt('There are currently no course requests awaiting approval.');              $output .= &mt('There are currently no course or community requests awaiting approval.');
         }          }
     }      }
     return $output;      return $output;
Line 346  sub update_request_queue { Line 375  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);          %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 355  sub update_request_queue { Line 385  sub update_request_queue {
         $namespace = 'selfenrollrequests';          $namespace = 'selfenrollrequests';
         $beneficiary = 'enroller';          $beneficiary = 'enroller';
         $cid = $env{'request.course.id'};          $cid = $env{'request.course.id'};
           $crstype = lc(&Apache::loncommon::course_type());
         my $chome = &Apache::lonnet::homeserver($cnum,$cdom);          my $chome = &Apache::lonnet::homeserver($cnum,$cdom);
         $hostname = &Apache::lonnet::hostname($chome);          $hostname = &Apache::lonnet::hostname($chome);
         $protocol = $Apache::lonnet::protocol{$chome};          $protocol = $Apache::lonnet::protocol{$chome};
Line 391  sub update_request_queue { Line 422  sub update_request_queue {
                 $notifylist = $domconfig{'requestcourses'}{'notify'}{'approval'};                  $notifylist = $domconfig{'requestcourses'}{'notify'}{'approval'};
             }              }
         }          }
         $approvedmsg = [{          $approvalmsg{'course'} = 
                           [{
                             mt => 'Your course request has been approved.',                              mt => 'Your course request has been approved.',
                         },                          },
                         {                          {
                             mt   => 'Visit [_1], to log-in and access the course',                              mt   => 'Visit [_1], to log-in and access the course',
                             args => [$protocol.'://'.$hostname],                              args => [$protocol.'://'.$hostname],
                         }];                          }];
         $rejectedmsg =  [{          $rejectionmsg{'course'} =
                           [{
                             mt => 'Your course request has not been approved.',                              mt => 'Your course request has not been approved.',
                         }];                          }];
   
           $approvalmsg{'community'} = 
                           [{
                               mt => 'Your community request has been approved.',
                           },
                           {
                               mt   => 'Visit [_1], to log-in and access the community',
                               args => [$protocol.'://'.$hostname],
                           }];
   
           $rejectionmsg{'community'} = 
                           [{
                               mt => 'Your community request has not been approved.',
                           }];
   
         %domdefs = &Apache::lonnet::get_domain_defaults($cdom);          %domdefs = &Apache::lonnet::get_domain_defaults($cdom);
         my @roles = &Apache::lonuserutils::roles_by_context('course');          my @roles = &Apache::lonuserutils::roles_by_context('course');
         foreach my $role (@roles) {          foreach my $role (@roles) {
Line 411  sub update_request_queue { Line 459  sub update_request_queue {
         }          }
   
     }      }
       my %allnums = &Apache::loncommon::get_faculty_cnums();
     foreach my $item (sort {$a <=> $b} @approvals) {      foreach my $item (sort {$a <=> $b} @approvals) {
         if ($context eq 'course') {          if ($context eq 'course') {
             my ($num,$uname,$udom,$usec) = split(/:/,$item);              my ($num,$uname,$udom,$usec) = split(/:/,$item);
             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 ne '' && ref($allnums{$cdom} eq 'HASH') {
                           my ($addothers,@others);
                           foreach my $key (%{$allnums{$cdom}}) {
                               if ($key eq $cnum) {
                                   $addothers = 1;   
                               } else {
                                   push(@others,$key);
                               }
                           }
                           if ($addothers) {
                               foreach my $crs (@others) {
                                   my $enresult = 
                                       &enable_additional_roles($cdom,$crs,$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 450  sub update_request_queue { Line 515  sub update_request_queue {
                         $stucounts->{'allstudents'} ++;                          $stucounts->{'allstudents'} ++;
                         $stucounts->{'selfenrolled'} ++;                          $stucounts->{'selfenrolled'} ++;
                         &send_selfserve_notification($uname.':'.$udom,$approvedmsg,                          &send_selfserve_notification($uname.':'.$udom,$approvedmsg,
                                        $cid,$coursedesc,$now,$beneficiary,$sender);                                         $cid,$coursedesc,$now,$beneficiary,$sender,undef,undef,$crstype);
                         my %userrequest = (                          my %userrequest = (
                             $cdom.'_'.$cnum => {                              $cdom.'_'.$cnum => {
                                 timestamp   => $now,                                  timestamp   => $now,
Line 463  sub update_request_queue { Line 528  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 (ref($allnums{$udom}) eq 'HASH') {
                               my %changehash = (
                                   'reqcrsotherdom.unofficial' => $udom.'test: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 477  sub update_request_queue { Line 551  sub update_request_queue {
                 if (&Apache::lonnet::homeserver($cnum,$cdom) eq 'no_host') {                  if (&Apache::lonnet::homeserver($cnum,$cdom) eq 'no_host') {
                     my $ownername = $requesthash{$cnum.'_approval'}{'ownername'};                      my $ownername = $requesthash{$cnum.'_approval'}{'ownername'};
                     my $ownerdom = $requesthash{$cnum.'_approval'}{'ownerdom'};                      my $ownerdom = $requesthash{$cnum.'_approval'}{'ownerdom'};
                     my $crstype = $requesthash{$cnum.'_approval'}{'crstype'};                      $crstype = $requesthash{$cnum.'_approval'}{'crstype'};
                     my $coursedesc = $requesthash{$cnum.'_approval'}{'description'};                      my $coursedesc = $requesthash{$cnum.'_approval'}{'description'};
                     my $longroles = \%courseroles;                      my $longroles = \%courseroles;
                     if ($crstype eq 'community') {                      if ($crstype eq 'community') {
Line 510  sub update_request_queue { Line 584  sub update_request_queue {
                                                       \$newusermsg,\$addresult,\$enrollcount,                                                        \$newusermsg,\$addresult,\$enrollcount,
                                                       \$response,\$keysmsg,\%domdefs,$longroles);                                                        \$response,\$keysmsg,\%domdefs,$longroles);
                             if ($result eq 'created') {                              if ($result eq 'created') {
                                   if ($crstype eq 'community') {
                                       $approvedmsg = $approvalmsg{'community'};
                                   } else {
                                       $approvedmsg = $approvalmsg{'course'};
                                   }
                                 push(@completed,$cnum);                                  push(@completed,$cnum);
                                 &send_selfserve_notification($ownername.':'.$ownerdom,$approvedmsg,                                  &send_selfserve_notification($ownername.':'.$ownerdom,$approvedmsg,
                                               $cid,$coursedesc,$now,$beneficiary,$sender);                                                $cid,$coursedesc,$now,$beneficiary,$sender,undef,undef,$crstype);
                                 my %reqhash = (                                  my %reqhash = (
                                                 reqtime     => $history{'reqtime'},                                                  reqtime     => $history{'reqtime'},
                                                 crstype     => $history{'crstype'},                                                  crstype     => $history{'crstype'},
Line 565  sub update_request_queue { Line 644  sub update_request_queue {
             if ($context eq 'course') {              if ($context eq 'course') {
                 my $user = $item;                  my $user = $item;
                 &send_selfserve_notification($user,$rejectedmsg,$cid,$coursedesc,                  &send_selfserve_notification($user,$rejectedmsg,$cid,$coursedesc,
                                              $now,$beneficiary,$sender);                                               $now,$beneficiary,$sender,undef,undef,$crstype);
                 my ($uname,$udom) = split(/:/,$user);                  my ($uname,$udom) = split(/:/,$user);
                 my %userrequest = (                  my %userrequest = (
                     $cdom.'_'.$cnum => {                      $cdom.'_'.$cnum => {
Line 587  sub update_request_queue { Line 666  sub update_request_queue {
                         my $ownername = $requesthash{$cnum.'_approval'}{'ownername'};                          my $ownername = $requesthash{$cnum.'_approval'}{'ownername'};
                         my $ownerdom = $requesthash{$cnum.'_approval'}{'ownerdom'};                          my $ownerdom = $requesthash{$cnum.'_approval'}{'ownerdom'};
                         my $coursedesc = $requesthash{$cnum.'_approval'}{'description'};                          my $coursedesc = $requesthash{$cnum.'_approval'}{'description'};
                           $crstype = $requesthash{$cnum.'_approval'}{'crstype'};
                           if ($crstype eq 'community') {
                               $rejectedmsg = $rejectionmsg{'community'};
                           } else {
                               $rejectedmsg = $rejectionmsg{'course'};
                           }
                         &send_selfserve_notification($ownername.':'.$ownerdom,$rejectedmsg,                          &send_selfserve_notification($ownername.':'.$ownerdom,$rejectedmsg,
                                                      $cid,$coursedesc,$now,$beneficiary,                                                       $cid,$coursedesc,$now,$beneficiary,
                                                      $sender);                                                       $sender,undef,undef,$crstype);
                         my %history =                          my %history =
                             &Apache::lonnet::restore($requestkey,'courserequests',                              &Apache::lonnet::restore($requestkey,'courserequests',
                                                      $ownerdom,$ownername);                                                       $ownerdom,$ownername);
Line 646  sub update_request_queue { Line 731  sub update_request_queue {
                 $chgmsg = "'Action was taken on the following enrollment requests by [_1].',$namelink";                  $chgmsg = "'Action was taken on the following enrollment requests by [_1].',$namelink";
                 if (@completed) {                  if (@completed) {
                     $approvedlist = join("\n",@completed);                      $approvedlist = join("\n",@completed);
                     $output .= '<p>'.&mt('The following were enrolled in the course:').'<ul>';                      if ($crstype eq 'community') {
                           $output .= '<p>'.&mt('The following were enrolled in the community:').'<ul>';
                       } else {
                           $output .= '<p>'.&mt('The following were enrolled in the course:').'<ul>';
                       }
                     foreach my $user (@completed) {                      foreach my $user (@completed) {
                         my ($uname,$udom) = split(/:/,$user);                          my ($uname,$udom) = split(/:/,$user);
                         my $userlink =                          my $userlink =
Line 666  sub update_request_queue { Line 755  sub update_request_queue {
                 if ($notifylist ne '') {                  if ($notifylist ne '') {
                     &send_selfserve_notification($notifylist,$chgmsg,$cid,$coursedesc,                      &send_selfserve_notification($notifylist,$chgmsg,$cid,$coursedesc,
                                                  $now,'coursemanagers',$sender,                                                   $now,'coursemanagers',$sender,
                                                  $approvedlist,$rejectedlist);                                                   $approvedlist,$rejectedlist,$crstype);
                 }                  }
             } else {              } else {
                 $chgmsg = "'Action was taken on the following course requests by [_1].',$namelink";                  $chgmsg = "'Action was taken on the following course and community requests by [_1].',$namelink";
                 if (@completed) {                  if (@completed) {
                     $approvedlist = join("\n",@completed);                      $approvedlist = join("\n",@completed);
                     $output .= '<p>'.&mt('The following courses were created:').'<ul>';                      $output .= '<p>'.&mt('The following courses/communities were created:').'<ul>';
                     foreach my $cnum (@completed) {                      foreach my $cnum (@completed) {
                         my $showcourse;                          my $showcourse;
                         if (ref($requesthash{$cnum.'_approval'})) {                          if (ref($requesthash{$cnum.'_approval'})) {
Line 703  sub update_request_queue { Line 792  sub update_request_queue {
                 if ($notifylist ne '') {                  if ($notifylist ne '') {
                     &send_selfserve_notification($notifylist,$chgmsg,$cid,$domdesc,                      &send_selfserve_notification($notifylist,$chgmsg,$cid,$domdesc,
                                                  $now,'domainmanagers',$sender,                                                   $now,'domainmanagers',$sender,
                                                  $approvedlist,$rejectedlist);                                                   $approvedlist,$rejectedlist,$crstype);
                 }                  }
             }              }
         }          }
Line 716  sub update_request_queue { Line 805  sub update_request_queue {
             }              }
             $output .= '</ul></p>';              $output .= '</ul></p>';
         } else {          } else {
             $output .= '<p>'.&mt('The following course creation requests were deleted because the course has already been created:').'<ul>';              $output .= '<p>'.&mt('The following course/community creation requests were deleted because the course or community has already been created:').'<ul>';
             foreach my $cnum (@existing) {              foreach my $cnum (@existing) {
                 my $showcourse;                  my $showcourse;
                 my %coursehash = &Apache::lonnet::coursedescription($cdom.'/'.$cnum);                  my %coursehash = &Apache::lonnet::coursedescription($cdom.'/'.$cnum);
Line 738  sub update_request_queue { Line 827  sub update_request_queue {
             }              }
             $output .= '</ul></p>';              $output .= '</ul></p>';
         } else {          } else {
             $output .= '<p>'.&mt('The following course creation requests were ignored because the request is no longer in the course request queue:').'<ul>';              $output .= '<p>'.&mt('The following course/community creation requests were ignored because the request is no longer in the queue:').'<ul>';
             foreach my $cnum (@missingreq) {              foreach my $cnum (@missingreq) {
                 $output .= '<li>'.$cnum.'</li>';                  $output .= '<li>'.$cnum.'</li>';
             }              }
Line 765  sub update_request_queue { Line 854  sub update_request_queue {
         }          }
     }      }
     if (@nopermissions) {      if (@nopermissions) {
         $output .= '<p>'.&mt('The following course creation requests could not be processed because the course owner does hot have rights to create this type of course:').'<ul>';          $output .= '<p>'.&mt('The following course/community creation requests could not be processed because the owner does not have rights to create this type of course:').'<ul>';
         foreach my $cnum (@nopermissions) {          foreach my $cnum (@nopermissions) {
             my $showcourse;              my $showcourse;
             if (ref($requesthash{$cnum.'_approval'})) {              if (ref($requesthash{$cnum.'_approval'})) {
Line 785  sub update_request_queue { Line 874  sub update_request_queue {
             }              }
             $output .= '</ul></p>';              $output .= '</ul></p>';
         } else {          } else {
             $output .= '<p>'.&mt('The following course creation requests could not be processed because an error occurred:').'<ul>';              $output .= '<p>'.&mt('The following course/community creation requests could not be processed because an error occurred:').'<ul>';
             foreach my $cnum (@processing_errors) {              foreach my $cnum (@processing_errors) {
                 my $showcourse;                  my $showcourse;
                 if (ref($requesthash{$cnum.'_approval'})) {                  if (ref($requesthash{$cnum.'_approval'})) {
Line 799  sub update_request_queue { Line 888  sub update_request_queue {
         }          }
     }      }
     if (@rejectionerrors) {      if (@rejectionerrors) {
         $output .= '<p>'.&mt('The following course creation request rejections could not be fully processed because an error occurred:').'<ul>';          $output .= '<p>'.&mt('The following course/community creation request rejections could not be fully processed because an error occurred:').'<ul>';
         foreach my $cnum (@rejectionerrors) {          foreach my $cnum (@rejectionerrors) {
             my $showcourse;              my $showcourse;
             if (ref($requesthash{$cnum.'_approval'})) {              if (ref($requesthash{$cnum.'_approval'})) {
Line 819  sub update_request_queue { Line 908  sub update_request_queue {
             }              }
             $output .= '</ul></p>';              $output .= '</ul></p>';
         } else {          } else {
             $output .= '<p>'.&mt("For the following course requests an error occurred when updating the requestor's own course requests record:").'<ul>';              $output .= '<p>'.&mt("For the following course/community requests an error occurred when updating the requestor's own requests record:").'<ul>';
             foreach my $cnum (@warn_approves,@warn_rejects) {              foreach my $cnum (@warn_approves,@warn_rejects) {
                 my $showcourse;                  my $showcourse;
                 if (ref($requesthash{$cnum.'_approval'})) {                  if (ref($requesthash{$cnum.'_approval'})) {
Line 832  sub update_request_queue { Line 921  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_additional_roles {
       my ($cdom,$cnum,$udom,$uname,$access_end,$access_start) = @_;
       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 869  sub course_creation { Line 980  sub course_creation {
         $ownername = $env{'user.name'};          $ownername = $env{'user.name'};
         $ownerdom  = $env{'user.domain'};          $ownerdom  = $env{'user.domain'};
     }      }
     my $type = 'Course';  
     if ($crstype eq 'community') {  
         $type = 'Community';  
     }  
     my $owneremail;      my $owneremail;
     my %emails = &Apache::loncommon::getemails($ownername,$ownerdom);      my %emails = &Apache::loncommon::getemails($ownername,$ownerdom);
     foreach my $email ('permanentemail','critnotification','notification') {      foreach my $email ('permanentemail','critnotification','notification') {
Line 881  sub course_creation { Line 988  sub course_creation {
     }      }
     my %reqdetails = &build_batchcreatehash($dom,$context,$details,$owneremail,$domdefs);      my %reqdetails = &build_batchcreatehash($dom,$context,$details,$owneremail,$domdefs);
     my $cid = &LONCAPA::batchcreatecourse::build_course($dom,$cnum,'requestcourses',      my $cid = &LONCAPA::batchcreatecourse::build_course($dom,$cnum,'requestcourses',
                   \%reqdetails,$longroles,\$logmsg,\$newusermsg,\$addresult,                    \%reqdetails,$longroles,$logmsg,$newusermsg,$addresult,
                   \$enrollcount,\$output,\$keysmsg,$ownerdom,$ownername,$cnum,$crstype);                    $enrollcount,$output,$keysmsg,$ownerdom,$ownername,$cnum,$crstype);
     if ($cid eq "/$dom/$cnum") {      if ($cid eq "/$dom/$cnum") {
         $result = 'created';          $result = 'created';
     } else {      } else {
Line 894  sub course_creation { Line 1001  sub course_creation {
 sub build_batchcreatehash {  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 cloneroster datemode dateshift enrollstart enrollend accessstart accessend sections crosslists users};
       if ($dom =~ /^\w+citest$/) {
           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 957  sub can_clone_course { Line 1067  sub can_clone_course {
     my ($uname,$udom,$clonecrs,$clonedom,$crstype) = @_;      my ($uname,$udom,$clonecrs,$clonedom,$crstype) = @_;
     my $canclone;      my $canclone;
     my $ccrole = 'cc';      my $ccrole = 'cc';
     if ($crstype eq 'Community') {      if ($crstype eq 'community') {
         $ccrole = 'co';          $ccrole = 'co';
     }      }
     my %roleshash = &Apache::lonnet::get_my_roles($uname,$udom,'userroles',['active'],      my %roleshash = &Apache::lonnet::get_my_roles($uname,$udom,'userroles',['active'],
Line 979  sub can_clone_course { Line 1089  sub can_clone_course {
                 $canclone = 1;                  $canclone = 1;
             }              }
         }          }
           unless ($canclone) {
               if (&Apache::lonnet::is_course_owner($clonedom,$clonecrs,$uname,$udom)) {
                   $canclone = 1;
               }
           }
     }      }
     return $canclone;      return $canclone;
 }  }
   
   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.11  
changed lines
  Added in v.1.12.2.10


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