From 6e7e35dc4344599c1f52d1b40b9c1562150245fe Mon Sep 17 00:00:00 2001 From: Lucas Gass Date: Fri, 11 Jul 2025 18:19:30 +0000 Subject: [PATCH] Bug 32432: Add Syndetics Unbound to staff interface --- catalogue/detail.pl | 71 ++++++++++ .../data/mysql/atomicupdate/bug_32432.pl | 131 ++++++++++++++++++ installer/data/mysql/mandatory/sysprefs.sql | 10 +- .../admin/preferences/enhanced_content.pref | 40 +++--- .../prog/en/modules/catalogue/detail.tt | 126 +++++++++++++++-- opac/opac-detail.pl | 10 +- 6 files changed, 344 insertions(+), 44 deletions(-) create mode 100755 installer/data/mysql/atomicupdate/bug_32432.pl diff --git a/catalogue/detail.pl b/catalogue/detail.pl index c6445d4a201..34f1c75ca17 100755 --- a/catalogue/detail.pl +++ b/catalogue/detail.pl @@ -60,6 +60,14 @@ use Koha::Reviews; use Koha::SearchEngine::Search; use Koha::SearchEngine::QueryBuilder; use Koha::Serial::Items; +use C4::External::Syndetics qw( + get_syndetics_anotes + get_syndetics_excerpt + get_syndetics_index + get_syndetics_reviews + get_syndetics_summary + get_syndetics_toc +); my $query = CGI->new(); @@ -427,6 +435,69 @@ if ( C4::Context->preference('OPACComments') ) { } +my $syndetics_elements; + +if ( C4::Context->preference("SyndeticsEnabled") ) { + $template->param( "SyndeticsEnabled" => 1 ); + $template->param( "SyndeticsClientCode" => C4::Context->preference("SyndeticsClientCode") ); + eval { + $syndetics_elements = &get_syndetics_index( $isbn, $upc, $oclc ); + for my $element ( values %$syndetics_elements ) { + $template->param( "Syndetics$element" . "Exists" => 1 ); + } + }; +} + +if ( C4::Context->preference("SyndeticsEnabled") + && C4::Context->preference("SyndeticsSummary") =~ /staff/ + && ( exists( $syndetics_elements->{'SUMMARY'} ) || exists( $syndetics_elements->{'AVSUMMARY'} ) ) ) +{ + eval { + my $syndetics_summary = &get_syndetics_summary( $isbn, $upc, $oclc, $syndetics_elements ); + $template->param( SYNDETICS_SUMMARY => $syndetics_summary ); + }; + +} + +if ( C4::Context->preference("SyndeticsEnabled") + && C4::Context->preference("SyndeticsTOC") =~ /staff/ + && exists( $syndetics_elements->{'TOC'} ) ) +{ + eval { + my $syndetics_toc = &get_syndetics_toc( $isbn, $upc, $oclc ); + $template->param( SYNDETICS_TOC => $syndetics_toc ); + }; +} + +if ( C4::Context->preference("SyndeticsEnabled") + && C4::Context->preference("SyndeticsExcerpt") =~ /staff/ + && exists( $syndetics_elements->{'DBCHAPTER'} ) ) +{ + eval { + my $syndetics_excerpt = &get_syndetics_excerpt( $isbn, $upc, $oclc ); + $template->param( SYNDETICS_EXCERPT => $syndetics_excerpt ); + }; +} + +if ( C4::Context->preference("SyndeticsEnabled") + && C4::Context->preference("SyndeticsAuthorNotes") =~ /staff/ + && exists( $syndetics_elements->{'ANOTES'} ) ) +{ + eval { + my $syndetics_anotes = &get_syndetics_anotes( $isbn, $upc, $oclc ); + $template->param( SYNDETICS_ANOTES => $syndetics_anotes ); + }; +} + +if ( C4::Context->preference("SyndeticsEnabled") + && C4::Context->preference("SyndeticsReviews") =~ /staff/ ) +{ + eval { + my $syndetics_reviews = &get_syndetics_reviews( $isbn, $upc, $oclc, $syndetics_elements ); + $template->param( SYNDETICS_REVIEWS => $syndetics_reviews ); + }; +} + my @results = ( $dat, ); foreach ( keys %{$dat} ) { $template->param( "$_" => defined $dat->{$_} ? $dat->{$_} : '' ); diff --git a/installer/data/mysql/atomicupdate/bug_32432.pl b/installer/data/mysql/atomicupdate/bug_32432.pl new file mode 100755 index 00000000000..ee9ff7838be --- /dev/null +++ b/installer/data/mysql/atomicupdate/bug_32432.pl @@ -0,0 +1,131 @@ +use Modern::Perl; +use Koha::Installer::Output qw(say_warning say_success say_info); + +return { + bug_number => "32432", + description => "Convert the Syndetics from 1/0 to multiple", + up => sub { + my ($args) = @_; + my ( $dbh, $out ) = @$args{qw(dbh out)}; + + my ($SyndeticsSummary) = $dbh->selectrow_array( + q{ + SELECT CASE + WHEN value = '1' THEN 'opac' + WHEN value = '0' THEN '' + ELSE value + END + FROM systempreferences + WHERE variable = 'SyndeticsSummary' + } + ); + + $dbh->do( + q{ + UPDATE systempreferences + SET type = 'multiple', + options = 'staff|opac', + value = ? + WHERE variable = 'SyndeticsSummary' + }, undef, $SyndeticsSummary + ); + + say $out "Updated SyndeticsSummary system preference"; + + my ($SyndeticsExcerpt) = $dbh->selectrow_array( + q{ + SELECT CASE + WHEN value = '1' THEN 'opac' + WHEN value = '0' THEN '' + ELSE value + END + FROM systempreferences + WHERE variable = 'SyndeticsExcerpt' + } + ); + + $dbh->do( + q{ + UPDATE systempreferences + SET type = 'multiple', + options = 'staff|opac', + value = ? + WHERE variable = 'SyndeticsExcerpt' + }, undef, $SyndeticsExcerpt + ); + + say $out "Updated SyndeticsExcerpt system preference"; + + my ($SyndeticsReviews) = $dbh->selectrow_array( + q{ + SELECT CASE + WHEN value = '1' THEN 'opac' + WHEN value = '0' THEN '' + ELSE value + END + FROM systempreferences + WHERE variable = 'SyndeticsReviews' + } + ); + + $dbh->do( + q{ + UPDATE systempreferences + SET type = 'multiple', + options = 'staff|opac', + value = ? + WHERE variable = 'SyndeticsReviews' + }, undef, $SyndeticsReviews + ); + + say $out "Updated SyndeticsReviews system preference"; + + my ($SyndeticsAuthorNotes) = $dbh->selectrow_array( + q{ + SELECT CASE + WHEN value = '1' THEN 'opac' + WHEN value = '0' THEN '' + ELSE value + END + FROM systempreferences + WHERE variable = 'SyndeticsAuthorNotes' + } + ); + + $dbh->do( + q{ + UPDATE systempreferences + SET type = 'multiple', + options = 'staff|opac', + value = ? + WHERE variable = 'SyndeticsAuthorNotes' + }, undef, $SyndeticsAuthorNotes + ); + + say $out "Updated SyndeticsAuthorNotes system preference"; + + my ($SyndeticsTOC) = $dbh->selectrow_array( + q{ + SELECT CASE + WHEN value = '1' THEN 'opac' + WHEN value = '0' THEN '' + ELSE value + END + FROM systempreferences + WHERE variable = 'SyndeticsTOC' + } + ); + + $dbh->do( + q{ + UPDATE systempreferences + SET type = 'multiple', + options = 'staff|opac', + value = ? + WHERE variable = 'SyndeticsTOC' + }, undef, $SyndeticsTOC + ); + + say $out "Updated SyndeticsTOC system preference"; + }, +}; diff --git a/installer/data/mysql/mandatory/sysprefs.sql b/installer/data/mysql/mandatory/sysprefs.sql index f2b6d940cc0..d2e39c79483 100644 --- a/installer/data/mysql/mandatory/sysprefs.sql +++ b/installer/data/mysql/mandatory/sysprefs.sql @@ -793,18 +793,18 @@ INSERT INTO systempreferences ( `variable`, `value`, `options`, `explanation`, ` ('SuspensionsCalendar','noSuspensionsWhenClosed','ignoreCalendar|noSuspensionsWhenClosed','Specify whether to use the Calendar in calculating suspension expiration','Choice'), ('SvcMaxReportRows','10',NULL,'Maximum number of rows to return via the report web service.','Integer'), ('SwitchOnSiteCheckouts','0',NULL,'Automatically switch an on-site checkout to a normal checkout','YesNo'), -('SyndeticsAuthorNotes','0','','Display Notes about the Author on OPAC from Syndetics','YesNo'), +('SyndeticsAuthorNotes','','staff|opac','Display Notes about the Author from Syndetics','multiple'), ('SyndeticsAwards','0','','Display Awards on OPAC from Syndetics','YesNo'), ('SyndeticsClientCode','0','','Client Code for using Syndetics Solutions content','free'), ('SyndeticsCoverImages','0','','Display Cover Images from Syndetics','YesNo'), ('SyndeticsCoverImageSize','MC','MC|LC','Choose the size of the Syndetics Cover Image to display on the OPAC detail page, MC is Medium, LC is Large','Choice'), ('SyndeticsEditions','0','','Display Editions from Syndetics','YesNo'), ('SyndeticsEnabled','0','','Turn on Syndetics Enhanced Content','YesNo'), -('SyndeticsExcerpt','0','','Display Excerpts and first chapters on OPAC from Syndetics','YesNo'), -('SyndeticsReviews','0','','Display Reviews on OPAC from Syndetics','YesNo'), +('SyndeticsExcerpt','staff|opac','','Display Excerpts and first chapters from Syndetics','multiple'), +('SyndeticsReviews','staff|opac','','Display Reviews on OPAC from Syndetics','multiple'), ('SyndeticsSeries','0','','Display Series information on OPAC from Syndetics','YesNo'), -('SyndeticsSummary','0','','Display Summary Information from Syndetics','YesNo'), -('SyndeticsTOC','0','','Display Table of Content information from Syndetics','YesNo'), +('SyndeticsSummary','staff|opac','','Display Summary Information from Syndetics','multiple'), +('SyndeticsTOC','staff|opac','','Display Table of Content information from Syndetics','multiple'), ('TagsEnabled','1','','Enables or disables all tagging features. This is the main switch for tags.','YesNo'), ('TagsExternalDictionary','','','Path on server to local ispell executable, used to set $Lingua::Ispell::path This dictionary is used as a \"whitelist\" of pre-allowed tags.',''), ('TagsInputOnDetail','1','','Allow users to input tags from the detail page.','YesNo'), diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/enhanced_content.pref b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/enhanced_content.pref index 1f088136f49..6d0b65a4963 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/enhanced_content.pref +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/enhanced_content.pref @@ -195,11 +195,11 @@ Enhanced content: LC: large - size. - + - Show notes about the author of a title from Syndetics on item detail pages on the - pref: SyndeticsAuthorNotes - choices: - 1: Show - 0: "Don't show" - - notes about the author of a title from Syndetics on item detail pages on the OPAC. + multiple: + opac: OPAC + staff: Staff interface - - pref: SyndeticsAwards choices: @@ -213,17 +213,17 @@ Enhanced content: 0: "Don't show" - information about other editions of a title from Syndetics on item detail pages on the OPAC (when OPACFRBRizeEditions is on). - + - Show excerpts from of a title from Syndetics on item detail pages on the - pref: SyndeticsExcerpt - choices: - 1: Show - 0: "Don't show" - - excerpts from of a title from Syndetics on item detail pages on the OPAC. + multiple: + opac: OPAC + staff: Staff interface - + - Show reviews of a title from Syndetics on item detail pages on the - pref: SyndeticsReviews - choices: - 1: Show - 0: "Don't show" - - reviews of a title from Syndetics on item detail pages on the OPAC. + multiple: + opac: OPAC + staff: Staff interface - - pref: SyndeticsSeries choices: @@ -231,17 +231,17 @@ Enhanced content: 0: "Don't show" - "information on other titles in a series from Syndetics on the record detail pages on the OPAC." - + - Show a summary of a title from Syndetics on item detail pages on the - pref: SyndeticsSummary - choices: - 1: Show - 0: "Don't show" - - a summary of a title from Syndetics on item detail pages on the OPAC. + multiple: + opac: OPAC + staff: Staff interface - + - Show the table of contents of a title from Syndetics on item detail pages on the - pref: SyndeticsTOC - choices: - 1: Show - 0: "Don't show" - - the table of contents of a title from Syndetics on item detail pages on the OPAC. + multiple: + opac: OPAC + staff: Staff interface Tagging: - - pref: TagsEnabled diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tt index 0fc818512a5..99a4088b3d2 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tt @@ -90,6 +90,11 @@ [% CoceProviders = Koha.Preference('CoceProviders') %] [% CoceHost = Koha.Preference('CoceHost') %] [% SyndeticsCovers = Koha.Preference('SyndeticsEnabled') && Koha.Preference('SyndeticsCoverImages') %] + [% SyndeticsAuthorNotes = Koha.Preference('SyndeticsEnabled') && Koha.Preference('SyndeticsAuthorNotes').split(',').grep('staff').size %] + [% SyndeticsReviews = Koha.Preference('SyndeticsEnabled') && Koha.Preference('SyndeticsReviews').split(',').grep('staff').size %] + [% SyndeticsExcerpt = Koha.Preference('SyndeticsEnabled') && Koha.Preference('SyndeticsExcerpt').split(',').grep('staff').size %] + [% SyndeticsTOC = Koha.Preference('SyndeticsEnabled') && Koha.Preference('SyndeticsTOC').split(',').grep('staff').size %] + [% SyndeticsSummary = Koha.Preference('SyndeticsEnabled') && Koha.Preference('SyndeticsSummary').split(',').grep('staff').size %] [% INCLUDE 'cat-toolbar.inc' %] [% IF ( ocoins ) %] @@ -343,11 +348,17 @@ [% END %] [% END %] - [% IF ( MARCNOTES || notes ) %] - [% WRAPPER tab_item tabname= "description" %] - Descriptions ([% ( MARCNOTES.size || 1 ) | html %]) + [% IF ( MARCNOTES || notes || ( SyndeticsSummary && SYNDETICS_SUMMARY )) %] + [% WRAPPER tab_item tabname= "descriptions" %] + [% SET title_notes_count = 0 %] + [% IF MARCNOTES %] + [% SET title_notes_count = MARCNOTES.size %] + [% END %] + [% IF SYNDETICS_SUMMARY %][% SET title_notes_count = title_notes_count + 1 %][% END %] + Title notes ( [% title_notes_count | html %] ) [% END %] [% END %] + [% IF ComponentParts && ComponentParts.size %] [% WRAPPER tab_item tabname= "components" %] Components ([% ComponentParts.size | html %]) @@ -410,6 +421,30 @@ [% END %] [% END %] + [% IF ( SyndeticsTOC && SYNDETICS_TOC ) %] + [% WRAPPER tab_item tabname= "toc" %] + TOC + [% END %] + [% END %] + + [% IF ( SyndeticsExcerpt && SYNDETICS_EXCERPT ) %] + [% WRAPPER tab_item tabname= "excerpt" %] + Excerpt + [% END %] + [% END %] + + [% IF ( SyndeticsReviews && SYNDETICS_REVIEWS ) %] + [% WRAPPER tab_item tabname= "reviews" %] + Reviews + [% END %] + [% END %] + + [% IF ( SyndeticsAuthorNotes && SYNDETICS_ANOTES ) %] + [% WRAPPER tab_item tabname= "anotes" %] + About the author + [% END %] + [% END %] + [% FOREACH plugins_intranet_catalog_biblio_tab IN plugins_intranet_catalog_biblio_tabs %] [% WRAPPER tab_item tabname= "${ plugins_intranet_catalog_biblio_tab.id }" %] [% plugins_intranet_catalog_biblio_tab.title | html %] @@ -477,21 +512,30 @@ [% END # /tab_panel %] [% END %] - [% IF ( MARCNOTES ) %] - [% WRAPPER tab_panel tabname="description" %] + [% IF ( MARCNOTESi || notes || ( SyndeticsSummary && SYNDETICS_SUMMARY )) %] + [% WRAPPER tab_panel tabname="descriptions" %]
- [% FOREACH MARCNOTE IN MARCNOTES %] -

- [% IF MARCNOTE.marcnote.match('^https?://\S+$') %] - [% MARCNOTE.marcnote | html %] - [% ELSE %] - [% MARCNOTE.marcnote | html | html_line_break %] + [% IF ( SyndeticsEnabled && SyndeticsSummary && SYNDETICS_SUMMARY ) %] +

Enhanced descriptions from Syndetics:

+

[% SYNDETICS_SUMMARY | $raw %]

+ [% END %] + + [% IF ( MARCNOTES ) %] +
+ [% FOREACH MARCNOTE IN MARCNOTES %] +

+ [% IF MARCNOTE.marcnote.match('^https?://\S+$') %] + [% MARCNOTE.marcnote | html %] + [% ELSE %] + [% MARCNOTE.marcnote | html | html_line_break %] + [% END %] +

[% END %] -

+
[% END %]
- [% END # /tab_panel %] - [% END %] + [% END # /tab_panel#descriptions %] + [% END # / IF MARCNOTES %] [% IF ComponentParts && ComponentParts.size %] [% WRAPPER tab_panel tabname="components" %] @@ -961,6 +1005,60 @@ [% END # /tab_panel %] [% END %] + [% IF ( SyndeticsTOC && SYNDETICS_TOC ) %] + [% WRAPPER tab_panel tabname="toc" %] +
+

Table of contents provided by Syndetics

+ +
+ [% END # /tab_panel#toc %] + [% END %] + + [% IF ( SyndeticsExcerpt && SYNDETICS_EXCERPT ) %] + [% WRAPPER tab_panel tabname="excerpt" %] +
+

Excerpt provided by Syndetics

+ [% SYNDETICS_EXCERPT | $raw %] +
+ [% END # /tab_panel#excerpt %] + [% END # / IF SyndeticsExcerpt && SYNDETICS_EXCERPT %] + + [% IF ( SyndeticsReviews && SYNDETICS_REVIEWS ) %] + [% WRAPPER tab_panel tabname="reviews" %] +
+

Reviews provided by Syndetics

+ [% FOREACH SYNDETICS_REVIEW IN SYNDETICS_REVIEWS %] + [% IF ( SYNDETICS_REVIEW.title ) %] +

[% SYNDETICS_REVIEW.title | html %]

+ [% FOREACH review IN SYNDETICS_REVIEW.reviews %] + + [% IF ( review.content ) %] + [% review.content | $raw %] + [% END %] + [% END %] + [% END %] + [% END %] +
+ [% END # /tab_panel#reviews %] + [% END # / IF SyndeticsReviews && SYNDETICS_REVIEWS %] + + [% IF ( SyndeticsAuthorNotes && SYNDETICS_ANOTES ) %] + [% WRAPPER tab_panel tabname="anotes" %] +
+

Author notes provided by Syndetics

+ [% FOREACH SYNDETICS_ANOTE IN SYNDETICS_ANOTES %] + [% IF ( SYNDETICS_ANOTE.content ) %] + [% SYNDETICS_ANOTE.content | $raw %] + [% END %] + [% END %] +
+ [% END # /tab_panel#anotes %] + [% END # / IF SyndeticsAuthorNotes && SYNDETICS_ANOTES %] + [% FOREACH plugins_intranet_catalog_biblio_tab IN plugins_intranet_catalog_biblio_tabs %] [% WRAPPER tab_panel tabname="${ plugins_intranet_catalog_biblio_tab.id }" %] [% plugins_intranet_catalog_biblio_tab.content | $raw %] diff --git a/opac/opac-detail.pl b/opac/opac-detail.pl index 9cd2364f849..e4f7102ed30 100755 --- a/opac/opac-detail.pl +++ b/opac/opac-detail.pl @@ -1051,7 +1051,7 @@ if ( C4::Context->preference("SyndeticsEnabled") ) { } if ( C4::Context->preference("SyndeticsEnabled") - && C4::Context->preference("SyndeticsSummary") + && C4::Context->preference("SyndeticsSummary") =~ /opac/ && ( exists( $syndetics_elements->{'SUMMARY'} ) || exists( $syndetics_elements->{'AVSUMMARY'} ) ) ) { eval { @@ -1063,7 +1063,7 @@ if ( C4::Context->preference("SyndeticsEnabled") } if ( C4::Context->preference("SyndeticsEnabled") - && C4::Context->preference("SyndeticsTOC") + && C4::Context->preference("SyndeticsTOC") =~ /opac/ && exists( $syndetics_elements->{'TOC'} ) ) { eval { @@ -1074,7 +1074,7 @@ if ( C4::Context->preference("SyndeticsEnabled") } if ( C4::Context->preference("SyndeticsEnabled") - && C4::Context->preference("SyndeticsExcerpt") + && C4::Context->preference("SyndeticsExcerpt") =~ /opac/ && exists( $syndetics_elements->{'DBCHAPTER'} ) ) { eval { @@ -1085,7 +1085,7 @@ if ( C4::Context->preference("SyndeticsEnabled") } if ( C4::Context->preference("SyndeticsEnabled") - && C4::Context->preference("SyndeticsReviews") ) + && C4::Context->preference("SyndeticsReviews") =~ /opac/ ) { eval { my $syndetics_reviews = &get_syndetics_reviews( $isbn, $upc, $oclc, $syndetics_elements ); @@ -1095,7 +1095,7 @@ if ( C4::Context->preference("SyndeticsEnabled") } if ( C4::Context->preference("SyndeticsEnabled") - && C4::Context->preference("SyndeticsAuthorNotes") + && C4::Context->preference("SyndeticsAuthorNotes") =~ /opac/ && exists( $syndetics_elements->{'ANOTES'} ) ) { eval { -- 2.39.5