Diff for /loncom/interface/loncoursequeueadmin.pm between versions 1.2 and 1.10

version 1.2, 2009/08/16 19:16:16 version 1.10, 2009/10/05 01:54:44
Line 76  sub send_selfserve_notification { Line 76  sub send_selfserve_notification {
     if ($context eq 'coursemanagers') {      if ($context eq 'coursemanagers') {
         $rawsubj = 'Self-enrollment requests processed';          $rawsubj = 'Self-enrollment requests processed';
         push(@rawmsg,{          push(@rawmsg,{
                       mt => 'Enrollment requests in the following course: [_1]have been processed.',                        mt => 'Enrollment requests in the following course: [_1] have been processed.',
                       args => ["\n  $contextdesc\n"],                        args => ["\n  $contextdesc"],
                      });                       });
     } elsif ($context eq 'domainmanagers') {      } elsif ($context eq 'domainmanagers') {
         $rawsubj = 'Course requests reviewed';          $rawsubj = 'Course requests reviewed';
         push(@rawmsg,{          push(@rawmsg,{
                       mt  => 'Course creation requests in the following domain: [_1]have been reviewed.',                        mt  => 'Course creation requests in the following domain: [_1] have been reviewed.',
                       args => ["\n  $contextdesc\n"],                        args => ["\n  $contextdesc"],
                      });                       });
         if (ref($textstr) eq 'ARRAY') {          if (ref($textstr) eq 'ARRAY') {
             push(@rawmsg,@{$textstr});              push(@rawmsg,@{$textstr});
Line 188  sub send_selfserve_notification { Line 188  sub send_selfserve_notification {
                                                        @{$item->{args}})."\n";                                                         @{$item->{args}})."\n";
             }              }
         }          }
         if ($context eq 'managers') {          if ($context eq 'coursemanagers') {
             if ($approvedlist) {              if ($approvedlist) {
                 $message .= "\n\n".&Apache::lonlocal::mt_user($sender_lh,'Approved enrollments:')."\n".$approvedlist;                  $message .= "\n\n".&Apache::lonlocal::mt_user($sender_lh,'Approved enrollments:')."\n".$approvedlist;
             }              }
Line 220  sub display_queued_requests { Line 220  sub display_queued_requests {
     } else {      } else {
         $formaction = '/adm/createcourse';          $formaction = '/adm/createcourse';
         $namespace = 'courserequestqueue';          $namespace = 'courserequestqueue';
         %requesthash = &Apache::lonnet::dump_dom($namespace,$dom,undef,'_approval');          %requesthash = &Apache::lonnet::dump_dom($namespace,$dom,'_approval');
         $nextelement = '<input type="hidden" name="phase" value="requestchange" />';          $nextelement = '<input type="hidden" name="phase" value="requestchange" />';
     }      }
     my ($output,%queue_by_date,%crstypes);      my ($output,%queue_by_date,%crstypes);
Line 293  sub display_queued_requests { Line 293  sub display_queued_requests {
   
                     } else {                      } else {
                         my ($cnum,$ownername,$ownerdom,$type,$cdesc)=split(/:/,$request,5);                          my ($cnum,$ownername,$ownerdom,$type,$cdesc)=split(/:/,$request,5);
                         $detailslink='<a href="javascript::opencoursereqdisplay('.                          $detailslink='<a href="javascript:opencoursereqdisplay('.
                                       "'$dom".'_'."$cnum'".');">'.$cdesc.'</a>';                                        "'$dom','$cnum'".');">'.$cdesc.'</a>';
                         $crstype = $type;                          $crstype = $type;
                         if (defined($crstypes{$type})) {                          if (defined($crstypes{$type})) {
                             $crstype = $crstypes{$type};                              $crstype = $crstypes{$type};
Line 345  sub update_request_queue { Line 345  sub update_request_queue {
         $domdesc,$now,$sender,$approvedmsg,$rejectedmsg,$beneficiary,          $domdesc,$now,$sender,$approvedmsg,$rejectedmsg,$beneficiary,
         @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,%courseroles,%communityroles,%domdefs);          @rejections,@rejectionerrors,@nopermissions,%courseroles,
           %communityroles,%domdefs);
     @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 379  sub update_request_queue { Line 380  sub update_request_queue {
         $domdesc = &Apache::lonnet::domain($cdom);          $domdesc = &Apache::lonnet::domain($cdom);
         $namespace = 'courserequestqueue';          $namespace = 'courserequestqueue';
         $beneficiary = 'courserequestor';          $beneficiary = 'courserequestor';
         %requesthash = &Apache::lonnet::dump_dom($namespace,$cdom,undef,'_approval');          %requesthash = &Apache::lonnet::dump_dom($namespace,$cdom,'_approval');
         my $chome = &Apache::lonnet::domain($cdom,'primary');          my $chome = &Apache::lonnet::domain($cdom,'primary');
         $hostname = &Apache::lonnet::hostname($chome);          $hostname = &Apache::lonnet::hostname($chome);
         $protocol = $Apache::lonnet::protocol{$chome};          $protocol = $Apache::lonnet::protocol{$chome};
Line 482  sub update_request_queue { Line 483  sub update_request_queue {
                     if ($crstype eq 'community') {                      if ($crstype eq 'community') {
                         $longroles = \%communityroles;                          $longroles = \%communityroles;
                     }                      }
                     if (&Apache::lonnet::usertools_access($ownername,$ownerdom,$crstype,                      my $cancreate;
                                                           undef,'requestcourses')) {                      if ($cdom eq $ownerdom) {
                           if (&Apache::lonnet::usertools_access($ownername,$ownerdom,$crstype,
                                                                 undef,'requestcourses')) {
                               $cancreate = 1;
                           }
                       } else {
                           my %userenv = &Apache::lonnet::userenvironment($ownerdom,$ownername,'reqcrsotherdom.'.$crstype);
                           if ($userenv{'reqcrsotherdom.'.$crstype}) {
                               my @doms = split(',',$userenv{'reqcrsotherdom.'.$crstype});
                               if (grep(/^\Q$cdom\E:/,@doms)) {
                                   $cancreate = 1;
                               }
                           }
                       }
                       if ($cancreate) {
                         my $requestkey = $cdom.'_'.$cnum;                          my $requestkey = $cdom.'_'.$cnum;
                         my %history =                           my %history = 
                             &Apache::lonnet::restore($requestkey,'courserequests',                              &Apache::lonnet::restore($requestkey,'courserequests',
Line 531  sub update_request_queue { Line 546  sub update_request_queue {
                             push(@processing_errors,$cnum);                              push(@processing_errors,$cnum);
                         }                          }
                     } else {                      } else {
                         push(@processing_errors,$cnum);                          push(@nopermissions,$cnum);
                     }                      }
                 } else {                  } else {
                     push(@existing,$cnum);                      push(@existing,$cnum);
Line 546  sub update_request_queue { Line 561  sub update_request_queue {
         @changes = map {$_.'_approval'} (@changes);          @changes = map {$_.'_approval'} (@changes);
     }      }
     if (@rejections) {      if (@rejections) {
         foreach my $user (@rejections) {          foreach my $item (@rejections) {
             if ($context eq 'course') {              if ($context eq 'course') {
                   my $user = $item;
                 &send_selfserve_notification($user,$rejectedmsg,$cid,$coursedesc,                  &send_selfserve_notification($user,$rejectedmsg,$cid,$coursedesc,
                                              $now,$beneficiary,$sender);                                               $now,$beneficiary,$sender);
                 my ($uname,$udom) = split(/:/,$user);                  my ($uname,$udom) = split(/:/,$user);
Line 564  sub update_request_queue { Line 580  sub update_request_queue {
                     push(@warn_rejects,$user);                      push(@warn_rejects,$user);
                 }                  }
             } else {              } else {
                 if (ref($requesthash{$user.'_approval'}) eq 'HASH') {                  my $cnum = $item;
                     if (&Apache::lonnet::homeserver($user,$cdom) eq 'no_host') {                  if (ref($requesthash{$cnum.'_approval'}) eq 'HASH') {
                       if (&Apache::lonnet::homeserver($cnum,$cdom) eq 'no_host') {
                           my $requestkey = $cdom.'_'.$cnum;
                         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'};
Line 573  sub update_request_queue { Line 591  sub update_request_queue {
                                                      $cid,$coursedesc,$now,$beneficiary,                                                       $cid,$coursedesc,$now,$beneficiary,
                                                      $sender);                                                       $sender);
                         my %history =                          my %history =
                             &Apache::lonnet::restore($cdom.'_'.$cnum,'courserequests',                              &Apache::lonnet::restore($requestkey,'courserequests',
                                                      $ownerdom,$ownername);                                                       $ownerdom,$ownername);
                         if ((ref($history{'details'}) eq 'HASH') &&                          if ((ref($history{'details'}) eq 'HASH') &&
                             ($history{'disposition'} eq 'approval')) {                              ($history{'disposition'} eq 'approval')) {
Line 586  sub update_request_queue { Line 604  sub update_request_queue {
                                             adjudicator => $env{'user.name'}.':'.$env{'user.domain'},                                              adjudicator => $env{'user.name'}.':'.$env{'user.domain'},
                                               );                                                );
                             my $userresult =                              my $userresult =
                                  &Apache::lonnet::store_userdata($namespace,\%reqhash,$ownerdom,$ownername);                                  &Apache::lonnet::store_userdata(\%reqhash,$requestkey,
                             if ($userresult ne 'ok') {                                                  'courserequests',$ownerdom,$ownername);
                                 push(@warn_rejects,$user);                              if ($userresult eq 'ok') {
                                   my %status = (
                                                  'status:'.$cdom.':'.$cnum => 'rejected'
                                                );
                                   my $statusresult =
                                       &Apache::lonnet::put('courserequests',\%status,
                                                            $ownerdom,$ownername);
                                   if ($statusresult ne 'ok') {
                                       push(@warn_rejects,$cnum);
                                   }
                               } else {
                                   push(@warn_rejects,$cnum);
                             }                              }
                           } else {
                               push(@warn_rejects,$cnum);
                         }                          }
                       } else {
                           push(@existing,$cnum);
                     }                      }
                   } else {
                       push(@rejectionerrors,$cnum);
                 }                  }
             }              }
         }          }
Line 729  sub update_request_queue { Line 764  sub update_request_queue {
             $output .= '</ul></p>';              $output .= '</ul></p>';
         }          }
     }      }
       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>';
           foreach my $cnum (@nopermissions) {
               my $showcourse;
               if (ref($requesthash{$cnum.'_approval'})) {
                   $showcourse = $requesthash{$cnum.'_approval'}{'description'};
               } else {
                   $showcourse = $cnum;
               }
               $output .= '<li>'.$showcourse.'</li>';
           }
           $output .= '</ul></p>';
       }
     if (@processing_errors) {      if (@processing_errors) {
         if ($context eq 'course') {          if ($context eq 'course') {
             $output .= '<p>'.&mt('The following enrollment requests could not be processed because an error occurred:').'<ul>';              $output .= '<p>'.&mt('The following enrollment requests could not be processed because an error occurred:').'<ul>';
Line 750  sub update_request_queue { Line 798  sub update_request_queue {
             $output .= '</ul></p>';              $output .= '</ul></p>';
         }          }
     }      }
       if (@rejectionerrors) {
           $output .= '<p>'.&mt('The following course creation request rejections could not be fully processed because an error occurred:').'<ul>';
           foreach my $cnum (@rejectionerrors) {
               my $showcourse;
               if (ref($requesthash{$cnum.'_approval'})) {
                   $showcourse = $requesthash{$cnum.'_approval'}{'description'};
               } else {
                   $showcourse = $cnum;
               }
               $output .= '<li>'.$showcourse.'</li>';
           }
           $output .= '</ul></p>';
       }
     if (@warn_approves || @warn_rejects) {      if (@warn_approves || @warn_rejects) {
         if ($context eq 'course') {          if ($context eq 'course') {
             $output .= '<p>'.&mt("For the following users, an error occurred when updating the user's own self-enroll requests record:").'<ul>';              $output .= '<p>'.&mt("For the following users, an error occurred when updating the user's own self-enroll requests record:").'<ul>';
Line 818  sub course_creation { Line 879  sub course_creation {
         $owneremail = $emails{$email};          $owneremail = $emails{$email};
         last if ($owneremail ne '');          last if ($owneremail ne '');
     }      }
     my %reqdetails = &build_batchcreatehash($dom,$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);
Line 831  sub course_creation { Line 892  sub course_creation {
 }  }
   
 sub build_batchcreatehash {  sub build_batchcreatehash {
     my ($dom,$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 ((ref($details) eq 'HASH') && (ref($domdefs) eq 'HASH')) {      if ((ref($details) eq 'HASH') && (ref($domdefs) eq 'HASH')) {
Line 852  sub build_batchcreatehash { Line 913  sub build_batchcreatehash {
         } else {          } else {
             $batchhash{'crstype'} = 'Course';              $batchhash{'crstype'} = 'Course';
         }          }
         $batchhash{'users'}{$details->{$owner}} = {          my ($owner_firstname,$owner_lastname);
                                  firstname => $env{'environment.first'},          if ($context eq 'domain') {
                                  lastname  => $env{'environment.last'},              my %userenv = &Apache::lonnet::userenvironment($details->{'domain'},
                                  emailenc  => $emailenc,                                                             $details->{'owner'},
                                  email     => $owneremail,                                                             'firstname','lastname');
                              };              $owner_firstname = $userenv{'firstname'};
               $owner_lastname = $userenv{'lastname'};
           } else {
               $owner_firstname = $env{'environment.firstname'};
               $owner_lastname = $env{'environment.lastname'};
           }
           if (ref($details->{'personnel'}) eq 'HASH') {
               %{$batchhash{'users'}} = %{$details->{'personnel'}};
               if (ref($batchhash{'users'}) eq 'HASH') {  
                   foreach my $userkey (keys(%{$batchhash{'users'}})) {
                       if (ref($batchhash{'users'}{$userkey}) eq 'HASH') {
                           if (ref($batchhash{'users'}{$userkey}{'roles'}) eq 'ARRAY') {
                               foreach my $role (@{$batchhash{'users'}{$userkey}{'roles'}}) {
                                   my $start = '';
                                   my $end = '';
                                   if ($role eq 'st') {
                                       $start = $details->{'accessstart'};
                                       $end = $details->{'accessend'};
                                   }
                                   $batchhash{'users'}{$userkey}{$role}{'start'} = $start;
                                   $batchhash{'users'}{$userkey}{$role}{'end'} = $end;
                               } 
                           }
                       }
                   }
               }
           }
           $batchhash{'users'}{$owner}{firstname} = $owner_firstname;
           $batchhash{'users'}{$owner}{lastname} = $owner_lastname;
           $batchhash{'users'}{$owner}{emailenc} = $emailenc;
           $batchhash{'users'}{$owner}{owneremail} = $owneremail;
     }      }
     return %batchhash;      return %batchhash;
 }  }
   
   sub can_clone_course {
       my ($uname,$udom,$clonecrs,$clonedom) = @_;
       my $canclone;
       my %roleshash = &Apache::lonnet::get_my_roles($uname,$udom,'userroles',['active'],
                                                     ['cc'],[$clonedom]);
       if (exists($roleshash{$clonecrs.':'.$clonedom.':cc'})) {
           $canclone = 1;
       } else {
           my %courseenv = &Apache::lonnet::userenvironment($clonedom,$clonecrs,('cloners'));
           my $cloners = $courseenv{'cloners'};
           if ($cloners ne '') {
               my @cloneable = split(',',$cloners);
               if (grep(/^\*$/,@cloneable)) {
                   $canclone = 1;
               }
               if (grep(/^\*:\Q$udom\E$/,@cloneable)) {
                   $canclone = 1;
               }
               if (grep(/^\Q$uname\E:\Q$udom\E$/,@cloneable)) {
                   $canclone = 1;
               }
           }
       }
       return $canclone;
   }
   
 1;  1;

Removed from v.1.2  
changed lines
  Added in v.1.10


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