Diff for /rat/lonpageflip.pm between versions 1.105 and 1.111

version 1.105, 2021/07/19 14:26:40 version 1.111, 2021/12/31 19:51:04
Line 103  sub move { Line 103  sub move {
     my $safecount=0;      my $safecount=0;
     my $allowed=0;      my $allowed=0;
     my $deeplinkonly=0;      my $deeplinkonly=0;
       my $deeplinkchecked;
       my $deeplink_login_pc;
     my $prev=$next;      my $prev=$next;
     my ($prevmapid)=split(/\./,$next);      my ($prevmapid)=split(/\./,$next);
     do {      do {
Line 115  sub move { Line 117  sub move {
  if ($url eq '' || $symb eq '') {   if ($url eq '' || $symb eq '') {
     $allowed = 0;      $allowed = 0;
  } else {   } else {
     my $priv = &Apache::lonnet::allowed('bre',$url,$symb);              my $nodeeplinkcheck = 0;
               if ($hash{'is_map_'.$next}) {
                   $nodeeplinkcheck = 1;
               }
       my $priv = &Apache::lonnet::allowed('bre',$url,$symb,'','','','',$nodeeplinkcheck);
     $allowed = (($priv eq 'F') || ($priv eq '2') || ($priv eq 'A'));      $allowed = (($priv eq 'F') || ($priv eq '2') || ($priv eq 'A'));
  }   }
         $deeplinkonly = 0;          $deeplinkonly = 0;
         if ($hash{'deeplinkonly_'.$next}) {          if ($hash{'deeplinkonly_'.$next}) {
             my ($value,$level) = split(/:/,$hash{'deeplinkonly_'.$next});              my ($value,$level) = map { &unescape($_); } split(/:/,$hash{'deeplinkonly_'.$next});
             if ($level eq 'resource') {              my ($state,$others,$listed,$scope,$protect) = split(/,/,$value);
                 $deeplinkonly = 1;              unless (($state eq 'both') || ($hash{'is_map_'.$next})) {
             } elsif ($level eq 'map') {                  if ($level eq 'resource') {
                 if ($mapid != $prevmapid) {  
                     $deeplinkonly = 1;                      $deeplinkonly = 1;
                   } elsif ($level eq 'map') {
                       if ($scope eq 'rec') {
                           unless ($mapid == $prevmapid) {
                               unless ($deeplinkchecked) {
                                   $deeplink_login_pc = &get_deeplink_login_pc();
                                   $deeplinkchecked = 1;
                               }
                               if ($deeplink_login_pc) {
                                   my $poss_map_pc;
                                   if ($hash{'is_map_'.$next}) {
                                       $poss_map_pc = $hash{'map_pc_'.$url};
                                   } else {
                                       $poss_map_pc = $hash{'map_pc_'.$hash{'map_id_'.$mapid}};
                                   }
                                   unless ($deeplink_login_pc == $poss_map_pc) {
                                       unless (grep(/^$deeplink_login_pc$/,split(/,/,$hash{'map_hierarchy_'.$poss_map_pc}))) {
                                           $deeplinkonly = 1;
                                       }
                                   }
                               } else {
                                   $deeplinkonly = 1;
                               }
                           }
                       } elsif ($mapid != $prevmapid) {
                           $deeplinkonly = 1;
                       }
                 }                  }
             }              }
         } elsif (($hash{'deeplinkonly_'.$prev}) && (!$firstres)) {          } elsif (($hash{'deeplinkonly_'.$prev}) && (!$firstres)) {
             my ($value,$level) = split(/:/,$hash{'deeplinkonly_'.$prev});              my ($value,$level) = map { &unescape($_); } split(/:/,$hash{'deeplinkonly_'.$prev});
             if ($level eq 'resource') {              my ($state,$others,$listed,$scope,$protect) = split(/,/,$value);
                 $deeplinkonly = 1;              unless (($state eq 'both') || ($hash{'is_map_'.$prev})) {
             } elsif ($level eq 'map') {                  if ($level eq 'resource') {
                 if ($mapid != $prevmapid) {  
                     $deeplinkonly = 1;                      $deeplinkonly = 1;
                   } elsif ($level eq 'map') {
                       if ($scope eq 'rec') {
                           unless ($mapid == $prevmapid) {
                               unless ($deeplinkchecked) {
                                   $deeplink_login_pc = &get_deeplink_login_pc();
                                   $deeplinkchecked = 1;
                               }
                               if ($deeplink_login_pc) {
                                   my $poss_map_pc;
                                   if ($hash{'is_map_'.$prev}) {
                                       $poss_map_pc = $hash{'map_pc_'.$url};
                                   } else {
                                       $poss_map_pc = $hash{'map_pc_'.$hash{'map_id_'.$mapid}};
                                   }
                                   unless ($deeplink_login_pc == $poss_map_pc) {
                                       unless (grep(/^$deeplink_login_pc$/,split(/,/,$hash{'map_hierarchy_'.$poss_map_pc}))) {
                                           $deeplinkonly = 1;
                                       }
                                   }
                               }
                           }
                       } else {
                           if ($mapid != $prevmapid) {
                               $deeplinkonly = 1;
                           }
                       }
                 }                  }
             }              }
         }          }
Line 146  sub move { Line 202  sub move {
  || (   || (
                         (!$env{'request.role.adv'})                          (!$env{'request.role.adv'})
                      && (($hash{'randomout_'.$next})                       && (($hash{'randomout_'.$next})
                      ||  ($deeplinkonly))                       ||  ($deeplinkonly)
                        ||  ($hash{'deeplinkout_'.$next}))
     )      )
  || (!$allowed)   || (!$allowed)
  )   )
Line 181  sub get_next_possible_move { Line 238  sub get_next_possible_move {
           }            }
                           if ($thiscond>$mincond) { $mincond=$thiscond; }                            if ($thiscond>$mincond) { $mincond=$thiscond; }
               }                }
                   }                     }
   foreach my $id (split(/\,/,$posnext))  {    foreach my $id (split(/\,/,$posnext))  {
                       my ($linkid,$condval)=split(/\:/,$id);                        my ($linkid,$condval)=split(/\:/,$id);
                       if ($condval>=$mincond) {                        if ($condval>=$mincond) {
Line 223  sub get_next_possible_move { Line 280  sub get_next_possible_move {
  }   }
  if ($thiscond>$mincond) { $mincond=$thiscond; }   if ($thiscond>$mincond) { $mincond=$thiscond; }
      }       }
  }    }
  foreach my $id (split(/\,/,$posnext)) {   foreach my $id (split(/\,/,$posnext)) {
      my ($linkid,$condval)=split(/\:/,$id);       my ($linkid,$condval)=split(/\:/,$id);
      if ($condval>=$mincond) {       if ($condval>=$mincond) {
Line 281  sub first_accessible_resource { Line 338  sub first_accessible_resource {
         if ($hash{'encrypted_'.$newrid}) {          if ($hash{'encrypted_'.$newrid}) {
     $furl=&Apache::lonenc::encrypted($furl);      $furl=&Apache::lonenc::encrypted($furl);
         }          }
     }              }
         }   }
  untie(%hash);   untie(%hash);
  return $furl;   return $furl;
     } else {      } else {
Line 363  setTimeout(function() { Line 420  setTimeout(function() {
 END  END
 }  }
   
   sub get_deeplink_login_pc {
       my $deeplink_login_pc;
       if (($env{'request.deeplink.login'}) && ($env{'request.course.id'})) {
           my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
           my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
           my $deeplink_symb = &Apache::loncommon::deeplink_login_symb($cnum,$cdom);
           if ($deeplink_symb) {
               my $loginmap;
               if ($deeplink_symb =~ /\.(page|sequence)$/) {
                   $loginmap = &Apache::lonnet::clutter((&Apache::lonnet::decode_symb($deeplink_symb))[2]);
               } else {
                   $loginmap = &Apache::lonnet::clutter((&Apache::lonnet::decode_symb($deeplink_symb))[0]);
               }
               $deeplink_login_pc = $hash{'map_pc_'.$loginmap};
           }
       }
       return $deeplink_login_pc;
   }
   
 # ================================================================ Main Handler  # ================================================================ Main Handler
   
 sub handler {  sub handler {
Line 609  sub handler { Line 685  sub handler {
       } else {        } else {
 # -------------------------------------------------------------- No place to go  # -------------------------------------------------------------- No place to go
                   $multichoice=-1;                    $multichoice=-1;
                   if ($hash{'deeplinkonly_'.$rid}) {                    if ($position && $env{'request.deeplink.login'}) {
                       (my $value,$deeplinklevel) = split(/:/,$hash{'deeplinkonly_'.$rid});                        my ($map,$resid,$url) = &Apache::lonnet::decode_symb($position);
                         my $mapid = $hash{'map_pc_'.&Apache::lonnet::clutter($map)};
                         my $position_deeplink = $hash{'deeplinkonly_'.$mapid.'.'.$resid};
                         if ($position_deeplink) {
                             (my $value,$deeplinklevel) = map { &unescape($_); } 
                                                          split(/:/,$position_deeplink);
                         }
                   }                    }
               }                }
 # ----------------- The program must come past this point to untie the big hash  # ----------------- The program must come past this point to untie the big hash
Line 754  ENDSTART Line 836  ENDSTART
                           }                            }
                       }                        }
   }    }
                   unless (($env{'course.'.$env{'request.course.id'}.'.type'} eq 'Placement') ||                    unless (($env{'course.'.$env{'request.course.id'}.'.type'} eq 'Placement') &&
                           ($env{'request.role.adv'})) {                            (!$env{'request.role.adv'})) {
                       if ($deeplinklevel) {                        if ($deeplinklevel) {
                           $r->print(                            $r->print(
                               &Apache::lonhtmlcommon::actionbox(                                &Apache::lonhtmlcommon::actionbox(

Removed from v.1.105  
changed lines
  Added in v.1.111


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>
500 Internal Server Error

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at root@localhost to inform them of the time this error occurred, and the actions you performed just before this error.

More information about this error may be available in the server error log.