/*! * Piwik - free/libre analytics platform * * @link http://piwik.org * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later */ (function () { angular.module('piwikApp').controller('SitesManagerController', SitesManagerController); SitesManagerController.$inject = ['$scope', '$filter', 'coreAPI', 'sitesManagerAPI', 'piwikApi', 'sitesManagerAdminSitesModel', 'piwik', 'sitesManagerApiHelper', 'sitesManagerTypeModel']; function SitesManagerController($scope, $filter, coreAPI, sitesManagerAPI, piwikApi, adminSites, piwik, sitesManagerApiHelper, sitesManagerTypeModel) { var translate = $filter('translate'); var init = function () { $scope.period = piwik.broadcast.getValueFromUrl('period'); $scope.date = piwik.broadcast.getValueFromUrl('date'); $scope.adminSites = adminSites; $scope.hasSuperUserAccess = piwik.hasSuperUserAccess; $scope.redirectParams = {showaddsite: false}; $scope.siteIsBeingEdited = false; $scope.cacheBuster = piwik.cacheBuster; $scope.totalNumberOfSites = '?'; initSelectLists(); initUtcTime(); initUserIP(); initCustomVariablesActivated(); initIsTimezoneSupportEnabled(); initGlobalParams(); initActions(); }; var initActions = function () { $scope.cancelEditSite = cancelEditSite; $scope.addSite = addSite; $scope.addNewEntity = addNewEntity; $scope.saveGlobalSettings = saveGlobalSettings; $scope.informSiteIsBeingEdited = informSiteIsBeingEdited; $scope.lookupCurrentEditSite = lookupCurrentEditSite; $scope.closeAddMeasurableDialog = function () { // I couldn't figure out another way to close that jquery dialog var element = angular.element('[piwik-dialog="$parent.showAddSiteDialog"]'); if (element.parents('ui-dialog') && element.dialog('isOpen')) { element.dialog('close'); } } }; var initAvailableTypes = function () { return sitesManagerTypeModel.fetchAvailableTypes().then(function (types) { $scope.availableTypes = types; $scope.typeForNewEntity = 'website'; return types; }); }; var informSiteIsBeingEdited = function() { $scope.siteIsBeingEdited = true; }; var initSelectLists = function() { initSiteSearchSelectOptions(); initEcommerceSelectOptions(); initCurrencyList(); initTimezones(); }; var initGlobalParams = function() { showLoading(); var availableTypesPromise = initAvailableTypes(); sitesManagerAPI.getGlobalSettings(function(globalSettings) { $scope.globalSettings = globalSettings; $scope.globalSettings.searchKeywordParametersGlobal = sitesManagerApiHelper.commaDelimitedFieldToArray($scope.globalSettings.searchKeywordParametersGlobal); $scope.globalSettings.searchCategoryParametersGlobal = sitesManagerApiHelper.commaDelimitedFieldToArray($scope.globalSettings.searchCategoryParametersGlobal); $scope.globalSettings.excludedIpsGlobal = sitesManagerApiHelper.commaDelimitedFieldToArray($scope.globalSettings.excludedIpsGlobal); $scope.globalSettings.excludedQueryParametersGlobal = sitesManagerApiHelper.commaDelimitedFieldToArray($scope.globalSettings.excludedQueryParametersGlobal); $scope.globalSettings.excludedUserAgentsGlobal = sitesManagerApiHelper.commaDelimitedFieldToArray($scope.globalSettings.excludedUserAgentsGlobal); hideLoading(); initKeepURLFragmentsList(); adminSites.fetchLimitedSitesWithAdminAccess(function () { availableTypesPromise.then(function () { triggerAddSiteIfRequested(); }); }); sitesManagerAPI.getSitesIdWithAdminAccess(function (siteIds) { if (siteIds && siteIds.length) { $scope.totalNumberOfSites = siteIds.length; } }); }); }; var triggerAddSiteIfRequested = function() { var search = String(window.location.search); if(piwik.helper.getArrayFromQueryString(search).showaddsite == 1) addNewEntity(); }; var initEcommerceSelectOptions = function() { $scope.eCommerceptions = [ {key: '0', value: translate('SitesManager_NotAnEcommerceSite')}, {key: '1', value: translate('SitesManager_EnableEcommerce')} ]; }; var initUtcTime = function() { var currentDate = new Date(); $scope.utcTime = new Date( currentDate.getUTCFullYear(), currentDate.getUTCMonth(), currentDate.getUTCDate(), currentDate.getUTCHours(), currentDate.getUTCMinutes(), currentDate.getUTCSeconds() ); }; var initIsTimezoneSupportEnabled = function() { sitesManagerAPI.isTimezoneSupportEnabled(function (timezoneSupportEnabled) { $scope.timezoneSupportEnabled = timezoneSupportEnabled; }); }; var initTimezones = function() { sitesManagerAPI.getTimezonesList( function (timezones) { $scope.timezones = []; angular.forEach(timezones, function(groupTimezones, timezoneGroup) { angular.forEach(groupTimezones, function(label, code) { $scope.timezones.push({ group: timezoneGroup, code: code, label: label }); }); }); } ); }; var initCustomVariablesActivated = function() { coreAPI.isPluginActivated( function (customVariablesActivated) { $scope.customVariablesActivated = customVariablesActivated; }, {pluginName: 'CustomVariables'} ); }; var initUserIP = function() { coreAPI.getIpFromHeader(function(ip) { $scope.currentIpAddress = ip; }); }; var initSiteSearchSelectOptions = function() { $scope.siteSearchOptions = [ {key: '1', value: translate('SitesManager_EnableSiteSearch')}, {key: '0', value: translate('SitesManager_DisableSiteSearch')} ]; }; var initKeepURLFragmentsList = function() { $scope.keepURLFragmentsOptions = { 0: ($scope.globalSettings.keepURLFragmentsGlobal ? translate('General_Yes') : translate('General_No')) + ' (' + translate('General_Default') + ')', 1: translate('General_Yes'), 2: translate('General_No') }; }; var addNewEntity = function () { sitesManagerTypeModel.hasMultipleTypes().then(function (hasMultipleTypes) { if (hasMultipleTypes) { $scope.showAddSiteDialog = true; } else if ($scope.availableTypes.length === 1) { var type = $scope.availableTypes[0].id; addSite(type); } }); }; var addSite = function(type) { if (!type) { type = 'website'; // todo shall we really hard code this or trigger an exception or so? } $scope.adminSites.sites.unshift({type: type}); }; var saveGlobalSettings = function() { var ajaxHandler = new ajaxHelper(); ajaxHandler.addParams({ module: 'SitesManager', format: 'json', action: 'setGlobalSettings' }, 'GET'); ajaxHandler.addParams({ timezone: $scope.globalSettings.defaultTimezone, currency: $scope.globalSettings.defaultCurrency, excludedIps: $scope.globalSettings.excludedIpsGlobal.join(','), excludedQueryParameters: $scope.globalSettings.excludedQueryParametersGlobal.join(','), excludedUserAgents: $scope.globalSettings.excludedUserAgentsGlobal.join(','), keepURLFragments: $scope.globalSettings.keepURLFragmentsGlobal ? 1 : 0, enableSiteUserAgentExclude: $scope.globalSettings.siteSpecificUserAgentExcludeEnabled ? 1 : 0, searchKeywordParameters: $scope.globalSettings.searchKeywordParametersGlobal.join(','), searchCategoryParameters: $scope.globalSettings.searchCategoryParametersGlobal.join(',') }, 'POST'); ajaxHandler.redirectOnSuccess($scope.redirectParams); ajaxHandler.setLoadingElement(); ajaxHandler.send(true); }; var cancelEditSite = function ($event) { $event.stopPropagation(); piwik.helper.redirect($scope.redirectParams); }; var lookupCurrentEditSite = function () { var sitesInEditMode = $scope.adminSites.sites.filter(function(site) { return site.editMode; }); return sitesInEditMode[0]; }; var initCurrencyList = function () { sitesManagerAPI.getCurrencyList(function (currencies) { $scope.currencies = currencies; }); }; var showLoading = function() { $scope.loading = true; }; var hideLoading = function() { $scope.loading = false; }; init(); } })();