--- loncom/auth/lonroles.pm 2010/07/26 21:52:15 1.254 +++ loncom/auth/lonroles.pm 2010/09/02 17:06:38 1.259 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # User Roles Screen # -# $Id: lonroles.pm,v 1.254 2010/07/26 21:52:15 raeburn Exp $ +# $Id: lonroles.pm,v 1.259 2010/09/02 17:06:38 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -210,7 +210,7 @@ sub handler { my %dcroles = (); my $numdc = &check_fordc(\%dcroles,$then); &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}); - my $loncaparev = $Apache::lonnet::perlvar{'lonVersion'}; + my $loncaparev = $Apache::lonnet::perlvar{'lonVersion'}; # ================================================================== Roles Init if ($env{'form.selectrole'}) { @@ -324,6 +324,42 @@ sub handler { if ($tstatus eq 'is') { $where=~s/^\///; my ($cdom,$cnum,$csec)=split(/\//,$where); + if (($cnum) && ($role ne 'ca') && ($role ne 'aa')) { + my $home = $env{'course.'.$cdom.'_'.$cnum.'.home'}; + my @ids = &Apache::lonnet::current_machine_ids(); + unless ($loncaparev eq '' && $home && grep(/^\Q$home\E$/,@ids)) { + my %curr_reqd_hash = &Apache::lonnet::userenvironment($cdom,$cnum,'internal.releaserequired'); + if ($curr_reqd_hash{'internal.releaserequired'} ne '') { + my ($switchserver,$switchwarning) = + &check_release_required($loncaparev,$cdom.'_'.$cnum,$trolecode,$curr_reqd_hash{'internal.releaserequired'}); + if ($switchwarning ne '' || $switchserver ne '') { + &Apache::loncommon::content_type($r,'text/html'); + &Apache::loncommon::no_cache($r); + $r->send_http_header; + my $end_page=&Apache::loncommon::end_page(); + $r->print(&Apache::loncommon::start_page('Selected course unavailable on this server'). + '

'); + if ($switchwarning) { + $r->print($switchwarning.'
'); + if (&Apache::loncommon::show_course()) { + $r->print(&mt('Display courses')); + } else { + $r->print(&mt('Display roles')); + } + $r->print(''); + } elsif ($switchserver) { + $r->print(&mt('This course requires a newer version of LON-CAPA than is installed on this server.'). + '
'. + ''. + &mt('Switch Server'). + ''); + } + $r->print('

'.&Apache::loncommon::end_page()); + return OK; + } + } + } + } # check for course groups my %coursegroups = &Apache::lonnet::get_active_groups( $env{'user.domain'},$env{'user.name'},$cdom, $cnum); @@ -459,6 +495,12 @@ ENDENTERKEY if (($ferr) && ($tadv)) { &error_page($r,$ferr,$dest); } else { + if ($dest =~ m{^/adm/coursedocs\?folderpath}) { + if ($env{'request.course.id'} eq $cdom.'_'.$cnum) { + my $chome = &Apache::lonnet::homeserver($cnum,$cdom); + &update_content_constraints($cdom,$cnum,$chome,$cdom.'_'.$cnum); + } + } $r->internal_redirect($dest); } return OK; @@ -688,6 +730,7 @@ ENDHEADER $r->print(''); $r->print(''); } + $r->rflush(); my (%roletext,%sortrole,%roleclass,%futureroles,%timezones); my ($countactive,$countfuture,$inrole,$possiblerole) = @@ -803,12 +846,16 @@ ENDHEADER } elsif ($numdc > 0) { unless ($role =~/^error\:/) { my ($roletext,$role_text_end) = &display_cc_role('user.role.'.$role); - $output.= &Apache::loncommon::start_data_table_row(). - $roletext. - &Apache::loncommon::end_data_table_row(). - &Apache::loncommon::continue_data_table_row(). - $role_text_end. - &Apache::loncommon::end_data_table_row(); + if ($roletext) { + $output.= &Apache::loncommon::start_data_table_row(). + $roletext. + &Apache::loncommon::end_data_table_row(); + if ($role_text_end) { + $output .= &Apache::loncommon::continue_data_table_row(). + $role_text_end. + &Apache::loncommon::end_data_table_row(); + } + } } } } @@ -889,16 +936,9 @@ sub gather_roles { &Apache::lonnet::role_status($envkey,$then,$refresh,$now,\$role,\$where, \$trolecode,\$tstatus,\$tstart,\$tend); next if (!defined($role) || $role eq '' || $role =~ /^gr/); - my $timezone = &role_timezone($where,$timezones); $tremark=''; $tpstart=' '; $tpend=' '; - if ($tstart) { - $tpstart=&Apache::lonlocal::locallocaltime($tstart,$timezone); - } - if ($tend) { - $tpend=&Apache::lonlocal::locallocaltime($tend,$timezone); - } if ($env{'request.role'} eq $trolecode) { $tstatus='selected'; } @@ -907,6 +947,13 @@ sub gather_roles { || ($tstatus eq 'selected') || ($tstatus eq 'future') || ($env{'form.showall'})) { + my $timezone = &role_timezone($where,$timezones); + if ($tstart) { + $tpstart=&Apache::lonlocal::locallocaltime($tstart,$timezone); + } + if ($tend) { + $tpend=&Apache::lonlocal::locallocaltime($tend,$timezone); + } if ($tstatus eq 'is') { $tbg='LC_roles_is'; $possiblerole=$trolecode; @@ -989,10 +1036,13 @@ sub gather_roles { &Apache::loncommon::syllabuswrapper(&mt('Syllabus'),$trest,$tdom). ''; unless ($home && grep(/^\Q$home\E$/,@ids) && $loncaparev eq '') { - ($switchserver,$switchwarning) = - &check_release_required($loncaparev,$tcourseid,$trolecode); - if ($switchserver || $switchwarning) { - $button = 0; + my $required = $env{'course.'.$tcourseid.'.internal.releaserequired'}; + if ($required ne '') { + ($switchserver,$switchwarning) = + &check_release_required($loncaparev,$tcourseid,$trolecode,$required); + if ($switchserver || $switchwarning) { + $button = 0; + } } } } @@ -1009,10 +1059,13 @@ sub gather_roles { $trole = &Apache::lonnet::plaintext($role,$ttype,$tcourseid); my $home = $newhash{'home'}; unless ($home && grep(/^\Q$home\E$/,@ids) && $loncaparev eq '') { - ($switchserver,$switchwarning) = - &check_release_required($loncaparev,$tcourseid,$trolecode); - if ($switchserver || $switchwarning) { - $button = 0; + my $required = $newhash{'internal.releaserequired'}; + if ($required ne '') { + ($switchserver,$switchwarning) = + &check_release_required($loncaparev,$tcourseid,$trolecode,$required); + if ($switchserver || $switchwarning) { + $button = 0; + } } } } else { @@ -1058,9 +1111,15 @@ sub role_timezone { my $cnum = $2; if ($cdom && $cnum) { if (!exists($timezones->{$cdom.'_'.$cnum})) { - my %timehash = - &Apache::lonnet::get('environment',['timezone'],$cdom,$cnum); - if ($timehash{'timezone'} eq '') { + my $tz; + if ($env{'course.'.$cdom.'_'.$cnum.'.description'}) { + $tz = $env{'course.'.$cdom.'_'.$cnum.'.timezone'}; + } else { + my %timehash = + &Apache::lonnet::get('environment',['timezone'],$cdom,$cnum); + $tz = $timehash{'timezone'}; + } + if ($tz eq '') { if (!exists($timezones->{$cdom})) { my %domdefaults = &Apache::lonnet::get_domain_defaults($cdom); @@ -1073,7 +1132,7 @@ sub role_timezone { $timezones->{$cdom.'_'.$cnum} = $timezones->{$cdom}; } else { $timezones->{$cdom.'_'.$cnum} = - &Apache::lonlocal::gettimezone($timehash{'timezone'}); + &Apache::lonlocal::gettimezone($tz); } } $timezone = $timezones->{$cdom.'_'.$cnum}; @@ -1328,7 +1387,13 @@ sub build_roletext { } else { $roletext.=(' '); } - $tremark .= $switchwarning; + if ($switchwarning) { + if ($tremark eq '') { + $tremark = $switchwarning; + } else { + $tremark .= '
'.$switchwarning; + } + } } elsif ($tstatus eq 'is') { $roletext.=''. '".&mt('Domain').":".$1; + $twhere.="
".&mt('Domain').":".$tdom; ($roletext,$roletext_end) = &build_roletext($trolecode,$tdom,$trest,'is',$tryagain,$advanced,'',$tbg,$trole,$twhere,'','','',1,''); } }