AJAX in the Staff Interface

NOTE: relevant patches are available at http://arwen.metavore.com/~jpw/ajaxcirc/.

Currently, in the svc/ directory and tagging tools, there are some cautious forays into using AJAX. However, many more areas of the staff (and possibly patron) interface could be improved using AJAX and well-structured web services.

Towards this end, LibLime has implemented an AJAX-enabled circulation screen and added click-to-edit for cells of existing values on the smart-rules page, for possible inclusion in 3.2.

Both of these use new web services.

AJAX Circulation uses /svc/checkouts:

  • POST /svc/checkouts/ (with data, creates a new checkout)
  • POST /svc/checkouts/<issueid> (renews or returns checkouts, based on POSTed data (POST returned=1 > /svc/checkouts/<issueid> returns a checkout, for example)

issueid is a new column on the issues and old_issues table that is a simple auto_increment integer. One feature of this webservice is that renewals and checkins can happen on multiple items at once, by doing, for example, POST /svc/checkouts/64|90|32 (where 64, 90 and 32 are the issues in question). This is perhaps not the REST-approved way to do it, but it was the least complex way of implementing required functionality.

The improved smart-rules page is somewhat simpler; POST key=<column from `issuingrules`>&value=<new value> > /svc/admin/issuingrules/<branch>;<categorycode>;<itemtype> updates a part of an issuing rule.

Both of these services are based on two new modules, C4::Output::JSONStream and C4::Service.

C4::Output::JSONStream implements a simple, HTML::Template-ish way of creating JSON objects:

my $response = new C4::Output::JSONStream;
 
$response->param( foo => 'blah'  );
 
$response->output() == "{'foo':'blah'}";

C4::Service bundles this and some utility functions, to make creation of JSON-based webservices simple:

my ( $query, $response ) = C4::Service->init( circulation => 1 ) # Required permissions
 
my ( $borrowernumber ) = C4::Service->require_params( 'borrowernumber' ) # Returns 'borrowernumber' from the query if present, returns 400 Bad Request and an error message if not
 
C4::Service->return_error( 'impossible', 'too_many', blah => 'boo!' ); # Returns 400 Bad Request, and { 'type': 'impossible', 'error': 'too_many', 'blah': 'boo!' }
 
C4::Service->return_success( $response );

It also has a simple regex-based dispatch mechanism, and support for multiple responses (207 Multi-status).

 
en/development/rfcs3.2/rfc32_ajax_in_the_staff_interface.txt · Last modified: 2008/08/18 11:47 by pianohacker
 
Except where otherwise noted, content on this wiki is licensed under the following license:CC Attribution-Noncommercial-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki