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

version 1.2, 2009/08/16 19:16:16 version 1.6, 2009/08/24 20:08:36
Line 77  sub send_selfserve_notification { Line 77  sub send_selfserve_notification {
         $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 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 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 862  sub build_batchcreatehash { Line 923  sub build_batchcreatehash {
     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{$clonedom.':'.$clonecrs.':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.6


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