]> git.evergreen-ils.org Git - working/NCIPServer.git/blob - lib/NCIP/Handler/LookupUser.pm
Bug fixing LookupUser
[working/NCIPServer.git] / lib / NCIP / Handler / LookupUser.pm
1 package NCIP::Handler::LookupUser;
2
3 =head1
4
5   NCIP::Handler::LookupUser
6
7 =head1 SYNOPSIS
8
9     Not to be called directly, NCIP::Handler will pick the appropriate Handler 
10     object, given a message type
11
12 =head1 FUNCTIONS
13
14 =cut
15
16 use Modern::Perl;
17
18 use NCIP::Handler;
19 use NCIP::User;
20
21 our @ISA = qw(NCIP::Handler);
22
23 sub handle {
24     my $self   = shift;
25     my $xmldoc = shift;
26     if ($xmldoc) {
27
28         # Given our xml document, lets find our userid
29         my ($user_id) =
30           $xmldoc->getElementsByTagNameNS( $self->namespace(),
31             'UserIdentifierValue' );
32         my $xpc = XML::LibXML::XPathContext->new;
33         $xpc->registerNs( 'ns', $self->namespace() );
34         unless ($user_id) {
35
36             # We may get a password, username combo instead of userid
37             # Need to deal with that also
38             my $root = $xmldoc->documentElement();
39             my @authtypes =
40               $xpc->findnodes( '//ns:AuthenticationInput', $root );
41             my $barcode;
42             my $pin;
43             foreach my $node (@authtypes) {
44                 my $class =
45                   $xpc->findnodes( './ns:AuthenticationInputType', $node );
46                 my $value =
47                   $xpc->findnodes( './ns:AuthenticationInputData', $node );
48                 if ( $class->[0]->textContent eq 'Barcode Id' ) {
49                     $barcode = $value->[0]->textContent;
50                 }
51                 elsif ( $class->[0]->textContent eq 'PIN' ) {
52                     $pin = $value->[0]->textContent;
53                 }
54
55             }
56             $user_id = $barcode;
57         }
58
59         # We may get a password, username combo instead of userid
60         # Need to deal with that also
61
62         my $user = NCIP::User->new(
63             { userid => $user_id->textContent(), ils => $self->ils } );
64         $user->initialise();
65
66         # if we have blank user, we need to return that
67         # and can skip looking for elementtypes
68         if ( $user->userdata->{'borrowernumber'} eq '' ) {
69             my $vars;
70             $vars->{'messagetype'} = 'LookupUser';
71             $vars->{'error_detail'} = "Borrower not found";
72             my $output = $self->render_output( 'problem.tt', $vars );
73             return $output;
74         }
75
76         my $root = $xmldoc->documentElement();
77         my @elements =
78           $xpc->findnodes( 'ns:LookupUser/UserElementType/Value', $root );
79
80         #set up the variables for our template
81         my $vars;
82         $vars->{'messagetype'} = 'LookupUserResponse';
83         $vars->{'elements'}    = \@elements;
84         $vars->{'user'}        = $user;
85         my $output = $self->render_output( 'response.tt', $vars );
86         return $output;
87
88     }
89 }
90
91 1;