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

version 1.27.2.8, 2021/12/14 12:53:12 version 1.28, 2014/03/31 02:31:05
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 233  sub handler { Line 232  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,$handle);                               $selfenroll_notifylist,$owner,$crstype,$lonhost);
     } 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 350  sub enrollment_limit_check { Line 349  sub enrollment_limit_check {
 sub page_header {  sub page_header {
     my ($r,$courseid,$js,$desc) = @_;      my ($r,$courseid,$js,$desc) = @_;
     my $start_page =      my $start_page =
         &Apache::loncommon::start_page('Self-enroll in a LON-CAPA course',$js,          &Apache::loncommon::start_page('Self-enroll in a LON-CAPA course',$js);
                                        {'no_inline_link'   => 1,});  
     $r->print($start_page);      $r->print($start_page);
     &Apache::lonhtmlcommon::clear_breadcrumbs();      &Apache::lonhtmlcommon::clear_breadcrumbs();
     &Apache::createaccount::selfenroll_crumbs($r,$courseid,$desc);      &Apache::createaccount::selfenroll_crumbs($r,$courseid,$desc);
Line 412  sub has_role { Line 410  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,$handle) = @_;          $now,$selfenroll_approval,$selfenroll_notifylist,$owner,$crstype,$lonhost) = @_;
     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 439  sub process_self_enroll { Line 437  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,$instcid,$message) = &check_registered($cdom,$cnum);              my ($registered,$instsec,$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 456  sub process_self_enroll { Line 453  sub process_self_enroll {
         }          }
         if ($selfenroll_approval) {          if ($selfenroll_approval) {
             my $outcome =               my $outcome = 
                 &store_selfenroll_request($r,$udom,$uname,$usec,$cdom,$cnum,                  &store_selfenroll_request($udom,$uname,$usec,$cdom,$cnum,
                                           $selfenroll_notifylist,$owner,                                            $selfenroll_notifylist,$owner,
                                           $selfenroll_approval,$crstype,$lonhost,$handle);                                            $selfenroll_approval,$crstype,$lonhost);
             $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','',$instcid);                         'selfenroll',undef,$cdom.'_'.$cnum,$selfenroll);
             if ($enrollresult eq 'ok') {              if ($enrollresult eq 'ok') {
                 my (%userroles,%newrole,%newgroups);                  my (%userroles,%newrole,%newgroups);
                 my $role = 'st';                  my $role = 'st';
Line 536  sub user_can_selfenroll { Line 533  sub user_can_selfenroll {
 }  }
   
 sub store_selfenroll_request {  sub store_selfenroll_request {
     my ($r,$udom,$uname,$usec,$cdom,$cnum,$selfenroll_notifylist,$owner,      my ($udom,$uname,$usec,$cdom,$cnum,$selfenroll_notifylist,$owner,
         $selfenroll_approval,$crstype,$lonhost,$handle) = @_;          $selfenroll_approval,$crstype,$lonhost) = @_;
     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}) {
         my $status;          $output = &mt('A self-enrollment request already exists for you for this course.').'<br />'.
         $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.').
         my %info = &Apache::lonnet::get($namespace,[$cdom.'_'.$cnum],$udom,$uname);                    '<br /><br />'.&Apache::loncoursequeueadmin::queued_selfenrollment();
         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 578  sub store_selfenroll_request { Line 562  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 590  sub store_selfenroll_request { Line 572  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 ($statusupdate,$pendingform) = &pending_selfenrollment_form($r,$cdom,$cnum,$crstype,$token,$lonhost);                  my $coursetype = &Apache::lonuserutils::get_extended_type($cdom,$cnum,$crstype); 
                 if ($statusupdate eq 'request') {                  my %postvalues = (
                     $status = $statusupdate;                                     'username'   => $env{'user.name'},
                                      '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 {
                     $output .= $pendingform;                      $status eq 'request';
                 }                  }
             }              }
             if ($status eq 'request') {              if ($status eq 'request') {
Line 630  sub store_selfenroll_request { Line 644  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 790  sub print_selfenroll_types { Line 748  sub print_selfenroll_types {
   
 sub check_registered {  sub check_registered {
     my ($cdom,$cnum) = @_;      my ($cdom,$cnum) = @_;
     my ($registered,$instsec,$instcid,$message);      my ($registered,$instsec,$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($cdom,$cnum,\%settings,\@allcourses,\%LC_code);      &Apache::loncommon::get_institutional_codes(\%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 810  sub check_registered { Line 768  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 823  sub check_registered { Line 780  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,$instcid,$message);      return ($registered,$instsec,$message);
 }  }
   
 1;  1;

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


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