--- loncom/auth/lonroles.pm 2009/05/22 17:57:03 1.225 +++ loncom/auth/lonroles.pm 2009/06/11 19:02:27 1.226 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # User Roles Screen # -# $Id: lonroles.pm,v 1.225 2009/05/22 17:57:03 bisitz Exp $ +# $Id: lonroles.pm,v 1.226 2009/06/11 19:02:27 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -202,6 +202,10 @@ sub handler { my $now=time; my $then=$env{'user.login.time'}; + my $refresh=$env{'user.refresh.time'}; + if (!$refresh) { + $refresh = $then; + } my $envkey; my %dcroles = (); my $numdc = &check_fordc(\%dcroles,$then); @@ -304,7 +308,7 @@ sub handler { foreach $envkey (keys %env) { next if ($envkey!~/^user\.role\./); my ($where,$trolecode,$role,$tstatus,$tend,$tstart); - &Apache::lonnet::role_status($envkey,$then,$now,\$role,\$where, + &Apache::lonnet::role_status($envkey,$then,$refresh,$now,\$role,\$where, \$trolecode,\$tstatus,\$tstart,\$tend); if ($env{'form.'.$trolecode}) { if ($tstatus eq 'is') { @@ -676,173 +680,14 @@ ENDHEADER $r->print(''); $r->print(''); } - my (%roletext,%sortrole,%roleclass); - my $countactive=0; - my $countfuture=0; - my $countwill=0; - my $inrole=0; - my $possiblerole=''; - my %futureroles; - my %roles_nextlogin; - my %timezones; - foreach $envkey (sort keys %env) { - my $button = 1; - my $switchserver=''; - my ($roletext,$roletext_end); - my $sortkey; - if ($envkey=~/^user\.role\./) { - my ($role,$where,$trolecode,$tstart,$tend,$tremark,$tstatus,$tpstart,$tpend); - &Apache::lonnet::role_status($envkey,$then,$now,\$role,\$where, - \$trolecode,\$tstatus,\$tstart,\$tend); - next if (!defined($role) || $role eq '' || $role =~ /^gr/); - my $timezone = &role_timezone($where,\%timezones); - $tremark=''; - $tpstart=' '; - $tpend=' '; - if ($tstart) { - $tpstart=&Apache::lonlocal::locallocaltime($tstart,$timezone); - } - if ($tend) { - $tpend=&Apache::lonlocal::locallocaltime($tend,$timezone); - } - if ($env{'request.role'} eq $trolecode) { - $tstatus='selected'; - } - my $tbg; - if (($tstatus eq 'is') - || ($tstatus eq 'selected') - || ($tstatus eq 'will') - || ($tstatus eq 'future') - || ($env{'form.showall'})) { - if ($tstatus eq 'is') { - $tbg='LC_roles_is'; - $possiblerole=$trolecode; - $countactive++; - } elsif ($tstatus eq 'future') { - $tbg='LC_roles_future'; - $button=0; - $futureroles{$trolecode} = $tstart.':'.$tend; - $countfuture ++; - } elsif ($tstatus eq 'will') { - $tbg='LC_roles_will'; - $tremark.=&mt('Active at next login.').' '; - $roles_nextlogin{$trolecode} = $tstart.':'.$tend; - $countwill ++; - } elsif ($tstatus eq 'expired') { - $tbg='LC_roles_expired'; - $button=0; - } elsif ($tstatus eq 'will_not') { - $tbg='LC_roles_will_not'; - $tremark.=&mt('Expired after logout.').' '; - } elsif ($tstatus eq 'selected') { - $tbg='LC_roles_selected'; - $inrole=1; - $countactive++; - $tremark.=&mt('Currently selected.').' '; - } - my $trole; - if ($role =~ /^cr\//) { - my ($rdummy,$rdomain,$rauthor,$rrole)=split(/\//,$role); - if ($tremark) { $tremark.='
'; } - $tremark.=&mt('Defined by [_1] at [_2].',$rauthor,$rdomain); - } - $trole=Apache::lonnet::plaintext($role); - my $ttype; - my $twhere; - my ($tdom,$trest,$tsection)= - split(/\//,Apache::lonnet::declutter($where)); - # First, Co-Authorship roles - if (($role eq 'ca') || ($role eq 'aa')) { - my $home = &Apache::lonnet::homeserver($trest,$tdom); - my $allowed=0; - my @ids=&Apache::lonnet::current_machine_ids(); - foreach my $id (@ids) { if ($id eq $home) { $allowed=1; } } - if (!$allowed) { - $button=0; - $switchserver='otherserver='.$home.'&role='.$trolecode; - } - #next if ($home eq 'no_host'); - $home = &Apache::lonnet::hostname($home); - $ttype='Construction Space'; - $twhere=&mt('User').': '.$trest.'
'.&mt('Domain'). - ': '.$tdom.'
'. - ' '.&mt('Server').': '.$home; - $env{'course.'.$tdom.'_'.$trest.'.description'}='ca'; - $tremark.=&Apache::lonhtmlcommon::authorbombs('/res/'.$tdom.'/'.$trest.'/'); - $sortkey=$role."$trest:$tdom"; - } elsif ($role eq 'au') { - # Authors - my $home = &Apache::lonnet::homeserver - ($env{'user.name'},$env{'user.domain'}); - my $allowed=0; - my @ids=&Apache::lonnet::current_machine_ids(); - foreach my $id (@ids) { if ($id eq $home) { $allowed=1; } } - if (!$allowed) { - $button=0; - $switchserver='otherserver='.$home.'&role='.$trolecode; - } - #next if ($home eq 'no_host'); - $home = &Apache::lonnet::hostname($home); - $ttype='Construction Space'; - $twhere=&mt('Domain').': '.$tdom.'
'.&mt('Server'). - ': '.$home; - $env{'course.'.$tdom.'_'.$trest.'.description'}='ca'; - $tremark.=&Apache::lonhtmlcommon::authorbombs('/res/'.$tdom.'/'.$env{'user.name'}.'/'); - $sortkey=$role; - } elsif ($trest) { - my $tcourseid=$tdom.'_'.$trest; - $ttype = &Apache::loncommon::course_type($tcourseid); - $trole = &Apache::lonnet::plaintext($role,$ttype); - if ($env{'course.'.$tcourseid.'.description'}) { - $twhere=$env{'course.'.$tcourseid.'.description'}; - $sortkey=$role."\0".$tdom."\0".$twhere."\0".$envkey; - unless ($twhere eq &mt('Currently not available')) { - $twhere.=' '. - &Apache::loncommon::syllabuswrapper(&mt('Syllabus'),$trest,$tdom). - ''; - } - } else { - my %newhash=&Apache::lonnet::coursedescription($tcourseid); - if (%newhash) { - $sortkey=$role."\0".$tdom."\0".$newhash{'description'}. - "\0".$envkey; - $twhere=$newhash{'description'}. - ' '. - &Apache::loncommon::syllabuswrapper(&mt('Syllabus'),$trest,$tdom). - ''; - $ttype = $newhash{'type'}; - $trole = &Apache::lonnet::plaintext($role,$ttype); - } else { - $twhere=&mt('Currently not available'); - $env{'course.'.$tcourseid.'.description'}=$twhere; - $sortkey=$role."\0".$tdom."\0".$twhere."\0".$envkey; - $ttype = 'Unavailable'; - } - } - if ($tsection) { - $twhere.='
'.&mt('Section').': '.$tsection; - } - if ($role ne 'st') { $twhere.="
".&mt('Domain').":".$tdom; } - } elsif ($tdom) { - $ttype='Domain'; - $twhere=$tdom; - $sortkey=$role.$twhere; - } else { - $ttype='System'; - $twhere=&mt('system wide'); - $sortkey=$role.$twhere; - } - ($roletext,$roletext_end) = - &build_roletext($trolecode,$tdom,$trest,$tstatus,$tryagain, - $advanced,$tremark,$tbg,$trole,$twhere,$tpstart, - $tpend,$nochoose,$button,$switchserver,$reinit); - $roletext{$envkey}=[$roletext,$roletext_end]; - if (!$sortkey) {$sortkey=$twhere."\0".$envkey;} - $sortrole{$sortkey}=$envkey; - $roleclass{$envkey}=$ttype; - } - } - } + + my (%roletext,%sortrole,%roleclass,%futureroles,%timezones); + my ($countactive,$countfuture,$inrole,$possiblerole) = + &gather_roles($then,$refresh,$now,$reinit,$nochoose,\%roletext,\%sortrole,\%roleclass, + \%futureroles,\%timezones); + + $refresh = $now; + &Apache::lonnet::appenv({'user.refresh.time' => $refresh}); if ($env{'user.adv'}) { $r->print( '