From c493abfe0885e8dc9283ebae6254e0d8454f9c68 Mon Sep 17 00:00:00 2001 From: sgiehl Date: Wed, 1 May 2013 11:50:43 +0200 Subject: improved jquery id selector usage --- plugins/Annotations/templates/annotations.js | 2 +- plugins/CoreAdminHome/templates/generalSettings.js | 7 ++++--- .../CoreAdminHome/templates/jsTrackingGenerator.js | 18 +++++++++--------- .../templates/jsTrackingGenerator.tpl | 6 +++--- plugins/CoreHome/templates/calendar.js | 12 ++++++------ plugins/CoreHome/templates/datatable.js | 2 +- plugins/CoreHome/templates/date.js | 4 ++-- plugins/Dashboard/templates/dashboard.js | 22 +++++++++++----------- plugins/Dashboard/templates/dashboardObject.js | 2 +- plugins/Feedback/templates/feedback.js | 2 +- plugins/Feedback/templates/index.tpl | 2 +- plugins/Goals/templates/GoalForm.js | 2 +- plugins/PDFReports/templates/pdf.js | 10 +++++----- plugins/PDFReports/templates/report_parameters.tpl | 6 +++--- .../PrivacyManager/templates/privacySettings.js | 8 ++++---- plugins/SegmentEditor/templates/Segmentation.js | 2 +- plugins/SitesManager/templates/SitesManager.js | 8 ++++---- plugins/UserCountry/templates/admin.js | 2 +- plugins/UserCountryMap/js/realtime-map.js | 4 ++-- plugins/UsersManager/templates/UsersManager.js | 2 +- plugins/UsersManager/templates/userSettings.js | 6 +++--- 21 files changed, 65 insertions(+), 64 deletions(-) (limited to 'plugins') diff --git a/plugins/Annotations/templates/annotations.js b/plugins/Annotations/templates/annotations.js index 941ae4486a..817aade8ac 100755 --- a/plugins/Annotations/templates/annotations.js +++ b/plugins/Annotations/templates/annotations.js @@ -211,7 +211,7 @@ * @return {boolean} */ var isAnnotationStarred = function (annotation) { - return +$('.annotation-star', annotation).attr('data-starred') == 1 ? true : false; + return !!(+$('.annotation-star', annotation).attr('data-starred') == 1); }; /** diff --git a/plugins/CoreAdminHome/templates/generalSettings.js b/plugins/CoreAdminHome/templates/generalSettings.js index 6a493626c7..303e0d4e32 100644 --- a/plugins/CoreAdminHome/templates/generalSettings.js +++ b/plugins/CoreAdminHome/templates/generalSettings.js @@ -123,16 +123,17 @@ $(document).ready(function () { $('#customLogo').change(function () {$("#logoUploadForm").submit()}); // trusted hosts event handling - $('#trustedHostSettings .adminTable').on('click', '.remove-trusted-host', function (e) { + var trustedHostSettings = $('#trustedHostSettings'); + trustedHostSettings.find('.adminTable').on('click', '.remove-trusted-host', function (e) { e.preventDefault(); $(this).parent().parent().remove(); return false; }); - $('#trustedHostSettings .add-trusted-host').click(function (e) { + trustedHostSettings.find('.add-trusted-host').click(function (e) { e.preventDefault(); // append new row to the table - $('#trustedHostSettings tbody').append('' + $('#trustedHostSettings').find('tbody').append('' + '' + 'x' + ''); diff --git a/plugins/CoreAdminHome/templates/jsTrackingGenerator.js b/plugins/CoreAdminHome/templates/jsTrackingGenerator.js index d1ecd3705f..034d7dbe32 100644 --- a/plugins/CoreAdminHome/templates/jsTrackingGenerator.js +++ b/plugins/CoreAdminHome/templates/jsTrackingGenerator.js @@ -65,7 +65,7 @@ siteUrls = {}, siteCurrencies = {}, allGoals = {}, - noneText = $('#image-tracker-goal>option').text(); + noneText = $('#image-tracker-goal').find('>option').text(); // queries Piwik for needed site info for one site var getSiteData = function (idSite, sectionSelect, callback) { @@ -142,7 +142,7 @@ // function that generates JS code var generateJsCode = function () { // get data - var idSite = $('#js-tracker-website .custom_select_main_link').attr('siteid'), + var idSite = $('#js-tracker-website').find('.custom_select_main_link').attr('siteid'), groupPageTitlesByDomain = $('#javascript-tracking-group-by-domain').is(':checked'), mergeSubdomains = $('#javascript-tracking-all-subdomains').is(':checked'), mergeAliasUrls = $('#javascript-tracking-all-aliases').is(':checked'), @@ -214,13 +214,13 @@ \n\ '; - $('#javascript-text textarea').val(result) + $('#javascript-text').find('textarea').val(result) }; // function that generates image tracker link var generateImageTrackerLink = function () { // get data ( (("https:" == document.location.protocol)?"https://' + piwikHost + '":"http://' + piwikHost + '") ) - var idSite = $('#image-tracker-website .custom_select_main_link').attr('siteid'), + var idSite = $('#image-tracker-website').find('.custom_select_main_link').attr('siteid'), path = document.location.pathname, piwikURL = ("https:" == document.location.protocol ? "https://" + piwikHost : "http://" + piwikHost) + path.substring(0, path.lastIndexOf('/')) + '/piwik.php', actionName = $('#image-tracker-action-name').val(), @@ -230,7 +230,7 @@ if ($('#image-tracking-goal-check').is(':checked')) { idGoal = $('#image-tracker-goal').val(); if (idGoal) { - revenue = $('#image-tracker-advanced-options .revenue').val(); + revenue = $('#image-tracker-advanced-options').find('.revenue').val(); } } @@ -256,7 +256,7 @@ '; result = result.replace("&", "&", "g"); - $('#image-tracking-link textarea').val(result); + $('#image-tracking-link').find('textarea').val(result); }; // on image link tracker site change, change available goals @@ -328,11 +328,11 @@ }); // initial generation - getSiteData($( - '#js-tracker-website .custom_select_main_link').attr('siteid'), + getSiteData( + $('#js-tracker-website').find('.custom_select_main_link').attr('siteid'), '#js-code-options,#image-tracking-code-options', function () { - var imageTrackerSiteId = $('#image-tracker-website .custom_select_main_link').attr('siteid'); + var imageTrackerSiteId = $('#image-tracker-website').find('.custom_select_main_link').attr('siteid'); resetGoalSelectItems(imageTrackerSiteId, 'image-tracker-goal'); generateJsCode(); diff --git a/plugins/CoreAdminHome/templates/jsTrackingGenerator.tpl b/plugins/CoreAdminHome/templates/jsTrackingGenerator.tpl index b78d88cbf0..b4ba358e83 100644 --- a/plugins/CoreAdminHome/templates/jsTrackingGenerator.tpl +++ b/plugins/CoreAdminHome/templates/jsTrackingGenerator.tpl @@ -1,5 +1,5 @@ {include file="CoreAdminHome/templates/header.tpl"} - +

{'CoreAdminHome_JSTrackingIntro2'|translate} {'CoreAdminHome_JSTrackingIntro3'|translate:'':''}

- {'CoreAdminHome_JSTrackingIntro4'|translate:'':''} + {'CoreAdminHome_JSTrackingIntro4'|translate:'':''}

{'CoreAdminHome_JSTrackingIntro5'|translate:'':''}

@@ -174,7 +174,7 @@
- +

{'CoreAdminHome_ImageTracking'|translate}

diff --git a/plugins/CoreHome/templates/calendar.js b/plugins/CoreHome/templates/calendar.js index e531e375a9..9952ac281b 100644 --- a/plugins/CoreHome/templates/calendar.js +++ b/plugins/CoreHome/templates/calendar.js @@ -289,8 +289,8 @@ }; var togglePeriodPickers = function (showSingle) { - $('#periodString .period-date').toggle(showSingle); - $('#periodString .period-range').toggle(!showSingle); + $('#periodString').find('.period-date').toggle(showSingle); + $('#periodString').find('.period-range').toggle(!showSingle); $('#calendarRangeApply').toggle(!showSingle); }; @@ -379,13 +379,13 @@ return false; }; - $("#otherPeriods label").on('click', function (e) { + $("#otherPeriods").find("label").on('click', function (e) { var id = $(e.target).attr('for'); changePeriodOnClick($('#' + id)); }); // when non-range period is clicked, change the period & refresh the date picker - $("#otherPeriods input").on('click', function (e) { + $("#otherPeriods").find("input").on('click', function (e) { var request_URL = $(e.target).val(), period = broadcast.getValueFromUrl('period', request_URL), lastPeriod = selectedPeriod; @@ -443,7 +443,7 @@ // reset date/period when opening calendar var firstClick = true; - $('#periodString #date').click(function () { + $('#periodString').find('#date').click(function () { if (!firstClick) { datepickerElem.datepicker('setDate', currentDate); $('#period_id_' + piwik.period).click(); @@ -497,7 +497,7 @@ if (!isValidDate(oDateFrom) || !isValidDate(oDateTo) || oDateFrom > oDateTo) { - $('#alert h2').text(_pk_translate('General_InvalidDateRange_js')); + $('#alert').find('h2').text(_pk_translate('General_InvalidDateRange_js')); piwikHelper.modalConfirm('#alert', {}); return false; } diff --git a/plugins/CoreHome/templates/datatable.js b/plugins/CoreHome/templates/datatable.js index 49725bead6..1369b11786 100644 --- a/plugins/CoreHome/templates/datatable.js +++ b/plugins/CoreHome/templates/datatable.js @@ -1366,7 +1366,7 @@ dataTable.prototype = // if this url is also the url of a menu item, better to click that menu item instead of // doing AJAX request var menuItem = null; - $("#root>ul.nav a").each(function () { + $("#root").find(">ul.nav a").each(function () { if ($(this).attr('name') == url) { menuItem = this; return false diff --git a/plugins/CoreHome/templates/date.js b/plugins/CoreHome/templates/date.js index 1c6c5971bd..9e4ca30c72 100644 --- a/plugins/CoreHome/templates/date.js +++ b/plugins/CoreHome/templates/date.js @@ -23,7 +23,7 @@ $(document).ready(function () { } }; - $("#periodString #date") + $("#periodString").find("#date") .hover(function () { $(this).css({ cursor: "pointer"}); }, function () { @@ -32,7 +32,7 @@ $(document).ready(function () { .click(function () { periodWidget.toggle(); if ($("#periodMore").is(":visible")) { - $("#periodMore .ui-state-highlight").removeClass('ui-state-highlight'); + $("#periodMore").find(".ui-state-highlight").removeClass('ui-state-highlight'); } }); diff --git a/plugins/Dashboard/templates/dashboard.js b/plugins/Dashboard/templates/dashboard.js index c1c6996f93..40a3cb04fd 100644 --- a/plugins/Dashboard/templates/dashboard.js +++ b/plugins/Dashboard/templates/dashboard.js @@ -24,7 +24,7 @@ function initDashboard(dashboardId, dashboardLayout) { if (!$('#topBars').length) { $('#dashboardSettings').css({left: 0}); $('#dashboardSettings').after($('#Dashboard')); - $('#Dashboard > ul li a').each(function () {$(this).css({width: this.offestWidth + 30, paddingLeft: 0, paddingRight: 0});}); + $('#Dashboard').find('> ul li a').each(function () {$(this).css({width: this.offestWidth + 30, paddingLeft: 0, paddingRight: 0});}); $('#Dashboard_embeddedIndex_' + dashboardId).addClass('sfHover'); } @@ -36,7 +36,7 @@ function initDashboard(dashboardId, dashboardLayout) { $('#removeDashboardLink').show(); } // fix position - $('#dashboardSettings .widgetpreview-widgetlist').css('paddingTop', $('#dashboardSettings .widgetpreview-categorylist').parent('li').position().top); + $('#dashboardSettings').find('.widgetpreview-widgetlist').css('paddingTop', $('#dashboardSettings').find('.widgetpreview-categorylist').parent('li').position().top); }); $('body').on('mouseup', function (e) { if (!$(e.target).parents('#dashboardSettings').length && !$(e.target).is('#dashboardSettings')) { @@ -56,7 +56,7 @@ function initDashboard(dashboardId, dashboardLayout) { $('#dashboardSettings').widgetPreview({ isWidgetAvailable: function (widgetUniqueId) { - return !$('#dashboardWidgetsArea [widgetId=' + widgetUniqueId + ']').length; + return !$('#dashboardWidgetsArea').find('[widgetId=' + widgetUniqueId + ']').length; }, onSelect: function (widgetUniqueId) { var widget = widgetsHelper.getWidgetObjectFromUniqueId(widgetUniqueId); @@ -66,7 +66,7 @@ function initDashboard(dashboardId, dashboardLayout) { resetOnSelect: true }); - $('#columnPreview>div').each(function () { + $('#columnPreview').find('>div').each(function () { var width = []; $('div', this).each(function () { width.push(this.className.replace(/width-/, '')); @@ -74,8 +74,8 @@ function initDashboard(dashboardId, dashboardLayout) { $(this).attr('layout', width.join('-')); }); - $('#columnPreview>div').on('click', function () { - $('#columnPreview>div').removeClass('choosen'); + $('#columnPreview').find('>div').on('click', function () { + $('#columnPreview').find('>div').removeClass('choosen'); $(this).addClass('choosen'); }); @@ -122,15 +122,15 @@ function renameDashboard() { } function removeDashboard() { - $('#removeDashboardConfirm h2 span').html($('#dashboardWidgetsArea').dashboard('getDashboardName')); + $('#removeDashboardConfirm').find('h2 span').html($('#dashboardWidgetsArea').dashboard('getDashboardName')); piwikHelper.modalConfirm('#removeDashboardConfirm', {yes: function () { $('#dashboardWidgetsArea').dashboard('removeDashboard'); }}); } function showChangeDashboardLayoutDialog() { - $('#columnPreview>div').removeClass('choosen'); - $('#columnPreview>div[layout=' + $('#dashboardWidgetsArea').dashboard('getColumnLayout') + ']').addClass('choosen'); + $('#columnPreview').find('>div').removeClass('choosen'); + $('#columnPreview').find('>div[layout=' + $('#dashboardWidgetsArea').dashboard('getColumnLayout') + ']').addClass('choosen'); piwikHelper.modalConfirm('#changeDashboardLayout', {yes: function () { - $('#dashboardWidgetsArea').dashboard('setColumnLayout', $('#changeDashboardLayout .choosen').attr('layout')); + $('#dashboardWidgetsArea').dashboard('setColumnLayout', $('#changeDashboardLayout').find('.choosen').attr('layout')); }}); } @@ -189,7 +189,7 @@ function copyDashboardToUser() { }, 'post'); ajaxRequest.setCallback( function (id) { - $('#alert h2').text(_pk_translate('Dashboard_DashboardCopied_js')); + $('#alert').find('h2').text(_pk_translate('Dashboard_DashboardCopied_js')); piwikHelper.modalConfirm('#alert', {}); } ); diff --git a/plugins/Dashboard/templates/dashboardObject.js b/plugins/Dashboard/templates/dashboardObject.js index 80d74f3e4d..8ea5037473 100644 --- a/plugins/Dashboard/templates/dashboardObject.js +++ b/plugins/Dashboard/templates/dashboardObject.js @@ -434,7 +434,7 @@ function buildMenu() { var success = function (dashboards) { - var dashboardMenuList = $('#Dashboard > ul'); + var dashboardMenuList = $('#Dashboard').find('> ul'); dashboardMenuList.empty(); if (dashboards.length > 1) { dashboardMenuList.show(); diff --git a/plugins/Feedback/templates/feedback.js b/plugins/Feedback/templates/feedback.js index cbf07b4863..9fa2b1be01 100644 --- a/plugins/Feedback/templates/feedback.js +++ b/plugins/Feedback/templates/feedback.js @@ -10,7 +10,7 @@ $(function () { if (feedback.size()) { var fbDiv = $('
').appendTo('body'); - $('a#topmenu-feedback').click(function () { + feedback.click(function () { if (fbDiv.html() == '') { fbDiv.html('
' + _pk_translate('General_Loading_js') + '
'); } diff --git a/plugins/Feedback/templates/index.tpl b/plugins/Feedback/templates/index.tpl index adff78c214..fb79427a6a 100644 --- a/plugins/Feedback/templates/index.tpl +++ b/plugins/Feedback/templates/index.tpl @@ -14,7 +14,7 @@ }); $('#feedback-form-submit').click(function () { - var feedback = $('#feedback-form form'); + var feedback = $('#feedback-form').find('form'); $('#feedback-form').hide(); $.post(feedback.attr('action'), feedback.serialize(), function (data) { $('#feedback-sent').show().html(data); diff --git a/plugins/Goals/templates/GoalForm.js b/plugins/Goals/templates/GoalForm.js index fa1d0beceb..354e061978 100644 --- a/plugins/Goals/templates/GoalForm.js +++ b/plugins/Goals/templates/GoalForm.js @@ -155,7 +155,7 @@ function bindListGoalEdit() { var goalId = $(this).attr('id'); var goal = piwik.goals[goalId]; - $('#confirm h2').text(sprintf(_pk_translate('Goals_DeleteGoalConfirm_js'), '"' + goal.name + '"')); + $('#confirm').find('h2').text(sprintf(_pk_translate('Goals_DeleteGoalConfirm_js'), '"' + goal.name + '"')); piwikHelper.modalConfirm('#confirm', {yes: function () { ajaxDeleteGoal(goalId); }}); diff --git a/plugins/PDFReports/templates/pdf.js b/plugins/PDFReports/templates/pdf.js index 75e3ff831b..266c403adf 100644 --- a/plugins/PDFReports/templates/pdf.js +++ b/plugins/PDFReports/templates/pdf.js @@ -30,8 +30,8 @@ function formSetEditReport(idReport) { toggleReportType(report.type); $('#report_description').html(report.description); - $('#report_type option[value=' + report.type + ']').prop('selected', 'selected'); - $('#report_period option[value=' + report.period + ']').prop('selected', 'selected'); + $('#report_type').find('option[value=' + report.type + ']').prop('selected', 'selected'); + $('#report_period').find('option[value=' + report.period + ']').prop('selected', 'selected'); $('#report_hour').val(report.hour); $('[name=report_format].' + report.type + ' option[value=' + report.format + ']').prop('selected', 'selected'); @@ -61,7 +61,7 @@ function getReportAjaxRequest(idReport, defaultApiMethod) { function toggleReportType(reportType) { resetReportParametersFunctions[reportType](); - $('#report_type option').each(function (index, type) { + $('#report_type').find('option').each(function (index, type) { $('.' + $(type).val()).hide(); }); $('.' + reportType).show(); @@ -74,7 +74,7 @@ function initManagePdf() { var apiParameters = getReportAjaxRequest(idReport, 'PDFReports.updateReport'); apiParameters.idReport = idReport; apiParameters.description = $('#report_description').val(); - apiParameters.reportType = $('#report_type option:selected').val(); + apiParameters.reportType = $('#report_type').find('option:selected').val(); apiParameters.reportFormat = $('[name=report_format].' + apiParameters.reportType + ' option:selected').val(); var reports = []; @@ -89,7 +89,7 @@ function initManagePdf() { var ajaxHandler = new ajaxHelper(); ajaxHandler.addParams(apiParameters, 'POST'); - ajaxHandler.addParams({period: $('#report_period option:selected').val()}, 'GET'); + ajaxHandler.addParams({period: $('#report_period').find('option:selected').val()}, 'GET'); ajaxHandler.addParams({hour: $('#report_hour').val()}, 'GET'); ajaxHandler.redirectOnSuccess(); ajaxHandler.setLoadingElement(); diff --git a/plugins/PDFReports/templates/report_parameters.tpl b/plugins/PDFReports/templates/report_parameters.tpl index 9afe1c409c..00b88a20ad 100644 --- a/plugins/PDFReports/templates/report_parameters.tpl +++ b/plugins/PDFReports/templates/report_parameters.tpl @@ -3,7 +3,7 @@ function updateEvolutionGraphParameterVisibility() {ldelim} var evolutionGraphParameterInput = $('.report_evolution_graph'); var nonApplicableDisplayFormats = ['1', '4']; - $.inArray($('#display_format option:selected').val(), nonApplicableDisplayFormats) != -1 ? + $.inArray($('#display_format').find('option:selected').val(), nonApplicableDisplayFormats) != -1 ? evolutionGraphParameterInput.hide() : evolutionGraphParameterInput.show(); {rdelim } @@ -29,7 +29,7 @@ if (reportParameters == null) return; - $('#display_format option[value=' + reportParameters.displayFormat + ']').prop('selected', 'selected'); + $('#display_format').find('option[value=' + reportParameters.displayFormat + ']').prop('selected', 'selected'); updateEvolutionGraphParameterVisibility(); if (reportParameters.emailMe === true) @@ -54,7 +54,7 @@ var parameters = Object(); - parameters.displayFormat = $('#display_format option:selected').val(); + parameters.displayFormat = $('#display_format').find('option:selected').val(); parameters.emailMe = $('#report_email_me').prop('checked'); parameters.evolutionGraph = $('#report_evolution_graph').prop('checked'); diff --git a/plugins/PrivacyManager/templates/privacySettings.js b/plugins/PrivacyManager/templates/privacySettings.js index 75de9b8caa..d420118fdc 100644 --- a/plugins/PrivacyManager/templates/privacySettings.js +++ b/plugins/PrivacyManager/templates/privacySettings.js @@ -95,10 +95,10 @@ $(document).ready(function () { }); // make sure the DB size estimate is reloaded every time a delete logs/reports setting is changed - $('#formDeleteSettings input[type=text]').each(function () { + $('#formDeleteSettings').find('input[type=text]').each(function () { $(this).change(reloadDbStats); }); - $('#formDeleteSettings input[type=checkbox]').each(function () { + $('#formDeleteSettings').find('input[type=checkbox]').each(function () { $(this).click(reloadDbStats); }); @@ -111,7 +111,7 @@ $(document).ready(function () { // hide all confirmation texts, then show the correct one based on what // type of deletion is enabled. - $('#confirmDeleteSettings>h2').each(function () { + $('#confirmDeleteSettings').find('>h2').each(function () { $(this).hide(); }); @@ -145,7 +145,7 @@ $(document).ready(function () { // if any option has been modified, abort purging and instruct user to save first var modified = false; - $('#formDeleteSettings input').each(function () { + $('#formDeleteSettings').find('input').each(function () { if (this.type === 'checkbox' || this.type === 'radio') { modified |= this.defaultChecked !== this.checked; } else { diff --git a/plugins/SegmentEditor/templates/Segmentation.js b/plugins/SegmentEditor/templates/Segmentation.js index d18dc9ee47..c6bb72080e 100644 --- a/plugins/SegmentEditor/templates/Segmentation.js +++ b/plugins/SegmentEditor/templates/Segmentation.js @@ -840,7 +840,7 @@ Segmentation = (function($) { "name": segmentName, "definition": segmentStr, "enabledAllUsers": user, - "idSite": $('#visible_to_website option:selected').attr('value') + "idSite": $('#visible_to_website').find('option:selected').attr('value') }; // determine if save or update should be performed if(segmentId === ""){ diff --git a/plugins/SitesManager/templates/SitesManager.js b/plugins/SitesManager/templates/SitesManager.js index 4d32b283f3..2f3c777927 100644 --- a/plugins/SitesManager/templates/SitesManager.js +++ b/plugins/SitesManager/templates/SitesManager.js @@ -117,8 +117,8 @@ function SitesManager(_timezones, _currencies, _defaultTimezone, _defaultCurrenc } function sendGlobalSettingsAJAX() { - var timezone = $('#defaultTimezone option:selected').val(); - var currency = $('#defaultCurrency option:selected').val(); + var timezone = $('#defaultTimezone').find('option:selected').val(); + var currency = $('#defaultCurrency').find('option:selected').val(); var excludedIps = $('textarea#globalExcludedIps').val(); excludedIps = piwikHelper.getApiFormatTextarea(excludedIps); var excludedQueryParameters = $('textarea#globalExcludedQueryParameters').val(); @@ -199,7 +199,7 @@ function SitesManager(_timezones, _currencies, _defaultTimezone, _defaultCurrenc var nameToDelete = $(this).parent().parent().find('input#siteName').val() || $(this).parent().parent().find('td#siteName').html(); var idsiteToDelete = $(this).parent().parent().find('#idSite').html(); - $('#confirm h2').text(sprintf(_pk_translate('SitesManager_DeleteConfirm_js'), '"' + nameToDelete + '" (idSite = ' + idsiteToDelete + ')')); + $('#confirm').find('h2').text(sprintf(_pk_translate('SitesManager_DeleteConfirm_js'), '"' + nameToDelete + '" (idSite = ' + idsiteToDelete + ')')); piwikHelper.modalConfirm('#confirm', {yes: function () { sendDeleteSiteAJAX(idsiteToDelete); }}); @@ -213,7 +213,7 @@ function SitesManager(_timezones, _currencies, _defaultTimezone, _defaultCurrenc var idRow = $(this).attr('id'); if (alreadyEdited[idRow] == 1) return; if (siteBeingEdited) { - $('#alert h2').text(sprintf(_pk_translate('SitesManager_OnlyOneSiteAtTime_js'), '"' + $("
").html(siteBeingEditedName).text() + '"')); + $('#alert').find('h2').text(sprintf(_pk_translate('SitesManager_OnlyOneSiteAtTime_js'), '"' + $("
").html(siteBeingEditedName).text() + '"')); piwikHelper.modalConfirm('#alert', {}); return; } diff --git a/plugins/UserCountry/templates/admin.js b/plugins/UserCountry/templates/admin.js index 69857b7294..4b7e191076 100755 --- a/plugins/UserCountry/templates/admin.js +++ b/plugins/UserCountry/templates/admin.js @@ -177,7 +177,7 @@ $(document).ready(function () { // setup the auto-updater var ajaxRequest = new ajaxHelper(); ajaxRequest.addParams({ - period: $('#geoip-update-period-cell>input:checked').val() + period: $('#geoip-update-period-cell').find('>input:checked').val() }, 'get'); ajaxRequest.addParams({ module: 'UserCountry', diff --git a/plugins/UserCountryMap/js/realtime-map.js b/plugins/UserCountryMap/js/realtime-map.js index 431b749089..54d5cdfdc3 100644 --- a/plugins/UserCountryMap/js/realtime-map.js +++ b/plugins/UserCountryMap/js/realtime-map.js @@ -215,7 +215,7 @@ * that corresponds to a visit on the map */ function highlightVisit(r) { - $('#visitsLive li#' + r.idVisit + ' .datetime') + $('#visitsLive').find('li#' + r.idVisit + ' .datetime') .css('background', '#E4CD74'); } @@ -224,7 +224,7 @@ * the visit marker on the map */ function unhighlightVisit(r) { - $('#visitsLive li#' + r.idVisit + ' .datetime') + $('#visitsLive').find('li#' + r.idVisit + ' .datetime') .css({ background: '#E4E2D7' }); } diff --git a/plugins/UsersManager/templates/UsersManager.js b/plugins/UsersManager/templates/UsersManager.js index 0db663d7c2..c24cbf73e6 100644 --- a/plugins/UsersManager/templates/UsersManager.js +++ b/plugins/UsersManager/templates/UsersManager.js @@ -196,7 +196,7 @@ $(document).ready(function () { piwikHelper.hideAjaxError(); var idRow = $(this).attr('id'); var loginToDelete = $(this).parent().parent().find('#userLogin').html(); - $('#confirmUserRemove h2').text(sprintf(_pk_translate('UsersManager_DeleteConfirm_js'), '"' + loginToDelete + '"')); + $('#confirmUserRemove').find('h2').text(sprintf(_pk_translate('UsersManager_DeleteConfirm_js'), '"' + loginToDelete + '"')); piwikHelper.modalConfirm('#confirmUserRemove', {yes: function () { sendDeleteUserAJAX(loginToDelete); }}); } ); diff --git a/plugins/UsersManager/templates/userSettings.js b/plugins/UsersManager/templates/userSettings.js index 0bfdf3d8bb..5708ca7a72 100644 --- a/plugins/UsersManager/templates/userSettings.js +++ b/plugins/UsersManager/templates/userSettings.js @@ -23,7 +23,7 @@ function sendUserSettingsAJAX() { var passwordBis = $('#passwordBis').val(); var defaultReport = $('input[name=defaultReport]:checked').val(); if (defaultReport == 1) { - defaultReport = $('#defaultReportSiteSelector .custom_select_main_link').attr('siteid'); + defaultReport = $('#defaultReportSiteSelector').find('.custom_select_main_link').attr('siteid'); } var postParams = {}; postParams.alias = alias; @@ -52,7 +52,7 @@ function sendUserSettingsAJAX() { function sendAnonymousUserSettingsAJAX() { var anonymousDefaultReport = $('input[name=anonymousDefaultReport]:checked').val(); if (anonymousDefaultReport == 1) { - anonymousDefaultReport = $('#anonymousDefaultReportWebsite option:selected').val(); + anonymousDefaultReport = $('#anonymousDefaultReportWebsite').find('option:selected').val(); } var anonymousDefaultDate = $('input[name=anonymousDefaultDate]:checked').val(); @@ -81,7 +81,7 @@ $(document).ready(function () { } }); - $('#userSettingsTable input').keypress(function (e) { + $('#userSettingsTable').find('input').keypress(function (e) { var key = e.keyCode || e.which; if (key == 13) { $('#userSettingsSubmit').click(); -- cgit v1.2.3 From fa4b7c4aad5f6e715f922f3528560139ecf462ef Mon Sep 17 00:00:00 2001 From: mattab Date: Sat, 27 Apr 2013 02:47:27 +1200 Subject: Refs #3913 adding XML files so the build passes, but tests output is empty for now. Also moving to private unused methods (lets delete any unused method) --- plugins/Dashboard/API.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'plugins') diff --git a/plugins/Dashboard/API.php b/plugins/Dashboard/API.php index 14a058b2aa..7c5df1e858 100644 --- a/plugins/Dashboard/API.php +++ b/plugins/Dashboard/API.php @@ -46,7 +46,7 @@ class Piwik_Dashboard_API * * @return array[] */ - public function getDashboards() + private function getDashboards() { $dashboards = $this->getUserDashboards(); @@ -62,7 +62,7 @@ class Piwik_Dashboard_API * * @return array[] */ - public function getDefaultDashboard() + private function getDefaultDashboard() { $defaultLayout = $this->dashboard->getDefaultLayout(); $defaultLayout = $this->dashboard->decodeLayout($defaultLayout); -- cgit v1.2.3 From 096f8904eba39dd35e29dacea6f103576580f807 Mon Sep 17 00:00:00 2001 From: mattab Date: Tue, 7 May 2013 17:24:04 +1200 Subject: Fixing build refs #3913 Fixes API for dashboards + disabling Dashboard API tests for now --- plugins/Dashboard/API.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'plugins') diff --git a/plugins/Dashboard/API.php b/plugins/Dashboard/API.php index 7c5df1e858..59ae8b9ae1 100644 --- a/plugins/Dashboard/API.php +++ b/plugins/Dashboard/API.php @@ -46,7 +46,7 @@ class Piwik_Dashboard_API * * @return array[] */ - private function getDashboards() + public function getDashboards() { $dashboards = $this->getUserDashboards(); @@ -79,7 +79,7 @@ class Piwik_Dashboard_API * * @return array[] */ - public function getUserDashboards() + private function getUserDashboards() { $userLogin = Piwik::getCurrentUserLogin(); $userDashboards = $this->dashboard->getAllDashboards($userLogin); -- cgit v1.2.3 From c76b1e77a37ae930ea9cc8bc5b01eed737556d1c Mon Sep 17 00:00:00 2001 From: mattab Date: Tue, 7 May 2013 17:45:34 +1200 Subject: missing files for build --- plugins/SegmentEditor/API.php | 48 ++++++++++++++++----------------- plugins/SegmentEditor/SegmentEditor.php | 4 +-- 2 files changed, 25 insertions(+), 27 deletions(-) (limited to 'plugins') diff --git a/plugins/SegmentEditor/API.php b/plugins/SegmentEditor/API.php index 19083f8e42..f0d699005b 100644 --- a/plugins/SegmentEditor/API.php +++ b/plugins/SegmentEditor/API.php @@ -153,25 +153,6 @@ class Piwik_SegmentEditor_API return $db->lastInsertId(); } - public function getSegmentsToAutoArchive($idSite = false) - { - Piwik::checkUserIsSuperUser(); - - $sqlRestrictSite = ''; - $bind = array(); - if ($idSite) { - $sqlRestrictSite = 'OR enable_only_idsite = ?'; - $bind = array($idSite); - } - $segments = Zend_Registry::get('db')->fetchAll("SELECT * - FROM " . Piwik_Common::prefixTable("segment") . " - WHERE auto_archive = 1 - AND deleted = 0 - AND (enable_only_idsite IS NULL " . $sqlRestrictSite . " )", $bind - ); - return $segments; - } - public function get($idSegment) { Piwik::checkUserHasSomeViewAccess(); @@ -188,7 +169,8 @@ class Piwik_SegmentEditor_API try { Piwik::checkUserIsSuperUserOrTheUser($segment['login']); } catch (Exception $e) { - throw new Exception("You can only manage your own segments (unless you are Super User)."); + throw new Exception("You can only edit the custom segments you have created yourself. This segment was created and 'shared with you' by the Super User. " . + "To modify this segment, you can create a new one, by clicking on 'Add new segment' where you can then further customize the segment's definition."); } if ($segment['deleted']) { @@ -211,17 +193,33 @@ class Piwik_SegmentEditor_API return $segment; } - public function getAll($idSite) + public function getAll($idSite = false, $returnAutoArchived = false) { - Piwik::checkUserHasViewAccess($idSite); + if(!empty($idSite) ) { + Piwik::checkUserHasViewAccess($idSite); + } else { + Piwik::checkUserHasSomeViewAccess(); + } + + $extraWhere = ''; + if($returnAutoArchived) { + $extraWhere = ' AND auto_archive = 1'; + } + + $whereIdSite = ''; + $bind = array(Piwik::getCurrentUserLogin()); + if(!empty($idSite)) { + $whereIdSite = 'enable_only_idsite = ? OR '; + $bind = array($idSite, Piwik::getCurrentUserLogin()); + } $sql = "SELECT * " . - " FROM " . Piwik_Common::prefixTable("segment") . - " WHERE (enable_only_idsite = ? OR enable_only_idsite IS NULL) + " FROM " . Piwik_Common::prefixTable("segment") . + " WHERE ($whereIdSite enable_only_idsite IS NULL) AND (enable_all_users = 1 OR login = ?) AND deleted = 0 + $extraWhere ORDER BY name ASC"; - $bind = array($idSite, Piwik::getCurrentUserLogin()); $segments = Zend_Registry::get('db')->fetchAll($sql, $bind); return $segments; diff --git a/plugins/SegmentEditor/SegmentEditor.php b/plugins/SegmentEditor/SegmentEditor.php index 0087f2e614..7c587c4a18 100644 --- a/plugins/SegmentEditor/SegmentEditor.php +++ b/plugins/SegmentEditor/SegmentEditor.php @@ -45,7 +45,7 @@ class Piwik_SegmentEditor extends Piwik_Plugin public function getKnownSegmentsToArchiveAllSites($notification) { $segments =& $notification->getNotificationObject(); - $segmentToAutoArchive = Piwik_SegmentEditor_API::getInstance()->getSegmentsToAutoArchive(); + $segmentToAutoArchive = Piwik_SegmentEditor_API::getInstance()->getAll($idSite = false, $returnAutoArchived = true); if (!empty($segmentToAutoArchive)) { $segments = array_merge($segments, $segmentToAutoArchive); } @@ -55,7 +55,7 @@ class Piwik_SegmentEditor extends Piwik_Plugin { $segments =& $notification->getNotificationObject(); $idSite = $notification->getNotificationInfo(); - $segmentToAutoArchive = Piwik_SegmentEditor_API::getInstance()->getSegmentsToAutoArchive($idSite); + $segmentToAutoArchive = Piwik_SegmentEditor_API::getInstance()->getAll($idSite, $returnAutoArchived = true); foreach ($segmentToAutoArchive as $segmentInfo) { $segments[] = $segmentInfo['definition']; -- cgit v1.2.3 From 47cda36e60359e8a3de01eaeb86b4edbac315532 Mon Sep 17 00:00:00 2001 From: mattab Date: Tue, 7 May 2013 18:20:49 +1200 Subject: fixes #3926 thanks for the suggestion, fixing Piwik core to allow several translations whether the period is used in the sentence or standalone --- plugins/PDFReports/PDFReports.php | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) (limited to 'plugins') diff --git a/plugins/PDFReports/PDFReports.php b/plugins/PDFReports/PDFReports.php index 1533a70192..a6f0b1d572 100644 --- a/plugins/PDFReports/PDFReports.php +++ b/plugins/PDFReports/PDFReports.php @@ -310,7 +310,7 @@ class Piwik_PDFReports extends Piwik_Plugin $filename = $notificationInfo[Piwik_PDFReports_API::FILENAME_KEY]; $additionalFiles = $notificationInfo[Piwik_PDFReports_API::ADDITIONAL_FILES_KEY]; - $periods = self::getPeriodToFrequency(); + $periods = self::getPeriodToFrequencyAsAdjective(); $message = Piwik_Translate('PDFReports_EmailHello'); $subject = Piwik_Translate('General_Report') . ' ' . $reportTitle . " - " . $prettyDate; @@ -606,6 +606,7 @@ class Piwik_PDFReports extends Piwik_Plugin } /** + * Used in the Report Listing * @ignore */ static public function getPeriodToFrequency() @@ -617,4 +618,18 @@ class Piwik_PDFReports extends Piwik_Plugin Piwik_ScheduledTime::PERIOD_MONTH => Piwik_Translate('General_Monthly'), ); } + + /** + * Used in the Report's email content, ie "monthly report" + * @ignore + */ + static public function getPeriodToFrequencyAsAdjective() + { + return array( + Piwik_ScheduledTime::PERIOD_DAY => Piwik_Translate('General_DailyReport'), + Piwik_ScheduledTime::PERIOD_WEEK => Piwik_Translate('General_WeeklyReport'), + Piwik_ScheduledTime::PERIOD_MONTH => Piwik_Translate('General_MonthlyReport'), + Piwik_ScheduledTime::PERIOD_YEAR => Piwik_Translate('General_YearlyReport'), + ); + } } -- cgit v1.2.3 From 9302709b4beccdd1d94b58e0791a8373b89d355e Mon Sep 17 00:00:00 2001 From: mattab Date: Fri, 10 May 2013 20:17:14 +1200 Subject: * fixing error/bug in Transition * Multi-Row evolution + Limit selector "10/50/100/500" now works as expected --- plugins/CoreHome/DataTableRowAction/MultiRowEvolution.php | 3 ++- plugins/Transitions/API.php | 5 +---- 2 files changed, 3 insertions(+), 5 deletions(-) (limited to 'plugins') diff --git a/plugins/CoreHome/DataTableRowAction/MultiRowEvolution.php b/plugins/CoreHome/DataTableRowAction/MultiRowEvolution.php index 4c4a964c2e..1e761a0aae 100644 --- a/plugins/CoreHome/DataTableRowAction/MultiRowEvolution.php +++ b/plugins/CoreHome/DataTableRowAction/MultiRowEvolution.php @@ -74,12 +74,13 @@ class Piwik_CoreHome_DataTableRowAction_MultiRowEvolution /** * Generic method to get an evolution graph or a sparkline for the row evolution popover. * Do as much as possible from outside the controller. + * * @return Piwik_ViewDataTable */ public function getRowEvolutionGraph() { $view = parent::getRowEvolutionGraph(); - $view->setCustomParameter(self::IS_MULTI_EVOLUTION_PARAM, true); + $view->setCustomParameter(self::IS_MULTI_EVOLUTION_PARAM, 1); // set in JS return $view; } } diff --git a/plugins/Transitions/API.php b/plugins/Transitions/API.php index 4457d71046..6712045238 100644 --- a/plugins/Transitions/API.php +++ b/plugins/Transitions/API.php @@ -139,7 +139,7 @@ class Piwik_Transitions_API if ($id < 0) { // an example where this is needed is urls containing < or > $actionName = $originalActionName; - $id = $actionsPlugin->getIdActionFromSegment($actionName, 'idaction_url', Piwik_SegmentExpression::MATCH_EQUALs, 'pageUrl'); + $id = $actionsPlugin->getIdActionFromSegment($actionName, 'idaction_url', Piwik_SegmentExpression::MATCH_EQUAL, 'pageUrl'); } return $id; @@ -289,9 +289,6 @@ class Piwik_Transitions_API } } - /** - * @ignore - */ public function getTranslations() { $controller = new Piwik_Transitions_Controller(); -- cgit v1.2.3 From 028342ad359aa86515c7d404c76b780ab3addcc4 Mon Sep 17 00:00:00 2001 From: mattab Date: Fri, 10 May 2013 20:19:05 +1200 Subject: Refs #2135 * Fixing some encoding issues and many small bugs * When user is anonymous, show message inviting user to login to try the feature --- plugins/API/API.php | 7 +- .../CoreHome/DataTableRowAction/RowEvolution.php | 7 +- plugins/CoreHome/templates/broadcast.js | 43 ++++++---- plugins/SegmentEditor/API.php | 11 ++- plugins/SegmentEditor/Controller.php | 5 +- plugins/SegmentEditor/templates/Segmentation.css | 5 +- plugins/SegmentEditor/templates/Segmentation.js | 91 +++++++++++++--------- plugins/SegmentEditor/templates/selector.tpl | 11 ++- 8 files changed, 116 insertions(+), 64 deletions(-) (limited to 'plugins') diff --git a/plugins/API/API.php b/plugins/API/API.php index c8a92f5ca0..e9d3511f19 100644 --- a/plugins/API/API.php +++ b/plugins/API/API.php @@ -1161,14 +1161,11 @@ class Piwik_API_API throw new Exception("Row evolutions can not be processed with this combination of \'date\' and \'period\' parameters."); } - // this is needed because Piwik_API_Proxy uses Piwik_Common::getRequestVar which in turn - // uses Piwik_Common::sanitizeInputValue. This causes the > that separates recursive labels - // to become > and we need to undo that here. - $label = Piwik_Common::unsanitizeInputValue($label); - + $label = Piwik_API_ResponseBuilder::unsanitizeLabelParameter($label); if ($label) { $labels = explode(',', $label); $labels = array_unique($labels); + $labels = array_map('urldecode', $labels); } else { $labels = array(); } diff --git a/plugins/CoreHome/DataTableRowAction/RowEvolution.php b/plugins/CoreHome/DataTableRowAction/RowEvolution.php index 8561d8734a..5df1ce3e16 100644 --- a/plugins/CoreHome/DataTableRowAction/RowEvolution.php +++ b/plugins/CoreHome/DataTableRowAction/RowEvolution.php @@ -74,8 +74,9 @@ class Piwik_CoreHome_DataTableRowAction_RowEvolution $this->apiMethod = Piwik_Common::getRequestVar('apiMethod', '', 'string'); if (empty($this->apiMethod)) throw new Exception("Parameter apiMethod not set."); - $this->label = Piwik_Common::getRequestVar('label', '', 'string'); - $this->label = Piwik_Common::unsanitizeInputValue($this->label); + $this->label = Piwik_API_ResponseBuilder::getLabelFromRequest($_GET); + $this->label = $this->label[0]; + if ($this->label === '') throw new Exception("Parameter label not set."); $this->period = Piwik_Common::getRequestVar('period', '', 'string'); @@ -132,7 +133,7 @@ class Piwik_CoreHome_DataTableRowAction_RowEvolution $parameters = array( 'method' => 'API.getRowEvolution', - 'label' => urlencode($this->label), + 'label' => $this->label, 'apiModule' => $apiModule, 'apiAction' => $apiAction, 'idSite' => $this->idSite, diff --git a/plugins/CoreHome/templates/broadcast.js b/plugins/CoreHome/templates/broadcast.js index 0301425875..31c3fb6c29 100644 --- a/plugins/CoreHome/templates/broadcast.js +++ b/plugins/CoreHome/templates/broadcast.js @@ -307,10 +307,13 @@ var broadcast = { if (paramValue == '') { newParamValue = ''; } + var getQuotedRegex = function(str) { + return (str+'').replace(/([.?*+^$[\]\\(){}|-])/g, "\\$1"); + }; + if (valFromUrl != '') { // replacing current param=value to newParamValue; - valFromUrl = valFromUrl.replace(/\$/g, '\\$'); - valFromUrl = valFromUrl.replace(/\./g, '\\.'); + valFromUrl = getQuotedRegex(valFromUrl); var regToBeReplace = new RegExp(paramName + '=' + valFromUrl, 'ig'); if (newParamValue == '') { // if new value is empty remove leading &, aswell @@ -459,7 +462,7 @@ var broadcast = { hashStr = url.substring(url.indexOf("#"), url.length); } else { - hashStr = decodeURIComponent(location.hash); + hashStr = (location.hash); } return hashStr; @@ -485,26 +488,35 @@ var broadcast = { }, /** - * Returns all key-value pairs in query string of url. - * - * @param {string} url url to check. if undefined, null or empty, current url is used. - * @return {object} key value pair describing query string parameters + * Extracts from a query strings, the request array + * @param queryString + * @returns {object} */ - getValuesFromUrl: function (url) { - var searchString = this._removeHashFromUrl(url).split('?')[1] || '', - pairs = searchString.split('&'); - + extractKeyValuePairsFromQueryString: function (queryString) { + var pairs = queryString.split('&'); var result = {}; for (var i = 0; i != pairs.length; ++i) { // attn: split with regex has bugs in several browsers such as IE 8 // so we need to split, use the first part as key and rejoin the rest var pair = pairs[i].split('='); - var key = pair.shift(); + var key = pair.shift(); result[key] = pair.join('='); } return result; }, + /** + * Returns all key-value pairs in query string of url. + * + * @param {string} url url to check. if undefined, null or empty, current url is used. + * @return {object} key value pair describing query string parameters + */ + getValuesFromUrl: function (url) { + var searchString = this._removeHashFromUrl(url).split('?')[1] || ''; + return this.extractKeyValuePairsFromQueryString(searchString); + }, + + /** * help to get param value for any given url string with provided param name * if no url is provided, it will get param from current address. @@ -558,9 +570,12 @@ var broadcast = { endStr = url.length; } var value = url.substring(startStr + param.length + 1, endStr); - // sanitize values - value = value.replace(/[^_%\+\-\<\>!@\$\.=,;0-9a-zA-Z]/gi, ''); + // we sanitize values to add a protection layer against XSS + // &segment= value is not sanitized, since segments are designed to accept any user input + if(param != 'segment') { + value = value.replace(/[^_%~\*\+\-\<\>!@\$\.()=,;0-9a-zA-Z]/gi, ''); + } return value; } else { return ''; diff --git a/plugins/SegmentEditor/API.php b/plugins/SegmentEditor/API.php index f0d699005b..ad6ab062f8 100644 --- a/plugins/SegmentEditor/API.php +++ b/plugins/SegmentEditor/API.php @@ -31,12 +31,19 @@ class Piwik_SegmentEditor_API protected function checkSegmentValue($definition, $idSite) { + // unsanitize so we don't record the HTML entitied segment + $definition = Piwik_Common::unsanitizeInputValue($definition); + $definition = str_replace("#", '%23', $definition); // hash delimiter + $definition = str_replace("'", '%27', $definition); // not encoded in JS + $definition = str_replace("&", '%26', $definition); + try { $segment = new Piwik_Segment($definition, $idSite); $segment->getHash(); } catch (Exception $e) { throw new Exception("The specified segment is invalid: " . $e->getMessage()); } + return $definition; } protected function checkSegmentName($name) @@ -106,7 +113,7 @@ class Piwik_SegmentEditor_API { $this->checkIdSite($idSite); $this->checkSegmentName($name); - $this->checkSegmentValue($definition, $idSite); + $definition = $this->checkSegmentValue($definition, $idSite); $enabledAllUsers = $this->checkEnabledAllUsers($enabledAllUsers); $autoArchive = $this->checkAutoArchive($autoArchive, $idSite); @@ -134,7 +141,7 @@ class Piwik_SegmentEditor_API Piwik::checkUserIsNotAnonymous(); $this->checkIdSite($idSite); $this->checkSegmentName($name); - $this->checkSegmentValue($definition, $idSite); + $definition = $this->checkSegmentValue($definition, $idSite); $enabledAllUsers = $this->checkEnabledAllUsers($enabledAllUsers); $autoArchive = $this->checkAutoArchive($autoArchive, $idSite); diff --git a/plugins/SegmentEditor/Controller.php b/plugins/SegmentEditor/Controller.php index 848171044f..3693b14f76 100644 --- a/plugins/SegmentEditor/Controller.php +++ b/plugins/SegmentEditor/Controller.php @@ -34,9 +34,12 @@ class Piwik_SegmentEditor_Controller extends Piwik_Controller $view->segmentsByCategory = $segmentsByCategory; - $savedSegments = Piwik_SegmentEditor_API::getInstance()->getAll($idSite); + foreach($savedSegments as &$savedSegment) { + $savedSegment['definition'] = str_replace( ''', "'", $savedSegment['definition']); + } $view->savedSegmentsJson = Piwik_Common::json_encode($savedSegments); + $view->authorizedToCreateSegments = !Piwik::isUserIsAnonymous(); $out = $view->render(); echo $out; diff --git a/plugins/SegmentEditor/templates/Segmentation.css b/plugins/SegmentEditor/templates/Segmentation.css index 0f40b15474..1767c4ac1f 100644 --- a/plugins/SegmentEditor/templates/Segmentation.css +++ b/plugins/SegmentEditor/templates/Segmentation.css @@ -371,7 +371,7 @@ div.scrollable { z-index: 2; background: #f7f7f7; border: 1px solid #e4e5e4; - padding: 5px 10px 6px 5px; + padding: 5px 10px 6px 10px; border-radius: 4px; -moz-border-radius: 4px; -webkit-border-radius: 4px; @@ -387,7 +387,6 @@ div.scrollable { } .segmentationContainer .submenu { font-size: 13px; - font-weight: bold; min-width: 180px; } .segmentationContainer .submenu ul { @@ -402,7 +401,7 @@ div.scrollable { padding-top: 10px; } .segmentationContainer .submenu ul li { - padding: 2px 0px 1px 10px; + padding: 2px 0px 1px 6px; margin: 3px 0 0 0; cursor: pointer; } diff --git a/plugins/SegmentEditor/templates/Segmentation.js b/plugins/SegmentEditor/templates/Segmentation.js index c6bb72080e..eb8379efe9 100644 --- a/plugins/SegmentEditor/templates/Segmentation.js +++ b/plugins/SegmentEditor/templates/Segmentation.js @@ -42,7 +42,10 @@ Segmentation = (function($) { segmentation.prototype.getSegment = function(){ var self = this; - return self.currentSegmentStr; + if($.browser.mozilla) { + return self.currentSegmentStr; + } + return decodeURIComponent(self.currentSegmentStr); } var setSegment = function(segmentStr){ @@ -51,7 +54,7 @@ Segmentation = (function($) { segmentation.prototype.shortenSegmentName = function(name, length){ - if(typeof length === "undefined") length = 30; + if(typeof length === "undefined") length = 26; if(typeof name === "undefined") name = ""; var i; @@ -73,24 +76,22 @@ Segmentation = (function($) { var markCurrentSegment = function(){ var current = self.getSegment(); -// window.setTimeout(function(){ - var segmentationTitle = $(self.content).find(".segmentationTitle"); - if( current != "") - { - var foundItems = $(self.content).find('div.segmentList > ul > li[data-definition="'+current+'"]'); - if( foundItems.length > 0) - { - var name = $(foundItems).first().find("span.segname").text(); - segmentationTitle.html(""+name+""); - } - else{ - segmentationTitle.html("Custom Segment"); - } - } - else { - $(self.content).find(".segmentationTitle").text("All visits"); + + var segmentationTitle = $(self.content).find(".segmentationTitle"); + if( current != "") + { + var selector = 'div.segmentList ul li[data-definition="'+current+'"]'; + var foundItems = $(selector); + if( foundItems.length > 0) { + var name = $(foundItems).first().find("span.segname").text(); + segmentationTitle.html(""+name+""); + } else { + segmentationTitle.html("Custom Segment"); } -// }, 20); + } + else { + $(self.content).find(".segmentationTitle").text("All visits"); + } } var getAndDiv = function(){ @@ -185,17 +186,17 @@ Segmentation = (function($) { var segment, injClass; var listHtml = '
  • All Visits (default)
  • '; if(self.segmentList.length > 0) { for(var key in self.segmentList) { segment = self.segmentList[key]; injClass = ""; - if( segment.definition == self.currentSegmentsGlobal){ + if( segment.definition == self.currentSegmentStr){ injClass = 'class="segmentSelected"'; } - listHtml += '
  • ' + self.shortenSegmentName(segment.name)+''; if(self.segmentAccess == "write") { @@ -224,12 +225,12 @@ Segmentation = (function($) { //$("body").append(html); var segmentsDropdown = $(html).find("#available_segments_select"); var segment, newOption; - newOption = ''; + newOption = ''; segmentsDropdown.append(newOption); for(var key in self.segmentList) { segment = self.segmentList[key]; - newOption = ''; + newOption = ''; segmentsDropdown.append(newOption); } $(html).find(".segment-content > h3").after(getInitialStateRowsHtml()).show(); @@ -274,7 +275,7 @@ Segmentation = (function($) { if( index != -1){ if(index < minPos){ minPos = index; - if(match == ">" || match == "<"){ + if(match.length == 1){ singleChar = true; } } @@ -301,6 +302,10 @@ Segmentation = (function($) { newMetric.value = ""; } } + + // the segment values are URL encoded to prevent ",;<>@= etc. from being misinterpreted + newMetric.value = decodeURIComponent(newMetric.value); + return newMetric; } @@ -363,7 +368,7 @@ Segmentation = (function($) { var target = $(this).parent("li"); var segment = {}; segment.idsegment = target.attr("data-idsegment"); - segment.definition = target.attr("data-definition"); + segment.definition = target.data("definition"); segment.name = target.attr("title"); openEditForm(segment); e.stopPropagation(); @@ -374,9 +379,9 @@ Segmentation = (function($) { if($(e.currentTarget).hasClass("grayed") !== true){ var segment = {}; segment.idsegment = $(this).attr("data-idsegment"); - segment.definition = $(this).attr("data-definition"); + segment.definition = $(this).data("definition"); segment.name = $(this).attr("title"); - self.segmentSelectMethod(segment); + self.segmentSelectMethod( segment.definition ); setSegment(segment.definition); markCurrentSegment(); } @@ -518,7 +523,7 @@ Segmentation = (function($) { var segment = {}; segment.idsegment = option.attr("data-idsegment"); segment.name = option.attr("title"); - segment.definition = option.attr("data-definition"); + segment.definition = option.data("definition"); openEditForm(segment); }); @@ -940,12 +945,24 @@ $(document).ready( function(){ return; } - var changeSegment = function(params){ + var changeSegment = function(segmentDefinition){ $('#segmentEditorPanel a.close').click(); + segmentDefinition = cleanupSegmentDefinition(segmentDefinition); + +// if($.browser.mozilla ) { + segmentDefinition = encodeURIComponent(segmentDefinition); +// } +// alert('new segment to reload='+segmentDefinition); - return broadcast.propagateNewPage('segment=' + params.definition, true, true); + return broadcast.propagateNewPage('segment=' + segmentDefinition, true); }; + var cleanupSegmentDefinition = function(definition) { + definition = definition.replace("'", "%29"); + definition = definition.replace("&", "%26"); + return definition; + } + var addSegment = function(params){ var ajaxHandler = new ajaxHelper(); ajaxHandler.setLoadingElement(); @@ -954,13 +971,15 @@ $(document).ready( function(){ "format": 'json', "method": 'SegmentEditor.add' }); + params.definition = cleanupSegmentDefinition(params.definition); + ajaxHandler.addParams(params, 'GET'); ajaxHandler.useCallbackInCaseOfError(); ajaxHandler.setCallback(function (response) { if (response && response.result == 'error') { alert(response.message); } else { - changeSegment(params); + changeSegment(params.definition); } }); ajaxHandler.send(true); @@ -974,13 +993,15 @@ $(document).ready( function(){ "format": 'json', "method": 'SegmentEditor.update' }); + params.definition = cleanupSegmentDefinition(params.definition); + ajaxHandler.addParams(params, 'GET'); ajaxHandler.useCallbackInCaseOfError(); ajaxHandler.setCallback(function (response) { if (response && response.result == 'error') { alert(response.message); } else { - changeSegment(params); + changeSegment(params.definition); } }); ajaxHandler.send(true); @@ -1006,6 +1027,7 @@ $(document).ready( function(){ console.log(segmentStr); } + var segmentFromHash = broadcast.getParamValue('segment', location.hash); var segmentationFtw = new Segmentation({ "targetId" : "segmentList", "segmentAccess" : "write", @@ -1015,8 +1037,7 @@ $(document).ready( function(){ "deleteMethod": deleteSegment, "segmentSelectMethod": changeSegment, "testSegmentMethod": testSegment, - "currentSegmentStr": broadcast.getValueFromHash('segment'), - "currentSegmentsGlobal": broadcast.getValueFromHash('segment') + "currentSegmentStr": segmentFromHash }); $('body').on('mouseup',function(e){ diff --git a/plugins/SegmentEditor/templates/selector.tpl b/plugins/SegmentEditor/templates/selector.tpl index 2fb81cde55..8c0206c36b 100644 --- a/plugins/SegmentEditor/templates/selector.tpl +++ b/plugins/SegmentEditor/templates/selector.tpl @@ -1,8 +1,9 @@ @@ -131,11 +134,12 @@
    -

    Are you sure you want to delete this segment?

    +

    {'SegmentEditor_AreYouSureDeleteSegment'|translate}

    diff --git a/plugins/UserSettings/UserSettings.php b/plugins/UserSettings/UserSettings.php index 90be882806..a9e458536b 100644 --- a/plugins/UserSettings/UserSettings.php +++ b/plugins/UserSettings/UserSettings.php @@ -232,7 +232,7 @@ class Piwik_UserSettings extends Piwik_Plugin if (empty($segment)) continue; $segments[] = array( 'type' => 'dimension', - 'category' => 'Visit', + 'category' => Piwik_Translate('General_Visit'), 'name' => $columnName, 'segment' => $segment, 'acceptedValues' => $acceptedValues, diff --git a/plugins/VisitTime/VisitTime.php b/plugins/VisitTime/VisitTime.php index 5b05342bed..5e86570d44 100644 --- a/plugins/VisitTime/VisitTime.php +++ b/plugins/VisitTime/VisitTime.php @@ -114,7 +114,7 @@ class Piwik_VisitTime extends Piwik_Plugin $acceptedValues = "0, 1, 2, 3, ..., 20, 21, 22, 23"; $segments[] = array( 'type' => 'dimension', - 'category' => 'Visit', + 'category' => Piwik_Translate('General_Visit'), 'name' => Piwik_Translate('VisitTime_ColumnServerTime'), 'segment' => 'visitServerHour', 'sqlSegment' => 'HOUR(log_visit.visit_last_action_time)', @@ -122,7 +122,7 @@ class Piwik_VisitTime extends Piwik_Plugin ); $segments[] = array( 'type' => 'dimension', - 'category' => 'Visit', + 'category' => Piwik_Translate('General_Visit'), 'name' => Piwik_Translate('VisitTime_ColumnLocalTime'), 'segment' => 'visitLocalHour', 'sqlSegment' => 'HOUR(log_visit.visitor_localtime)', -- cgit v1.2.3 From 36fc4ca1db9840fe25bd0f6ac6f8e51ac5bd9a06 Mon Sep 17 00:00:00 2001 From: mattab Date: Wed, 15 May 2013 17:03:59 +1200 Subject: Refs #2135 * when changing website in the selector, the segment parameter will be reset (to no segment). --- plugins/CoreHome/templates/autocomplete.js | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) (limited to 'plugins') diff --git a/plugins/CoreHome/templates/autocomplete.js b/plugins/CoreHome/templates/autocomplete.js index 0e5fa3d1fa..1a9a523c21 100644 --- a/plugins/CoreHome/templates/autocomplete.js +++ b/plugins/CoreHome/templates/autocomplete.js @@ -14,7 +14,7 @@ function switchSite(id, name, showAjaxLoading, idCanBeAll) { $('.sites_autocomplete input').val(id); $('.custom_select_main_link').text(name); $('.custom_select_main_link').addClass('custom_select_loading'); - broadcast.propagateNewPage('idSite=' + id, showAjaxLoading); + broadcast.propagateNewPage('segment=&idSite=' + id, showAjaxLoading); } return false; } @@ -29,6 +29,15 @@ $(function () { // sets up every un-inited site selector widget piwik.initSiteSelectors = function () { + function getUrlForWebsiteId(idSite) { + var idSiteParam = 'idSite=' + idSite; + var newParameters = 'segment=&' + idSiteParam; + var hash = broadcast.isHashExists() ? broadcast.getHashFromUrl() : "", + linkUrl = piwikHelper.getCurrentQueryStringWithParametersModified(newParameters) + + '#' + piwikHelper.getQueryStringWithParametersModified(hash.substring(1), newParameters); + return linkUrl; + } + $('.sites_autocomplete').each(function () { var selector = $(this); @@ -117,11 +126,8 @@ $(function () { } }).data("ui-autocomplete")._renderItem = function (ul, item) { $(ul).addClass('siteSelect'); - - var idSiteParam = 'idSite=' + item.id, - hash = broadcast.isHashExists() ? broadcast.getHashFromUrl().replace(/idSite=[0-9]+/, idSiteParam) : "", - linkUrl = piwikHelper.getCurrentQueryStringWithParametersModified(idSiteParam) + hash, - link = $("").html(item.label).attr('href', linkUrl), + var linkUrl = getUrlForWebsiteId(item.id); + var link = $("").html(item.label).attr('href', linkUrl), listItem = $('
  • '); listItem.data("item.ui-autocomplete", item) @@ -162,12 +168,10 @@ $(function () { $('.custom_select_block', selector).on('mouseenter', function () { $('.custom_select_ul_list li a', selector).each(function () { - var hash = broadcast.getHashFromUrl(); - hash = hash ? hash.replace(/idSite=[0-9]+/, 'idSite=' + $(this).attr('siteid')) : ""; + var idSite = $(this).attr('siteid'); - var queryString = piwikHelper.getCurrentQueryStringWithParametersModified( - 'idSite=' + $(this).attr('siteid')); - $(this).attr('href', queryString + hash); + var linkUrl = getUrlForWebsiteId(idSite); + $(this).attr('href', linkUrl); }); }); -- cgit v1.2.3 From 7c58869c60a2b6b3cdf68dca4d0a4046449942aa Mon Sep 17 00:00:00 2001 From: sgiehl Date: Thu, 16 May 2013 09:11:32 +0200 Subject: refs #2135 always show autocomplete when clicking on the input element --- plugins/SegmentEditor/templates/Segmentation.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'plugins') diff --git a/plugins/SegmentEditor/templates/Segmentation.js b/plugins/SegmentEditor/templates/Segmentation.js index 3c22b47686..c22a4d3949 100644 --- a/plugins/SegmentEditor/templates/Segmentation.js +++ b/plugins/SegmentEditor/templates/Segmentation.js @@ -434,7 +434,9 @@ Segmentation = (function($) { } }); - inputElement.click(function(e){ inputElement.keydown() }); + inputElement.click(function(e){ + inputElement.autocomplete('search', $(inputElement).val()); + }); }); ajaxHandler.send(); } -- cgit v1.2.3 From ed60fae0cb3a151a03070bbe24d022f3e4e01e5c Mon Sep 17 00:00:00 2001 From: Benaka Moorthi Date: Thu, 16 May 2013 18:45:58 -0700 Subject: Make sure excluded user agent textarea displayed when adding a new site to Manage > Websites is only displayed when option to use site specific exclusion criteria is set. --- plugins/SitesManager/templates/SitesManager.js | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) (limited to 'plugins') diff --git a/plugins/SitesManager/templates/SitesManager.js b/plugins/SitesManager/templates/SitesManager.js index 2f3c777927..4ff38d2159 100644 --- a/plugins/SitesManager/templates/SitesManager.js +++ b/plugins/SitesManager/templates/SitesManager.js @@ -157,6 +157,11 @@ function SitesManager(_timezones, _currencies, _defaultTimezone, _defaultCurrenc $('.addRowSite').click(function () { piwikHelper.hideAjaxError(); $('.addRowSite').toggle(); + + var excludedUserAgentCell = ''; + if ($('#exclude-user-agent-header').is(':visible')) { + excludedUserAgentCell = '
    ' + excludedUserAgentsHelp + ''; + } var numberOfRows = $('table#editSites')[0].rows.length; var newRowId = 'rowNew' + numberOfRows; @@ -166,9 +171,9 @@ function SitesManager(_timezones, _currencies, _defaultTimezone, _defaultCurrenc


    ' + submitButtonHtml + '\
    ' + aliasUrlsHelp + keepURLFragmentSelectHTML + '\
    ' + excludedIpHelp + '\ -
    ' + excludedQueryParametersHelp + '\ -
    ' + excludedUserAgentsHelp + '\ - ' + getSitesearchSelector(false) + '\ +
    ' + excludedQueryParametersHelp + '' + + excludedUserAgentCell + + '' + getSitesearchSelector(false) + '\ ' + getTimezoneSelector(defaultTimezone) + '
    ' + timezoneHelp + '\ ' + getCurrencySelector(defaultCurrency) + '
    ' + currencyHelp + '\ ' + getEcommerceSelector(0) + '
    ' + ecommerceHelp + '\ -- cgit v1.2.3 From 229a3f213f1102c197549e282d6324416d9412cf Mon Sep 17 00:00:00 2001 From: mattab Date: Fri, 17 May 2013 14:32:59 +1200 Subject: Refs #2135 * Fixing select boxes logic/API * better design for anonymous user. He can apply the segments that are shared * better message in case anonymous tries delete/edit a custom segment * Adding ability to set a segment as "PRE-PROCESS" or "PROCESSED ON DEMAND (Real time, default)" --- plugins/SegmentEditor/API.php | 49 +++++++---- plugins/SegmentEditor/Controller.php | 1 - plugins/SegmentEditor/templates/Segmentation.css | 5 ++ plugins/SegmentEditor/templates/Segmentation.js | 106 ++++++++++++++++------- plugins/SegmentEditor/templates/selector.tpl | 25 ++++-- 5 files changed, 129 insertions(+), 57 deletions(-) (limited to 'plugins') diff --git a/plugins/SegmentEditor/API.php b/plugins/SegmentEditor/API.php index 39c204ea18..cacd742ae6 100644 --- a/plugins/SegmentEditor/API.php +++ b/plugins/SegmentEditor/API.php @@ -81,6 +81,8 @@ class Piwik_SegmentEditor_API } Piwik::checkUserHasViewAccess($idSite); } + $idSite = (int)$idSite; + return $idSite; } protected function checkAutoArchive($autoArchive, $idSite) @@ -115,8 +117,16 @@ class Piwik_SegmentEditor_API return $segment; } + protected function checkUserIsNotAnonymous() + { + if(Piwik::isUserIsAnonymous()) { + throw new Exception("To create, edit or delete Custom Segments, please sign in first."); + } + } + public function delete($idSegment) { + $this->checkUserIsNotAnonymous(); $segment = $this->getSegmentOrFail($idSegment); $db = Zend_Registry::get('db'); $db->delete(Piwik_Common::prefixTable('segment'), 'idsegment = ' . $idSegment); @@ -125,9 +135,10 @@ class Piwik_SegmentEditor_API public function update($idSegment, $name, $definition, $idSite = false, $autoArchive = false, $enabledAllUsers = false) { + $this->checkUserIsNotAnonymous(); $segment = $this->getSegmentOrFail($idSegment); - $this->checkIdSite($idSite); + $idSite = $this->checkIdSite($idSite); $this->checkSegmentName($name); $definition = $this->checkSegmentValue($definition, $idSite); $enabledAllUsers = $this->checkEnabledAllUsers($enabledAllUsers); @@ -153,8 +164,8 @@ class Piwik_SegmentEditor_API public function add($name, $definition, $idSite = false, $autoArchive = false, $enabledAllUsers = false) { - Piwik::checkUserIsNotAnonymous(); - $this->checkIdSite($idSite); + $this->checkUserIsNotAnonymous(); + $idSite = $this->checkIdSite($idSite); $this->checkSegmentName($name); $definition = $this->checkSegmentValue($definition, $idSite); $enabledAllUsers = $this->checkEnabledAllUsers($enabledAllUsers); @@ -201,33 +212,37 @@ class Piwik_SegmentEditor_API return $segment; } - public function getAll($idSite = false, $returnAutoArchived = false) + public function getAll($idSite = false, $returnOnlyAutoArchived = false) { if(!empty($idSite) ) { Piwik::checkUserHasViewAccess($idSite); } else { Piwik::checkUserHasSomeViewAccess(); } + $bind = array(); - $extraWhere = ''; - if($returnAutoArchived) { - $extraWhere = ' AND auto_archive = 1'; - } - + // Build basic segment filtering $whereIdSite = ''; - $bind = array(Piwik::getCurrentUserLogin()); if(!empty($idSite)) { $whereIdSite = 'enable_only_idsite = ? OR '; - $bind = array($idSite, Piwik::getCurrentUserLogin()); + $bind[] = $idSite; + } + + $bind[] = Piwik::getCurrentUserLogin(); + + $extraWhere = ''; + if($returnOnlyAutoArchived) { + $extraWhere = ' AND auto_archive = 1'; } + // Query $sql = "SELECT * " . - " FROM " . Piwik_Common::prefixTable("segment") . - " WHERE ($whereIdSite enable_only_idsite IS NULL) - AND (enable_all_users = 1 OR login = ?) - AND deleted = 0 - $extraWhere - ORDER BY name ASC"; + " FROM " . Piwik_Common::prefixTable("segment") . + " WHERE ($whereIdSite enable_only_idsite = 0) + AND (enable_all_users = 1 OR login = ?) + AND deleted = 0 + $extraWhere + ORDER BY name ASC"; $segments = Zend_Registry::get('db')->fetchAll($sql, $bind); return $segments; diff --git a/plugins/SegmentEditor/Controller.php b/plugins/SegmentEditor/Controller.php index d402f442c7..a540ce4a72 100644 --- a/plugins/SegmentEditor/Controller.php +++ b/plugins/SegmentEditor/Controller.php @@ -41,7 +41,6 @@ class Piwik_SegmentEditor_Controller extends Piwik_Controller $view->savedSegmentsJson = Piwik_Common::json_encode($savedSegments); $view->authorizedToCreateSegments = !Piwik::isUserIsAnonymous(); - $view->segmentTranslations = Piwik_Common::json_encode($this->getTranslations()); $out = $view->render(); echo $out; diff --git a/plugins/SegmentEditor/templates/Segmentation.css b/plugins/SegmentEditor/templates/Segmentation.css index bffe989623..fa5e61346e 100644 --- a/plugins/SegmentEditor/templates/Segmentation.css +++ b/plugins/SegmentEditor/templates/Segmentation.css @@ -1,4 +1,9 @@ /* ADDITIONAL STYLES*/ +.youMustBeLoggedIn { + font-size:8pt; + font-style: italic; + +} .loadingSegment { color: grey; display: block; diff --git a/plugins/SegmentEditor/templates/Segmentation.js b/plugins/SegmentEditor/templates/Segmentation.js index c22a4d3949..8e2050ea25 100644 --- a/plugins/SegmentEditor/templates/Segmentation.js +++ b/plugins/SegmentEditor/templates/Segmentation.js @@ -14,7 +14,7 @@ Segmentation = (function($) { self.currentSegmentStr = ""; self.targetId = "segmentEditorPanel"; self.segmentAccess = "read"; - self.segmentList = []; + self.availableSegments = []; for(var item in config) { @@ -182,7 +182,20 @@ Segmentation = (function($) { $(self.form).find(".segment-content").append(getInitialStateRowsHtml()); doDragDropBindings(); } - + + var getSegmentFromId = function (id) { + if(self.availableSegments.length > 0) { + for(var key in self.availableSegments) + { + segment = self.availableSegments[key]; + if(segment.idsegment == id) { + return segment; + } + } + } + return false; + } + var getListHtml = function() { var html = $("#SegmentEditor > .listHtml").clone(); var segment, injClass; @@ -192,10 +205,10 @@ Segmentation = (function($) { + ' data-definition="">' + self.translations['SegmentEditor_DefaultAllVisits'] + ' ' + self.translations['General_DefaultAppended'] + ' '; - if(self.segmentList.length > 0) { - for(var key in self.segmentList) + if(self.availableSegments.length > 0) { + for(var key in self.availableSegments) { - segment = self.segmentList[key]; + segment = self.availableSegments[key]; injClass = ""; if( segment.definition == self.currentSegmentStr){ injClass = 'class="segmentSelected"'; @@ -234,9 +247,9 @@ Segmentation = (function($) { + '">' + self.translations['SegmentEditor_AddNewSegment'] + ''; segmentsDropdown.append(newOption); - for(var key in self.segmentList) + for(var key in self.availableSegments) { - segment = self.segmentList[key]; + segment = self.availableSegments[key]; newOption = ''; segmentsDropdown.append(newOption); } @@ -325,11 +338,15 @@ Segmentation = (function($) { } var openEditForm = function(segment){ - addForm(); + addForm("edit", segment); + $(self.form).find(".segment-content > h3 > span").text(segment.name); $(self.form).find('#available_segments_select > option[data-idsegment="'+segment.idsegment+'"]').prop("selected",true); + $(self.form).find('#available_segments a.dropList').html(self.shortenSegmentName(segment.name, 16)); - + + + if(segment.definition != ""){ revokeInitialStateRows(); var blocks = parseSegmentStr(segment.definition); @@ -368,11 +385,8 @@ Segmentation = (function($) { $(self.content).off("click",".editSegment").on("click", ".editSegment", function(e){ $(this).parents(".segmentationContainer").trigger("click"); var target = $(this).parent("li"); - var segment = {}; - segment.idsegment = target.attr("data-idsegment"); - segment.definition = target.data("definition"); - segment.name = target.attr("title"); - openEditForm(segment); + + openEditFormGivenSegment(target); e.stopPropagation(); e.preventDefault(); }); @@ -492,6 +506,22 @@ Segmentation = (function($) { }); } + function openEditFormGivenSegment(option) { + var segment = {}; + segment.idsegment = option.attr("data-idsegment"); + segment.name = option.attr("title"); + segment.definition = option.data("definition"); + + + var segmentExtra = getSegmentFromId(segment.idsegment); + for(var item in segmentExtra) + { + segment[item] = segmentExtra[item]; + } + + openEditForm(segment); + } + var bindFormEvents = function(){ $(self.form).on("click", "a", function(e){ @@ -530,12 +560,7 @@ Segmentation = (function($) { $(self.form).find("#available_segments_select").bind("change", function(e){ var option = $(e.currentTarget).find('option:selected'); - var segment = {}; - segment.idsegment = option.attr("data-idsegment"); - segment.name = option.attr("title"); - segment.definition = option.data("definition"); - openEditForm(segment); - + openEditFormGivenSegment(option); }); // attach event that shows/hides child elements of each metric category @@ -777,7 +802,8 @@ Segmentation = (function($) { }); } - var addForm = function(mode){ + // Mode = 'new' or 'edit' + var addForm = function(mode, segment){ $("#segmentEditorPanel").find(".segment-element:visible").unbind().remove(); if(typeof self.form !== "undefined") @@ -792,8 +818,17 @@ Segmentation = (function($) { setLeftMargin('#segmentEditorPanel > .segment-element'); bindFormEvents(); bindSegmentManipulationEvents(); - makeDropList("#enabledAllUsers" , "#enabledAllUsers_select"); + + if(mode == "edit") { + $(self.form).find('#enable_all_users_select > option[value="'+segment.enable_all_users+'"]').prop("selected",true); + $(self.form).find('#visible_to_website_select > option[value="'+segment.enable_only_idsite+'"]').prop("selected",true); + $(self.form).find('#auto_archive_select > option[value="'+segment.auto_archive+'"]').prop("selected",true); + + } + + makeDropList("#enable_all_users" , "#enable_all_users_select"); makeDropList("#visible_to_website" , "#visible_to_website_select"); + makeDropList("#auto_archive" , "#auto_archive_select"); makeDropList("#available_segments" , "#available_segments_select"); $(self.form).find(".saveAndApply").bind("click", function(e){ e.preventDefault(); @@ -844,13 +879,16 @@ Segmentation = (function($) { var segmentName = $(self.form).find(".segment-content > h3 >span").text(); var segmentStr = parseForm(); var segmentId = $(self.form).find('#available_segments_select > option:selected').attr("data-idsegment"); - var user = $(self.form).find("#enabledAllUsers_select option:selected").val(); + var user = $(self.form).find("#enable_all_users_select option:selected").val(); + var autoArchive = $(self.form).find("#auto_archive_select option:selected").val() || 0; var params = { "name": segmentName, "definition": segmentStr, "enabledAllUsers": user, - "idSite": $('#visible_to_website').find('option:selected').attr('value') + "autoArchive": autoArchive, + "idSite": $(self.form).find("#visible_to_website_select option:selected").val() }; + // determine if save or update should be performed if(segmentId === ""){ self.addMethod(params); @@ -885,10 +923,10 @@ Segmentation = (function($) { select: function( event, ui ) { event.preventDefault(); ui.item.option.selected = true; - if(ui.item.value) { - dropList.text(ui.item.label); - $(self.form).find(selectId).trigger("change"); - } + // Mark original select>option + $('#SegmentEditor ' + spanId + ' option[value="' + ui.item.value + '"]').prop('selected', true); + dropList.text(ui.item.label); + $(self.form).find(selectId).trigger("change"); } }) .click(function() { @@ -1020,15 +1058,23 @@ $(document).ready( function(){ }, 'POST'); // ajaxHandler.redirectOnSuccess(); ajaxHandler.setLoadingElement(); + ajaxHandler.useCallbackInCaseOfError(); + ajaxHandler.setCallback(function (response) { + if (response && response.result == 'error') { + alert(response.message); + } else { + return broadcast.propagateNewPage('segment='); + } + }); + ajaxHandler.send(true); - return broadcast.propagateNewPage('segment='); }; var segmentFromHash = broadcast.getParamValue('segment', location.hash); var segmentationFtw = new Segmentation({ "targetId" : "segmentList", "segmentAccess" : "write", - "segmentList" : availableSegments, + "availableSegments" : availableSegments, "addMethod": addSegment, "updateMethod": updateSegment, "deleteMethod": deleteSegment, diff --git a/plugins/SegmentEditor/templates/selector.tpl b/plugins/SegmentEditor/templates/selector.tpl index 0179aaef38..ff4b583f18 100644 --- a/plugins/SegmentEditor/templates/selector.tpl +++ b/plugins/SegmentEditor/templates/selector.tpl @@ -1,7 +1,7 @@