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

version 1.91, 2016/05/30 02:52:42 version 1.97, 2017/11/16 13:42:01
Line 279  sub first_answerable_ressymb { Line 279  sub first_answerable_ressymb {
     }      }
 }  }
   
   sub check_http_req {
       my ($srcref) = @_;
       return unless (ref($srcref) eq 'SCALAR');
       my $usehttp;
       if ($env{'request.course.id'}) {
           my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
           my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
           if (($$srcref =~ m{^\Q/public/$cdom/$cnum/syllabus\E($|\?)}) &&
               ($ENV{'SERVER_PORT'} == 443) &&
               ($env{'course.'.$env{'request.course.id'}.'.externalsyllabus'} =~ m{^http://})) {
               $$srcref .= (($$srcref =~/\?/)? '&':'?') . 'usehttp=1';
               $usehttp = 1;
           } elsif (($$srcref =~ m{^\Q/adm/wrapper/ext/\E(?!https:)}) &&
                    ($ENV{'SERVER_PORT'} == 443)) {
               $usehttp = 1;
           }
       }
       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 295  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 316  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_http_req(\$furl);
             if (($usehttp) && ($hostname ne '')) {
                 $furl='http://'.$hostname.$furl;
             } else {
                 $furl=&Apache::lonnet::absolute_url().$furl;
             }
           &Apache::loncommon::content_type($r,'text/html');            &Apache::loncommon::content_type($r,'text/html');
           $r->header_out(Location =>            $r->header_out(Location => $furl);
                          &Apache::lonnet::absolute_url().$furl);  
           return REDIRECT;            return REDIRECT;
       } elsif ($direction eq 'endplacement') {        } elsif ($direction eq 'endplacement') {
           &Apache::loncommon::content_type($r,'text/html');            &Apache::loncommon::content_type($r,'text/html');
Line 346  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 364  sub handler { Line 425  sub handler {
       }        }
       if ($direction eq 'firstres') {        if ($direction eq 'firstres') {
   my $furl=&first_accessible_resource();    my $furl=&first_accessible_resource();
   &Apache::loncommon::content_type($r,'text/html');            my $usehttp = &check_http_req(\$furl);
   $r->header_out(Location =>             if (($usehttp) && ($hostname ne '')) {
  &Apache::lonnet::absolute_url().$furl);                $furl='http://'.$hostname.$furl;
                  } else {
   return REDIRECT;                $furl=&Apache::lonnet::absolute_url().$furl;
             }
             if ($reinitcheck eq 'update') {
                 &Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state);
                 $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
          my $newloc;           my ($newloc,$usehttp);
          if (($last) && (tie(%hash,'GDBM_File',$env{'request.course.fn'}.'.db',           if (($last) && (tie(%hash,'GDBM_File',$env{'request.course.fn'}.'.db',
                         &GDBM_READER(),0640))) {                          &GDBM_READER(),0640))) {
             my ($murl,$id,$fn)=&Apache::lonnet::decode_symb($last);              my ($murl,$id,$fn)=&Apache::lonnet::decode_symb($last);
     $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) {
  if ($hash{'encrypted_'.$id}) { $newloc=&Apache::lonenc::encrypted($newloc); }                  $usehttp = &check_http_req(\$newloc);
    if ($hash{'encrypted_'.$id}) { 
                       $newloc=&Apache::lonenc::encrypted($newloc);
                   } elsif ($newloc =~ m{^(/adm/wrapper/ext/[^\#]+)\#([^\#]+)$}) {
                       $newloc = $1.&escape('#').$2;
                   }
     } else {      } else {
  $newloc='/adm/navmaps';   $newloc='/adm/navmaps';
     }      }
Line 387  sub handler { Line 464  sub handler {
          } else {           } else {
     $newloc='/adm/navmaps';      $newloc='/adm/navmaps';
          }           }
  &Apache::loncommon::content_type($r,'text/html');           if (($usehttp) && ($hostname ne '')) {
  $r->header_out(Location =>                $newloc='http://'.$hostname.$newloc;
  &Apache::lonnet::absolute_url().$newloc);           } else {
                     $newloc=&Apache::lonnet::absolute_url().$newloc
  return REDIRECT;           }
            if ($reinitcheck eq 'update') {
                $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;
            }
       }        }
 #  #
 # 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 409  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 492  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) {
                       $url=&Apache::lonnet::absolute_url().$redirecturl;                        my $usehttp = &check_http_req(\$redirecturl);
                         if (($usehttp) && ($hostname ne '')) {
                             $url='http://'.$hostname.$redirecturl;
                         } else {
                             $url=&Apache::lonnet::absolute_url().$redirecturl;
                         }
                       my $addanchor;                        my $addanchor;
                       if (($anchor ne '') && (!$enc || $env{'request.role.adv'})) {                        if (($anchor ne '') && (!$enc || $env{'request.role.adv'})) {
                           $addanchor = 1;                            $addanchor = 1;
Line 505  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 543  $lt{'pick'}: Line 648  $lt{'pick'}:
 <tr><th>$lt{'titleheader'}</th><th>$lt{'type'}</th></tr>  <tr><th>$lt{'titleheader'}</th><th>$lt{'type'}</th></tr>
 ENDSTART  ENDSTART
                      foreach my $id (@possibilities) {                       foreach my $id (@possibilities) {
                           my $src = $multichoicehash{'src_'.$id};
                           my $usehttp = &check_http_req(\$src);
                           if (($usehttp) && ($hostname ne '')) {
                               $src = 'http://'.$hostname.$src;
                           }
                         $r->print(                          $r->print(
                               '<tr><td><a href="'.                                '<tr><td><a href="'.
   &add_get_param($multichoicehash{'src_'.$id},    &add_get_param($src,
  {'symb' =>   {'symb' =>
       $multichoicehash{'symb_'.$id},        $multichoicehash{'symb_'.$id},
   }).'">'.    }).'">'.
Line 605  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.91  
changed lines
  Added in v.1.97


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