From 63ce022a8d90072fca6f386cf66b5a8768c6e64f Mon Sep 17 00:00:00 2001 From: Duncan Sommerville Date: Wed, 2 Sep 2015 15:28:36 -0400 Subject: [PATCH] SAAS-1040 - station logo functionality improvements --- .../application/forms/GeneralPreferences.php | 2 +- airtime_mvc/application/models/Preference.php | 9 ++-- .../public/js/airtime/common/common.js | 35 ++++++++++++++++ .../js/airtime/preferences/preferences.js | 41 ++++++++++++++++--- .../public/js/airtime/schedule/add-show.js | 35 ---------------- 5 files changed, 76 insertions(+), 46 deletions(-) diff --git a/airtime_mvc/application/forms/GeneralPreferences.php b/airtime_mvc/application/forms/GeneralPreferences.php index be12ea565..508561bac 100644 --- a/airtime_mvc/application/forms/GeneralPreferences.php +++ b/airtime_mvc/application/forms/GeneralPreferences.php @@ -1,4 +1,4 @@ - 1) { @@ -103,8 +102,8 @@ class Application_Model_Preference $paramMap[':value'] = $value; Application_Common_Database::prepareAndExecute($sql, - $paramMap, - 'execute', + $paramMap, + Application_Common_Database::EXECUTE, PDO::FETCH_ASSOC, $con); diff --git a/airtime_mvc/public/js/airtime/common/common.js b/airtime_mvc/public/js/airtime/common/common.js index d8e43d979..55708d174 100644 --- a/airtime_mvc/public/js/airtime/common/common.js +++ b/airtime_mvc/public/js/airtime/common/common.js @@ -212,6 +212,41 @@ function validateTimeRange() { }; } +// validate uploaded images +function validateImage(img, el) { + // remove any existing error messages + if ($("#img-err")) { $("#img-err").remove(); } + + if (img.size > 2048000) { // 2MB - pull this from somewhere instead? + // hack way of inserting an error message + var err = $.i18n._("Selected file is too large"); + el.parent().after( + ""); + return false; + } else if (validateMimeType(img.type) < 0) { + var err = $.i18n._("File format is not supported"); + el.parent().after( + ""); + return false; + } + return true; +} + +// validate image mime type +function validateMimeType(mime) { + var extensions = [ + 'image/jpeg', + 'image/png', + 'image/gif' + // BMP? + ]; + return $.inArray(mime, extensions); +} + function pad(number, length) { return sprintf("%'0"+length+"d", number); } diff --git a/airtime_mvc/public/js/airtime/preferences/preferences.js b/airtime_mvc/public/js/airtime/preferences/preferences.js index 91a9bef3a..40e267ecd 100644 --- a/airtime_mvc/public/js/airtime/preferences/preferences.js +++ b/airtime_mvc/public/js/airtime/preferences/preferences.js @@ -33,10 +33,10 @@ function setSystemFromEmailReadonly() { var enableSystemEmails = $("#enableSystemEmail"); var systemFromEmail = $("#systemEmail"); if ($(enableSystemEmails).is(':checked')) { - systemFromEmail.removeAttr("readonly"); + systemFromEmail.removeAttr("readonly"); } else { systemFromEmail.attr("readonly", "readonly"); - } + } } function setMailServerInputReadonly() { @@ -114,14 +114,15 @@ function setMsAuthenticationFieldsReadonly(ele) { } function removeLogo() { - $.post(baseUrl+'Preference/remove-logo', function(json){}); - location.reload(); + $.post(baseUrl+'preference/remove-logo', function(json){}); + // Reload without resubmitting the form + location.href = location.href.replace(location.hash,""); } function deleteAllFiles() { var resp = confirm($.i18n._("Are you sure you want to delete all the tracks in your library?")) if (resp) { - $.post(baseUrl+'Preference/delete-all-files', function(json){}); + $.post(baseUrl+'preference/delete-all-files', function(json){}); location.reload(); } } @@ -153,6 +154,36 @@ $(document).ready(function() { }); });*/ + // when an image is uploaded, preview it to the user + var logo = $("#stationLogo"), + preview = $("#logo-img"); + logo.change(function(e) { + if (this.files && this.files[0]) { + preview.show(); + var reader = new FileReader(); // browser compatibility? + reader.onload = function (e) { + console.log("Reader loaded"); + preview.attr('src', e.target.result); + }; + + // check image size so we don't crash the page trying to render + if (validateImage(this.files[0], logo)) { + // read the image data as though it were a data URI + reader.readAsDataURL(this.files[0]); + } else { + // remove the file element data + $(this).val('').replaceWith($(this).clone(true)); + preview.hide(); + } + } else { + preview.hide(); + } + }); + + if (preview.attr('src').indexOf('images/') > -1) { + $("#logo-remove-btn").hide(); + } + showErrorSections(); setMailServerInputReadonly(); diff --git a/airtime_mvc/public/js/airtime/schedule/add-show.js b/airtime_mvc/public/js/airtime/schedule/add-show.js index 326bf9a14..dc459cd10 100644 --- a/airtime_mvc/public/js/airtime/schedule/add-show.js +++ b/airtime_mvc/public/js/airtime/schedule/add-show.js @@ -678,41 +678,6 @@ function setAddShowEvents(form) { } }); - // validate on upload - function validateImage(img, el) { - // remove any existing error messages - if ($("#img-err")) { $("#img-err").remove(); } - - if (img.size > 2048000) { // 2MB - pull this from somewhere instead? - // hack way of inserting an error message - var err = $.i18n._("Selected file is too large"); - el.parent().after( - ""); - return false; - } else if (validateMimeType(img.type) < 0) { - var err = $.i18n._("File format is not supported"); - el.parent().after( - ""); - return false; - } - return true; - } - - // Duplicate of the function in ShowImageController - function validateMimeType(mime) { - var extensions = [ - 'image/jpeg', - 'image/png', - 'image/gif' - // BMP? - ]; - return $.inArray(mime, extensions); - } - form.find("#add_show_logo_current_remove").click(function() { if (confirm($.i18n._('Are you sure you want to delete the current logo?'))) { var showId = $("#add_show_id").attr("value");