--- rat/lonpageflip.pm 2005/11/09 11:39:00 1.58 +++ rat/lonpageflip.pm 2006/03/06 23:35:43 1.65 @@ -2,7 +2,7 @@ # # Page flip handler # -# $Id: lonpageflip.pm,v 1.58 2005/11/09 11:39:00 www 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,55 +399,64 @@ 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 { # --------------------------------------------------------- There was a problem &Apache::loncommon::content_type($r,'text/html'); $r->send_http_header; + my %lt=&Apache::lonlocal::texthash('title' => 'End of Sequence', + 'explain' => + 'You have reached the end of the sequence of materials.', + 'back' => 'Go Back', + 'nav' => 'Navigate Course Content', + 'wherenext' => + 'There are several possibilities of where to go next', + 'pick' => + 'Please click on the the resource you intend to access', + 'titleheader' => 'Title', + 'type' => 'Type'); if ($#possibilities>0) { my $bodytag= &Apache::loncommon::bodytag('Multiple Resources'); $r->print(<Choose Next Location $bodytag -

There are several possibilities of where to go next

+

$lt{'wherenext'}

-Please click on the the resource you intend to access: +$lt{'pick'}:

- + ENDSTART - foreach (@possibilities) { + foreach my $id (@possibilities) { $r->print( ''); } - $r->print('
TitleType
$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}. '
'); - return OK; + $r->print(''); } else { my $bodytag=&Apache::loncommon::bodytag('No Resource'); - $r->print(<print(<No Resource $bodytag -

Next resource could not be identified.

-

You probably are at the beginning or the end of the -course.

- - - +

$lt{'title'}

+

$lt{'explain'}

ENDNONE - return OK; - } - } + } + $r->print(< +
  • $lt{'back'}
  • +
  • $lt{'nav'}
  • + +ENDMENU + return OK; + } } else { # ------------------------------------------------- Problem, could not tie hash $env{'user.error.msg'}="/adm/flip:bre:0:1:Course Data Missing"; @@ -450,9 +464,6 @@ ENDNONE } } else { # ---------------------------------------- No, could not determine where we are - if ( &Apache::lonnet::mod_perl_version() == 2 ) { - &Apache::lonnet::cleanenv(); - } $r->internal_redirect('/adm/ambiguous'); } } else { 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.