--- loncom/auth/lonroles.pm 2021/04/19 20:09:07 1.346 +++ loncom/auth/lonroles.pm 2021/04/19 23:07:33 1.347 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # User Roles Screen # -# $Id: lonroles.pm,v 1.346 2021/04/19 20:09:07 raeburn Exp $ +# $Id: lonroles.pm,v 1.347 2021/04/19 23:07:33 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -148,6 +148,49 @@ use HTML::Entities; my $registered_cleanup; my $rosterupdates; +sub start_loading_course { + my ($r,$title) = @_; + &Apache::loncommon::content_type($r,'text/html'); + &Apache::loncommon::no_cache($r); + $r->send_http_header; + my $swinfo=&Apache::lonmenu::rawconfig(); + # Breadcrumbs + my $brcrum = [{'href' => '', + 'text' => $title},]; + my $start_page = &Apache::loncommon::start_page($title,undef, + {'bread_crumbs' => $brcrum,}); + $r->print(< +// + +ENDREDIR + return; +} + +sub finish_loading_course { + my ($r,$msg,$url) = @_; +#FIXME add continue link, and add jquery to enable menu links when page is loaded + my $link; + my $end_page = &Apache::loncommon::end_page(); + my $js_url = &js_escape($url); + $r->print(< +// +$link +$end_page +END + return; +} + sub redirect_user { my ($r,$title,$url,$msg) = @_; $msg = $title if (! defined($msg)); @@ -182,29 +225,22 @@ ENDREDIR sub error_page { my ($r,$error,$dest)=@_; - &Apache::loncommon::content_type($r,'text/html'); - &Apache::loncommon::no_cache($r); - $r->send_http_header; - return OK if $r->header_only; - # Breadcrumbs - my $brcrum = [{'href' => $dest, - 'text' => 'Problems during Course Initialization'},]; - $r->print(&Apache::loncommon::start_page('Problems during Course Initialization', - undef, - {'bread_crumbs' => $brcrum,}) + my %lt = &Apache::lonlocal::texthash( + pdc => 'Problems during Course Initialization', + tfp => 'The following problems occurred:', + con => 'Continue', ); - $r->print( - ''. - '

'.&mt('The following problems occurred:'). - '
'. - $error. - '


'.&mt('Continue').'' - ); - $r->print(&Apache::loncommon::end_page()); + my $end_page = &Apache::loncommon::end_page(); + $dest = &HTML::Entities::encode($dest,'"<>&'); + $r->print(<$lt{'pdc'} +

$lt{'tfp'} +
+$error +


$lt{'con'} +$end_page +END + return; } sub handler { @@ -234,7 +270,7 @@ sub handler { @{$rosterupdates}=(); &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}); -# -------------------------------------------------- Check if setting hot list +# -------------------------------------------------- Check if setting hot list my $hotlist; if ($env{'form.action'} eq 'verify_and_change_rolespref') { $hotlist = &Apache::lonpreferences::verify_and_change_rolespref($r); @@ -591,7 +627,26 @@ ENDENTERKEY } } } - my ($msg,$blockcrit,$critmsg_check); + my $crstype = &Apache::loncommon::course_type($cdom.'_'.$cnum); + $crstype = lc($crstype); + my $preamble = '
'. + '
'. + &mt("Please be patient while your $crstype loads"). + '
'. + '
'; + my $closure = < +// + +ENDCLOSE + my $title = &mt("Loading $crstype"); + &start_loading_course($r,$title); + my %prog_state = &Apache::lonhtmlcommon::Create_PrgWin($r,undef,$preamble); + &Apache::lonhtmlcommon::Update_PrgWin($r,\%prog_state,&mt('Loading ...')); + $r->rflush(); + my ($msg,$blockcrit,$critmsg_check); $critmsg_check = 1; $blockcrit = &Apache::loncommon::blocking_status('alert',$cnum,$cdom,undef,1); if ($blockcrit) { @@ -604,9 +659,15 @@ ENDENTERKEY $critmsg_check = 0; } } - my ($furl,$ferr)= - &Apache::lonuserstate::readmap($cdom.'/'.$cnum,$critmsg_check); - unless ($ferr) { + my ($furl,$ferr)= + &Apache::lonuserstate::readmap($cdom.'/'.$cnum,$critmsg_check); + &Apache::lonhtmlcommon::Update_PrgWin($r,\%prog_state,&mt('Finished!')); + &Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state); + $r->print($closure); + $r->rflush(); + if ($ferr) { + $furl = '/adm/roles?tryagain=1'; + } else { &Apache::lonnet::appenv({'request.course.timechecked'=>$now}); unless (($env{'form.switchrole'}) || ($env{"environment.internal.$cdom.$cnum.$role.adhoc"})) { @@ -662,8 +723,16 @@ ENDENTERKEY } if (&Apache::lonnet::allowed('adv') eq 'F') { $tadv=1; } &Apache::lonnet::appenv({'request.role.adv'=>$tadv}); + if ($ferr) { + if ($env{'form.orgurl'}) { + $furl .= '&orgurl='.&HTML::Entities::encode($env{'form.orgurl'},'<>&"'); + } + if ($env{'form.symb'}) { + $furl .= '&symb='.&HTML::Entities::encode($env{'form.symb'}; + } + } if (($ferr) && ($tadv)) { - &error_page($r,$ferr,$dest); + &error_page($r,$ferr,$furl); } else { if ($env{'request.course.id'} eq $cdom.'_'.$cnum) { if (($env{'form.orgurl'} ne '') && ($env{'form.symb'} ne '')) { @@ -679,30 +748,49 @@ ENDENTERKEY $cdom.'_'.$cnum); } } - if (($env{'request.lti.login'}) && - ($env{'request.lti.rosterid'} || $env{'request.lti.passbackid'})) { - &process_lti($r,$cdom,$cnum); + if ($ferr) { + if (!$env{'request.course.id'}) { + &Apache::lonnet::appenv( + {"request.course.id" => $cdom.'_'.$cnum}); + $r->print('

'. + &mt('Could not initialize [_1] at this time.', + $env{'course.'.$cdom.'_'.$cnum.'.description'}). + '

'. + '

'. + &mt('Please try again.').'

'. + &Apache::loncommon::end_page()); + } + } else { + if (($env{'request.lti.login'}) && + ($env{'request.lti.rosterid'} || $env{'request.lti.passbackid'})) { + &process_lti($r,$cdom,$cnum); + } + $msg = '

'.&mt('Entering [_1] ...', + $env{'course.'.$cdom.'_'.$cnum.'.description'}). + '

'; + &finish_loading_course($r,$msg,$dest); } - $r->internal_redirect($dest); } + $r->rflush(); return OK; } else { if (!$env{'request.course.id'}) { &Apache::lonnet::appenv( {"request.course.id" => $cdom.'_'.$cnum}); - $furl='/adm/roles?tryagain=1'; - $msg='

' - .&mt('Could not initialize [_1] at this time.', - $env{'course.'.$cdom.'_'.$cnum.'.description'}) - .'

' - .'

'.&mt('Please try again.').'

' - .'

'.$ferr.'

'; } if (&Apache::lonnet::allowed('adv') eq 'F') { $tadv=1; } &Apache::lonnet::appenv({'request.role.adv'=>$tadv}); - - if (($ferr) && ($tadv)) { - &error_page($r,$ferr,$furl); + if ($ferr) { + if ($tadv) { + &error_page($r,$ferr,$furl); + } else { + $r->print('

'. + &mt('Could not initialize [_1] at this time.', + $env{'course.'.$cdom.'_'.$cnum.'.description'}). + '

'. + '

'.&mt('Please try again.').'

'. + &Apache::loncommon::end_page()); + } } else { if (($env{'request.lti.login'}) && ($env{'request.lti.rosterid'} || $env{'request.lti.passbackid'})) { @@ -720,9 +808,11 @@ ENDENTERKEY my ($score,$incomplete) = &Apache::lonplacementtest::check_completion(undef,undef,1); if (($incomplete) && ($incomplete < 100)) { - &redirect_user($r, &mt('Entering [_1]', - $env{'course.'.$cdom.'_'.$cnum.'.description'}), - '/adm/placement', $msg); + $msg = '

'.&mt('Entering [_1] ...', + $env{'course.'.$cdom.'_'.$cnum.'.description'}). + '

'; + &finish_loading_course($r,$msg,'/adm/placement'); + $r->rflush(); return OK; } } @@ -784,12 +874,13 @@ ENDENTERKEY $dest .= (($dest =~/\?/)? '&':'?').'symb='.$esc_symb; } } - my $title; unless ($env{'request.lti.login'}) { - $title = &mt('Entering [_1]', - $env{'course.'.$cdom.'_'.$cnum.'.description'}); + $msg = '

'.&mt('Entering [_1] ...', + $env{'course.'.$cdom.'_'.$cnum.'.description'}). + '

'; } - &redirect_user($r,$title,$dest,$msg); + &finish_loading_course($r,$msg,$dest); + $r->rflush(); return OK; } if (&Apache::lonnet::allowed('whn', @@ -800,10 +891,11 @@ ENDENTERKEY ) { my $startpage = &courseloadpage($env{'request.course.id'}); unless ($startpage eq 'firstres') { - $msg = &mt('Entering [_1] ...', - $env{'course.'.$env{'request.course.id'}.'.description'}); - &redirect_user($r, &mt('New in course'), - '/adm/whatsnew?refpage=start', $msg); + $msg = '

'.&mt('Entering [_1] ...', + $env{'course.'.$cdom.'_'.$cnum.'.description'}). + '

'; + &finish_loading_course($r,$msg,'/adm/whatsnew?refpage=start'); + $r->rflush(); return OK; } } @@ -827,17 +919,17 @@ ENDENTERKEY } elsif ($access eq 'B') { $furl = '/adm/navmaps?showOnlyHomework=1'; } - my $title; if ($env{'request.lti.login'}) { undef($msg); + &finish_loading_course($r,$msg,$furl); } else { - $title = &mt('Entering [_1]', - $env{'course.'.$cdom.'_'.$cnum.'.description'}); - $msg = &mt('Entering [_1] ...', - $env{'course.'.$cdom.'_'.$cnum.'.description'}); + $msg = '

'.&mt('Entering [_1] ...', + $env{'course.'.$cdom.'_'.$cnum.'.description'}). + '

'; + &finish_loading_course($r,$msg,$furl); } - &redirect_user($r,$title,$furl,$msg); } + $r->rflush(); return OK; } } @@ -901,7 +993,7 @@ ENDENTERKEY $crumbtext = 'Courses'; $pagetitle = 'My Courses'; $recent = &mt('Recent Courses'); - $standby = &mt('Course selected. Please stand by.'); + $standby = &mt('Course selected. Please stand by.'); } my $brcrum =[{href=>"/adm/roles",text=>$crumbtext}];