From e6879bd963aea84159cca7ea582e147d5b33c7e9 Mon Sep 17 00:00:00 2001
From: Kyle M Hall <kyle@bywatersolutions.com>
Date: Thu, 19 Jun 2014 09:17:06 -0400
Subject: [PATCH] Bug 11431 [3] - Add ability to customize the warning, action, and success sounds

---
 installer/data/mysql/updatedatabase.pl             |    7 +++++++
 .../prog/en/includes/doc-head-close.inc            |    6 +++++-
 koha-tmpl/intranet-tmpl/prog/en/js/staff-global.js |   11 +++++++----
 .../en/modules/admin/preferences/circulation.pref  |   15 +++++++++++++++
 4 files changed, 34 insertions(+), 5 deletions(-)

diff --git a/installer/data/mysql/updatedatabase.pl b/installer/data/mysql/updatedatabase.pl
index d8ea64b..b8a650e 100755
--- a/installer/data/mysql/updatedatabase.pl
+++ b/installer/data/mysql/updatedatabase.pl
@@ -8564,6 +8564,13 @@ $DBversion = "3.17.00.XXX";
 if ( CheckVersion($DBversion) ) {
     $dbh->do(q{UPDATE systempreferences SET variable = 'AudioAlerts' WHERE variable = 'soundon'});
 
+    $dbh->do(q{
+        INSERT IGNORE INTO systempreferences ( variable, value, options, explanation, type ) VALUES
+        ( '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' )
+    });
+
     print "Upgrade to $DBversion done (Bug 11169 - Add OPACAcquisitionDetails syspref)\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 2d375bd..90d4c76 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,3 +1,4 @@
+[% USE Koha %]
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 <link rel="shortcut icon" href="[% IF ( IntranetFavicon ) %][% IntranetFavicon %][% ELSE %][% interface %]/[% theme %]/img/favicon.ico[% END %]" type="image/x-icon" />
 
@@ -65,7 +66,10 @@
 [% IF AudioAlerts %]
     <script type="text/javascript">
         //<![CDATA[
-            var TMPL_SOUND_PATH = "[% interface %]/[% theme %]/sound/";
+            var AUDIO_ALERT_PATH = "[% interface %]/[% theme %]/sound/";
+            var AUDIO_ALERT_ACTION  = "[% Koha.Preference('OverrideAudioAlertAction')  || 'opening.ogg'  %]";
+            var AUDIO_ALERT_WARNING = "[% Koha.Preference('OverrideAudioAlertWarning') || 'critical.ogg' %]";
+            var AUDIO_ALERT_SUCCESS = "[% Koha.Preference('OverrideAudioAlertSuccess') || 'beep.ogg'     %]";
         //]]>
 
         $( document ).ready(function() {
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 97fdd7a..ed85d0a 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/js/staff-global.js
+++ b/koha-tmpl/intranet-tmpl/prog/en/js/staff-global.js
@@ -119,18 +119,21 @@ function confirmDelete(message) {
 }
 
 function playSound( sound ) {
-    sound = TMPL_SOUND_PATH + sound;
+    // This is way faster than substring
+    if ( ! ( sound.charAt(4) == ':' && sound.charAt(5) == '/' && sound.charAt(6) == '/' ) ) {
+        sound = AUDIO_ALERT_PATH + sound;
+    }
     document.getElementById("audio-alert").innerHTML = "<embed src='" + sound + "' hidden='true' autostart='true' loop='false' />";
 }
 
 function playSoundWarning() {
-    playSound( 'critical.ogg' );
+    playSound( AUDIO_ALERT_WARNING );
 }
 
 function playSoundAction() {
-    playSound( 'opening.ogg' );
+    playSound( AUDIO_ALERT_ACTION );
 }
 
 function playSoundSuccess() {
-    playSound( 'beep.ogg' );
+    playSound( AUDIO_ALERT_SUCCESS );
 }
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 e1b90d3..8251f4b 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
@@ -626,3 +626,18 @@ Circulation:
                  yes: "Enable"
                  no: "Don't enable"
             - circulation sounds during checkin and checkout in the staff interface.  Not supported by all web browsers yet.
+        -
+            - Replace the default audio alert for <i>warning</i> alerts with the sound found at
+            - pref: OverrideAudioAlertWarning
+              class: url
+            - (This should be a complete URL, starting with <code>http://</code>)
+        -
+            - Replace the default audio alert for <i>action</i> alerts with the sound found at
+            - pref: OverrideAudioAlertAction
+              class: url
+            - (This should be a complete URL, starting with <code>http://</code>)
+        -
+            - Replace the default audio alert for <i>success</i> alerts with the sound found at
+            - pref: OverrideAudioAlertSuccess
+              class: url
+            - (This should be a complete URL, starting with <code>http://</code>)
-- 
1.7.2.5