-if ($service and grep {$service eq $_} @services) {
-
- my @parmsrequired = @{$required{$service}};
- my @parmsoptional = @{$optional{$service}};
- my @parmsall = (@parmsrequired, @parmsoptional);
- my @names = $cgi->param;
- my %paramhash = ();
- foreach my $name (@names) {
- $paramhash{$name} = 1;
- }
-
- # check for missing parameters
- foreach my $name (@parmsrequired) {
- if ((! exists $paramhash{$name})) {
- $out->{'message'} = "missing $name parameter";
- }
- }
-
- # check for illegal parameters
- foreach my $name (@names) {
- my $found = 0;
- foreach my $name2 (@parmsall) {
- if ($name eq $name2) {
- $found = 1;
- }
- }
- if (($found == 0) && ($name ne 'service')) {
- $out->{'message'} = "$name is an illegal parameter";
- }
- }
-
- # check for multiple parameters
- foreach my $name (@names) {
- my @values = $cgi->param($name);
- if ($#values != 0) {
- $out->{'message'} = "multiple values are not allowed for the $name parameter";
- }
- }
-
- if (! $out->{'message'}) {
- # GetAvailability is a special case, as it cannot use XML::Simple
- if ($service eq "GetAvailability") {
- print CGI::header('text/xml');
- print C4::ILSDI::Services::GetAvailability($cgi);
- exit 0;
- }
- else {
- # Variable functions
- my $sub = do{
- no strict 'refs';
- my $symbol = 'C4::ILSDI::Services::'.$service;
- \&{"$symbol"};
- };
- # Call the requested service, and get its return value
- $out = &$sub($cgi);
- }
- }
-}
-else {
- $out->{'message'} = "NotSupported";
+if ( $service and any { $service eq $_ } @services ) {
+
+ my @parmsrequired = @{ $required{$service} };
+ my @parmsoptional = @{ $optional{$service} };
+ my @parmsall = ( @parmsrequired, @parmsoptional );
+ my @names = $cgi->param;
+ my %paramhash;
+ $paramhash{$_} = 1 for @names;
+
+ # check for missing parameters
+ for ( @parmsrequired ) {
+ unless ( exists $paramhash{$_} ) {
+ $out->{'code'} = "MissingParameter";
+ $out->{'message'} = "The required parameter ".$_." is missing.";
+ }
+ }
+
+ # check for illegal parameters
+ for my $name ( @names ) {
+ my $found = 0;
+ for my $name2 (@parmsall) {
+ if ( $name eq $name2 ) {
+ $found = 1;
+ }
+ }
+ if ( $found == 0 && $name ne 'service' ) {
+ $out->{'code'} = "IllegalParameter";
+ $out->{'message'} = "The parameter ".$name." is illegal.";
+ }
+ }
+
+ # check for multiple parameters
+ for ( @names ) {
+ my @values = $cgi->param($_);
+ if ( $#values != 0 ) {
+ $out->{'code'} = "MultipleValuesNotAllowed";
+ $out->{'message'} = "Multiple values not allowed for the parameter ".$_.".";
+ }
+ }
+
+ if ( !$out->{'message'} ) {
+
+ # GetAvailability is a special case, as it cannot use XML::Simple
+ if ( $service eq "GetAvailability" ) {
+ print CGI::header('text/xml');
+ print C4::ILSDI::Services::GetAvailability($cgi);
+ exit 0;
+ } else {
+
+ # Variable functions
+ my $sub = do {
+ no strict 'refs';
+ my $symbol = 'C4::ILSDI::Services::' . $service;
+ \&{"$symbol"};
+ };
+
+ # Call the requested service, and get its return value
+ $out = &$sub($cgi);
+ }
+ }
+} else {
+ $out->{'message'} = "NotSupported";