version 1.225, 2009/05/22 17:57:03
|
version 1.226, 2009/06/11 19:02:27
|
Line 202 sub handler {
|
Line 202 sub handler {
|
|
|
my $now=time; |
my $now=time; |
my $then=$env{'user.login.time'}; |
my $then=$env{'user.login.time'}; |
|
my $refresh=$env{'user.refresh.time'}; |
|
if (!$refresh) { |
|
$refresh = $then; |
|
} |
my $envkey; |
my $envkey; |
my %dcroles = (); |
my %dcroles = (); |
my $numdc = &check_fordc(\%dcroles,$then); |
my $numdc = &check_fordc(\%dcroles,$then); |
Line 304 sub handler {
|
Line 308 sub handler {
|
foreach $envkey (keys %env) { |
foreach $envkey (keys %env) { |
next if ($envkey!~/^user\.role\./); |
next if ($envkey!~/^user\.role\./); |
my ($where,$trolecode,$role,$tstatus,$tend,$tstart); |
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); |
\$trolecode,\$tstatus,\$tstart,\$tend); |
if ($env{'form.'.$trolecode}) { |
if ($env{'form.'.$trolecode}) { |
if ($tstatus eq 'is') { |
if ($tstatus eq 'is') { |
Line 676 ENDHEADER
|
Line 680 ENDHEADER
|
$r->print('<input type="hidden" name="selectrole" value="1" />'); |
$r->print('<input type="hidden" name="selectrole" value="1" />'); |
$r->print('<input type="hidden" name="newrole" value="" />'); |
$r->print('<input type="hidden" name="newrole" value="" />'); |
} |
} |
my (%roletext,%sortrole,%roleclass); |
|
my $countactive=0; |
my (%roletext,%sortrole,%roleclass,%futureroles,%timezones); |
my $countfuture=0; |
my ($countactive,$countfuture,$inrole,$possiblerole) = |
my $countwill=0; |
&gather_roles($then,$refresh,$now,$reinit,$nochoose,\%roletext,\%sortrole,\%roleclass, |
my $inrole=0; |
\%futureroles,\%timezones); |
my $possiblerole=''; |
|
my %futureroles; |
$refresh = $now; |
my %roles_nextlogin; |
&Apache::lonnet::appenv({'user.refresh.time' => $refresh}); |
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.='<br />'; } |
|
$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.'<br />'.&mt('Domain'). |
|
': '.$tdom.'<br />'. |
|
' '.&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.'<br />'.&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.=' <span class="LC_fontsize_small">'. |
|
&Apache::loncommon::syllabuswrapper(&mt('Syllabus'),$trest,$tdom). |
|
'</span>'; |
|
} |
|
} else { |
|
my %newhash=&Apache::lonnet::coursedescription($tcourseid); |
|
if (%newhash) { |
|
$sortkey=$role."\0".$tdom."\0".$newhash{'description'}. |
|
"\0".$envkey; |
|
$twhere=$newhash{'description'}. |
|
' <span class="LC_fontsize_small">'. |
|
&Apache::loncommon::syllabuswrapper(&mt('Syllabus'),$trest,$tdom). |
|
'</span>'; |
|
$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.='<br />'.&mt('Section').': '.$tsection; |
|
} |
|
if ($role ne 'st') { $twhere.="<br />".&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; |
|
} |
|
} |
|
} |
|
if ($env{'user.adv'}) { |
if ($env{'user.adv'}) { |
$r->print( |
$r->print( |
'<p><label>'.&mt('Show all roles').': <input type="checkbox" name="showall"'); |
'<p><label>'.&mt('Show all roles').': <input type="checkbox" name="showall"'); |
Line 988 ENDHEADER
|
Line 833 ENDHEADER
|
return OK; |
return OK; |
} |
} |
|
|
|
sub gather_roles { |
|
my ($then,$refresh,$now,$reinit,$nochoose,$roletext,$sortrole,$roleclass,$futureroles,$timezones) = @_; |
|
my ($countactive,$countfuture,$inrole,$possiblerole) = (0,0,0,''); |
|
my $advanced = $env{'user.adv'}; |
|
my $tryagain = $env{'form.tryagain'}; |
|
foreach my $envkey (sort(keys(%env))) { |
|
my $button = 1; |
|
my $switchserver=''; |
|
my ($role_text,$role_text_end,$sortkey); |
|
if ($envkey=~/^user\.role\./) { |
|
my ($role,$where,$trolecode,$tstart,$tend,$tremark,$tstatus,$tpstart,$tpend); |
|
&Apache::lonnet::role_status($envkey,$then,$refresh,$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 '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 '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.='<br />'; } |
|
$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.'<br />'.&mt('Domain'). |
|
': '.$tdom.'<br />'. |
|
' '.&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.'<br />'.&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.=' <span class="LC_fontsize_small">'. |
|
&Apache::loncommon::syllabuswrapper(&mt('Syllabus'),$trest,$tdom). |
|
'</span>'; |
|
} |
|
} else { |
|
my %newhash=&Apache::lonnet::coursedescription($tcourseid); |
|
if (%newhash) { |
|
$sortkey=$role."\0".$tdom."\0".$newhash{'description'}. |
|
"\0".$envkey; |
|
$twhere=$newhash{'description'}. |
|
' <span class="LC_fontsize_small">'. |
|
&Apache::loncommon::syllabuswrapper(&mt('Syllabus'),$trest,$tdom). |
|
'</span>'; |
|
$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.='<br />'.&mt('Section').': '.$tsection; |
|
} |
|
if ($role ne 'st') { $twhere.="<br />".&mt('Domain').":".$tdom; } |
|
} elsif ($tdom) { |
|
$ttype='Domain'; |
|
$twhere=$tdom; |
|
$sortkey=$role.$twhere; |
|
} else { |
|
$ttype='System'; |
|
$twhere=&mt('system wide'); |
|
$sortkey=$role.$twhere; |
|
} |
|
($role_text,$role_text_end) = |
|
&build_roletext($trolecode,$tdom,$trest,$tstatus,$tryagain, |
|
$advanced,$tremark,$tbg,$trole,$twhere,$tpstart, |
|
$tpend,$nochoose,$button,$switchserver,$reinit); |
|
$roletext->{$envkey}=[$role_text,$role_text_end]; |
|
if (!$sortkey) {$sortkey=$twhere."\0".$envkey;} |
|
$sortrole->{$sortkey}=$envkey; |
|
$roleclass->{$envkey}=$ttype; |
|
} |
|
} |
|
} |
|
return ($countactive,$countfuture,$inrole,$possiblerole); |
|
} |
|
|
sub role_timezone { |
sub role_timezone { |
my ($where,$timezones) = @_; |
my ($where,$timezones) = @_; |
my $timezone; |
my $timezone; |