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

version 1.105, 2021/07/19 14:26:40 version 1.112, 2022/10/19 00:03:12
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 426  sub handler { Line 502  sub handler {
               $r->send_http_header;                $r->send_http_header;
               $r->print(&Apache::loncommon::check_release_result(@reinit));                $r->print(&Apache::loncommon::check_release_result(@reinit));
               return OK;                return OK;
           } elsif ($reinitcheck eq 'update') {            }
               my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};            my ($cnum,$cdom);
               my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};            if ($reinitcheck) {
                 $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
                 $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
             }
             if (($reinitcheck eq 'main') || ($reinitcheck eq 'both')) {
               $preupdatepos = &Apache::lonnet::symbread($currenturl);                $preupdatepos = &Apache::lonnet::symbread($currenturl);
               unless ($direction eq 'return') {                unless ($direction eq 'return') {
                   if (tie(%hash,'GDBM_File',$env{'request.course.fn'}.'_symb.db',                    if (tie(%hash,'GDBM_File',$env{'request.course.fn'}.'_symb.db',
Line 464  sub handler { Line 544  sub handler {
                   }                    }
               }                }
           }            }
             if (($reinitcheck eq 'both') || ($reinitcheck eq 'supp')) {
                 my ($supplemental,$refs_updated) = &Apache::lonnet::get_supplemental($cnum,$cdom);
                 unless ($refs_updated) {
                     &Apache::loncommon::set_supp_httprefs($cnum,$cdom,$supplemental);
                 }
             }
       }        }
       if ($direction eq 'firstres') {        if ($direction eq 'firstres') {
   my $furl=&first_accessible_resource();    my $furl=&first_accessible_resource();
Line 609  sub handler { Line 695  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 846  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.112


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