--- rat/lonratedt.pm 2002/05/10 19:46:52 1.9 +++ rat/lonratedt.pm 2002/05/11 23:23:01 1.10 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Edit Handler for RAT Maps # -# $Id: lonratedt.pm,v 1.9 2002/05/10 19:46:52 www Exp $ +# $Id: lonratedt.pm,v 1.10 2002/05/11 23:23:01 www Exp $ # # Copyright Michigan State University Board of Trustees # @@ -37,17 +37,21 @@ use Apache::Constants qw(:common); use Apache::lonnet; use Apache::lonratsrv; -my @links=(); +my @order=(); my @resources=(); # Mapread read maps into global arrays @links and @resources, determines status - +# sets @order - pointer to resources in right order +# sets @resources - array with the resources with correct idx +# sub mapread { my $fn=shift; + my @links; undef @links; undef @resources; + undef @order; my ($outtext,$errtext)=&Apache::lonratsrv::loadmap($fn,''); if ($errtext) { return ($errtext,2); } @@ -73,17 +77,52 @@ sub mapread { my ($start,$end,$cond)=split(/\:/,$_); if ((defined($starters[$start])) || (defined($endings[$end]))) { return - ('Map too complex, has branchings. Use advanced editor.',1); + ('Map has branchings. Use advanced editor.',1); } $starters[$start]=1; $endings[$end]=1; if ($cond) { return - ('Map too complex, has conditions. Use advanced editor.',1); + ('Map has conditions. Use advanced editor.',1); } } } + for (my $i=0; $i<=$#resources; $i++) { + if (defined($resources[$i])) { + unless (($starters[$i]) || ($endings[$i])) { + return + ('Map has unconnected resources. Use advanced editor.',1); + } + } + } + +# -------------------------------------------------- This is a linear map, sort + + my $startidx=0; + my $endidx=0; + for (my $i=0; $i<=$#resources; $i++) { + if (defined($resources[$i])) { + my ($title,$url,$ext,$type)=split(/\:/,$resources[$i]); + if ($type eq 'start') { $startidx=$i; } + if ($type eq 'finish') { $endidx=$i; } + } + } + my $k=0; + my $currentidx=$startidx; + $order[$k]=$currentidx; + for (my $i=0; $i<=$#resources; $i++) { + foreach (@links) { + my ($start,$end)=split(/\:/,$_); + if ($start==$currentidx) { + $currentidx=$end; + $k++; + $order[$k]=$currentidx; + last; + } + } + if ($currentidx==$endidx) { last; } + } return $errtext; } @@ -239,8 +278,11 @@ ENDNODIR # ---------------------------------------------------------------- View Handler sub viewmap { - my ($r,$adv)=@_; + my ($r,$adv,$errtext)=@_; $r->print(''.&buttons($adv)); + if ($errtext) { + $r->print($errtext.'
'); + } foreach (@resources) { if (defined($_)) { my ($title,$url)=split(/\:/,$_); @@ -303,7 +345,7 @@ sub handler { } elsif ($ENV{'form.forcesmp'}) { &smpedt($r,$errtext); } else { - &viewmap($r,$adv); + &viewmap($r,$adv,$errtext); } return OK; }