Diff for /rat/lonpageflip.pm between versions 1.93 and 1.97

version 1.93, 2017/02/20 18:29:33 version 1.97, 2017/11/16 13:42:01
Line 279  sub first_answerable_ressymb { Line 279  sub first_answerable_ressymb {
     }      }
 }  }
   
 sub check_for_syllabus {  sub check_http_req {
     my ($srcref) = @_;      my ($srcref) = @_;
     return unless (ref($srcref) eq 'SCALAR');      return unless (ref($srcref) eq 'SCALAR');
     my $usehttp;      my $usehttp;
Line 291  sub check_for_syllabus { Line 291  sub check_for_syllabus {
             ($env{'course.'.$env{'request.course.id'}.'.externalsyllabus'} =~ m{^http://})) {              ($env{'course.'.$env{'request.course.id'}.'.externalsyllabus'} =~ m{^http://})) {
             $$srcref .= (($$srcref =~/\?/)? '&':'?') . 'usehttp=1';              $$srcref .= (($$srcref =~/\?/)? '&':'?') . 'usehttp=1';
             $usehttp = 1;              $usehttp = 1;
           } elsif (($$srcref =~ m{^\Q/adm/wrapper/ext/\E(?!https:)}) &&
                    ($ENV{'SERVER_PORT'} == 443)) {
               $usehttp = 1;
         }          }
     }      }
     return $usehttp;      return $usehttp;
 }  }
   
   sub reinited_js {
       my ($url,$cid,$timeout) = @_;
       if (!$timeout) {
           $timeout = 0;
       }
       return <<"END";
   <script type="text/javascript">
   // <![CDATA[
   setTimeout(function() {
       var newurl = '$url';
       if (document.getElementById('LC_update_$cid')) {
           document.getElementById('LC_update_$cid').style.display = 'none';
       }
       if ((newurl !== null) && (newurl !== '') && (newurl !== 'undefined')) {
           window.location.href = "$url";
       }
   }, $timeout);
   // ]]>
   </script>
   END
   }
   
 # ================================================================ Main Handler  # ================================================================ Main Handler
   
 sub handler {  sub handler {
Line 312  sub handler { Line 337  sub handler {
   my %cachehash=();     my %cachehash=(); 
   my $multichoice=0;    my $multichoice=0;
   my %multichoicehash=();    my %multichoicehash=();
     my %prog_state=();
   my ($redirecturl,$redirectsymb,$enc,$anchor);    my ($redirecturl,$redirectsymb,$enc,$anchor);
   my $next='';    my $next='';
     my $hostname = $r->hostname();
   my @possibilities=();    my @possibilities=();
    &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['postdata']);     &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['postdata']);
   if (($env{'form.postdata'})&&($env{'request.course.fn'})) {    if (($env{'form.postdata'})&&($env{'request.course.fn'})) {
Line 333  sub handler { Line 360  sub handler {
           }            }
       } elsif ($direction eq 'firstanswerable') {        } elsif ($direction eq 'firstanswerable') {
           my $furl = &first_answerable_ressymb();            my $furl = &first_answerable_ressymb();
           my $usehttp = &check_for_syllabus(\$furl);            my $usehttp = &check_http_req(\$furl);
           if ($usehttp) {            if (($usehttp) && ($hostname ne '')) {
               $furl='http://'.$ENV{'SERVER_NAME'}.$furl;                $furl='http://'.$hostname.$furl;
           } else {            } else {
               $furl=&Apache::lonnet::absolute_url().$furl;                $furl=&Apache::lonnet::absolute_url().$furl;
           }            }
Line 368  sub handler { Line 395  sub handler {
                       untie(%hash);                        untie(%hash);
                   }                    }
               }                }
                 &Apache::loncommon::content_type($r,'text/html');
                 $r->send_http_header;
                 $r->print(&Apache::loncommon::start_page('Content Changed'));
                 my $preamble = '<div id="LC_update_'.$env{'request.course.id'}.'" class="LC_info">'.
                                '<br />'.
                                &mt('Your course session is being updated because of recent changes by course personnel.').
                                ' '.&mt('Please be patient.').'<br /></div>'.
                                '<div style="padding:0;clear:both;margin:0;border:0"></div>';
                 %prog_state = &Apache::lonhtmlcommon::Create_PrgWin($r,undef,$preamble);
                 &Apache::lonhtmlcommon::Update_PrgWin($r,\%prog_state,&mt('Updating course'));
               my ($furl,$ferr) = &Apache::lonuserstate::readmap("$cdom/$cnum");                my ($furl,$ferr) = &Apache::lonuserstate::readmap("$cdom/$cnum");
                 &Apache::lonhtmlcommon::Update_PrgWin($r,\%prog_state,&mt('Finished'));
               if ($ferr) {                if ($ferr) {
                     &Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state);
                   my $requrl = $r->uri;                    my $requrl = $r->uri;
                   $env{'user.error.msg'}="$requrl:bre:0:0:Course not initialized";                    $env{'user.error.msg'}="$requrl:bre:0:0:Course not initialized";
                   $env{'user.reinit'} = 1;                    $env{'user.reinit'} = 1;
Line 386  sub handler { Line 425  sub handler {
       }        }
       if ($direction eq 'firstres') {        if ($direction eq 'firstres') {
   my $furl=&first_accessible_resource();    my $furl=&first_accessible_resource();
           my $usehttp = &check_for_syllabus(\$furl);            my $usehttp = &check_http_req(\$furl);
           if ($usehttp) {            if (($usehttp) && ($hostname ne '')) {
               $furl='http://'.$ENV{'SERVER_NAME'}.$furl;                $furl='http://'.$hostname.$furl;
           } else {            } else {
               $furl=&Apache::lonnet::absolute_url().$furl;                $furl=&Apache::lonnet::absolute_url().$furl;
           }            }
   &Apache::loncommon::content_type($r,'text/html');            if ($reinitcheck eq 'update') {
   $r->header_out(Location => $furl);                &Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state);
   return REDIRECT;                $r->print(&reinited_js($furl,$env{'request.course.id'},100));
                 $r->print(&Apache::loncommon::end_page());
                 return OK;
             } else {
         &Apache::loncommon::content_type($r,'text/html');
         $r->header_out(Location => $furl);
         return REDIRECT;
             }
       }        }
       if ($direction eq 'return') {         if ($direction eq 'return') { 
 # -------------------------------------------------------- Return to last known  # -------------------------------------------------------- Return to last known
Line 405  sub handler { Line 451  sub handler {
     $id=$hash{'map_pc_'.&Apache::lonnet::clutter($murl)}.'.'.$id;      $id=$hash{'map_pc_'.&Apache::lonnet::clutter($murl)}.'.'.$id;
     $newloc=$hash{'src_'.$id};      $newloc=$hash{'src_'.$id};
     if ($newloc) {      if ($newloc) {
                 $usehttp = &check_for_syllabus(\$newloc);                  $usehttp = &check_http_req(\$newloc);
  if ($hash{'encrypted_'.$id}) {    if ($hash{'encrypted_'.$id}) { 
                     $newloc=&Apache::lonenc::encrypted($newloc);                      $newloc=&Apache::lonenc::encrypted($newloc);
                 } elsif ($newloc =~ m{^(/adm/wrapper/ext/[^\#]+)\#([^\#]+)$}) {                  } elsif ($newloc =~ m{^(/adm/wrapper/ext/[^\#]+)\#([^\#]+)$}) {
Line 418  sub handler { Line 464  sub handler {
          } else {           } else {
     $newloc='/adm/navmaps';      $newloc='/adm/navmaps';
          }           }
          if ($usehttp) {           if (($usehttp) && ($hostname ne '')) {
              $newloc='http://'.$ENV{'SERVER_NAME'}.$newloc;               $newloc='http://'.$hostname.$newloc;
          } else {           } else {
              $newloc=&Apache::lonnet::absolute_url().$newloc               $newloc=&Apache::lonnet::absolute_url().$newloc
          }           }
  &Apache::loncommon::content_type($r,'text/html');           if ($reinitcheck eq 'update') {
  $r->header_out(Location => $newloc);               $r->print(&reinited_js($newloc,$env{'request.course.id'},100));
  return REDIRECT;               $r->print(&Apache::loncommon::end_page());
                return OK;
            } else {
        &Apache::loncommon::content_type($r,'text/html');
        $r->header_out(Location => $newloc);
        return REDIRECT;
            }
       }        }
 #  #
 # Is the current URL on the map? If not, start with last known URL  # Is the current URL on the map? If not, start with last known URL
Line 443  sub handler { Line 495  sub handler {
          if ($last) {           if ($last) {
      $currenturl=&Apache::lonnet::clutter((&Apache::lonnet::decode_symb($last))[2]);       $currenturl=&Apache::lonnet::clutter((&Apache::lonnet::decode_symb($last))[2]);
  } else {   } else {
      &Apache::loncommon::content_type($r,'text/html');               my $newloc = &Apache::lonnet::absolute_url().
      $r->header_out(Location =>                             '/adm/navmaps'; 
     &Apache::lonnet::absolute_url().               if ($reinitcheck eq 'update') {
     '/adm/navmaps');                   &Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state);
      return REDIRECT;                   $r->print(&reinited_js($newloc,$env{'request.course.id'},100));
                    $r->print(&Apache::loncommon::end_page());
                    return OK;
                } else {
            &Apache::loncommon::content_type($r,'text/html');
            $r->header_out(Location => $newloc); 
            return REDIRECT;
                }
          }           }
       }        }
 # ------------------------------------------- Do we have any idea where we are?  # ------------------------------------------- Do we have any idea where we are?
Line 526  sub handler { Line 585  sub handler {
                      &Apache::lonnet::linklog($redirecturl,$currenturl);                       &Apache::lonnet::linklog($redirecturl,$currenturl);
   }    }
 # ------------------------------------- Check for and display critical messages  # ------------------------------------- Check for and display critical messages
                   my ($redirect, $url) = &Apache::loncommon::critical_redirect(300);                    my ($redirect, $url) = &Apache::loncommon::critical_redirect(300,'flip');
                   unless ($redirect) {                    unless ($redirect) {
                       my $usehttp = &check_for_syllabus(\$redirecturl);                        my $usehttp = &check_http_req(\$redirecturl);
                       if ($usehttp) {                        if (($usehttp) && ($hostname ne '')) {
                           $url='http://'.$ENV{'SERVER_NAME'}.$redirecturl;                            $url='http://'.$hostname.$redirecturl;
                       } else {                        } else {
                           $url=&Apache::lonnet::absolute_url().$redirecturl;                            $url=&Apache::lonnet::absolute_url().$redirecturl;
                       }                        }
Line 544  sub handler { Line 603  sub handler {
                           $url .= $anchor;                            $url .= $anchor;
                       }                        }
                   }                    }
                   &Apache::loncommon::content_type($r,'text/html');                    if ($reinitcheck eq 'update') {
                   $r->header_out(Location => $url);                        &Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state);
                   return REDIRECT;                        $r->print(&reinited_js($url,$env{'request.course.id'},100)); 
                         $r->print(&Apache::loncommon::end_page());
                         return OK;
                     } else {
                         &Apache::loncommon::content_type($r,'text/html');
                         $r->header_out(Location => $url);
                         return REDIRECT;
                     }
       } else {        } else {
 # --------------------------------------------------------- There was a problem  # --------------------------------------------------------- There was a problem
                   &Apache::loncommon::content_type($r,'text/html');                    &Apache::loncommon::content_type($r,'text/html');
Line 583  $lt{'pick'}: Line 649  $lt{'pick'}:
 ENDSTART  ENDSTART
                      foreach my $id (@possibilities) {                       foreach my $id (@possibilities) {
                         my $src = $multichoicehash{'src_'.$id};                          my $src = $multichoicehash{'src_'.$id};
                         my $usehttp = &check_for_syllabus(\$src);                          my $usehttp = &check_http_req(\$src);
                         if ($usehttp) {                          if (($usehttp) && ($hostname ne '')) {
                             $src = 'http://'.$ENV{'SERVER_NAME'}.$src;                              $src = 'http://'.$hostname.$src;
                         }                          }
                         $r->print(                          $r->print(
                               '<tr><td><a href="'.                                '<tr><td><a href="'.
Line 649  ENDSTART Line 715  ENDSTART
       }        }
   } else {    } else {
 # ------------------------------------------------- Problem, could not tie hash  # ------------------------------------------------- Problem, could not tie hash
                 if ($reinitcheck eq 'update') {
                     &Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state);
                     $r->print(&Apache::loncommon::end_page());
                 } 
               $env{'user.error.msg'}="/adm/flip:bre:0:1:Course Data Missing";                $env{'user.error.msg'}="/adm/flip:bre:0:1:Course Data Missing";
               return HTTP_NOT_ACCEPTABLE;                 return HTTP_NOT_ACCEPTABLE; 
           }            }
       } else {        } else {
 # ---------------------------------------- No, could not determine where we are  # ---------------------------------------- No, could not determine where we are
   $r->internal_redirect('/adm/ambiguous');            my $newloc = '/adm/ambiguous';
             if ($reinitcheck eq 'update') {
                 &Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state);
                 $r->print(&reinited_js($newloc,$env{'request.course.id'},100));
                 $r->print(&Apache::loncommon::end_page());
             } else {
         $r->internal_redirect($newloc);
             }
           return OK;            return OK;
       }        }
   } else {    } else {

Removed from v.1.93  
changed lines
  Added in v.1.97


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