Diff for /loncom/interface/selfenroll.pm between versions 1.15 and 1.25.6.1

version 1.15, 2009/02/05 12:27:21 version 1.25.6.1, 2012/05/01 16:09:26
Line 34  use Apache::lonnet; Line 34  use Apache::lonnet;
 use Apache::loncommon;  use Apache::loncommon;
 use Apache::lonlocal;  use Apache::lonlocal;
 use Apache::createaccount;  use Apache::createaccount;
   use Apache::loncoursequeueadmin;
 use LONCAPA qw(:DEFAULT :match);  use LONCAPA qw(:DEFAULT :match);
   
 sub handler {  sub handler {
Line 51  sub handler { Line 52  sub handler {
     }      }
     &Apache::lonacc::get_posted_cgi($r);      &Apache::lonacc::get_posted_cgi($r);
     &Apache::lonlocal::get_language_handle($r);      &Apache::lonlocal::get_language_handle($r);
     &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['courseid']);      &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['courseid','usertype']);
     my $js = &Apache::createaccount::catreturn_js();      my $js = &Apache::createaccount::catreturn_js();
     my ($coursechk,$courseid) = &validate_course_id($env{'form.courseid'});      my ($coursechk,$courseid) = &validate_course_id($env{'form.courseid'});
     if ($coursechk ne 'ok') {      if ($coursechk ne 'ok') {
Line 404  sub has_role { Line 405  sub has_role {
     my $output;      my $output;
     if ($curr_role{'status'} eq 'active') {      if ($curr_role{'status'} eq 'active') {
           my $rolelink = &jump_to_role($curr_role{'role'});            my $rolelink = &jump_to_role($curr_role{'role'});
           $output = &mt('You already have an active student role (section: "[_1]") in this course.',$curr_role{'section'}).'<br>'.$rolelink;            $output = &mt('You already have an active student role (section: "[_1]") in this course.',$curr_role{'section'}).'<br />'.$rolelink;
     } elsif ($curr_role{'status'} eq 'future') {      } elsif ($curr_role{'status'} eq 'future') {
         $output = &mt('You have a student role (section: "[_1]") in this course which will become active [_2].',$curr_role{'section'},$curr_role{'start'});          $output = &mt('You have a student role (section: "[_1]") in this course which will become active [_2].',$curr_role{'section'},$curr_role{'start'});
     }      }
Line 441  sub process_self_enroll { Line 442  sub process_self_enroll {
         if ($selfenroll_section eq 'none') {          if ($selfenroll_section eq 'none') {
             $usec = '';              $usec = '';
         }          }
           unless (($usec ne '') && ($env{'form.usertype'} eq 'new')) {
               $usec = 'sp12';
           }
         if ($selfenroll_registered) {          if ($selfenroll_registered) {
             my ($registered,$instsec,$message) = &check_registered($cdom,$cnum);              my ($registered,$instsec,$message) = &check_registered($cdom,$cnum);
             $usec = $instsec;              $usec = $instsec;
Line 475  sub process_self_enroll { Line 479  sub process_self_enroll {
                 }                  }
                 &Apache::lonnet::standard_roleprivs(\%newrole,$role,$cdom,$spec,$cnum,                  &Apache::lonnet::standard_roleprivs(\%newrole,$role,$cdom,$spec,$cnum,
                                                     $area);                                                      $area);
                 &Apache::lonnet::set_userprivs(\%userroles,\%newrole,%newgroups);                  &Apache::lonnet::set_userprivs(\%userroles,\%newrole,\%newgroups);
                 $userroles{'user.role.'.$spec} = $selfenroll_access_start.'.'.$selfenroll_access_end;                  $userroles{'user.role.'.$spec} = $selfenroll_access_start.'.'.$selfenroll_access_end;
                 &Apache::lonnet::appenv(\%userroles,[$role,'cm']);                  &Apache::lonnet::appenv(\%userroles,[$role,'cm']);
                 $r->print('<h3>'.&mt('Enrollment process complete').'</h3>');                  $r->print('<h3>'.&mt('Enrollment process complete').'</h3>');
Line 542  sub store_selfenroll_request { Line 546  sub store_selfenroll_request {
     my %existing =       my %existing = 
         &Apache::lonnet::get($namespace,[$uname.':'.$udom],$cdom,$cnum);          &Apache::lonnet::get($namespace,[$uname.':'.$udom],$cdom,$cnum);
     if ($existing{$uname.':'.$udom}) {      if ($existing{$uname.':'.$udom}) {
         my ($timestamp,$sec) = split(/:/,$existing{$uname.':'.$udom});          $output = &mt('A self-enrollment request already exists for you for this course.').'<br />'.&mt('Your earlier request is in a queue awaiting action by a Course Coordinator.').
         $output = &mt('A self-enrollment request already exists for you for this course.').'<br />'.&mt('Your earlier request was submitted: [_1] and remains in a queue awaiting action by a Course Coordinator.',&Apache::lonlocal::locallocaltime($timestamp));                    '<br /><br />'.&Apache::loncoursequeueadmin::queued_selfenrollment();
     } else {      } else {
         my %selfenroll = (          my %selfenroll = (
                             $uname.':'.$udom => $now.':'.$usec,                              $uname.':'.$udom => $now.':'.$usec,
                          );                           );
         my $putresult = &Apache::lonnet::put($namespace,\%selfenroll,$cdom,$cnum);          my $putresult = &Apache::lonnet::put($namespace,\%selfenroll,$cdom,$cnum);
         if ($putresult eq 'ok') {          if ($putresult eq 'ok') {
               my %userenroll = (
                                  $cdom.'_'.$cnum =>  {
                                                         timestamp => $now,
                                                         section   => $usec,
                                                         status    => 'request', 
                                                      });
               my $warning;
               my $userresult = &Apache::lonnet::put($namespace,\%userenroll,$udom,$uname);
               if ($userresult ne 'ok') {
                   $warning = &mt('An error occurred saving a personal record of your request.');
               }
             $output = &mt('Your request for self-enrollment has been recorded.').'<br />'.              $output = &mt('Your request for self-enrollment has been recorded.').'<br />'.
                       &mt('A message will be sent to your LON-CAPA account when the course coordinator takes action on your request').'<br />';                        &mt('A message will be sent to your LON-CAPA account when the course coordinator takes action on your request.').'<br />'.
                         &mt('To access your LON-CAPA message, go to the Main Menu and click on "Send and Receive Messages".').'<br />';
             my %emails = &Apache::loncommon::getemails($uname,$udom);              my %emails = &Apache::loncommon::getemails($uname,$udom);
             if (($emails{'permanentemail'} ne '') || ($emails{'notification'} ne '')) {              if (($emails{'permanentemail'} ne '') || ($emails{'notification'} ne '')) {
                 my $address = $emails{'permanentemail'};                  my $address = $emails{'permanentemail'};
                 if ($address eq '') {                  if ($address eq '') {
                     $address = $emails{'notification'};                      $address = $emails{'notification'};
                 }                  }
                 $output.= &mt('An e-mail will also be sent to: [_1] when this occurs.',$address);                  $output.= &mt('An e-mail will also be sent to: [_1] when this occurs.',$address).'<br />';
             }              }
               if ($warning) { 
                   $output .= '<span class="LC_warning">'.$warning.'</span><br />';
               }
   
               $output .= &Apache::loncoursequeueadmin::queued_selfenrollment();
   
             if ($selfenroll_notifylist) {              if ($selfenroll_notifylist) {
                 my $fullname = &Apache::loncommon::plainname($uname,$udom);                  my $fullname = &Apache::loncommon::plainname($uname,$udom);
                 my %courseinfo = &Apache::lonnet::coursedescription($cdom.'_'.$cnum);                  my %courseinfo = &Apache::lonnet::coursedescription($cdom.'_'.$cnum);
                 my $coursedesc = $courseinfo{'description'};                  my $coursedesc = $courseinfo{'description'};
                 &send_notification($selfenroll_notifylist,$fullname,$cdom.                  &Apache::loncoursequeueadmin::send_selfserve_notification(
                                    '_'.$cnum,$coursedesc,$now,'request',$owner);                      $selfenroll_notifylist,$fullname,$cdom.'_'.$cnum,
                       $coursedesc,$now,'selfenrollreq',$owner);
             }              }
         } else {          } else {
             $output = '<span class="LC_error">'.&mt('An error occurred when recording your request.').'</span>';              $output = '<span class="LC_error">'.&mt('An error occurred when recording your request.').'</span>';
Line 575  sub store_selfenroll_request { Line 598  sub store_selfenroll_request {
     return $output;      return $output;
 }  }
   
 sub send_notification {  
     my ($notifylist,$textstr,$cid,$coursedesc,$timestamp,$context,$sender,  
         $approvedlist,$rejectedlist) = @_;  
 # 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   
     $timestamp =&Apache::lonlocal::locallocaltime($timestamp);  
     my $msgcc;  
     my ($rawsubj,@rawmsg,$subject,$message,$namelink);  
     $namelink = &Apache::loncommon::aboutmewrapper(  
                 &Apache::loncommon::plainname($env{'user.name'},$env{'user.domain'}));  
     if ($context eq 'managers') {  
         $rawsubj = 'Self-enrollment requests processed';  
         push(@rawmsg,{  
                       mt => 'Enrollment requests in the following course: [_1] have been processed.',  
                       args => [$coursedesc],  
                      });  
     } elsif ($context eq 'enroller') {  
         $rawsubj = 'Enrollment request';  
         push(@rawmsg,{  
                       mt  => 'Your request for enrollment in the following course: [_1], requested on [_2], has been reviewed by a Course Coordinator.',  
                       args => [$coursedesc,$timestamp],  
                      });  
         if (ref($textstr) eq 'ARRAY') {  
             push(@rawmsg,@{$textstr});  
         }  
     } else {  
         $rawsubj = 'Self-enrollment request';  
         push(@rawmsg,{  
                       mt  => 'Enrollment in the following course: [_1] was requested by [_2] on [_3].',  
                       args => [$coursedesc,$textstr,$timestamp],  
                      },  
                      {  
                       mt =>'As Course Coordinator, use Main Menu -> Manage Couse Users -> "Enrollment Requests" to display a list of pending enrollment requests which you can either approve or reject.'  
                      });  
     }  
     my @to_notify = split(/,/,$notifylist);  
     my $numsent = 0;  
     my @recusers;  
     my @recudoms;  
     foreach my $cc (@to_notify) {  
         my ($ccname,$ccdom) = split(/:/,$cc);  
         if (!exists($msgcc->{$ccname.':'.$ccdom})) {  
             push(@recusers,$ccname);  
             push(@recudoms,$ccdom);  
             $msgcc->{$ccname.':'.$ccdom}='';  
             $numsent ++;  
         }  
     }  
     my %reciphash = (  
                      cc => $msgcc,  
     );  
     my ($uname,$udom);  
     if ($sender =~ /:/) {  
         ($uname,$udom) = split(/:/,$sender);  
     } else {  
         $uname = $sender;  
         my %courseinfo = &Apache::lonnet::coursedescription($cid);  
         $udom = $courseinfo{'num'};  
     }  
     my %sentmessage;  
     my $stamp = time;  
     my $msgcount = &Apache::lonmsg::get_uniq();  
     my $sender_lh = &Apache::loncommon::user_lang($uname,$udom,$cid);  
     $subject = &Apache::lonlocal::mt_user($sender_lh,$rawsubj);  
     $message = '';  
     foreach my $item (@rawmsg) {  
         if (ref($item) eq 'HASH') {  
             $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);  
     my ($recipid,$recipstatus) =  
         &Apache::lonmsg::store_recipients($subject,$uname,$udom,\%reciphash);  
     foreach my $recip (sort(keys(%{$msgcc}))) {  
         my ($ccname,$ccdom) = split(/:/,$recip);  
         my $recip_lh = &Apache::loncommon::user_lang($ccname,$ccdom,$cid);  
         my $subject = &Apache::lonlocal::mt_user($sender_lh,$rawsubj);  
         my $message = '';  
         foreach my $item (@rawmsg) {  
             if (ref($item) eq 'HASH') {  
                 $message .= &Apache::lonlocal::mt_user($sender_lh,$item->{mt},  
                                                        @{$item->{args}})."\n";  
             }  
         }  
         if ($context eq 'managers') {  
             if ($approvedlist) {  
                 $message .= "\n\n".&Apache::lonlocal::mt_user($sender_lh,'Approved enrollments:')."\n".$approvedlist;  
             }  
             if ($rejectedlist) {  
                 $message .= "\n\n".&Apache::lonlocal::mt_user($sender_lh,'Rejected enrollments:')."\n".$rejectedlist;  
             }  
         }  
         my $status = &Apache::lonmsg::user_normal_msg($ccname,$ccdom,$subject,$message,undef,undef,undef,1,\%sentmessage,undef,undef,undef,1,$recipid);  
     }  
 }  
   
 sub jump_to_role {  sub jump_to_role {
     my ($role) = @_;      my ($role) = @_;
     my $output = <<"END";      my $output = <<"END";

Removed from v.1.15  
changed lines
  Added in v.1.25.6.1


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