--- loncom/auth/lonroles.pm 2005/04/22 20:54:43 1.119
+++ loncom/auth/lonroles.pm 2005/11/01 21:59:24 1.131
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# User Roles Screen
#
-# $Id: lonroles.pm,v 1.119 2005/04/22 20:54:43 albertel Exp $
+# $Id: lonroles.pm,v 1.131 2005/11/01 21:59:24 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -39,6 +39,7 @@ use Apache::loncommon;
use Apache::lonhtmlcommon;
use Apache::lonannounce;
use Apache::lonlocal;
+use GDBM_File;
sub redirect_user {
my ($r,$title,$url,$msg,$launch_nav) = @_;
@@ -49,7 +50,8 @@ sub redirect_user {
my $swinfo=&Apache::lonmenu::rawconfig();
my $navwindow;
if ($launch_nav eq 'on') {
- $navwindow.=&Apache::lonnavmaps::launch_win('now');
+ $navwindow.=&Apache::lonnavmaps::launch_win('now',undef,undef,
+ ($url eq '/adm/whatsnew'));
} else {
$navwindow.=&Apache::lonnavmaps::close();
}
@@ -226,7 +228,7 @@ ENDENTERKEY
my $tadv=0;
my $msg=&mt('Entering course ...');
- if (($cnum) && ($role ne 'ca')) {
+ if (($cnum) && ($role ne 'ca') && ($role ne 'aa')) {
my ($furl,$ferr)=
&Apache::lonuserstate::readmap($cdom.'/'.$cnum);
if (($env{'form.orgurl'}) &&
@@ -242,7 +244,7 @@ ENDENTERKEY
"request.course.id" => $cdom.'_'.$cnum);
$furl='/adm/roles?tryagain=1';
$msg=
- '
'.
+ ''.
&mt('Could not initialize course at this time.').
' '.&mt('Please try again.').' '.$ferr;
}
@@ -259,17 +261,24 @@ ENDENTERKEY
if ($role eq 'cc' && $env{'course.' . $courseid .
'.course.helper.not.run'}) {
$furl = "/adm/helper/course.initialization.helper";
+ # Send the user to the course they selected
+ } elsif (($env{'request.course.fn'})
+ && ($role eq 'cc' && ($env{'environment.course_init_display'} ne 'firstres'))) {
+ $msg = &mt('Entering course ....');
+ &redirect_user($r,&mt('New in course'),
+ '/adm/whatsnew',$msg,
+ $env{'environment.remotenavmap'});
+ return OK;
}
- # Send the user to the course they selected
- &redirect_user($r,&mt('Entering Course'),
+ &redirect_user($r,&mt('Entering Course'),
$furl,$msg,
$env{'environment.remotenavmap'});
- return OK;
+ return OK;
}
}
#
# Send the user to the construction space they selected
- if ($role =~ /^(au|ca)$/) {
+ if ($role =~ /^(au|ca|aa)$/) {
my $redirect_url = '/priv/';
if ($role eq 'au') {
$redirect_url.=$env{'user.name'};
@@ -335,14 +344,25 @@ ENDHEADER
# --------------------------------------------------------------- Error Header?
if ($error) {
$r->print("LON-CAPA Access Control ");
- $r->print("Access : ".
+ $r->print("Access : ".
Apache::lonnet::plaintext($priv)."\n");
$r->print("Resource: ".&Apache::lonenc::check_encrypt($fn)."\n");
- $r->print("Action : $msg\n ");
+ $r->print("Action : $msg\n ");
+ my $url=$fn;
+ my $last;
+ if (tie(my %hash,'GDBM_File',$env{'request.course.fn'}.'_symb.db',
+ &GDBM_READER(),0640)) {
+ $last=$hash{'last_known'};
+ untie(%hash);
+ }
+ if ($last) { $fn.='?symb='.&Apache::lonnet::escape($last); }
+
+ &Apache::londocs::changewarning($r,undef,'You have modified your course recently, [_1] may fix this access problem.',
+ &Apache::lonenc::check_encrypt($fn));
} else {
if ($env{'user.error.msg'}) {
$r->print(
- ''.
+ ''.
&mt('You need to choose another user role or enter a specific course for this function').' ');
}
}
@@ -368,7 +388,7 @@ ENDHEADER
($env{'user.name'},$env{'user.domain'})}.
" \n");
$r->print(&mt(
- "Author and Co-Author roles may not be available on servers other than your home server."));
+ "Author and Co-Author roles are not available on servers other than their respective home servers."));
}
if (($ENV{'REDIRECT_QUERY_STRING'}) && ($fn)) {
$fn.='?'.$ENV{'REDIRECT_QUERY_STRING'};
@@ -441,7 +461,7 @@ ENDHEADER
my $trole;
if ($role =~ /^cr\//) {
my ($rdummy,$rdomain,$rauthor,$rrole)=split(/\//,$role);
- $tremark.=' '.&mt('Defined by ').$rauthor.
+ $tremark.=' '.&mt('Defined by ').$rauthor.
&mt(' at ').$rdomain.'.';
$trole=$rrole;
} else {
@@ -452,18 +472,14 @@ ENDHEADER
my ($tdom,$trest,$tsection)=
split(/\//,Apache::lonnet::declutter($where));
# First, Co-Authorship roles
- if ($role eq 'ca') {
+ 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=&Apache::lonnet::escape('http://'.
- $Apache::lonnet::hostname{$home}.
- '/adm/login?domain='.$env{'user.domain'}.
- '&username='.$env{'user.name'}.
- '&firsturl=/priv/'.$trest.'/');
+ $switchserver='otherserver='.$home.'&role='.$trolecode;
}
#next if ($home eq 'no_host');
$home = $Apache::lonnet::hostname{$home};
@@ -499,9 +515,6 @@ ENDHEADER
$sortkey=$role;
} elsif ($trest) {
$ttype='Course';
- if ($tsection) {
- $ttype.=' '.&mt('Section/Group').': '.$tsection;
- }
my $tcourseid=$tdom.'_'.$trest;
if ($env{'course.'.$tcourseid.'.description'}) {
$twhere=$env{'course.'.$tcourseid.'.description'};
@@ -526,6 +539,10 @@ ENDHEADER
$sortkey=$role."\0".$tdom."\0".$twhere."\0".$envkey;
}
}
+ if ($tsection) {
+ $twhere.=' '.&mt('Section/Group').': '.$tsection;
+ }
+
if ($role ne 'st') { $twhere.=" ".&mt('Domain').":".$tdom; }
} elsif ($tdom) {
$ttype='Domain';
@@ -571,11 +588,11 @@ ENDHEADER
}
$r->print('');
unless ($nochoose) { $r->print(' '); }
- $r->print(''.&mt('User Role').' '.&mt('Extent').
+ $r->print(' '.&mt('User Role').' '.&mt('Extent').
' '.&mt('Start').' '.&mt('End').' '.
&mt('Remarks and Calendar Announcements').' '."\n");
my $doheaders=-1;
- foreach my $type ('Construction Space','Course','Domain','System') {
+ foreach my $type ('Domain','Construction Space','Course','System') {
my $haverole=0;
foreach my $which (sort {uc($a) cmp uc($b)} (keys(%sortrole))) {
if ($roleclass{$sortrole{$which}} =~ /^\Q$type\E/) {
@@ -599,8 +616,8 @@ ENDHEADER
}
}
if ($output) {
- $r->print("".
- &mt('Recent Roles')." ");
+ $r->print("".
+ &mt('Recent Roles')." ");
$r->print($output);
$r->print(" ");
$doheaders ++;
@@ -625,8 +642,8 @@ ENDHEADER
}
if ($output) {
if ($doheaders > 0) {
- $r->print("".
- "".&mt($type)." ");
+ $r->print("".
+ "".&mt($type)." ");
}
$r->print($output);
}
@@ -648,7 +665,7 @@ ENDHEADER
$r->print(' ');
}
}
- $r->print(''.&mt('No role specified').
+ $r->print(' '.&mt('No role specified').
' '.$tremark.
' '."\n");
@@ -658,7 +675,7 @@ ENDHEADER
}
# ------------------------------------------------------------ Privileges Info
if (($advanced) && (($env{'user.error.msg'}) || ($error))) {
- $r->print('Current Privileges ');
+ $r->print('Current Privileges ');
foreach $envkey (sort keys %env) {
if ($envkey=~/^user\.priv\.$env{'request.role'}\./) {
@@ -751,7 +768,7 @@ sub build_roletext {
unless ($nochoose) {
if (!$button) {
if ($switchserver) {
- $roletext.=''.&mt('Switch Server').' ';
} else {
$roletext.=(' ');
@@ -777,8 +794,7 @@ sub build_roletext {
$roletext.=''.$trole.
- ' '.$ttype.
- ' '.$twhere.
+ ' '.$twhere.
' '.$tpstart.
' '.$tpend.
' '.$tremark.
@@ -935,17 +951,17 @@ sub allcourses_row {
my $dcdom = shift;
my $ccrole = Apache::lonnet::plaintext('cc');
my $selectlink = &courselink($dcdom);
- my $output = ''.
+ my $output = ' '.
' '.
' '.
''.
- $ccrole.' '.&mt('Course').' '.
+ $ccrole.''.
''.&mt('All courses').': '.
$selectlink.' '.
' '.&mt('Domain').':'.$dcdom.' '.
- ''.
+ ' '.
&mt('Course Coordinator access to all courses in domain').
': '.$dcdom.' '."\n";
return $output;