227 lines
8.4 KiB
JavaScript
227 lines
8.4 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('SitesManagerSiteController', SitesManagerSiteController);
|
|
|
|
SitesManagerSiteController.$inject = ['$scope', '$filter', 'sitesManagerApiHelper', 'sitesManagerTypeModel', 'piwikApi', '$timeout'];
|
|
|
|
function SitesManagerSiteController($scope, $filter, sitesManagerApiHelper, sitesManagerTypeModel, piwikApi, $timeout) {
|
|
|
|
var translate = $filter('translate');
|
|
|
|
var updateView = function () {
|
|
$timeout(function () {
|
|
$('.editingSite').find('select').material_select();
|
|
Materialize.updateTextFields();
|
|
});
|
|
}
|
|
|
|
var init = function () {
|
|
|
|
initModel();
|
|
initActions();
|
|
|
|
$scope.site.isLoading = true;
|
|
sitesManagerTypeModel.fetchTypeById($scope.site.type).then(function (type) {
|
|
$scope.site.isLoading = false;
|
|
|
|
if (type) {
|
|
$scope.currentType = type;
|
|
$scope.howToSetupUrl = type.howToSetupUrl;
|
|
$scope.isInternalSetupUrl = '?' === ('' + type.howToSetupUrl).substr(0, 1);
|
|
$scope.typeSettings = type.settings;
|
|
|
|
if (isSiteNew()) {
|
|
$scope.measurableSettings = angular.copy(type.settings);
|
|
}
|
|
} else {
|
|
$scope.currentType = {name: $scope.site.type};
|
|
}
|
|
});
|
|
};
|
|
|
|
var initActions = function () {
|
|
|
|
$scope.editSite = editSite;
|
|
$scope.saveSite = saveSite;
|
|
$scope.openDeleteDialog = openDeleteDialog;
|
|
$scope.site['delete'] = deleteSite;
|
|
};
|
|
|
|
var initModel = function() {
|
|
|
|
if (isSiteNew()) {
|
|
initNewSite();
|
|
} else {
|
|
$scope.site.excluded_ips = sitesManagerApiHelper.commaDelimitedFieldToArray($scope.site.excluded_ips);
|
|
$scope.site.excluded_parameters = sitesManagerApiHelper.commaDelimitedFieldToArray($scope.site.excluded_parameters);
|
|
$scope.site.excluded_user_agents = sitesManagerApiHelper.commaDelimitedFieldToArray($scope.site.excluded_user_agents);
|
|
$scope.site.sitesearch_keyword_parameters = sitesManagerApiHelper.commaDelimitedFieldToArray($scope.site.sitesearch_keyword_parameters);
|
|
$scope.site.sitesearch_category_parameters = sitesManagerApiHelper.commaDelimitedFieldToArray($scope.site.sitesearch_category_parameters);
|
|
}
|
|
|
|
$scope.site.removeDialog = {};
|
|
|
|
updateView();
|
|
};
|
|
|
|
var editSite = function () {
|
|
$scope.site.editMode = true;
|
|
|
|
$scope.measurableSettings = [];
|
|
$scope.site.isLoading = true;
|
|
piwikApi.fetch({method: 'SitesManager.getSiteSettings', idSite: $scope.site.idsite}).then(function (settings) {
|
|
$scope.measurableSettings = settings;
|
|
$scope.site.isLoading = false;
|
|
}, function () {
|
|
$scope.site.isLoading = false;
|
|
});
|
|
|
|
updateView();
|
|
};
|
|
|
|
var saveSite = function() {
|
|
|
|
var sendSiteSearchKeywordParams = $scope.site.sitesearch == '1' && !$scope.site.useDefaultSiteSearchParams;
|
|
var sendSearchCategoryParameters = sendSiteSearchKeywordParams && $scope.customVariablesActivated;
|
|
|
|
var values = {
|
|
siteName: $scope.site.name,
|
|
timezone: $scope.site.timezone,
|
|
currency: $scope.site.currency,
|
|
type: $scope.site.type,
|
|
settingValues: {}
|
|
};
|
|
|
|
var isNewSite = isSiteNew();
|
|
|
|
var apiMethod = 'SitesManager.addSite';
|
|
if (!isNewSite) {
|
|
apiMethod = 'SitesManager.updateSite';
|
|
values.idSite = $scope.site.idsite;
|
|
}
|
|
|
|
angular.forEach($scope.measurableSettings, function (settings) {
|
|
if (!values['settingValues'][settings.pluginName]) {
|
|
values['settingValues'][settings.pluginName] = [];
|
|
}
|
|
|
|
angular.forEach(settings.settings, function (setting) {
|
|
var value = setting.value;
|
|
if (value === false) {
|
|
value = '0';
|
|
} else if (value === true) {
|
|
value = '1';
|
|
}
|
|
if (angular.isArray(value) && setting.uiControl == 'textarea') {
|
|
var newValue = [];
|
|
angular.forEach(value, function (val) {
|
|
// as they are line separated we cannot trim them in the view
|
|
if (val) {
|
|
newValue.push(val);
|
|
}
|
|
});
|
|
value = newValue;
|
|
}
|
|
|
|
values['settingValues'][settings.pluginName].push({
|
|
name: setting.name,
|
|
value: value
|
|
});
|
|
});
|
|
});
|
|
|
|
piwikApi.post({method: apiMethod}, values).then(function (response) {
|
|
$scope.site.editMode = false;
|
|
|
|
var UI = require('piwik/UI');
|
|
var notification = new UI.Notification();
|
|
|
|
var message = 'Website updated';
|
|
if (isNewSite) {
|
|
message = 'Website created';
|
|
}
|
|
|
|
notification.show(message, {context: 'success', id: 'websitecreated'});
|
|
notification.scrollToNotification();
|
|
|
|
if (!$scope.site.idsite && response && response.value) {
|
|
$scope.site.idsite = response.value;
|
|
}
|
|
|
|
angular.forEach(values.settingValues, function (settings, pluginName) {
|
|
angular.forEach(settings, function (setting) {
|
|
if (setting.name === 'urls') {
|
|
$scope.site.alias_urls = setting.value;
|
|
} else {
|
|
$scope.site[setting.name] = setting.value;
|
|
}
|
|
});
|
|
});
|
|
});
|
|
};
|
|
|
|
var isSiteNew = function() {
|
|
return angular.isUndefined($scope.site.idsite);
|
|
};
|
|
|
|
var initNewSite = function() {
|
|
$scope.site.editMode = true;
|
|
$scope.site.timezone = $scope.globalSettings.defaultTimezone;
|
|
$scope.site.currency = $scope.globalSettings.defaultCurrency;
|
|
|
|
if ($scope.typeSettings) {
|
|
// we do not want to manipulate initial type settings
|
|
$scope.measurableSettings = angular.copy($scope.typeSettings);
|
|
}
|
|
};
|
|
|
|
var openDeleteDialog = function() {
|
|
|
|
$scope.site.removeDialog.title = translate('SitesManager_DeleteConfirm', '"' + $scope.site.name + '" (idSite = ' + $scope.site.idsite + ')');
|
|
$scope.site.removeDialog.show = true;
|
|
};
|
|
|
|
var deleteSite = function() {
|
|
var redirectParams = $scope.redirectParams;
|
|
|
|
// if the current idSite in the URL is the site we're deleting, then we have to make to change it. otherwise,
|
|
// if a user goes to another page, the invalid idSite may cause a fatal error.
|
|
if (broadcast.getValueFromUrl('idSite') == $scope.site.idsite) {
|
|
var sites = $scope.adminSites.sites;
|
|
|
|
var otherSite;
|
|
for (var i = 0; i !== sites.length; ++i) {
|
|
if (sites[i].idsite != $scope.site.idsite) {
|
|
otherSite = sites[i];
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (otherSite) {
|
|
redirectParams = $.extend({}, redirectParams, { idSite: otherSite.idsite });
|
|
}
|
|
}
|
|
|
|
var ajaxHandler = new ajaxHelper();
|
|
|
|
ajaxHandler.addParams({
|
|
idSite: $scope.site.idsite,
|
|
module: 'API',
|
|
format: 'json',
|
|
method: 'SitesManager.deleteSite'
|
|
}, 'GET');
|
|
|
|
ajaxHandler.redirectOnSuccess(redirectParams);
|
|
ajaxHandler.setLoadingElement();
|
|
ajaxHandler.send();
|
|
};
|
|
|
|
init();
|
|
}
|
|
})();
|