--- rat/lonpageflip.pm 2005/11/15 18:39:45 1.60 +++ rat/lonpageflip.pm 2006/03/06 23:35:43 1.65 @@ -2,7 +2,7 @@ # # Page flip handler # -# $Id: lonpageflip.pm,v 1.60 2005/11/15 18:39:45 albertel Exp $ +# $Id: lonpageflip.pm,v 1.65 2006/03/06 23:35:43 www Exp $ # # Copyright Michigan State University Board of Trustees # @@ -46,6 +46,7 @@ sub cleanup { &Apache::lonnet::logthis('Failed cleanup pageflip: hash'); } } + return OK; } sub addrid { @@ -96,25 +97,27 @@ sub move { while ($hash{'type_'.$rid} eq 'finish') { $rid=$hash{'ids_'.$hash{'map_id_'.(split(/\./,$rid))[0]}}; } - map { - my $thiscond= - &Apache::lonnet::directcondval($hash{'condid_'.$hash{'undercond_'.$_}}); - if ($thiscond>=$mincond) { + foreach my $id (split(/\,/,$hash{'to_'.$rid})) { + my $condition= $hash{'conditions_'.$hash{'goesto_'.$id}}; + my $rescond = &Apache::lonnet::docondval($condition); + my $linkcond = &Apache::lonnet::directcondval($hash{'condid_'.$hash{'undercond_'.$id}}); + my $thiscond = ($rescond<$linkcond)?$rescond:$linkcond; + if ($thiscond>=$mincond) { if ($posnext) { - $posnext.=','.$_.':'.$thiscond; + $posnext.=','.$id.':'.$thiscond; } else { - $posnext=$_.':'.$thiscond; + $posnext=$id.':'.$thiscond; } if ($thiscond>$mincond) { $mincond=$thiscond; } } - } split(/\,/,$hash{'to_'.$rid}); - map { - my ($linkid,$condval)=split(/\:/,$_); + } + foreach my $id (split(/\,/,$posnext)) { + my ($linkid,$condval)=split(/\:/,$id); if ($condval>=$mincond) { $next=&addrid($next,$hash{'goesto_'.$linkid}, $hash{'condid_'.$hash{'undercond_'.$linkid}}); } - } split(/\,/,$posnext); + } if ($hash{'is_map_'.$next}) { # This jumps to the beginning of a new map (going down level) if ( @@ -130,31 +133,33 @@ sub move { ((split(/\./,$startoutrid))[0]!=(split(/\./,$next))[0]) { # This comes up from a map (coming up one level); $mapurl=$hash{'map_id_'.(split(/\./,$next))[0]}; - } + } } elsif ($direction eq 'back') { # ------------------------------------------------------------------- Backwards while ($hash{'type_'.$rid} eq 'start') { $rid=$hash{'ids_'.$hash{'map_id_'.(split(/\./,$rid))[0]}}; } - map { - my $thiscond= - &Apache::lonnet::directcondval($hash{'condid_'.$hash{'undercond_'.$_}}); - if ($thiscond>=$mincond) { - if ($posnext) { - $posnext.=','.$_.':'.$thiscond; - } else { - $posnext=$_.':'.$thiscond; - } - if ($thiscond>$mincond) { $mincond=$thiscond; } - } - } split(/\,/,$hash{'from_'.$rid}); - map { - my ($linkid,$condval)=split(/\:/,$_); - if ($condval>=$mincond) { - $next=&addrid($next,$hash{'comesfrom_'.$linkid}, - $hash{'condid_'.$hash{'undercond_'.$linkid}}); - } - } split(/\,/,$posnext); + foreach my $id (split(/\,/,$hash{'from_'.$rid})) { + my $condition= $hash{'conditions_'.$hash{'comesfrom_'.$id}}; + my $rescond = &Apache::lonnet::docondval($condition); + my $linkcond = &Apache::lonnet::directcondval($hash{'condid_'.$hash{'undercond_'.$id}}); + my $thiscond = ($rescond<$linkcond)?$rescond:$linkcond; + if ($thiscond>=$mincond) { + if ($posnext) { + $posnext.=','.$id.':'.$thiscond; + } else { + $posnext=$id.':'.$thiscond; + } + if ($thiscond>$mincond) { $mincond=$thiscond; } + } + } + foreach my $id (split(/\,/,$posnext)) { + my ($linkid,$condval)=split(/\:/,$id); + if ($condval>=$mincond) { + $next=&addrid($next,$hash{'comesfrom_'.$linkid}, + $hash{'condid_'.$hash{'undercond_'.$linkid}}); + } + } if ($hash{'is_map_'.$next}) { # This jumps to the end of a new map (going down one level) if ( @@ -338,21 +343,21 @@ sub handler { } else { # ------------------------ There are multiple possibilities for a next resource $multichoice=1; - map { - $multichoicehash{'src_'.$_}=$hash{'src_'.$_}; - $multichoicehash{'title_'.$_}=$hash{'title_'.$_}; - $multichoicehash{'type_'.$_}=$hash{'type_'.$_}; - (my $first, my $second) = $_ =~ /(\d+).(\d+)/; - my $symbSrc = Apache::lonnet::declutter($hash{'src_'.$_}); - $multichoicehash{'symb_'.$_} = + foreach my $id (@possibilities) { + $multichoicehash{'src_'.$id}=$hash{'src_'.$id}; + $multichoicehash{'title_'.$id}=$hash{'title_'.$id}; + $multichoicehash{'type_'.$id}=$hash{'type_'.$id}; + (my $first, my $second) = $id =~ /(\d+).(\d+)/; + my $symbSrc = Apache::lonnet::declutter($hash{'src_'.$id}); + $multichoicehash{'symb_'.$id} = Apache::lonnet::declutter($hash{'map_id_'.$first}.'___'. $second.'___'.$symbSrc); - my ($choicemap,$choiceres)=split(/\./,$_); + my ($choicemap,$choiceres)=split(/\./,$id); my $map=&Apache::lonnet::declutter($hash{'src_'.$choicemap}); - my $url=$multichoicehash{'src_'.$_}; + my $url=$multichoicehash{'src_'.$id}; $cachehash{$map}{$url}=[$url,$choiceres]; - } @possibilities; + } } } else { # -------------------------------------------------------------- No place to go @@ -394,7 +399,7 @@ sub handler { &Apache::loncommon::content_type($r,'text/html'); my $url='http://'.$ENV{'HTTP_HOST'}.$redirecturl; - if ($redirectsymb ne '') { $url.='?symb='.&Apache::lonnet::escape($redirectsymb); } + if ($redirectsymb ne '') { $url.=($url=~/\?/?'&':'?').'symb='.&Apache::lonnet::escape($redirectsymb); } $r->header_out(Location => $url); return REDIRECT; } else { @@ -425,13 +430,13 @@ $lt{'pick'}: ENDSTART - foreach (@possibilities) { + foreach my $id (@possibilities) { $r->print( ''); } $r->print('
$lt{'titleheader'}$lt{'type'}
'. - $multichoicehash{'title_'.$_}. - ''.$multichoicehash{'type_'.$_}. + $multichoicehash{'src_'.$id}.($multichoicehash{'src_'.$id}=~/\?/?'&':'?').'symb=' . + Apache::lonnet::escape($multichoicehash{'symb_'.$id}).'">'. + $multichoicehash{'title_'.$id}. + ''.$multichoicehash{'type_'.$id}. '
');