[Koha-patches] [PATCH 4/7] [MT2306_2271] ILS-DI Messages uniformization

Henri-Damien LAURENT henridamien.laurent at biblibre.com
Fri Feb 26 21:37:46 CET 2010


[MT2306_2271] ILS-DI Message codes consistence

The services now returns ILSDI error codes in a <code> tag, plus details in a <message> tag.

Exemple:

<LookupPatron>
<code>MissingParameter</code>
<message>The required parameter patron_id is missing.</message>
</LookupPatron>

[MT2306_2271] Minor changes in HTML
---
 C4/ILSDI/Services.pm                           |  138 +++++++++++++++++++++++-
 koha-tmpl/opac-tmpl/prog/en/modules/ilsdi.tmpl |   14 ++--
 opac/ilsdi.pl                                  |   21 ++--
 3 files changed, 154 insertions(+), 19 deletions(-)

diff --git a/C4/ILSDI/Services.pm b/C4/ILSDI/Services.pm
index bb32166..2e64953 100644
--- a/C4/ILSDI/Services.pm
+++ b/C4/ILSDI/Services.pm
@@ -170,7 +170,7 @@ sub GetRecords {
 
     # Check if the schema is supported. For now, GetRecords only supports MARCXML
     if ( $cgi->param('schema') and $cgi->param('schema') ne "MARCXML" ) {
-        return { message => 'UnsupportedSchema' };
+        return { code => 'UnsupportedSchema' };
     }
 
     my @records;
@@ -214,7 +214,17 @@ sub GetRecords {
 
         map { $biblioitem->{$_} = encode_entities( $biblioitem->{$_}, '&' ) } grep( !/marcxml/, keys %$biblioitem );
 
+<<<<<<< HEAD:C4/ILSDI/Services.pm
         push @records, $biblioitem;
+=======
+            $_ = encode_entities( $$biblioitem{$_}, '&' ) for @$biblioitem{ grep {!/marcxml/} keys %$biblioitem };
+            
+            push @records, $biblioitem;
+            
+        } else {
+            push @records, { code => 'RecordNotFound' };
+        }
+>>>>>>> [MT2306_2271] ILS-DI Message codes consistence:C4/ILSDI.pm
     }
 
     return { record => \@records };
@@ -241,7 +251,7 @@ sub GetAuthorityRecords {
 
     # If the user asks for an unsupported schema, return an error code
     if ( $cgi->param('schema') and $cgi->param('schema') ne "MARCXML" ) {
-        return { message => 'UnsupportedSchema' };
+        return { code => 'UnsupportedSchema' };
     }
 
     my $records;
@@ -250,8 +260,12 @@ sub GetAuthorityRecords {
     foreach my $authid ( split( / /, $cgi->param('id') ) ) {
 
         # Get the record as XML string, or error code
+<<<<<<< HEAD:C4/ILSDI/Services.pm
         my $record = GetAuthorityXML($authid) || "<record>RecordNotFound</record>";
-        $record =~ s/<\?xml version="1.0" encoding="UTF-8"\?>//go;
+=======
+        my $record = GetAuthorityXML( $_ ) || "<record><code>RecordNotFound</code></record>";
+>>>>>>> [MT2306_2271] ILS-DI Message codes consistence:C4/ILSDI.pm
+        $record =~ s/<\?xml(.*)\?>//go;
         $records .= $record;
     }
 
@@ -279,6 +293,7 @@ sub LookupPatron {
     my ($cgi) = @_;
 
     # Get the borrower...
+<<<<<<< HEAD:C4/ILSDI/Services.pm
     my $borrower = GetMember($cgi->param('id_type') => $cgi->param('id'));
     if ( not $borrower->{'borrowernumber'} ) {
         return { message => 'PatronNotFound' };
@@ -286,6 +301,10 @@ sub LookupPatron {
 
     # Build the hashref
     my $patron->{'id'} = $borrower->{'borrowernumber'};
+=======
+    my $borrower = GetMember( $cgi->param('id'), $cgi->param('id_type') );
+    return { code => 'PatronNotFound' } unless $$borrower{borrowernumber};
+>>>>>>> [MT2306_2271] ILS-DI Message codes consistence:C4/ILSDI.pm
 
     # ...and return his ID
     return $patron;
@@ -308,9 +327,15 @@ sub LookupPatron {
 sub AuthenticatePatron {
     my ($cgi) = @_;
 
+<<<<<<< HEAD:C4/ILSDI/Services.pm
     # Check if borrower exists, using a C4::ILSDI::Utility function...
     if ( not( BorrowerExists( $cgi->param('username'), $cgi->param('password') ) ) ) {
         return { message => 'PatronNotFound' };
+=======
+    # Check if borrower exists, using a C4::Auth function...
+    unless( checkpw( C4::Context->dbh, $cgi->param('username'), $cgi->param('password') ) ) {
+        return { code => 'PatronNotFound' };
+>>>>>>> [MT2306_2271] ILS-DI Message codes consistence:C4/ILSDI.pm
     }
 
     # Get the borrower
@@ -349,10 +374,15 @@ sub GetPatronInfo {
 
     # Get Member details
     my $borrowernumber = $cgi->param('patron_id');
+<<<<<<< HEAD:C4/ILSDI/Services.pm
     my $borrower = GetMemberDetails( $borrowernumber, undef );
     if ( not $borrower->{'borrowernumber'} ) {
         return { message => 'PatronNotFound' };
     }
+=======
+    my $borrower = GetMemberDetails( $borrowernumber );
+    return { code => 'PatronNotFound' } unless $$borrower{borrowernumber};
+>>>>>>> [MT2306_2271] ILS-DI Message codes consistence:C4/ILSDI.pm
 
     # Cleaning the borrower hashref
     $borrower->{'charges'}    = $borrower->{'flags'}->{'CHARGES'}->{'amount'};
@@ -436,6 +466,7 @@ sub GetPatronStatus {
 
     # Get Member details
     my $borrowernumber = $cgi->param('patron_id');
+<<<<<<< HEAD:C4/ILSDI/Services.pm
     my $borrower = GetMemberDetails( $borrowernumber, undef );
     if ( not $borrower->{'borrowernumber'} ) {
         return { message => 'PatronNotFound' };
@@ -448,6 +479,17 @@ sub GetPatronStatus {
     $patron->{'expiry'} = $borrower->{'dateexpiry'};
 
     return $patron;
+=======
+    my $borrower = GetMemberDetails( $borrowernumber );
+    return { code => 'PatronNotFound' } unless $$borrower{borrowernumber};
+
+    # Return the results
+    return {
+        type   => $$borrower{categorycode},
+        status => 0, # TODO
+        expiry => $$borrower{dateexpiry},
+    };
+>>>>>>> [MT2306_2271] ILS-DI Message codes consistence:C4/ILSDI.pm
 }
 
 =head2 GetServices
@@ -468,6 +510,7 @@ sub GetServices {
 
     # Get the member, or return an error code if not found
     my $borrowernumber = $cgi->param('patron_id');
+<<<<<<< HEAD:C4/ILSDI/Services.pm
     my $borrower = GetMemberDetails( $borrowernumber, undef );
     if ( not $borrower->{'borrowernumber'} ) {
         return { message => 'PatronNotFound' };
@@ -479,6 +522,15 @@ sub GetServices {
     if ( not $item->{'itemnumber'} ) {
         return { message => 'RecordNotFound' };
     }
+=======
+    my $borrower = GetMemberDetails( $borrowernumber );
+    return { code => 'PatronNotFound' } unless $$borrower{borrowernumber};
+
+    # Get the item, or return an error code if not found
+    my $itemnumber = $cgi->param('item_id');
+    my $item = GetItem( $itemnumber );
+    return { code => 'RecordNotFound' } unless $$item{itemnumber};
+>>>>>>> [MT2306_2271] ILS-DI Message codes consistence:C4/ILSDI.pm
 
     my @availablefor;
 
@@ -544,17 +596,27 @@ sub RenewLoan {
 
     # Get borrower infos or return an error code
     my $borrowernumber = $cgi->param('patron_id');
+<<<<<<< HEAD:C4/ILSDI/Services.pm
     my $borrower = GetMemberDetails( $borrowernumber, undef );
     if ( not $borrower->{'borrowernumber'} ) {
         return { message => 'PatronNotFound' };
     }
+=======
+    my $borrower = GetMemberDetails( $borrowernumber );
+    return { code => 'PatronNotFound' } unless $$borrower{borrowernumber};
+>>>>>>> [MT2306_2271] ILS-DI Message codes consistence:C4/ILSDI.pm
 
     # Get the item, or return an error code
     my $itemnumber = $cgi->param('item_id');
+<<<<<<< HEAD:C4/ILSDI/Services.pm
     my $item = GetItem( $itemnumber, undef, undef );
     if ( not $item->{'itemnumber'} ) {
         return { message => 'RecordNotFound' };
     }
+=======
+    my $item = GetItem( $itemnumber );
+    return { code => 'RecordNotFound' } unless $$item{itemnumber};
+>>>>>>> [MT2306_2271] ILS-DI Message codes consistence:C4/ILSDI.pm
 
     # Add renewal if possible
     my @renewal = CanBookBeRenewed( $borrowernumber, $itemnumber );
@@ -598,6 +660,7 @@ sub HoldTitle {
 
     # Get the borrower or return an error code
     my $borrowernumber = $cgi->param('patron_id');
+<<<<<<< HEAD:C4/ILSDI/Services.pm
     my $borrower = GetMemberDetails( $borrowernumber, undef );
     if ( not $borrower->{'borrowernumber'} ) {
         return { message => 'PatronNotFound' };
@@ -616,18 +679,39 @@ sub HoldTitle {
     if ( not $canbereserved ) {
         return { message => 'NotHoldable' };
     }
+=======
+    my $borrower = GetMemberDetails( $borrowernumber );
+    return { code => 'PatronNotFound' } unless $$borrower{borrowernumber};
+
+    # Get the biblio record, or return an error code
+    my $biblionumber = $cgi->param('bib_id');
+    my ( $count, $biblio ) = GetBiblio( $biblionumber );
+    return { code => 'RecordNotFound' } unless $$biblio{biblionumber};
+    
+    my $title = $$biblio{title};
+
+    # Check if the biblio can be reserved
+    return { code => 'NotHoldable' } unless CanBookBeReserved( $borrowernumber, $biblionumber );
+>>>>>>> [MT2306_2271] ILS-DI Message codes consistence:C4/ILSDI.pm
 
     my $branch;
 
     # Pickup branch management
     if ( $cgi->param('pickup_location') ) {
         $branch = $cgi->param('pickup_location');
+<<<<<<< HEAD:C4/ILSDI/Services.pm
         my $branches = GetBranches();
         if ( not $branches->{$branch} ) {
             return { message => 'LocationNotFound' };
         }
     } else {    # if user provide no branch, use his own
         $branch = $borrower->{'branchcode'};
+=======
+        my $branches = GetBranches;
+        return { code => 'LocationNotFound' } unless $$branches{$branch};
+    } else { # if the request provide no branch, use the borrower's branch
+        $branch = $$borrower{branchcode};
+>>>>>>> [MT2306_2271] ILS-DI Message codes consistence:C4/ILSDI.pm
     }
 
     # Add the reserve
@@ -671,14 +755,20 @@ sub HoldItem {
 
     # Get the borrower or return an error code
     my $borrowernumber = $cgi->param('patron_id');
+<<<<<<< HEAD:C4/ILSDI/Services.pm
     my $borrower = GetMemberDetails( $borrowernumber, undef );
     if ( not $borrower->{'borrowernumber'} ) {
         return { message => 'PatronNotFound' };
     }
+=======
+    my $borrower = GetMemberDetails( $borrowernumber );
+    return { code => 'PatronNotFound' } unless $$borrower{borrowernumber};
+>>>>>>> [MT2306_2271] ILS-DI Message codes consistence:C4/ILSDI.pm
 
     # Get the biblio or return an error code
     my $biblionumber = $cgi->param('bib_id');
     my ( $count, $biblio ) = GetBiblio($biblionumber);
+<<<<<<< HEAD:C4/ILSDI/Services.pm
     if ( not $biblio->{'biblionumber'} ) {
         return { message => 'RecordNotFound' };
     }
@@ -702,6 +792,24 @@ sub HoldItem {
     if ( ( not $canbookbereserved ) or not($canitembereserved) ) {
         return { message => 'NotHoldable' };
     }
+=======
+    return { code => 'RecordNotFound' } unless $$biblio{biblionumber};
+
+    my $title = $$biblio{title};
+
+    # Get the item or return an error code
+    my $itemnumber = $cgi->param('item_id');
+    my $item = GetItem( $itemnumber );
+    return { code => 'RecordNotFound' } unless $$item{itemnumber};
+
+    # If the biblio does not match the item, return an error code
+    return { code => 'RecordNotFound' } if $$item{biblionumber} ne $$biblio{biblionumber};
+
+    # Check for item disponibility
+    my $canitembereserved = CanItemBeReserved( $borrowernumber, $itemnumber );
+    my $canbookbereserved = CanBookBeReserved( $borrowernumber, $biblionumber );
+    return { code => 'NotHoldable' } unless $canbookbereserved and $canitembereserved;
+>>>>>>> [MT2306_2271] ILS-DI Message codes consistence:C4/ILSDI.pm
 
     my $branch;
 
@@ -709,11 +817,17 @@ sub HoldItem {
     if ( $cgi->param('pickup_location') ) {
         $branch = $cgi->param('pickup_location');
         my $branches = GetBranches();
+<<<<<<< HEAD:C4/ILSDI/Services.pm
         if ( not $branches->{$branch} ) {
             return { message => 'LocationNotFound' };
         }
     } else {    # if user provide no branch, use his own
         $branch = $borrower->{'branchcode'};
+=======
+        return { code => 'LocationNotFound' } unless $$branches{$branch};
+    } else { # if the request provide no branch, use the borrower's branch
+        $branch = $$borrower{branchcode};
+>>>>>>> [MT2306_2271] ILS-DI Message codes consistence:C4/ILSDI.pm
     }
 
     my $rank;
@@ -756,6 +870,7 @@ sub CancelHold {
 
     # Get the borrower or return an error code
     my $borrowernumber = $cgi->param('patron_id');
+<<<<<<< HEAD:C4/ILSDI/Services.pm
     my $borrower = GetMemberDetails( $borrowernumber, undef );
     if ( not $borrower->{'borrowernumber'} ) {
         return { message => 'PatronNotFound' };
@@ -767,6 +882,15 @@ sub CancelHold {
     if ( not $item->{'itemnumber'} ) {
         return { message => 'RecordNotFound' };
     }
+=======
+    my $borrower = GetMemberDetails( $borrowernumber );
+    return { code => 'PatronNotFound' } unless $$borrower{borrowernumber};
+
+    # Get the item or return an error code
+    my $itemnumber = $cgi->param('item_id');
+    my $item = GetItem( $itemnumber );
+    return { code => 'RecordNotFound' } unless $$item{itemnumber};
+>>>>>>> [MT2306_2271] ILS-DI Message codes consistence:C4/ILSDI.pm
 
     # Get borrower's reserves
     my @reserves = GetReservesFromBorrowernumber( $borrowernumber, undef );
@@ -778,15 +902,23 @@ sub CancelHold {
     }
 
     # if the item was not reserved by the borrower, returns an error code
+<<<<<<< HEAD:C4/ILSDI/Services.pm
     if ( not grep { $itemnumber eq $_ } @reserveditems ) {
         return { message => 'NotCanceled' };
     }
+=======
+    return { code => 'NotCanceled' } unless any { $itemnumber eq $_ } @reserveditemnumbers;
+>>>>>>> [MT2306_2271] ILS-DI Message codes consistence:C4/ILSDI.pm
 
     # Cancel the reserve
     CancelReserve( $itemnumber, undef, $borrowernumber );
 
+<<<<<<< HEAD:C4/ILSDI/Services.pm
     return { message => 'Canceled' };
 
+=======
+    return { code => 'Canceled' };
+>>>>>>> [MT2306_2271] ILS-DI Message codes consistence:C4/ILSDI.pm
 }
 
 1;
diff --git a/koha-tmpl/opac-tmpl/prog/en/modules/ilsdi.tmpl b/koha-tmpl/opac-tmpl/prog/en/modules/ilsdi.tmpl
index ffae61d..dfe1495 100644
--- a/koha-tmpl/opac-tmpl/prog/en/modules/ilsdi.tmpl
+++ b/koha-tmpl/opac-tmpl/prog/en/modules/ilsdi.tmpl
@@ -1,4 +1,4 @@
-<!-- TMPL_INCLUDE NAME="doc-head-open.inc" --><!-- TMPL_VAR NAME="LibraryNameTitle" DEFAULT="Koha Online" --> Catalog &rsaquo;  ISBD
+<!-- TMPL_INCLUDE NAME="doc-head-open.inc" --><!-- TMPL_VAR NAME="LibraryNameTitle" DEFAULT="Koha Online" --> &rsaquo; ILS-DI
 <!-- TMPL_INCLUDE NAME="doc-head-close.inc" -->
 </head>
 <body>
@@ -697,11 +697,11 @@
                     <li>HarvestAuthorityRecords <em>(Use OAI-PMH instead)</em></li>
                     <li>HarvestHoldingsRecords <em>(Use OAI-PMH instead)</em></li>
                     <li><a href="ilsdi.pl?service=Describe&verb=GetRecords">GetRecords</a></li>
-                    <li>Search</li>
-                    <li>Scan</li>
+                    <li>Search <em>(Use SRU instead)</em></li>
+                    <li>Scan <em>(Use SRU instead)</em></li>
                     <li><a href="ilsdi.pl?service=Describe&verb=GetAuthorityRecords">GetAuthorityRecords</a></li>
-                    <li>OutputRewritablePage</li>
-                    <li>OutputIntermediateFormat</li>
+                    <li>OutputRewritablePage <em>(Not supported yet)</em></li>
+                    <li>OutputIntermediateFormat <em>(Not supported yet)</em></li>
                 </ul>
                 <h2>Level 3: Elementary OPAC alternative</h2>
                 <ul>
@@ -719,8 +719,8 @@
                 </ul>
                 <h2>Level 4: Robust/domain specific discovery platforms</h2>
                 <ul>
-                    <li>SearchCourseReserves</li>
-                    <li>Explain</li>
+                    <li>SearchCourseReserves <em>(Not supported yet)</em></li>
+                    <li>Explain <em>(Not supported yet)</em></li>
                 </ul>
 
 <!-- /TMPL_IF -->
diff --git a/opac/ilsdi.pl b/opac/ilsdi.pl
index 0c9938e..b1a8203 100755
--- a/opac/ilsdi.pl
+++ b/opac/ilsdi.pl
@@ -141,10 +141,12 @@ if ( $cgi->param('service') eq "Describe" and any { $cgi->param('verb') eq $_ }
     exit 0;
 }
 
+my $out;
+
 # If ILS-DI module is disabled in System->Preferences, redirect to 404
 unless ( C4::Context->preference('ILS-DI') ) {
-    print $cgi->redirect("/cgi-bin/koha/errors/404.pl");
-    exit 1;
+    $out->{'code'} = "NotAllowed";
+    $out->{'message'} = "ILS-DI is disabled.";
 }
 
 # If the remote address is not allowed, redirect to 403
@@ -152,14 +154,12 @@ my @AuthorizedIPs = split(/,/, C4::Context->preference('ILS-DI:AuthorizedIPs'));
 if ( @AuthorizedIPs # If no filter set, allow access to everybody
     and not any { $ENV{'REMOTE_ADDR'} eq $_ } @AuthorizedIPs # IP Check
     ) {
-    print $cgi->redirect("/cgi-bin/koha/errors/403.pl");
-    exit 1;
+    $out->{'code'} = "NotAllowed";
+    $out->{'message'} = "Unauthorized IP address: ".$ENV{'REMOTE_ADDR'}.".";
 }
 
 my $service = $cgi->param('service') || "ilsdi";
 
-my $out;
-
 # Check if the requested service is in the list
 if ( $service and any { $service eq $_ } @services ) {
 
@@ -173,7 +173,8 @@ if ( $service and any { $service eq $_ } @services ) {
     # check for missing parameters
     for ( @parmsrequired ) {
         unless ( exists $paramhash{$_} ) {
-            $out->{'message'} = "missing $_ parameter";
+            $out->{'code'} = "MissingParameter";
+            $out->{'message'} = "The required parameter ".$_." is missing.";
         }
     }
 
@@ -186,7 +187,8 @@ if ( $service and any { $service eq $_ } @services ) {
             }
         }
         if ( $found == 0 && $name ne 'service' ) {
-            $out->{'message'} = "$name is an illegal parameter";
+            $out->{'code'} = "IllegalParameter";
+            $out->{'message'} = "The parameter ".$name." is illegal.";
         }
     }
 
@@ -194,7 +196,8 @@ if ( $service and any { $service eq $_ } @services ) {
     for ( @names ) {
         my @values = $cgi->param($_);
         if ( $#values != 0 ) {
-            $out->{'message'} = "multiple values are not allowed for the $_ parameter";
+            $out->{'code'} = "MultipleValuesNotAllowed";
+            $out->{'message'} = "Multiple values not allowed for the parameter ".$_.".";
         }
     }
 
-- 
1.6.3.3




More information about the Koha-patches mailing list