Diff for /loncom/interface/loncoursequeueadmin.pm between versions 1.25 and 1.26

version 1.25, 2010/12/08 03:38:46 version 1.26, 2011/03/06 21:17:15
Line 90  sub send_selfserve_notification { Line 90  sub send_selfserve_notification {
 # 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,$rawsubj,@rawmsg,$subject,$message,$reviewer,$msgtxt);
     my ($rawsubj,@rawmsg,$subject,$message,$reviewer,$msgtxt);      my ($senderuname,$senderudom) = split(':',$sender);
     if ($context eq 'coursemanagers') {      if ($context eq 'coursemanagers') {
         $rawsubj = 'Self-enrollment requests processed';          $rawsubj = 'Self-enrollment requests processed';
         push(@rawmsg,{          push(@rawmsg,{
Line 138  sub send_selfserve_notification { Line 138  sub send_selfserve_notification {
         if (ref($textstr) eq 'ARRAY') {          if (ref($textstr) eq 'ARRAY') {
             push(@rawmsg,@{$textstr});              push(@rawmsg,@{$textstr});
         }          }
       } elsif ($context eq 'pendingrequestor') {
           if ($crstype eq 'Community') {
               $rawsubj = 'Community request';
           } else {
               $rawsubj = 'Processed course request';
           }
           if (ref($textstr) eq 'ARRAY') {
               push(@rawmsg,@{$textstr});
           }
     } elsif ($context eq 'coursereq') {      } elsif ($context eq 'coursereq') {
         if ($crstype eq 'community') {          if ($crstype eq 'community') {
             $rawsubj = 'Community request to review';              $rawsubj = 'Community request to review';
Line 213  sub send_selfserve_notification { Line 222  sub send_selfserve_notification {
             $message .= &Apache::lonlocal::mt_user($sender_lh,$item->{mt},@{$item->{args}})."\n";              $message .= &Apache::lonlocal::mt_user($sender_lh,$item->{mt},@{$item->{args}})."\n";
         }          }
     }      }
     &Apache::lonmsg::process_sent_mail($subject,'',$numsent,$stamp,$uname,$udom,$msgcount,$cid,$$,$message,\@recusers,\@recudoms);      &Apache::lonmsg::process_sent_mail($subject,'',$numsent,$stamp,$uname,$udom,$msgcount,$cid,$$,$message,\@recusers,\@recudoms,undef,undef,undef,undef,$senderuname,$senderudom);
     my ($recipid,$recipstatus) = &Apache::lonmsg::store_recipients($subject,$uname,$udom,\%reciphash);      my ($recipid,$recipstatus) = &Apache::lonmsg::store_recipients($subject,$uname,$udom,\%reciphash);
     my $status;      my $status;
     foreach my $recip (sort(keys(%{$msgcc}))) {      foreach my $recip (sort(keys(%{$msgcc}))) {
Line 446  sub build_queue_display { Line 455  sub build_queue_display {
 sub update_request_queue {  sub update_request_queue {
     my ($context,$cdom,$cnum,$coursedesc) = @_;      my ($context,$cdom,$cnum,$coursedesc) = @_;
     my ($output,$access_start,$access_end,$limit,$cap,$notifylist,$namespace,      my ($output,$access_start,$access_end,$limit,$cap,$notifylist,$namespace,
         $stucounts,$idx,$classlist,%requesthash,$cid,$hostname,$protocol,          $stucounts,$idx,$classlist,%requesthash,$cid,$domdesc,$now,
         $domdesc,$now,$sender,$approvedmsg,$rejectedmsg,$beneficiary,          $sender,$approvedmsg,$rejectedmsg,$beneficiary,
         @existing,@missingreq,@invalidusers,@limitexceeded,@completed,          @existing,@missingreq,@invalidusers,@limitexceeded,@completed,
         @processing_errors,@warn_approves,@warn_rejects,@approvals,@warn_dels,          @processing_errors,@warn_approves,@warn_rejects,@approvals,@warn_dels,
         @rejections,@rejectionerrors,@nopermissions,%courseroles,          @rejections,@rejectionerrors,@nopermissions,%courseroles,
Line 461  sub update_request_queue { Line 470  sub update_request_queue {
         $beneficiary = 'enroller';          $beneficiary = 'enroller';
         $cid = $env{'request.course.id'};          $cid = $env{'request.course.id'};
         $crstype = lc(&Apache::loncommon::course_type());          $crstype = lc(&Apache::loncommon::course_type());
         my $chome = &Apache::lonnet::homeserver($cnum,$cdom);          $firsturl = &course_portal_url($cnum,$cdom);
         $hostname = &Apache::lonnet::hostname($chome);  
         $protocol = $Apache::lonnet::protocol{$chome};  
         $protocol = 'http' if ($protocol ne 'https');  
         my %domdefaults = &Apache::lonnet::get_domain_defaults($cdom);  
         if ($domdefaults{'portal_def'}) {  
             $firsturl = $domdefaults{'portal_def'};  
         } else {  
             $firsturl = $protocol.'://'.$hostname;  
         }  
         %requesthash = &Apache::lonnet::dump($namespace,$cdom,$cnum);          %requesthash = &Apache::lonnet::dump($namespace,$cdom,$cnum);
         $access_start =  $env{'course.'.$cid.'.internal.selfenroll_start_access'};          $access_start =  $env{'course.'.$cid.'.internal.selfenroll_start_access'};
         $access_end =  $env{'course.'.$cid.'.internal.selfenroll_end_access'};          $access_end =  $env{'course.'.$cid.'.internal.selfenroll_end_access'};
Line 497  sub update_request_queue { Line 497  sub update_request_queue {
             $queue = 'pending';              $queue = 'pending';
         }          }
         %requesthash = &Apache::lonnet::dump_dom($namespace,$cdom,'_'.$queue);          %requesthash = &Apache::lonnet::dump_dom($namespace,$cdom,'_'.$queue);
         my $chome = &Apache::lonnet::domain($cdom,'primary');          $firsturl= &course_portal_url($cnum,$cdom);
         $hostname = &Apache::lonnet::hostname($chome);  
         $protocol = $Apache::lonnet::protocol{$chome};  
         $protocol = 'http' if ($protocol ne 'https');  
         my %domdefaults = &Apache::lonnet::get_domain_defaults($cdom);  
         if ($domdefaults{'portal_def'}) {  
             $firsturl = $domdefaults{'portal_def'};  
         } else {  
             $firsturl = $protocol.'://'.$hostname;  
         }  
         my %domconfig = &Apache::lonnet::get_dom('configuration',['requestcourses'],$cdom);          my %domconfig = &Apache::lonnet::get_dom('configuration',['requestcourses'],$cdom);
         if (ref($domconfig{'requestcourses'}) eq 'HASH') {          if (ref($domconfig{'requestcourses'}) eq 'HASH') {
             if (ref($domconfig{'requestcourses'}{'notify'}) eq 'HASH') {               if (ref($domconfig{'requestcourses'}{'notify'}) eq 'HASH') { 
Line 588  sub update_request_queue { Line 579  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,undef,undef,$crstype);                                         $cid,$coursedesc,$now,$beneficiary,$sender,
                                          undef,undef,$crstype);
                         my %userrequest = (                          my %userrequest = (
                             $cdom.'_'.$cnum => {                              $cdom.'_'.$cnum => {
                                 timestamp   => $now,                                  timestamp   => $now,
Line 658  sub update_request_queue { Line 650  sub update_request_queue {
                                 unless (&Apache::lonnet::del_dom($namespace,[$cnum.'_'.$queue],$cdom) eq 'ok') {                                  unless (&Apache::lonnet::del_dom($namespace,[$cnum.'_'.$queue],$cdom) eq 'ok') {
                                     push(@warn_dels,$cnum);                                      push(@warn_dels,$cnum);
                                 }                                  }
                                 &send_selfserve_notification($ownername.':'.$ownerdom,$approvedmsg,                                  &send_selfserve_notification($ownername.':'.$ownerdom,
                                               $cid,$coursedesc,$now,$beneficiary,$sender,undef,undef,$crstype);                                                $approvedmsg,$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 712  sub update_request_queue { Line 705  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,undef,undef,$crstype);                                               $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 1008  sub update_request_queue { Line 1002  sub update_request_queue {
     return $output;      return $output;
 }  }
   
   sub course_portal_url {
       my ($cnum,$cdom) = @_;
       my $chome = &Apache::lonnet::homeserver($cnum,$cdom);
       my $hostname = &Apache::lonnet::hostname($chome);
       my $protocol = $Apache::lonnet::protocol{$chome};
       $protocol = 'http' if ($protocol ne 'https');
       my %domdefaults = &Apache::lonnet::get_domain_defaults($cdom);
       my $firsturl;
       if ($domdefaults{'portal_def'}) {
           $firsturl = $domdefaults{'portal_def'};
       } else {
           $firsturl = $protocol.'://'.$hostname;
       }
       return $firsturl;
   }
   
 sub get_student_counts {  sub get_student_counts {
     my ($cdom,$cnum) = @_;      my ($cdom,$cnum) = @_;
     my (%idx,%stucounts);      my (%idx,%stucounts);
Line 1295  sub queued_selfenrollment { Line 1305  sub queued_selfenrollment {
 }  }
   
 sub update_coursereq_status {  sub update_coursereq_status {
     my ($reqhash,$dom,$cnum,$reqstatus,$context) = @_;      my ($reqhash,$dom,$cnum,$reqstatus,$context,$udom,$uname) = @_;
     my ($storeresult,$statusresult,$output);      my ($storeresult,$statusresult,$output);
     my $requestkey = $dom.'_'.$cnum;      my $requestkey = $dom.'_'.$cnum;
     if ($requestkey =~ /^($match_domain)_($match_courseid)$/) {      if ($requestkey =~ /^($match_domain)_($match_courseid)$/) {
         $storeresult = &Apache::lonnet::store_userdata($reqhash,$requestkey,          $storeresult = &Apache::lonnet::store_userdata($reqhash,$requestkey,
                                                        'courserequests');                                                         'courserequests',$udom,$uname);
         if ($storeresult eq 'ok') {          if ($storeresult eq 'ok') {
             my %status = (              my %status = (
                              'status:'.$dom.':'.$cnum => $reqstatus,                               'status:'.$dom.':'.$cnum => $reqstatus,
                          );                           );
             $statusresult = &Apache::lonnet::put('courserequests',\%status);              $statusresult = &Apache::lonnet::put('courserequests',\%status,$udom,$uname);
         }          }
     } else {      } else {
         $storeresult = 'error: invalid requestkey format';          $storeresult = 'error: invalid requestkey format';
Line 1317  sub update_coursereq_status { Line 1327  sub update_coursereq_status {
         } else {          } else {
             $output =  '<span class="LC_warning">'.$output.'</span><br />';              $output =  '<span class="LC_warning">'.$output.'</span><br />';
         }          }
         &Apache::lonnet::logthis("Error saving course request - $requestkey for $env{'user.name'}:$env{'user.domain'} - $storeresult");          &Apache::lonnet::logthis("Error saving course request - $requestkey for $uname:$udom - $storeresult");
     } elsif ($statusresult ne 'ok') {      } elsif ($statusresult ne 'ok') {
         $output = &mt('An error occurred saving a record of the status of your request: [_1].',$statusresult);          $output = &mt('An error occurred saving a record of the status of your request: [_1].',$statusresult);
         if ($context eq 'domain') {          if ($context eq 'domain') {
Line 1325  sub update_coursereq_status { Line 1335  sub update_coursereq_status {
         } else {          } else {
             $output = '<span class="LC_warning">'.$output.'</span><br />';              $output = '<span class="LC_warning">'.$output.'</span><br />';
         }          }
         &Apache::lonnet::logthis("Error saving course request status for $requestkey (for $env{'user.name'}:$env{'user.domain'}) - $statusresult");          &Apache::lonnet::logthis("Error saving course request status for $requestkey (for $uname:$udom) - $statusresult");
     }      }
     return ($storeresult,$output);      return ($storeresult,$output);
 }  }
   
 sub process_official_reqs {  sub process_official_reqs {
     my ($context,$dom) = @_;      my ($context,$dom,$dcname,$dcdom) = @_;
     my $reqsnamespace = 'courserequestqueue';      my $reqsnamespace = 'courserequestqueue';
     my %requesthash =      my %requesthash =
         &Apache::lonnet::dump_dom($reqsnamespace,$dom,'_pending');          &Apache::lonnet::dump_dom($reqsnamespace,$dom,'_pending');
Line 1409  sub process_official_reqs { Line 1419  sub process_official_reqs {
                     if ($result eq 'created') {                      if ($result eq 'created') {
                         $disposition = 'created';                          $disposition = 'created';
                         $reqstatus = 'created';                          $reqstatus = 'created';
                         push(@{$newcids{$instcode}},$dom.'_'.$cnum);                          my $cid = $dom.'_'.$cnum;
                           push(@{$newcids{$instcode}},$cid);
                           if ($dcname && $dcdom) {
                               my $firsturl = &course_portal_url($cnum,$dom);
                               my $beneficiary = 'pendingrequestor';
                               my $now = time;
                               my $owner = $ownername.':'.$ownerdom;
                               my $approvedmsg =
                                   [{
                                       mt => 'Your request course, queued pending validation has now been created.',
                                    },
                                    {
                                       mt   => 'Visit [_1], to log-in and access the course.',
                                       args => [$firsturl],
                                    }];
                               my $sender = $dcname.':'.$dcdom;
                               &send_selfserve_notification($owner,$approvedmsg,
                                                            $cid,$cdescr,$now,
                                                            $beneficiary,$sender,
                                                            undef,undef,$crstype);
                           }
                     }                      }
                 } elsif ($disposition eq 'rejected') {                  } elsif ($disposition eq 'rejected') {
                     $output .= &mt('Queued course request for [_1] submitted by [_2] with status [_3] rejected when validating.',$instcode,$ownername.':'.$ownerdom,$inststatus).$linefeed;                      $output .= &mt('Queued course request for [_1] submitted by [_2] with status [_3] rejected when validating.',$instcode,$ownername.':'.$ownerdom,$inststatus).$linefeed;
Line 1445  sub process_official_reqs { Line 1475  sub process_official_reqs {
                 unless ($disposition eq 'pending') {                  unless ($disposition eq 'pending') {
                     my ($statusresult,$output) =                      my ($statusresult,$output) =
                         &update_coursereq_status(\%requesthash,$dom,$cnum,                          &update_coursereq_status(\%requesthash,$dom,$cnum,
                                                  $reqstatus,'domain');                                                   $reqstatus,'domain',$ownerdom,
                                                    $ownername);
                     unless (&Apache::lonnet::del_dom($reqsnamespace,[$cnum.'_pending'],$dom) eq 'ok') {                      unless (&Apache::lonnet::del_dom($reqsnamespace,[$cnum.'_pending'],$dom) eq 'ok') {
                         $output .= &mt('An error occurred when removing the request for [_1] submitted by [_2] from the pending queue.',$instcode,$ownername.':'.$ownerdom).$linefeed;                          $output .= &mt('An error occurred when removing the request for [_1] submitted by [_2] from the pending queue.',$instcode,$ownername.':'.$ownerdom).$linefeed;
                     }                      }

Removed from v.1.25  
changed lines
  Added in v.1.26


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