1 line
8.5 KiB
JavaScript
Executable File
1 line
8.5 KiB
JavaScript
Executable File
"use strict";App.Utils.CalendarSync=function(){function hasSync(type){var $selectedOption=$selectFilterItem.find("option:selected");return!!+$selectedOption.attr("".concat(type,"-sync"))}function updateSyncButtons(){var $selectedOption=$selectFilterItem.find("option:selected"),type=$selectedOption.attr("type"),isProvider="provider"===type,hasGoogleSync=!!+$selectedOption.attr("google-sync"),hasCaldavSync=!!+$selectedOption.attr("caldav-sync"),hasSync=hasGoogleSync||hasCaldavSync;$enableSync.prop("hidden",!isProvider||hasSync),$syncButtonGroup.prop("hidden",!isProvider||!hasSync)}function enableGoogleSync(){var authUrl=App.Utils.Url.siteUrl("google/oauth/"+$("#select-filter-item").val()),redirectUrl=App.Utils.Url.siteUrl("google/oauth_callback"),windowHandle=window.open(authUrl,"Easy!Appointments","width=800, height=600"),authInterval=window.setInterval(function(){try{if(windowHandle.document&&-1!==windowHandle.document.URL.indexOf(redirectUrl)){windowHandle.close(),window.clearInterval(authInterval);var $selectedOption=$selectFilterItem.find("option:selected");$selectedOption.attr("google-sync","1"),updateSyncButtons(),selectGoogleCalendar()}}catch(Error){}},100)}function disableGoogleSync(){App.Utils.Message.show(lang("disable_sync"),lang("disable_sync_prompt"),[{text:lang("cancel"),click:function click(event,messageModal){messageModal.hide()}},{text:lang("confirm"),click:function click(event,messageModal){var providerId=$selectFilterItem.val(),provider=vars("available_providers").find(function(availableProvider){return+availableProvider.id===+providerId});if(!provider)throw new Error("Provider not found: "+providerId);provider.settings.google_sync="0",provider.settings.google_token=null,App.Http.Google.disableProviderSync(provider.id);var $selectedOption=$selectFilterItem.find("option:selected");$selectedOption.attr("google-sync","0"),updateSyncButtons(),messageModal.hide()}}])}function selectGoogleCalendar(){var providerId=$selectFilterItem.val();App.Http.Google.getGoogleCalendars(providerId).done(function(googleCalendars){var $selectGoogleCalendar=$("\n <select class=\"form-control\">\n <!-- JS -->\n </select>\n ");googleCalendars.forEach(function(googleCalendar){$selectGoogleCalendar.append(new Option(googleCalendar.summary,googleCalendar.id))});var $messageModal=App.Utils.Message.show(lang("select_sync_calendar"),lang("select_sync_calendar_prompt"),[{text:lang("select"),click:function click(event,messageModal){var googleCalendarId=$selectGoogleCalendar.val();App.Http.Google.selectGoogleCalendar(providerId,googleCalendarId).done(function(){App.Layouts.Backend.displayNotification(lang("sync_calendar_selected"))}),messageModal.hide()}}]);$selectGoogleCalendar.appendTo($messageModal.find(".modal-body"))})}function triggerGoogleSync(){var providerId=$selectFilterItem.val();App.Http.Google.syncWithGoogle(providerId).done(function(){App.Layouts.Backend.displayNotification(lang("calendar_sync_completed")),$reloadAppointments.trigger("click")}).fail(function(){App.Layouts.Backend.displayNotification(lang("calendar_sync_failed"))})}function enableCaldavSync(){var defaultCaldavUrl=0<arguments.length&&void 0!==arguments[0]?arguments[0]:"",defaultCaldavUsername=1<arguments.length&&void 0!==arguments[1]?arguments[1]:"",defaultCaldavPassword=2<arguments.length&&void 0!==arguments[2]?arguments[2]:"",$container=$("\n <div>\n <div class=\"mb-3\">\n <label for=\"caldav-url\" class=\"form-label\">\n ".concat(lang("calendar_url"),"\n </label>\n <input type=\"text\" class=\"form-control\" id=\"caldav-url\" value=\"").concat(defaultCaldavUrl,"\"/>\n </div> \n <div class=\"mb-3\">\n <label for=\"caldav-username\" class=\"form-label\">\n ").concat(lang("username"),"\n </label>\n <input type=\"text\" class=\"form-control\" id=\"caldav-username\" value=\"").concat(defaultCaldavUsername,"\"/>\n </div> \n <div class=\"mb-3\">\n <label for=\"caldav-password\" class=\"form-label\">\n ").concat(lang("password"),"\n </label>\n <input type=\"password\" class=\"form-control\" id=\"caldav-password\" value=\"").concat(defaultCaldavPassword,"\"/>\n </div> \n \n <div class=\"alert alert-danger\" hidden>\n <!-- JS -->\n </div>\n </div>\n ")),$messageModal=App.Utils.Message.show(lang("caldav_server"),lang("caldav_connection_info_prompt"),[{text:lang("cancel"),click:function click(event,messageModal){messageModal.hide()}},{text:lang("connect"),click:function click(event,messageModal){var providerId=$selectFilterItem.val();$messageModal.find(".is-invalid").removeClass("is-invalid");var $alert=$messageModal.find(".alert");$alert.text("").prop("hidden",!0);var $caldavUrl=$container.find("#caldav-url"),caldavUrl=$caldavUrl.val();if(!caldavUrl)return void $caldavUrl.addClass("is-invalid");var $caldavUsername=$container.find("#caldav-username"),caldavUsername=$caldavUsername.val();if(!caldavUsername)return void $caldavUsername.addClass("is-invalid");var $caldavPassword=$container.find("#caldav-password"),caldavPassword=$caldavPassword.val();return caldavPassword?void App.Http.Caldav.connectToServer(providerId,caldavUrl,caldavUsername,caldavPassword).done(function(response){if(!response.success)return $caldavUrl.addClass("is-invalid"),$caldavUsername.addClass("is-invalid"),$caldavPassword.addClass("is-invalid"),void $alert.text(lang("login_failed")+" "+response.message).prop("hidden",!1);var $selectedOption=$selectFilterItem.find("option:selected");$selectedOption.attr("caldav-sync","1"),updateSyncButtons(),App.Layouts.Backend.displayNotification(lang("sync_calendar_selected")),messageModal.hide()}):void $caldavPassword.addClass("is-invalid")}}]);$messageModal.find(".modal-body").append($container)}function disableCaldavSync(){App.Utils.Message.show(lang("disable_sync"),lang("disable_sync_prompt"),[{text:lang("cancel"),click:function click(event,messageModal){messageModal.hide()}},{text:lang("confirm"),click:function click(event,messageModal){var providerId=$selectFilterItem.val(),provider=vars("available_providers").find(function(availableProvider){return+availableProvider.id===+providerId});if(!provider)throw new Error("Provider not found: "+providerId);provider.settings.caldav_sync="0",provider.settings.caldav_url=null,provider.settings.caldav_username=null,provider.settings.caldav_password=null,App.Http.Caldav.disableProviderSync(provider.id);var $selectedOption=$selectFilterItem.find("option:selected");$selectedOption.attr("caldav-sync","0"),updateSyncButtons(),messageModal.hide()}}])}function triggerCaldavSync(){var providerId=$selectFilterItem.val();App.Http.Caldav.syncWithCaldav(providerId).done(function(){App.Layouts.Backend.displayNotification(lang("calendar_sync_completed")),$reloadAppointments.trigger("click")}).fail(function(){App.Layouts.Backend.displayNotification(lang("calendar_sync_failed"))})}function onSelectFilterItemChange(){updateSyncButtons()}function onEnableSyncClick(){var isGoogleSyncFeatureEnabled=vars("google_sync_feature");return isGoogleSyncFeatureEnabled?void App.Utils.Message.show(lang("enable_sync"),lang("sync_method_prompt"),[{text:"CalDAV Calendar",className:"btn btn-outline-primary me-auto",click:function click(event,messageModal){messageModal.hide(),enableCaldavSync()}},{text:"Google Calendar",click:function click(event,messageModal){messageModal.hide(),enableGoogleSync()}}]):void enableCaldavSync()}function onDisableSyncClick(){var hasGoogleSync=hasSync("google");if(hasGoogleSync)return void disableGoogleSync();var hasCalSync=hasSync("caldav");hasCalSync&&disableCaldavSync()}function onTriggerSyncClick(){var hasGoogleSync=hasSync("google");if(hasGoogleSync)return void triggerGoogleSync();var hasCalSync=hasSync("caldav");hasCalSync&&triggerCaldavSync()}function initialize(){$selectFilterItem.on("change",onSelectFilterItemChange),$enableSync.on("click",onEnableSyncClick),$disableSync.on("click",onDisableSyncClick),$triggerSync.on("click",onTriggerSyncClick)}var $selectFilterItem=$("#select-filter-item"),$enableSync=$("#enable-sync"),$disableSync=$("#disable-sync"),$triggerSync=$("#trigger-sync"),$syncButtonGroup=$("#sync-button-group"),$reloadAppointments=$("#reload-appointments");return document.addEventListener("DOMContentLoaded",initialize),{initialize:initialize}}(); |