--- loncom/auth/lonroles.pm 2005/04/07 06:56:21 1.118
+++ loncom/auth/lonroles.pm 2005/11/08 21:54:03 1.132
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# User Roles Screen
#
-# $Id: lonroles.pm,v 1.118 2005/04/07 06:56:21 albertel Exp $
+# $Id: lonroles.pm,v 1.132 2005/11/08 21:54:03 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,15 +228,12 @@ 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'}) &&
($env{'form.orgurl'}!~/^\/adm\/flip/)) {
my $dest=$env{'form.orgurl'};
- if ( &Apache::lonnet::mod_perl_version() == 2 ) {
- &Apache::lonnet::cleanenv();
- }
if (&Apache::lonnet::allowed('adv') eq 'F') { $tadv=1; }
&Apache::lonnet::appenv('request.role.adv'=>$tadv);
$r->internal_redirect($dest);
@@ -245,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;
}
@@ -262,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'};
@@ -338,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').'
');
}
}
@@ -371,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'};
@@ -444,7 +461,8 @@ ENDHEADER
my $trole;
if ($role =~ /^cr\//) {
my ($rdummy,$rdomain,$rauthor,$rrole)=split(/\//,$role);
- $tremark.='
'.&mt('Defined by ').$rauthor.
+ if ($tremark) { $tremark.='
'; }
+ $tremark.=&mt('Defined by ').$rauthor.
&mt(' at ').$rdomain.'.';
$trole=$rrole;
} else {
@@ -455,18 +473,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};
@@ -502,9 +516,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'};
@@ -529,6 +540,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';
@@ -574,11 +589,10 @@ ENDHEADER
}
$r->print('
');
unless ($nochoose) { $r->print(' | '); }
- $r->print(''.&mt('User Role').' | '.&mt('Extent').
- ' | '.&mt('Start').' | '.&mt('End').' | '.
- &mt('Remarks and Calendar Announcements').' |
'."\n");
+ $r->print(''.&mt('User Role').' | '.&mt('Extent').
+ ' | '.&mt('Start').' | '.&mt('End').' | '."\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/) {
@@ -602,8 +616,8 @@ ENDHEADER
}
}
if ($output) {
- $r->print("".
- &mt('Recent Roles')." | ");
+ $r->print("
".
+ &mt('Recent Roles')." | ");
$r->print($output);
$r->print("
");
$doheaders ++;
@@ -614,7 +628,7 @@ ENDHEADER
$r->print(&coursepick_jscript());
$r->print(&Apache::loncommon::coursebrowser_javascript());
}
- foreach my $type ('Construction Space','Course','Domain','System') {
+ foreach my $type ('Construction Space','Domain','Course','System') {
my $output;
foreach my $which (sort {uc($a) cmp uc($b)} (keys(%sortrole))) {
if ($roleclass{$sortrole{$which}} =~ /^\Q$type\E/) {
@@ -628,8 +642,8 @@ ENDHEADER
}
if ($output) {
if ($doheaders > 0) {
- $r->print("".
- "".&mt($type)." |
");
+ $r->print("".
+ "".&mt($type)." |
");
}
$r->print($output);
}
@@ -651,7 +665,7 @@ ENDHEADER
$r->print(' | ');
}
}
- $r->print(''.&mt('No role specified').
+ $r->print(' | '.&mt('No role specified').
' | '.$tremark.
' | '."\n");
@@ -661,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,41 +765,46 @@ sub role_status {
sub build_roletext {
my ($trolecode,$tdom,$trest,$tstatus,$tryagain,$advanced,$tremark,$tbg,$tfont,$trole,$ttype,$twhere,$tpstart,$tpend,$nochoose,$button,$switchserver) = @_;
my $roletext='';
+ my $is_dc=($trolecode =~ m/^dc\./);
+ my $rowspan=($is_dc) ? ''
+ : ' rowspan="2" ';
+
unless ($nochoose) {
if (!$button) {
if ($switchserver) {
- $roletext.=''.&mt('Switch Server').' | ';
} else {
$roletext.=(' | ');
}
} elsif ($tstatus eq 'is') {
- $roletext.=(' | ');
} elsif ($tryagain) {
$roletext.=
- ' | ';
} elsif ($advanced) {
$roletext.=
- ' | ';
} else {
- $roletext.=' | ';
+ $roletext.=' | ';
}
}
$tremark.=&Apache::lonannounce::showday(time,1,
&Apache::lonannounce::readcalendar($tdom.'_'.$trest));
-
$roletext.=''.$trole.
- ' | '.$ttype.
- ' | '.$twhere.
+ ' | '.$twhere.
' | '.$tpstart.
' | '.$tpend.
- ' | '.$tremark.
- ' |
'."\n";
+ '';
+ if (!$is_dc) {
+ $roletext.=''.$tremark.
+ ' |
|
'."\n";
+ }
return $roletext;
}
@@ -882,7 +901,7 @@ function process_pick(dom) {
if (pickedCourse != '') {
if (numbutton != -1) {
var courseTarget = "cc./"+pickedDomain+"/"+pickedCourse
- opener.document.rolechoice.elements[numbutton+1].name = courseTarget
+ opener.document.rolechoice.elements[numbutton].name = courseTarget
opener.document.rolechoice.submit()
}
}
@@ -939,18 +958,13 @@ sub allcourses_row {
my $ccrole = Apache::lonnet::plaintext('cc');
my $selectlink = &courselink($dcdom);
my $output = ''.
- ''.
- ' | '.
- ''.
- $ccrole.' | '.&mt('Course').' | '.
- ''.&mt('All courses').': '.
- $selectlink.''.
- ' '.&mt('Domain').':'.$dcdom.''.
- ' | '.
- &mt('Course Coordinator access to all courses in domain').
- ': '.$dcdom.' |
'."\n";
+ ''.
+ ''.
+ ''.
+ ''.$ccrole.''.
+ ' '.$selectlink.''.
+ ' from '.&mt('Domain').' '.$dcdom.
+ ' | |
'."\n";
return $output;
}