278 lines
9.8 KiB
JavaScript
278 lines
9.8 KiB
JavaScript
/*!
|
|
* 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', '$rootScope', '$window'];
|
|
|
|
function SitesManagerController($scope, $filter, coreAPI, sitesManagerAPI, piwikApi, adminSites, piwik, sitesManagerApiHelper, sitesManagerTypeModel, $rootScope, $window) {
|
|
|
|
var translate = $filter('translate');
|
|
|
|
$scope.globalSettings = {};
|
|
|
|
$rootScope.$on('$locationChangeSuccess', function () {
|
|
if (piwik.hasSuperUserAccess) {
|
|
// as we are not using a router yet...
|
|
if ($window.location.hash === '#globalSettings' || $window.location.hash === '#/globalSettings') {
|
|
broadcast.propagateNewPage('action=globalSettings');
|
|
}
|
|
}
|
|
});
|
|
|
|
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.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.lookupCurrentEditSite = lookupCurrentEditSite;
|
|
};
|
|
|
|
var initAvailableTypes = function () {
|
|
return sitesManagerTypeModel.fetchAvailableTypes().then(function (types) {
|
|
$scope.availableTypes = types;
|
|
$scope.typeForNewEntity = 'website';
|
|
|
|
return types;
|
|
});
|
|
};
|
|
|
|
var initSelectLists = function() {
|
|
|
|
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 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) {
|
|
|
|
var scopeTimezones = [];
|
|
$scope.timezones = [];
|
|
|
|
angular.forEach(timezones, function(groupTimezones, timezoneGroup) {
|
|
|
|
angular.forEach(groupTimezones, function(label, code) {
|
|
|
|
scopeTimezones.push({
|
|
group: timezoneGroup,
|
|
key: code,
|
|
value: label
|
|
});
|
|
});
|
|
});
|
|
|
|
$scope.timezones = scopeTimezones;
|
|
}
|
|
);
|
|
};
|
|
|
|
var initCustomVariablesActivated = function() {
|
|
|
|
coreAPI.isPluginActivated(
|
|
|
|
function (customVariablesActivated) {
|
|
$scope.customVariablesActivated = customVariablesActivated;
|
|
},
|
|
|
|
{pluginName: 'CustomVariables'}
|
|
);
|
|
};
|
|
|
|
var initUserIP = function() {
|
|
|
|
coreAPI.getIpFromHeader(function(ip) {
|
|
$scope.currentIpAddress = ip;
|
|
});
|
|
};
|
|
|
|
var initKeepURLFragmentsList = function() {
|
|
$scope.keepURLFragmentsOptions = [
|
|
{key: 0, value: ($scope.globalSettings.keepURLFragmentsGlobal ? translate('General_Yes') : translate('General_No')) + ' (' + translate('General_Default') + ')'},
|
|
{key: 1, value: translate('General_Yes')},
|
|
{key: 2, value: 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) {
|
|
|
|
var parameters = {isAllowed: true, measurableType: type};
|
|
$rootScope.$emit('SitesManager.initAddSite', parameters);
|
|
if (parameters && !parameters.isAllowed) {
|
|
return;
|
|
}
|
|
|
|
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.withTokenInUrl();
|
|
ajaxHandler.redirectOnSuccess($scope.redirectParams);
|
|
ajaxHandler.setLoadingElement();
|
|
ajaxHandler.send();
|
|
};
|
|
|
|
var cancelEditSite = function (site) {
|
|
site.editMode = false;
|
|
|
|
var idSite = site.idsite;
|
|
if (idSite) {
|
|
var siteElement = $('.site[idsite=' + idSite + ']');
|
|
if (siteElement[0]) {
|
|
// todo move this into a directive
|
|
siteElement[0].scrollIntoView();
|
|
}
|
|
}
|
|
};
|
|
|
|
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();
|
|
}
|
|
})();
|