From 27b7e2688d8020467666af0475570dc1e34795b4 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 Signed-off-by: Dan Scott --- .../src/perlmods/OpenILS/Application/Search/Serial.pm | 11 ++++------- Open-ILS/src/perlmods/OpenILS/Application/Serial.pm | 2 +- Open-ILS/src/sql/Pg/002.schema.config.sql | 2 +- .../upgrade/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/OpenILS/Application/Search/Serial.pm b/Open-ILS/src/perlmods/OpenILS/Application/Search/Serial.pm index 06d2f63829..15fb40ea23 100644 --- a/Open-ILS/src/perlmods/OpenILS/Application/Search/Serial.pm +++ b/Open-ILS/src/perlmods/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_"; @@ -144,7 +141,7 @@ sub bib_to_svr { } 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); @@ -152,7 +149,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); @@ -160,7 +157,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/OpenILS/Application/Serial.pm b/Open-ILS/src/perlmods/OpenILS/Application/Serial.pm index 961acf347a..cd417b1ac8 100644 --- a/Open-ILS/src/perlmods/OpenILS/Application/Serial.pm +++ b/Open-ILS/src/perlmods/OpenILS/Application/Serial.pm @@ -1385,7 +1385,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 a3e0738667..e9c602a3e7 100644 --- a/Open-ILS/src/sql/Pg/002.schema.config.sql +++ b/Open-ILS/src/sql/Pg/002.schema.config.sql @@ -57,7 +57,7 @@ CREATE TABLE config.upgrade_log ( install_date TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW() ); -INSERT INTO config.upgrade_log (version) VALUES ('0541'); -- dbwells +INSERT INTO config.upgrade_log (version) VALUES ('0543'); -- 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..d3efa84f91 --- /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 + +INSERT INTO config.upgrade_log (version) VALUES ('0543'); -- 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.11.0