LP#1418772: Avoid internal server error on viewing full record when copy create_date...
authorSteven Chan <schan@sitka.bclibraries.ca>
Mon, 22 Jul 2013 19:39:48 +0000 (12:39 -0700)
committerGalen Charlton <gmc@esilibrary.com>
Thu, 19 Feb 2015 15:55:49 +0000 (15:55 +0000)
In the TPAC client, when it tries to show record details containing a copy
record with no create date, it shows an Internal Server Error instead.

1. The error is caused by trying to execute the parse_datetime() method
in the parse_date() function in the WWW/EGCatLoader/util.pm module with
an empty date string. The function will normally translate a datetime
string from the database to a datetime string that is formatted for TPAC
templates.  The fix is to not execute parse_datetime() and just return
an empty string.

2. In the record/copy_table.tt2 template, if an empty datetime string is
the value for copy_info.create_date, the format() method of the Date
plugin will show the current datetime by default. The fix is to show '-'
in its place, replicating the same template logic as for
copy_info.due_date.

Signed-off-by: Jeff Davis <jdavis@sitka.bclibraries.ca>
Conflicts:
Open-ILS/src/templates/opac/parts/record/copy_table.tt2

Signed-off-by: Galen Charlton <gmc@esilibrary.com>
Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/Util.pm
Open-ILS/src/templates/opac/parts/record/copy_table.tt2

index 05f59d8..4ff0a1a 100644 (file)
@@ -195,6 +195,9 @@ sub init_ro_object_cache {
     $ro_object_subs->{parse_datetime} = sub {
         my $date = shift;
 
+        # Calling parse_datetime() with empty $date will lead to Internal Server Error
+        return '' if ($date eq '' or $date eq undef);
+
         # Probably an accidental entry like '0212' instead of '2012',
         # but 1) the leading 0 may get stripped in cstore and
         # 2) DateTime::Format::ISO8601 returns an error as years
index 74059d0..1c09536 100644 (file)
@@ -142,16 +142,21 @@ END; # FOREACH bib
                     ctx.get_crahp(copy_info.age_protect).name : l('None') | html %]
             </td>
             <td>[% 
-            IF ctx.get_org_setting(copy_info.circ_lib, 'circ.holds.age_protect.active_date') == 1;
-              disp_date = copy_info.active_date ? copy_info.active_date : copy_info.create_date;
-            ELSE;
-              disp_date = copy_info.create_date;
-            END;
+                IF ctx.get_org_setting(copy_info.circ_lib, 'circ.holds.age_protect.active_date') == 1;
+                    disp_date = copy_info.active_date ? copy_info.active_date : copy_info.create_date;
+                ELSE;
+                    disp_date = copy_info.create_date;
+                END;
            
-           date.format(
-                ctx.parse_datetime(disp_date),
-                DATE_FORMAT
-            ) %]</td>
+                IF disp_date;
+                    date.format(
+                        ctx.parse_datetime(disp_date),
+                        DATE_FORMAT
+                    );
+                ELSE;
+                   '-';
+                END;
+            %]</td>
             [% END # is_staff %]
             [% IF ctx.is_staff OR serial_holdings %]
             <td>[%  # Show copy/volume hold links to staff (without