--- loncom/auth/lonroles.pm 2000/10/04 14:09:01 1.10
+++ loncom/auth/lonroles.pm 2002/08/21 17:18:08 1.41
@@ -1,12 +1,48 @@
# The LearningOnline Network with CAPA
# User Roles Screen
+#
+# $Id: lonroles.pm,v 1.41 2002/08/21 17:18:08 www 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 Gerd Kortemeyer
+# 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;
use strict;
@@ -14,6 +50,8 @@ use Apache::lonnet();
use Apache::lonuserstate();
use Apache::Constants qw(:common);
use Apache::File();
+use Apache::lonmenu;
+use Apache::loncommon;
sub handler {
@@ -27,9 +65,19 @@ sub handler {
# ================================================================== Roles Init
if ($ENV{'form.selectrole'}) {
- foreach $envkey (keys %ENV) {
- if ($envkey=~/^user\.role\./) {
- my ($dum1,$dum2,$role,@pwhere)=split(/\./,$envkey);
+ 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) {
+ next if ($envkey!~/^user\.role\./);
+ my (undef,undef,$role,@pwhere)=split(/\./,$envkey);
my $where=join('.',@pwhere);
my $trolecode=$role.'.'.$where;
if ($ENV{'form.'.$trolecode}) {
@@ -42,19 +90,52 @@ sub handler {
}
if ($tend) {
if ($tend<$then) { $tstatus='expired'; }
- if ($tend>$now) { $tstatus='will_not'; }
+ if ($tend<$now) { $tstatus='will_not'; }
}
if ($tstatus eq 'is') {
- &Apache::lonnet::appenv('request.role' => $trolecode);
- my ($cdom,$cnum)=split(/\//,$where);
- if ($cnum) {
- &Apache::lonuserstate::readmap($where);
- $r->internal_redirect($ENV{'form.orgurl'});
- return OK;
+ $where=~s/^\///;
+ my ($cdom,$cnum,$csec)=split(/\//,$where);
+ &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)=
+ &Apache::lonuserstate::readmap($cdom.'/'.$cnum);
+ if (($ENV{'form.orgurl'}) &&
+ ($ENV{'form.orgurl'}!~/^\/adm\/flip/)) {
+ $r->internal_redirect($ENV{'form.orgurl'});
+ return OK;
+ } else {
+ unless ($ENV{'request.course.id'}) {
+ &Apache::lonnet::appenv(
+ "request.course.id" => $cdom.'_'.$cnum);
+ $furl='/adm/notfound.html';
+ $msg=
+ '
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($r);
+ print (<Entering Course
+
+
+
+
+
+$msg
+
+
+ENDREDIR
+ return OK;
+ }
}
}
}
- }
}
}
@@ -62,36 +143,42 @@ sub handler {
# =============================================================== 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($r);
+ my $bodytag=&Apache::loncommon::bodytag('User Roles');
$r->print(<
LON-CAPA User Roles
-
+
+$bodytag
+
ENDHEADER
# ------------------------------------------ Get Error Message from Environment
my ($fn,$priv,$nochoose,$error,$msg)=split(/:/,$ENV{'user.error.msg'});
- $r->log_reason(
- "$msg for $ENV{'user.name'} domain $ENV{'user.domain'} access $priv",$fn);
+ if ($ENV{'user.error.msg'}) {
+ $r->log_reason(
+ "$msg for $ENV{'user.name'} domain $ENV{'user.domain'} access $priv",$fn);
+ }
# ---------------------------------------------------------------- Who is this?
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; }
}
}
-# ---------------------------------------------- Get cached course descriptions
-
- my %cdes=Apache::lonnet::dump('coursedescriptions');
-
# -------------------------------------------------------- Generate Page Output
# --------------------------------------------------------------- Error Header?
if ($error) {
@@ -101,7 +188,11 @@ ENDHEADER
$r->print("Resource: $fn\n");
$r->print("Action : $msg\n
");
} else {
- $r->print("LON-CAPA User Roles
");
+ if ($ENV{'user.error.msg'}) {
+ $r->print(
+ 'You need to choose another user role or '.
+ 'enter a specific course for this function
');
+ }
}
# -------------------------------------------------------- Choice or no choice?
if ($nochoose) {
@@ -119,27 +210,35 @@ ENDHEADER
}
} else {
if ($advanced) {
- $r->print("Select a User 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");
}
- $r->print('\n");
}
-# ------------------------------------------------------------ Priviledges Info
+# ------------------------------------------------------------ Privileges Info
if ($advanced) {
- $r->print('
Priviledges
');
+ $r->print('
Current Privileges
');
foreach $envkey (sort keys %ENV) {
- if ($envkey=~/^user\.priv\./) {
- my ($dum1,$dum2,@pwhere)=split(/\./,$envkey);
- my $where=join('.',@pwhere);
+ if ($envkey=~/^user\.priv\.$ENV{'request.role'}\./) {
+ my $where=$envkey;
+ $where=~s/^user\.priv\.$ENV{'request.role'}\.//;
my $ttype;
my $twhere;
- my ($tdom,$trest)=
+ my ($tdom,$trest,$tsec)=
split(/\//,Apache::lonnet::declutter($where));
if ($trest) {
+ if ($ENV{'course.'.$tdom.'_'.$trest.'.description'} eq 'ca') {
+ $ttype='Construction Space';
+ $twhere='User: '.$trest.', Domain: '.$tdom;
+ } else {
$ttype='Course';
- $twhere=$cdes{$tdom.'/'.$trest};
+ $twhere=$ENV{'course.'.$tdom.'_'.$trest.'.description'};
+ if ($tsec) {
+ $twhere.=' (Section/Group: '.$tsec.')';
+ }
+ }
} elsif ($tdom) {
$ttype='Domain';
$twhere=$tdom;
@@ -256,7 +417,7 @@ ENDHEADER
$twhere='/';
}
$r->print("\n".$ttype.': '.$twhere.'
');
- map {
+ foreach (sort split(/:/,$ENV{$envkey})) {
if ($_) {
my ($prv,$restr)=split(/\&/,$_);
my $trestr='';
@@ -273,20 +434,11 @@ ENDHEADER
$r->print('- '.Apache::lonnet::plaintext($prv).$trestr.
'
');
}
- } sort split(/:/,$ENV{$envkey});
+ }
$r->print('
');
}
}
}
-# -------------------------------------------------------------- Debug - remove
-
- $->print("
Debugging
\n");
-
- foreach $envkey (sort keys %ENV) {
- $r->print("$envkey ---- $ENV{$envkey}
");
- }
-
-# ------------------------------------------------------------------- End Debug
$r->print("