X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~yarrgweb/git?p=ypp-sc-tools.web-live.git;a=blobdiff_plain;f=yarrg%2Fweb%2Froutetextstring;h=bf4a4a9988fe9b237736cac3ca06b67353fab4cf;hp=70d614483d4efe3de4888af97413388628d2061d;hb=7548896aab16af6ec42c6be252b7f5f876e2fea0;hpb=23291f0a7104f790bc1309154864e97a8522c428 diff --git a/yarrg/web/routetextstring b/yarrg/web/routetextstring index 70d6144..bf4a4a9 100644 --- a/yarrg/web/routetextstring +++ b/yarrg/web/routetextstring @@ -31,12 +31,16 @@ if ($format =~ 'json') { success => 1, show => length $canontext ? encode_entities($canontext) : ' ', - })}; + })}; $output_wrong= sub { print to_json({ success => 0, show => $_[0], - })}; -} + })}; +} +if ($format =~ 'return') { + $output= sub { return { Error => '', Results => \@results }; }; + $output_wrong= sub { return { Error => $_[0] }; }; +} foreach my $each (split m#[/|,]#, $string) { $each =~ s/^\s*//; $each =~ s/\s*$//; $each =~ s/\s+/ /g; @@ -44,25 +48,24 @@ foreach my $each (split m#[/|,]#, $string) { my $err= sub { my $msg= sprintf $_[0], encode_entities($each); $output_wrong->($msg); - $m->abort(); }; - my @m; + my %m; my $results; foreach my $pat ("$each\%", "\%$each\%") { $sth->execute($pat,$pat); $results= $sth->fetchall_arrayref(); last if @$results==1; - push @m, @$results; + map { $m{ $_->[2] }=1 } @$results; $results= undef; } if (!$results) { - if (!@m) { - $err->('no island or arch matches "%s"'); - } elsif (@m > 3) { - $err->(' '); + if (!%m) { + return $err->('no island or arch matches "%s"'); + } elsif (%m > 5) { + return $err->(' '); } else { - $err->('ambiguous island or arch "%s", could be '. - join(', ', map { $_->[2] } @m)); + return $err->('ambiguous island or arch "%s",'. + ' could be '.join(', ', sort keys %m)); } } push @results, $results->[0]; @@ -70,6 +73,6 @@ foreach my $each (split m#[/|,]#, $string) { $canontext= join ' | ', map { $_->[2] } @results; -$output->(); +return $output->();