/*! * 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('ManageGoalsController', ManageGoalsController); ManageGoalsController.$inject = ['piwik', 'piwikApi', '$timeout', '$location', 'reportingMenuModel', '$rootScope']; function ManageGoalsController(piwik, piwikApi, $timeout, $location, reportingMenuModel, $rootScope) { // remember to keep controller very simple. Create a service/factory (model) if needed var self = this; if (!this.goal) { this.goal = {}; } this.showEditGoal = false; this.showGoalList = true; function scrollToTop() { $timeout(function () { piwik.helper.lazyScrollTo(".pageWrap", 200); }); } function initGoalForm(goalMethodAPI, submitText, goalName, description, matchAttribute, pattern, patternType, caseSensitive, revenue, allowMultiple, useEventValueAsRevenue, goalId) { $rootScope.$emit('Goals.beforeInitGoalForm', goalMethodAPI, goalId); self.goal = {}; self.goal.name = goalName; self.goal.description = description; if (matchAttribute == 'manually') { self.goal.triggerType = 'manually'; matchAttribute = 'url'; } else { self.goal.triggerType = 'visitors'; } if (0 === matchAttribute.indexOf('event')) { self.goal.eventType = matchAttribute; matchAttribute = 'event'; } else { self.goal.eventType = 'event_category'; } self.goal.matchAttribute = matchAttribute; self.goal.allowMultiple = allowMultiple; self.goal.patternType = patternType; self.goal.pattern = pattern; self.goal.caseSensitive = caseSensitive; self.goal.revenue = revenue; self.goal.apiMethod = goalMethodAPI; self.goal.useEventValueAsRevenue = useEventValueAsRevenue; self.goal.submitText = submitText; self.goal.goalId = goalId; $timeout(function () { var text = _pk_translate('Goals_AddNewGoal'); if (goalId) { text = _pk_translate('Goals_UpdateGoal') } $('.addEditGoal .card-title').text(text); }); } this.isManuallyTriggered = function () { return this.goal.triggerType == 'manually'; } this.save = function () { var parameters = {}; parameters.name = encodeURIComponent(this.goal.name); parameters.description = encodeURIComponent(this.goal.description); if (this.isManuallyTriggered()) { parameters.matchAttribute = 'manually'; parameters.patternType = 'regex'; parameters.pattern = '.*'; parameters.caseSensitive = 0; } else { parameters.matchAttribute = this.goal.matchAttribute; if (parameters.matchAttribute === 'event') { parameters.matchAttribute = this.goal.eventType; } parameters.patternType = this.goal.patternType; parameters.pattern = encodeURIComponent(this.goal.pattern); parameters.caseSensitive = this.goal.caseSensitive == true ? 1 : 0; } parameters.revenue = this.goal.revenue || 0; parameters.allowMultipleConversionsPerVisit = this.goal.allowMultiple == true ? 1 : 0; parameters.useEventValueAsRevenue = this.goal.useEventValueAsRevenue == true ? 1 : 0; parameters.idGoal = this.goal.goalId; parameters.method = this.goal.apiMethod; var isCreate = parameters.method === 'Goals.addGoal'; var isUpdate = parameters.method === 'Goals.updateGoal'; if (isUpdate) { $rootScope.$emit('Goals.beforeUpdateGoal', parameters, piwikApi); } else if (isCreate) { $rootScope.$emit('Goals.beforeAddGoal', parameters, piwikApi); } if (parameters && 'undefined' !== typeof parameters.cancelRequest && parameters.cancelRequest) { return; } this.isLoading = true; piwikApi.fetch(parameters).then(function () { var search = $location.search(); if (search && search.subcategory && search.subcategory == 'Goals_AddNewGoal' && piwik.helper.isAngularRenderingThePage()) { // when adding a goal for the first time we need to load manage goals page afterwards reportingMenuModel.reloadMenuItems().then(function () { $location.search('subcategory', 'Goals_ManageGoals'); self.isLoading = false; }); } else { location.reload(); } }, function () { scrollToTop(); self.isLoading = false; }); }; this.changedTriggerType = function () { if (!this.isManuallyTriggered() && !this.goal.patternType) { this.goal.patternType = 'contains'; } } this.showListOfReports = function (shouldScrollToTop) { $rootScope.$emit('Goals.cancelForm'); this.showGoalList = true; this.showEditGoal = false; scrollToTop(); }; this.showAddEditForm = function () { this.showGoalList = false; this.showEditGoal = true; }; this.createGoal = function () { var parameters = {isAllowed: true}; $rootScope.$emit('Goals.initAddGoal', parameters); if (parameters && !parameters.isAllowed) { return; } this.showAddEditForm(); initGoalForm('Goals.addGoal', _pk_translate('Goals_AddGoal'), '', '', 'url', '', 'contains', /*caseSensitive = */false, '', /*allowMultiple = */ false, /*useEventValueAsRevenue = */ false, '0'); scrollToTop(); }; this.editGoal = function (goalId) { this.showAddEditForm(); var goal = piwik.goals[goalId]; initGoalForm("Goals.updateGoal", _pk_translate('Goals_UpdateGoal'), goal.name, goal.description, goal.match_attribute, goal.pattern, goal.pattern_type, (goal.case_sensitive != '0'), goal.revenue, goal.allow_multiple, (goal.event_value_as_revenue != '0'), goalId); scrollToTop(); }; this.deleteGoal = function (goalId) { var goal = piwik.goals[goalId]; $('#confirm').find('h2').text(sprintf(_pk_translate('Goals_DeleteGoalConfirm'), '"' + goal.name + '"')); piwikHelper.modalConfirm('#confirm', {yes: function () { self.isLoading = true; piwikApi.fetch({idGoal: goalId, method: 'Goals.deleteGoal'}).then(function () { location.reload(); }, function () { self.isLoading = false; }); }}); }; this.showListOfReports(false); } })();