--- loncom/auth/lonroles.pm 2001/08/06 11:16:32 1.28
+++ loncom/auth/lonroles.pm 2002/08/08 19:29:30 1.40
@@ -1,15 +1,47 @@
# The LearningOnline Network with CAPA
# User Roles Screen
+#
+# $Id: lonroles.pm,v 1.40 2002/08/08 19:29:30 matthew Exp $
+#
+# Copyright Michigan State University Board of Trustees
+#
+# This file is part of the LearningOnline Network with CAPA (LON-CAPA).
+#
+# LON-CAPA is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# LON-CAPA is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with LON-CAPA; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+# /home/httpd/html/adm/gpl.txt
+#
+# http://www.lon-capa.org/
+#
# (Directory Indexer
# (Login Screen
+# YEAR=1999
# 5/21/99,5/22,5/25,5/26,5/31,6/2,6/10,7/12,7/14 Gerd Kortemeyer)
# 11/23 Gerd Kortemeyer)
+# YEAR=2000
# 1/14,03/06,06/01,07/22,07/24,07/25,
# 09/04,09/06,09/28,09/29,09/30,10/2,10/5,10/26,10/28,
# 12/08,12/28,
+# YEAR=2001
# 01/15/01 Gerd Kortemeyer
# 02/27/01 Scott Harrison
# 03/02,05/03,05/25,05/30,06/01,07/06,08/06 Gerd Kortemeyer
+# 12/21 Scott Harrison
+# 12/29 Gerd Kortemeyer
+#
+###
package Apache::lonroles;
@@ -19,6 +51,7 @@ use Apache::lonuserstate();
use Apache::Constants qw(:common);
use Apache::File();
use Apache::lonmenu;
+use Apache::loncommon;
sub handler {
@@ -32,14 +65,19 @@ sub handler {
# ================================================================== Roles Init
if ($ENV{'form.selectrole'}) {
- &Apache::lonnet::appenv("request.course.id" => '',
- "request.course.fn" => '',
- "request.course.uri" => '',
- "request.course.sec" => '',
- "request.role" => 'cm');
+ if ($ENV{'request.course.id'}) {
+ my %temp=('logout_'.$ENV{'request.course.id'} => time);
+ &Apache::lonnet::put('email_status',\%temp);
+ }
+ &Apache::lonnet::appenv("request.course.id" => '',
+ "request.course.fn" => '',
+ "request.course.uri" => '',
+ "request.course.sec" => '',
+ "request.role" => 'cm',
+ "request.role.domain" => $ENV{'user.domain'});
foreach $envkey (keys %ENV) {
- if ($envkey=~/^user\.role\./) {
- my ($dum1,$dum2,$role,@pwhere)=split(/\./,$envkey);
+ next if ($envkey!~/^user\.role\./);
+ my (undef,undef,$role,@pwhere)=split(/\./,$envkey);
my $where=join('.',@pwhere);
my $trolecode=$role.'.'.$where;
if ($ENV{'form.'.$trolecode}) {
@@ -57,8 +95,9 @@ sub handler {
if ($tstatus eq 'is') {
$where=~s/^\///;
my ($cdom,$cnum,$csec)=split(/\//,$where);
- &Apache::lonnet::appenv('request.role' => $trolecode,
- 'request.course.sec' => $csec);
+ &Apache::lonnet::appenv('request.role' => $trolecode,
+ 'request.role.domain' => $cdom,
+ 'request.course.sec' => $csec);
my $msg='Entering course ...';
if (($cnum) && ($role ne 'ca')) {
my ($furl,$ferr)=
@@ -76,8 +115,9 @@ sub handler {
'
Could not initialize top-level map.
';
}
$r->content_type('text/html');
+ &Apache::loncommon::no_cache($r);
$r->send_http_header;
- my $swinfo=&Apache::lonmenu::rawconfig;
+ my $swinfo=&Apache::lonmenu::rawconfig($r);
print (<Entering Course
@@ -96,19 +136,18 @@ ENDREDIR
}
}
}
- }
}
- }
+ }
# =============================================================== No Roles Init
$r->content_type('text/html');
+ &Apache::loncommon::no_cache($r);
$r->send_http_header;
return OK if $r->header_only;
- my $swinfo=&Apache::lonmenu::rawconfig;
-
+ my $swinfo=&Apache::lonmenu::rawconfig($r);
$r->print(<
@@ -133,7 +172,7 @@ ENDHEADER
my $advanced=0;
foreach $envkey (keys %ENV) {
if ($envkey=~/^user\.role\./) {
- my ($dum1,$dum2,$role,@pwhere)=split(/\./,$envkey);
+ my (undef,undef,$role,@pwhere)=split(/\./,$envkey);
if ($role ne 'st') { $advanced=1; }
}
}
@@ -170,7 +209,14 @@ ENDHEADER
}
} else {
if ($advanced) {
- $r->print("
Select a User Role
\n");
+ $r->print
+ ("
$ENV{'user.name'}, Please Select a Role
\n");
+ $r->print("Your home server is ".
+ $Apache::lonnet::hostname{&Apache::lonnet::homeserver
+ ($ENV{'user.name'},$ENV{'user.domain'})}.
+ " \n");
+ $r->print("Author and Co-Author roles may not be available on ".
+ "servers other than your home server.");
} else {
$r->print("
Enter a Course
\n");
}
@@ -191,8 +237,9 @@ ENDHEADER
'
Start
End
Remark
'."\n");
foreach $envkey (sort keys %ENV) {
+ my $button = 1;
if ($envkey=~/^user\.role\./) {
- my ($dum1,$dum2,$role,@pwhere)=split(/\./,$envkey);
+ my (undef,undef,$role,@pwhere)=split(/\./,$envkey);
my $where=join('.',@pwhere);
my $trolecode=$role.'.'.$where;
my ($tstart,$tend)=split(/\./,$ENV{$envkey});
@@ -202,16 +249,16 @@ ENDHEADER
my $tpend=' ';
if ($tstart) {
if ($tstart>$then) {
- $tstatus='future';
- if ($tstart<$now) { $tstatus='will'; }
+ $tstatus='future';
+ if ($tstart<$now) { $tstatus='will'; }
}
$tpstart=localtime($tstart);
}
if ($tend) {
if ($tend<$then) {
- $tstatus='expired';
+ $tstatus='expired';
} elsif ($tend<$now) {
- $tstatus='will_not';
+ $tstatus='will_not';
}
$tpend=localtime($tend);
}
@@ -219,80 +266,99 @@ ENDHEADER
$tstatus='selected';
}
my $tbg;
- if (($tstatus eq 'is') || ($tstatus eq 'selected') ||
- ($ENV{'form.showall'})) {
- if ($tstatus eq 'is') {
- $tbg='#77FF77';
- } elsif ($tstatus eq 'future') {
- $tbg='#FFFF77';
- } elsif ($tstatus eq 'will') {
- $tbg='#FFAA77';
- $tremark.='Active at next login. ';
- } elsif ($tstatus eq 'expired') {
- $tbg='#FF7777';
- } elsif ($tstatus eq 'will_not') {
- $tbg='#AAFF77';
- $tremark.='Expired after logout. ';
- } elsif ($tstatus eq 'selected') {
- $tbg='#11CC55';
- $tremark.='Currently selected. ';
- }
- my $trole;
- if ($role =~ /^cr\//) {
- my ($rdummy,$rdomain,$rauthor,$rrole)=split(/\//,$role);
- $tremark.=' Defined by '.$rauthor.' at '.$rdomain.'.';
- $trole=$rrole;
- } else {
- $trole=Apache::lonnet::plaintext($role);
- }
- my $ttype;
- my $twhere;
- my ($tdom,$trest,$tsection)=
- split(/\//,Apache::lonnet::declutter($where));
- if ($trest) {
- if ($role eq 'ca') {
- $ttype='Construction Space';
- $twhere='User: '.$trest.' Domain: '.$tdom;
- $ENV{'course.'.$tdom.'_'.$trest.'.description'}='ca';
- } else {
- $ttype='Course';
- if ($tsection) {
- $ttype.=' Section/Group: '.$tsection;
- }
- my $tcourseid=$tdom.'_'.$trest;
- if ($ENV{'course.'.$tcourseid.'.description'}) {
- $twhere=$ENV{'course.'.$tcourseid.'.description'};
+ if (($tstatus eq 'is') || ($tstatus eq 'selected') ||
+ ($ENV{'form.showall'})) {
+ if ($tstatus eq 'is') {
+ $tbg='#77FF77';
+ } elsif ($tstatus eq 'future') {
+ $tbg='#FFFF77';
+ } elsif ($tstatus eq 'will') {
+ $tbg='#FFAA77';
+ $tremark.='Active at next login. ';
+ } elsif ($tstatus eq 'expired') {
+ $tbg='#FF7777';
+ } elsif ($tstatus eq 'will_not') {
+ $tbg='#AAFF77';
+ $tremark.='Expired after logout. ';
+ } elsif ($tstatus eq 'selected') {
+ $tbg='#11CC55';
+ $tremark.='Currently selected. ';
+ }
+ my $trole;
+ if ($role =~ /^cr\//) {
+ my ($rdummy,$rdomain,$rauthor,$rrole)=split(/\//,$role);
+ $tremark.=' Defined by '.$rauthor.' at '.$rdomain.'.';
+ $trole=$rrole;
} else {
- my %newhash=Apache::lonnet::coursedescription($tcourseid);
- if (%newhash) {
- $twhere=$newhash{'description'};
+ $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') {
+ my $home = &Apache::lonnet::homeserver($trest,$tdom);
+ $button = 0 if ($home ne $r->dir_config('lonHostID'));
+ #next if ($home eq 'no_host');
+ $home = $Apache::lonnet::hostname{$home};
+ $ttype='Construction Space';
+ $twhere='User: '.$trest.' Domain: '.$tdom.' '.
+ ' Server: '.$home;
+ $ENV{'course.'.$tdom.'_'.$trest.'.description'}='ca';
+ } elsif ($role eq 'au') {
+ # Authors
+ my $home = &Apache::lonnet::homeserver
+ ($ENV{'user.name'},$ENV{'user.domain'});
+ $button = 0 if ($home ne $r->dir_config('lonHostID'));
+ #next if ($home eq 'no_host');
+ $home = $Apache::lonnet::hostname{$home};
+ $ttype='Construction Space';
+ $twhere='Domain: '.$tdom.' Server: '.$home;
+ $ENV{'course.'.$tdom.'_'.$trest.'.description'}='ca';
+ } elsif ($trest) {
+ $ttype='Course';
+ if ($tsection) {
+ $ttype.=' Section/Group: '.$tsection;
+ }
+ my $tcourseid=$tdom.'_'.$trest;
+ if ($ENV{'course.'.$tcourseid.'.description'}) {
+ $twhere=$ENV{'course.'.$tcourseid.'.description'};
} else {
- $twhere='Currently not available';
- $ENV{'course.'.$tcourseid.'.description'}=$twhere;
+ my %newhash=Apache::lonnet::coursedescription
+ ($tcourseid);
+ if (%newhash) {
+ $twhere=$newhash{'description'};
+ } else {
+ $twhere='Currently not available';
+ $ENV{'course.'.$tcourseid.'.description'}=$twhere;
+ }
}
- }
- }
- } elsif ($tdom) {
- $ttype='Domain';
- $twhere=$tdom;
- } else {
- $ttype='System';
- $twhere='system wide';
- }
-
- $r->print('