--- loncom/interface/selfenroll.pm 2008/03/08 04:26:12 1.1 +++ loncom/interface/selfenroll.pm 2008/06/30 17:04:11 1.6 @@ -1,7 +1,7 @@ # The LearningOnline Network # Allow users to self-enroll in a course # -# $Id: selfenroll.pm,v 1.1 2008/03/08 04:26:12 raeburn Exp $ +# $Id: selfenroll.pm,v 1.6 2008/06/30 17:04:11 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -66,7 +66,7 @@ sub handler { return OK; } my ($cdom,$cnum,$canenroll,$selfenroll_types,$selfenroll_registered, - $cancreate,$knownuser,$selfenroll_access_start,$selfenroll_access_end, + @cancreate,$knownuser,$selfenroll_access_start,$selfenroll_access_end, $selfenroll_section,%curr_role,%coursehash); my $now = time; %coursehash = &Apache::lonnet::coursedescription($cid); @@ -122,7 +122,7 @@ sub handler { $r->print(&Apache::loncommon::end_page()); return OK; } - $cancreate = &can_create($cdom); + @cancreate = &can_create($cdom); my ($login_path,$firsturl,$create_path,$sso_url,$missing_formitem); $login_path = '/adm/login'; $firsturl= '/adm/selfenroll?cid='.$cid; @@ -140,7 +140,7 @@ sub handler { &process_self_enroll($r,$cdom,$cnum,$selfenroll_types,$selfenroll_registered, $selfenroll_access_start,$selfenroll_access_end, $selfenroll_section,$now); - } elsif ($cancreate) { + } elsif (@cancreate > 0) { $r->print(< function setPath(formaction,item,arg) { @@ -167,14 +167,33 @@ function getIndexByName(item) { END $r->print(&mt('You need to be logged into LON-CAPA to self-enroll in a course.').''); @@ -221,19 +240,23 @@ sub user_is_known { sub can_create { my ($cdom) = @_; - my $cancreate = ''; + my @cancreate; my %domconfig = &Apache::lonnet::get_dom('configuration',['usercreation'],$cdom); if (ref($domconfig{'usercreation'}) eq 'HASH') { if (ref($domconfig{'usercreation'}{'cancreate'}) eq 'HASH') { if ($domconfig{'usercreation'}{'cancreate'}{'selfcreate'} ne 'none') { - $cancreate = $domconfig{'usercreation'}{'cancreate'}{'selfcreate'}; + if (ref($domconfig{'usercreation'}{'cancreate'}{'selfcreate'}) eq 'ARRAY') { + @cancreate = @{$domconfig{'usercreation'}{'cancreate'}{'selfcreate'}}; + } else { + if (($domconfig{'usercreation'}{'cancreate'}{'selfcreate'} ne 'none') && + ($domconfig{'usercreation'}{'cancreate'}{'selfcreate'} ne '')) { + @cancreate = ($domconfig{'usercreation'}{'cancreate'}{'selfcreate'}); + } + } } } } - if ($cancreate eq 'none') { - $cancreate = ''; - } - return $cancreate; + return @cancreate; } sub has_role { @@ -257,9 +280,12 @@ sub process_self_enroll { my %userhash = &Apache::lonnet::userenvironment($udom,$uname,@info); my ($enrolltypes,$longtypes,$alldoms) = &get_selfenroll_filters($selfenroll_types,$udom); - my @inststatuses = &unescape(split(/:/,$userhash{'inststatus'})); - if (@inststatuses == 0) { - push(@inststatuses,'other'); + my @inststatuses; + if ($userhash{'inststatus'} eq '') { + push(@inststatuses,'other'); + } else { + my @esc_statuses = split(/:/,$userhash{'inststatus'}); + @inststatuses = map { &unescape($_); } (@esc_statuses); } my $selfenroll = 0; if ($alldoms) { @@ -287,7 +313,7 @@ sub process_self_enroll { my ($registered,$instsec,$message) = &check_registered($cdom,$cnum); $usec = $instsec; if (!$registered) { - $r->print(&mt('Self-enrollment is restricted to officially registered students.').'
'); + $r->print(&mt('Self-enrollment is restricted to students officially registered for this course.').'
'); if ($message) { $r->print($message); } else { @@ -298,7 +324,8 @@ sub process_self_enroll { } my $enrollresult = &Apache::lonnet::modify_student_enrollment($udom,$uname,undef,undef,undef, - undef,undef,$usec,$selfenroll_access_end,$selfenroll_access_start, 'manual',undef,$cdom.'_'.$cnum,$selfenroll); + undef,undef,$usec,$selfenroll_access_end,$selfenroll_access_start, + 'manual',undef,$cdom.'_'.$cnum,$selfenroll); if ($enrollresult eq 'ok') { my (%userroles,%newrole,%newgroups); my $role = 'st'; @@ -312,7 +339,7 @@ sub process_self_enroll { $area); &Apache::lonnet::set_userprivs(\%userroles,\%newrole,%newgroups); $userroles{'user.role.'.$spec} = $selfenroll_access_start.'.'.$selfenroll_access_end; - &Apache::lonnet::appenv(%userroles); + &Apache::lonnet::appenv(\%userroles,[$role]); if ($selfenroll_access_end && $selfenroll_access_end <= $now) { $r->print(&mt('The end date for access to this course for users who self-enroll has passed.').'
'.&mt('Consequently, although a new role was created for you in the course, it is an inactive role which does not provide access to the course.')); } else { @@ -408,7 +435,7 @@ sub print_selfenroll_types { } } } else { - $output = &mt('Self-enrollment in this course is only available to users in the following domains (with the following status): ').'