Diff for /loncom/auth/lonroles.pm between versions 1.341 and 1.347

version 1.341, 2018/12/08 16:34:15 version 1.347, 2021/04/19 23:07:33
Line 148  use HTML::Entities; Line 148  use HTML::Entities;
 my $registered_cleanup;  my $registered_cleanup;
 my $rosterupdates;  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);
   $start_page
   <script type="text/javascript">
   // <![CDATA[
   $swinfo
   // ]]>
   </script>
   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(<<END);
   $msg
   <script type="text/javascript">
   // <![CDATA[
   \$(document).ready(function() {
       var url = "$js_url";
       \$(location).attr('href',url);
   });
   </script>
   $link
   $end_page
   END
       return;
   }
   
 sub redirect_user {  sub redirect_user {
     my ($r,$title,$url,$msg) = @_;      my ($r,$title,$url,$msg) = @_;
     $msg = $title if (! defined($msg));      $msg = $title if (! defined($msg));
Line 182  ENDREDIR Line 225  ENDREDIR
   
 sub error_page {  sub error_page {
     my ($r,$error,$dest)=@_;      my ($r,$error,$dest)=@_;
     &Apache::loncommon::content_type($r,'text/html');      my %lt = &Apache::lonlocal::texthash(
     &Apache::loncommon::no_cache($r);          pdc => 'Problems during Course Initialization',
     $r->send_http_header;          tfp => 'The following problems occurred:',
     return OK if $r->header_only;          con => 'Continue',
     # Breadcrumbs  
     my $brcrum = [{'href' => $dest,  
                    'text' => 'Problems during Course Initialization'},];  
     $r->print(&Apache::loncommon::start_page('Problems during Course Initialization',  
                                              undef,  
                                              {'bread_crumbs' => $brcrum,})  
     );  
     $r->print(  
         '<script type="text/javascript">'.  
         '// <![CDATA['.  
         &Apache::lonmenu::rawconfig().  
         '// ]]>'.  
         '</script>'.  
       '<p class="LC_error">'.&mt('The following problems occurred:').  
           '<br />'.  
       $error.  
       '</p><br /><a href="'.$dest.'">'.&mt('Continue').'</a>'  
     );      );
     $r->print(&Apache::loncommon::end_page());      my $end_page = &Apache::loncommon::end_page();
       $dest = &HTML::Entities::encode($dest,'"<>&');
       $r->print(<<END);
   <h3>$lt{'pdc'}</h3>
   <p class="LC_error">$lt{'tfp'}
   <br />
   $error
   </p><br /><a href="$dest">$lt{'con'}</a>
   $end_page
   END
       return;
 }  }
   
 sub handler {  sub handler {
Line 234  sub handler { Line 270  sub handler {
     @{$rosterupdates}=();      @{$rosterupdates}=();
     &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'});      &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'});
   
 # -------------------------------------------------- Check if setting hot list   # -------------------------------------------------- Check if setting hot list
     my $hotlist;      my $hotlist;
     if ($env{'form.action'} eq 'verify_and_change_rolespref') {      if ($env{'form.action'} eq 'verify_and_change_rolespref') {
         $hotlist = &Apache::lonpreferences::verify_and_change_rolespref($r);          $hotlist = &Apache::lonpreferences::verify_and_change_rolespref($r);
Line 505  sub handler { Line 541  sub handler {
  my $end_page=&Apache::loncommon::end_page();   my $end_page=&Apache::loncommon::end_page();
  my $buttontext=&mt('Enter Course');   my $buttontext=&mt('Enter Course');
  my $message=&mt('Successfully registered key');   my $message=&mt('Successfully registered key');
                                    my $ip = &Apache::lonnet::get_requestor_ip();
  my $assignresult=   my $assignresult=
      &Apache::lonnet::assign_access_key(       &Apache::lonnet::assign_access_key(
      $env{'form.newkey'},       $env{'form.newkey'},
Line 513  sub handler { Line 550  sub handler {
                                                      $env{'user.domain'},                                                       $env{'user.domain'},
      $env{'user.name'},       $env{'user.name'},
                                                      &mt('Assigned from [_1] at [_2] for [_3]'                                                       &mt('Assigned from [_1] at [_2] for [_3]'
                                                         ,$ENV{'REMOTE_ADDR'}                                                          ,$ip
                                                         ,&Apache::lonlocal::locallocaltime()                                                          ,&Apache::lonlocal::locallocaltime()
                                                         ,$trolecode)                                                          ,$trolecode)
                                                      );                                                       );
Line 590  ENDENTERKEY Line 627  ENDENTERKEY
                                 }                                  }
                             }                              }
                         }                          }
                         my $msg;                          my $crstype = &Apache::loncommon::course_type($cdom.'_'.$cnum);
  my ($furl,$ferr)=                          $crstype = lc($crstype);
     &Apache::lonuserstate::readmap($cdom.'/'.$cnum);                          my $preamble = '<div id="LC_update_'.$cdom.'_'.$cnum.'" class="LC_info">'.
                         unless ($ferr) {                                         '<br />'.
                                          &mt("Please be patient while your $crstype loads").
                                          '<br /></div>'.
                                          '<div style="padding:0;clear:both;margin:0;border:0"></div>';
                           my $closure = <<ENDCLOSE;
   <script type="text/javascript">
   // <![CDATA[
   \$("#LC_update_${cdom}_${cnum}").hide('slow');
   // ]]>
   </script>
   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) {
                               my $checkrole = "cm./$cdom/$cnum";
                               if ($csec ne '') {
                                   $checkrole .= "/$csec";
                               }
                               unless ((&Apache::lonnet::allowed('evb',undef,undef,$checkrole)) &&
                                       ($trolecode !~ m{^st\./$cdom/$cnum})) {
                                   $critmsg_check = 0;
                               }
                           }
                           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});                              &Apache::lonnet::appenv({'request.course.timechecked'=>$now});
                             unless (($env{'form.switchrole'}) ||                               unless (($env{'form.switchrole'}) || 
                                     ($env{"environment.internal.$cdom.$cnum.$role.adhoc"})) {                                      ($env{"environment.internal.$cdom.$cnum.$role.adhoc"})) {
Line 649  ENDENTERKEY Line 723  ENDENTERKEY
                             }                              }
     if (&Apache::lonnet::allowed('adv') eq 'F') { $tadv=1; }      if (&Apache::lonnet::allowed('adv') eq 'F') { $tadv=1; }
     &Apache::lonnet::appenv({'request.role.adv'=>$tadv});      &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)) {                              if (($ferr) && ($tadv)) {
  &error_page($r,$ferr,$dest);   &error_page($r,$ferr,$furl);
     } else {      } else {
                                   if ($env{'request.course.id'} eq $cdom.'_'.$cnum) {
                                       if (($env{'form.orgurl'} ne '') && ($env{'form.symb'} ne '')) {
                                           unless (&Apache::lonnet::symbverify($env{'form.symb'},$env{'form.orgurl'}) {
                                               $dest=$env{'form.orgurl'};
                                           }
                                       } 
                                   }
                                 if ($dest =~ m{^/adm/coursedocs\?folderpath}) {                                  if ($dest =~ m{^/adm/coursedocs\?folderpath}) {
                                     if ($env{'request.course.id'} eq $cdom.'_'.$cnum) {                                       if ($env{'request.course.id'} eq $cdom.'_'.$cnum) { 
                                         my $chome = &Apache::lonnet::homeserver($cnum,$cdom);                                          my $chome = &Apache::lonnet::homeserver($cnum,$cdom);
Line 659  ENDENTERKEY Line 748  ENDENTERKEY
                                                                                        $cdom.'_'.$cnum);                                                                                         $cdom.'_'.$cnum);
                                     }                                      }
                                 }                                  }
                                 if (($env{'request.lti.login'}) &&                                  if ($ferr) {
                                     ($env{'request.lti.rosterid'} || $env{'request.lti.passbackid'})) {                                      if (!$env{'request.course.id'}) {
                                     &process_lti($r,$cdom,$cnum);                                          &Apache::lonnet::appenv(
                                              {"request.course.id"  => $cdom.'_'.$cnum});
                                           $r->print('<p class="LC_error">'.
                                                     &mt('Could not initialize [_1] at this time.',
                                                         $env{'course.'.$cdom.'_'.$cnum.'.description'}).
                                                     '</p>'.
                                                     '<p><a href="'.$furl.'">'.
                                                     &mt('Please try again.').'</a></p>'.
                                                     &Apache::loncommon::end_page());
                                       }
                                   } else {
                                       if (($env{'request.lti.login'}) &&
                                           ($env{'request.lti.rosterid'} || $env{'request.lti.passbackid'})) {
                                           &process_lti($r,$cdom,$cnum);
                                       }
                                       $msg = '<p>'.&mt('Entering [_1] ...',
                                                        $env{'course.'.$cdom.'_'.$cnum.'.description'}).
                                              '</p>';
                                       &finish_loading_course($r,$msg,$dest);
                                 }                                  }
  $r->internal_redirect($dest);  
     }      }
                               $r->rflush();
     return OK;      return OK;
  } else {   } else {
     if (!$env{'request.course.id'}) {      if (!$env{'request.course.id'}) {
  &Apache::lonnet::appenv(   &Apache::lonnet::appenv(
       {"request.course.id"  => $cdom.'_'.$cnum});        {"request.course.id"  => $cdom.'_'.$cnum});
  $furl='/adm/roles?tryagain=1';  
                 $msg='<p><span class="LC_error">'  
                     .&mt('Could not initialize [_1] at this time.',  
                          $env{'course.'.$cdom.'_'.$cnum.'.description'})  
                     .'</span></p>'  
                     .'<p>'.&mt('Please try again.').'</p>'  
                     .'<p>'.$ferr.'</p>';  
     }      }
     if (&Apache::lonnet::allowed('adv') eq 'F') { $tadv=1; }      if (&Apache::lonnet::allowed('adv') eq 'F') { $tadv=1; }
     &Apache::lonnet::appenv({'request.role.adv'=>$tadv});      &Apache::lonnet::appenv({'request.role.adv'=>$tadv});
       if ($ferr) {
     if (($ferr) && ($tadv)) {                                  if ($tadv) {
  &error_page($r,$ferr,$furl);      &error_page($r,$ferr,$furl);
                                   } else {
                                       $r->print('<p class="LC_error">'.
                                                 &mt('Could not initialize [_1] at this time.',
                                                     $env{'course.'.$cdom.'_'.$cnum.'.description'}).
                                                 '</p>'.
                                                 '<p><a href="'.$furl.'">'.&mt('Please try again.').'</a></p>'.
                                                 &Apache::loncommon::end_page());
                                   }
     } else {      } else {
                                 if (($env{'request.lti.login'}) &&                                  if (($env{'request.lti.login'}) &&
                                     ($env{'request.lti.rosterid'} || $env{'request.lti.passbackid'})) {                                      ($env{'request.lti.rosterid'} || $env{'request.lti.passbackid'})) {
Line 700  ENDENTERKEY Line 808  ENDENTERKEY
                                         my ($score,$incomplete) =                                           my ($score,$incomplete) = 
                                             &Apache::lonplacementtest::check_completion(undef,undef,1);                                              &Apache::lonplacementtest::check_completion(undef,undef,1);
                                         if (($incomplete) && ($incomplete < 100)) {                                          if (($incomplete) && ($incomplete < 100)) {
                                             &redirect_user($r, &mt('Entering [_1]',                                              $msg = '<p>'.&mt('Entering [_1] ...',
                                                           $env{'course.'.$cdom.'_'.$cnum.'.description'}),                                                               $env{'course.'.$cdom.'_'.$cnum.'.description'}).
                                                           '/adm/placement', $msg);                                                     '</p>';
                                               &finish_loading_course($r,$msg,'/adm/placement');
                                               $r->rflush();
                                             return OK;                                              return OK;
                                         }                                          }
                                     }                                      }
Line 721  ENDENTERKEY Line 831  ENDENTERKEY
                                             if (($dest =~ m{^\Q/public/$cdom/$cnum/syllabus\E.*(\?|\&)usehttp=1}) ||                                              if (($dest =~ m{^\Q/public/$cdom/$cnum/syllabus\E.*(\?|\&)usehttp=1}) ||
                                                 ($dest =~ m{^\Q/adm/wrapper/ext/\E(?!https:)})) {                                                  ($dest =~ m{^\Q/adm/wrapper/ext/\E(?!https:)})) {
                                                 if ($ENV{'SERVER_PORT'} == 443) {                                                  if ($ENV{'SERVER_PORT'} == 443) {
                                                     my $hostname = $r->hostname();                                                      unless (&Apache::lonnet::uses_sts()) {
                                                     if ($hostname ne '') {                                                          my $hostname = $r->hostname();
                                                         $dest = 'http://'.$hostname.$dest;                                                          if ($hostname ne '') {
                                                               $dest = 'http://'.$hostname.$dest;
                                                           }
                                                     }                                                      }
                                                 }                                                  }
                                             }                                              }
Line 762  ENDENTERKEY Line 874  ENDENTERKEY
                                                 $dest .= (($dest =~/\?/)? '&':'?').'symb='.$esc_symb;                                                  $dest .= (($dest =~/\?/)? '&':'?').'symb='.$esc_symb;
                                             }                                              }
                                         }                                          }
                                         my $title;  
                                         unless ($env{'request.lti.login'}) {                                          unless ($env{'request.lti.login'}) {
                                             $title = &mt('Entering [_1]',                                              $msg = '<p>'.&mt('Entering [_1] ...',
                                                          $env{'course.'.$cdom.'_'.$cnum.'.description'});                                                               $env{'course.'.$cdom.'_'.$cnum.'.description'}).
                                                      '</p>';
                                         }                                          }
                                         &redirect_user($r,$title,$dest,$msg);                                          &finish_loading_course($r,$msg,$dest);
                                           $r->rflush();
                                         return OK;                                          return OK;
                                     }                                      }
     if (&Apache::lonnet::allowed('whn',      if (&Apache::lonnet::allowed('whn',
Line 778  ENDENTERKEY Line 891  ENDENTERKEY
  ) {   ) {
  my $startpage = &courseloadpage($env{'request.course.id'});   my $startpage = &courseloadpage($env{'request.course.id'});
  unless ($startpage eq 'firstres') {            unless ($startpage eq 'firstres') {         
     $msg = &mt('Entering [_1] ...',      $msg = '<p>'.&mt('Entering [_1] ...',
        $env{'course.'.$env{'request.course.id'}.'.description'});               $env{'course.'.$cdom.'_'.$cnum.'.description'}).
     &redirect_user($r, &mt('New in course'),                                                     '</p>';
                                        '/adm/whatsnew?refpage=start', $msg);                                              &finish_loading_course($r,$msg,'/adm/whatsnew?refpage=start');
                                               $r->rflush();
     return OK;      return OK;
  }   }
     }      }
Line 805  ENDENTERKEY Line 919  ENDENTERKEY
                                 } elsif ($access eq 'B') {                                  } elsif ($access eq 'B') {
                                     $furl = '/adm/navmaps?showOnlyHomework=1';                                      $furl = '/adm/navmaps?showOnlyHomework=1';
                                 }                                  }
                                 my $title;  
                                 if ($env{'request.lti.login'}) {                                  if ($env{'request.lti.login'}) {
                                     undef($msg);                                      undef($msg);
                                       &finish_loading_course($r,$msg,$furl);
                                 } else {                                  } else {
                                     $title = &mt('Entering [_1]',                                      $msg = '<p>'.&mt('Entering [_1] ...',
                                                  $env{'course.'.$cdom.'_'.$cnum.'.description'});                $env{'course.'.$cdom.'_'.$cnum.'.description'}).
                                     $msg = &mt('Entering [_1] ...',                                             '</p>';
        $env{'course.'.$cdom.'_'.$cnum.'.description'});                                      &finish_loading_course($r,$msg,$furl);
                                 }                                  }
  &redirect_user($r,$title,$furl,$msg);  
     }      }
                               $r->rflush();
     return OK;      return OK;
  }   }
     }      }
Line 879  ENDENTERKEY Line 993  ENDENTERKEY
         $crumbtext = 'Courses';          $crumbtext = 'Courses';
         $pagetitle = 'My Courses';          $pagetitle = 'My Courses';
         $recent = &mt('Recent 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}];      my $brcrum =[{href=>"/adm/roles",text=>$crumbtext}];
   
Line 1106  ENDHEADER Line 1220  ENDHEADER
   
 # No active roles  # No active roles
     if ($countactive==0) {      if ($countactive==0) {
         &requestcourse_advice($r,$cattype,$inrole);           my $elapsed = 0;
           if ($now && $update) {
               $elapsed = $now - $update;
           }
           &requestcourse_advice($r,$cattype,$inrole,$elapsed); 
  $r->print('</form>');   $r->print('</form>');
         if ($countfuture) {          if ($countfuture) {
             $r->print(&mt('The following [quant,_1,role,roles] will become active in the future:',$countfuture));              $r->print(&mt('The following [quant,_1,role,roles] will become active in the future:',$countfuture));
Line 1656  sub print_rolerows { Line 1774  sub print_rolerows {
 }  }
   
 sub findcourse_advice {  sub findcourse_advice {
     my ($r,$cattype) = @_;      my ($r,$cattype,$elapsed) = @_;
     my $domdesc = &Apache::lonnet::domain($env{'user.domain'},'description');      my $domdesc = &Apache::lonnet::domain($env{'user.domain'},'description');
     my $esc_dom = &HTML::Entities::encode($env{'user.domain'},'"<>&');      my $esc_dom = &HTML::Entities::encode($env{'user.domain'},'"<>&');
     if (&Apache::lonnet::auto_run(undef,$env{'user.domain'})) {      if (&Apache::lonnet::auto_run(undef,$env{'user.domain'})) {
         $r->print(&mt('If you were expecting to see an active role listed for a particular course in the [_1] domain, it may be missing for one of the following reasons:',$domdesc).'          $r->print('<p>'.&mt('If you were expecting to see an active role listed for a particular course in the [_1] domain, it may be missing for one of the following reasons:',$domdesc).'
 <ul>  <ul>
  <li>'.&mt('The course has yet to be created.').'</li>   <li>'.&mt('The course has yet to be created.').'</li>
  <li>'.&mt('Automatic enrollment of registered students has not been enabled for the course.').'</li>   <li>'.&mt('Automatic enrollment of registered students has not been enabled for the course.').'</li>
  <li>'.&mt('You are in a section of course for which automatic enrollment in the corresponding LON-CAPA course is not active.').'</li>   <li>'.&mt('You are in a section of course for which automatic enrollment in the corresponding LON-CAPA course is not active.').'</li>
  <li>'.&mt('The start date for automated enrollment has yet to be reached.').'</li>   <li>'.&mt('The start date for automated enrollment has yet to be reached.').'</li>
  <li>'.&mt('You registered for the course recently and there is a time lag between the time you register, and the time this information becomes available for the update of LON-CAPA course rosters.').'</li>   <li>'.&mt('You registered for the course recently and there is a time lag between the time you register, and the time this information becomes available for the update of LON-CAPA course rosters.').'</li>
  <li>'.&mt('Automated enrollment added you to the course in the time since you last logged in.').' '.&mt('If that is the case you can use the "Check for changes" link in the gray Functions bar to update the list of your available course roles.').'</li>      <li>'.&mt('Automated enrollment added you to the course in the time since you last logged-in.').' '.&mt('If that is the case you can use the "Check for changes" link in the gray Functions bar to update the list of your available course roles.').'</li>   
  </ul>');   </ul></p>');
     } else {      } else {
         $r->print(&mt('If you were expecting to see an active role listed for a particular course, that course may not have been created yet.').'<br />');          $r->print('<p>'.&mt('If you were expecting to see an active role listed for a particular course, that course may not have been created yet.').'</p>');
           if ($elapsed > 600) {
               $r->print('<p>'.&mt('You may also have been assigned to a course in the time since you last logged-in, or checked for changes').
                         '<br />'.
                         &mt('If that is the case you can use the "Check for changes" link in the gray Functions bar to update the list of your available course roles.').'</p>');
           }  
     }      }
     if (($cattype eq 'std') || ($cattype eq 'domonly')) {      if (($cattype eq 'std') || ($cattype eq 'domonly')) {
         $r->print('<h3>'.&mt('Self-Enrollment').'</h3>'.          $r->print('<h3>'.&mt('Self-Enrollment').'</h3>'.
Line 1682  sub findcourse_advice { Line 1805  sub findcourse_advice {
 }  }
   
 sub requestcourse_advice {  sub requestcourse_advice {
     my ($r,$cattype,$inrole) = @_;      my ($r,$cattype,$inrole,$elapsed) = @_;
     my $domdesc = &Apache::lonnet::domain($env{'user.domain'},'description');      my $domdesc = &Apache::lonnet::domain($env{'user.domain'},'description');
     my $esc_dom = &HTML::Entities::encode($env{'user.domain'},'"<>&');      my $esc_dom = &HTML::Entities::encode($env{'user.domain'},'"<>&');
     my (%can_request,%request_doms,$output);      my (%can_request,%request_doms,$output);
Line 1743  sub requestcourse_advice { Line 1866  sub requestcourse_advice {
         } else {          } else {
             $r->print('<h3>'.&mt('Currently no active roles, courses or communities').'</h3>');              $r->print('<h3>'.&mt('Currently no active roles, courses or communities').'</h3>');
         }          }
         &findcourse_advice($r,$cattype);          &findcourse_advice($r,$cattype,$elapsed);
     }      }
     return;      return;
 }  }

Removed from v.1.341  
changed lines
  Added in v.1.347


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>