--- loncom/auth/lonroles.pm 2005/04/22 20:54:43 1.119 +++ loncom/auth/lonroles.pm 2005/11/08 22:08:12 1.133 @@ -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.133 2005/11/08 22:08:12 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,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 { @@ -452,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}; @@ -499,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'}; @@ -526,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'; @@ -571,11 +589,10 @@ ENDHEADER } $r->print('
'); unless ($nochoose) { $r->print(''); } - $r->print(''."\n"); + $r->print(''."\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/) { @@ -592,6 +609,9 @@ ENDHEADER foreach (sort(keys(%recent_roles))) { if (defined($roletext{'user.role.'.$_})) { $output.=$roletext{'user.role.'.$_}; + if ($_ =~ m-dc\./(\w+)/- && $dcroles{$1}) { + $output .= &allcourses_row($1); + } } elsif ($numdc > 0) { unless ($_ =~/^error\:/) { $output.=&display_cc_role('user.role.'.$_); @@ -599,8 +619,8 @@ ENDHEADER } } if ($output) { - $r->print(""); + $r->print(""); $r->print($output); $r->print(""); $doheaders ++; @@ -611,7 +631,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/) { @@ -625,8 +645,8 @@ ENDHEADER } if ($output) { if ($doheaders > 0) { - $r->print("". - ""); + $r->print("". + ""); } $r->print($output); } @@ -648,7 +668,7 @@ ENDHEADER $r->print(''); } } - $r->print(''."\n"); @@ -658,7 +678,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'}\./) { @@ -748,41 +768,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.=''; } 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.=''."\n"; + ''; + if (!$is_dc) { + $roletext.=''."\n"; + } return $roletext; } @@ -879,7 +904,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() } } @@ -936,18 +961,13 @@ sub allcourses_row { my $ccrole = Apache::lonnet::plaintext('cc'); my $selectlink = &courselink($dcdom); my $output = ''. - ''. - ''. - ''."\n"; + ''. + ''. + ''."\n"; return $output; }
 '.&mt('User Role').''.&mt('Extent'). - ''.&mt('Start').''.&mt('End').''. - &mt('Remarks and Calendar Announcements').'
'.&mt('User Role').''.&mt('Extent'). + ''.&mt('Start').''.&mt('End').'
". - &mt('Recent Roles')."
". + &mt('Recent Roles')."
".&mt($type)."
".&mt($type)."
 '.&mt('No role specified'). + $r->print(''.&mt('No role specified'). ''.$tremark. ' 
'.&mt('Switch Server').'  '.$trole. - ''.$ttype. - ''.$twhere. + ''.$twhere. ''.$tpstart. ''.$tpend. - ''.$tremark. - ' 
'.$tremark. + ' 
'. - ''. - $ccrole.''.&mt('Course').''.&mt('All courses').': '. - $selectlink.''. - '
'.&mt('Domain').':'.$dcdom.'
'. - '
'. - &mt('Course Coordinator access to all courses in domain'). - ': '.$dcdom.'
'. + ''.$ccrole.''. + ' '.$selectlink.''. + ' from '.&mt('Domain').' '.$dcdom. + '