LP1207396 Patron self-registration web form
authorBill Erickson <berick@esilibrary.com>
Thu, 1 Aug 2013 20:52:18 +0000 (16:52 -0400)
committerBill Erickson <berick@esilibrary.com>
Fri, 2 Aug 2013 14:53:35 +0000 (10:53 -0400)
Signed-off-by: Bill Erickson <berick@esilibrary.com>
Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader.pm
Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/Register.pm [new file with mode: 0644]
Open-ILS/src/templates/opac/css/style.css.tt2
Open-ILS/src/templates/opac/parts/footer.tt2
Open-ILS/src/templates/opac/register.tt2 [new file with mode: 0644]

index 0838a29..24ad257 100644 (file)
@@ -23,6 +23,7 @@ use OpenILS::WWW::EGCatLoader::Search;
 use OpenILS::WWW::EGCatLoader::Record;
 use OpenILS::WWW::EGCatLoader::Container;
 use OpenILS::WWW::EGCatLoader::SMS;
+use OpenILS::WWW::EGCatLoader::Register;
 
 my $U = 'OpenILS::Application::AppUtils';
 
@@ -138,6 +139,7 @@ sub load {
     return $self->redirect_ssl unless $self->cgi->https;
     return $self->load_password_reset if $path =~ m|opac/password_reset|;
     return $self->load_logout if $path =~ m|opac/logout|;
+    return $self->load_patron_reg if $path =~ m|opac/register|;
 
     if($path =~ m|opac/login|) {
         return $self->load_login unless $self->editor->requestor; # already logged in?
diff --git a/Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/Register.pm b/Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/Register.pm
new file mode 100644 (file)
index 0000000..d808bee
--- /dev/null
@@ -0,0 +1,59 @@
+package OpenILS::WWW::EGCatLoader;
+use strict; use warnings;
+use Apache2::Const -compile => qw(OK FORBIDDEN HTTP_INTERNAL_SERVER_ERROR);
+use OpenSRF::Utils::Logger qw/$logger/;
+use OpenILS::Utils::Fieldmapper;
+use OpenILS::Application::AppUtils;
+use OpenILS::Event;
+my $U = 'OpenILS::Application::AppUtils';
+
+sub load_patron_reg {
+    my $self = shift;
+    my $ctx = $self->ctx;
+    my $cgi = $self->cgi;
+    $ctx->{register} = {};
+
+    # just loading the form
+    return Apache2::Const::OK
+        unless $cgi->request_method eq 'POST';
+
+    my $user = Fieldmapper::staging::user_stage->new;
+    my $addr = Fieldmapper::staging::mailing_address_stage->new;
+
+    # user
+    foreach (grep /^stgu\./, $cgi->param) {
+        my $val = $cgi->param($_);
+        # TODO validate
+        s/^stgu\.//g;
+        $user->$_($val);
+    }
+
+    # address
+    foreach (grep /^stgma\./, $cgi->param) {
+        my $val = $cgi->param($_);
+        # TODO validate
+        s/^stgma\.//g;
+        $addr->$_($val);
+    }
+
+    # user.stage.create will generate a temporary usrname and 
+    # link the user and address objects via this username in the DB.
+    my $resp = $U->simplereq(
+        'open-ils.actor', 
+        'open-ils.actor.user.stage.create',
+        $user, $addr
+    );
+
+    if (!$resp or ref $resp) {
+
+        $logger->warn("Patron self-reg failed ".($resp || ''));
+        $ctx->{register}{error} = 1;
+
+    } else {
+
+        $logger->info("Patron self-reg success; usrname $resp");
+        $ctx->{register}{success} = 1;
+    }
+
+    return Apache2::Const::OK;
+}
index 00d90d9..6c7adc4 100644 (file)
@@ -1536,3 +1536,22 @@ a.preflib_change {
     color: [% css_colors.text_invert %];
     text-align: center;
 }
+
+#main-content-register {
+    margin-left: 40px;
+    font-size: 120%;
+}
+
+#main-content-register table { 
+    padding: 20px; 
+    margin-top: 18px; 
+    border-collapse: collapse;
+}
+
+#main-content-register td {
+    text-align: left;
+}
+
+#main-content-register td:not(:first-child) {
+    padding-left: 20px;
+}
index 2368055..cf43f7c 100644 (file)
@@ -1,8 +1,13 @@
 <div id="footer-wrap">
 <div id="footer">
     <a href="/">[% l('Dynamic catalog') %]</a> &nbsp;|&nbsp;
-    <a href="http://example.com">[% l('Bottom Link 2') %]</a> &nbsp;|&nbsp;
+    [% IF ctx.get_org_setting(
+        ctx.physical_loc || ctx.aou_tree.id, 'opac.allow_pending_user') %]
+    <a href="[% mkurl(ctx.opac_root _ '/register') %]">[% 
+        l('Request Library Card') %]</a> &nbsp;|&nbsp;
+    [% ELSE %]
     <a href="http://example.com">[% l('Bottom Link 3') %]</a> &nbsp;|&nbsp;
+    [% END %]
     <a href="http://example.com">[% l('Bottom Link 4') %]</a> &nbsp;|&nbsp;
     <a href="http://example.com">[% l('Bottom Link 5') %]</a>
     [% IF ctx.timing %]
diff --git a/Open-ILS/src/templates/opac/register.tt2 b/Open-ILS/src/templates/opac/register.tt2
new file mode 100644 (file)
index 0000000..475f4de
--- /dev/null
@@ -0,0 +1,91 @@
+[%- PROCESS "opac/parts/header.tt2";
+    WRAPPER "opac/parts/base.tt2";
+    INCLUDE "opac/parts/topnav.tt2";
+    ctx.page_title = l("Request Library Card") %]
+    <div id="content-wrapper">
+        <div id="main-content-register">
+            <div class="common-full-pad"></div>
+            <h1>[% l('Request a Library Card')%]</h1>
+            <hr/>
+
+            [% IF ctx.register.success %]
+                <h2>[% |l %]
+                Registration successful!  Please see library staff to 
+                complete the registration.
+                [% END %]</h2>
+            [% ELSIF ctx.register.error %]
+                <h2>[% |l %]
+                An registration error has occurred. Please see library staff.
+                [% END %]</h2>
+            [% ELSE %]
+
+            <form method='POST'>
+                <table>
+                    <!-- TODO <label>s -->
+                    <tr>
+                        <td>[% l('First Name') %]</td>
+                        <td><input type='text' name='stgu.first_given_name'/></td>
+                    </tr>
+                    <tr>
+                        <td>[% l('Middle Name') %]</td>
+                        <td><input type='text' name='stgu.second_given_name'/></td>
+                    </tr>
+                    <tr>
+                        <td>[% l('Last Name') %]</td>
+                        <td><input type='text' name='stgu.family_name'/></td>
+                    </tr>
+                    <tr>
+                        <td>[% l('Street Address') %]</td>
+                        <td><input type='text' name='stgma.street1'/></td>
+                    </tr>
+                    <tr>
+                        <td>[% l('Street Address (2)') %]</td>
+                        <td><input type='text' name='stgma.street2'/></td>
+                    </tr>
+                    <tr>
+                        <td>[% l('City') %]</td>
+                        <td><input type='text' name='stgma.city'/></td>
+                    </tr>
+                    <tr>
+                        <td>[% l('State') %]</td>
+                        <td><input type='text' name='stgma.state'/></td>
+                    </tr>
+                    <tr>
+                        <td>[% l('Post/Zip Code') %]</td>
+                        <td><input type='text' name='stgma.post_code'/></td>
+                    </tr>
+                    <tr>
+                        <td>[% l('County') %]</td>
+                        <td><input type='text' name='stgma.county'/></td>
+                    </tr>
+                    <tr>
+                        <td>[% l('Date of Birth') %]</td>
+                        <td><input type='text' name='stgu.dob'/></td>
+                    </tr>
+                    <tr>
+                        <td>[% l('Phone Number') %]</td>
+                        <td><input type='text' name='stgu.day_phone'/></td>
+                    </tr>
+                    <tr>
+                        <td>[% l('Email Address') %]</td>
+                        <td><input type='text' name='stgu.email'/></td>
+                    </tr>
+                    <tr>
+                        <td>
+                            <a href="[% ctx.opac_root %]/home" 
+                                class="opac-button">[% l('Go Back') %]</a>
+                        </td>
+                        <td>
+                            <input type="submit" 
+                                value="[% l('Submit Registration') %]" 
+                                class="opac-button" />
+                        </td>
+                    </tr>
+                </table>
+            </form>
+            [% END %]
+
+            <div class="common-full-pad"></div>        
+        </div>
+    </div>
+[%- END %]