--- loncom/interface/lonrequestcourse.pm 2009/08/31 14:57:06 1.27 +++ loncom/interface/lonrequestcourse.pm 2009/09/06 19:09:54 1.29 @@ -1,7 +1,7 @@ # The LearningOnline Network # Request a course # -# $Id: lonrequestcourse.pm,v 1.27 2009/08/31 14:57:06 raeburn Exp $ +# $Id: lonrequestcourse.pm,v 1.29 2009/09/06 19:09:54 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -102,8 +102,6 @@ described at http://www.lon-capa.org. =item check_autolimit() -=item build_batchcreatehash() - =item retrieve_settings() =item get_request_settings() @@ -1254,7 +1252,6 @@ sub print_personnel_menu { if ($env{'form.addperson'}) { $persontotal ++; } - my $userlinktxt = &mt('Set User'); my @items = ('uname','dom','lastname','firstname','emailaddr','hidedom'); my $roleoptions; @@ -1264,14 +1261,13 @@ sub print_personnel_menu { $type = 'Community'; } foreach my $role (@roles) { - my $plrole=&Apache::lonnet::plaintext($role,$type); + my $plrole = &Apache::lonnet::plaintext($role,$type); $roleoptions .= ' '."\n"; } my %customroles=&Apache::lonuserutils::my_custom_roles(); if (keys(%customroles) > 0) { foreach my $cust (sort(keys(%customroles))) { - my $custrole='cr_cr_'.$env{'user.domain'}. - '_'.$env{'user.name'}.'_'.$cust; + my $custrole="cr/$env{'user.domain'}/$env{'user.name'}/$cust"; $roleoptions .= ' '."\n"; } } @@ -1314,16 +1310,12 @@ sub print_personnel_menu { for (my $i=0; $i<$persontotal; $i++) { my @linkargs = map { 'person_'.$i.'_'.$_ } (@items); my $linkargstr = join("','",@linkargs); - my $userlink = &Apache::loncommon::selectuser_link($formname,@linkargs,$dom,$userlinktxt); - my $uname_form = ''; + my $uname_form = ''; my $onchange = 'javascript:fix_domain('."'$formname','person_".$i."_dom',". - "'person_".$i."_hidedom'".');'. - 'openuserbrowser('."'$formname','$linkargstr','$dom'".');'; + "'person_".$i."_hidedom','person_".$i."_uname'".');'; my $udom_form = &Apache::loncommon::select_dom_form($dom,'person_'.$i.'_dom','', 1,$onchange). - ''; + ''; my %form_elems; foreach my $item (@items) { next if (($item eq 'dom') || ($item eq 'uname') || ($item eq 'hidedom')); @@ -1339,12 +1331,19 @@ sub print_personnel_menu { } $sectionselector .= $newtitle. ''."\n"; + my $usersrchlinktxt = &mt('Search for user'); + my $usersrchlink = &Apache::loncommon::selectuser_link($formname,@linkargs,$dom, + $usersrchlinktxt); + my $userchklinktxt = &mt('Check username'); + my $userchklink = &Apache::loncommon::selectuser_link($formname,@linkargs,$dom, + $userchklinktxt,'checkusername'); $output .= - &Apache::lonhtmlcommon::row_title(&mt('Additional Personnel').'
'. - ''.$userlink. - ''). - ''."\n". - ''."\n". + &Apache::lonhtmlcommon::row_title(&mt('Additional Personnel')). + '
'.&mt('Username').'
'.$uname_form.'
'.&mt('Domain').'
'.$udom_form.'
'."\n". + ''. + ''."\n".''. ''."\n". ''."\n". ''."\n". @@ -1778,13 +1777,13 @@ sub print_review { if ($env{'form.person_'.$i.'_role'} eq 'cc') { $showsec = &mt('None'); } + my $role = $env{'form.person_'.$i.'_role'}; $personnel_values .= ''. ''. - ''. + ''. ''; } } @@ -1890,8 +1889,7 @@ sub clone_form { my %lt = &clone_text(); my $output .= &Apache::lonhtmlcommon::row_title($lt{'cid'}).''.&Apache::lonhtmlcommon::row_closure(1).''. $cloneform.''.&Apache::lonhtmlcommon::row_closure(1). @@ -2324,9 +2322,10 @@ sub print_request_outcome { if ($result eq 'created') { $disposition = 'created'; $reqstatus = 'created'; - $output = &mt('Your course request has been processed and the course has been created.'). - '
'. - &mt('You will need to logout and log-in again to be able to select a role in the course.'); + my $role_result = &update_requestors_roles($dom,$cnum,$crstype,$details, + \%longroles); + $output = '

'.&mt('Your course request has been processed and the course has been created.'). + '
'.$role_result.'

'; $creationresult = 'created'; } else { $output = ''. @@ -2393,7 +2392,7 @@ sub print_request_outcome { $output .= ''.&mt('An error occurred saving a record of the details of your request: [_1].',$storeresult).'
'; &Apache::lonnet::logthis("Error saving course request - $requestkey for $env{'user.name'}:$env{'user.domain'} - $storeresult"); } elsif ($statusresult ne 'ok') { - $output .= ''.&mt('An error occurred saving a record of the status of your request: [_1].',$statusresult).'
'; + $output .= ''.&mt('An error occurred saving a record of the status of your request: [_1].',$statusresult).'
'; &Apache::lonnet::logthis("Error saving course request status for $requestkey (for $env{'user.name'}:$env{'user.domain'}) - $statusresult"); } if ($modified && $queued && $storeresult eq 'ok') { @@ -2411,6 +2410,113 @@ sub print_request_outcome { } } +sub update_requestors_roles { + my ($dom,$cnum,$crstype,$details,$longroles) = @_; + my $now = time; + my ($active,$future,$numactive,$numfuture,$output); + my $owner = $env{'user.name'}.':'.$env{'user.domain'}; + if (ref($details) eq 'HASH') { + if (ref($details->{'personnel'}) eq 'HASH') { + if (ref($details->{'personnel'}{$owner}) eq 'HASH') { + my @roles; + if (ref($details->{'personnel'}{$owner}{'roles'}) eq 'ARRAY') { + @roles = sort(@{$details->{'personnel'}{$owner}{'roles'}}); + unless (grep(/^cc$/,@roles)) { + push(@roles,'cc'); + } + } else { + @roles = ('cc'); + } + foreach my $role (@roles) { + my $start = $now; + my $end = '0'; + if ($role eq 'st') { + if ($details->{'accessstart'} ne '') { + $start = $details->{'accessstart'}; + } + if ($details->{'accessend'} ne '') { + $end = $details->{'accessend'}; + } + } + my @usecs; + if ($role ne 'cc') { + if (ref($details->{'personnel'}{$owner}{$role}{'usec'}) eq 'ARRAY') { + @usecs = @{$details->{'personnel'}{$owner}{$role}{'usec'}}; + } + } + if ($role eq 'st') { + if (@usecs > 1) { + my $firstsec = $usecs[0]; + @usecs = ($firstsec); + } + } + if (@usecs == 0) { + push(@usecs,''); + } + foreach my $usec (@usecs) { + my (%userroles,%newrole,%newgroups,$spec,$area); + my $area = '/'.$dom.'/'.$cnum; + my $spec = $role.'.'.$area; + if ($usec ne '') { + $spec .= '/'.$usec; + $area .= '/'.$usec; + } + if ($role =~ /^cr\//) { + &Apache::lonnet::custom_roleprivs(\%newrole,$role,$dom, + $cnum,$spec,$area); + } else { + &Apache::lonnet::standard_roleprivs(\%newrole,$role,$dom, + $spec,$cnum,$area); + } + &Apache::lonnet::set_userprivs(\%userroles,\%newrole, + \%newgroups); + $userroles{'user.role.'.$spec} = $start.'.'.$end; + &Apache::lonnet::appenv(\%userroles,[$role,'cm']); + if (($end == 0) || ($end > $now)) { + my $showrole = $role; + if ($role =~ /^cr\//) { + $showrole = &Apache::lonnet::plaintext($role,$crstype); + } elsif (ref($longroles) eq 'HASH') { + if ($longroles->{$role} ne '') { + $showrole = $longroles->{$role}; + } + } + if ($start <= $now) { + $active .= '
  • '.$showrole; + if ($usec ne '') { + $active .= ' - '.&mt('section:').' '.$usec; + } + $active .= '
  • '; + $numactive ++; + } else { + $future .= '
  • '.$showrole; + if ($usec ne '') { + $future .= ' - '.&mt('section:').' '.$usec; + } + $future .= '
  • '; + $numfuture ++; + } + } + } + } + } + } + } + if ($active) { + if ($numactive == 1) { + $output = &mt('Use the following link to enter the course:'); + } else { + $output = &mt('Use the following links to your new roles to enter the course:'); + } + $output .= '
    '; + } + if ($future) { + $output .= &mt('The following course [quant,_1,role] will become available for selection from your [_2]roles page[_3], once the default student access start date - [_4] - has been reached:',$numfuture,'','',&Apache::lonlocal::locallocaltime($details->{'accessstart'})). + ' '; + } + return $output; +} + sub notification_information { my ($disposition,$req_notifylist,$cnum,$now) = @_; my %emails = &Apache::loncommon::getemails();
    '.$usersrchlink.''. + &mt('Username').': '.$uname_form.' '.$userchklink.'
    '."\n". + ''.&mt('Domain').': '.$udom_form.'
    '.&mt('First Name').'
    '.$form_elems{'firstname'}.'
    '.&mt('Last Name').'
    '.$form_elems{'lastname'}.'
    '.&mt('E-mail').'
    '.$form_elems{'emailaddr'}.'
    '.$env{'form.person_'.$i.'_firstname'}.' '. $env{'form.person_'.$i.'_lastname'}.''.$env{'form.person_'.$i.'_uname'}.':'. $env{'form.person_'.$i.'_dom'}.''.&Apache::lonnet::plaintext($env{'form.person_'.$i.'_role'}, - $container).''.&Apache::lonnet::plaintext($role,$container).''.$showsec.'