From 8a7b2ee68e6ae7c389695ae915029d7d8ceb7d7c Mon Sep 17 00:00:00 2001 From: Kyle M Hall Date: Fri, 20 Jun 2014 14:40:53 -0400 Subject: [PATCH] Bug 11431 [6] - Add the ability to specify arbitrary audio alerts This patch further enhances our control over Koha audio alerts by allowing a library to specify custom audio events. A new system preference is added the combines the functions of the Selector and Override systems preferences in a list of selector:sound combinations. These definitions override the default sounds and thus gives the library a way to completely redefine what events trigger and audio alert, and what sounds are played! Test Plan: 1) Apply this patch 2) Run updatedatabase.pl 3) Edit the new AudioAlertsCustom system preference and enter the following: "body:contains('Check in message')": "IM_notification.ogg" 4) Browse to the checkins page, you should hear the default sound 5) Attempt to return an invalid barcode, you should hear your custom sound! Signed-off-by: Nick Clemens All sounds seemed to work with different .ogg .mp3 .wav sound types in firefox and chrome. --- installer/data/mysql/sysprefs.sql | 1 + installer/data/mysql/updatedatabase.pl | 3 +- .../prog/en/includes/doc-head-close.inc | 29 +++++++++++++++----- koha-tmpl/intranet-tmpl/prog/en/js/staff-global.js | 2 +- .../en/modules/admin/preferences/circulation.pref | 19 +++++++++++++ 5 files changed, 45 insertions(+), 9 deletions(-) diff --git a/installer/data/mysql/sysprefs.sql b/installer/data/mysql/sysprefs.sql index 49331d1..5249728 100644 --- a/installer/data/mysql/sysprefs.sql +++ b/installer/data/mysql/sysprefs.sql @@ -42,6 +42,7 @@ INSERT INTO systempreferences ( `variable`, `value`, `options`, `explanation`, ` ('AnonSuggestions','0',NULL,'Set to enable Anonymous suggestions to AnonymousPatron borrowernumber','YesNo'), ('AnonymousPatron','0',NULL,'Set the identifier (borrowernumber) of the anonymous patron. Used for Suggestion and reading history privacy',''), ('AudioAlerts','0','','Enable circulation sounds during checkin and checkout in the staff interface. Not supported by all web browsers yet.','YesNo'), +( 'AudioAlertsCustom', '', NULL, 'Custom audio alert triggers in json associative array format', 'free' ), ( 'AudioAlertSelectorWarning', '.audio-alert-warning', NULL, 'List of jQuery selectors that should trigger warning alert', 'free' ), ( 'AudioAlertSelectorAction', '.audio-alert-action', NULL, 'List of jQuery selectors that should trigger action alert', 'free' ), ( 'AudioAlertSelectorSuccess', '.audio-alert-success', NULL, 'List of jQuery selectors that should trigger successs alert', 'free' ), diff --git a/installer/data/mysql/updatedatabase.pl b/installer/data/mysql/updatedatabase.pl index d8a6a90..6b6a3c1 100755 --- a/installer/data/mysql/updatedatabase.pl +++ b/installer/data/mysql/updatedatabase.pl @@ -9614,6 +9614,7 @@ if ( CheckVersion($DBversion) ) { $dbh->do(q{ INSERT IGNORE INTO systempreferences ( variable, value, options, explanation, type ) VALUES + ( 'AudioAlertsCustom', '', NULL, 'Custom audio alert triggers in json associative array format', 'free' ), ( 'OverrideAudioAlertWarning', '', NULL, 'URL to an audio file to replace the default warning sound.', 'free' ), ( 'OverrideAudioAlertAction', '', NULL, 'URL to an audio file to replace the default "action required" sound.', 'free' ), ( 'OverrideAudioAlertSuccess', '', NULL, 'URL to an audio file to replace the default success sound.', 'free' ), @@ -9622,7 +9623,7 @@ if ( CheckVersion($DBversion) ) { ( 'AudioAlertSelectorSuccess', '.audio-alert-success', NULL, 'List of jQuery selectors that should trigger successs alert', 'free' ) }); - print "Upgrade to $DBversion done (Bug 11169 - Add OPACAcquisitionDetails syspref)\n"; + print "Upgrade to $DBversion done (Bug 11431 - Add additional sound options for warnings)\n"; SetVersion($DBversion); } diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/doc-head-close.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/doc-head-close.inc index 5ef308d..77b6381 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/includes/doc-head-close.inc +++ b/koha-tmpl/intranet-tmpl/prog/en/includes/doc-head-close.inc @@ -1,4 +1,5 @@ [% USE Koha %] +[% USE String %] @@ -73,17 +74,31 @@ var AUDIO_ALERT_SELECTOR_ACTION = '[% Koha.Preference("AudioAlertSelectorAction") | replace( "'", "\\'" ) %]'; var AUDIO_ALERT_SELECTOR_WARNING = '[% Koha.Preference("AudioAlertSelectorWarning") | replace( "'", "\\'" ) %]'; var AUDIO_ALERT_SELECTOR_SUCCESS = '[% Koha.Preference("AudioAlertSelectorSuccess") | replace( "'", "\\'" ) %]'; + var AUDIO_ALERT_SELECTOR_CUSTOM = JSON.parse( '{ [% String.new( Koha.Preference("AudioAlertsCustom") ).collapse | replace( "'", "\\'" ) %] }' ); //]]> $( document ).ready(function() { - if ( $( AUDIO_ALERT_SELECTOR_ACTION ).length ) { - playSoundAction(); + var no_sound_played = true; + if ( Object.keys(AUDIO_ALERT_SELECTOR_CUSTOM) ) { + for ( var k in AUDIO_ALERT_SELECTOR_CUSTOM ) { + if ( $(k).length ) { + playSound( AUDIO_ALERT_SELECTOR_CUSTOM[k] ); + no_sound_played = false; + break; + } + } } - else if ( $( AUDIO_ALERT_SELECTOR_WARNING ).length ) { - playSoundWarning(); - } - else if ( $( AUDIO_ALERT_SELECTOR_SUCCESS ).length ) { - playSoundSuccess(); + + if ( no_sound_played ) { + if ( $( AUDIO_ALERT_SELECTOR_ACTION ).length ) { + playSoundAction(); + } + else if ( $( AUDIO_ALERT_SELECTOR_WARNING ).length ) { + playSoundWarning(); + } + else if ( $( AUDIO_ALERT_SELECTOR_SUCCESS ).length ) { + playSoundSuccess(); + } } }); diff --git a/koha-tmpl/intranet-tmpl/prog/en/js/staff-global.js b/koha-tmpl/intranet-tmpl/prog/en/js/staff-global.js index 92de1f2..e6f03a2 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/js/staff-global.js +++ b/koha-tmpl/intranet-tmpl/prog/en/js/staff-global.js @@ -126,7 +126,7 @@ function playSound( sound ) { if ( ! ( sound.charAt(4) == ':' && sound.charAt(5) == '/' && sound.charAt(6) == '/' ) ) { sound = AUDIO_ALERT_PATH + sound; } - document.getElementById("audio-alert").innerHTML = ""; + document.getElementById("audio-alert").innerHTML = ''; } function playSoundWarning() { diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/circulation.pref b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/circulation.pref index 6752ff8..9ab1f81 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/circulation.pref +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/circulation.pref @@ -732,3 +732,22 @@ Circulation: - pref: AudioAlertSelectorSuccess class: url - (This should be a list of jQuery selectors, separated by commas) + - + - Use the following jQuery selectors to trigger the assigned sounds. + - pref: AudioAlertsCustom + type: textarea + class: code + - This should be a list of jQuery selectors, separated by commas, with the sound file name or url afterword, demarcated by ':' + -
+ - 'For example:' + -
+ - '".class1 .class2": "IM_notification.ogg",' + -
+ - '".class1 #id1": "http://domain.com/path/to/sound2.mp3"' + -
+ - would play Koha's internal IM_notification.ogg if any elements with classes of class1 or class2 are found on the page, + - and sound2.mp3 would play if any element with both the id "id1" and class "class1". + -
+ - The priority is from top to bottom. The sound that matches first will be played. + -
+ - If no match is found, Koha will fall back to the system preferences for the alert, action, and warning sounds. -- 1.7.2.5