--- loncom/interface/selfenroll.pm 2014/04/04 23:06:32 1.30 +++ loncom/interface/selfenroll.pm 2014/04/06 14:11:01 1.31 @@ -1,7 +1,7 @@ # The LearningOnline Network # Allow users to self-enroll in a course # -# $Id: selfenroll.pm,v 1.30 2014/04/04 23:06:32 raeburn Exp $ +# $Id: selfenroll.pm,v 1.31 2014/04/06 14:11:01 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -541,9 +541,22 @@ sub store_selfenroll_request { my %existing = &Apache::lonnet::get($namespace,[$uname.':'.$udom],$cdom,$cnum); if ($existing{$uname.':'.$udom}) { - $output = &mt('A self-enrollment request already exists for you for this course.').'
'. - &mt('Your earlier request is in a queue awaiting action by a Course Coordinator.'). - '

'.&Apache::loncoursequeueadmin::queued_selfenrollment(); + my $status; + $output = &mt('A self-enrollment request already exists for you for this course.').'
'; + 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($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.'). + '

'.&Apache::loncoursequeueadmin::queued_selfenrollment(); + } } else { my %selfenroll = ( $uname.':'.$udom => $now.':'.$usec, @@ -574,51 +587,11 @@ sub store_selfenroll_request { } $output = &mt('Your request for self-enrollment has been recorded.').'
'; if ($status eq 'pending') { - 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, - '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'}; - $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 .= '
'."\n"; - foreach my $field (@fields) { - if ($postvalues{$field}) { - $output .= ''."\n"; - } - } - if ($buttontext eq '') { - $buttontext = &mt('Complete my enrollment'); - } - my $protocol = $Apache::lonnet::protocol{$lonhost}; - $protocol = 'http' if ($protocol ne 'https'); - my $enroller = $protocol.'://'.&Apache::lonnet::hostname($lonhost).'/cgi-bin/enrollqueued.pl'; - $output .= ''."\n". - ''."\n". - '
'."\n"; - } else { - $status = 'request'; - } - } + my ($statusupdate,$pendingform) = &pending_selfenrollment_form($cdom,$cnum,$crstype,$token,$lonhost); + if ($statusupdate eq 'request') { + $status = $statusupdate; } else { - $status = 'request'; + $output .= $pendingform; } } if ($status eq 'request') { @@ -654,6 +627,59 @@ sub store_selfenroll_request { return $output; } +sub pending_selfenrollment_form { + my ($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 .= '
'."\n"; + foreach my $field (@fields) { + if ($postvalues{$field}) { + $output .= ''."\n"; + } + } + if ($buttontext eq '') { + $buttontext = &mt('Complete my enrollment'); + } + my $protocol = $Apache::lonnet::protocol{$lonhost}; + $protocol = 'http' if ($protocol ne 'https'); + my $enroller = $protocol.'://'.&Apache::lonnet::hostname($lonhost).'/cgi-bin/enrollqueued.pl'; + $output .= ''."\n". + ''."\n". + ''."\n". + '
'."\n"; + $status = 'pending'; + } else { + $status = 'request'; + } + } + } else { + $status = 'request'; + } + return ($status,$output); +} + sub jump_to_role { my ($role) = @_; my $output = <<"END";