Diff for /loncom/interface/selfenroll.pm between versions 1.28 and 1.37

version 1.28, 2014/03/31 02:31:05 version 1.37, 2021/06/15 20:52:26
Line 221  sub handler { Line 221  sub handler {
     if ($sso_url eq '') {      if ($sso_url eq '') {
         $sso_url = $login_path;          $sso_url = $login_path;
     }      }
     $missing_formitem = &mt('The link to the requested page could not be followed.')."\\n".&mt('The placeholder for the courseID is absent.');      $missing_formitem = &mt('The link to the requested page could not be followed.')."\n".&mt('The placeholder for the courseID is absent.');
       &js_escape(\$missing_formitem);
     if ($knownuser) {      if ($knownuser) {
         if (keys(%curr_role)) {          if (keys(%curr_role)) {
             $r->print('<h3>'.&mt('Self-enrollment unavailable').'</h3>'.              $r->print('<h3>'.&mt('Self-enrollment unavailable').'</h3>'.
Line 232  sub handler { Line 233  sub handler {
         &process_self_enroll($r,$cdom,$cnum,$selfenroll_types,$selfenroll_registered,          &process_self_enroll($r,$cdom,$cnum,$selfenroll_types,$selfenroll_registered,
                              $selfenroll_access_start,$selfenroll_access_end,                               $selfenroll_access_start,$selfenroll_access_end,
                              $selfenroll_section,$now,$selfenroll_approval,                               $selfenroll_section,$now,$selfenroll_approval,
                              $selfenroll_notifylist,$owner,$crstype,$lonhost);                               $selfenroll_notifylist,$owner,$crstype,$lonhost,$handle);
     } elsif ($env{'form.phase'} eq 'login') {      } elsif ($env{'form.phase'} eq 'login') {
         my $submit_text = &mt('Log in');          my $submit_text = &mt('Log in');
         $r->print('<h3>'.&mt('Log-in to LON-CAPA').'</h3>');          $r->print('<h3>'.&mt('Log-in to LON-CAPA').'</h3>');
Line 410  sub has_role { Line 411  sub has_role {
 sub process_self_enroll {  sub process_self_enroll {
     my ($r,$cdom,$cnum,$selfenroll_types,$selfenroll_registered,      my ($r,$cdom,$cnum,$selfenroll_types,$selfenroll_registered,
         $selfenroll_access_start,$selfenroll_access_end,$selfenroll_section,          $selfenroll_access_start,$selfenroll_access_end,$selfenroll_section,
         $now,$selfenroll_approval,$selfenroll_notifylist,$owner,$crstype,$lonhost) = @_;          $now,$selfenroll_approval,$selfenroll_notifylist,$owner,$crstype,$lonhost,$handle) = @_;
     my $udom = $env{'user.domain'};      my $udom = $env{'user.domain'};
     my $uname = $env{'user.name'};      my $uname = $env{'user.name'};
     my $selfenroll = 0;      my $selfenroll = 0;
Line 437  sub process_self_enroll { Line 438  sub process_self_enroll {
         if ($selfenroll_section eq 'none') {          if ($selfenroll_section eq 'none') {
             $usec = '';              $usec = '';
         }          }
           my $instcid;
         if ($selfenroll_registered) {          if ($selfenroll_registered) {
             my ($registered,$instsec,$message) = &check_registered($cdom,$cnum);              my ($registered,$instsec,$instcid,$message) = &check_registered($cdom,$cnum);
             $usec = $instsec;              $usec = $instsec;
             if (!$registered) {              if (!$registered) {
                 $r->print('<h3>'.&mt('Self-enrollment unavailable').'</h3>'.                  $r->print('<h3>'.&mt('Self-enrollment unavailable').'</h3>'.
Line 453  sub process_self_enroll { Line 455  sub process_self_enroll {
         }          }
         if ($selfenroll_approval) {          if ($selfenroll_approval) {
             my $outcome =               my $outcome = 
                 &store_selfenroll_request($udom,$uname,$usec,$cdom,$cnum,                  &store_selfenroll_request($r,$udom,$uname,$usec,$cdom,$cnum,
                                           $selfenroll_notifylist,$owner,                                            $selfenroll_notifylist,$owner,
                                           $selfenroll_approval,$crstype,$lonhost);                                            $selfenroll_approval,$crstype,$lonhost,$handle);
             $r->print($outcome);              $r->print($outcome);
         } else {          } else {
             my $enrollresult =               my $enrollresult = 
                 &Apache::lonnet::modify_student_enrollment($udom,$uname,undef,undef,undef,                  &Apache::lonnet::modify_student_enrollment($udom,$uname,undef,undef,undef,
                         undef,undef,$usec,$selfenroll_access_end,$selfenroll_access_start,                          undef,undef,$usec,$selfenroll_access_end,$selfenroll_access_start,
                        'selfenroll',undef,$cdom.'_'.$cnum,$selfenroll);                         'selfenroll',undef,$cdom.'_'.$cnum,$selfenroll,'selfenroll','',$instcid);
             if ($enrollresult eq 'ok') {              if ($enrollresult eq 'ok') {
                 my (%userroles,%newrole,%newgroups);                  my (%userroles,%newrole,%newgroups);
                 my $role = 'st';                  my $role = 'st';
Line 533  sub user_can_selfenroll { Line 535  sub user_can_selfenroll {
 }  }
   
 sub store_selfenroll_request {  sub store_selfenroll_request {
     my ($udom,$uname,$usec,$cdom,$cnum,$selfenroll_notifylist,$owner,      my ($r,$udom,$uname,$usec,$cdom,$cnum,$selfenroll_notifylist,$owner,
         $selfenroll_approval,$crstype,$lonhost) = @_;          $selfenroll_approval,$crstype,$lonhost,$handle) = @_;
     my $namespace = 'selfenrollrequests';      my $namespace = 'selfenrollrequests';
     my $output;      my $output;
     my $now = time;      my $now = time;
     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}) {
         $output = &mt('A self-enrollment request already exists for you for this course.').'<br />'.          my $status;
                   &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 />';
                   '<br /><br />'.&Apache::loncoursequeueadmin::queued_selfenrollment();          my %info = &Apache::lonnet::get($namespace,[$cdom.'_'.$cnum],$udom,$uname);
           if (ref($info{$cdom.'_'.$cnum}) eq 'HASH') {
               $status = $info{$cdom.'_'.$cnum}{'status'};
           }
           if ($status eq 'pending') {
               my $token = $info{$cdom.'_'.$cnum}{'token'};
               my ($statusupdate,$pendingform) = &pending_selfenrollment_form($r,$cdom,$cnum,$crstype,$token,$lonhost);
               if ($statusupdate eq 'pending') {
                   $output .= $pendingform;
               }
           } else {
               $output .= &mt('Your earlier request is in a queue awaiting action by a Course Coordinator.').
                          '<br /><br />'.&Apache::loncoursequeueadmin::queued_selfenrollment();
           }
     } else {      } else {
         my %selfenroll = (          my %selfenroll = (
                             $uname.':'.$udom => $now.':'.$usec,                              $uname.':'.$udom => $now.':'.$usec,
Line 562  sub store_selfenroll_request { Line 577  sub store_selfenroll_request {
                                                    });                                                     });
             my $token;              my $token;
             if ($status eq 'pending') {              if ($status eq 'pending') {
                 $token = &Apache::lonnet::tmpput(\%selfenroll,$lonhost);;                  $token = &Apache::lonnet::tmpput(\%selfenroll,$lonhost);
                 $userenroll{$cdom.'_'.$cnum}{'token'} = $token;                  $userenroll{$cdom.'_'.$cnum}{'token'} = $token;
                   $userenroll{$cdom.'_'.$cnum}{'lonhost'} = $lonhost;
                   $userenroll{$cdom.'_'.$cnum}{'handle'} = $handle; 
             }               } 
             my $warning;              my $warning;
             my $userresult = &Apache::lonnet::put($namespace,\%userenroll,$udom,$uname);              my $userresult = &Apache::lonnet::put($namespace,\%userenroll,$udom,$uname);
Line 572  sub store_selfenroll_request { Line 589  sub store_selfenroll_request {
             }              }
             $output = &mt('Your request for self-enrollment has been recorded.').'<br />';              $output = &mt('Your request for self-enrollment has been recorded.').'<br />';
             if ($status eq 'pending') {              if ($status eq 'pending') {
                 my $coursetype = &Apache::lonuserutils::get_extended_type($cdom,$cnum,$crstype);                   my ($statusupdate,$pendingform) = &pending_selfenrollment_form($r,$cdom,$cnum,$crstype,$token,$lonhost);
                 my %postvalues = (                  if ($statusupdate eq 'request') {
                                    'username'   => $env{'user.name'},                      $status = $statusupdate;
                                    'domain'     => $env{'user.domain'},  
                                    'course'     => $cdom.'_'.$cnum,  
                                    'coursetype' => $coursetype,  
                                    'token'      => $token,  
                                  );  
                 my %domconfig = &Apache::lonnet::get_dom('configuration',['selfenrollment'],$cdom);  
                 if (ref($domconfig{'selfenrollment'}) eq 'HASH') {  
                     my ($url,$buttontext,$code,@fields);  
                     if (ref($domconfig{'selfenrollment'}{'validation'}) eq 'HASH') {  
                         my %courseinfo = &Apache::lonnet::coursedescription($cdom.'_'.$cnum,{ 'one_time' => 1});  
                         $postvalues{'uniquecode'} = $courseinfo{'internal.uniquecode'};  
                         $url = $domconfig{'selfenrollment'}{'validation'}{'url'};  
                         if (ref($domconfig{'selfenrollment'}{'validation'}{'fields'}) eq 'ARRAY') {  
                             @fields = @{$domconfig{'selfenrollment'}{'validation'}{'fields'}};  
                         }  
                         $buttontext = $domconfig{'selfenrollment'}{'validation'}{'button'};  
   
                         $output .= $domconfig{'selfenrollment'}{'validation'}{'markup'};  
                         if (($url =~ m{^(https?\://|/)}) && (@fields > 0)) {  
                             $output .= '<form name="selfenrollvalidation" action="'.$url.'" method="post">'."\n";  
                             foreach my $field (@fields) {  
                                 if ($postvalues{$field}) {  
                                     $output .= '<input type="hidden" name="'.$field.'" value="'.$postvalues{$field}.'" />'."\n";  
                                 }  
                             }  
                         }  
                         if ($buttontext eq '') {  
                             $buttontext = &mt('Complete my enrollment');  
                         }  
                         $output .= '<input type="submit" name="validate" value="'.$buttontext.'" />'."\n".  
                                    '</form>'."\n";  
                     }  
                 } else {                  } else {
                     $status eq 'request';                      $output .= $pendingform;
                 }                  }
             }              }
             if ($status eq 'request') {              if ($status eq 'request') {
Line 644  sub store_selfenroll_request { Line 629  sub store_selfenroll_request {
     return $output;      return $output;
 }  }
   
   sub pending_selfenrollment_form {
       my ($r,$cdom,$cnum,$crstype,$token,$lonhost) = @_;
       my ($status,$output);
       my $coursetype = &Apache::lonuserutils::get_extended_type($cdom,$cnum,$crstype);
       my %postvalues = (
                         'username'   => $env{'user.name'},
                         'domain'     => $env{'user.domain'},
                         'course'     => $cdom.'_'.$cnum,
                         'coursetype' => $coursetype,
                                    );
       my %domconfig = &Apache::lonnet::get_dom('configuration',['selfenrollment'],$cdom);
   
       if (ref($domconfig{'selfenrollment'}) eq 'HASH') {
           my ($url,$buttontext,$code,@fields);
           if (ref($domconfig{'selfenrollment'}{'validation'}) eq 'HASH') {
               my %courseinfo = &Apache::lonnet::coursedescription($cdom.'_'.$cnum,{ 'one_time' => 1});
               $postvalues{'uniquecode'} = $courseinfo{'internal.uniquecode'};
               $postvalues{'description'} = $courseinfo{'description'};
               $url = $domconfig{'selfenrollment'}{'validation'}{'url'};
               if (ref($domconfig{'selfenrollment'}{'validation'}{'fields'}) eq 'ARRAY') {
                   @fields = @{$domconfig{'selfenrollment'}{'validation'}{'fields'}};
               }
               $buttontext = $domconfig{'selfenrollment'}{'validation'}{'button'};
   
               $output .= $domconfig{'selfenrollment'}{'validation'}{'markup'};
               if (($url =~ m{^(https?\://|/)}) && (@fields > 0)) {
                   $output .= '<form name="selfenrollvalidation" action="'.$url.'" method="post">'."\n";
                   foreach my $field (@fields) {
                       if ($postvalues{$field}) {
                           $output .= '<input type="hidden" name="'.$field.'" value="'.$postvalues{$field}.'" />'."\n";
                       }
                   }
                   if ($buttontext eq '') {
                       $buttontext = &mt('Complete my enrollment');
                   }
                   my $hostname = &Apache::lonnet::hostname($lonhost);
                   my $protocol = $Apache::lonnet::protocol{$lonhost};
                   $protocol = 'http' if ($protocol ne 'https');
                   my $alias = &Apache::lonnet::use_proxy_alias($r,$lonhost);
                   $hostname = $alias if ($alias ne '');
                   my $enroller = $protocol.'://'.$hostname.'/cgi-bin/enrollqueued.pl';
                   $output .= '<input type="hidden" name="enroller" value="'.$enroller.'" />'."\n".
                              '<input type="hidden" name="token" value="'.$token.'" />'."\n".
                              '<input type="submit" name="validate" value="'.$buttontext.'" />'."\n".
                              '</form>'."\n";
                   $status = 'pending';
               } else {
                   $status = 'request';
               }
           }
       } else {
           $status = 'request';
       }
       return ($status,$output);
   }
   
 sub jump_to_role {  sub jump_to_role {
     my ($role) = @_;      my ($role) = @_;
     my $output = <<"END";      my $output = <<"END";
Line 748  sub print_selfenroll_types { Line 789  sub print_selfenroll_types {
   
 sub check_registered {  sub check_registered {
     my ($cdom,$cnum) = @_;      my ($cdom,$cnum) = @_;
     my ($registered,$instsec,$message);      my ($registered,$instsec,$instcid,$message);
     my %settings = &Apache::lonnet::get('environment',['internal.coursecode',      my %settings = &Apache::lonnet::get('environment',['internal.coursecode',
                                         'internal.sectionnums',                                          'internal.sectionnums',
                                         'internal.crosslistings'],$cdom,$cnum);                                          'internal.crosslistings'],$cdom,$cnum);
     my (@allcourses,%LC_code,%affiliates,%reply);      my (@allcourses,%LC_code,%affiliates,%reply);
     &Apache::loncommon::get_institutional_codes(\%settings,\@allcourses,\%LC_code);      &Apache::loncommon::get_institutional_codes($cdom,$cnum,\%settings,\@allcourses,\%LC_code);
     if (@allcourses > 0) {      if (@allcourses > 0) {
         @{$affiliates{$cnum}} = @allcourses;          @{$affiliates{$cnum}} = @allcourses;
         my $outcome = &Apache::lonnet::fetch_enrollment_query('updatenow',\%affiliates,\%reply,$cdom,$cnum);          my $outcome = &Apache::lonnet::fetch_enrollment_query('updatenow',\%affiliates,\%reply,$cdom,$cnum);
Line 768  sub check_registered { Line 809  sub check_registered {
                     if (defined($enrolled{$env{'user.name'}})) {                      if (defined($enrolled{$env{'user.name'}})) {
                         $registered = 1;                          $registered = 1;
                         $instsec = $LC_code{$class};                          $instsec = $LC_code{$class};
                           $instcid = $class;
                         last;                          last;
                     }                      }
                 }                  }
Line 780  sub check_registered { Line 822  sub check_registered {
     } else {      } else {
         $message = &mt('As no institutional course sections are currently associated with this course, your registration status is undetermined.');           $message = &mt('As no institutional course sections are currently associated with this course, your registration status is undetermined.'); 
     }      }
     return ($registered,$instsec,$message);      return ($registered,$instsec,$instcid,$message);
 }  }
   
 1;  1;

Removed from v.1.28  
changed lines
  Added in v.1.37


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