created inital notifications preference page; infrastructure for notify and search...
authorberick <berick@esilibrary.com>
Wed, 6 Apr 2011 16:17:01 +0000 (12:17 -0400)
committerBill Erickson <berick@esilibrary.com>
Wed, 20 Jul 2011 18:34:26 +0000 (14:34 -0400)
Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader.pm
Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/Account.pm
Open-ILS/web/templates/default/opac/myopac/prefs.tt2
Open-ILS/web/templates/default/opac/myopac/prefs/notify.tt2 [new file with mode: 0644]
Open-ILS/web/templates/default/opac/myopac/prefs/settings.tt2 [new file with mode: 0644]
Open-ILS/web/templates/default/opac/parts/myopac/personal.tt2 [new file with mode: 0644]

index 0b60828..c889704 100644 (file)
@@ -127,7 +127,9 @@ sub load {
     return $self->load_myopac_bookbag_update if $path =~ m|opac/myopac/list/update|;
     return $self->load_myopac_circ_history if $path =~ m|opac/myopac/circ_history|;
     return $self->load_myopac_hold_history if $path =~ m|opac/myopac/hold_history|;
-    return $self->load_myopac if $path =~ m|opac/myopac|;
+    return $self->load_myopac_prefs_notify if $path =~ m|opac/myopac/prefs/notify|;
+    return $self->load_myopac_prefs_settings if $path =~ m|opac/myopac/prefs/settings|;
+    return $self->load_myopac_prefs if $path =~ m|opac/myopac/prefs|;
 
     return Apache2::Const::OK;
 }
index 3c1d6a6..5ba9c9e 100644 (file)
@@ -10,9 +10,51 @@ my $U = 'OpenILS::Application::AppUtils';
 
 # context additions: 
 #   user : au object, fleshed
-sub load_myopac {
+sub load_myopac_prefs {
+    my $self = shift;
+
+    $self->ctx->{user} = $self->editor->retrieve_actor_user([
+        $self->ctx->{user}->id,
+        {
+            flesh => 1,
+            flesh_fields => {
+                au => [qw/card home_ou addresses ident_type/]
+                # ...
+            }
+        }
+    ]);
+
+    return Apache2::Const::OK;
+}
+
+sub load_myopac_prefs_notify {
+    my $self = shift;
+    my $e = $self->editor;
+
+    # fetch all of the opt-in settings the user has access to
+    # XXX: user's should in theory have options to opt-in to notices
+    # for remote locations, but that opens the door for a large
+    # set of generally un-used opt-ins.. needs discussion
+    my $opt_ins =  $U->simplereq(
+        'open-ils.actor',
+        'open-ils.actor.event_def.opt_in.settings.atomic',
+        $e->authtoken, $e->requestor->home_ou);
+
+    # fetch user setting values for each of the opt-in settings
+    my $user_set = $U->simplereq(
+        'open-ils.actor',
+        'open-ils.actor.patron.settings.retrieve',
+        $e->authtoken, 
+        $e->requestor->id, 
+        [map {$_->name} @$opt_ins]
+    );
+
+    $self->ctx->{opt_in_settings} = [map { {cust => $_, value => $user_set->{$_->name} } } @$opt_ins];
+    return Apache2::Const::OK;
+}
+
+sub load_myopac_prefs_settings {
     my $self = shift;
-    $self->ctx->{page} = 'myopac';
 
     $self->ctx->{user} = $self->editor->retrieve_actor_user([
         $self->ctx->{user}->id,
index bb62854..1f40c0b 100644 (file)
 [%  PROCESS "default/opac/parts/header.tt2";
     WRAPPER "default/opac/parts/base.tt2" +
         "default/opac/parts/myopac/base.tt2";
-    myopac_page = "prefs"  %]
-    <div id='myopac_prefs_div'>
-        <!-- XXX TODO <div id="acct_prefs_tabs"
-             style="padding-bottom: 12px;color:#666;">
-            <div style="float:left;">
-                <div class="align selected"
-                     id="prefs_info_lbl"><img src=
-                     "[% ctx.media_prefix %]/images/sub_prefs_info_on.jpg" /></div>
-
-                <div class="align hide_me"
-                     id="prefs_info_link">
-                    <a href="#"><img src=
-                         "[% ctx.media_prefix %]/images/sub_prefs_info_off.jpg" /></a>
-                </div>
-
-                <div class="align"
-                     id="prefs_notify_link">
-                    <a href="#"><img src=
-                         "[% ctx.media_prefix %]/images/sub_prefs_notify_off.jpg" /></a>
-                </div>
-
-                <div class="align selected hide_me"
-                     id="prefs_notify_lbl"><img src=
-                     "[% ctx.media_prefix %]/images/sub_prefs_notify_on.jpg" /></div>
-
-                <div class="align"
-                     id="prefs_search_link">
-                    <a href="#"><img src=
-                         "[% ctx.media_prefix %]/images/sub_prefs_search_off.jpg" /></a>
-                </div>
-
-                <div class="align selected hide_me"
-                     id="prefs_search_lbl"><img src=
-                     "[% ctx.media_prefix %]/images/sub_prefs_search_on.jpg" /></div>
+    myopac_page = "prefs" 
+    prefs_page = (ctx.path_info.match('/prefs$')) ? 'personal' : 
+        (ctx.path_info.match('/prefs/notify')) ? 'notify' : 'settings';
+%]
+
+<div id='myopac_prefs_div'>
+    <div id="acct_prefs_tabs" style="padding-bottom: 12px;color:#666;">
+        <div style="float:left;">
+
+        [% IF prefs_page == 'personal' %]
+            <div class="align">
+                <a href='#'><img src="[% ctx.media_prefix %]/images/sub_prefs_info_on.jpg" /></a>
             </div>
-
-            <div style="float:right;width:65px;">
-                <div style="position:absolute">
-                    <div style="position:relative;top:75px;">
-                        <a id='acct_prefs_save'
-                             class='hide_me'
-                             href="#"><img alt="Save"
-                             src="[% ctx.media_prefix %]/images/save-btn.png" /></a>
-                    </div>
-                </div>
+            <div class="align">
+                <a href='prefs/notify'><img src="[% ctx.media_prefix %]/images/sub_prefs_notify_off.jpg" /></a>
             </div>
-
-            <div class="clear-both"></div>
-        </div> -->
-
-        <div class="header_middle">
-            <span id="acct_prefs_header">
-                Account Information and Preferences
-            </span>
-            <span class="float-right">
-                <a class="hide_me"
-                    href="#">Export List</a>
-            </span>
-        </div>
-
-        <div class="clear-both normal-height"></div>
-
-        <table class="hide_me full-width" id="acct_search_main">
-            <tbody id='myopac_prefs_tbody'>
-                <tr id='myopac_prefs_loading'>
-                    <td colspan='3'><b>[% l("Loading...") %]</b></td>
-                </tr>
-
-                <tr id='myopac_prefs_row'>
-                    <td width='20%'>[% l("Search hits per page") %]</td>
-
-                    <td>
-                        <div style="position:absolute">
-                            <div style="position:relative;top:0px;left:55px;">
-                                <a href="#">
-                                <img alt="Search Hits Help"
-                                     src=
-                                     "[% ctx.media_prefix %]/images/question-mark.png" /></a>
-                            </div>
-                        </div><select id='prefs_hits_per'
-                            style="position:relative;z-index:100;">
-                            <option value='5'>
-                                5
-                            </option>
-
-                            <option value='8'>
-                                8
-                            </option>
-
-                            <option value='10'>
-                                10
-                            </option>
-
-                            <option value='15'>
-                                15
-                            </option>
-
-                            <option value='20'>
-                                20
-                            </option>
-
-                            <option value='25'>
-                                25
-                            </option>
-
-                            <option value='50'>
-                                50
-                            </option>
-                        </select>
-                    </td>
-                </tr>
-
-                <tr>
-                    <td colspan="2"><label for="circHistStart">Keep history of
-                    checked out items?</label> <input type="checkbox"
-                           id="circHistStart" /></td>
-                </tr><!-- FONT size preference -->
-
-                <tr class="hide_me">
-                    <td>[% l("Default Font Size") %]</td>
-
-                    <td><select id='prefs_def_font'>
-                        <option value='regular'>
-                            [% l("Regular Font") %]
-                        </option>
-
-                        <option value='large'>
-                            [% l("Large Font") %]
-                        </option>
-                    </select></td>
-                </tr>
-
-                <tr class="hide_me">
-                    <td>[% l("Default Search Location") %]</td>
-                    <td>
-                        <div style='margin-bottom: 5px;'>
-                            <input type='checkbox' id='myopac_pref_home_lib' />
-                                 [% l("Always search my home library by default.") %]
-                        </div>
-                        <select id='prefs_def_location'></select>
-                    </td>
-                </tr>
-
-                <tr class="hide_me">
-                    <td>[% l("Default Search Range") %]</td>
-
-                    <td><select id='prefs_def_range'>
-                        </select></td>
-                </tr>
-            </tbody>
-        </table><a href=
-        "http://www.kcls.org/usingthelibrary/catalog_help/library_elf.cfm"><u>Try
-        Library Elf-to manage library materials!</u></a>
-
-        <table class="hide_me"
-               id="acct_notify_main">
-            <tbody>
-                <tr class="hide_me">
-                    <td><span>[% l("Default Hold Notification Method") %]</span> <a class=
-                    'classic_link'
-                       href='#'>[% l("(Help)") %]</a></td>
-
-                    <td style="padding-left:15px;"><select id=
-                    'prefs_hold_notify'>
-                        <option value='phone:email'
-                                selected='selected'>
-                            [% l("Use Phone and Email") %]
-                        </option>
-
-                        <option value='phone'>
-                            [% l("Use Phone Only") %]
-                        </option>
-
-                        <option value='email'>
-                            [% l("Use Email Only") %]
-                        </option>
-                    </select></td>
-                </tr>
-
-                <tr>
-                    <td style="padding-top:10px;"><strong>Pick Up Notice for
-                    Holds</strong><br />
-                    <input type="checkbox"
-                           id="opac.hold_notify.email"
-                           name="opac.hold_notify.email" /> <label for=
-                           "opac.hold_notify.email">Email</label><br />
-                    <input type="checkbox"
-                           id="opac.hold_notify.phone"
-                           name="opac.hold_notify.phone" /> <label for=
-                           "opac.hold_notify.phone">Phone</label>
-                           <b>(Temporarily phone notification will generate a
-                           mailed paper notice.)</b></td>
-                </tr>
-
-                <tr>
-                    <td style="padding-top:10px;"><strong>Expire Notice for
-                    Holds</strong><br />
-                    <input type="checkbox"
-                           id="notification.hold.expire.email"
-                           name="notification.hold.expire.email" /> <label for=
-                           "notification.hold.expire.email">Email</label></td>
-                </tr>
-
-                <tr>
-                    <td style="padding-top:10px;"><strong>Cancel Notice for
-                    Holds</strong><br />
-                    <input type="checkbox"
-                           id="notification.hold.cancel.email"
-                           name="notification.hold.cancel.email" /> <label for=
-                           "notification.hold.cancel.email">Email</label></td>
-                </tr>
-
-                <tr>
-                    <td style="padding-top:10px;"><strong>Overdue First
-                    Notice</strong><br />
-                    <input type="checkbox"
-                           id="notification.overdue.first.email"
-                           name="notification.overdue.first.email" />
-                           <label for=
-                           "notification.overdue.first.email">Email</label><br />
-                    <input type="checkbox"
-                           id="notification.overdue.first.phone"
-                           name="notification.overdue.first.phone" />
-                           <label for=
-                           "notification.overdue.first.phone">Phone</label>
-                           <b>(Temporarily phone notification will generate a
-                           mailed paper notice.)</b></td>
-                </tr>
-
-                <tr>
-                    <td style="padding-top:10px;"><strong>Courtesy
-                    Notice</strong><br />
-                    <input type="checkbox"
-                           id="notification.predue.email"
-                           name="notification.predue.email" /> <label for=
-                           "notification.predue.email">Email</label><br /></td>
-                </tr>
-            </tbody>
-        </table>
-
-        <div id="acct_info_main">
-            <div id='myopac.expired.alert'
-                 class='hide_me'
-                 style='margin-bottom: 20px;'>
-                <table class='data_grid'
-                       width='100%'>
-                    <tbody>
-                        <tr>
-                            <td width='100%' class='red'>
-                                [% l("Your account expired on") %]
-                                <span id='myopac.expired.date'></span>!
-                                [% l("Please see a librarian to renew your account.") %]</td>
-                        </tr>
-                    </tbody>
-                </table>
+            <div class="align">
+                <a href='prefs/settings'><img src="[% ctx.media_prefix %]/images/sub_prefs_search_off.jpg" /></a>
             </div>
-
-            <div id='myopac.notes.div'
-                 class='hide_me'>
-                <table class='data_grid'
-                       width='100%'>
-                    <thead>
-                        <tr>
-                            <td colspan='2'>
-                            <b>[% l("* Staff Notes *") %]</b></td>
-                        </tr>
-                    </thead>
-
-                    <tbody id='myopac.notes.tbody'>
-                        <tr id='myopac.notes.tr'>
-                            <td><b name='title'></b> : <span name=
-                            'value'></span></td>
-                        </tr>
-                    </tbody>
-                </table><br />
+        [% ELSIF prefs_page == 'notify' %]
+            <div class="align">
+                <a href='../prefs'><img src="[% ctx.media_prefix %]/images/sub_prefs_info_off.jpg" /></a>
             </div>
+            <div class="align">
+                <a href='#'><img src="[% ctx.media_prefix %]/images/sub_prefs_notify_on.jpg" /></a>
+            </div>
+            <div class="align" >
+                <a href='settings'><img src="[% ctx.media_prefix %]/images/sub_prefs_search_off.jpg" /></a>
+            </div>
+        [% ELSE %]
+            <div class="align">
+                <a href='../prefs'><img src="[% ctx.media_prefix %]/images/sub_prefs_info_off.jpg" /></a>
+            </div>
+            <div class="align">
+                <a href='notify'><img src="[% ctx.media_prefix %]/images/sub_prefs_notify_off.jpg" /></a>
+            </div>
+            <div class="align" >
+                <a href='#'><img src="[% ctx.media_prefix %]/images/sub_prefs_search_on.jpg" /></a>
+            </div>
+        [% END %]
+        </div>
+    </div> 
 
-            <table width='70%'
-                   class='light_border data_grid'>
-                <tbody id='myopac_summary_tbody'>
-                    <tr>
-                        <td width='30%'
-                            class='color_4 light_border'>[% l("Name") %]</td>
-
-                        <td class='light_border'>[% l(
-                            HUMAN_NAME_FORMAT,
-                            ctx.user.prefix, ctx.user.first_given_name,
-                            ctx.user.second_given_name, ctx.user.family_name,
-                            ctx.user.suffix
-                        ) | html %]</td>
-
-                        <td></td>
-                    </tr>
-
-                    <tr>
-                        <td class='color_4 light_border'>
-                        [% l("Day Phone") %]</td>
-
-                        <td class='light_border'
-                            id='myopac_summary_dayphone'>[% ctx.user.day_phone | html %]</td>
-
-                        <td class='light_border'><a href='#'
-                           class="hide_me"
-                           id='myopac_summary_phone1_change'
-                           style=
-                           'text-decoration: underline;'>[% l("Change") %]</a></td>
-                    </tr>
-
-                    <tr id='myopac_update_phone1_row'
-                        class='hide_me'>
-                        <td class='myopac_update_cell'
-                            colspan='3'>
-                            <span class='myopac_update_span'>
-                                Enter New [% l("Day Phone") %]:
-                            </span>
-
-                            <input type='text' size='24' id='myopac_new_phone1' />
-                            <span class='myopac_update_span'>
-                                <button>
-                                    <span class='myopac_update_span'>
-                                        [% l("Submit") %]</span>
-                                </button>
-                            </span>
-                            <span class='myopac_update_span'>
-                                <button>
-                                    <span class='myopac_update_span'>
-                                        [% l("Cancel") %]</span>
-                                </button>
-                            </span>
-                        </td>
-                    </tr>
-
-                    <tr>
-                        <td class='color_4 light_border'>
-                        [% l("Evening Phone") %]</td>
-
-                        <td class='light_border'
-                            id='myopac_summary_eveningphone'>[% ctx.user.evening_phone | html %]</td>
-
-                        <td class='light_border'><a href='#'
-                           class="hide_me"
-                           id='myopac_summary_phone2_change'
-                           style=
-                           'text-decoration: underline;'>[% l("Change") %]</a></td>
-                    </tr>
-
-                    <tr id='myopac_update_phone2_row'
-                        class='hide_me'>
-                        <td class='myopac_update_cell'
-                            colspan='3'><span class='myopac_update_span'>New
-                            [% l("Evening Phone") %]:</span>
-                            <input type='text' size='24' id='myopac_new_phone2' />
-                            <span class='myopac_update_span'><button><span class=
-                                'myopac_update_span'>[% l("Submit") %]</span></button></span>
-                            <span class='myopac_update_span'><button><span class=
-                                'myopac_update_span'>[% l("Cancel") %]</span></button></span>
-                        </td>
-                    </tr>
-
-                    <tr>
-                        <td class='color_4 light_border'>
-                        [% l("Other Phone") %]</td>
-
-                        <td class='light_border'
-                            id='myopac_summary_otherphone'>[% ctx.user.other_phone | html %]</td>
-
-                        <td class='light_border'><a href='#'
-                           class="hide_me"
-                           id='myopac_summary_phone3_change'
-                           style=
-                           'text-decoration: underline;'>[% l("Change") %]</a></td>
-                    </tr>
-
-                    <tr id='myopac_update_phone3_row'
-                        class='hide_me'>
-                        <td class='myopac_update_cell'
-                            colspan='3'><span class='myopac_update_span'>Enter
-                            New [% l("Other Phone") %]:</span>
-                            <input type='text' size='24' id='myopac_new_phone3' />
-                            <span class='myopac_update_span'><button><span class=
-                                'myopac_update_span'>[% l("Submit") %]</span></button></span>
-                            <span class='myopac_update_span'><button><span class=
-                                'myopac_update_span'>[% l("Cancel") %]</span></button></span>
-                        </td>
-                    </tr>
-
-                    <tr>
-                        <td class='color_4 light_border'>
-                            <div style="position:absolute">
-                                <div class="hide_me" style=
-                                "position:relative;left:70px;top:-3px;">
-                                    <a href="#">
-                                    <img alt="Username Help"
-                                         src=
-                                         "[% ctx.media_prefix %]/images/question-mark.png" /></a>
-                                </div>
-                            </div>[% l("Username") %]
-                        </td>
-
-                        <td class='light_border'
-                            id='myopac_summary_username'>[% ctx.user.usrname | html %]</td>
-
-                        <td class='light_border'><a href='#'
-                           class="hide_me"
-                           id='myopac_summary_username_change'
-                           style=
-                           'text-decoration: underline;'>[% l("Change") %]</a></td>
-                    </tr>
-
-                    <tr id='myopac_update_username_row'
-                        class='hide_me'>
-                        <td class='myopac_update_cell'
-                            colspan='3'><span class=
-                            'myopac_update_span'>[% l("Enter new username:") %]</span>
-                            <input type='text' size='24' id='myopac_new_username' />
-                            <span class='myopac_update_span'><button><span class=
-                                'myopac_update_span'>[% l("Submit") %]</span></button></span>
-                            <span class='myopac_update_span'><button><span class=
-                                'myopac_update_span'>[% l("Cancel") %]</span></button></span>
-                        </td>
-                    </tr>
-                    <tr>
-                        <td class='color_4 light_border'>
-                        [% l("Password") %]</td>
-                        <td class='light_border'
-                            id='myopac_summary_password'>
-                            [% l("(not shown)") %]</td>
-                        <td class='light_border'><a href='#'
-                           class="hide_me"
-                           style='text-decoration: underline;'>[% l("Change") %]</a></td>
-                    </tr>
-                    <tr class='hide_me'>
-                        <td class='myopac_update_cell'
-                            colspan='3'>
-                            <table>
-                                <tbody>
-                                    <tr>
-                                        <td>
-                                            <span class= 'myopac_update_span'>
-                                                [% l("Enter current password:") %]
-                                            </span>
-                                        </td>
-
-                                        <td>
-                                            <input type='password'
-                                               size='24' />
-                                           </td>
-                                    </tr>
-                                    <tr>
-                                        <td><span class=
-                                        'myopac_update_span'>[% l("Enter new password:") %]</span></td>
-
-                                        <td><input type='password' size='24' />
-                                           </td>
-                                    </tr>
-
-                                    <tr>
-                                        <td><span class=
-                                        'myopac_update_span'>[% l("Re-enter new password:") %]</span></td>
-
-                                        <td>
-                                            <input type='password' size='24' />
-                                        </td>
-                                    </tr>
-                                </tbody>
-                            </table><span class=
-                            'myopac_update_span'><button><span class=
-                            'myopac_update_span'>[% l("Submit") %]</span></button></span>
-                            <span class='myopac_update_span'><button><span class='myopac_update_span'>
-                            [% l("Cancel") %]</span></button></span>
-                        </td>
-                    </tr>
-
-                    <tr>
-                        <td class='color_4 light_border'>[% l("Email Address") %]</td>
-                        <td class='light_border'>[% ctx.user.email | html %]</td>
-                        <td class='light_border'><a href='update_email'>[% l('Change') %]</a></td>
-                    </tr>
-
-                    <tr class='hide_me'>
-                        <td class='myopac_update_cell' colspan='3'>
-                            <span class= 'myopac_update_span'>
-                                [% l("Enter new email address:") %]
-                            </span>
-                            <input type='text' size='24' />
-                            <span class='myopac_update_span'>
-                                <button>
-                                    <span class= 'myopac_update_span'>
-                                        [% l("Submit") %]</span>
-                                </button>
-                            </span>
-                            <span class='myopac_update_span'>
-                                <button>
-                                    <span class='myopac_update_span'>
-                                        [% l("Cancel") %]</span>
-                                </button>
-                            </span>
-                        </td>
-                    </tr>
-                    [% IF ctx.user.ident_value %]<tr class="hide_me">
-                        <td class='color_4 light_border'>
-                        [% l("Primary Identification") %]</td>
-
-                        <td class='light_border'>
-                            [%
-                            # l('[_1] ([_2])', ctx.user.ident_value, ctx.user.ident_type.name) | html
-                            # XXX uncomment the above line to show primary
-                            # identification. With a minor tweak it could
-                            # alternatively be shown but partially obscured. %]
-                        </td>
-                        <td></td>
-                    </tr>[% END %]
-
-                    <tr>
-                        <td class='color_4 light_border'>
-                        [% l("Active Barcode") %]</td>
-
-                        <td class='light_border'>[% ctx.user.card.barcode %]</td>
-
-                        <td></td>
-                    </tr>
-
-                    <tr>
-                        <td class='color_4 light_border'>
-                        [% l("Home Library") %]</td>
-                        <td class='light_border'>[% ctx.user.home_ou.name %]</td>
-                        <td><a href='#'
-                           class="hide_me"
-                           style='text-decoration: underline;'>[% l("Change") %]</a></td>
-                    </tr>
-                    <tr class='hide_me'>
-                        <td class='myopac_update_cell'
-                            colspan='3'>
-                            <span class='myopac_update_span'>
-                                New home library:</span>
-                            <select>
-                            </select>
-                            <span class='myopac_update_span'>
-                                <button>
-                                    <span class= 'myopac_update_span'>
-                                        [% l("Submit") %]</span>
-                                </button>
-                            </span>
-                            <span class='myopac_update_span'>
-                                <button>
-                                    <span class= 'myopac_update_span'>
-                                        [% l("Cancel") %]</span>
-                                </button>
-                            </span>
-                        </td>
-                    </tr>
-                    <tr class="hide_me">
-                        <td class='color_4 light_border'>
-                            [% l("Account Creation Date") %]
-                        </td>
-                        <td class='light_border'
-                            id='myopac_summary_create_date'></td>
-                        <td></td>
-                    </tr>
-                </tbody>
-            </table><br />
-            <hr class='opac-auto-013' color="#DCDBDB" />
-            <br />
-
-            <table width='100%' class='light_border data_grid'>
-                <thead>
-                    <tr>
-                        <td><strong>[% l("Addresses") %]</strong></td>
-
-                    </tr>
-                </thead>
-                <tbody id='myopac_addr_tbody'>
-                    [% FOR addr IN ctx.user.addresses %]
-                    <tr class='[% addr.pending == "t" ? "pending-addr" : "light_border" %]'>
-                        <td>
-                            <table>
-                                <tr>
-                                    <td>[% l("Address Type") %]</td>
-                                    <td name='myopac_addr_type'>[%
-                                        IF addr.pending == "t";
-                                            "<strong>" _ l("*** PENDING ***") _ "</strong> ";
-                                        END;
-                                        addr.address_type | lower | ucfirst;
-                                    %]</td>
-                                </tr>
-                                <tr>
-                                    <td>[% l("Street") %]</td>
-                                    <td name='myopac_addr_street'>[% addr.street1 | html %]</td>
-                                </tr>
-                                [% IF addr.street2 %]<tr>
-                                    <td>[% l("Street") %]</td>
-                                    <td name='myopac_addr_street2'>[% addr.street2 | html %]</td>
-                                </tr>[% END %]
-
-                                <tr>
-                                    <td>[% l("City") %]</td>
-                                    <td name='myopac_addr_city'>[% addr.city | html %]</td>
-                                </tr>
-
-                                <tr>
-                                    <td>[% l("County") %]</td>
-                                    <td name='myopac_addr_county'>[% addr.county| html  %]</td>
-                                </tr>
-
-                                <tr>
-                                    <td>[% l("State") %]</td>
-                                    <td name='myopac_addr_state'>[% addr.state | html %]</td>
-                                </tr>
-
-                                <tr>
-                                    <td>[% l("Country") %]</td>
-                                    <td name='myopac_addr_country'>[% addr.country | html %]</td>
-                                </tr>
+    <div class="clear-both"></div> <br/>
 
-                                <tr>
-                                    <td>[% l("Zip") %]</td>
-                                    <td name='myopac_addr_zip'>[% addr.post_code | html %]</td>
-                                </tr>
-                                <tr>
-                                    <td name='myopac_addr_edit_td'
-                                        colspan='2' class='hide_me'>
-                                        <a class='classic_link'
-                                            name='myopac_addr_edit_link'
-                                            href='#'>Edit Address</a>
-                                    </td>
-                                </tr>
-                            </table>
-                        </td>
-                    </tr>
-                    [% END %]
-                </tbody>
-            </table>
-        </div>
-        <div class='hide_me' id='myopac_username_error'>
-            [% l("Please enter a username") %]
-        </div>
-        <div class='hide_me' id='myopac_username_dup'>
-            [% l("The requested username is not available.  Please choose a different username.") %]
-        </div>
-        <div class='hide_me' id='myopac_username_success'>
-            [% l("Username successfully updated") %]
-        </div>
-        <div class='hide_me' id='myopac_username_failure'>
-            [% l("Username update failed") %]
-        </div>
-        <div class='hide_me' id='myopac_email_error'>
-            [% l("Please enter a valid email address") %]
-        </div>
-        <div class='hide_me' id='myopac_email_success'>
-            [% l("Email address successfully updated") %]
-        </div>
-        <div class='hide_me' id='myopac_email_failure'>
-            [% l("Email address update failed") %]
-        </div>
-        <div class='hide_me' id='myopac_password_error'>
-            [% l("Passwords are empty or do not match") %]
-        </div>
-        <div class='hide_me' id='myopac_password_success'>
-            [% l("Password successfully updated") %]
-        </div>
-        <div class='hide_me' id='myopac_password_failure'>
-            [% l("Password update failed") %]
-        </div>
-        <span class='hide_me' id= 'myopac_invalid_username'>
-            [% l("Username cannot contain spaces or have the same format as a barcode") %]
-        </span>
-        <span class='hide_me' id='myopac_addr_changes_saved'>
-            Address Saved
-        </span>
-        <div class='hide_me' id='prefs_update_success'>
-            [% l("Preferences successfully updated") %]
-        </div>
-        <div class='hide_me' id='prefs_update_failure'>
-            [% l("Preferences update failed!") %]
-        </div>
-        <span class='hide_me' id='myopac_pref_hold_notify_alert'>
-            [% l("This setting defines how you will be notified of holds that are ready to be picked up from the library.  By default, holds will use the notification style you choose here.  However, you will still have the option to change individual holds regardless of this setting.") %]
+    <div class="header_middle">
+        <span id="acct_prefs_header">[% l('Account Information and Preferences') %]</span>
+        <span class="float-right"> 
+            <a class="hide_me" href="#">[% l('Export List') %]</a><!-- what does this do? -->
         </span>
     </div>
+
+    <div class="clear-both normal-height"></div>
+
+[% 
+    IF prefs_page == 'personal';
+        # By default, load the personal info page
+        INCLUDE 'default/opac/parts/myopac/personal.tt2';
+    ELSE;
+        content; 
+    END;
+%]
+</div>
 [% END %]
diff --git a/Open-ILS/web/templates/default/opac/myopac/prefs/notify.tt2 b/Open-ILS/web/templates/default/opac/myopac/prefs/notify.tt2
new file mode 100644 (file)
index 0000000..5d1077a
--- /dev/null
@@ -0,0 +1,120 @@
+[%  PROCESS "default/opac/parts/header.tt2";
+    WRAPPER "default/opac/myopac/prefs.tt2";
+    myopac_page = "prefs/notify" %]
+
+<table>
+    <thead><tr>
+        <th>[% l('Notifation Type') %]</th>
+        <th>[% l('Enabled') %]</th>
+    </tr></thead>
+    <tbody class='data_grid'>
+        [% IF optin.size == 0 %]
+            <strong>[% l('No notification preferences are configured') %]</strong>
+        [% END %]
+        [% FOR optin IN ctx.opt_in_settings %]
+            <tr>
+                <td>[% optin.cust.label %]</td>
+                <td>
+                    <input 
+                        type='checkbox' 
+                        name='[% optin.cust.name %]' 
+                        [% IF optin.value %] checked='checked' [% END %]/>
+                </td>
+            </tr>
+        [% END %]
+    </tbody>
+</table>
+
+
+        <!-- NOTIFICATION PREFS / leaving here for reference
+        <table class="hide_me"
+               id="acct_notify_main">
+            <tbody>
+                <tr class="hide_me">
+                    <td><span>[% l("Default Hold Notification Method") %]</span> <a class=
+                    'classic_link'
+                       href='#'>[% l("(Help)") %]</a></td>
+
+                    <td style="padding-left:15px;"><select id=
+                    'prefs_hold_notify'>
+                        <option value='phone:email'
+                                selected='selected'>
+                            [% l("Use Phone and Email") %]
+                        </option>
+
+                        <option value='phone'>
+                            [% l("Use Phone Only") %]
+                        </option>
+
+                        <option value='email'>
+                            [% l("Use Email Only") %]
+                        </option>
+                    </select></td>
+                </tr>
+
+                <tr>
+                    <td style="padding-top:10px;"><strong>Pick Up Notice for
+                    Holds</strong><br />
+                    <input type="checkbox"
+                           id="opac.hold_notify.email"
+                           name="opac.hold_notify.email" /> <label for=
+                           "opac.hold_notify.email">Email</label><br />
+                    <input type="checkbox"
+                           id="opac.hold_notify.phone"
+                           name="opac.hold_notify.phone" /> <label for=
+                           "opac.hold_notify.phone">Phone</label>
+                           <b>(Temporarily phone notification will generate a
+                           mailed paper notice.)</b></td>
+                </tr>
+
+                <tr>
+                    <td style="padding-top:10px;"><strong>Expire Notice for
+                    Holds</strong><br />
+                    <input type="checkbox"
+                           id="notification.hold.expire.email"
+                           name="notification.hold.expire.email" /> <label for=
+                           "notification.hold.expire.email">Email</label></td>
+                </tr>
+
+                <tr>
+                    <td style="padding-top:10px;"><strong>Cancel Notice for
+                    Holds</strong><br />
+                    <input type="checkbox"
+                           id="notification.hold.cancel.email"
+                           name="notification.hold.cancel.email" /> <label for=
+                           "notification.hold.cancel.email">Email</label></td>
+                </tr>
+
+                <tr>
+                    <td style="padding-top:10px;"><strong>Overdue First
+                    Notice</strong><br />
+                    <input type="checkbox"
+                           id="notification.overdue.first.email"
+                           name="notification.overdue.first.email" />
+                           <label for=
+                           "notification.overdue.first.email">Email</label><br />
+                    <input type="checkbox"
+                           id="notification.overdue.first.phone"
+                           name="notification.overdue.first.phone" />
+                           <label for=
+                           "notification.overdue.first.phone">Phone</label>
+                           <b>(Temporarily phone notification will generate a
+                           mailed paper notice.)</b></td>
+                </tr>
+
+                <tr>
+                    <td style="padding-top:10px;"><strong>Courtesy
+                    Notice</strong><br />
+                    <input type="checkbox"
+                           id="notification.predue.email"
+                           name="notification.predue.email" /> <label for=
+                           "notification.predue.email">Email</label><br /></td>
+                </tr>
+            </tbody>
+        </table>
+        -->
+
+
+[% END %]
+
+
diff --git a/Open-ILS/web/templates/default/opac/myopac/prefs/settings.tt2 b/Open-ILS/web/templates/default/opac/myopac/prefs/settings.tt2
new file mode 100644 (file)
index 0000000..3e111ff
--- /dev/null
@@ -0,0 +1,115 @@
+[%  PROCESS "default/opac/parts/header.tt2";
+    WRAPPER "default/opac/myopac/prefs.tt2";
+    myopac_page = "prefs/notify" %]
+
+USER SETTINGS
+
+        <!-- SEARCH PREFS SAVE, MOVE TO SUB-TEMPLATE
+        <div style="float:right;width:65px;">
+            <div style="position:absolute">
+                <div style="position:relative;top:75px;">
+                    <a id='acct_prefs_save'
+                         class='hide_me'
+                         href="#"><img alt="Save"
+                         src="[% ctx.media_prefix %]/images/save-btn.png" /></a>
+                </div>
+            </div>
+        </div>
+        -->
+
+
+        <!-- SEARCH PREFERENCES / leaving here for reference
+        <table class="hide_me full-width" id="acct_search_main">
+            <tbody id='myopac_prefs_tbody'>
+                <tr id='myopac_prefs_loading'>
+                    <td colspan='3'><b>[% l("Loading...") %]</b></td>
+                </tr>
+
+                <tr id='myopac_prefs_row'>
+                    <td width='20%'>[% l("Search hits per page") %]</td>
+
+                    <td>
+                        <div style="position:absolute">
+                            <div style="position:relative;top:0px;left:55px;">
+                                <a href="#">
+                                <img alt="Search Hits Help"
+                                     src="[% ctx.media_prefix %]/images/question-mark.png" /></a>
+                            </div>
+                        </div><select id='prefs_hits_per'
+                            style="position:relative;z-index:100;">
+                            <option value='5'>
+                                5
+                            </option>
+
+                            <option value='8'>
+                                8
+                            </option>
+
+                            <option value='10'>
+                                10
+                            </option>
+
+                            <option value='15'>
+                                15
+                            </option>
+
+                            <option value='20'>
+                                20
+                            </option>
+
+                            <option value='25'>
+                                25
+                            </option>
+
+                            <option value='50'>
+                                50
+                            </option>
+                        </select>
+                    </td>
+                </tr>
+
+                <tr>
+                    <td colspan="2"><label for="circHistStart">Keep history of
+                    checked out items?</label> <input type="checkbox"
+                           id="circHistStart" /></td>
+                </tr>
+
+                <tr class="hide_me">
+                    <td>[% l("Default Font Size") %]</td>
+
+                    <td><select id='prefs_def_font'>
+                        <option value='regular'>
+                            [% l("Regular Font") %]
+                        </option>
+
+                        <option value='large'>
+                            [% l("Large Font") %]
+                        </option>
+                    </select></td>
+                </tr>
+
+                <tr class="hide_me">
+                    <td>[% l("Default Search Location") %]</td>
+                    <td>
+                        <div style='margin-bottom: 5px;'>
+                            <input type='checkbox' id='myopac_pref_home_lib' />
+                                 [% l("Always search my home library by default.") %]
+                        </div>
+                        <select id='prefs_def_location'></select>
+                    </td>
+                </tr>
+
+                <tr class="hide_me">
+                    <td>[% l("Default Search Range") %]</td>
+
+                    <td><select id='prefs_def_range'>
+                        </select></td>
+                </tr>
+            </tbody>
+        </table><a href=
+        "http://www.kcls.org/usingthelibrary/catalog_help/library_elf.cfm"><u>Try
+        Library Elf-to manage library materials!</u></a>
+
+        -->
+
+[% END %]
diff --git a/Open-ILS/web/templates/default/opac/parts/myopac/personal.tt2 b/Open-ILS/web/templates/default/opac/parts/myopac/personal.tt2
new file mode 100644 (file)
index 0000000..fe1be5c
--- /dev/null
@@ -0,0 +1,395 @@
+<div id="acct_info_main">
+    <div id='myopac.expired.alert'
+         class='hide_me'
+         style='margin-bottom: 20px;'>
+        <table class='data_grid'
+               width='100%'>
+            <tbody>
+                <tr>
+                    <td width='100%' class='red'>
+                        [% l("Your account expired on") %]
+                        <span id='myopac.expired.date'></span>!
+                        [% l("Please see a librarian to renew your account.") %]</td>
+                </tr>
+            </tbody>
+        </table>
+    </div>
+
+    <div id='myopac.notes.div'
+         class='hide_me'>
+        <table class='data_grid'
+               width='100%'>
+            <thead>
+                <tr>
+                    <td colspan='2'>
+                    <b>[% l("* Staff Notes *") %]</b></td>
+                </tr>
+            </thead>
+
+            <tbody id='myopac.notes.tbody'>
+                <tr id='myopac.notes.tr'>
+                    <td><b name='title'></b> : <span name=
+                    'value'></span></td>
+                </tr>
+            </tbody>
+        </table><br />
+    </div>
+
+    <table width='70%'
+           class='light_border data_grid'>
+        <tbody id='myopac_summary_tbody'>
+            <tr>
+                <td width='30%'
+                    class='color_4 light_border'>[% l("Name") %]</td>
+
+                <td class='light_border'>[% l(
+                    HUMAN_NAME_FORMAT,
+                    ctx.user.prefix, ctx.user.first_given_name,
+                    ctx.user.second_given_name, ctx.user.family_name,
+                    ctx.user.suffix
+                ) | html %]</td>
+
+                <td></td>
+            </tr>
+
+            <tr>
+                <td class='color_4 light_border'>
+                [% l("Day Phone") %]</td>
+
+                <td class='light_border'
+                    id='myopac_summary_dayphone'>[% ctx.user.day_phone | html %]</td>
+
+                <td class='light_border'><a href='#'
+                   class="hide_me"
+                   id='myopac_summary_phone1_change'
+                   style=
+                   'text-decoration: underline;'>[% l("Change") %]</a></td>
+            </tr>
+
+            <tr id='myopac_update_phone1_row'
+                class='hide_me'>
+                <td class='myopac_update_cell'
+                    colspan='3'>
+                    <span class='myopac_update_span'>
+                        Enter New [% l("Day Phone") %]:
+                    </span>
+
+                    <input type='text' size='24' id='myopac_new_phone1' />
+                    <span class='myopac_update_span'>
+                        <button>
+                            <span class='myopac_update_span'>
+                                [% l("Submit") %]</span>
+                        </button>
+                    </span>
+                    <span class='myopac_update_span'>
+                        <button>
+                            <span class='myopac_update_span'>
+                                [% l("Cancel") %]</span>
+                        </button>
+                    </span>
+                </td>
+            </tr>
+
+            <tr>
+                <td class='color_4 light_border'>
+                [% l("Evening Phone") %]</td>
+
+                <td class='light_border'
+                    id='myopac_summary_eveningphone'>[% ctx.user.evening_phone | html %]</td>
+
+                <td class='light_border'><a href='#'
+                   class="hide_me"
+                   id='myopac_summary_phone2_change'
+                   style=
+                   'text-decoration: underline;'>[% l("Change") %]</a></td>
+            </tr>
+
+            <tr id='myopac_update_phone2_row'
+                class='hide_me'>
+                <td class='myopac_update_cell'
+                    colspan='3'><span class='myopac_update_span'>New
+                    [% l("Evening Phone") %]:</span>
+                    <input type='text' size='24' id='myopac_new_phone2' />
+                    <span class='myopac_update_span'><button><span class=
+                        'myopac_update_span'>[% l("Submit") %]</span></button></span>
+                    <span class='myopac_update_span'><button><span class=
+                        'myopac_update_span'>[% l("Cancel") %]</span></button></span>
+                </td>
+            </tr>
+
+            <tr>
+                <td class='color_4 light_border'>
+                [% l("Other Phone") %]</td>
+
+                <td class='light_border'
+                    id='myopac_summary_otherphone'>[% ctx.user.other_phone | html %]</td>
+
+                <td class='light_border'><a href='#'
+                   class="hide_me"
+                   id='myopac_summary_phone3_change'
+                   style=
+                   'text-decoration: underline;'>[% l("Change") %]</a></td>
+            </tr>
+
+            <tr id='myopac_update_phone3_row'
+                class='hide_me'>
+                <td class='myopac_update_cell'
+                    colspan='3'><span class='myopac_update_span'>Enter
+                    New [% l("Other Phone") %]:</span>
+                    <input type='text' size='24' id='myopac_new_phone3' />
+                    <span class='myopac_update_span'><button><span class=
+                        'myopac_update_span'>[% l("Submit") %]</span></button></span>
+                    <span class='myopac_update_span'><button><span class=
+                        'myopac_update_span'>[% l("Cancel") %]</span></button></span>
+                </td>
+            </tr>
+
+            <tr>
+                <td class='color_4 light_border'>
+                    <div style="position:absolute">
+                        <div class="hide_me" style=
+                        "position:relative;left:70px;top:-3px;">
+                            <a href="#">
+                            <img alt="Username Help"
+                                 src=
+                                 "[% ctx.media_prefix %]/images/question-mark.png" /></a>
+                        </div>
+                    </div>[% l("Username") %]
+                </td>
+
+                <td class='light_border'
+                    id='myopac_summary_username'>[% ctx.user.usrname | html %]</td>
+
+                <td class='light_border'><a href='#'
+                   class="hide_me"
+                   id='myopac_summary_username_change'
+                   style=
+                   'text-decoration: underline;'>[% l("Change") %]</a></td>
+            </tr>
+
+            <tr id='myopac_update_username_row'
+                class='hide_me'>
+                <td class='myopac_update_cell'
+                    colspan='3'><span class=
+                    'myopac_update_span'>[% l("Enter new username:") %]</span>
+                    <input type='text' size='24' id='myopac_new_username' />
+                    <span class='myopac_update_span'><button><span class=
+                        'myopac_update_span'>[% l("Submit") %]</span></button></span>
+                    <span class='myopac_update_span'><button><span class=
+                        'myopac_update_span'>[% l("Cancel") %]</span></button></span>
+                </td>
+            </tr>
+            <tr>
+                <td class='color_4 light_border'>
+                [% l("Password") %]</td>
+                <td class='light_border'
+                    id='myopac_summary_password'>
+                    [% l("(not shown)") %]</td>
+                <td class='light_border'><a href='#'
+                   class="hide_me"
+                   style='text-decoration: underline;'>[% l("Change") %]</a></td>
+            </tr>
+            <tr class='hide_me'>
+                <td class='myopac_update_cell'
+                    colspan='3'>
+                    <table>
+                        <tbody>
+                            <tr>
+                                <td>
+                                    <span class= 'myopac_update_span'>
+                                        [% l("Enter current password:") %]
+                                    </span>
+                                </td>
+
+                                <td>
+                                    <input type='password'
+                                       size='24' />
+                                   </td>
+                            </tr>
+                            <tr>
+                                <td><span class=
+                                'myopac_update_span'>[% l("Enter new password:") %]</span></td>
+
+                                <td><input type='password' size='24' />
+                                   </td>
+                            </tr>
+
+                            <tr>
+                                <td><span class=
+                                'myopac_update_span'>[% l("Re-enter new password:") %]</span></td>
+
+                                <td>
+                                    <input type='password' size='24' />
+                                </td>
+                            </tr>
+                        </tbody>
+                    </table><span class=
+                    'myopac_update_span'><button><span class=
+                    'myopac_update_span'>[% l("Submit") %]</span></button></span>
+                    <span class='myopac_update_span'><button><span class='myopac_update_span'>
+                    [% l("Cancel") %]</span></button></span>
+                </td>
+            </tr>
+
+            <tr>
+                <td class='color_4 light_border'>[% l("Email Address") %]</td>
+                <td class='light_border'>[% ctx.user.email | html %]</td>
+                <td class='light_border'><a href='update_email'>[% l('Change') %]</a></td>
+            </tr>
+
+            <tr class='hide_me'>
+                <td class='myopac_update_cell' colspan='3'>
+                    <span class= 'myopac_update_span'>
+                        [% l("Enter new email address:") %]
+                    </span>
+                    <input type='text' size='24' />
+                    <span class='myopac_update_span'>
+                        <button>
+                            <span class= 'myopac_update_span'>
+                                [% l("Submit") %]</span>
+                        </button>
+                    </span>
+                    <span class='myopac_update_span'>
+                        <button>
+                            <span class='myopac_update_span'>
+                                [% l("Cancel") %]</span>
+                        </button>
+                    </span>
+                </td>
+            </tr>
+            [% IF ctx.user.ident_value %]<tr class="hide_me">
+                <td class='color_4 light_border'>
+                [% l("Primary Identification") %]</td>
+
+                <td class='light_border'>
+                    [%
+                    # l('[_1] ([_2])', ctx.user.ident_value, ctx.user.ident_type.name) | html
+                    # XXX uncomment the above line to show primary
+                    # identification. With a minor tweak it could
+                    # alternatively be shown but partially obscured. 
+                    %]
+                </td>
+                <td></td>
+            </tr>[% END %]
+
+            <tr>
+                <td class='color_4 light_border'>
+                [% l("Active Barcode") %]</td>
+
+                <td class='light_border'>[% ctx.user.card.barcode %]</td>
+
+                <td></td>
+            </tr>
+
+            <tr>
+                <td class='color_4 light_border'>
+                [% l("Home Library") %]</td>
+                <td class='light_border'>[% ctx.user.home_ou.name %]</td>
+                <td><a href='#'
+                   class="hide_me"
+                   style='text-decoration: underline;'>[% l("Change") %]</a></td>
+            </tr>
+            <tr class='hide_me'>
+                <td class='myopac_update_cell'
+                    colspan='3'>
+                    <span class='myopac_update_span'>
+                        New home library:</span>
+                    <select>
+                    </select>
+                    <span class='myopac_update_span'>
+                        <button>
+                            <span class= 'myopac_update_span'>
+                                [% l("Submit") %]</span>
+                        </button>
+                    </span>
+                    <span class='myopac_update_span'>
+                        <button>
+                            <span class= 'myopac_update_span'>
+                                [% l("Cancel") %]</span>
+                        </button>
+                    </span>
+                </td>
+            </tr>
+            <tr class="hide_me">
+                <td class='color_4 light_border'>
+                    [% l("Account Creation Date") %]
+                </td>
+                <td class='light_border'
+                    id='myopac_summary_create_date'></td>
+                <td></td>
+            </tr>
+        </tbody>
+    </table><br />
+    <hr class='opac-auto-013' color="#DCDBDB" />
+    <br />
+
+    <table width='100%' class='light_border data_grid'>
+        <thead>
+            <tr>
+                <td><strong>[% l("Addresses") %]</strong></td>
+
+            </tr>
+        </thead>
+        <tbody id='myopac_addr_tbody'>
+            [% FOR addr IN ctx.user.addresses %]
+            <tr class='[% addr.pending == "t" ? "pending-addr" : "light_border" %]'>
+                <td>
+                    <table>
+                        <tr>
+                            <td>[% l("Address Type") %]</td>
+                            <td name='myopac_addr_type'>[%
+                                IF addr.pending == "t";
+                                    "<strong>" _ l("*** PENDING ***") _ "</strong> ";
+                                END;
+                                addr.address_type | lower | ucfirst;
+                            %]</td>
+                        </tr>
+                        <tr>
+                            <td>[% l("Street") %]</td>
+                            <td name='myopac_addr_street'>[% addr.street1 | html %]</td>
+                        </tr>
+                        [% IF addr.street2 %]<tr>
+                            <td>[% l("Street") %]</td>
+                            <td name='myopac_addr_street2'>[% addr.street2 | html %]</td>
+                        </tr>[% END %]
+
+                        <tr>
+                            <td>[% l("City") %]</td>
+                            <td name='myopac_addr_city'>[% addr.city | html %]</td>
+                        </tr>
+
+                        <tr>
+                            <td>[% l("County") %]</td>
+                            <td name='myopac_addr_county'>[% addr.county| html  %]</td>
+                        </tr>
+
+                        <tr>
+                            <td>[% l("State") %]</td>
+                            <td name='myopac_addr_state'>[% addr.state | html %]</td>
+                        </tr>
+
+                        <tr>
+                            <td>[% l("Country") %]</td>
+                            <td name='myopac_addr_country'>[% addr.country | html %]</td>
+                        </tr>
+
+                        <tr>
+                            <td>[% l("Zip") %]</td>
+                            <td name='myopac_addr_zip'>[% addr.post_code | html %]</td>
+                        </tr>
+                        <tr>
+                            <td name='myopac_addr_edit_td'
+                                colspan='2' class='hide_me'>
+                                <a class='classic_link'
+                                    name='myopac_addr_edit_link'
+                                    href='#'>Edit Address</a>
+                            </td>
+                        </tr>
+                    </table>
+                </td>
+            </tr>
+            [% END %]
+        </tbody>
+    </table>
+</div>
+