| var UrlAnonymizer = function (absoluteUrl) { |
|
|
| var whitelistUrlParams = ['module', 'action', 'idSite', 'idDashboard', 'period', 'date', 'popover', 'idGoal', 'pluginName', 'category', 'subcategory']; |
| var isPiwik3Reporting = isPiwik3ReportingUrl(); |
|
|
| function isPiwik3ReportingUrl() |
| { |
| var category = broadcast.getValueFromHash('category', absoluteUrl); |
| var subcategory = broadcast.getValueFromHash('subcategory', absoluteUrl); |
|
|
| if (!!category && !!subcategory) { |
| return true; |
| } |
|
|
| category = broadcast.getValueFromUrl('category', absoluteUrl); |
| subcategory = broadcast.getValueFromUrl('subcategory', absoluteUrl); |
|
|
| return (!!category && !!subcategory); |
| } |
|
|
| function getTrackingDomain() |
| { |
| if ('undefined' !== (typeof piwikUsageTracking) |
| && piwikUsageTracking && piwikUsageTracking.trackingDomain) { |
| return piwikUsageTracking.trackingDomain; |
| } |
| } |
|
|
| function removeFirstPartFromTranslationKeyIfPresent(translationKey) |
| { |
| var posUnderscore = translationKey.indexOf('_'); |
| if (posUnderscore >= 1) { |
| translationKey = translationKey.substr(posUnderscore + 1); |
| } |
|
|
| return translationKey; |
| } |
|
|
| function isNumber(string) |
| { |
| return /^\d+$/.test(string + ''); |
| } |
|
|
| function getTopLevelId() |
| { |
| var id = ''; |
| if (isPiwik3Reporting) { |
| id = getValueFromHashOrUrl('category', absoluteUrl); |
| id = removeFirstPartFromTranslationKeyIfPresent(id); |
| } else { |
| id = getValueFromHashOrUrl('module'); |
| } |
|
|
| return id; |
| } |
|
|
| function getSubLevelId() |
| { |
| var id = ''; |
|
|
| if (isPiwik3Reporting) { |
| id = broadcast.getValueFromHash('subcategory', absoluteUrl); |
| id = removeFirstPartFromTranslationKeyIfPresent(id); |
|
|
| if (isNumber(id)) { |
| |
| id = ''; |
| } |
| } else { |
| id = getValueFromHashOrUrl('action'); |
| } |
|
|
| return id; |
| } |
|
|
| function makeUrlHierarchical(url) |
| { |
| var anonymizer = new UrlAnonymizer(url); |
|
|
| var module = anonymizer.getTopLevelId(); |
| var action = anonymizer.getSubLevelId(); |
|
|
| if (!action) { |
| action = 'default'; |
| } |
|
|
| var search = anonymizer.getSearchFromUrl(); |
|
|
| var hierarchicalUrl = getTrackingDomain() + '/'; |
| if (module) { |
| hierarchicalUrl += module + '/' + action + '/'; |
| } |
|
|
| var searchParams = broadcast.extractKeyValuePairsFromQueryString(search); |
|
|
| delete searchParams['module']; |
| delete searchParams['action']; |
| delete searchParams['category']; |
| delete searchParams['subcategory']; |
|
|
| hierarchicalUrl += '?'; |
| $.each(searchParams, function (key, value) { |
| hierarchicalUrl += key + '=' + value + '&'; |
| }); |
|
|
| if (endsWith(hierarchicalUrl, '&')) { |
| hierarchicalUrl = hierarchicalUrl.substr(0, hierarchicalUrl.length - 1); |
| } |
|
|
| return hierarchicalUrl; |
| } |
|
|
| function endsWith(string, needle) |
| { |
| return string.substr(-1 * needle.length, needle.length) === needle; |
| } |
|
|
| function getSearchFromUrl() |
| { |
| var searchPos = absoluteUrl.indexOf('?'); |
|
|
| if (-1 === searchPos) { |
| return ''; |
| } |
|
|
| var search = absoluteUrl.substr(searchPos + 1); |
|
|
| if (search && search.match('#')) { |
| search = search.substring(0, search.indexOf("#")); |
| } |
|
|
| return search; |
| } |
|
|
| function getBlacklistedUrlParams() |
| { |
| var search = getSearchFromUrl(); |
|
|
| if (!search) { |
| return []; |
| } |
|
|
| var pairs = broadcast.extractKeyValuePairsFromQueryString(search); |
| var blacklisted = []; |
| $.each(pairs, function (key, value) { |
| if (-1 === whitelistUrlParams.indexOf(key)) { |
| blacklisted.push(key); |
| } |
| }); |
|
|
| return blacklisted; |
| } |
|
|
| function anonymizeUrlParams(paramsToAnonymize) |
| { |
| $.each(paramsToAnonymize, function (i, paramToAnonymize) { |
| if (-1 !== absoluteUrl.indexOf(paramToAnonymize + '=')) { |
| |
| absoluteUrl = broadcast.updateParamValue(paramToAnonymize + '=XYZ', absoluteUrl); |
|
|
| var toBeReplaced = paramToAnonymize + '=&' + paramToAnonymize + '=XYZ'; |
| if (absoluteUrl.indexOf(toBeReplaced) > 0) { |
| |
| absoluteUrl = absoluteUrl.replace(toBeReplaced, paramToAnonymize + '=XYZ'); |
| } |
| } |
| }); |
|
|
| return absoluteUrl; |
| } |
|
|
| function anonymizeIntegerValueInUrl(urlParam) |
| { |
| if (-1 !== absoluteUrl.indexOf(urlParam + '=')) { |
| var oldValue = getValueFromHashOrUrl(urlParam) |
| var newValue = (oldValue % 20); |
| if (newValue === 0) { |
| newValue = 20; |
| } |
| |
| |
| absoluteUrl = broadcast.updateParamValue(urlParam + '=' + newValue, absoluteUrl); |
| } |
|
|
| return absoluteUrl; |
| } |
|
|
| function anonymizePopoverName() |
| { |
| var popoverName = getPopoverNameFromUrl(); |
| if (popoverName) { |
| |
| |
| |
| |
| absoluteUrl = broadcast.updateParamValue('popover=' + popoverName, absoluteUrl); |
| } else if (-1 !== absoluteUrl.indexOf('popover=')) { |
| absoluteUrl = anonymizeUrlParams(['popover']); |
| } |
|
|
| return absoluteUrl; |
| } |
|
|
| function getHashFromUrl() |
| { |
| if (absoluteUrl && absoluteUrl.match('#')) { |
| return absoluteUrl.substring(absoluteUrl.indexOf("#"), absoluteUrl.length); |
| } |
|
|
| return ''; |
| } |
|
|
| function getAnonymizedUrl() |
| { |
| var anonymizedUrl; |
| var hash = getHashFromUrl(); |
| var search = getSearchFromUrl(); |
|
|
| if (hash && hash.length > 4) { |
| anonymizedUrl = makeDemoPiwikUrl(hash); |
| } else if (search && search.length > 4) { |
| anonymizedUrl = makeDemoPiwikUrl(search); |
| } else { |
| anonymizedUrl = makeDemoPiwikUrl(''); |
| } |
|
|
| var anonmized = new UrlAnonymizer(anonymizedUrl); |
|
|
| var blacklistedParams = anonmized.getBlacklistedUrlParams(); |
|
|
| blacklistedParams.push('token_auth'); |
|
|
| |
| |
| blacklistedParams.push('nonce'); |
|
|
| anonmized.anonymizeUrlParams(blacklistedParams); |
|
|
| |
| |
| anonmized.anonymizeIntegerValueInUrl('idGoal'); |
| |
| |
| anonmized.anonymizeIntegerValueInUrl('idSite'); |
| anonmized.anonymizeIntegerValueInUrl('idDashboard'); |
|
|
| anonymizedUrl = anonmized.anonymizePopoverName(); |
|
|
| return anonymizedUrl; |
| } |
|
|
| function makeDemoPiwikUrl(url) |
| { |
| if (0 === url.indexOf('#')) { |
| url = url.substr(1); |
| } |
|
|
| if (0 === url.indexOf('?')) { |
| url = url.substr(1); |
| } |
|
|
| return getTrackingDomain() + '/index.php?' + url; |
| } |
|
|
| function getValueFromHashOrUrl(param) |
| { |
| var isHashUrlInPiwik3 = isPiwik3Reporting && broadcast.getValueFromHash('category', absoluteUrl); |
| var isHashUrlInPiwik2 = !isPiwik3Reporting && broadcast.getValueFromHash('module', absoluteUrl); |
|
|
| if (isHashUrlInPiwik3 || isHashUrlInPiwik2) { |
|
|
| return broadcast.getValueFromHash(param, absoluteUrl); |
| |
| |
| |
| } |
|
|
| var value = broadcast.getValueFromUrl(param, absoluteUrl); |
|
|
| if (!value) { |
| |
| value = ''; |
| } |
|
|
| return value; |
| } |
|
|
| function getPopoverNameFromUrl() |
| { |
| var popover = getValueFromHashOrUrl('popover'); |
|
|
| if (popover && -1 !== popover.indexOf('$')) { |
| popover = decodeURIComponent(popover.replace(/\$/g, '%')); |
|
|
| if (0 === popover.indexOf('RowAction:')) { |
| popover = popover.split(':', 2).join(':'); |
| |
| |
| return popover; |
| } else if (-1 !== popover.indexOf(':')) { |
| |
| return popover.substr(0, popover.indexOf(':')); |
| } |
| } |
|
|
| return ''; |
| } |
|
|
| return { |
| makeUrlHierarchical: makeUrlHierarchical, |
| isPiwik3ReportingUrl: isPiwik3ReportingUrl, |
| getAnonymizedUrl: getAnonymizedUrl, |
| getValueFromHashOrUrl: getValueFromHashOrUrl, |
| getPopoverNameFromUrl: getPopoverNameFromUrl, |
| getTopLevelId: getTopLevelId, |
| getSubLevelId: getSubLevelId, |
| getBlacklistedUrlParams: getBlacklistedUrlParams, |
| getSearchFromUrl: getSearchFromUrl, |
| getHashFromUrl: getHashFromUrl, |
| anonymizeIntegerValueInUrl: anonymizeIntegerValueInUrl, |
| anonymizeUrlParams: anonymizeUrlParams, |
| anonymizePopoverName: anonymizePopoverName |
| }; |
| }; |