From f424dd871e963b713b398fe38364c311d3c5f3a6 Mon Sep 17 00:00:00 2001 From: Dan Wells Date: Wed, 1 Jun 2011 14:33:59 -0400 Subject: [PATCH] Serial holdings display consistency fix When holdings are sourced from both MFHD and the DB, display may be inconsistent due to a hard-coded ', ' in Serial.pm. This patch works around the problem by storing generated_coverage as a JSON array instead of a string, leaving display formatting to the OPAC. Signed-off-by: Dan Wells --- .../lib/OpenILS/Application/Search/Serial.pm | 11 ++++------- .../perlmods/lib/OpenILS/Application/Serial.pm | 2 +- Open-ILS/src/sql/Pg/002.schema.config.sql | 2 +- .../0543.data.reformat_generated_coverage.sql | 18 ++++++++++++++++++ 4 files changed, 24 insertions(+), 9 deletions(-) create mode 100644 Open-ILS/src/sql/Pg/upgrade/0543.data.reformat_generated_coverage.sql diff --git a/Open-ILS/src/perlmods/lib/OpenILS/Application/Search/Serial.pm b/Open-ILS/src/perlmods/lib/OpenILS/Application/Search/Serial.pm index a08a8c3e37..11c320266e 100644 --- a/Open-ILS/src/perlmods/lib/OpenILS/Application/Search/Serial.pm +++ b/Open-ILS/src/perlmods/lib/OpenILS/Application/Search/Serial.pm @@ -15,8 +15,6 @@ use OpenSRF::Utils::Logger qw/:logger/; use Data::Dumper; -use OpenSRF::Utils::JSON; - use Time::HiRes qw(time); use OpenSRF::EX qw(:try); use Digest::MD5 qw(md5_hex); @@ -27,8 +25,7 @@ use XML::LibXSLT; use OpenILS::Const qw/:const/; use OpenILS::Application::AppUtils; -my $apputils = "OpenILS::Application::AppUtils"; -my $U = $apputils; +my $U = "OpenILS::Application::AppUtils"; my $pfx = "open-ils.search_"; @@ -149,7 +146,7 @@ sub bib_to_svr { if ($_->summary_method ne 'use_sre_only') { if (ref $_->basic_summary) { #TODO: 'show-generated' boolean on summaries if ($_->basic_summary->generated_coverage) { - push(@{$svr->basic_holdings}, $_->basic_summary->generated_coverage); + push(@{$svr->basic_holdings}, OpenSRF::Utils::JSON->JSON2perl($_->basic_summary->generated_coverage)); } if ($_->basic_summary->textual_holdings) { push(@{$svr->basic_holdings_add}, $_->basic_summary->textual_holdings); @@ -157,7 +154,7 @@ sub bib_to_svr { } if (ref $_->supplement_summary) { if ($_->supplement_summary->generated_coverage) { - push(@{$svr->supplement_holdings}, $_->supplement_summary->generated_coverage); + push(@{$svr->supplement_holdings}, OpenSRF::Utils::JSON->JSON2perl($_->supplement_summary->generated_coverage)); } if ($_->supplement_summary->textual_holdings) { push(@{$svr->supplement_holdings_add}, $_->supplement_summary->textual_holdings); @@ -165,7 +162,7 @@ sub bib_to_svr { } if (ref $_->index_summary) { if ($_->index_summary->generated_coverage) { - push(@{$svr->index_holdings}, $_->index_summary->generated_coverage); + push(@{$svr->index_holdings}, OpenSRF::Utils::JSON->JSON2perl($_->index_summary->generated_coverage)); } if ($_->index_summary->textual_holdings) { push(@{$svr->index_holdings_add}, $_->index_summary->textual_holdings); diff --git a/Open-ILS/src/perlmods/lib/OpenILS/Application/Serial.pm b/Open-ILS/src/perlmods/lib/OpenILS/Application/Serial.pm index 832d0c236d..a2bab96bda 100644 --- a/Open-ILS/src/perlmods/lib/OpenILS/Application/Serial.pm +++ b/Open-ILS/src/perlmods/lib/OpenILS/Application/Serial.pm @@ -1515,7 +1515,7 @@ sub _prepare_summaries { $cu_method = "create"; } - $summary->generated_coverage(join(", ", @$formatted_parts)); + $summary->generated_coverage(OpenSRF::Utils::JSON->perl2JSON($formatted_parts)); my $method = "${cu_method}_serial_${type}_summary"; return $e->die_event unless $e->$method($summary); } diff --git a/Open-ILS/src/sql/Pg/002.schema.config.sql b/Open-ILS/src/sql/Pg/002.schema.config.sql index 58dcc74763..56af82f64a 100644 --- a/Open-ILS/src/sql/Pg/002.schema.config.sql +++ b/Open-ILS/src/sql/Pg/002.schema.config.sql @@ -86,7 +86,7 @@ CREATE TRIGGER no_overlapping_deps BEFORE INSERT OR UPDATE ON config.db_patch_dependencies FOR EACH ROW EXECUTE PROCEDURE evergreen.array_overlap_check ('deprecates'); -INSERT INTO config.upgrade_log (version, applied_to) VALUES ('0542', :eg_version); -- phasefx +INSERT INTO config.upgrade_log (version, applied_to) VALUES ('0543', :eg_version); -- dbwells CREATE TABLE config.bib_source ( id SERIAL PRIMARY KEY, diff --git a/Open-ILS/src/sql/Pg/upgrade/0543.data.reformat_generated_coverage.sql b/Open-ILS/src/sql/Pg/upgrade/0543.data.reformat_generated_coverage.sql new file mode 100644 index 0000000000..25fcb9f911 --- /dev/null +++ b/Open-ILS/src/sql/Pg/upgrade/0543.data.reformat_generated_coverage.sql @@ -0,0 +1,18 @@ +BEGIN; + +-- Reformat generated_coverage to be JSON arrays rather than simple comma- +-- separated lists. + +-- This upgrade script is technically imperfect, but should do the right thing +-- in 99.9% of cases, and any mistakes will be self-healing as more serials +-- activity happens + +SELECT evergreen.upgrade_deps_block_check('0543', :eg_version); -- dbwells + +UPDATE serial.basic_summary SET generated_coverage = '["' || regexp_replace(regexp_replace(generated_coverage, '"', E'\\"', 'g'), ', ', '","', 'g') || '"]' WHERE generated_coverage <> ''; + +UPDATE serial.supplement_summary SET generated_coverage = '["' || regexp_replace(regexp_replace(generated_coverage, '"', E'\\"', 'g'), ', ', '","', 'g') || '"]' WHERE generated_coverage <> ''; + +UPDATE serial.index_summary SET generated_coverage = '["' || regexp_replace(regexp_replace(generated_coverage, '"', E'\\"', 'g'), ', ', '","', 'g') || '"]' WHERE generated_coverage <> ''; + +COMMIT; -- 2.43.2