diff options
author | Stefan Giehl <stefan@matomo.org> | 2022-06-30 12:58:26 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-06-30 12:58:26 +0300 |
commit | 92896ae6d1814d8d084238e554c84836cfbb1b98 (patch) | |
tree | cefe9f6003e1b591cef2d5647a69b577daa2ee12 /plugins | |
parent | d563063fe39b3275f7dba9a3bd194f3b8b44a056 (diff) |
Provide possibility to configure referrer exclusion list (#19302)
* Adds database column to store referrer exclusion
* Adds global setting for referrer exclusion
* Adds measurable setting to configure excluded referrers
* adjust SitesManager tests
* Implement referrer exclusion
* Make referrer exclusion code easier to understand
* fix tests
* Adds validation for referrer exclusion
* fix test
* Implement referrer exclusion in tracker js
* rebuilt tracker js
* Adds some javascript tests
* ensure setIgnoredReferrers is executed before tracking
* adjust wording to excluded referrers (instead of ignored)
* ignore www subdomain in javascript
* Included excluded referrer in tracking code generator
* Don't require protocol for excluded referrers and add better description
* built vue files
* update expected test files
* updates expected UI files
* add changelog
* removes unused variable
* Allow wildcard subdomains
* updates expected test files
* apply review feedback
* Fix typo
Co-authored-by: sgiehl <sgiehl@users.noreply.github.com>
Co-authored-by: Ben Burgess <88810029+bx80@users.noreply.github.com>
Diffstat (limited to 'plugins')
33 files changed, 1442 insertions, 831 deletions
diff --git a/plugins/CoreAdminHome/vue/dist/CoreAdminHome.umd.js b/plugins/CoreAdminHome/vue/dist/CoreAdminHome.umd.js index d8162b2447..cf2e6107c0 100644 --- a/plugins/CoreAdminHome/vue/dist/CoreAdminHome.umd.js +++ b/plugins/CoreAdminHome/vue/dist/CoreAdminHome.umd.js @@ -1018,58 +1018,58 @@ SmtpSettingsvue_type_script_lang_ts.render = SmtpSettingsvue_type_template_id_a9 }, directiveName: 'matomoSmtpSettings' })); -// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-babel/node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/templateLoader.js??ref--6!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--0-1!./plugins/CoreAdminHome/vue/src/JsTrackingCodeGenerator/JsTrackingCodeGenerator.vue?vue&type=template&id=589b17b8 +// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-babel/node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/templateLoader.js??ref--6!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--0-1!./plugins/CoreAdminHome/vue/src/JsTrackingCodeGenerator/JsTrackingCodeGenerator.vue?vue&type=template&id=ab152b6e -var JsTrackingCodeGeneratorvue_type_template_id_589b17b8_hoisted_1 = { +var JsTrackingCodeGeneratorvue_type_template_id_ab152b6e_hoisted_1 = { id: "js-code-options" }; -var JsTrackingCodeGeneratorvue_type_template_id_589b17b8_hoisted_2 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("br", null, null, -1); +var JsTrackingCodeGeneratorvue_type_template_id_ab152b6e_hoisted_2 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("br", null, null, -1); -var JsTrackingCodeGeneratorvue_type_template_id_589b17b8_hoisted_3 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("br", null, null, -1); +var JsTrackingCodeGeneratorvue_type_template_id_ab152b6e_hoisted_3 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("br", null, null, -1); -var JsTrackingCodeGeneratorvue_type_template_id_589b17b8_hoisted_4 = ["innerHTML"]; -var JsTrackingCodeGeneratorvue_type_template_id_589b17b8_hoisted_5 = ["innerHTML"]; +var JsTrackingCodeGeneratorvue_type_template_id_ab152b6e_hoisted_4 = ["innerHTML"]; +var JsTrackingCodeGeneratorvue_type_template_id_ab152b6e_hoisted_5 = ["innerHTML"]; -var JsTrackingCodeGeneratorvue_type_template_id_589b17b8_hoisted_6 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("br", null, null, -1); +var JsTrackingCodeGeneratorvue_type_template_id_ab152b6e_hoisted_6 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("br", null, null, -1); -var JsTrackingCodeGeneratorvue_type_template_id_589b17b8_hoisted_7 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("br", null, null, -1); +var JsTrackingCodeGeneratorvue_type_template_id_ab152b6e_hoisted_7 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("br", null, null, -1); -var JsTrackingCodeGeneratorvue_type_template_id_589b17b8_hoisted_8 = ["innerHTML"]; +var JsTrackingCodeGeneratorvue_type_template_id_ab152b6e_hoisted_8 = ["innerHTML"]; -var JsTrackingCodeGeneratorvue_type_template_id_589b17b8_hoisted_9 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("br", null, null, -1); +var JsTrackingCodeGeneratorvue_type_template_id_ab152b6e_hoisted_9 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("br", null, null, -1); -var JsTrackingCodeGeneratorvue_type_template_id_589b17b8_hoisted_10 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("br", null, null, -1); +var JsTrackingCodeGeneratorvue_type_template_id_ab152b6e_hoisted_10 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("br", null, null, -1); -var JsTrackingCodeGeneratorvue_type_template_id_589b17b8_hoisted_11 = ["innerHTML"]; +var JsTrackingCodeGeneratorvue_type_template_id_ab152b6e_hoisted_11 = ["innerHTML"]; -var JsTrackingCodeGeneratorvue_type_template_id_589b17b8_hoisted_12 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("br", null, null, -1); +var JsTrackingCodeGeneratorvue_type_template_id_ab152b6e_hoisted_12 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("br", null, null, -1); -var JsTrackingCodeGeneratorvue_type_template_id_589b17b8_hoisted_13 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("br", null, null, -1); +var JsTrackingCodeGeneratorvue_type_template_id_ab152b6e_hoisted_13 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("br", null, null, -1); -var JsTrackingCodeGeneratorvue_type_template_id_589b17b8_hoisted_14 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", { +var JsTrackingCodeGeneratorvue_type_template_id_ab152b6e_hoisted_14 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", { href: "https://matomo.org/faq/new-to-piwik/how-do-i-install-the-matomo-tracking-code-on-wordpress/", target: "_blank", rel: "noopener" }, "WordPress", -1); -var JsTrackingCodeGeneratorvue_type_template_id_589b17b8_hoisted_15 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createTextVNode"])(" | "); +var JsTrackingCodeGeneratorvue_type_template_id_ab152b6e_hoisted_15 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createTextVNode"])(" | "); -var JsTrackingCodeGeneratorvue_type_template_id_589b17b8_hoisted_16 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", { +var JsTrackingCodeGeneratorvue_type_template_id_ab152b6e_hoisted_16 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", { href: "https://matomo.org/faq/new-to-piwik/how-do-i-integrate-matomo-with-squarespace-website/", target: "_blank", rel: "noopener" }, "Squarespace", -1); -var JsTrackingCodeGeneratorvue_type_template_id_589b17b8_hoisted_17 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createTextVNode"])(" | "); +var JsTrackingCodeGeneratorvue_type_template_id_ab152b6e_hoisted_17 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createTextVNode"])(" | "); -var JsTrackingCodeGeneratorvue_type_template_id_589b17b8_hoisted_18 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", { +var JsTrackingCodeGeneratorvue_type_template_id_ab152b6e_hoisted_18 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", { href: "https://matomo.org/faq/new-to-piwik/how-do-i-install-the-matomo-analytics-tracking-code-on-wix/", target: "_blank", rel: "noopener" }, "Wix", -1); -var JsTrackingCodeGeneratorvue_type_template_id_589b17b8_hoisted_19 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createTextVNode"])(" | "); +var JsTrackingCodeGeneratorvue_type_template_id_ab152b6e_hoisted_19 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createTextVNode"])(" | "); var _hoisted_20 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", { href: "https://matomo.org/faq/how-to-install/faq_19424/", @@ -1195,7 +1195,7 @@ var _hoisted_58 = { var _hoisted_59 = { class: "col s12" }; -function JsTrackingCodeGeneratorvue_type_template_id_589b17b8_render(_ctx, _cache, $props, $setup, $data, $options) { +function JsTrackingCodeGeneratorvue_type_template_id_ab152b6e_render(_ctx, _cache, $props, $setup, $data, $options) { var _component_Field = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["resolveComponent"])("Field"); var _component_ContentBlock = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["resolveComponent"])("ContentBlock"); @@ -1207,15 +1207,15 @@ function JsTrackingCodeGeneratorvue_type_template_id_589b17b8_render(_ctx, _cach "content-title": _ctx.translate('CoreAdminHome_JavaScriptTracking') }, { default: Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withCtx"])(function () { - return [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", JsTrackingCodeGeneratorvue_type_template_id_589b17b8_hoisted_1, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("p", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createTextVNode"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('CoreAdminHome_JSTrackingIntro1')) + " ", 1), JsTrackingCodeGeneratorvue_type_template_id_589b17b8_hoisted_2, JsTrackingCodeGeneratorvue_type_template_id_589b17b8_hoisted_3, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createTextVNode"])(" " + Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('CoreAdminHome_JSTrackingIntro2')) + " ", 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", { + return [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", JsTrackingCodeGeneratorvue_type_template_id_ab152b6e_hoisted_1, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("p", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createTextVNode"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('CoreAdminHome_JSTrackingIntro1')) + " ", 1), JsTrackingCodeGeneratorvue_type_template_id_ab152b6e_hoisted_2, JsTrackingCodeGeneratorvue_type_template_id_ab152b6e_hoisted_3, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createTextVNode"])(" " + Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('CoreAdminHome_JSTrackingIntro2')) + " ", 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", { innerHTML: _ctx.$sanitize(_ctx.jsTrackingIntro3a) - }, null, 8, JsTrackingCodeGeneratorvue_type_template_id_589b17b8_hoisted_4), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", { + }, null, 8, JsTrackingCodeGeneratorvue_type_template_id_ab152b6e_hoisted_4), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", { innerHTML: _ctx.$sanitize(' ' + _ctx.jsTrackingIntro3b) - }, null, 8, JsTrackingCodeGeneratorvue_type_template_id_589b17b8_hoisted_5), JsTrackingCodeGeneratorvue_type_template_id_589b17b8_hoisted_6, JsTrackingCodeGeneratorvue_type_template_id_589b17b8_hoisted_7, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", { + }, null, 8, JsTrackingCodeGeneratorvue_type_template_id_ab152b6e_hoisted_5), JsTrackingCodeGeneratorvue_type_template_id_ab152b6e_hoisted_6, JsTrackingCodeGeneratorvue_type_template_id_ab152b6e_hoisted_7, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", { innerHTML: _ctx.$sanitize(_ctx.jsTrackingIntro4a) - }, null, 8, JsTrackingCodeGeneratorvue_type_template_id_589b17b8_hoisted_8), JsTrackingCodeGeneratorvue_type_template_id_589b17b8_hoisted_9, JsTrackingCodeGeneratorvue_type_template_id_589b17b8_hoisted_10, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", { + }, null, 8, JsTrackingCodeGeneratorvue_type_template_id_ab152b6e_hoisted_8), JsTrackingCodeGeneratorvue_type_template_id_ab152b6e_hoisted_9, JsTrackingCodeGeneratorvue_type_template_id_ab152b6e_hoisted_10, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", { innerHTML: _ctx.$sanitize(_ctx.jsTrackingIntro5) - }, null, 8, JsTrackingCodeGeneratorvue_type_template_id_589b17b8_hoisted_11), JsTrackingCodeGeneratorvue_type_template_id_589b17b8_hoisted_12, JsTrackingCodeGeneratorvue_type_template_id_589b17b8_hoisted_13, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createTextVNode"])(" " + Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('SitesManager_InstallationGuides')) + " : ", 1), JsTrackingCodeGeneratorvue_type_template_id_589b17b8_hoisted_14, JsTrackingCodeGeneratorvue_type_template_id_589b17b8_hoisted_15, JsTrackingCodeGeneratorvue_type_template_id_589b17b8_hoisted_16, JsTrackingCodeGeneratorvue_type_template_id_589b17b8_hoisted_17, JsTrackingCodeGeneratorvue_type_template_id_589b17b8_hoisted_18, JsTrackingCodeGeneratorvue_type_template_id_589b17b8_hoisted_19, _hoisted_20, _hoisted_21, _hoisted_22, _hoisted_23, _hoisted_24, _hoisted_25, _hoisted_26]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_Field, { + }, null, 8, JsTrackingCodeGeneratorvue_type_template_id_ab152b6e_hoisted_11), JsTrackingCodeGeneratorvue_type_template_id_ab152b6e_hoisted_12, JsTrackingCodeGeneratorvue_type_template_id_ab152b6e_hoisted_13, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createTextVNode"])(" " + Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('SitesManager_InstallationGuides')) + " : ", 1), JsTrackingCodeGeneratorvue_type_template_id_ab152b6e_hoisted_14, JsTrackingCodeGeneratorvue_type_template_id_ab152b6e_hoisted_15, JsTrackingCodeGeneratorvue_type_template_id_ab152b6e_hoisted_16, JsTrackingCodeGeneratorvue_type_template_id_ab152b6e_hoisted_17, JsTrackingCodeGeneratorvue_type_template_id_ab152b6e_hoisted_18, JsTrackingCodeGeneratorvue_type_template_id_ab152b6e_hoisted_19, _hoisted_20, _hoisted_21, _hoisted_22, _hoisted_23, _hoisted_24, _hoisted_25, _hoisted_26]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_Field, { uicontrol: "site", name: "js-tracker-website", class: "jsTrackingCodeWebsite", @@ -1414,7 +1414,7 @@ function JsTrackingCodeGeneratorvue_type_template_id_589b17b8_render(_ctx, _cach _: 1 }, 8, ["content-title"]); } -// CONCATENATED MODULE: ./plugins/CoreAdminHome/vue/src/JsTrackingCodeGenerator/JsTrackingCodeGenerator.vue?vue&type=template&id=589b17b8 +// CONCATENATED MODULE: ./plugins/CoreAdminHome/vue/src/JsTrackingCodeGenerator/JsTrackingCodeGenerator.vue?vue&type=template&id=ab152b6e // CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-typescript/node_modules/cache-loader/dist/cjs.js??ref--14-0!./node_modules/babel-loader/lib!./node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader??ref--14-2!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--0-1!./plugins/CoreAdminHome/vue/src/JsTrackingCodeGenerator/JsTrackingCodeGenerator.vue?vue&type=script&lang=ts @@ -1454,6 +1454,7 @@ var piwikPath = window.location.pathname.substring(0, window.location.pathname.l isLoading: false, siteUrls: {}, siteExcludedQueryParams: {}, + siteExcludedReferrers: {}, crossDomain: false, groupByDomain: false, trackAllAliases: false, @@ -1523,6 +1524,21 @@ var piwikPath = window.location.pathname.substring(0, window.location.pathname.l })); } + if (!this.siteExcludedReferrers[idSite]) { + this.isLoading = true; + promises.push(external_CoreHome_["AjaxHelper"].fetch({ + module: 'API', + method: 'SitesManager.getExcludedReferrers', + idSite: idSite, + filter_limit: '-1' + }).then(function (data) { + _this.siteExcludedReferrers[idSite] = []; + Object.values(data || []).forEach(function (referrer) { + _this.siteExcludedReferrers[idSite].push(referrer.replace(/^https?:\/\//, '')); + }); + })); + } + Promise.all(promises).then(function () { _this.isLoading = false; @@ -1570,6 +1586,10 @@ var piwikPath = window.location.pathname.substring(0, window.location.pathname.l params.excludedQueryParams = this.siteExcludedQueryParams[site.id]; } + if (this.siteExcludedReferrers[site.id]) { + params.excludedReferrers = this.siteExcludedReferrers[site.id]; + } + if (this.useCustomCampaignParams) { params.customCampaignNameQueryParam = this.customCampaignName; params.customCampaignKeywordParam = this.customCampaignKeyword; @@ -1694,7 +1714,7 @@ var piwikPath = window.location.pathname.substring(0, window.location.pathname.l -JsTrackingCodeGeneratorvue_type_script_lang_ts.render = JsTrackingCodeGeneratorvue_type_template_id_589b17b8_render +JsTrackingCodeGeneratorvue_type_script_lang_ts.render = JsTrackingCodeGeneratorvue_type_template_id_ab152b6e_render /* harmony default export */ var JsTrackingCodeGenerator = (JsTrackingCodeGeneratorvue_type_script_lang_ts); // CONCATENATED MODULE: ./plugins/CoreAdminHome/vue/src/JsTrackingCodeGenerator/JsTrackingCodeGenerator.adapter.ts diff --git a/plugins/CoreAdminHome/vue/dist/CoreAdminHome.umd.min.js b/plugins/CoreAdminHome/vue/dist/CoreAdminHome.umd.min.js index 43ed78a9bb..ca6d66fbb6 100644 --- a/plugins/CoreAdminHome/vue/dist/CoreAdminHome.umd.min.js +++ b/plugins/CoreAdminHome/vue/dist/CoreAdminHome.umd.min.js @@ -1,28 +1,28 @@ -(function(e,t){"object"===typeof exports&&"object"===typeof module?module.exports=t(require("CoreHome"),require("vue"),require("CorePluginsAdmin")):"function"===typeof define&&define.amd?define(["CoreHome",,"CorePluginsAdmin"],t):"object"===typeof exports?exports["CoreAdminHome"]=t(require("CoreHome"),require("vue"),require("CorePluginsAdmin")):e["CoreAdminHome"]=t(e["CoreHome"],e["Vue"],e["CorePluginsAdmin"])})("undefined"!==typeof self?self:this,(function(e,t,n){return function(e){var t={};function n(o){if(t[o])return t[o].exports;var a=t[o]={i:o,l:!1,exports:{}};return e[o].call(a.exports,a,a.exports,n),a.l=!0,a.exports}return n.m=e,n.c=t,n.d=function(e,t,o){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:o})},n.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var o=Object.create(null);if(n.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var a in e)n.d(o,a,function(t){return e[t]}.bind(null,a));return o},n.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="plugins/CoreAdminHome/vue/dist/",n(n.s="fae3")}({"19dc":function(t,n){t.exports=e},"8bbf":function(e,n){e.exports=t},a5a2:function(e,t){e.exports=n},fae3:function(e,t,n){"use strict";if(n.r(t),n.d(t,"ArchivingSettings",(function(){return E})),n.d(t,"BrandingSettings",(function(){return Y})),n.d(t,"SmtpSettings",(function(){return te})),n.d(t,"JsTrackingCodeGenerator",(function(){return bt})),n.d(t,"ImageTrackingCodeGenerator",(function(){return Gt})),n.d(t,"TrackingFailures",(function(){return bn})),"undefined"!==typeof window){var o=window.document.currentScript,a=o&&o.src.match(/(.+\/)[^/]+\.js(\?.*)?$/);a&&(n.p=a[1])}var r=n("19dc"),i=n("8bbf"),l={class:"form-group row"},c={class:"col s12"},s={class:"col s12 m6"},d={class:"form-description",style:{"margin-left":"4px"}},u={for:"enableBrowserTriggerArchiving2"},m=["innerHTML"],g={class:"col s12 m6"},p=["innerHTML"],b={class:"form-group row"},h={class:"col s12"},j={class:"input-field col s12 m6"},v=["disabled"],f={class:"form-description"},O={class:"col s12 m6"},C={key:0,class:"form-help"},k={key:0},V=Object(i["createElementVNode"])("br",null,null,-1),S=Object(i["createElementVNode"])("br",null,null,-1),N=Object(i["createElementVNode"])("br",null,null,-1);function y(e,t,n,o,a,r){var y=Object(i["resolveComponent"])("SaveButton"),T=Object(i["resolveComponent"])("ContentBlock");return Object(i["openBlock"])(),Object(i["createBlock"])(T,{"content-title":e.translate("CoreAdminHome_ArchivingSettings"),anchor:"archivingSettings",class:"matomo-archiving-settings"},{default:Object(i["withCtx"])((function(){return[Object(i["createElementVNode"])("div",null,[Object(i["createElementVNode"])("div",l,[Object(i["createElementVNode"])("h3",c,Object(i["toDisplayString"])(e.translate("General_AllowPiwikArchivingToTriggerBrowser")),1),Object(i["createElementVNode"])("div",s,[Object(i["createElementVNode"])("p",null,[Object(i["createElementVNode"])("label",null,[Object(i["withDirectives"])(Object(i["createElementVNode"])("input",{type:"radio",id:"enableBrowserTriggerArchiving1",name:"enableBrowserTriggerArchiving",value:"1","onUpdate:modelValue":t[0]||(t[0]=function(t){return e.enableBrowserTriggerArchivingValue=t})},null,512),[[i["vModelRadio"],e.enableBrowserTriggerArchivingValue]]),Object(i["createElementVNode"])("span",null,Object(i["toDisplayString"])(e.translate("General_Yes")),1),Object(i["createElementVNode"])("span",d,Object(i["toDisplayString"])(e.translate("General_Default")),1)])]),Object(i["createElementVNode"])("p",null,[Object(i["createElementVNode"])("label",u,[Object(i["withDirectives"])(Object(i["createElementVNode"])("input",{type:"radio",id:"enableBrowserTriggerArchiving2",name:"enableBrowserTriggerArchiving",value:"0","onUpdate:modelValue":t[1]||(t[1]=function(t){return e.enableBrowserTriggerArchivingValue=t})},null,512),[[i["vModelRadio"],e.enableBrowserTriggerArchivingValue]]),Object(i["createElementVNode"])("span",null,Object(i["toDisplayString"])(e.translate("General_No")),1),Object(i["createElementVNode"])("span",{class:"form-description",innerHTML:e.$sanitize(e.archivingTriggerDesc),style:{"margin-left":"4px"}},null,8,m)])])]),Object(i["createElementVNode"])("div",g,[Object(i["createElementVNode"])("div",{class:"form-help",innerHTML:e.$sanitize(e.archivingInlineHelp)},null,8,p)])]),Object(i["createElementVNode"])("div",b,[Object(i["createElementVNode"])("h3",h,Object(i["toDisplayString"])(e.translate("General_ReportsContainingTodayWillBeProcessedAtMostEvery")),1),Object(i["createElementVNode"])("div",j,[Object(i["withDirectives"])(Object(i["createElementVNode"])("input",{type:"text","onUpdate:modelValue":t[2]||(t[2]=function(t){return e.todayArchiveTimeToLiveValue=t}),id:"todayArchiveTimeToLive",disabled:!e.isGeneralSettingsAdminEnabled},null,8,v),[[i["vModelText"],e.todayArchiveTimeToLiveValue]]),Object(i["createElementVNode"])("span",f,Object(i["toDisplayString"])(e.translate("General_RearchiveTimeIntervalOnlyForTodayReports")),1)]),Object(i["createElementVNode"])("div",O,[e.isGeneralSettingsAdminEnabled?(Object(i["openBlock"])(),Object(i["createElementBlock"])("div",C,[e.showWarningCron?(Object(i["openBlock"])(),Object(i["createElementBlock"])("strong",k,[Object(i["createTextVNode"])(Object(i["toDisplayString"])(e.translate("General_NewReportsWillBeProcessedByCron")),1),V,Object(i["createTextVNode"])(" "+Object(i["toDisplayString"])(e.translate("General_ReportsWillBeProcessedAtMostEveryHour"))+" "+Object(i["toDisplayString"])(e.translate("General_IfArchivingIsFastYouCanSetupCronRunMoreOften")),1),S])):Object(i["createCommentVNode"])("",!0),Object(i["createTextVNode"])(" "+Object(i["toDisplayString"])(e.translate("General_SmallTrafficYouCanLeaveDefault",e.todayArchiveTimeToLiveDefault))+" ",1),N,Object(i["createTextVNode"])(" "+Object(i["toDisplayString"])(e.translate("General_MediumToHighTrafficItIsRecommendedTo",1800,3600)),1)])):Object(i["createCommentVNode"])("",!0)])]),Object(i["createElementVNode"])("div",null,[Object(i["createVNode"])(y,{saving:e.isLoading,onConfirm:t[3]||(t[3]=function(t){return e.save()})},null,8,["saving"])])])]})),_:1},8,["content-title"])}var T=n("a5a2"),A=Object(i["defineComponent"])({props:{enableBrowserTriggerArchiving:Boolean,showSegmentArchiveTriggerInfo:Boolean,isGeneralSettingsAdminEnabled:Boolean,showWarningCron:Boolean,todayArchiveTimeToLive:Number,todayArchiveTimeToLiveDefault:Number},components:{ContentBlock:r["ContentBlock"],SaveButton:T["SaveButton"]},data:function(){return{isLoading:!1,enableBrowserTriggerArchivingValue:this.enableBrowserTriggerArchiving?1:0,todayArchiveTimeToLiveValue:this.todayArchiveTimeToLive}},watch:{enableBrowserTriggerArchiving:function(e){this.enableBrowserTriggerArchivingValue=e?1:0},todayArchiveTimeToLive:function(e){this.todayArchiveTimeToLiveValue=e}},computed:{archivingTriggerDesc:function(){var e="";return e+=Object(r["translate"])("General_ArchivingTriggerDescription",'<a target="_blank" rel="noreferrer noopener" href="https://matomo.org/docs/setup-auto-archiving/">',"</a>"),this.showSegmentArchiveTriggerInfo&&(e+=Object(r["translate"])("General_ArchivingTriggerSegment")),e},archivingInlineHelp:function(){var e=Object(r["translate"])("General_ArchivingInlineHelp");return e+="<br/>",e+=Object(r["translate"])("General_SeeTheOfficialDocumentationForMoreInformation",'<a target="_blank" rel="noreferrer noopener" href="https://matomo.org/docs/setup-auto-archiving/">',"</a>"),e}},methods:{save:function(){var e=this;this.isLoading=!0,r["AjaxHelper"].post({module:"API",method:"CoreAdminHome.setArchiveSettings"},{enableBrowserTriggerArchiving:this.enableBrowserTriggerArchivingValue,todayArchiveTimeToLive:this.todayArchiveTimeToLiveValue}).then((function(){e.isLoading=!1;var t=r["NotificationsStore"].show({message:Object(r["translate"])("CoreAdminHome_SettingsSaveSuccess"),type:"transient",id:"generalSettings",context:"success"});r["NotificationsStore"].scrollToNotification(t)})).finally((function(){e.isLoading=!1}))}}});A.render=y;var E=A,w=(Object(r["createAngularJsAdapter"])({component:E,scope:{enableBrowserTriggerArchiving:{angularJsBind:"<"},showSegmentArchiveTriggerInfo:{angularJsBind:"<"},isGeneralSettingsAdminEnabled:{angularJsBind:"<"},showWarningCron:{angularJsBind:"<"},todayArchiveTimeToLive:{angularJsBind:"<"},todayArchiveTimeToLiveDefault:{angularJsBind:"<"}},directiveName:"matomoArchivingSettings"}),{id:"logoSettings"}),_={id:"logoUploadForm",ref:"logoUploadForm",method:"post",enctype:"multipart/form-data",action:"index.php?module=CoreAdminHome&format=json&action=uploadCustomLogo"},H={key:0},D=["value"],B=Object(i["createElementVNode"])("input",{type:"hidden",name:"force_api_session",value:"1"},null,-1),L={key:0},U={key:0,class:"alert alert-warning uploaderror"},x={class:"row"},F={class:"col s12"},I=["src"],G={class:"row"},P={class:"col s12"},M=["src"],J={key:1},q=["innerHTML"],R={key:1},W={class:"alert alert-warning"}; +(function(e,t){"object"===typeof exports&&"object"===typeof module?module.exports=t(require("CoreHome"),require("vue"),require("CorePluginsAdmin")):"function"===typeof define&&define.amd?define(["CoreHome",,"CorePluginsAdmin"],t):"object"===typeof exports?exports["CoreAdminHome"]=t(require("CoreHome"),require("vue"),require("CorePluginsAdmin")):e["CoreAdminHome"]=t(e["CoreHome"],e["Vue"],e["CorePluginsAdmin"])})("undefined"!==typeof self?self:this,(function(e,t,n){return function(e){var t={};function n(o){if(t[o])return t[o].exports;var a=t[o]={i:o,l:!1,exports:{}};return e[o].call(a.exports,a,a.exports,n),a.l=!0,a.exports}return n.m=e,n.c=t,n.d=function(e,t,o){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:o})},n.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var o=Object.create(null);if(n.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var a in e)n.d(o,a,function(t){return e[t]}.bind(null,a));return o},n.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="plugins/CoreAdminHome/vue/dist/",n(n.s="fae3")}({"19dc":function(t,n){t.exports=e},"8bbf":function(e,n){e.exports=t},a5a2:function(e,t){e.exports=n},fae3:function(e,t,n){"use strict";if(n.r(t),n.d(t,"ArchivingSettings",(function(){return E})),n.d(t,"BrandingSettings",(function(){return Y})),n.d(t,"SmtpSettings",(function(){return te})),n.d(t,"JsTrackingCodeGenerator",(function(){return bt})),n.d(t,"ImageTrackingCodeGenerator",(function(){return Gt})),n.d(t,"TrackingFailures",(function(){return bn})),"undefined"!==typeof window){var o=window.document.currentScript,a=o&&o.src.match(/(.+\/)[^/]+\.js(\?.*)?$/);a&&(n.p=a[1])}var r=n("19dc"),i=n("8bbf"),l={class:"form-group row"},c={class:"col s12"},s={class:"col s12 m6"},d={class:"form-description",style:{"margin-left":"4px"}},u={for:"enableBrowserTriggerArchiving2"},m=["innerHTML"],g={class:"col s12 m6"},p=["innerHTML"],b={class:"form-group row"},h={class:"col s12"},j={class:"input-field col s12 m6"},v=["disabled"],f={class:"form-description"},O={class:"col s12 m6"},C={key:0,class:"form-help"},k={key:0},V=Object(i["createElementVNode"])("br",null,null,-1),S=Object(i["createElementVNode"])("br",null,null,-1),N=Object(i["createElementVNode"])("br",null,null,-1);function y(e,t,n,o,a,r){var y=Object(i["resolveComponent"])("SaveButton"),T=Object(i["resolveComponent"])("ContentBlock");return Object(i["openBlock"])(),Object(i["createBlock"])(T,{"content-title":e.translate("CoreAdminHome_ArchivingSettings"),anchor:"archivingSettings",class:"matomo-archiving-settings"},{default:Object(i["withCtx"])((function(){return[Object(i["createElementVNode"])("div",null,[Object(i["createElementVNode"])("div",l,[Object(i["createElementVNode"])("h3",c,Object(i["toDisplayString"])(e.translate("General_AllowPiwikArchivingToTriggerBrowser")),1),Object(i["createElementVNode"])("div",s,[Object(i["createElementVNode"])("p",null,[Object(i["createElementVNode"])("label",null,[Object(i["withDirectives"])(Object(i["createElementVNode"])("input",{type:"radio",id:"enableBrowserTriggerArchiving1",name:"enableBrowserTriggerArchiving",value:"1","onUpdate:modelValue":t[0]||(t[0]=function(t){return e.enableBrowserTriggerArchivingValue=t})},null,512),[[i["vModelRadio"],e.enableBrowserTriggerArchivingValue]]),Object(i["createElementVNode"])("span",null,Object(i["toDisplayString"])(e.translate("General_Yes")),1),Object(i["createElementVNode"])("span",d,Object(i["toDisplayString"])(e.translate("General_Default")),1)])]),Object(i["createElementVNode"])("p",null,[Object(i["createElementVNode"])("label",u,[Object(i["withDirectives"])(Object(i["createElementVNode"])("input",{type:"radio",id:"enableBrowserTriggerArchiving2",name:"enableBrowserTriggerArchiving",value:"0","onUpdate:modelValue":t[1]||(t[1]=function(t){return e.enableBrowserTriggerArchivingValue=t})},null,512),[[i["vModelRadio"],e.enableBrowserTriggerArchivingValue]]),Object(i["createElementVNode"])("span",null,Object(i["toDisplayString"])(e.translate("General_No")),1),Object(i["createElementVNode"])("span",{class:"form-description",innerHTML:e.$sanitize(e.archivingTriggerDesc),style:{"margin-left":"4px"}},null,8,m)])])]),Object(i["createElementVNode"])("div",g,[Object(i["createElementVNode"])("div",{class:"form-help",innerHTML:e.$sanitize(e.archivingInlineHelp)},null,8,p)])]),Object(i["createElementVNode"])("div",b,[Object(i["createElementVNode"])("h3",h,Object(i["toDisplayString"])(e.translate("General_ReportsContainingTodayWillBeProcessedAtMostEvery")),1),Object(i["createElementVNode"])("div",j,[Object(i["withDirectives"])(Object(i["createElementVNode"])("input",{type:"text","onUpdate:modelValue":t[2]||(t[2]=function(t){return e.todayArchiveTimeToLiveValue=t}),id:"todayArchiveTimeToLive",disabled:!e.isGeneralSettingsAdminEnabled},null,8,v),[[i["vModelText"],e.todayArchiveTimeToLiveValue]]),Object(i["createElementVNode"])("span",f,Object(i["toDisplayString"])(e.translate("General_RearchiveTimeIntervalOnlyForTodayReports")),1)]),Object(i["createElementVNode"])("div",O,[e.isGeneralSettingsAdminEnabled?(Object(i["openBlock"])(),Object(i["createElementBlock"])("div",C,[e.showWarningCron?(Object(i["openBlock"])(),Object(i["createElementBlock"])("strong",k,[Object(i["createTextVNode"])(Object(i["toDisplayString"])(e.translate("General_NewReportsWillBeProcessedByCron")),1),V,Object(i["createTextVNode"])(" "+Object(i["toDisplayString"])(e.translate("General_ReportsWillBeProcessedAtMostEveryHour"))+" "+Object(i["toDisplayString"])(e.translate("General_IfArchivingIsFastYouCanSetupCronRunMoreOften")),1),S])):Object(i["createCommentVNode"])("",!0),Object(i["createTextVNode"])(" "+Object(i["toDisplayString"])(e.translate("General_SmallTrafficYouCanLeaveDefault",e.todayArchiveTimeToLiveDefault))+" ",1),N,Object(i["createTextVNode"])(" "+Object(i["toDisplayString"])(e.translate("General_MediumToHighTrafficItIsRecommendedTo",1800,3600)),1)])):Object(i["createCommentVNode"])("",!0)])]),Object(i["createElementVNode"])("div",null,[Object(i["createVNode"])(y,{saving:e.isLoading,onConfirm:t[3]||(t[3]=function(t){return e.save()})},null,8,["saving"])])])]})),_:1},8,["content-title"])}var T=n("a5a2"),A=Object(i["defineComponent"])({props:{enableBrowserTriggerArchiving:Boolean,showSegmentArchiveTriggerInfo:Boolean,isGeneralSettingsAdminEnabled:Boolean,showWarningCron:Boolean,todayArchiveTimeToLive:Number,todayArchiveTimeToLiveDefault:Number},components:{ContentBlock:r["ContentBlock"],SaveButton:T["SaveButton"]},data:function(){return{isLoading:!1,enableBrowserTriggerArchivingValue:this.enableBrowserTriggerArchiving?1:0,todayArchiveTimeToLiveValue:this.todayArchiveTimeToLive}},watch:{enableBrowserTriggerArchiving:function(e){this.enableBrowserTriggerArchivingValue=e?1:0},todayArchiveTimeToLive:function(e){this.todayArchiveTimeToLiveValue=e}},computed:{archivingTriggerDesc:function(){var e="";return e+=Object(r["translate"])("General_ArchivingTriggerDescription",'<a target="_blank" rel="noreferrer noopener" href="https://matomo.org/docs/setup-auto-archiving/">',"</a>"),this.showSegmentArchiveTriggerInfo&&(e+=Object(r["translate"])("General_ArchivingTriggerSegment")),e},archivingInlineHelp:function(){var e=Object(r["translate"])("General_ArchivingInlineHelp");return e+="<br/>",e+=Object(r["translate"])("General_SeeTheOfficialDocumentationForMoreInformation",'<a target="_blank" rel="noreferrer noopener" href="https://matomo.org/docs/setup-auto-archiving/">',"</a>"),e}},methods:{save:function(){var e=this;this.isLoading=!0,r["AjaxHelper"].post({module:"API",method:"CoreAdminHome.setArchiveSettings"},{enableBrowserTriggerArchiving:this.enableBrowserTriggerArchivingValue,todayArchiveTimeToLive:this.todayArchiveTimeToLiveValue}).then((function(){e.isLoading=!1;var t=r["NotificationsStore"].show({message:Object(r["translate"])("CoreAdminHome_SettingsSaveSuccess"),type:"transient",id:"generalSettings",context:"success"});r["NotificationsStore"].scrollToNotification(t)})).finally((function(){e.isLoading=!1}))}}});A.render=y;var E=A,w=(Object(r["createAngularJsAdapter"])({component:E,scope:{enableBrowserTriggerArchiving:{angularJsBind:"<"},showSegmentArchiveTriggerInfo:{angularJsBind:"<"},isGeneralSettingsAdminEnabled:{angularJsBind:"<"},showWarningCron:{angularJsBind:"<"},todayArchiveTimeToLive:{angularJsBind:"<"},todayArchiveTimeToLiveDefault:{angularJsBind:"<"}},directiveName:"matomoArchivingSettings"}),{id:"logoSettings"}),_={id:"logoUploadForm",ref:"logoUploadForm",method:"post",enctype:"multipart/form-data",action:"index.php?module=CoreAdminHome&format=json&action=uploadCustomLogo"},H={key:0},D=["value"],B=Object(i["createElementVNode"])("input",{type:"hidden",name:"force_api_session",value:"1"},null,-1),L={key:0},x={key:0,class:"alert alert-warning uploaderror"},U={class:"row"},F={class:"col s12"},I=["src"],G={class:"row"},P={class:"col s12"},M=["src"],J={key:1},q=["innerHTML"],R={key:1},W={class:"alert alert-warning"}; /*! * Matomo - free/libre analytics platform * * @link https://matomo.org * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later - */function $(e,t,n,o,a,r){var l=Object(i["resolveComponent"])("Field"),c=Object(i["resolveComponent"])("SaveButton"),s=Object(i["resolveComponent"])("ContentBlock"),d=Object(i["resolveDirective"])("form");return Object(i["openBlock"])(),Object(i["createBlock"])(s,{"content-title":e.translate("CoreAdminHome_BrandingSettings"),anchor:"brandingSettings"},{default:Object(i["withCtx"])((function(){return[Object(i["withDirectives"])(Object(i["createElementVNode"])("div",null,[Object(i["createElementVNode"])("p",null,Object(i["toDisplayString"])(e.translate("CoreAdminHome_CustomLogoHelpText")),1),Object(i["createVNode"])(l,{name:"useCustomLogo",uicontrol:"checkbox","model-value":e.enabled,"onUpdate:modelValue":t[0]||(t[0]=function(t){return e.onUseCustomLogoChange(t)}),title:e.translate("CoreAdminHome_UseCustomLogo"),"inline-help":e.help},null,8,["model-value","title","inline-help"]),Object(i["withDirectives"])(Object(i["createElementVNode"])("div",w,[Object(i["createElementVNode"])("form",_,[e.fileUploadEnabled?(Object(i["openBlock"])(),Object(i["createElementBlock"])("div",H,[Object(i["createElementVNode"])("input",{type:"hidden",name:"token_auth",value:e.tokenAuth},null,8,D),B,e.logosWriteable?(Object(i["openBlock"])(),Object(i["createElementBlock"])("div",L,[Object(i["createVNode"])(i["Transition"],{name:"fade-out"},{default:Object(i["withCtx"])((function(){return[e.showUploadError?(Object(i["openBlock"])(),Object(i["createElementBlock"])("div",U,Object(i["toDisplayString"])(e.translate("CoreAdminHome_LogoUploadFailed")),1)):Object(i["createCommentVNode"])("",!0)]})),_:1}),Object(i["createVNode"])(l,{uicontrol:"file",name:"customLogo","model-value":e.customLogo,"onUpdate:modelValue":t[1]||(t[1]=function(t){return e.onCustomLogoChange(t)}),title:e.translate("CoreAdminHome_LogoUpload"),"inline-help":e.translate("CoreAdminHome_LogoUploadHelp","JPG / PNG / GIF","110")},null,8,["model-value","title","inline-help"]),Object(i["createElementVNode"])("div",x,[Object(i["createElementVNode"])("div",F,[Object(i["createElementVNode"])("img",{src:e.pathUserLogoWithBuster,id:"currentLogo",style:{"max-height":"150px"},ref:"currentLogo"},null,8,I)])]),Object(i["createVNode"])(l,{uicontrol:"file",name:"customFavicon","model-value":e.customFavicon,"onUpdate:modelValue":t[2]||(t[2]=function(t){return e.onFaviconChange(t)}),title:e.translate("CoreAdminHome_FaviconUpload"),"inline-help":e.translate("CoreAdminHome_LogoUploadHelp","JPG / PNG / GIF","16")},null,8,["model-value","title","inline-help"]),Object(i["createElementVNode"])("div",G,[Object(i["createElementVNode"])("div",P,[Object(i["createElementVNode"])("img",{src:e.pathUserFaviconWithBuster,id:"currentFavicon",width:"16",height:"16",ref:"currentFavicon"},null,8,M)])])])):Object(i["createCommentVNode"])("",!0),e.logosWriteable?Object(i["createCommentVNode"])("",!0):(Object(i["openBlock"])(),Object(i["createElementBlock"])("div",J,[Object(i["createElementVNode"])("div",{class:"alert alert-warning",innerHTML:e.$sanitize(e.logosNotWriteableWarning)},null,8,q)]))])):Object(i["createCommentVNode"])("",!0),e.fileUploadEnabled?Object(i["createCommentVNode"])("",!0):(Object(i["openBlock"])(),Object(i["createElementBlock"])("div",R,[Object(i["createElementVNode"])("div",W,Object(i["toDisplayString"])(e.translate("CoreAdminHome_FileUploadDisabled","file_uploads=1")),1)]))],512)],512),[[i["vShow"],e.enabled]]),Object(i["createVNode"])(c,{onConfirm:t[3]||(t[3]=function(t){return e.save()}),saving:e.isLoading},null,8,["saving"])],512),[[d]])]})),_:1},8,["content-title"])}var K=window,z=K.$,Q=Object(i["defineComponent"])({props:{fileUploadEnabled:{type:Boolean,required:!0},logosWriteable:{type:Boolean,required:!0},useCustomLogo:{type:Boolean,required:!0},pathUserLogoDirectory:{type:String,required:!0},pathUserLogo:{type:String,required:!0},pathUserLogoSmall:{type:String,required:!0},pathUserLogoSvg:{type:String,required:!0},hasUserLogo:{type:Boolean,required:!0},pathUserFavicon:{type:String,required:!0},hasUserFavicon:{type:Boolean,required:!0},isPluginsAdminEnabled:{type:Boolean,required:!0}},components:{Field:T["Field"],ContentBlock:r["ContentBlock"],SaveButton:T["SaveButton"]},directives:{Form:T["Form"]},data:function(){return{isLoading:!1,enabled:this.useCustomLogo,customLogo:this.pathUserLogo,customFavicon:this.pathUserFavicon,showUploadError:!1,currentLogoSrcExists:this.hasUserLogo,currentFaviconSrcExists:this.hasUserFavicon,currentLogoCacheBuster:(new Date).getTime(),currentFaviconCacheBuster:(new Date).getTime()}},computed:{tokenAuth:function(){return r["Matomo"].token_auth},logosNotWriteableWarning:function(){return Object(r["translate"])("CoreAdminHome_LogoNotWriteableInstruction","<code>".concat(this.pathUserLogoDirectory,"</code><br/>"),"".concat(this.pathUserLogo,", ").concat(this.pathUserLogoSmall,", ").concat(this.pathUserLogoSvg))},help:function(){if(this.isPluginsAdminEnabled){var e='"'.concat(Object(r["translate"])("General_GiveUsYourFeedback"),'"'),t='<a href="?module=CorePluginsAdmin&action=plugins" rel="noreferrer noopener" target="_blank">';return Object(r["translate"])("CoreAdminHome_CustomLogoFeedbackInfo",e,t,"</a>")}},pathUserLogoWithBuster:function(){return this.currentLogoSrcExists&&this.pathUserLogo?"".concat(this.pathUserLogo,"?").concat(this.currentLogoCacheBuster):""},pathUserFaviconWithBuster:function(){return this.currentFaviconSrcExists&&this.pathUserFavicon?"".concat(this.pathUserFavicon,"?").concat(this.currentFaviconCacheBuster):""}},methods:{onUseCustomLogoChange:function(e){this.enabled=e},onCustomLogoChange:function(e){this.customLogo=e,this.updateLogo()},onFaviconChange:function(e){this.customFavicon=e,this.updateLogo()},save:function(){var e=this;this.isLoading=!0,r["AjaxHelper"].post({module:"API",method:"CoreAdminHome.setBrandingSettings"},{useCustomLogo:this.enabled?"1":"0"}).then((function(){var e=r["NotificationsStore"].show({message:Object(r["translate"])("CoreAdminHome_SettingsSaveSuccess"),type:"transient",id:"generalSettings",context:"success"});r["NotificationsStore"].scrollToNotification(e)})).finally((function(){e.isLoading=!1}))},updateLogo:function(){var e=this,t=!!this.customLogo,n=!!this.customFavicon;if(t||n){this.showUploadError=!1;var o="upload".concat((new Date).getTime()),a=z('<iframe name="'.concat(o,'" />'));a.css("display","none"),a.on("load",(function(){setTimeout((function(){var o=(z(a.contents()).find("body").html()||"").trim();"0"===o?e.showUploadError=!0:(t&&(e.currentLogoSrcExists=!0,e.currentLogoCacheBuster=(new Date).getTime()),n&&(e.currentFaviconSrcExists=!0,e.currentFaviconCacheBuster=(new Date).getTime())),"1"!==o&&"0"!==o||a.remove()}),1e3)})),z("body:first").append(a);var r=z(this.$refs.logoUploadForm);r.attr("target",o),r.submit(),this.customLogo="",this.customFavicon=""}}}});Q.render=$;var Y=Q,X=(Object(r["createAngularJsAdapter"])({component:Y,scope:{fileUploadEnabled:{angularJsBind:"<"},logosWriteable:{angularJsBind:"<"},useCustomLogo:{angularJsBind:"<"},pathUserLogoDirectory:{angularJsBind:"<"},pathUserLogo:{angularJsBind:"<"},pathUserLogoSmall:{angularJsBind:"<"},pathUserLogoSvg:{angularJsBind:"<"},hasUserLogo:{angularJsBind:"<"},pathUserFavicon:{angularJsBind:"<"},hasUserFavicon:{angularJsBind:"<"},isPluginsAdminEnabled:{angularJsBind:"<"}},directiveName:"matomoBrandingSettings"}),{id:"smtpSettings"}); + */function $(e,t,n,o,a,r){var l=Object(i["resolveComponent"])("Field"),c=Object(i["resolveComponent"])("SaveButton"),s=Object(i["resolveComponent"])("ContentBlock"),d=Object(i["resolveDirective"])("form");return Object(i["openBlock"])(),Object(i["createBlock"])(s,{"content-title":e.translate("CoreAdminHome_BrandingSettings"),anchor:"brandingSettings"},{default:Object(i["withCtx"])((function(){return[Object(i["withDirectives"])(Object(i["createElementVNode"])("div",null,[Object(i["createElementVNode"])("p",null,Object(i["toDisplayString"])(e.translate("CoreAdminHome_CustomLogoHelpText")),1),Object(i["createVNode"])(l,{name:"useCustomLogo",uicontrol:"checkbox","model-value":e.enabled,"onUpdate:modelValue":t[0]||(t[0]=function(t){return e.onUseCustomLogoChange(t)}),title:e.translate("CoreAdminHome_UseCustomLogo"),"inline-help":e.help},null,8,["model-value","title","inline-help"]),Object(i["withDirectives"])(Object(i["createElementVNode"])("div",w,[Object(i["createElementVNode"])("form",_,[e.fileUploadEnabled?(Object(i["openBlock"])(),Object(i["createElementBlock"])("div",H,[Object(i["createElementVNode"])("input",{type:"hidden",name:"token_auth",value:e.tokenAuth},null,8,D),B,e.logosWriteable?(Object(i["openBlock"])(),Object(i["createElementBlock"])("div",L,[Object(i["createVNode"])(i["Transition"],{name:"fade-out"},{default:Object(i["withCtx"])((function(){return[e.showUploadError?(Object(i["openBlock"])(),Object(i["createElementBlock"])("div",x,Object(i["toDisplayString"])(e.translate("CoreAdminHome_LogoUploadFailed")),1)):Object(i["createCommentVNode"])("",!0)]})),_:1}),Object(i["createVNode"])(l,{uicontrol:"file",name:"customLogo","model-value":e.customLogo,"onUpdate:modelValue":t[1]||(t[1]=function(t){return e.onCustomLogoChange(t)}),title:e.translate("CoreAdminHome_LogoUpload"),"inline-help":e.translate("CoreAdminHome_LogoUploadHelp","JPG / PNG / GIF","110")},null,8,["model-value","title","inline-help"]),Object(i["createElementVNode"])("div",U,[Object(i["createElementVNode"])("div",F,[Object(i["createElementVNode"])("img",{src:e.pathUserLogoWithBuster,id:"currentLogo",style:{"max-height":"150px"},ref:"currentLogo"},null,8,I)])]),Object(i["createVNode"])(l,{uicontrol:"file",name:"customFavicon","model-value":e.customFavicon,"onUpdate:modelValue":t[2]||(t[2]=function(t){return e.onFaviconChange(t)}),title:e.translate("CoreAdminHome_FaviconUpload"),"inline-help":e.translate("CoreAdminHome_LogoUploadHelp","JPG / PNG / GIF","16")},null,8,["model-value","title","inline-help"]),Object(i["createElementVNode"])("div",G,[Object(i["createElementVNode"])("div",P,[Object(i["createElementVNode"])("img",{src:e.pathUserFaviconWithBuster,id:"currentFavicon",width:"16",height:"16",ref:"currentFavicon"},null,8,M)])])])):Object(i["createCommentVNode"])("",!0),e.logosWriteable?Object(i["createCommentVNode"])("",!0):(Object(i["openBlock"])(),Object(i["createElementBlock"])("div",J,[Object(i["createElementVNode"])("div",{class:"alert alert-warning",innerHTML:e.$sanitize(e.logosNotWriteableWarning)},null,8,q)]))])):Object(i["createCommentVNode"])("",!0),e.fileUploadEnabled?Object(i["createCommentVNode"])("",!0):(Object(i["openBlock"])(),Object(i["createElementBlock"])("div",R,[Object(i["createElementVNode"])("div",W,Object(i["toDisplayString"])(e.translate("CoreAdminHome_FileUploadDisabled","file_uploads=1")),1)]))],512)],512),[[i["vShow"],e.enabled]]),Object(i["createVNode"])(c,{onConfirm:t[3]||(t[3]=function(t){return e.save()}),saving:e.isLoading},null,8,["saving"])],512),[[d]])]})),_:1},8,["content-title"])}var K=window,z=K.$,Q=Object(i["defineComponent"])({props:{fileUploadEnabled:{type:Boolean,required:!0},logosWriteable:{type:Boolean,required:!0},useCustomLogo:{type:Boolean,required:!0},pathUserLogoDirectory:{type:String,required:!0},pathUserLogo:{type:String,required:!0},pathUserLogoSmall:{type:String,required:!0},pathUserLogoSvg:{type:String,required:!0},hasUserLogo:{type:Boolean,required:!0},pathUserFavicon:{type:String,required:!0},hasUserFavicon:{type:Boolean,required:!0},isPluginsAdminEnabled:{type:Boolean,required:!0}},components:{Field:T["Field"],ContentBlock:r["ContentBlock"],SaveButton:T["SaveButton"]},directives:{Form:T["Form"]},data:function(){return{isLoading:!1,enabled:this.useCustomLogo,customLogo:this.pathUserLogo,customFavicon:this.pathUserFavicon,showUploadError:!1,currentLogoSrcExists:this.hasUserLogo,currentFaviconSrcExists:this.hasUserFavicon,currentLogoCacheBuster:(new Date).getTime(),currentFaviconCacheBuster:(new Date).getTime()}},computed:{tokenAuth:function(){return r["Matomo"].token_auth},logosNotWriteableWarning:function(){return Object(r["translate"])("CoreAdminHome_LogoNotWriteableInstruction","<code>".concat(this.pathUserLogoDirectory,"</code><br/>"),"".concat(this.pathUserLogo,", ").concat(this.pathUserLogoSmall,", ").concat(this.pathUserLogoSvg))},help:function(){if(this.isPluginsAdminEnabled){var e='"'.concat(Object(r["translate"])("General_GiveUsYourFeedback"),'"'),t='<a href="?module=CorePluginsAdmin&action=plugins" rel="noreferrer noopener" target="_blank">';return Object(r["translate"])("CoreAdminHome_CustomLogoFeedbackInfo",e,t,"</a>")}},pathUserLogoWithBuster:function(){return this.currentLogoSrcExists&&this.pathUserLogo?"".concat(this.pathUserLogo,"?").concat(this.currentLogoCacheBuster):""},pathUserFaviconWithBuster:function(){return this.currentFaviconSrcExists&&this.pathUserFavicon?"".concat(this.pathUserFavicon,"?").concat(this.currentFaviconCacheBuster):""}},methods:{onUseCustomLogoChange:function(e){this.enabled=e},onCustomLogoChange:function(e){this.customLogo=e,this.updateLogo()},onFaviconChange:function(e){this.customFavicon=e,this.updateLogo()},save:function(){var e=this;this.isLoading=!0,r["AjaxHelper"].post({module:"API",method:"CoreAdminHome.setBrandingSettings"},{useCustomLogo:this.enabled?"1":"0"}).then((function(){var e=r["NotificationsStore"].show({message:Object(r["translate"])("CoreAdminHome_SettingsSaveSuccess"),type:"transient",id:"generalSettings",context:"success"});r["NotificationsStore"].scrollToNotification(e)})).finally((function(){e.isLoading=!1}))},updateLogo:function(){var e=this,t=!!this.customLogo,n=!!this.customFavicon;if(t||n){this.showUploadError=!1;var o="upload".concat((new Date).getTime()),a=z('<iframe name="'.concat(o,'" />'));a.css("display","none"),a.on("load",(function(){setTimeout((function(){var o=(z(a.contents()).find("body").html()||"").trim();"0"===o?e.showUploadError=!0:(t&&(e.currentLogoSrcExists=!0,e.currentLogoCacheBuster=(new Date).getTime()),n&&(e.currentFaviconSrcExists=!0,e.currentFaviconCacheBuster=(new Date).getTime())),"1"!==o&&"0"!==o||a.remove()}),1e3)})),z("body:first").append(a);var r=z(this.$refs.logoUploadForm);r.attr("target",o),r.submit(),this.customLogo="",this.customFavicon=""}}}});Q.render=$;var Y=Q,X=(Object(r["createAngularJsAdapter"])({component:Y,scope:{fileUploadEnabled:{angularJsBind:"<"},logosWriteable:{angularJsBind:"<"},useCustomLogo:{angularJsBind:"<"},pathUserLogoDirectory:{angularJsBind:"<"},pathUserLogo:{angularJsBind:"<"},pathUserLogoSmall:{angularJsBind:"<"},pathUserLogoSvg:{angularJsBind:"<"},hasUserLogo:{angularJsBind:"<"},pathUserFavicon:{angularJsBind:"<"},hasUserFavicon:{angularJsBind:"<"},isPluginsAdminEnabled:{angularJsBind:"<"}},directiveName:"matomoBrandingSettings"}),{id:"smtpSettings"}); /*! * Matomo - free/libre analytics platform * * @link https://matomo.org * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later - */function Z(e,t,n,o,a,r){var l=Object(i["resolveComponent"])("Field"),c=Object(i["resolveComponent"])("SaveButton"),s=Object(i["resolveComponent"])("ContentBlock"),d=Object(i["resolveDirective"])("form");return Object(i["openBlock"])(),Object(i["createBlock"])(s,{"content-title":e.translate("CoreAdminHome_EmailServerSettings"),anchor:"mailSettings"},{default:Object(i["withCtx"])((function(){return[Object(i["withDirectives"])(Object(i["createElementVNode"])("div",null,[Object(i["createVNode"])(l,{uicontrol:"checkbox",name:"mailUseSmtp",modelValue:e.enabled,"onUpdate:modelValue":t[0]||(t[0]=function(t){return e.enabled=t}),title:e.translate("General_UseSMTPServerForEmail"),"inline-help":e.translate("General_SelectYesIfYouWantToSendEmailsViaServer")},null,8,["modelValue","title","inline-help"]),Object(i["withDirectives"])(Object(i["createElementVNode"])("div",X,[Object(i["createVNode"])(l,{uicontrol:"text",name:"mailHost","model-value":e.mailHost,"onUpdate:modelValue":t[1]||(t[1]=function(t){return e.onUpdateMailHost(t)}),title:e.translate("General_SmtpServerAddress")},null,8,["model-value","title"]),Object(i["createVNode"])(l,{uicontrol:"text",name:"mailPort",modelValue:e.mailPort,"onUpdate:modelValue":t[2]||(t[2]=function(t){return e.mailPort=t}),title:e.translate("General_SmtpPort"),"inline-help":e.translate("General_OptionalSmtpPort")},null,8,["modelValue","title","inline-help"]),Object(i["createVNode"])(l,{uicontrol:"select",name:"mailType",modelValue:e.mailType,"onUpdate:modelValue":t[3]||(t[3]=function(t){return e.mailType=t}),title:e.translate("General_AuthenticationMethodSmtp"),options:e.mailTypes,"inline-help":e.translate("General_OnlyUsedIfUserPwdIsSet")},null,8,["modelValue","title","options","inline-help"]),Object(i["createVNode"])(l,{uicontrol:"text",name:"mailUsername",modelValue:e.mailUsername,"onUpdate:modelValue":t[4]||(t[4]=function(t){return e.mailUsername=t}),title:e.translate("General_SmtpUsername"),"inline-help":e.translate("General_OnlyEnterIfRequired"),autocomplete:!1},null,8,["modelValue","title","inline-help"]),Object(i["createVNode"])(l,{uicontrol:"password",name:"mailPassword","model-value":e.mailPassword,"onUpdate:modelValue":t[5]||(t[5]=function(t){return e.onMailPasswordChange(t)}),onClick:t[6]||(t[6]=function(t){!e.passwordChanged&&t.target.select()}),title:e.translate("General_SmtpPassword"),"inline-help":e.passwordHelp,autocomplete:!1},null,8,["model-value","title","inline-help"]),Object(i["createVNode"])(l,{uicontrol:"text",name:"mailFromAddress",modelValue:e.mailFromAddress,"onUpdate:modelValue":t[7]||(t[7]=function(t){return e.mailFromAddress=t}),title:e.translate("General_SmtpFromAddress"),"inline-help":e.translate("General_SmtpFromEmailHelp",e.mailHost),autocomplete:!1},null,8,["modelValue","title","inline-help"]),Object(i["createVNode"])(l,{uicontrol:"text",name:"mailFromName",modelValue:e.mailFromName,"onUpdate:modelValue":t[8]||(t[8]=function(t){return e.mailFromName=t}),title:e.translate("General_SmtpFromName"),"inline-help":e.translate("General_NameShownInTheSenderColumn"),autocomplete:!1},null,8,["modelValue","title","inline-help"]),Object(i["createVNode"])(l,{uicontrol:"select",name:"mailEncryption",modelValue:e.mailEncryption,"onUpdate:modelValue":t[9]||(t[9]=function(t){return e.mailEncryption=t}),title:e.translate("General_SmtpEncryption"),options:e.mailEncryptions,"inline-help":e.translate("General_EncryptedSmtpTransport")},null,8,["modelValue","title","options","inline-help"])],512),[[i["vShow"],e.enabled]]),Object(i["createVNode"])(c,{onConfirm:t[10]||(t[10]=function(t){return e.save()}),saving:e.isLoading},null,8,["saving"])],512),[[d]])]})),_:1},8,["content-title"])}var ee=Object(i["defineComponent"])({props:{mail:{type:Object,required:!0},mailTypes:{type:Object,required:!0},mailEncryptions:{type:Object,required:!0}},data:function(){var e=this.mail;return{isLoading:!1,enabled:"smtp"===e.transport,mailHost:e.host,passwordChanged:!1,mailPort:e.port,mailType:e.type,mailUsername:e.username,mailPassword:e.password?"******":"",mailFromAddress:e.noreply_email_address,mailFromName:e.noreply_email_name,mailEncryption:e.encryption}},components:{ContentBlock:r["ContentBlock"],Field:T["Field"],SaveButton:T["SaveButton"]},directives:{Form:T["Form"]},computed:{passwordHelp:function(){var e="".concat(Object(r["translate"])("General_OnlyEnterIfRequiredPassword"),"<br/>"),t="".concat(Object(r["translate"])("General_WarningPasswordStored","<strong>","</strong>"),"<br/>");return"".concat(e,"\n").concat(t)}},methods:{onUpdateMailHost:function(e){this.mailHost=e,this.passwordChanged||(this.mailPassword="",this.passwordChanged=!0)},onMailPasswordChange:function(e){this.mailPassword=e,this.passwordChanged=!0},save:function(){var e=this;this.isLoading=!0;var t={mailUseSmtp:this.enabled?"1":"0",mailPort:this.mailPort,mailHost:this.mailHost,mailType:this.mailType,mailUsername:this.mailUsername,mailFromAddress:this.mailFromAddress,mailFromName:this.mailFromName,mailEncryption:this.mailEncryption};this.passwordChanged&&(t.mailPassword=this.mailPassword),r["AjaxHelper"].post({module:"CoreAdminHome",action:"setMailSettings"},t,{withTokenInUrl:!0}).then((function(){var e=r["NotificationsStore"].show({message:Object(r["translate"])("CoreAdminHome_SettingsSaveSuccess"),type:"transient",id:"generalSettings",context:"success"});r["NotificationsStore"].scrollToNotification(e)})).finally((function(){e.isLoading=!1}))}}});ee.render=Z;var te=ee,ne=(Object(r["createAngularJsAdapter"])({component:te,scope:{mail:{angularJsBind:"<"},mailTypes:{angularJsBind:"<"},mailEncryptions:{angularJsBind:"<"}},directiveName:"matomoSmtpSettings"}),{id:"js-code-options"}),oe=Object(i["createElementVNode"])("br",null,null,-1),ae=Object(i["createElementVNode"])("br",null,null,-1),re=["innerHTML"],ie=["innerHTML"],le=Object(i["createElementVNode"])("br",null,null,-1),ce=Object(i["createElementVNode"])("br",null,null,-1),se=["innerHTML"],de=Object(i["createElementVNode"])("br",null,null,-1),ue=Object(i["createElementVNode"])("br",null,null,-1),me=["innerHTML"],ge=Object(i["createElementVNode"])("br",null,null,-1),pe=Object(i["createElementVNode"])("br",null,null,-1),be=Object(i["createElementVNode"])("a",{href:"https://matomo.org/faq/new-to-piwik/how-do-i-install-the-matomo-tracking-code-on-wordpress/",target:"_blank",rel:"noopener"},"WordPress",-1),he=Object(i["createTextVNode"])(" | "),je=Object(i["createElementVNode"])("a",{href:"https://matomo.org/faq/new-to-piwik/how-do-i-integrate-matomo-with-squarespace-website/",target:"_blank",rel:"noopener"},"Squarespace",-1),ve=Object(i["createTextVNode"])(" | "),fe=Object(i["createElementVNode"])("a",{href:"https://matomo.org/faq/new-to-piwik/how-do-i-install-the-matomo-analytics-tracking-code-on-wix/",target:"_blank",rel:"noopener"},"Wix",-1),Oe=Object(i["createTextVNode"])(" | "),Ce=Object(i["createElementVNode"])("a",{href:"https://matomo.org/faq/how-to-install/faq_19424/",target:"_blank",rel:"noopener"},"SharePoint",-1),ke=Object(i["createTextVNode"])(" | "),Ve=Object(i["createElementVNode"])("a",{href:"https://matomo.org/faq/new-to-piwik/how-do-i-install-the-matomo-analytics-tracking-code-on-joomla/",target:"_blank",rel:"noopener"},"Joomla",-1),Se=Object(i["createTextVNode"])(" | "),Ne=Object(i["createElementVNode"])("a",{href:"https://matomo.org/faq/new-to-piwik/how-do-i-install-the-matomo-tracking-code-on-my-shopify-store/",target:"_blank",rel:"noopener"},"Shopify",-1),ye=Object(i["createTextVNode"])(" | "),Te=Object(i["createElementVNode"])("a",{href:"https://matomo.org/faq/new-to-piwik/how-do-i-use-matomo-analytics-within-gtm-google-tag-manager/",target:"_blank",rel:"noopener"},"Google Tag Manager",-1),Ae={id:"javascript-output-section"},Ee={class:"valign-wrapper trackingHelpHeader matchWidth"},we={id:"javascript-text"},_e=["textContent"],He={id:"optional-js-tracking-options"},De={id:"jsTrackAllSubdomainsInlineHelp",class:"inline-help-node"},Be=["innerHTML"],Le=["innerHTML"],Ue={id:"jsTrackGroupByDomainInlineHelp",class:"inline-help-node"},xe={id:"jsTrackAllAliasesInlineHelp",class:"inline-help-node"},Fe={id:"javascript-advanced-options"},Ie={id:"javascript-tracking-visitor-cv"},Ge={class:"row"},Pe={class:"col s12 m3"},Me={class:"col s12 m3"},Je={class:"col s12 m6 l3"},qe=["onKeydown"],Re={class:"col s12 m6 l3"},We=["onKeydown"],$e={class:"row"},Ke={class:"col s12"},ze=Object(i["createElementVNode"])("span",{class:"icon-add"},null,-1),Qe={id:"jsCrossDomain",class:"inline-help-node"},Ye=Object(i["createElementVNode"])("br",null,null,-1),Xe={id:"jsDoNotTrackInlineHelp",class:"inline-help-node"},Ze={key:0},et=Object(i["createElementVNode"])("br",null,null,-1),tt=["innerHTML"],nt={id:"js-campaign-query-param-extra"},ot={class:"row"},at={class:"col s12"},rt={class:"row"},it={class:"col s12"}; + */function Z(e,t,n,o,a,r){var l=Object(i["resolveComponent"])("Field"),c=Object(i["resolveComponent"])("SaveButton"),s=Object(i["resolveComponent"])("ContentBlock"),d=Object(i["resolveDirective"])("form");return Object(i["openBlock"])(),Object(i["createBlock"])(s,{"content-title":e.translate("CoreAdminHome_EmailServerSettings"),anchor:"mailSettings"},{default:Object(i["withCtx"])((function(){return[Object(i["withDirectives"])(Object(i["createElementVNode"])("div",null,[Object(i["createVNode"])(l,{uicontrol:"checkbox",name:"mailUseSmtp",modelValue:e.enabled,"onUpdate:modelValue":t[0]||(t[0]=function(t){return e.enabled=t}),title:e.translate("General_UseSMTPServerForEmail"),"inline-help":e.translate("General_SelectYesIfYouWantToSendEmailsViaServer")},null,8,["modelValue","title","inline-help"]),Object(i["withDirectives"])(Object(i["createElementVNode"])("div",X,[Object(i["createVNode"])(l,{uicontrol:"text",name:"mailHost","model-value":e.mailHost,"onUpdate:modelValue":t[1]||(t[1]=function(t){return e.onUpdateMailHost(t)}),title:e.translate("General_SmtpServerAddress")},null,8,["model-value","title"]),Object(i["createVNode"])(l,{uicontrol:"text",name:"mailPort",modelValue:e.mailPort,"onUpdate:modelValue":t[2]||(t[2]=function(t){return e.mailPort=t}),title:e.translate("General_SmtpPort"),"inline-help":e.translate("General_OptionalSmtpPort")},null,8,["modelValue","title","inline-help"]),Object(i["createVNode"])(l,{uicontrol:"select",name:"mailType",modelValue:e.mailType,"onUpdate:modelValue":t[3]||(t[3]=function(t){return e.mailType=t}),title:e.translate("General_AuthenticationMethodSmtp"),options:e.mailTypes,"inline-help":e.translate("General_OnlyUsedIfUserPwdIsSet")},null,8,["modelValue","title","options","inline-help"]),Object(i["createVNode"])(l,{uicontrol:"text",name:"mailUsername",modelValue:e.mailUsername,"onUpdate:modelValue":t[4]||(t[4]=function(t){return e.mailUsername=t}),title:e.translate("General_SmtpUsername"),"inline-help":e.translate("General_OnlyEnterIfRequired"),autocomplete:!1},null,8,["modelValue","title","inline-help"]),Object(i["createVNode"])(l,{uicontrol:"password",name:"mailPassword","model-value":e.mailPassword,"onUpdate:modelValue":t[5]||(t[5]=function(t){return e.onMailPasswordChange(t)}),onClick:t[6]||(t[6]=function(t){!e.passwordChanged&&t.target.select()}),title:e.translate("General_SmtpPassword"),"inline-help":e.passwordHelp,autocomplete:!1},null,8,["model-value","title","inline-help"]),Object(i["createVNode"])(l,{uicontrol:"text",name:"mailFromAddress",modelValue:e.mailFromAddress,"onUpdate:modelValue":t[7]||(t[7]=function(t){return e.mailFromAddress=t}),title:e.translate("General_SmtpFromAddress"),"inline-help":e.translate("General_SmtpFromEmailHelp",e.mailHost),autocomplete:!1},null,8,["modelValue","title","inline-help"]),Object(i["createVNode"])(l,{uicontrol:"text",name:"mailFromName",modelValue:e.mailFromName,"onUpdate:modelValue":t[8]||(t[8]=function(t){return e.mailFromName=t}),title:e.translate("General_SmtpFromName"),"inline-help":e.translate("General_NameShownInTheSenderColumn"),autocomplete:!1},null,8,["modelValue","title","inline-help"]),Object(i["createVNode"])(l,{uicontrol:"select",name:"mailEncryption",modelValue:e.mailEncryption,"onUpdate:modelValue":t[9]||(t[9]=function(t){return e.mailEncryption=t}),title:e.translate("General_SmtpEncryption"),options:e.mailEncryptions,"inline-help":e.translate("General_EncryptedSmtpTransport")},null,8,["modelValue","title","options","inline-help"])],512),[[i["vShow"],e.enabled]]),Object(i["createVNode"])(c,{onConfirm:t[10]||(t[10]=function(t){return e.save()}),saving:e.isLoading},null,8,["saving"])],512),[[d]])]})),_:1},8,["content-title"])}var ee=Object(i["defineComponent"])({props:{mail:{type:Object,required:!0},mailTypes:{type:Object,required:!0},mailEncryptions:{type:Object,required:!0}},data:function(){var e=this.mail;return{isLoading:!1,enabled:"smtp"===e.transport,mailHost:e.host,passwordChanged:!1,mailPort:e.port,mailType:e.type,mailUsername:e.username,mailPassword:e.password?"******":"",mailFromAddress:e.noreply_email_address,mailFromName:e.noreply_email_name,mailEncryption:e.encryption}},components:{ContentBlock:r["ContentBlock"],Field:T["Field"],SaveButton:T["SaveButton"]},directives:{Form:T["Form"]},computed:{passwordHelp:function(){var e="".concat(Object(r["translate"])("General_OnlyEnterIfRequiredPassword"),"<br/>"),t="".concat(Object(r["translate"])("General_WarningPasswordStored","<strong>","</strong>"),"<br/>");return"".concat(e,"\n").concat(t)}},methods:{onUpdateMailHost:function(e){this.mailHost=e,this.passwordChanged||(this.mailPassword="",this.passwordChanged=!0)},onMailPasswordChange:function(e){this.mailPassword=e,this.passwordChanged=!0},save:function(){var e=this;this.isLoading=!0;var t={mailUseSmtp:this.enabled?"1":"0",mailPort:this.mailPort,mailHost:this.mailHost,mailType:this.mailType,mailUsername:this.mailUsername,mailFromAddress:this.mailFromAddress,mailFromName:this.mailFromName,mailEncryption:this.mailEncryption};this.passwordChanged&&(t.mailPassword=this.mailPassword),r["AjaxHelper"].post({module:"CoreAdminHome",action:"setMailSettings"},t,{withTokenInUrl:!0}).then((function(){var e=r["NotificationsStore"].show({message:Object(r["translate"])("CoreAdminHome_SettingsSaveSuccess"),type:"transient",id:"generalSettings",context:"success"});r["NotificationsStore"].scrollToNotification(e)})).finally((function(){e.isLoading=!1}))}}});ee.render=Z;var te=ee,ne=(Object(r["createAngularJsAdapter"])({component:te,scope:{mail:{angularJsBind:"<"},mailTypes:{angularJsBind:"<"},mailEncryptions:{angularJsBind:"<"}},directiveName:"matomoSmtpSettings"}),{id:"js-code-options"}),oe=Object(i["createElementVNode"])("br",null,null,-1),ae=Object(i["createElementVNode"])("br",null,null,-1),re=["innerHTML"],ie=["innerHTML"],le=Object(i["createElementVNode"])("br",null,null,-1),ce=Object(i["createElementVNode"])("br",null,null,-1),se=["innerHTML"],de=Object(i["createElementVNode"])("br",null,null,-1),ue=Object(i["createElementVNode"])("br",null,null,-1),me=["innerHTML"],ge=Object(i["createElementVNode"])("br",null,null,-1),pe=Object(i["createElementVNode"])("br",null,null,-1),be=Object(i["createElementVNode"])("a",{href:"https://matomo.org/faq/new-to-piwik/how-do-i-install-the-matomo-tracking-code-on-wordpress/",target:"_blank",rel:"noopener"},"WordPress",-1),he=Object(i["createTextVNode"])(" | "),je=Object(i["createElementVNode"])("a",{href:"https://matomo.org/faq/new-to-piwik/how-do-i-integrate-matomo-with-squarespace-website/",target:"_blank",rel:"noopener"},"Squarespace",-1),ve=Object(i["createTextVNode"])(" | "),fe=Object(i["createElementVNode"])("a",{href:"https://matomo.org/faq/new-to-piwik/how-do-i-install-the-matomo-analytics-tracking-code-on-wix/",target:"_blank",rel:"noopener"},"Wix",-1),Oe=Object(i["createTextVNode"])(" | "),Ce=Object(i["createElementVNode"])("a",{href:"https://matomo.org/faq/how-to-install/faq_19424/",target:"_blank",rel:"noopener"},"SharePoint",-1),ke=Object(i["createTextVNode"])(" | "),Ve=Object(i["createElementVNode"])("a",{href:"https://matomo.org/faq/new-to-piwik/how-do-i-install-the-matomo-analytics-tracking-code-on-joomla/",target:"_blank",rel:"noopener"},"Joomla",-1),Se=Object(i["createTextVNode"])(" | "),Ne=Object(i["createElementVNode"])("a",{href:"https://matomo.org/faq/new-to-piwik/how-do-i-install-the-matomo-tracking-code-on-my-shopify-store/",target:"_blank",rel:"noopener"},"Shopify",-1),ye=Object(i["createTextVNode"])(" | "),Te=Object(i["createElementVNode"])("a",{href:"https://matomo.org/faq/new-to-piwik/how-do-i-use-matomo-analytics-within-gtm-google-tag-manager/",target:"_blank",rel:"noopener"},"Google Tag Manager",-1),Ae={id:"javascript-output-section"},Ee={class:"valign-wrapper trackingHelpHeader matchWidth"},we={id:"javascript-text"},_e=["textContent"],He={id:"optional-js-tracking-options"},De={id:"jsTrackAllSubdomainsInlineHelp",class:"inline-help-node"},Be=["innerHTML"],Le=["innerHTML"],xe={id:"jsTrackGroupByDomainInlineHelp",class:"inline-help-node"},Ue={id:"jsTrackAllAliasesInlineHelp",class:"inline-help-node"},Fe={id:"javascript-advanced-options"},Ie={id:"javascript-tracking-visitor-cv"},Ge={class:"row"},Pe={class:"col s12 m3"},Me={class:"col s12 m3"},Je={class:"col s12 m6 l3"},qe=["onKeydown"],Re={class:"col s12 m6 l3"},We=["onKeydown"],$e={class:"row"},Ke={class:"col s12"},ze=Object(i["createElementVNode"])("span",{class:"icon-add"},null,-1),Qe={id:"jsCrossDomain",class:"inline-help-node"},Ye=Object(i["createElementVNode"])("br",null,null,-1),Xe={id:"jsDoNotTrackInlineHelp",class:"inline-help-node"},Ze={key:0},et=Object(i["createElementVNode"])("br",null,null,-1),tt=["innerHTML"],nt={id:"js-campaign-query-param-extra"},ot={class:"row"},at={class:"col s12"},rt={class:"row"},it={class:"col s12"}; /*! * Matomo - free/libre analytics platform * * @link https://matomo.org * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later - */function lt(e,t,n,o,a,r){var l=Object(i["resolveComponent"])("Field"),c=Object(i["resolveComponent"])("ContentBlock"),s=Object(i["resolveDirective"])("select-on-focus");return Object(i["openBlock"])(),Object(i["createBlock"])(c,{anchor:"javaScriptTracking","content-title":e.translate("CoreAdminHome_JavaScriptTracking")},{default:Object(i["withCtx"])((function(){return[Object(i["createElementVNode"])("div",ne,[Object(i["createElementVNode"])("p",null,[Object(i["createTextVNode"])(Object(i["toDisplayString"])(e.translate("CoreAdminHome_JSTrackingIntro1"))+" ",1),oe,ae,Object(i["createTextVNode"])(" "+Object(i["toDisplayString"])(e.translate("CoreAdminHome_JSTrackingIntro2"))+" ",1),Object(i["createElementVNode"])("span",{innerHTML:e.$sanitize(e.jsTrackingIntro3a)},null,8,re),Object(i["createElementVNode"])("span",{innerHTML:e.$sanitize(" "+e.jsTrackingIntro3b)},null,8,ie),le,ce,Object(i["createElementVNode"])("span",{innerHTML:e.$sanitize(e.jsTrackingIntro4a)},null,8,se),de,ue,Object(i["createElementVNode"])("span",{innerHTML:e.$sanitize(e.jsTrackingIntro5)},null,8,me),ge,pe,Object(i["createTextVNode"])(" "+Object(i["toDisplayString"])(e.translate("SitesManager_InstallationGuides"))+" : ",1),be,he,je,ve,fe,Oe,Ce,ke,Ve,Se,Ne,ye,Te]),Object(i["createVNode"])(l,{uicontrol:"site",name:"js-tracker-website",class:"jsTrackingCodeWebsite",modelValue:e.site,"onUpdate:modelValue":t[0]||(t[0]=function(t){return e.site=t}),introduction:e.translate("General_Website")},null,8,["modelValue","introduction"]),Object(i["createElementVNode"])("div",Ae,[Object(i["createElementVNode"])("div",Ee,[Object(i["createElementVNode"])("div",null,[Object(i["createElementVNode"])("h3",null,Object(i["toDisplayString"])(e.translate("General_JsTrackingTag")),1),Object(i["createElementVNode"])("p",null,Object(i["toDisplayString"])(e.translate("CoreAdminHome_JSTracking_CodeNoteBeforeClosingHead","</head>")),1)]),Object(i["createElementVNode"])("button",{class:"btn",id:"emailJsBtn",onClick:t[1]||(t[1]=function(t){return e.sendEmail()})},Object(i["toDisplayString"])(e.translate("SitesManager_EmailInstructionsButton")),1)]),Object(i["createElementVNode"])("div",we,[Object(i["withDirectives"])(Object(i["createElementVNode"])("pre",{class:"codeblock",textContent:Object(i["toDisplayString"])(e.trackingCode),ref:"trackingCode"},null,8,_e),[[s,{}]])])]),Object(i["createElementVNode"])("div",He,[Object(i["createElementVNode"])("div",De,[Object(i["createElementVNode"])("span",{innerHTML:e.$sanitize(e.mergeSubdomainsDesc)},null,8,Be),Object(i["createElementVNode"])("span",{innerHTML:e.$sanitize(e.learnMoreText)},null,8,Le)]),Object(i["createVNode"])(l,{uicontrol:"checkbox",name:"javascript-tracking-all-subdomains","model-value":e.trackAllSubdomains,"onUpdate:modelValue":t[2]||(t[2]=function(t){e.trackAllSubdomains=t,e.updateTrackingCode()}),disabled:e.isLoading,introduction:e.translate("General_Options"),title:"".concat(e.translate("CoreAdminHome_JSTracking_MergeSubdomains")," ").concat(e.currentSiteName),"inline-help":"#jsTrackAllSubdomainsInlineHelp"},null,8,["model-value","disabled","introduction","title"])]),Object(i["createElementVNode"])("div",Ue,Object(i["toDisplayString"])(e.translate("CoreAdminHome_JSTracking_GroupPageTitlesByDomainDesc1",e.currentSiteHost)),1),Object(i["createVNode"])(l,{uicontrol:"checkbox",name:"javascript-tracking-group-by-domain","model-value":e.groupByDomain,"onUpdate:modelValue":t[3]||(t[3]=function(t){e.groupByDomain=t,e.updateTrackingCode()}),disabled:e.isLoading,title:e.translate("CoreAdminHome_JSTracking_GroupPageTitlesByDomain"),"inline-help":"#jsTrackGroupByDomainInlineHelp"},null,8,["model-value","disabled","title"]),Object(i["createElementVNode"])("div",xe,Object(i["toDisplayString"])(e.translate("CoreAdminHome_JSTracking_MergeAliasesDesc",e.currentSiteAlias)),1),Object(i["createVNode"])(l,{uicontrol:"checkbox",name:"javascript-tracking-all-aliases","model-value":e.trackAllAliases,"onUpdate:modelValue":t[4]||(t[4]=function(t){e.trackAllAliases=t,e.updateTrackingCode()}),disabled:e.isLoading,title:"".concat(e.translate("CoreAdminHome_JSTracking_MergeAliases")," ").concat(e.currentSiteName),"inline-help":"#jsTrackAllAliasesInlineHelp"},null,8,["model-value","disabled","title"])]),Object(i["createVNode"])(l,{uicontrol:"checkbox",name:"javascript-tracking-noscript","model-value":e.trackNoScript,"onUpdate:modelValue":t[5]||(t[5]=function(t){e.trackNoScript=t,e.updateTrackingCode()}),disabled:e.isLoading,title:e.translate("CoreAdminHome_JSTracking_TrackNoScript")},null,8,["model-value","disabled","title"]),Object(i["createElementVNode"])("h3",null,Object(i["toDisplayString"])(e.translate("Mobile_Advanced")),1),Object(i["createElementVNode"])("p",null,[Object(i["withDirectives"])(Object(i["createElementVNode"])("a",{href:"javascript:;",onClick:t[6]||(t[6]=Object(i["withModifiers"])((function(t){return e.showAdvanced=!0}),["prevent"]))},Object(i["toDisplayString"])(e.translate("General_Show")),513),[[i["vShow"],!e.showAdvanced]]),Object(i["withDirectives"])(Object(i["createElementVNode"])("a",{href:"javascript:;",onClick:t[7]||(t[7]=Object(i["withModifiers"])((function(t){return e.showAdvanced=!1}),["prevent"]))},Object(i["toDisplayString"])(e.translate("General_Hide")),513),[[i["vShow"],e.showAdvanced]])]),Object(i["withDirectives"])(Object(i["createElementVNode"])("div",Fe,[Object(i["createVNode"])(l,{uicontrol:"checkbox",name:"javascript-tracking-visitor-cv-check","model-value":e.trackCustomVars,"onUpdate:modelValue":t[8]||(t[8]=function(t){e.trackCustomVars=t,e.updateTrackingCode()}),disabled:e.isLoading,title:e.translate("CoreAdminHome_JSTracking_VisitorCustomVars"),"inline-help":e.translate("CoreAdminHome_JSTracking_VisitorCustomVarsDesc")},null,8,["model-value","disabled","title","inline-help"]),Object(i["withDirectives"])(Object(i["createElementVNode"])("div",Ie,[Object(i["createElementVNode"])("div",Ge,[Object(i["createElementVNode"])("div",Pe,Object(i["toDisplayString"])(e.translate("General_Name")),1),Object(i["createElementVNode"])("div",Me,Object(i["toDisplayString"])(e.translate("General_Value")),1)]),(Object(i["openBlock"])(!0),Object(i["createElementBlock"])(i["Fragment"],null,Object(i["renderList"])(e.customVars,(function(t,n){return Object(i["openBlock"])(),Object(i["createElementBlock"])("div",{class:"row",key:n},[Object(i["createElementVNode"])("div",Je,[Object(i["createElementVNode"])("input",{type:"text",class:"custom-variable-name",onKeydown:function(t){return e.onCustomVarNameKeydown(t,n)},placeholder:"e.g. Type"},null,40,qe)]),Object(i["createElementVNode"])("div",Re,[Object(i["createElementVNode"])("input",{type:"text",class:"custom-variable-value",onKeydown:function(t){return e.onCustomVarValueKeydown(t,n)},placeholder:"e.g. Customer"},null,40,We)])])})),128)),Object(i["withDirectives"])(Object(i["createElementVNode"])("div",$e,[Object(i["createElementVNode"])("div",Ke,[Object(i["createElementVNode"])("a",{href:"javascript:;",onClick:t[9]||(t[9]=function(t){return e.addCustomVar()}),class:"add-custom-variable"},[ze,Object(i["createTextVNode"])(" "+Object(i["toDisplayString"])(e.translate("General_Add")),1)])])],512),[[i["vShow"],e.canAddMoreCustomVariables]])],512),[[i["vShow"],e.trackCustomVars]]),Object(i["createElementVNode"])("div",Qe,[Object(i["createTextVNode"])(Object(i["toDisplayString"])(e.translate("CoreAdminHome_JSTracking_CrossDomain"))+" ",1),Ye,Object(i["createTextVNode"])(" "+Object(i["toDisplayString"])(e.translate("CoreAdminHome_JSTracking_CrossDomain_NeedsMultipleDomains")),1)]),Object(i["createVNode"])(l,{uicontrol:"checkbox",name:"javascript-tracking-cross-domain","model-value":e.crossDomain,"onUpdate:modelValue":t[10]||(t[10]=function(t){e.crossDomain=t,e.updateTrackingCode(),e.onCrossDomainToggle()}),disabled:e.isLoading||!e.hasManySiteUrls,title:e.translate("CoreAdminHome_JSTracking_EnableCrossDomainLinking"),"inline-help":"#jsCrossDomain"},null,8,["model-value","disabled","title"]),Object(i["createElementVNode"])("div",Xe,[Object(i["createTextVNode"])(Object(i["toDisplayString"])(e.translate("CoreAdminHome_JSTracking_EnableDoNotTrackDesc"))+" ",1),e.serverSideDoNotTrackEnabled?(Object(i["openBlock"])(),Object(i["createElementBlock"])("span",Ze,[et,Object(i["createTextVNode"])(" "+Object(i["toDisplayString"])(e.translate("CoreAdminHome_JSTracking_EnableDoNotTrack_AlreadyEnabled")),1)])):Object(i["createCommentVNode"])("",!0)]),Object(i["createVNode"])(l,{uicontrol:"checkbox",name:"javascript-tracking-do-not-track","model-value":e.doNotTrack,"onUpdate:modelValue":t[11]||(t[11]=function(t){e.doNotTrack=t,e.updateTrackingCode()}),disabled:e.isLoading,title:e.translate("CoreAdminHome_JSTracking_EnableDoNotTrack"),"inline-help":"#jsDoNotTrackInlineHelp"},null,8,["model-value","disabled","title"]),Object(i["createVNode"])(l,{uicontrol:"checkbox",name:"javascript-tracking-disable-cookies","model-value":e.disableCookies,"onUpdate:modelValue":t[12]||(t[12]=function(t){e.disableCookies=t,e.updateTrackingCode()}),disabled:e.isLoading,title:e.translate("CoreAdminHome_JSTracking_DisableCookies"),"inline-help":e.translate("CoreAdminHome_JSTracking_DisableCookiesDesc")},null,8,["model-value","disabled","title","inline-help"]),Object(i["createElementVNode"])("div",{id:"jsTrackCampaignParamsInlineHelp",class:"inline-help-node",innerHTML:e.$sanitize(e.jsTrackCampaignParamsInlineHelp)},null,8,tt),Object(i["createVNode"])(l,{uicontrol:"checkbox",name:"custom-campaign-query-params-check","model-value":e.useCustomCampaignParams,"onUpdate:modelValue":t[13]||(t[13]=function(t){e.useCustomCampaignParams=t,e.updateTrackingCode()}),disabled:e.isLoading,title:e.translate("CoreAdminHome_JSTracking_CustomCampaignQueryParam"),"inline-help":"#jsTrackCampaignParamsInlineHelp"},null,8,["model-value","disabled","title"]),Object(i["withDirectives"])(Object(i["createElementVNode"])("div",nt,[Object(i["createElementVNode"])("div",ot,[Object(i["createElementVNode"])("div",at,[Object(i["createVNode"])(l,{uicontrol:"text",name:"custom-campaign-name-query-param","model-value":e.customCampaignName,"onUpdate:modelValue":t[14]||(t[14]=function(t){e.customCampaignName=t,e.updateTrackingCode()}),disabled:e.isLoading,title:e.translate("CoreAdminHome_JSTracking_CampaignNameParam")},null,8,["model-value","disabled","title"])])]),Object(i["createElementVNode"])("div",rt,[Object(i["createElementVNode"])("div",it,[Object(i["createVNode"])(l,{uicontrol:"text",name:"custom-campaign-keyword-query-param","model-value":e.customCampaignKeyword,"onUpdate:modelValue":t[15]||(t[15]=function(t){e.customCampaignKeyword=t,e.updateTrackingCode()}),disabled:e.isLoading,title:e.translate("CoreAdminHome_JSTracking_CampaignKwdParam")},null,8,["model-value","disabled","title"])])])],512),[[i["vShow"],e.useCustomCampaignParams]])],512),[[i["vShow"],e.showAdvanced]])]})),_:1},8,["content-title"])}function ct(e){var t=new URL(e);return t.hostname}function st(e){return e.map((function(e){return[e.name,e.value]}))}var dt=window,ut=dt.$,mt=window.location.host,gt=window.location.pathname.substring(0,window.location.pathname.lastIndexOf("/")),pt=Object(i["defineComponent"])({props:{defaultSite:{type:Object,required:!0},maxCustomVariables:Number,serverSideDoNotTrackEnabled:Boolean},data:function(){return{showAdvanced:!1,site:this.defaultSite,trackingCode:"",trackAllSubdomains:!1,isLoading:!1,siteUrls:{},siteExcludedQueryParams:{},crossDomain:!1,groupByDomain:!1,trackAllAliases:!1,trackNoScript:!1,trackCustomVars:!1,customVars:[],canAddMoreCustomVariables:!!this.maxCustomVariables&&this.maxCustomVariables>0,doNotTrack:!1,disableCookies:!1,useCustomCampaignParams:!1,customCampaignName:"",customCampaignKeyword:"",trackingCodeAbortController:null,isHighlighting:!1}},components:{ContentBlock:r["ContentBlock"],Field:T["Field"]},directives:{SelectOnFocus:r["SelectOnFocus"]},created:function(){this.onCustomVarNameKeydown=Object(r["debounce"])(this.onCustomVarNameKeydown,100),this.onCustomVarValueKeydown=Object(r["debounce"])(this.onCustomVarValueKeydown,100),this.addCustomVar(),this.site&&this.site.id&&this.onSiteChanged(this.site)},watch:{site:function(e){this.onSiteChanged(e)}},methods:{onSiteChanged:function(e){var t=this,n=e.id,o=[];this.siteUrls[n]||(this.isLoading=!0,o.push(r["AjaxHelper"].fetch({module:"API",method:"SitesManager.getSiteUrlsFromId",idSite:n,filter_limit:"-1"}).then((function(e){t.siteUrls[n]=e||[]})))),this.siteExcludedQueryParams[n]||(this.isLoading=!0,o.push(r["AjaxHelper"].fetch({module:"API",method:"Overlay.getExcludedQueryParameters",idSite:n,filter_limit:"-1"}).then((function(e){t.siteExcludedQueryParams[n]=e||[]})))),Promise.all(o).then((function(){t.isLoading=!1,t.updateCurrentSiteInfo(),t.updateTrackingCode()}))},sendEmail:function(){var e=Object(r["translate"])("SitesManager_EmailInstructionsSubject");e=encodeURIComponent(e);var t=this.trackingCode;t=t.replace(/<[^>]+>/g,"");var n="".concat(Object(r["translate"])("SitesManager_JsTrackingTagHelp"),". ").concat(Object(r["translate"])("CoreAdminHome_JSTracking_CodeNoteBeforeClosingHeadEmail","'head"),"\n").concat(t);n=encodeURIComponent(n);var o="mailto:?subject=".concat(e,"&body=").concat(n);window.location.href=o},onCrossDomainToggle:function(){this.crossDomain&&(this.trackAllAliases=!0)},updateTrackingCode:function(){var e=this,t=this.site,n={piwikUrl:"".concat(mt).concat(gt),groupPageTitlesByDomain:this.groupByDomain?1:0,mergeSubdomains:this.trackAllSubdomains?1:0,mergeAliasUrls:this.trackAllAliases?1:0,visitorCustomVariables:this.trackCustomVars?st(this.customVars):0,customCampaignNameQueryParam:null,customCampaignKeywordParam:null,doNotTrack:this.doNotTrack?1:0,disableCookies:this.disableCookies?1:0,crossDomain:this.crossDomain?1:0,trackNoScript:this.trackNoScript?1:0,forceMatomoEndpoint:1};this.siteExcludedQueryParams[t.id]&&(n.excludedQueryParams=this.siteExcludedQueryParams[t.id]),this.useCustomCampaignParams&&(n.customCampaignNameQueryParam=this.customCampaignName,n.customCampaignKeywordParam=this.customCampaignKeyword),this.trackingCodeAbortController&&(this.trackingCodeAbortController.abort(),this.trackingCodeAbortController=null),this.trackingCodeAbortController=new AbortController,r["AjaxHelper"].post({module:"API",format:"json",method:"SitesManager.getJavascriptTag",idSite:t.id},n,{abortController:this.trackingCodeAbortController}).then((function(t){e.trackingCodeAbortController=null,e.trackingCode=t.value;var n=ut(e.$refs.trackingCode);n&&!e.isHighlighting&&(e.isHighlighting=!0,n.effect("highlight",{complete:function(){e.isHighlighting=!1}},1500))}))},updateCurrentSiteInfo:function(){this.hasManySiteUrls||(this.crossDomain=!1)},addCustomVar:function(){this.canAddMoreCustomVariables&&this.customVars.push({name:"",value:""}),this.canAddMoreCustomVariables=!!this.maxCustomVariables&&this.maxCustomVariables>this.customVars.length},onCustomVarNameKeydown:function(e,t){var n=this;setTimeout((function(){n.customVars[t].name=e.target.value,n.updateTrackingCode()}))},onCustomVarValueKeydown:function(e,t){var n=this;setTimeout((function(){n.customVars[t].value=e.target.value,n.updateTrackingCode()}))}},computed:{hasManySiteUrls:function(){var e=this.site;return this.siteUrls[e.id]&&this.siteUrls[e.id].length>1},currentSiteHost:function(){var e,t=null===(e=this.siteUrls[this.site.id])||void 0===e?void 0:e[0];return t?ct(t):""},currentSiteAlias:function(){var e,t="x.".concat(this.currentSiteHost),n=null===(e=this.siteUrls[this.site.id])||void 0===e?void 0:e[1];return n||t},currentSiteName:function(){return r["Matomo"].helper.htmlEntities(this.site.name)},jsTrackingIntro3a:function(){return Object(r["translate"])("CoreAdminHome_JSTrackingIntro3a",'<a href="https://matomo.org/integrate/" rel="noreferrer noopener" target="_blank">',"</a>")},jsTrackingIntro3b:function(){return Object(r["translate"])("CoreAdminHome_JSTrackingIntro3b")},jsTrackingIntro4a:function(){return Object(r["translate"])("CoreAdminHome_JSTrackingIntro4",'<a href="#image-tracking-link">',"</a>")},jsTrackingIntro5:function(){return Object(r["translate"])("CoreAdminHome_JSTrackingIntro5",'<a rel="noreferrer noopener" target="_blank" href="https://developer.matomo.org/guides/tracking-javascript-guide">',"</a>")},mergeSubdomainsDesc:function(){return Object(r["translate"])("CoreAdminHome_JSTracking_MergeSubdomainsDesc","x.".concat(this.currentSiteHost),"y.".concat(this.currentSiteHost))},learnMoreText:function(){var e="https://developer.matomo.org/guides/tracking-javascript-guide#measuring-domains-andor-sub-domains";return Object(r["translate"])("General_LearnMore",' (<a href="'.concat(e,'" rel="noreferrer noopener" target="_blank">'),"</a>)")},jsTrackCampaignParamsInlineHelp:function(){return Object(r["translate"])("CoreAdminHome_JSTracking_CustomCampaignQueryParamDesc",'<a href="https://matomo.org/faq/general/faq_119" rel="noreferrer noopener" target="_blank">',"</a>")}}});pt.render=lt;var bt=pt,ht=(Object(r["createAngularJsAdapter"])({component:bt,scope:{defaultSite:{angularJsBind:"<"},maxCustomVariables:{angularJsBind:"<"},serverSideDoNotTrackEnabled:{angularJsBind:"<"}},directiveName:"matomoJsTrackingCodeGenerator"}),Object(i["createElementVNode"])("a",{name:"image-tracking-link"},null,-1)),jt={id:"image-tracking-code-options"},vt=["innerHTML"],ft=["innerHTML"],Ot={id:"image-tracking-goal-sub"},Ct={class:"row"},kt={class:"col s12 m6"},Vt={class:"col s12 m6"},St={id:"image-link-output-section"},Nt={id:"image-tracking-text"},yt=["textContent"]; + */function lt(e,t,n,o,a,r){var l=Object(i["resolveComponent"])("Field"),c=Object(i["resolveComponent"])("ContentBlock"),s=Object(i["resolveDirective"])("select-on-focus");return Object(i["openBlock"])(),Object(i["createBlock"])(c,{anchor:"javaScriptTracking","content-title":e.translate("CoreAdminHome_JavaScriptTracking")},{default:Object(i["withCtx"])((function(){return[Object(i["createElementVNode"])("div",ne,[Object(i["createElementVNode"])("p",null,[Object(i["createTextVNode"])(Object(i["toDisplayString"])(e.translate("CoreAdminHome_JSTrackingIntro1"))+" ",1),oe,ae,Object(i["createTextVNode"])(" "+Object(i["toDisplayString"])(e.translate("CoreAdminHome_JSTrackingIntro2"))+" ",1),Object(i["createElementVNode"])("span",{innerHTML:e.$sanitize(e.jsTrackingIntro3a)},null,8,re),Object(i["createElementVNode"])("span",{innerHTML:e.$sanitize(" "+e.jsTrackingIntro3b)},null,8,ie),le,ce,Object(i["createElementVNode"])("span",{innerHTML:e.$sanitize(e.jsTrackingIntro4a)},null,8,se),de,ue,Object(i["createElementVNode"])("span",{innerHTML:e.$sanitize(e.jsTrackingIntro5)},null,8,me),ge,pe,Object(i["createTextVNode"])(" "+Object(i["toDisplayString"])(e.translate("SitesManager_InstallationGuides"))+" : ",1),be,he,je,ve,fe,Oe,Ce,ke,Ve,Se,Ne,ye,Te]),Object(i["createVNode"])(l,{uicontrol:"site",name:"js-tracker-website",class:"jsTrackingCodeWebsite",modelValue:e.site,"onUpdate:modelValue":t[0]||(t[0]=function(t){return e.site=t}),introduction:e.translate("General_Website")},null,8,["modelValue","introduction"]),Object(i["createElementVNode"])("div",Ae,[Object(i["createElementVNode"])("div",Ee,[Object(i["createElementVNode"])("div",null,[Object(i["createElementVNode"])("h3",null,Object(i["toDisplayString"])(e.translate("General_JsTrackingTag")),1),Object(i["createElementVNode"])("p",null,Object(i["toDisplayString"])(e.translate("CoreAdminHome_JSTracking_CodeNoteBeforeClosingHead","</head>")),1)]),Object(i["createElementVNode"])("button",{class:"btn",id:"emailJsBtn",onClick:t[1]||(t[1]=function(t){return e.sendEmail()})},Object(i["toDisplayString"])(e.translate("SitesManager_EmailInstructionsButton")),1)]),Object(i["createElementVNode"])("div",we,[Object(i["withDirectives"])(Object(i["createElementVNode"])("pre",{class:"codeblock",textContent:Object(i["toDisplayString"])(e.trackingCode),ref:"trackingCode"},null,8,_e),[[s,{}]])])]),Object(i["createElementVNode"])("div",He,[Object(i["createElementVNode"])("div",De,[Object(i["createElementVNode"])("span",{innerHTML:e.$sanitize(e.mergeSubdomainsDesc)},null,8,Be),Object(i["createElementVNode"])("span",{innerHTML:e.$sanitize(e.learnMoreText)},null,8,Le)]),Object(i["createVNode"])(l,{uicontrol:"checkbox",name:"javascript-tracking-all-subdomains","model-value":e.trackAllSubdomains,"onUpdate:modelValue":t[2]||(t[2]=function(t){e.trackAllSubdomains=t,e.updateTrackingCode()}),disabled:e.isLoading,introduction:e.translate("General_Options"),title:"".concat(e.translate("CoreAdminHome_JSTracking_MergeSubdomains")," ").concat(e.currentSiteName),"inline-help":"#jsTrackAllSubdomainsInlineHelp"},null,8,["model-value","disabled","introduction","title"])]),Object(i["createElementVNode"])("div",xe,Object(i["toDisplayString"])(e.translate("CoreAdminHome_JSTracking_GroupPageTitlesByDomainDesc1",e.currentSiteHost)),1),Object(i["createVNode"])(l,{uicontrol:"checkbox",name:"javascript-tracking-group-by-domain","model-value":e.groupByDomain,"onUpdate:modelValue":t[3]||(t[3]=function(t){e.groupByDomain=t,e.updateTrackingCode()}),disabled:e.isLoading,title:e.translate("CoreAdminHome_JSTracking_GroupPageTitlesByDomain"),"inline-help":"#jsTrackGroupByDomainInlineHelp"},null,8,["model-value","disabled","title"]),Object(i["createElementVNode"])("div",Ue,Object(i["toDisplayString"])(e.translate("CoreAdminHome_JSTracking_MergeAliasesDesc",e.currentSiteAlias)),1),Object(i["createVNode"])(l,{uicontrol:"checkbox",name:"javascript-tracking-all-aliases","model-value":e.trackAllAliases,"onUpdate:modelValue":t[4]||(t[4]=function(t){e.trackAllAliases=t,e.updateTrackingCode()}),disabled:e.isLoading,title:"".concat(e.translate("CoreAdminHome_JSTracking_MergeAliases")," ").concat(e.currentSiteName),"inline-help":"#jsTrackAllAliasesInlineHelp"},null,8,["model-value","disabled","title"])]),Object(i["createVNode"])(l,{uicontrol:"checkbox",name:"javascript-tracking-noscript","model-value":e.trackNoScript,"onUpdate:modelValue":t[5]||(t[5]=function(t){e.trackNoScript=t,e.updateTrackingCode()}),disabled:e.isLoading,title:e.translate("CoreAdminHome_JSTracking_TrackNoScript")},null,8,["model-value","disabled","title"]),Object(i["createElementVNode"])("h3",null,Object(i["toDisplayString"])(e.translate("Mobile_Advanced")),1),Object(i["createElementVNode"])("p",null,[Object(i["withDirectives"])(Object(i["createElementVNode"])("a",{href:"javascript:;",onClick:t[6]||(t[6]=Object(i["withModifiers"])((function(t){return e.showAdvanced=!0}),["prevent"]))},Object(i["toDisplayString"])(e.translate("General_Show")),513),[[i["vShow"],!e.showAdvanced]]),Object(i["withDirectives"])(Object(i["createElementVNode"])("a",{href:"javascript:;",onClick:t[7]||(t[7]=Object(i["withModifiers"])((function(t){return e.showAdvanced=!1}),["prevent"]))},Object(i["toDisplayString"])(e.translate("General_Hide")),513),[[i["vShow"],e.showAdvanced]])]),Object(i["withDirectives"])(Object(i["createElementVNode"])("div",Fe,[Object(i["createVNode"])(l,{uicontrol:"checkbox",name:"javascript-tracking-visitor-cv-check","model-value":e.trackCustomVars,"onUpdate:modelValue":t[8]||(t[8]=function(t){e.trackCustomVars=t,e.updateTrackingCode()}),disabled:e.isLoading,title:e.translate("CoreAdminHome_JSTracking_VisitorCustomVars"),"inline-help":e.translate("CoreAdminHome_JSTracking_VisitorCustomVarsDesc")},null,8,["model-value","disabled","title","inline-help"]),Object(i["withDirectives"])(Object(i["createElementVNode"])("div",Ie,[Object(i["createElementVNode"])("div",Ge,[Object(i["createElementVNode"])("div",Pe,Object(i["toDisplayString"])(e.translate("General_Name")),1),Object(i["createElementVNode"])("div",Me,Object(i["toDisplayString"])(e.translate("General_Value")),1)]),(Object(i["openBlock"])(!0),Object(i["createElementBlock"])(i["Fragment"],null,Object(i["renderList"])(e.customVars,(function(t,n){return Object(i["openBlock"])(),Object(i["createElementBlock"])("div",{class:"row",key:n},[Object(i["createElementVNode"])("div",Je,[Object(i["createElementVNode"])("input",{type:"text",class:"custom-variable-name",onKeydown:function(t){return e.onCustomVarNameKeydown(t,n)},placeholder:"e.g. Type"},null,40,qe)]),Object(i["createElementVNode"])("div",Re,[Object(i["createElementVNode"])("input",{type:"text",class:"custom-variable-value",onKeydown:function(t){return e.onCustomVarValueKeydown(t,n)},placeholder:"e.g. Customer"},null,40,We)])])})),128)),Object(i["withDirectives"])(Object(i["createElementVNode"])("div",$e,[Object(i["createElementVNode"])("div",Ke,[Object(i["createElementVNode"])("a",{href:"javascript:;",onClick:t[9]||(t[9]=function(t){return e.addCustomVar()}),class:"add-custom-variable"},[ze,Object(i["createTextVNode"])(" "+Object(i["toDisplayString"])(e.translate("General_Add")),1)])])],512),[[i["vShow"],e.canAddMoreCustomVariables]])],512),[[i["vShow"],e.trackCustomVars]]),Object(i["createElementVNode"])("div",Qe,[Object(i["createTextVNode"])(Object(i["toDisplayString"])(e.translate("CoreAdminHome_JSTracking_CrossDomain"))+" ",1),Ye,Object(i["createTextVNode"])(" "+Object(i["toDisplayString"])(e.translate("CoreAdminHome_JSTracking_CrossDomain_NeedsMultipleDomains")),1)]),Object(i["createVNode"])(l,{uicontrol:"checkbox",name:"javascript-tracking-cross-domain","model-value":e.crossDomain,"onUpdate:modelValue":t[10]||(t[10]=function(t){e.crossDomain=t,e.updateTrackingCode(),e.onCrossDomainToggle()}),disabled:e.isLoading||!e.hasManySiteUrls,title:e.translate("CoreAdminHome_JSTracking_EnableCrossDomainLinking"),"inline-help":"#jsCrossDomain"},null,8,["model-value","disabled","title"]),Object(i["createElementVNode"])("div",Xe,[Object(i["createTextVNode"])(Object(i["toDisplayString"])(e.translate("CoreAdminHome_JSTracking_EnableDoNotTrackDesc"))+" ",1),e.serverSideDoNotTrackEnabled?(Object(i["openBlock"])(),Object(i["createElementBlock"])("span",Ze,[et,Object(i["createTextVNode"])(" "+Object(i["toDisplayString"])(e.translate("CoreAdminHome_JSTracking_EnableDoNotTrack_AlreadyEnabled")),1)])):Object(i["createCommentVNode"])("",!0)]),Object(i["createVNode"])(l,{uicontrol:"checkbox",name:"javascript-tracking-do-not-track","model-value":e.doNotTrack,"onUpdate:modelValue":t[11]||(t[11]=function(t){e.doNotTrack=t,e.updateTrackingCode()}),disabled:e.isLoading,title:e.translate("CoreAdminHome_JSTracking_EnableDoNotTrack"),"inline-help":"#jsDoNotTrackInlineHelp"},null,8,["model-value","disabled","title"]),Object(i["createVNode"])(l,{uicontrol:"checkbox",name:"javascript-tracking-disable-cookies","model-value":e.disableCookies,"onUpdate:modelValue":t[12]||(t[12]=function(t){e.disableCookies=t,e.updateTrackingCode()}),disabled:e.isLoading,title:e.translate("CoreAdminHome_JSTracking_DisableCookies"),"inline-help":e.translate("CoreAdminHome_JSTracking_DisableCookiesDesc")},null,8,["model-value","disabled","title","inline-help"]),Object(i["createElementVNode"])("div",{id:"jsTrackCampaignParamsInlineHelp",class:"inline-help-node",innerHTML:e.$sanitize(e.jsTrackCampaignParamsInlineHelp)},null,8,tt),Object(i["createVNode"])(l,{uicontrol:"checkbox",name:"custom-campaign-query-params-check","model-value":e.useCustomCampaignParams,"onUpdate:modelValue":t[13]||(t[13]=function(t){e.useCustomCampaignParams=t,e.updateTrackingCode()}),disabled:e.isLoading,title:e.translate("CoreAdminHome_JSTracking_CustomCampaignQueryParam"),"inline-help":"#jsTrackCampaignParamsInlineHelp"},null,8,["model-value","disabled","title"]),Object(i["withDirectives"])(Object(i["createElementVNode"])("div",nt,[Object(i["createElementVNode"])("div",ot,[Object(i["createElementVNode"])("div",at,[Object(i["createVNode"])(l,{uicontrol:"text",name:"custom-campaign-name-query-param","model-value":e.customCampaignName,"onUpdate:modelValue":t[14]||(t[14]=function(t){e.customCampaignName=t,e.updateTrackingCode()}),disabled:e.isLoading,title:e.translate("CoreAdminHome_JSTracking_CampaignNameParam")},null,8,["model-value","disabled","title"])])]),Object(i["createElementVNode"])("div",rt,[Object(i["createElementVNode"])("div",it,[Object(i["createVNode"])(l,{uicontrol:"text",name:"custom-campaign-keyword-query-param","model-value":e.customCampaignKeyword,"onUpdate:modelValue":t[15]||(t[15]=function(t){e.customCampaignKeyword=t,e.updateTrackingCode()}),disabled:e.isLoading,title:e.translate("CoreAdminHome_JSTracking_CampaignKwdParam")},null,8,["model-value","disabled","title"])])])],512),[[i["vShow"],e.useCustomCampaignParams]])],512),[[i["vShow"],e.showAdvanced]])]})),_:1},8,["content-title"])}function ct(e){var t=new URL(e);return t.hostname}function st(e){return e.map((function(e){return[e.name,e.value]}))}var dt=window,ut=dt.$,mt=window.location.host,gt=window.location.pathname.substring(0,window.location.pathname.lastIndexOf("/")),pt=Object(i["defineComponent"])({props:{defaultSite:{type:Object,required:!0},maxCustomVariables:Number,serverSideDoNotTrackEnabled:Boolean},data:function(){return{showAdvanced:!1,site:this.defaultSite,trackingCode:"",trackAllSubdomains:!1,isLoading:!1,siteUrls:{},siteExcludedQueryParams:{},siteExcludedReferrers:{},crossDomain:!1,groupByDomain:!1,trackAllAliases:!1,trackNoScript:!1,trackCustomVars:!1,customVars:[],canAddMoreCustomVariables:!!this.maxCustomVariables&&this.maxCustomVariables>0,doNotTrack:!1,disableCookies:!1,useCustomCampaignParams:!1,customCampaignName:"",customCampaignKeyword:"",trackingCodeAbortController:null,isHighlighting:!1}},components:{ContentBlock:r["ContentBlock"],Field:T["Field"]},directives:{SelectOnFocus:r["SelectOnFocus"]},created:function(){this.onCustomVarNameKeydown=Object(r["debounce"])(this.onCustomVarNameKeydown,100),this.onCustomVarValueKeydown=Object(r["debounce"])(this.onCustomVarValueKeydown,100),this.addCustomVar(),this.site&&this.site.id&&this.onSiteChanged(this.site)},watch:{site:function(e){this.onSiteChanged(e)}},methods:{onSiteChanged:function(e){var t=this,n=e.id,o=[];this.siteUrls[n]||(this.isLoading=!0,o.push(r["AjaxHelper"].fetch({module:"API",method:"SitesManager.getSiteUrlsFromId",idSite:n,filter_limit:"-1"}).then((function(e){t.siteUrls[n]=e||[]})))),this.siteExcludedQueryParams[n]||(this.isLoading=!0,o.push(r["AjaxHelper"].fetch({module:"API",method:"Overlay.getExcludedQueryParameters",idSite:n,filter_limit:"-1"}).then((function(e){t.siteExcludedQueryParams[n]=e||[]})))),this.siteExcludedReferrers[n]||(this.isLoading=!0,o.push(r["AjaxHelper"].fetch({module:"API",method:"SitesManager.getExcludedReferrers",idSite:n,filter_limit:"-1"}).then((function(e){t.siteExcludedReferrers[n]=[],Object.values(e||[]).forEach((function(e){t.siteExcludedReferrers[n].push(e.replace(/^https?:\/\//,""))}))})))),Promise.all(o).then((function(){t.isLoading=!1,t.updateCurrentSiteInfo(),t.updateTrackingCode()}))},sendEmail:function(){var e=Object(r["translate"])("SitesManager_EmailInstructionsSubject");e=encodeURIComponent(e);var t=this.trackingCode;t=t.replace(/<[^>]+>/g,"");var n="".concat(Object(r["translate"])("SitesManager_JsTrackingTagHelp"),". ").concat(Object(r["translate"])("CoreAdminHome_JSTracking_CodeNoteBeforeClosingHeadEmail","'head"),"\n").concat(t);n=encodeURIComponent(n);var o="mailto:?subject=".concat(e,"&body=").concat(n);window.location.href=o},onCrossDomainToggle:function(){this.crossDomain&&(this.trackAllAliases=!0)},updateTrackingCode:function(){var e=this,t=this.site,n={piwikUrl:"".concat(mt).concat(gt),groupPageTitlesByDomain:this.groupByDomain?1:0,mergeSubdomains:this.trackAllSubdomains?1:0,mergeAliasUrls:this.trackAllAliases?1:0,visitorCustomVariables:this.trackCustomVars?st(this.customVars):0,customCampaignNameQueryParam:null,customCampaignKeywordParam:null,doNotTrack:this.doNotTrack?1:0,disableCookies:this.disableCookies?1:0,crossDomain:this.crossDomain?1:0,trackNoScript:this.trackNoScript?1:0,forceMatomoEndpoint:1};this.siteExcludedQueryParams[t.id]&&(n.excludedQueryParams=this.siteExcludedQueryParams[t.id]),this.siteExcludedReferrers[t.id]&&(n.excludedReferrers=this.siteExcludedReferrers[t.id]),this.useCustomCampaignParams&&(n.customCampaignNameQueryParam=this.customCampaignName,n.customCampaignKeywordParam=this.customCampaignKeyword),this.trackingCodeAbortController&&(this.trackingCodeAbortController.abort(),this.trackingCodeAbortController=null),this.trackingCodeAbortController=new AbortController,r["AjaxHelper"].post({module:"API",format:"json",method:"SitesManager.getJavascriptTag",idSite:t.id},n,{abortController:this.trackingCodeAbortController}).then((function(t){e.trackingCodeAbortController=null,e.trackingCode=t.value;var n=ut(e.$refs.trackingCode);n&&!e.isHighlighting&&(e.isHighlighting=!0,n.effect("highlight",{complete:function(){e.isHighlighting=!1}},1500))}))},updateCurrentSiteInfo:function(){this.hasManySiteUrls||(this.crossDomain=!1)},addCustomVar:function(){this.canAddMoreCustomVariables&&this.customVars.push({name:"",value:""}),this.canAddMoreCustomVariables=!!this.maxCustomVariables&&this.maxCustomVariables>this.customVars.length},onCustomVarNameKeydown:function(e,t){var n=this;setTimeout((function(){n.customVars[t].name=e.target.value,n.updateTrackingCode()}))},onCustomVarValueKeydown:function(e,t){var n=this;setTimeout((function(){n.customVars[t].value=e.target.value,n.updateTrackingCode()}))}},computed:{hasManySiteUrls:function(){var e=this.site;return this.siteUrls[e.id]&&this.siteUrls[e.id].length>1},currentSiteHost:function(){var e,t=null===(e=this.siteUrls[this.site.id])||void 0===e?void 0:e[0];return t?ct(t):""},currentSiteAlias:function(){var e,t="x.".concat(this.currentSiteHost),n=null===(e=this.siteUrls[this.site.id])||void 0===e?void 0:e[1];return n||t},currentSiteName:function(){return r["Matomo"].helper.htmlEntities(this.site.name)},jsTrackingIntro3a:function(){return Object(r["translate"])("CoreAdminHome_JSTrackingIntro3a",'<a href="https://matomo.org/integrate/" rel="noreferrer noopener" target="_blank">',"</a>")},jsTrackingIntro3b:function(){return Object(r["translate"])("CoreAdminHome_JSTrackingIntro3b")},jsTrackingIntro4a:function(){return Object(r["translate"])("CoreAdminHome_JSTrackingIntro4",'<a href="#image-tracking-link">',"</a>")},jsTrackingIntro5:function(){return Object(r["translate"])("CoreAdminHome_JSTrackingIntro5",'<a rel="noreferrer noopener" target="_blank" href="https://developer.matomo.org/guides/tracking-javascript-guide">',"</a>")},mergeSubdomainsDesc:function(){return Object(r["translate"])("CoreAdminHome_JSTracking_MergeSubdomainsDesc","x.".concat(this.currentSiteHost),"y.".concat(this.currentSiteHost))},learnMoreText:function(){var e="https://developer.matomo.org/guides/tracking-javascript-guide#measuring-domains-andor-sub-domains";return Object(r["translate"])("General_LearnMore",' (<a href="'.concat(e,'" rel="noreferrer noopener" target="_blank">'),"</a>)")},jsTrackCampaignParamsInlineHelp:function(){return Object(r["translate"])("CoreAdminHome_JSTracking_CustomCampaignQueryParamDesc",'<a href="https://matomo.org/faq/general/faq_119" rel="noreferrer noopener" target="_blank">',"</a>")}}});pt.render=lt;var bt=pt,ht=(Object(r["createAngularJsAdapter"])({component:bt,scope:{defaultSite:{angularJsBind:"<"},maxCustomVariables:{angularJsBind:"<"},serverSideDoNotTrackEnabled:{angularJsBind:"<"}},directiveName:"matomoJsTrackingCodeGenerator"}),Object(i["createElementVNode"])("a",{name:"image-tracking-link"},null,-1)),jt={id:"image-tracking-code-options"},vt=["innerHTML"],ft=["innerHTML"],Ot={id:"image-tracking-goal-sub"},Ct={class:"row"},kt={class:"col s12 m6"},Vt={class:"col s12 m6"},St={id:"image-link-output-section"},Nt={id:"image-tracking-text"},yt=["textContent"]; /*! * Matomo - free/libre analytics platform * * @link https://matomo.org * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later - */function Tt(e,t,n,o,a,r){var l=Object(i["resolveComponent"])("Field"),c=Object(i["resolveComponent"])("ContentBlock"),s=Object(i["resolveDirective"])("select-on-focus");return Object(i["openBlock"])(),Object(i["createBlock"])(c,{"content-title":e.translate("CoreAdminHome_ImageTracking"),anchor:"imageTracking"},{default:Object(i["withCtx"])((function(){return[ht,Object(i["createElementVNode"])("div",jt,[Object(i["createElementVNode"])("p",{innerHTML:e.$sanitize(e.imageTrackingIntro)},null,8,vt),Object(i["createElementVNode"])("p",{innerHTML:e.$sanitize(e.imageTrackingIntro3)},null,8,ft),Object(i["createVNode"])(l,{uicontrol:"site",name:"image-tracker-website",modelValue:e.site,"onUpdate:modelValue":t[0]||(t[0]=function(t){return e.site=t}),introduction:e.translate("General_Website")},null,8,["modelValue","introduction"]),Object(i["createVNode"])(l,{uicontrol:"text",name:"image-tracker-action-name","model-value":e.pageName,"onUpdate:modelValue":t[1]||(t[1]=function(t){e.pageName=t,e.updateTrackingCode()}),disabled:e.isLoading,introduction:e.translate("General_Options"),title:e.translate("Actions_ColumnPageName")},null,8,["model-value","disabled","introduction","title"]),Object(i["createVNode"])(l,{uicontrol:"checkbox",name:"image-tracking-goal-check","model-value":e.trackGoal,"onUpdate:modelValue":t[2]||(t[2]=function(t){e.trackGoal=t,e.updateTrackingCode()}),disabled:e.isLoading,title:e.translate("CoreAdminHome_TrackAGoal")},null,8,["model-value","disabled","title"]),Object(i["withDirectives"])(Object(i["createElementVNode"])("div",Ot,[Object(i["createElementVNode"])("div",Ct,[Object(i["createElementVNode"])("div",kt,[Object(i["createVNode"])(l,{uicontrol:"select",name:"image-tracker-goal",options:e.siteGoals,disabled:e.isLoading,"model-value":e.trackIdGoal,"onUpdate:modelValue":t[3]||(t[3]=function(t){e.trackIdGoal=t,e.updateTrackingCode()})},null,8,["options","disabled","model-value"])]),Object(i["createElementVNode"])("div",Vt,[Object(i["createVNode"])(l,{uicontrol:"text",name:"image-revenue","model-value":e.revenue,"onUpdate:modelValue":t[4]||(t[4]=function(t){e.revenue=t,e.updateTrackingCode()}),disabled:e.isLoading,"full-width":!0,title:"".concat(e.translate("CoreAdminHome_WithOptionalRevenue")," ").concat(e.currentSiteCurrency)},null,8,["model-value","disabled","title"])])])],512),[[i["vShow"],e.trackGoal]]),Object(i["createElementVNode"])("div",St,[Object(i["createElementVNode"])("h3",null,Object(i["toDisplayString"])(e.translate("CoreAdminHome_ImageTrackingLink")),1),Object(i["createElementVNode"])("div",Nt,[Object(i["withDirectives"])(Object(i["createElementVNode"])("pre",{textContent:Object(i["toDisplayString"])(e.trackingCode),ref:"trackingCode"},null,8,yt),[[s,{}]])])])])]})),_:1},8,["content-title"])}function At(e,t){return Dt(e)||Ht(e,t)||wt(e,t)||Et()}function Et(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function wt(e,t){if(e){if("string"===typeof e)return _t(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?_t(e,t):void 0}}function _t(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,o=new Array(t);n<t;n++)o[n]=e[n];return o}function Ht(e,t){var n=null==e?null:"undefined"!==typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var o,a,r=[],i=!0,l=!1;try{for(n=n.call(e);!(i=(o=n.next()).done);i=!0)if(r.push(o.value),t&&r.length===t)break}catch(c){l=!0,a=c}finally{try{i||null==n["return"]||n["return"]()}finally{if(l)throw a}}return r}}function Dt(e){if(Array.isArray(e))return e}var Bt=null,Lt=window,Ut=Lt.$,xt=window.location.host,Ft=window.location.pathname.substring(0,window.location.pathname.lastIndexOf("/")),It=Object(i["defineComponent"])({props:{defaultSite:{type:Object,required:!0}},components:{ContentBlock:r["ContentBlock"],Field:T["Field"]},directives:{SelectOnFocus:r["SelectOnFocus"]},data:function(){return{isLoading:!1,site:this.defaultSite,pageName:"",trackGoal:!1,trackIdGoal:null,revenue:"",trackingCode:"",sites:{},goals:{},trackingCodeAbortController:null,isHighlighting:!1}},created:function(){this.updateTrackingCode=Object(r["debounce"])(this.updateTrackingCode),this.site&&this.site.id&&this.onSiteChanged(this.site)},watch:{site:function(e){this.onSiteChanged(e)}},methods:{onSiteChanged:function(e){var t,n,o,a=this;return this.trackIdGoal=null,Bt?t=Promise.resolve(Bt):(this.isLoading=!0,t=r["AjaxHelper"].fetch({method:"SitesManager.getCurrencySymbols",filter_limit:"-1"})),this.sites[e.id]?n=Promise.resolve(this.sites[e.id]):(this.isLoading=!0,n=r["AjaxHelper"].fetch({module:"API",method:"SitesManager.getSiteFromId",idSite:e.id})),this.goals[e.id]?o=Promise.resolve(this.goals[e.id]):(this.isLoading=!0,o=r["AjaxHelper"].fetch({module:"API",method:"Goals.getGoals",filter_limit:"-1",idSite:e.id})),Promise.all([t,n,o]).then((function(t){var n=At(t,3),o=n[0],r=n[1],i=n[2];a.isLoading=!1,Bt=o,a.sites[e.id]=r,a.goals[e.id]=i,a.updateTrackingCode()}))},updateTrackingCode:function(){var e=this,t={piwikUrl:"".concat(xt).concat(Ft),actionName:this.pageName,forceMatomoEndpoint:1};this.trackGoal&&this.trackIdGoal&&(t.idGoal=this.trackIdGoal,t.revenue=this.revenue),this.trackingCodeAbortController&&(this.trackingCodeAbortController.abort(),this.trackingCodeAbortController=null),this.trackingCodeAbortController=new AbortController,r["AjaxHelper"].post({module:"API",format:"json",method:"SitesManager.getImageTrackingCode",idSite:this.site.id},t,{abortController:this.trackingCodeAbortController}).then((function(t){e.trackingCodeAbortController=null,e.trackingCode=t.value;var n=Ut(e.$refs.trackingCode);n&&!e.isHighlighting&&(e.isHighlighting=!0,n.effect("highlight",{complete:function(){e.isHighlighting=!1}},1500))}))}},computed:{currentSiteCurrency:function(){return Bt?Bt[(this.sites[this.site.id].currency||"").toUpperCase()]:""},siteGoals:function(){var e=this.goals[this.site.id];return[{key:"",value:Object(r["translate"])("UserCountryMap_None")}].concat(Object.values(e||[]).map((function(e){return{key:"".concat(e.idgoal),value:e.name}})))},imageTrackingIntro:function(){var e=Object(r["translate"])("CoreAdminHome_ImageTrackingIntro1"),t=Object(r["translate"])("CoreAdminHome_ImageTrackingIntro2","<code><noscript></noscript></code>");return"".concat(e," ").concat(t)},imageTrackingIntro3:function(){var e="https://matomo.org/docs/tracking-api/reference/";return Object(r["translate"])("CoreAdminHome_ImageTrackingIntro3",'<a href="'.concat(e,'" rel="noreferrer noopener" target="_blank">'),"</a>")}}});It.render=Tt;var Gt=It,Pt=(Object(r["createAngularJsAdapter"])({component:Gt,scope:{defaultSite:{angularJsBind:"<"}},directiveName:"matomoImageTrackingCodeGenerator"}),Object(i["createElementVNode"])("br",null,null,-1)),Mt=Object(i["createElementVNode"])("br",null,null,-1),Jt=["value"],qt={class:"action"},Rt={colspan:"7"},Wt=Object(i["createElementVNode"])("span",{class:"icon-ok"},null,-1),$t={class:"ui-confirm",id:"confirmDeleteAllTrackingFailures"},Kt=["value"],zt=["value"],Qt={class:"ui-confirm",id:"confirmDeleteThisTrackingFailure"},Yt=["value"],Xt=["value"]; + */function Tt(e,t,n,o,a,r){var l=Object(i["resolveComponent"])("Field"),c=Object(i["resolveComponent"])("ContentBlock"),s=Object(i["resolveDirective"])("select-on-focus");return Object(i["openBlock"])(),Object(i["createBlock"])(c,{"content-title":e.translate("CoreAdminHome_ImageTracking"),anchor:"imageTracking"},{default:Object(i["withCtx"])((function(){return[ht,Object(i["createElementVNode"])("div",jt,[Object(i["createElementVNode"])("p",{innerHTML:e.$sanitize(e.imageTrackingIntro)},null,8,vt),Object(i["createElementVNode"])("p",{innerHTML:e.$sanitize(e.imageTrackingIntro3)},null,8,ft),Object(i["createVNode"])(l,{uicontrol:"site",name:"image-tracker-website",modelValue:e.site,"onUpdate:modelValue":t[0]||(t[0]=function(t){return e.site=t}),introduction:e.translate("General_Website")},null,8,["modelValue","introduction"]),Object(i["createVNode"])(l,{uicontrol:"text",name:"image-tracker-action-name","model-value":e.pageName,"onUpdate:modelValue":t[1]||(t[1]=function(t){e.pageName=t,e.updateTrackingCode()}),disabled:e.isLoading,introduction:e.translate("General_Options"),title:e.translate("Actions_ColumnPageName")},null,8,["model-value","disabled","introduction","title"]),Object(i["createVNode"])(l,{uicontrol:"checkbox",name:"image-tracking-goal-check","model-value":e.trackGoal,"onUpdate:modelValue":t[2]||(t[2]=function(t){e.trackGoal=t,e.updateTrackingCode()}),disabled:e.isLoading,title:e.translate("CoreAdminHome_TrackAGoal")},null,8,["model-value","disabled","title"]),Object(i["withDirectives"])(Object(i["createElementVNode"])("div",Ot,[Object(i["createElementVNode"])("div",Ct,[Object(i["createElementVNode"])("div",kt,[Object(i["createVNode"])(l,{uicontrol:"select",name:"image-tracker-goal",options:e.siteGoals,disabled:e.isLoading,"model-value":e.trackIdGoal,"onUpdate:modelValue":t[3]||(t[3]=function(t){e.trackIdGoal=t,e.updateTrackingCode()})},null,8,["options","disabled","model-value"])]),Object(i["createElementVNode"])("div",Vt,[Object(i["createVNode"])(l,{uicontrol:"text",name:"image-revenue","model-value":e.revenue,"onUpdate:modelValue":t[4]||(t[4]=function(t){e.revenue=t,e.updateTrackingCode()}),disabled:e.isLoading,"full-width":!0,title:"".concat(e.translate("CoreAdminHome_WithOptionalRevenue")," ").concat(e.currentSiteCurrency)},null,8,["model-value","disabled","title"])])])],512),[[i["vShow"],e.trackGoal]]),Object(i["createElementVNode"])("div",St,[Object(i["createElementVNode"])("h3",null,Object(i["toDisplayString"])(e.translate("CoreAdminHome_ImageTrackingLink")),1),Object(i["createElementVNode"])("div",Nt,[Object(i["withDirectives"])(Object(i["createElementVNode"])("pre",{textContent:Object(i["toDisplayString"])(e.trackingCode),ref:"trackingCode"},null,8,yt),[[s,{}]])])])])]})),_:1},8,["content-title"])}function At(e,t){return Dt(e)||Ht(e,t)||wt(e,t)||Et()}function Et(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function wt(e,t){if(e){if("string"===typeof e)return _t(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?_t(e,t):void 0}}function _t(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,o=new Array(t);n<t;n++)o[n]=e[n];return o}function Ht(e,t){var n=null==e?null:"undefined"!==typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var o,a,r=[],i=!0,l=!1;try{for(n=n.call(e);!(i=(o=n.next()).done);i=!0)if(r.push(o.value),t&&r.length===t)break}catch(c){l=!0,a=c}finally{try{i||null==n["return"]||n["return"]()}finally{if(l)throw a}}return r}}function Dt(e){if(Array.isArray(e))return e}var Bt=null,Lt=window,xt=Lt.$,Ut=window.location.host,Ft=window.location.pathname.substring(0,window.location.pathname.lastIndexOf("/")),It=Object(i["defineComponent"])({props:{defaultSite:{type:Object,required:!0}},components:{ContentBlock:r["ContentBlock"],Field:T["Field"]},directives:{SelectOnFocus:r["SelectOnFocus"]},data:function(){return{isLoading:!1,site:this.defaultSite,pageName:"",trackGoal:!1,trackIdGoal:null,revenue:"",trackingCode:"",sites:{},goals:{},trackingCodeAbortController:null,isHighlighting:!1}},created:function(){this.updateTrackingCode=Object(r["debounce"])(this.updateTrackingCode),this.site&&this.site.id&&this.onSiteChanged(this.site)},watch:{site:function(e){this.onSiteChanged(e)}},methods:{onSiteChanged:function(e){var t,n,o,a=this;return this.trackIdGoal=null,Bt?t=Promise.resolve(Bt):(this.isLoading=!0,t=r["AjaxHelper"].fetch({method:"SitesManager.getCurrencySymbols",filter_limit:"-1"})),this.sites[e.id]?n=Promise.resolve(this.sites[e.id]):(this.isLoading=!0,n=r["AjaxHelper"].fetch({module:"API",method:"SitesManager.getSiteFromId",idSite:e.id})),this.goals[e.id]?o=Promise.resolve(this.goals[e.id]):(this.isLoading=!0,o=r["AjaxHelper"].fetch({module:"API",method:"Goals.getGoals",filter_limit:"-1",idSite:e.id})),Promise.all([t,n,o]).then((function(t){var n=At(t,3),o=n[0],r=n[1],i=n[2];a.isLoading=!1,Bt=o,a.sites[e.id]=r,a.goals[e.id]=i,a.updateTrackingCode()}))},updateTrackingCode:function(){var e=this,t={piwikUrl:"".concat(Ut).concat(Ft),actionName:this.pageName,forceMatomoEndpoint:1};this.trackGoal&&this.trackIdGoal&&(t.idGoal=this.trackIdGoal,t.revenue=this.revenue),this.trackingCodeAbortController&&(this.trackingCodeAbortController.abort(),this.trackingCodeAbortController=null),this.trackingCodeAbortController=new AbortController,r["AjaxHelper"].post({module:"API",format:"json",method:"SitesManager.getImageTrackingCode",idSite:this.site.id},t,{abortController:this.trackingCodeAbortController}).then((function(t){e.trackingCodeAbortController=null,e.trackingCode=t.value;var n=xt(e.$refs.trackingCode);n&&!e.isHighlighting&&(e.isHighlighting=!0,n.effect("highlight",{complete:function(){e.isHighlighting=!1}},1500))}))}},computed:{currentSiteCurrency:function(){return Bt?Bt[(this.sites[this.site.id].currency||"").toUpperCase()]:""},siteGoals:function(){var e=this.goals[this.site.id];return[{key:"",value:Object(r["translate"])("UserCountryMap_None")}].concat(Object.values(e||[]).map((function(e){return{key:"".concat(e.idgoal),value:e.name}})))},imageTrackingIntro:function(){var e=Object(r["translate"])("CoreAdminHome_ImageTrackingIntro1"),t=Object(r["translate"])("CoreAdminHome_ImageTrackingIntro2","<code><noscript></noscript></code>");return"".concat(e," ").concat(t)},imageTrackingIntro3:function(){var e="https://matomo.org/docs/tracking-api/reference/";return Object(r["translate"])("CoreAdminHome_ImageTrackingIntro3",'<a href="'.concat(e,'" rel="noreferrer noopener" target="_blank">'),"</a>")}}});It.render=Tt;var Gt=It,Pt=(Object(r["createAngularJsAdapter"])({component:Gt,scope:{defaultSite:{angularJsBind:"<"}},directiveName:"matomoImageTrackingCodeGenerator"}),Object(i["createElementVNode"])("br",null,null,-1)),Mt=Object(i["createElementVNode"])("br",null,null,-1),Jt=["value"],qt={class:"action"},Rt={colspan:"7"},Wt=Object(i["createElementVNode"])("span",{class:"icon-ok"},null,-1),$t={class:"ui-confirm",id:"confirmDeleteAllTrackingFailures"},Kt=["value"],zt=["value"],Qt={class:"ui-confirm",id:"confirmDeleteThisTrackingFailure"},Yt=["value"],Xt=["value"]; /*! * Matomo - free/libre analytics platform * diff --git a/plugins/CoreAdminHome/vue/src/JsTrackingCodeGenerator/JsTrackingCodeGenerator.vue b/plugins/CoreAdminHome/vue/src/JsTrackingCodeGenerator/JsTrackingCodeGenerator.vue index 5fc37e32f1..ba03040ff3 100644 --- a/plugins/CoreAdminHome/vue/src/JsTrackingCodeGenerator/JsTrackingCodeGenerator.vue +++ b/plugins/CoreAdminHome/vue/src/JsTrackingCodeGenerator/JsTrackingCodeGenerator.vue @@ -304,6 +304,7 @@ interface JsTrackingCodeGeneratorState { isLoading: boolean; siteUrls: Record<string, string[]>; siteExcludedQueryParams: Record<string, string[]>, + siteExcludedReferrers: Record<string, string[]>, crossDomain: boolean; groupByDomain: boolean; trackAllAliases: boolean; @@ -356,6 +357,7 @@ export default defineComponent({ isLoading: false, siteUrls: {}, siteExcludedQueryParams: {}, + siteExcludedReferrers: {}, crossDomain: false, groupByDomain: false, trackAllAliases: false, @@ -431,6 +433,24 @@ export default defineComponent({ ); } + if (!this.siteExcludedReferrers[idSite]) { + this.isLoading = true; + + promises.push( + AjaxHelper.fetch({ + module: 'API', + method: 'SitesManager.getExcludedReferrers', + idSite, + filter_limit: '-1', + }).then((data) => { + this.siteExcludedReferrers[idSite] = []; + Object.values(data || []).forEach((referrer: unknown) => { + this.siteExcludedReferrers[idSite].push((referrer as string).replace(/^https?:\/\//, '')); + }); + }), + ); + } + Promise.all(promises).then(() => { this.isLoading = false; this.updateCurrentSiteInfo(); @@ -481,6 +501,10 @@ export default defineComponent({ params.excludedQueryParams = this.siteExcludedQueryParams[site.id]; } + if (this.siteExcludedReferrers[site.id]) { + params.excludedReferrers = this.siteExcludedReferrers[site.id]; + } + if (this.useCustomCampaignParams) { params.customCampaignNameQueryParam = this.customCampaignName; params.customCampaignKeywordParam = this.customCampaignKeyword; diff --git a/plugins/IntranetMeasurable/tests/UI/expected-screenshots/IntranetMeasurable_intranet_create.png b/plugins/IntranetMeasurable/tests/UI/expected-screenshots/IntranetMeasurable_intranet_create.png index 0376c5bc8c..86e25d3d79 100644 --- a/plugins/IntranetMeasurable/tests/UI/expected-screenshots/IntranetMeasurable_intranet_create.png +++ b/plugins/IntranetMeasurable/tests/UI/expected-screenshots/IntranetMeasurable_intranet_create.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d6a1a763044d093551dfa0ce23175812cb07f8a2c488d15423e0e435416fb9e5 -size 301789 +oid sha256:531fb5e2454ea22c51dc0abb2858953c826cec073069b033cae2e0507c1f6824 +size 363130 diff --git a/plugins/Referrers/Columns/Base.php b/plugins/Referrers/Columns/Base.php index a27aa925e2..0d9a658f79 100644 --- a/plugins/Referrers/Columns/Base.php +++ b/plugins/Referrers/Columns/Base.php @@ -1,4 +1,5 @@ <?php + /** * Matomo - free/libre analytics platform * @@ -6,9 +7,11 @@ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later * */ + namespace Piwik\Plugins\Referrers\Columns; use Piwik\Common; +use Piwik\Exception\UnexpectedWebsiteFoundException; use Piwik\Piwik; use Piwik\Plugin\Dimension\VisitDimension; use Piwik\Plugins\Referrers\SearchEngine as SearchEngineDetection; @@ -18,12 +21,10 @@ use Piwik\Tracker\Cache; use Piwik\Tracker\PageUrl; use Piwik\Tracker\Request; use Piwik\Tracker\Visitor; -use Piwik\Tracker\Action; use Piwik\UrlHelper; abstract class Base extends VisitDimension { - // @see detect*() referrer methods protected $typeReferrerAnalyzed; protected $nameReferrerAnalyzed; @@ -71,16 +72,22 @@ abstract class Base extends VisitDimension { $this->idsite = $idSite; - // default values for the referer_* fields $referrerUrl = Common::unsanitizeInputValue($referrerUrl); - if (!empty($referrerUrl) - && !UrlHelper::isLookLikeUrl($referrerUrl) + + // Ignore referrer url if it doesn't look like a URL or is excluded in settings + if ( + !empty($referrerUrl) + && ( + !UrlHelper::isLookLikeUrl($referrerUrl) + || $this->isReferrerExcluded($referrerUrl) + ) ) { $referrerUrl = ''; } $currentUrl = PageUrl::cleanupUrl($currentUrl); + // default values for the referer_* fields $this->referrerUrl = $referrerUrl; $this->referrerUrlParse = @parse_url($this->referrerUrl); $this->currentUrlParse = @parse_url($currentUrl); @@ -96,7 +103,8 @@ abstract class Base extends VisitDimension $referrerDetected = $this->detectReferrerCampaign($request, $visitor); if (!$referrerDetected) { - if ($this->detectReferrerDirectEntry($request) + if ( + $this->detectReferrerDirectEntry($request) || $this->detectReferrerSearchEngine() || $this->detectReferrerSocialNetwork() ) { @@ -121,12 +129,12 @@ abstract class Base extends VisitDimension $this->excludeQueryParamsFromReferrerUrl(); - $referrerInformation = array( + $referrerInformation = [ 'referer_type' => $this->typeReferrerAnalyzed, 'referer_name' => $this->nameReferrerAnalyzed, 'referer_keyword' => $this->keywordReferrerAnalyzed, 'referer_url' => $this->referrerUrl, - ); + ]; if (!empty($referrerInformation['referer_name'])) { $referrerInformation['referer_name'] = $this->truncateReferrerName($referrerInformation['referer_name']); @@ -139,6 +147,46 @@ abstract class Base extends VisitDimension return $referrerInformation; } + protected function getExcludedReferrers($idSite): array + { + try { + $attributes = Cache::getCacheWebsiteAttributes($idSite); + + if (isset($attributes['excluded_referrers'])) { + return $attributes['excluded_referrers']; + } + } catch (UnexpectedWebsiteFoundException $e) { + $cached = Cache::getCacheGeneral(); + if (isset($cached['global_excluded_referrers'])) { + return $cached['global_excluded_referrers']; + } + } + + return []; + } + + protected function isReferrerExcluded(string $referrerUrl): bool + { + $urlsByHost = []; + $parsedReferrer = @parse_url($referrerUrl); + + $excludedUrls = new SiteUrls(); + $excludedReferrers = $this->getExcludedReferrers($this->idsite); + foreach ($excludedReferrers as $excludedReferrer) { + // ensure referrer is prefixed with protocol, so a parse_url works + $excludedReferrer = 'https://' . preg_replace('/^https?:\/\//', '', $excludedReferrer); + $excludedUrls->addUrlByHost($urlsByHost, $this->idsite, $excludedReferrer); + } + + $matchingSites = $excludedUrls->getIdSitesMatchingUrl($parsedReferrer, $urlsByHost); + + if (is_array($matchingSites) && in_array($this->idsite, $matchingSites)) { + return true; + } + + return false; + } + protected function excludeQueryParamsFromReferrerUrl() { $parametersToExclude = []; @@ -236,7 +284,7 @@ abstract class Base extends VisitDimension * logic. * @param string referrerUrl The referrer URL from the tracking request. */ - Piwik::postEvent('Tracker.detectReferrerSearchEngine', array(&$searchEngineInformation, $this->referrerUrl)); + Piwik::postEvent('Tracker.detectReferrerSearchEngine', [&$searchEngineInformation, $this->referrerUrl]); $cachedReferrerSearchEngine[$this->referrerUrl] = $searchEngineInformation; $cache->save($cacheKey, $cachedReferrerSearchEngine); @@ -287,7 +335,7 @@ abstract class Base extends VisitDimension * logic. * @param string referrerUrl The referrer URL from the tracking request. */ - Piwik::postEvent('Tracker.detectReferrerSocialNetwork', array(&$socialNetworkName, $this->referrerUrl)); + Piwik::postEvent('Tracker.detectReferrerSocialNetwork', [&$socialNetworkName, $this->referrerUrl]); $cachedReferrerSocialNetworks[$this->referrerUrl] = $socialNetworkName; $cache->save($cacheKey, $cachedReferrerSocialNetworks); @@ -334,7 +382,8 @@ abstract class Base extends VisitDimension protected function detectReferrerCampaignFromLandingUrl() { - if (!isset($this->currentUrlParse['query']) + if ( + !isset($this->currentUrlParse['query']) && !isset($this->currentUrlParse['fragment']) ) { return false; @@ -351,7 +400,8 @@ abstract class Base extends VisitDimension } // 2) Detect from fragment #hash - if (!$found + if ( + !$found && isset($this->currentUrlParse['fragment']) ) { $this->detectCampaignFromString($this->currentUrlParse['fragment']); @@ -385,7 +435,7 @@ abstract class Base extends VisitDimension return $cache['allUrlsByHostAndIdSite']; } - return array(); + return []; } /** @@ -433,8 +483,10 @@ abstract class Base extends VisitDimension protected function detectCampaignKeywordFromReferrerUrl() { - if (!empty($this->nameReferrerAnalyzed) - && !empty($this->keywordReferrerAnalyzed)) { + if ( + !empty($this->nameReferrerAnalyzed) + && !empty($this->keywordReferrerAnalyzed) + ) { // keyword is already set, we skip return true; } @@ -448,7 +500,8 @@ abstract class Base extends VisitDimension } // Set the keyword, to the hostname found, in a Adsense Referrer URL '&url=' parameter - if (empty($this->keywordReferrerAnalyzed) + if ( + empty($this->keywordReferrerAnalyzed) && !empty($this->referrerUrlParse['query']) && !empty($this->referrerHost) && (strpos($this->referrerHost, 'googleads') !== false || strpos($this->referrerHost, 'doubleclick') !== false) @@ -458,7 +511,6 @@ abstract class Base extends VisitDimension if (!empty($value)) { $parsedAdsenseReferrerUrl = parse_url($value); if (!empty($parsedAdsenseReferrerUrl['host'])) { - if (empty($this->nameReferrerAnalyzed)) { $type = $this->getParameterValueFromReferrerUrl('ad_type'); $type = $type ? " ($type)" : ''; @@ -469,7 +521,6 @@ abstract class Base extends VisitDimension } } } - } /** @@ -530,7 +581,6 @@ abstract class Base extends VisitDimension /** * @param Request $request * @param Visitor $visitor - * @param Action|null $action * @return mixed */ public function getValueForRecordGoal(Request $request, Visitor $visitor) @@ -556,7 +606,8 @@ abstract class Base extends VisitDimension // 0) In some (unknown!?) cases the campaign is not found in the attribution cookie, but the URL ref was found. // In this case we look up if the current visit is credited to a campaign and will credit this campaign rather than the URL ref (since campaigns have higher priority) - if (empty($referrerCampaignName) + if ( + empty($referrerCampaignName) && $type == Common::REFERRER_TYPE_CAMPAIGN && !empty($name) ) { @@ -570,12 +621,11 @@ abstract class Base extends VisitDimension Common::printDebug("Campaign information from 1st party cookie is used."); } // 2) Referrer URL parsing elseif (!empty($referrerUrl)) { - $idSite = $request->getIdSite(); $referrer = $this->getReferrerInformation($referrerUrl, $currentUrl = '', $idSite, $request, $visitor); // if the parsed referrer is interesting enough, ie. website, social network or search engine - if (in_array($referrer['referer_type'], array(Common::REFERRER_TYPE_SEARCH_ENGINE, Common::REFERRER_TYPE_WEBSITE, Common::REFERRER_TYPE_SOCIAL_NETWORK))) { + if (in_array($referrer['referer_type'], [Common::REFERRER_TYPE_SEARCH_ENGINE, Common::REFERRER_TYPE_WEBSITE, Common::REFERRER_TYPE_SOCIAL_NETWORK])) { $type = $referrer['referer_type']; $name = $referrer['referer_name']; $keyword = $referrer['referer_keyword']; @@ -590,11 +640,11 @@ abstract class Base extends VisitDimension $this->setCampaignValuesToLowercase($type, $name, $keyword); - $fields = array( + $fields = [ 'referer_type' => $type, 'referer_name' => $name, 'referer_keyword' => $keyword, - ); + ]; if (array_key_exists($this->columnName, $fields)) { return $fields[$this->columnName]; @@ -622,7 +672,7 @@ abstract class Base extends VisitDimension protected function isReferrerInformationNew(Visitor $visitor, $information) { - foreach (array('referer_keyword', 'referer_name', 'referer_type') as $infoName) { + foreach (['referer_keyword', 'referer_name', 'referer_type'] as $infoName) { if ($this->hasReferrerColumnChanged($visitor, $information, $infoName)) { return true; } diff --git a/plugins/Referrers/tests/Integration/Columns/ReferrerTypeTest.php b/plugins/Referrers/tests/Integration/Columns/ReferrerTypeTest.php index a31044a807..1394eb0e25 100644 --- a/plugins/Referrers/tests/Integration/Columns/ReferrerTypeTest.php +++ b/plugins/Referrers/tests/Integration/Columns/ReferrerTypeTest.php @@ -1,4 +1,5 @@ <?php + /** * Matomo - free/libre analytics platform * @@ -34,6 +35,7 @@ class ReferrerTypeTest extends IntegrationTestCase private $idSite3 = 3; private $idSite4 = 4; private $idSite5 = 5; + private $idSite6 = 6; public function setUp(): void { @@ -41,16 +43,20 @@ class ReferrerTypeTest extends IntegrationTestCase Cache::clearCacheGeneral(); + $this->referrerType = new ReferrerType(); + } + + protected static function beforeTableDataCached() + { $date = '2012-01-01 00:00:00'; $ecommerce = false; - Fixture::createWebsite($date, $ecommerce, $name = 'test1', $url = 'http://piwik.org/foo/bar'); - Fixture::createWebsite($date, $ecommerce, $name = 'test2', $url = 'http://piwik.org/'); - Fixture::createWebsite($date, $ecommerce, $name = 'test3', $url = 'http://piwik.xyz/'); - Fixture::createWebsite($date, $ecommerce, $name = 'test4', $url = 'http://google.com/subdir/', 1, null, null, null, null, $excludeUnknownUrls = 1); - Fixture::createWebsite($date, $ecommerce, $name = 'test5', $url = null); - - $this->referrerType = new ReferrerType(); + Fixture::createWebsite($date, $ecommerce, 'test1', 'http://piwik.org/foo/bar'); + Fixture::createWebsite($date, $ecommerce, 'test2', 'http://piwik.org/'); + Fixture::createWebsite($date, $ecommerce, 'test3', 'http://piwik.xyz/'); + Fixture::createWebsite($date, $ecommerce, 'test4', 'http://google.com/subdir/', 1, null, null, null, null, $excludeUnknownUrls = 1); + Fixture::createWebsite($date, $ecommerce, 'test5', null); + Fixture::createWebsite($date, $ecommerce, 'test6', 'http://matomo.org/', 1, null, null, null, null, null, null, 'http://paypal.com,http://payments.amazon.com/proceed/,.payment.provider'); } public function tearDown(): void @@ -64,9 +70,9 @@ class ReferrerTypeTest extends IntegrationTestCase /** * @dataProvider getReferrerUrls */ - public function test_onNewVisit_shouldDetectCorrectReferrerType($expectedType, $idSite, $url, $referrerUrl) + public function testOnNewVisitShouldDetectCorrectReferrerType($expectedType, $idSite, $url, $referrerUrl) { - $request = $this->getRequest(array('idsite' => $idSite, 'url' => $url, 'urlref' => $referrerUrl)); + $request = $this->getRequest(['idsite' => $idSite, 'url' => $url, 'urlref' => $referrerUrl]); $type = $this->referrerType->onNewVisit($request, $this->getNewVisitor(), $action = null); $this->assertSame($expectedType, $type); @@ -78,71 +84,80 @@ class ReferrerTypeTest extends IntegrationTestCase $referrer = 'http://piwik.org'; // $expectedType, $idSite, $url, $referrerUrl - return array( + return [ // domain matches but path does not match for idsite1 - array(Common::REFERRER_TYPE_DIRECT_ENTRY, $this->idSite1, $url, $referrer), - array(Common::REFERRER_TYPE_DIRECT_ENTRY, $this->idSite1, $url, $referrer . '/'), - // idSite2 matches any piwik.org path so this is a direct entry for it - array(Common::REFERRER_TYPE_DIRECT_ENTRY, $this->idSite2, $url, $referrer), - array(Common::REFERRER_TYPE_DIRECT_ENTRY, $this->idSite2, $url, $referrer . '/'), - // idSite3 has different domain so it is coming from different website - array(Common::REFERRER_TYPE_DIRECT_ENTRY, $this->idSite3, $url, $referrer), - array(Common::REFERRER_TYPE_DIRECT_ENTRY, $this->idSite3, $url, $referrer . '/'), - - array(Common::REFERRER_TYPE_DIRECT_ENTRY, $this->idSite1, $url, $referrer . '/foo/bar/baz'), - array(Common::REFERRER_TYPE_DIRECT_ENTRY, $this->idSite1, $url, $referrer . '/foo/bar/baz/'), - array(Common::REFERRER_TYPE_DIRECT_ENTRY, $this->idSite1, $url, $referrer . '/foo/bar/baz?x=5'), + [Common::REFERRER_TYPE_DIRECT_ENTRY, $this->idSite1, $url, $referrer], + [Common::REFERRER_TYPE_DIRECT_ENTRY, $this->idSite1, $url, $referrer . '/'], + // idSite2 matches any piwik.org path, so this is a direct entry for it + [Common::REFERRER_TYPE_DIRECT_ENTRY, $this->idSite2, $url, $referrer], + [Common::REFERRER_TYPE_DIRECT_ENTRY, $this->idSite2, $url, $referrer . '/'], + // idSite3 has different domain, so it is coming from different website + [Common::REFERRER_TYPE_DIRECT_ENTRY, $this->idSite3, $url, $referrer], + [Common::REFERRER_TYPE_DIRECT_ENTRY, $this->idSite3, $url, $referrer . '/'], + + [Common::REFERRER_TYPE_DIRECT_ENTRY, $this->idSite1, $url, $referrer . '/foo/bar/baz'], + [Common::REFERRER_TYPE_DIRECT_ENTRY, $this->idSite1, $url, $referrer . '/foo/bar/baz/'], + [Common::REFERRER_TYPE_DIRECT_ENTRY, $this->idSite1, $url, $referrer . '/foo/bar/baz?x=5'], // /not/xyz belongs to different website - array(Common::REFERRER_TYPE_DIRECT_ENTRY, $this->idSite1, $url, $referrer . '/not/xyz'), - array(Common::REFERRER_TYPE_DIRECT_ENTRY, $this->idSite2, $url, $referrer . '/not/xyz'), + [Common::REFERRER_TYPE_DIRECT_ENTRY, $this->idSite1, $url, $referrer . '/not/xyz'], + [Common::REFERRER_TYPE_DIRECT_ENTRY, $this->idSite2, $url, $referrer . '/not/xyz'], // /foo/bar/baz belongs to different website - array(Common::REFERRER_TYPE_WEBSITE, $this->idSite2, $url, $referrer . '/foo/bar/baz'), + [Common::REFERRER_TYPE_WEBSITE, $this->idSite2, $url, $referrer . '/foo/bar/baz'], // website as it is from different domain anyway - array(Common::REFERRER_TYPE_WEBSITE, $this->idSite3, $url, $referrer . '/foo/bar/baz'), + [Common::REFERRER_TYPE_WEBSITE, $this->idSite3, $url, $referrer . '/foo/bar/baz'], // should detect campaign independent of domain / path - array(Common::REFERRER_TYPE_CAMPAIGN, $this->idSite1, $url . '?pk_campaign=test', $referrer), - array(Common::REFERRER_TYPE_CAMPAIGN, $this->idSite2, $url . '?pk_campaign=test', $referrer), - array(Common::REFERRER_TYPE_CAMPAIGN, $this->idSite3, $url . '?pk_campaign=test', $referrer), + [Common::REFERRER_TYPE_CAMPAIGN, $this->idSite1, $url . '?pk_campaign=test', $referrer], + [Common::REFERRER_TYPE_CAMPAIGN, $this->idSite2, $url . '?pk_campaign=test', $referrer], + [Common::REFERRER_TYPE_CAMPAIGN, $this->idSite3, $url . '?pk_campaign=test', $referrer], - array(Common::REFERRER_TYPE_SEARCH_ENGINE, $this->idSite3, $url, 'http://google.com/search?q=piwik'), + [Common::REFERRER_TYPE_SEARCH_ENGINE, $this->idSite3, $url, 'http://google.com/search?q=piwik'], - array(Common::REFERRER_TYPE_SOCIAL_NETWORK, $this->idSite3, $url, 'https://twitter.com/matomo_org'), + [Common::REFERRER_TYPE_SOCIAL_NETWORK, $this->idSite3, $url, 'https://twitter.com/matomo_org'], // testing case for backwards compatibility where url has same domain as urlref but the domain is not known to any website - array(Common::REFERRER_TYPE_DIRECT_ENTRY, $this->idSite3, 'http://example.com/foo', 'http://example.com/bar'), - array(Common::REFERRER_TYPE_DIRECT_ENTRY, $this->idSite3, 'http://example.com/foo', 'http://example.com'), - array(Common::REFERRER_TYPE_DIRECT_ENTRY, $this->idSite3, 'http://example.com', 'http://example.com/bar'), + [Common::REFERRER_TYPE_DIRECT_ENTRY, $this->idSite3, 'http://example.com/foo', 'http://example.com/bar'], + [Common::REFERRER_TYPE_DIRECT_ENTRY, $this->idSite3, 'http://example.com/foo', 'http://example.com'], + [Common::REFERRER_TYPE_DIRECT_ENTRY, $this->idSite3, 'http://example.com', 'http://example.com/bar'], // testing case where domain of referrer is not known to any site but neither is the URL, url != urlref - array(Common::REFERRER_TYPE_WEBSITE, $this->idSite3, 'http://example.org', 'http://example.com/bar'), + [Common::REFERRER_TYPE_WEBSITE, $this->idSite3, 'http://example.org', 'http://example.com/bar'], ####### testing specific case: ## - ignore unknown urls is activated for idSite4 // referrer comes from another subdir, but same host => direct entry - array(Common::REFERRER_TYPE_DIRECT_ENTRY, $this->idSite4, 'http://google.com/subdir/site', 'http://google.com/base'), + [Common::REFERRER_TYPE_DIRECT_ENTRY, $this->idSite4, 'http://google.com/subdir/site', 'http://google.com/base'], // referrer comes from same subdir and host => direct entry - array(Common::REFERRER_TYPE_DIRECT_ENTRY, $this->idSite4, 'http://google.com/subdir/page', 'http://google.com/subdir/x'), - array(Common::REFERRER_TYPE_DIRECT_ENTRY, $this->idSite4, 'http://google.com/subdir/', 'http://google.com/subdir/?q=test'), + [Common::REFERRER_TYPE_DIRECT_ENTRY, $this->idSite4, 'http://google.com/subdir/page', 'http://google.com/subdir/x'], + [Common::REFERRER_TYPE_DIRECT_ENTRY, $this->idSite4, 'http://google.com/subdir/', 'http://google.com/subdir/?q=test'], // referrer comes from another subdir, but same host, query matches search engine definition => search engine - array(Common::REFERRER_TYPE_DIRECT_ENTRY, $this->idSite4, 'http://google.com/subdir/index.html', 'http://google.com/search?q=test'), + [Common::REFERRER_TYPE_DIRECT_ENTRY, $this->idSite4, 'http://google.com/subdir/index.html', 'http://google.com/search?q=test'], // referrer comes from search engine not matching site - array(Common::REFERRER_TYPE_SEARCH_ENGINE, $this->idSite4, 'http://google.com/subdir/index.html', 'http://google.fr/search?q=test'), + [Common::REFERRER_TYPE_SEARCH_ENGINE, $this->idSite4, 'http://google.com/subdir/index.html', 'http://google.fr/search?q=test'], // site w/o url - array(Common::REFERRER_TYPE_DIRECT_ENTRY, $this->idSite5, $url, $referrer . '/'), - ); + [Common::REFERRER_TYPE_DIRECT_ENTRY, $this->idSite5, $url, $referrer . '/'], + + ##### testing referrer exclusion + [Common::REFERRER_TYPE_DIRECT_ENTRY, $this->idSite6, 'https://matomo.org/faq', 'http://www.paypal.com/subdir/site'], + [Common::REFERRER_TYPE_DIRECT_ENTRY, $this->idSite6, 'https://matomo.org/faq', 'https://paypal.com/subdir/site'], + [Common::REFERRER_TYPE_DIRECT_ENTRY, $this->idSite6, 'https://matomo.org/faq', 'https://payment.provider/subdir/site'], + [Common::REFERRER_TYPE_DIRECT_ENTRY, $this->idSite6, 'https://matomo.org/faq', 'https://custom.payment.provider/'], + [Common::REFERRER_TYPE_WEBSITE, $this->idSite6, 'https://matomo.org/faq', 'http://shop.paypal.com/subdir/site'], + [Common::REFERRER_TYPE_WEBSITE, $this->idSite6, 'https://matomo.org/faq', 'http://payments.amazon.com/'], + [Common::REFERRER_TYPE_DIRECT_ENTRY, $this->idSite6, 'https://matomo.org/faq', 'https://payments.amazon.com/proceed/with/payment'], + ]; } /** * @dataProvider getTestDataForOnExistingVisit */ - public function test_onExistingVisit_shouldSometimesOverwriteReferrerInfo($expectedType, $idSite, $url, $referrerUrl, $existingType) + public function testOnExistingVisitShouldSometimesOverwriteReferrerInfo($expectedType, $idSite, $url, $referrerUrl, $existingType) { - $request = $this->getRequest(array('idsite' => $idSite, 'url' => $url, 'urlref' => $referrerUrl)); + $request = $this->getRequest(['idsite' => $idSite, 'url' => $url, 'urlref' => $referrerUrl]); $visitor = $this->getNewVisitor(); $visitor->setVisitorColumn('referer_type', $existingType); $type = $this->referrerType->onExistingVisit($request, $visitor, $action = null); @@ -188,5 +203,4 @@ class ReferrerTypeTest extends IntegrationTestCase { return new Visitor(new VisitProperties()); } - } diff --git a/plugins/Referrers/tests/System/expected/test_phpSerialized8__Referrers.getReferrerType_year.original b/plugins/Referrers/tests/System/expected/test_phpSerialized8__Referrers.getReferrerType_year.original index 1a7eac1d06..5f28f88728 100644 --- a/plugins/Referrers/tests/System/expected/test_phpSerialized8__Referrers.getReferrerType_year.original +++ b/plugins/Referrers/tests/System/expected/test_phpSerialized8__Referrers.getReferrerType_year.original @@ -1 +1 @@ -O:15:"Piwik\DataTable":4:{s:7:"*rows";a:2:{i:0;O:19:"Piwik\DataTable\Row":4:{i:0;i:0;i:1;a:9:{s:5:"label";s:14:"Search Engines";s:9:"nb_visits";i:31;s:10:"nb_actions";i:31;s:11:"max_actions";d:1;s:16:"sum_visit_length";i:0;s:12:"bounce_count";i:31;s:19:"nb_visits_converted";i:0;s:26:"sum_daily_nb_uniq_visitors";i:31;s:18:"sum_daily_nb_users";i:0;}i:2;a:5:{s:15:"maxVisitsSummed";i:0;s:29:"Piwik\DataTable\Rowmetadata";a:2:{s:7:"segment";s:20:"referrerType==search";s:13:"referrer_type";i:2;}s:37:"Piwik\DataTable\RowisSubtableLoaded";b:0;s:10:"subtableId";N;s:33:"Piwik\DataTable\RowisSummaryRow";b:0;}i:3;N;}i:1;O:19:"Piwik\DataTable\Row":4:{i:0;i:0;i:1;a:12:{s:5:"label";s:8:"Websites";s:9:"nb_visits";i:31;s:10:"nb_actions";i:31;s:11:"max_actions";d:1;s:16:"sum_visit_length";i:11315;s:12:"bounce_count";i:31;s:19:"nb_visits_converted";i:31;s:5:"goals";a:2:{s:8:"idgoal=1";a:3:{s:14:"nb_conversions";i:31;s:19:"nb_visits_converted";i:31;s:7:"revenue";d:0;}s:8:"idgoal=2";a:3:{s:14:"nb_conversions";i:62;s:19:"nb_visits_converted";i:31;s:7:"revenue";d:0;}}s:14:"nb_conversions";i:93;s:7:"revenue";d:0;s:26:"sum_daily_nb_uniq_visitors";i:31;s:18:"sum_daily_nb_users";i:0;}i:2;a:5:{s:15:"maxVisitsSummed";i:0;s:29:"Piwik\DataTable\Rowmetadata";a:2:{s:7:"segment";s:21:"referrerType==website";s:13:"referrer_type";i:3;}s:37:"Piwik\DataTable\RowisSubtableLoaded";b:0;s:10:"subtableId";N;s:33:"Piwik\DataTable\RowisSummaryRow";b:0;}i:3;N;}}s:13:"*summaryRow";N;s:11:"*metadata";a:7:{s:11:"ts_archived";s:19:"today-date-removed-in-tests";s:4:"site";O:10:"Piwik\Site":2:{s:5:"*id";i:1;s:16:"Piwik\Sitesite";a:20:{s:6:"idsite";i:1;s:4:"name";s:10:"Piwik test";s:8:"main_url";s:16:"http://piwik.net";s:10:"ts_created";s:19:"2010-01-31 11:22:33";s:9:"ecommerce";i:0;s:10:"sitesearch";i:1;s:29:"sitesearch_keyword_parameters";s:0:"";s:30:"sitesearch_category_parameters";s:0:"";s:8:"timezone";s:3:"UTC";s:8:"currency";s:3:"USD";s:20:"exclude_unknown_urls";i:0;s:12:"excluded_ips";s:0:"";s:19:"excluded_parameters";s:0:"";s:20:"excluded_user_agents";s:0:"";s:5:"group";s:0:"";s:4:"type";s:7:"website";s:17:"keep_url_fragment";i:0;s:13:"creator_login";s:14:"superUserLogin";s:13:"timezone_name";s:3:"UTC";s:13:"currency_name";s:9:"US Dollar";}}s:6:"period";O:17:"Piwik\Period\Year":1:{s:7:"*date";O:10:"Piwik\Date":2:{s:12:"*timestamp";i:1262304000;s:11:"*timezone";s:3:"UTC";}}s:7:"segment";s:0:"";s:13:"segmentPretty";s:10:"All visits";s:6:"totals";a:15:{s:9:"nb_visits";i:62;s:10:"nb_actions";i:62;s:11:"max_actions";d:1;s:16:"sum_visit_length";i:11315;s:12:"bounce_count";i:62;s:19:"nb_visits_converted";i:31;s:26:"sum_daily_nb_uniq_visitors";i:62;s:18:"sum_daily_nb_users";i:0;s:5:"goals";a:2:{s:8:"idgoal=1";a:3:{s:14:"nb_conversions";i:31;s:19:"nb_visits_converted";i:31;s:7:"revenue";d:0;}s:8:"idgoal=2";a:3:{s:14:"nb_conversions";i:62;s:19:"nb_visits_converted";i:31;s:7:"revenue";d:0;}}s:14:"nb_conversions";i:93;s:7:"revenue";d:0;s:15:"conversion_rate";s:3:"50%";s:20:"nb_actions_per_visit";d:1;s:16:"avg_time_on_site";d:183;s:11:"bounce_rate";s:4:"100%";}s:17:"totalsUnformatted";a:15:{s:9:"nb_visits";i:62;s:10:"nb_actions";i:62;s:11:"max_actions";d:1;s:16:"sum_visit_length";i:11315;s:12:"bounce_count";i:62;s:19:"nb_visits_converted";i:31;s:26:"sum_daily_nb_uniq_visitors";i:62;s:18:"sum_daily_nb_users";i:0;s:5:"goals";a:2:{s:8:"idgoal=1";a:3:{s:14:"nb_conversions";i:31;s:19:"nb_visits_converted";i:31;s:7:"revenue";d:0;}s:8:"idgoal=2";a:3:{s:14:"nb_conversions";i:62;s:19:"nb_visits_converted";i:31;s:7:"revenue";d:0;}}s:14:"nb_conversions";i:93;s:7:"revenue";d:0;s:15:"conversion_rate";d:0.5;s:20:"nb_actions_per_visit";d:1;s:16:"avg_time_on_site";d:183;s:11:"bounce_rate";d:1;}}s:12:"*totalsRow";N;}
\ No newline at end of file +O:15:"Piwik\DataTable":4:{s:7:"*rows";a:2:{i:0;O:19:"Piwik\DataTable\Row":4:{i:0;i:0;i:1;a:9:{s:5:"label";s:14:"Search Engines";s:9:"nb_visits";i:31;s:10:"nb_actions";i:31;s:11:"max_actions";d:1;s:16:"sum_visit_length";i:0;s:12:"bounce_count";i:31;s:19:"nb_visits_converted";i:0;s:26:"sum_daily_nb_uniq_visitors";i:31;s:18:"sum_daily_nb_users";i:0;}i:2;a:5:{s:15:"maxVisitsSummed";i:0;s:29:"Piwik\DataTable\Rowmetadata";a:2:{s:7:"segment";s:20:"referrerType==search";s:13:"referrer_type";i:2;}s:37:"Piwik\DataTable\RowisSubtableLoaded";b:0;s:10:"subtableId";N;s:33:"Piwik\DataTable\RowisSummaryRow";b:0;}i:3;N;}i:1;O:19:"Piwik\DataTable\Row":4:{i:0;i:0;i:1;a:12:{s:5:"label";s:8:"Websites";s:9:"nb_visits";i:31;s:10:"nb_actions";i:31;s:11:"max_actions";d:1;s:16:"sum_visit_length";i:11315;s:12:"bounce_count";i:31;s:19:"nb_visits_converted";i:31;s:5:"goals";a:2:{s:8:"idgoal=1";a:3:{s:14:"nb_conversions";i:31;s:19:"nb_visits_converted";i:31;s:7:"revenue";d:0;}s:8:"idgoal=2";a:3:{s:14:"nb_conversions";i:62;s:19:"nb_visits_converted";i:31;s:7:"revenue";d:0;}}s:14:"nb_conversions";i:93;s:7:"revenue";d:0;s:26:"sum_daily_nb_uniq_visitors";i:31;s:18:"sum_daily_nb_users";i:0;}i:2;a:5:{s:15:"maxVisitsSummed";i:0;s:29:"Piwik\DataTable\Rowmetadata";a:2:{s:7:"segment";s:21:"referrerType==website";s:13:"referrer_type";i:3;}s:37:"Piwik\DataTable\RowisSubtableLoaded";b:0;s:10:"subtableId";N;s:33:"Piwik\DataTable\RowisSummaryRow";b:0;}i:3;N;}}s:13:"*summaryRow";N;s:11:"*metadata";a:7:{s:11:"ts_archived";s:19:"today-date-removed-in-tests";s:4:"site";O:10:"Piwik\Site":2:{s:5:"*id";i:1;s:16:"Piwik\Sitesite";a:21:{s:6:"idsite";i:1;s:4:"name";s:10:"Piwik test";s:8:"main_url";s:16:"http://piwik.net";s:10:"ts_created";s:19:"2010-01-31 11:22:33";s:9:"ecommerce";i:0;s:10:"sitesearch";i:1;s:29:"sitesearch_keyword_parameters";s:0:"";s:30:"sitesearch_category_parameters";s:0:"";s:8:"timezone";s:3:"UTC";s:8:"currency";s:3:"USD";s:20:"exclude_unknown_urls";i:0;s:12:"excluded_ips";s:0:"";s:19:"excluded_parameters";s:0:"";s:20:"excluded_user_agents";s:0:"";s:18:"excluded_referrers";s:0:"";s:5:"group";s:0:"";s:4:"type";s:7:"website";s:17:"keep_url_fragment";i:0;s:13:"creator_login";s:14:"superUserLogin";s:13:"timezone_name";s:3:"UTC";s:13:"currency_name";s:9:"US Dollar";}}s:6:"period";O:17:"Piwik\Period\Year":1:{s:7:"*date";O:10:"Piwik\Date":2:{s:12:"*timestamp";i:1262304000;s:11:"*timezone";s:3:"UTC";}}s:7:"segment";s:0:"";s:13:"segmentPretty";s:10:"All visits";s:6:"totals";a:15:{s:9:"nb_visits";i:62;s:10:"nb_actions";i:62;s:11:"max_actions";d:1;s:16:"sum_visit_length";i:11315;s:12:"bounce_count";i:62;s:19:"nb_visits_converted";i:31;s:26:"sum_daily_nb_uniq_visitors";i:62;s:18:"sum_daily_nb_users";i:0;s:5:"goals";a:2:{s:8:"idgoal=1";a:3:{s:14:"nb_conversions";i:31;s:19:"nb_visits_converted";i:31;s:7:"revenue";d:0;}s:8:"idgoal=2";a:3:{s:14:"nb_conversions";i:62;s:19:"nb_visits_converted";i:31;s:7:"revenue";d:0;}}s:14:"nb_conversions";i:93;s:7:"revenue";d:0;s:15:"conversion_rate";s:3:"50%";s:20:"nb_actions_per_visit";d:1;s:16:"avg_time_on_site";d:183;s:11:"bounce_rate";s:4:"100%";}s:17:"totalsUnformatted";a:15:{s:9:"nb_visits";i:62;s:10:"nb_actions";i:62;s:11:"max_actions";d:1;s:16:"sum_visit_length";i:11315;s:12:"bounce_count";i:62;s:19:"nb_visits_converted";i:31;s:26:"sum_daily_nb_uniq_visitors";i:62;s:18:"sum_daily_nb_users";i:0;s:5:"goals";a:2:{s:8:"idgoal=1";a:3:{s:14:"nb_conversions";i:31;s:19:"nb_visits_converted";i:31;s:7:"revenue";d:0;}s:8:"idgoal=2";a:3:{s:14:"nb_conversions";i:62;s:19:"nb_visits_converted";i:31;s:7:"revenue";d:0;}}s:14:"nb_conversions";i:93;s:7:"revenue";d:0;s:15:"conversion_rate";d:0.5;s:20:"nb_actions_per_visit";d:1;s:16:"avg_time_on_site";d:183;s:11:"bounce_rate";d:1;}}s:12:"*totalsRow";N;}
\ No newline at end of file diff --git a/plugins/Referrers/tests/System/expected/test_phpSerialized__Referrers.getReferrerType_year.original b/plugins/Referrers/tests/System/expected/test_phpSerialized__Referrers.getReferrerType_year.original Binary files differindex fa9d34832c..2c278cd091 100644 --- a/plugins/Referrers/tests/System/expected/test_phpSerialized__Referrers.getReferrerType_year.original +++ b/plugins/Referrers/tests/System/expected/test_phpSerialized__Referrers.getReferrerType_year.original diff --git a/plugins/SitesManager/API.php b/plugins/SitesManager/API.php index e213ff1c96..4b4b6c6175 100644 --- a/plugins/SitesManager/API.php +++ b/plugins/SitesManager/API.php @@ -1,4 +1,5 @@ <?php + /** * Matomo - free/libre analytics platform * @@ -6,6 +7,7 @@ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later * */ + namespace Piwik\Plugins\SitesManager; use DateTimeZone; @@ -14,6 +16,7 @@ use Piwik\Access; use Piwik\Common; use Piwik\Container\StaticContainer; use Piwik\Date; +use Piwik\Exception\UnexpectedWebsiteFoundException; use Piwik\Intl\Data\Provider\CurrencyDataProvider; use Matomo\Network\IPUtils; use Piwik\Option; @@ -61,6 +64,7 @@ class API extends \Piwik\Plugin\API const OPTION_SEARCH_KEYWORD_QUERY_PARAMETERS_GLOBAL = 'SitesManager_SearchKeywordParameters'; const OPTION_SEARCH_CATEGORY_QUERY_PARAMETERS_GLOBAL = 'SitesManager_SearchCategoryParameters'; const OPTION_EXCLUDED_USER_AGENTS_GLOBAL = 'SitesManager_ExcludedUserAgentsGlobal'; + const OPTION_EXCLUDED_REFERRERS_GLOBAL = 'SitesManager_ExcludedReferrersGlobal'; const OPTION_KEEP_URL_FRAGMENTS_GLOBAL = 'SitesManager_KeepURLFragmentsGlobal'; /** @@ -106,16 +110,29 @@ class API extends \Piwik\Plugin\API * @param bool $crossDomain * @param bool $forceMatomoEndpoint Whether the Matomo endpoint should be forced if Matomo was installed prior 3.7.0. * @param bool $excludedQueryParams + * @param mixed $excludedReferrers array or comma separated string of ignored referrers. Defaults to configured ignored referrers * * @return string The Javascript tag ready to be included on the HTML pages * @throws Exception */ - public function getJavascriptTag($idSite, $piwikUrl = '', $mergeSubdomains = false, $groupPageTitlesByDomain = false, - $mergeAliasUrls = false, $visitorCustomVariables = false, $pageCustomVariables = false, - $customCampaignNameQueryParam = false, $customCampaignKeywordParam = false, - $doNotTrack = false, $disableCookies = false, $trackNoScript = false, - $crossDomain = false, $forceMatomoEndpoint = false, $excludedQueryParams = false) - { + public function getJavascriptTag( + $idSite, + $piwikUrl = '', + $mergeSubdomains = false, + $groupPageTitlesByDomain = false, + $mergeAliasUrls = false, + $visitorCustomVariables = false, + $pageCustomVariables = false, + $customCampaignNameQueryParam = false, + $customCampaignKeywordParam = false, + $doNotTrack = false, + $disableCookies = false, + $trackNoScript = false, + $crossDomain = false, + $forceMatomoEndpoint = false, + $excludedQueryParams = false, + $excludedReferrers = false + ) { Piwik::checkUserHasViewAccess($idSite); if (empty($piwikUrl)) { @@ -140,13 +157,25 @@ class API extends \Piwik\Plugin\API $generator->forceMatomoEndpoint(); } - $code = $generator->generate($idSite, $piwikUrl, $mergeSubdomains, $groupPageTitlesByDomain, - $mergeAliasUrls, $visitorCustomVariables, $pageCustomVariables, - $customCampaignNameQueryParam, $customCampaignKeywordParam, - $doNotTrack, $disableCookies, $trackNoScript, $crossDomain, - $excludedQueryParams); - $code = str_replace(array('<br>', '<br />', '<br/>'), '', $code); - return $code; + $code = $generator->generate( + $idSite, + $piwikUrl, + $mergeSubdomains, + $groupPageTitlesByDomain, + $mergeAliasUrls, + $visitorCustomVariables, + $pageCustomVariables, + $customCampaignNameQueryParam, + $customCampaignKeywordParam, + $doNotTrack, + $disableCookies, + $trackNoScript, + $crossDomain, + $excludedQueryParams, + $excludedReferrers + ); + + return str_replace(['<br>', '<br />', '<br/>'], '', $code); } /** @@ -159,9 +188,15 @@ class API extends \Piwik\Plugin\API * @param bool $forceMatomoEndpoint Whether the Matomo endpoint should be forced if Matomo was installed prior 3.7.0. * @return string The HTML tracking code. */ - public function getImageTrackingCode($idSite, $piwikUrl = '', $actionName = false, $idGoal = false, $revenue = false, $forceMatomoEndpoint = false) - { - $urlParams = array('idsite' => $idSite, 'rec' => 1); + public function getImageTrackingCode( + $idSite, + $piwikUrl = '', + $actionName = false, + $idGoal = false, + $revenue = false, + $forceMatomoEndpoint = false + ) { + $urlParams = ['idsite' => $idSite, 'rec' => 1]; if ($actionName !== false) { $urlParams['action_name'] = urlencode(Common::unsanitizeInputValue($actionName)); @@ -184,7 +219,7 @@ class API extends \Piwik\Plugin\API * @param array &$urlParams The query parameters used in the <img> element's src * URL. See Matomo's image tracking docs for more info. */ - Piwik::postEvent('SitesManager.getImageTrackingCode', array(&$piwikUrl, &$urlParams)); + Piwik::postEvent('SitesManager.getImageTrackingCode', [&$piwikUrl, &$urlParams]); $trackerCodeGenerator = new TrackerCodeGenerator(); if ($forceMatomoEndpoint) { @@ -192,7 +227,7 @@ class API extends \Piwik\Plugin\API } $matomoPhp = $trackerCodeGenerator->getPhpTrackerEndpoint(); - $url = (ProxyHttp::isHttps() ? "https://" : "http://") . rtrim($piwikUrl, '/') . '/'.$matomoPhp.'?' . Url::getQueryStringFromParameters($urlParams); + $url = (ProxyHttp::isHttps() ? "https://" : "http://") . rtrim($piwikUrl, '/') . '/' . $matomoPhp . '?' . Url::getQueryStringFromParameters($urlParams); $html = "<!-- Matomo Image Tracker--> <img referrerpolicy=\"no-referrer-when-downgrade\" src=\"" . htmlspecialchars($url, ENT_COMPAT, 'UTF-8') . "\" style=\"border:0\" alt=\"\" /> <!-- End Matomo -->"; @@ -290,7 +325,7 @@ class API extends \Piwik\Plugin\API Piwik::checkUserHasSuperUserAccess(); $sites = $this->getModel()->getAllSites(); - $return = array(); + $return = []; foreach ($sites as $site) { $this->enrichSite($site); $return[$site['idsite']] = $site; @@ -314,7 +349,7 @@ class API extends \Piwik\Plugin\API return $this->getSitesId(); } catch (Exception $e) { // can be called before Matomo tables are created so return empty - return array(); + return []; } } @@ -428,20 +463,20 @@ class API extends \Piwik\Plugin\API return Access::getInstance()->getSitesIdWithAtLeastViewAccess(); } - if (!empty($_restrictSitesToLogin) + if ( + !empty($_restrictSitesToLogin) // Only Super User or logged in user can see viewable sites for a specific login, // but during scheduled task execution, we sometimes want to restrict sites to // a different login than the superuser. && (Piwik::hasUserSuperUserAccessOrIsTheUser($_restrictSitesToLogin) || $scheduler->isRunningTask()) ) { - if (Piwik::hasTheUserSuperUserAccess($_restrictSitesToLogin)) { return Access::getInstance()->getSitesIdWithAtLeastViewAccess(); } $accessRaw = Access::getInstance()->getRawSitesWithSomeViewAccess($_restrictSitesToLogin); - $sitesId = array(); + $sitesId = []; foreach ($accessRaw as $access) { $sitesId[] = $access['idsite']; @@ -482,13 +517,13 @@ class API extends \Piwik\Plugin\API $hostname = str_replace('https://', '', $hostname); // return all variations of the URL - return array( + return [ $url, "http://" . $hostname, "http://www." . $hostname, "https://" . $hostname, "https://www." . $hostname - ); + ]; } /** @@ -528,7 +563,7 @@ class API extends \Piwik\Plugin\API $ids = $this->getModel()->getSitesFromTimezones($timezones); - $return = array(); + $return = []; foreach ($ids as $id) { $return[] = $id['idsite']; } @@ -583,37 +618,40 @@ class API extends \Piwik\Plugin\API * @see getKeepURLFragmentsGlobal. * @param string $type The website type, defaults to "website" if not set. * @param bool|null $excludeUnknownUrls Track only URL matching one of website URLs + * @param string|null $excludedReferrers Comma separated list of hosts/urls to exclude from referrer detection * * @return int the website ID created */ - public function addSite($siteName, - $urls = null, - $ecommerce = null, - $siteSearch = null, - $searchKeywordParameters = null, - $searchCategoryParameters = null, - $excludedIps = null, - $excludedQueryParameters = null, - $timezone = null, - $currency = null, - $group = null, - $startDate = null, - $excludedUserAgents = null, - $keepURLFragments = null, - $type = null, - $settingValues = null, - $excludeUnknownUrls = null) - { + public function addSite( + $siteName, + $urls = null, + $ecommerce = null, + $siteSearch = null, + $searchKeywordParameters = null, + $searchCategoryParameters = null, + $excludedIps = null, + $excludedQueryParameters = null, + $timezone = null, + $currency = null, + $group = null, + $startDate = null, + $excludedUserAgents = null, + $keepURLFragments = null, + $type = null, + $settingValues = null, + $excludeUnknownUrls = null, + $excludedReferrers = null + ) { Piwik::checkUserHasSuperUserAccess(); SitesManager::dieIfSitesAdminIsDisabled(); $this->checkName($siteName); if (!isset($settingValues)) { - $settingValues = array(); + $settingValues = []; } - $coreProperties = array(); + $coreProperties = []; $coreProperties = $this->setSettingValue('urls', $urls, $coreProperties, $settingValues); $coreProperties = $this->setSettingValue('ecommerce', $ecommerce, $coreProperties, $settingValues); $coreProperties = $this->setSettingValue('group', $group, $coreProperties, $settingValues); @@ -625,6 +663,7 @@ class API extends \Piwik\Plugin\API $coreProperties = $this->setSettingValue('excluded_ips', explode(',', $excludedIps ?? ''), $coreProperties, $settingValues); $coreProperties = $this->setSettingValue('excluded_parameters', explode(',', $excludedQueryParameters ?? ''), $coreProperties, $settingValues); $coreProperties = $this->setSettingValue('excluded_user_agents', explode(',', $excludedUserAgents ?? ''), $coreProperties, $settingValues); + $coreProperties = $this->setSettingValue('excluded_referrers', explode(',', $excludedReferrers ?? ''), $coreProperties, $settingValues); $timezone = trim($timezone ?? ''); if (empty($timezone)) { @@ -637,7 +676,7 @@ class API extends \Piwik\Plugin\API } $this->checkValidCurrency($currency); - $bind = array('name' => $siteName); + $bind = ['name' => $siteName]; $bind['timezone'] = $timezone; $bind['currency'] = $currency; $bind['main_url'] = ''; @@ -700,7 +739,7 @@ class API extends \Piwik\Plugin\API * * @param int $idSite The ID of the site that was added. */ - Piwik::postEvent('SitesManager.addSite.end', array($idSite)); + Piwik::postEvent('SitesManager.addSite.end', [$idSite]); return (int) $idSite; } @@ -710,23 +749,20 @@ class API extends \Piwik\Plugin\API $pluginName = 'WebsiteMeasurable'; if (isset($value)) { - if (empty($coreProperties[$pluginName])) { - $coreProperties[$pluginName] = array(); + $coreProperties[$pluginName] = []; } - $coreProperties[$pluginName][] = array('name' => $fieldName, 'value' => $value); - + $coreProperties[$pluginName][] = ['name' => $fieldName, 'value' => $value]; } elseif (!empty($settingValues[$pluginName])) { // we check if the value is defined in the setting values instead foreach ($settingValues[$pluginName] as $key => $setting) { if ($setting['name'] === $fieldName) { - if (empty($coreProperties[$pluginName])) { - $coreProperties[$pluginName] = array(); + $coreProperties[$pluginName] = []; } - $coreProperties[$pluginName][] = array('name' => $fieldName, 'value' => $setting['value']); + $coreProperties[$pluginName][] = ['name' => $fieldName, 'value' => $setting['value']]; return $coreProperties; } } @@ -811,7 +847,7 @@ class API extends \Piwik\Plugin\API * * @param int $idSite The ID of the site being deleted. */ - Piwik::postEvent('SitesManager.deleteSite.end', array($idSite)); + Piwik::postEvent('SitesManager.deleteSite.end', [$idSite]); } private function checkValidTimezone($timezone) @@ -824,13 +860,13 @@ class API extends \Piwik\Plugin\API } } } - throw new Exception($this->translator->translate('SitesManager_ExceptionInvalidTimezone', array($timezone))); + throw new Exception($this->translator->translate('SitesManager_ExceptionInvalidTimezone', [$timezone])); } private function checkValidCurrency($currency) { if (!in_array($currency, array_keys($this->getCurrencyList()))) { - throw new Exception($this->translator->translate('SitesManager_ExceptionInvalidCurrency', array($currency, "USD, EUR, etc."))); + throw new Exception($this->translator->translate('SitesManager_ExceptionInvalidCurrency', [$currency, "USD, EUR, etc."])); } } @@ -853,7 +889,7 @@ class API extends \Piwik\Plugin\API * * @param string $excludedIps Comma separated list of IP addresses * @throws Exception - * @return array of IPs + * @return string Comma separated list of IP addresses */ private function checkAndReturnExcludedIps($excludedIps) { @@ -867,12 +903,16 @@ class API extends \Piwik\Plugin\API foreach ($ips as $ip) { if (!$this->isValidIp($ip)) { - throw new Exception($this->translator->translate('SitesManager_ExceptionInvalidIPFormat', array($ip, "1.2.3.4, 1.2.3.*, or 1.2.3.4/5"))); + throw new Exception( + $this->translator->translate( + 'SitesManager_ExceptionInvalidIPFormat', + [$ip, "1.2.3.4, 1.2.3.*, or 1.2.3.4/5"] + ) + ); } } - $ips = implode(',', $ips); - return $ips; + return implode(',', $ips); } /** @@ -894,7 +934,7 @@ class API extends \Piwik\Plugin\API } if (!is_array($urls)) { - $urls = array($urls); + $urls = [$urls]; } $urlsInit = $this->getSiteUrlsFromId($idSite); @@ -919,7 +959,7 @@ class API extends \Piwik\Plugin\API * * @return int the number of inserted URLs */ - public function setSiteAliasUrls($idSite, $urls = array()) + public function setSiteAliasUrls($idSite, $urls = []) { Piwik::checkUserHasAdminAccess($idSite); @@ -950,7 +990,7 @@ class API extends \Piwik\Plugin\API return false; } - return array(IPUtils::binaryToStringIP($range[0]), IPUtils::binaryToStringIP($range[1])); + return [IPUtils::binaryToStringIP($range[0]), IPUtils::binaryToStringIP($range[1])]; } /** @@ -1055,6 +1095,75 @@ class API extends \Piwik\Plugin\API } /** + * Returns the list of urls/hosts that should be ignored when detecting referrers for the given site. + * + * @return array list of urls/hosts + */ + public function getExcludedReferrers($idSite) + { + try { + $attributes = Cache::getCacheWebsiteAttributes($idSite); + + if (isset($attributes['excluded_referrers'])) { + return $attributes['excluded_referrers']; + } + } catch (UnexpectedWebsiteFoundException $e) { + $cached = Cache::getCacheGeneral(); + if (isset($cached['global_excluded_referrers'])) { + return $cached['global_excluded_referrers']; + } + } + + return []; + } + + /** + * Returns the global list of urls/hosts that should be ignored when detecting referrers. + * If a visitor is coming from a site on this list, it will be treated as direct entry + * + * @return string Comma separated list of strings + */ + public function getExcludedReferrersGlobal(): string + { + Piwik::checkUserHasSomeAdminAccess(); + $exclusion = Option::get(self::OPTION_EXCLUDED_REFERRERS_GLOBAL); + + return is_string($exclusion) ? $exclusion : ''; + } + + /** + * Sets list of urls/hosts that should be ignored when detecting referrers. For more info, + * @see getExcludedReferrersGlobal. + * + * @param string $excludedReferrers Comma separated list of strings. Each element is trimmed, + * and empty strings are removed. + */ + public function setGlobalExcludedReferrers(string $excludedReferrers): void + { + Piwik::checkUserHasSuperUserAccess(); + + $excludedUrls = $this->checkAndReturnCommaSeparatedStringList($excludedReferrers); + + foreach (explode(',', $excludedUrls) ?: [] as $url) { + // We allow urls to be provided: + // - fully qualified like http://example.url/path + // - without protocol like example.url/path + // - with subdomain wildcard like .example.url/path + $prefixedUrl = 'https://' . ltrim(preg_replace('/^https?:\/\//', '', $url), '.'); + $parsedUrl = @parse_url($prefixedUrl); + if (false === $parsedUrl || !UrlHelper::isLookLikeUrl($prefixedUrl)) { + throw new Exception(Piwik::translate('SitesManager_ExceptionInvalidUrl', [$url])); + } + } + + // update option + Option::set(self::OPTION_EXCLUDED_REFERRERS_GLOBAL, $excludedUrls); + + // make sure tracker cache will reflect change + Cache::deleteTrackerCache(); + } + + /** * Returns true if the default behavior is to keep URL fragments when tracking, * false if otherwise. * @@ -1195,31 +1304,34 @@ class API extends \Piwik\Plugin\API * @param string $type The Website type, default value is "website" * @param array|null $settingValues JSON serialized settings eg {settingName: settingValue, ...} * @param bool|null $excludeUnknownUrls Track only URL matching one of website URLs + * @param string|null $excludedReferrers Comma separated list of hosts/urls to exclude from referrer detection * @throws Exception * @see getKeepURLFragmentsGlobal. If null, the existing value will * not be modified. * * @return bool true on success */ - public function updateSite($idSite, - $siteName = null, - $urls = null, - $ecommerce = null, - $siteSearch = null, - $searchKeywordParameters = null, - $searchCategoryParameters = null, - $excludedIps = null, - $excludedQueryParameters = null, - $timezone = null, - $currency = null, - $group = null, - $startDate = null, - $excludedUserAgents = null, - $keepURLFragments = null, - $type = null, - $settingValues = null, - $excludeUnknownUrls = null) - { + public function updateSite( + $idSite, + $siteName = null, + $urls = null, + $ecommerce = null, + $siteSearch = null, + $searchKeywordParameters = null, + $searchCategoryParameters = null, + $excludedIps = null, + $excludedQueryParameters = null, + $timezone = null, + $currency = null, + $group = null, + $startDate = null, + $excludedUserAgents = null, + $keepURLFragments = null, + $type = null, + $settingValues = null, + $excludeUnknownUrls = null, + $excludedReferrers = null + ) { Piwik::checkUserHasAdminAccess($idSite); SitesManager::dieIfSitesAdminIsDisabled(); @@ -1230,7 +1342,7 @@ class API extends \Piwik\Plugin\API } // Build the SQL UPDATE based on specified updates to perform - $bind = array(); + $bind = []; if (!is_null($siteName)) { $this->checkName($siteName); @@ -1238,11 +1350,11 @@ class API extends \Piwik\Plugin\API } if (!isset($settingValues)) { - $settingValues = array(); + $settingValues = []; } if (empty($coreProperties)) { - $coreProperties = array(); + $coreProperties = []; } $coreProperties = $this->setSettingValue('urls', $urls, $coreProperties, $settingValues); @@ -1256,6 +1368,7 @@ class API extends \Piwik\Plugin\API $coreProperties = $this->setSettingValue('excluded_ips', explode(',', $excludedIps ?? ''), $coreProperties, $settingValues); $coreProperties = $this->setSettingValue('excluded_parameters', explode(',', $excludedQueryParameters ?? ''), $coreProperties, $settingValues); $coreProperties = $this->setSettingValue('excluded_user_agents', explode(',', $excludedUserAgents ?? ''), $coreProperties, $settingValues); + $coreProperties = $this->setSettingValue('excluded_referrers', explode(',', $excludedReferrers ?? ''), $coreProperties, $settingValues); if (isset($currency)) { $currency = trim($currency); @@ -1267,7 +1380,8 @@ class API extends \Piwik\Plugin\API $this->checkValidTimezone($timezone); $bind['timezone'] = $timezone; } - if (isset($group) + if ( + isset($group) && Piwik::hasUserSuperUserAccess() ) { $bind['group'] = trim($group); @@ -1346,7 +1460,7 @@ class API extends \Piwik\Plugin\API $dataProvider = StaticContainer::get('Piwik\Intl\Data\Provider\CurrencyDataProvider'); $currency = $dataProvider->getCurrencyList(); - $return = array(); + $return = []; foreach (array_keys($currency) as $currencyCode) { $return[$currencyCode] = $this->translator->translate('Intl_Currency_' . $currencyCode) . ' (' . $this->translator->translate('Intl_CurrencySymbol_' . $currencyCode) . ')'; @@ -1393,13 +1507,13 @@ class API extends \Piwik\Plugin\API public function getTimezonesList() { if (!SettingsServer::isTimezoneSupportEnabled()) { - return array('UTC' => $this->getTimezonesListUTCOffsets()); + return ['UTC' => $this->getTimezonesListUTCOffsets()]; } $countries = StaticContainer::get('Piwik\Intl\Data\Provider\RegionDataProvider')->getCountryList(); - $return = array(); - $continents = array(); + $return = []; + $continents = []; foreach ($countries as $countryCode => $continentCode) { $countryCode = strtoupper($countryCode); $timezones = DateTimeZone::listIdentifiers(DateTimeZone::PER_COUNTRY, $countryCode); @@ -1436,7 +1550,7 @@ class API extends \Piwik\Plugin\API public function getTimezoneName($timezone, $countryCode = null, $multipleTimezonesInCountry = null) { if (substr($timezone, 0, 3) === 'UTC') { - return $this->translator->translate('SitesManager_Format_Utc', str_replace(array('.25', '.5', '.75'), array(':15', ':30', ':45'), substr($timezone, 3))); + return $this->translator->translate('SitesManager_Format_Utc', str_replace(['.25', '.5', '.75'], [':15', ':30', ':45'], substr($timezone, 3))); } if (!isset($countryCode)) { @@ -1463,7 +1577,7 @@ class API extends \Piwik\Plugin\API $return = $this->translator->translate('Intl_Country_' . $countryCode); if ($multipleTimezonesInCountry) { - $translationId = 'Intl_Timezone_' . str_replace(array('_', '/'), array('', '_'), $timezone); + $translationId = 'Intl_Timezone_' . str_replace(['_', '/'], ['', '_'], $timezone); $city = $this->translator->translate($translationId); // Fall back to English identifier, if translation is missing due to differences in tzdata in different PHP versions. @@ -1481,10 +1595,10 @@ class API extends \Piwik\Plugin\API private function getTimezonesListUTCOffsets() { // manually add the UTC offsets - $GmtOffsets = array(-12, -11.5, -11, -10.5, -10, -9.5, -9, -8.5, -8, -7.5, -7, -6.5, -6, -5.5, -5, -4.5, -4, -3.5, -3, -2.5, -2, -1.5, -1, -0.5, - 0, 0.5, 1, 1.5, 2, 2.5, 3, 3.5, 4, 4.5, 5, 5.5, 5.75, 6, 6.5, 7, 7.5, 8, 8.5, 8.75, 9, 9.5, 10, 10.5, 11, 11.5, 12, 12.75, 13, 13.75, 14); + $GmtOffsets = [-12, -11.5, -11, -10.5, -10, -9.5, -9, -8.5, -8, -7.5, -7, -6.5, -6, -5.5, -5, -4.5, -4, -3.5, -3, -2.5, -2, -1.5, -1, -0.5, + 0, 0.5, 1, 1.5, 2, 2.5, 3, 3.5, 4, 4.5, 5, 5.5, 5.75, 6, 6.5, 7, 7.5, 8, 8.5, 8.75, 9, 9.5, 10, 10.5, 11, 11.5, 12, 12.75, 13, 13.75, 14]; - $return = array(); + $return = []; foreach ($GmtOffsets as $offset) { $offset = Common::forceDotAsSeparatorForDecimalPoint($offset); @@ -1520,7 +1634,8 @@ class API extends \Piwik\Plugin\API private function removeTrailingSlash($url) { // if there is a final slash, we take the URL without this slash (expected URL format) - if (strlen($url) > 5 + if ( + strlen($url) > 5 && $url[strlen($url) - 1] == '/' ) { $url = substr($url, 0, strlen($url) - 1); @@ -1576,18 +1691,20 @@ class API extends \Piwik\Plugin\API $sitesHavingOldGroup = $this->getSitesFromGroup($oldGroupName); foreach ($sitesHavingOldGroup as $site) { - $this->updateSite($site['idsite'], - $siteName = null, - $urls = null, - $ecommerce = null, - $siteSearch = null, - $searchKeywordParameters = null, - $searchCategoryParameters = null, - $excludedIps = null, - $excludedQueryParameters = null, - $timezone = null, - $currency = null, - $newGroupName); + $this->updateSite( + $site['idsite'], + $siteName = null, + $urls = null, + $ecommerce = null, + $siteSearch = null, + $searchKeywordParameters = null, + $searchCategoryParameters = null, + $excludedIps = null, + $excludedQueryParameters = null, + $timezone = null, + $currency = null, + $newGroupName + ); } return true; @@ -1608,7 +1725,7 @@ class API extends \Piwik\Plugin\API { $ids = $this->getSitesIdWithAtLeastViewAccess(); if (empty($ids)) { - return array(); + return []; } $sites = $this->getModel()->getPatternMatchSites($ids, $pattern, $limit); @@ -1637,5 +1754,4 @@ class API extends \Piwik\Plugin\API return SettingsPiwik::getWebsitesCountToDisplay(); } - } diff --git a/plugins/SitesManager/Controller.php b/plugins/SitesManager/Controller.php index 79e671a720..197dca845e 100644 --- a/plugins/SitesManager/Controller.php +++ b/plugins/SitesManager/Controller.php @@ -1,4 +1,5 @@ <?php + /** * Matomo - free/libre analytics platform * @@ -6,6 +7,7 @@ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later * */ + namespace Piwik\Plugins\SitesManager; use Exception; @@ -32,7 +34,8 @@ class Controller extends \Piwik\Plugin\ControllerAdmin /** @var Lazy */ private $cache; - public function __construct(Lazy $cache) { + public function __construct(Lazy $cache) + { $this->cache = $cache; parent::__construct(); @@ -62,7 +65,7 @@ class Controller extends \Piwik\Plugin\ControllerAdmin $response = new ResponseBuilder(Common::getRequestVar('format')); - $globalSettings = array(); + $globalSettings = []; $globalSettings['keepURLFragmentsGlobal'] = API::getInstance()->getKeepURLFragmentsGlobal(); $globalSettings['defaultCurrency'] = API::getInstance()->getDefaultCurrency(); $globalSettings['searchKeywordParametersGlobal'] = API::getInstance()->getSearchKeywordParametersGlobal(); @@ -71,6 +74,7 @@ class Controller extends \Piwik\Plugin\ControllerAdmin $globalSettings['excludedIpsGlobal'] = API::getInstance()->getExcludedIpsGlobal(); $globalSettings['excludedQueryParametersGlobal'] = API::getInstance()->getExcludedQueryParametersGlobal(); $globalSettings['excludedUserAgentsGlobal'] = API::getInstance()->getExcludedUserAgentsGlobal(); + $globalSettings['excludedReferrersGlobal'] = API::getInstance()->getExcludedReferrersGlobal(); return $response->getResponse($globalSettings); } @@ -88,6 +92,7 @@ class Controller extends \Piwik\Plugin\ControllerAdmin $excludedIps = Common::getRequestVar('excludedIps', false); $excludedQueryParameters = Common::getRequestVar('excludedQueryParameters', false); $excludedUserAgents = Common::getRequestVar('excludedUserAgents', false); + $excludedReferrers = Common::getRequestVar('excludedReferrers', false); $currency = Common::getRequestVar('currency', false); $searchKeywordParameters = Common::getRequestVar('searchKeywordParameters', $default = ""); $searchCategoryParameters = Common::getRequestVar('searchCategoryParameters', $default = ""); @@ -99,6 +104,7 @@ class Controller extends \Piwik\Plugin\ControllerAdmin $api->setGlobalExcludedQueryParameters($excludedQueryParameters); $api->setGlobalExcludedIps($excludedIps); $api->setGlobalExcludedUserAgents($excludedUserAgents); + $api->setGlobalExcludedReferrers($excludedReferrers); $api->setGlobalSearchParameters($searchKeywordParameters, $searchCategoryParameters); $api->setKeepURLFragmentsGlobal($keepURLFragments); @@ -159,7 +165,8 @@ class Controller extends \Piwik\Plugin\ControllerAdmin ), $viewType = 'basic'); } - public function siteWithoutDataTabs() { + public function siteWithoutDataTabs() + { $this->checkSitePermission(); $mainUrl = $this->site->getMainUrl(); diff --git a/plugins/SitesManager/SiteUrls.php b/plugins/SitesManager/SiteUrls.php index 530577b9ac..8880af0972 100644 --- a/plugins/SitesManager/SiteUrls.php +++ b/plugins/SitesManager/SiteUrls.php @@ -1,4 +1,5 @@ <?php + /** * Matomo - free/libre analytics platform * @@ -6,6 +7,7 @@ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later * */ + namespace Piwik\Plugins\SitesManager; use Piwik\Cache; @@ -44,10 +46,10 @@ class SiteUrls public function groupUrlsByHost($siteUrls) { if (empty($siteUrls)) { - return array(); + return []; } - $allUrls = array(); + $allUrls = []; foreach ($siteUrls as $idSite => $urls) { $idSite = (int) $idSite; @@ -61,7 +63,7 @@ class SiteUrls return $allUrls; } - private function addUrlByHost(&$allUrls, $idSite, $url, $addPath = true) + public function addUrlByHost(&$allUrls, $idSite, $url, $addPath = true) { $urlParsed = @parse_url($url); @@ -73,7 +75,7 @@ class SiteUrls $path = $this->getCanonicalPathFromParsedUrl($urlParsed); if (!isset($allUrls[$host])) { - $allUrls[$host] = array(); + $allUrls[$host] = []; } if (!$addPath) { @@ -81,7 +83,7 @@ class SiteUrls } if (!isset($allUrls[$host][$path])) { - $allUrls[$host][$path] = array(); + $allUrls[$host][$path] = []; } if (!in_array($idSite, $allUrls[$host][$path])) { @@ -92,7 +94,7 @@ class SiteUrls private function sortUrlsByHost(&$allUrls) { foreach ($allUrls as $host => $paths) { - uksort($paths, array($this, 'sortByPathDepth')); + uksort($paths, [$this, 'sortByPathDepth']); $allUrls[$host] = $paths; } } @@ -106,23 +108,38 @@ class SiteUrls $urlHost = $this->toCanonicalHost($parsedUrl['host']); $urlPath = $this->getCanonicalPathFromParsedUrl($parsedUrl); - $matchingSites = null; - if (isset($urlsGroupedByHost[$urlHost])) { - $paths = $urlsGroupedByHost[$urlHost]; - - foreach ($paths as $path => $idSites) { - if (0 === strpos($urlPath, $path)) { - $matchingSites = $idSites; - break; + // As wildcard subdomain might be allowed, for e.g. my.sub.example.org we need to check e.g. + // - my.sub.example.org + // - .my.sub.example.org + // - .sub.example.org + // - .example.org + $hostsToCheck = [ + $urlHost, + '.' . $urlHost, + ]; + + while (substr_count($urlHost, '.') >= 2) { + $urlHost = substr($urlHost, strpos($urlHost, '.') + 1); + $hostsToCheck[] = '.' . $urlHost; + } + + foreach ($hostsToCheck as $host) { + if (isset($urlsGroupedByHost[$host])) { + $paths = $urlsGroupedByHost[$host]; + + foreach ($paths as $path => $idSites) { + if (0 === strpos($urlPath, $path)) { + return $idSites; + } } - } - if (!isset($matchingSites) && isset($paths['/'])) { - $matchingSites = $paths['/']; + if (isset($paths['/'])) { + return $paths['/']; + } } } - return $matchingSites; + return null; } public function getPathMatchingUrl($parsedUrl, $urlsGroupedByHost) @@ -134,7 +151,6 @@ class SiteUrls $urlHost = $this->toCanonicalHost($parsedUrl['host']); $urlPath = $this->getCanonicalPathFromParsedUrl($parsedUrl); - $matchingSites = null; if (isset($urlsGroupedByHost[$urlHost])) { $paths = $urlsGroupedByHost[$urlHost]; @@ -165,15 +181,15 @@ class SiteUrls $siteUrls = $model->getAllKnownUrlsForAllSites(); if (empty($siteUrls)) { - return array(); + return []; } - $urls = array(); + $urls = []; foreach ($siteUrls as $siteUrl) { $siteId = (int) $siteUrl['idsite']; if (!isset($urls[$siteId])) { - $urls[$siteId] = array(); + $urls[$siteId] = []; } $urls[$siteId][] = $siteUrl['url']; @@ -231,5 +247,4 @@ class SiteUrls return $path; } - } diff --git a/plugins/SitesManager/SitesManager.php b/plugins/SitesManager/SitesManager.php index 7b0b305cd0..a43ed32813 100644 --- a/plugins/SitesManager/SitesManager.php +++ b/plugins/SitesManager/SitesManager.php @@ -183,6 +183,7 @@ class SitesManager extends \Piwik\Plugin $array['excluded_ips'] = $this->getTrackerExcludedIps($website); $array['excluded_parameters'] = self::getTrackerExcludedQueryParameters($website); $array['excluded_user_agents'] = self::getExcludedUserAgents($website); + $array['excluded_referrers'] = self::getExcludedReferrers($website); $array['keep_url_fragment'] = self::shouldKeepURLFragmentsFor($website); $array['sitesearch'] = $website['sitesearch']; $array['sitesearch_keyword_parameters'] = $this->getTrackerSearchKeywordParameters($website); @@ -207,6 +208,7 @@ class SitesManager extends \Piwik\Plugin Access::doAsSuperUser(function () use (&$cache) { $cache['global_excluded_user_agents'] = self::filterBlankFromCommaSepList(API::getInstance()->getExcludedUserAgentsGlobal()); $cache['global_excluded_ips'] = self::filterBlankFromCommaSepList(API::getInstance()->getExcludedIpsGlobal()); + $cache['global_excluded_referrers'] = self::filterBlankFromCommaSepList(API::getInstance()->getExcludedReferrersGlobal()); }); } @@ -296,6 +298,20 @@ class SitesManager extends \Piwik\Plugin } /** + * Returns the array of excluded referrers. Filters out + * any garbage data & trims each entry. + * + * @param array $website The full set of information for a site. + * @return array + */ + private static function getExcludedReferrers($website) + { + $excludedReferrers = API::getInstance()->getExcludedReferrersGlobal(); + $excludedReferrers .= ',' . $website['excluded_referrers']; + return self::filterBlankFromCommaSepList($excludedReferrers); + } + + /** * Returns the array of URL query parameters to exclude from URLs * * @param array $website @@ -448,6 +464,12 @@ class SitesManager extends \Piwik\Plugin $translationKeys[] = "SitesManager_JsTrackingTagHelp"; $translationKeys[] = "SitesManager_SiteWithoutDataSinglePageApplication"; $translationKeys[] = "SitesManager_SiteWithoutDataSinglePageApplicationDescription"; - + $translationKeys[] = "SitesManager_GlobalListExcludedReferrers"; + $translationKeys[] = "SitesManager_GlobalListExcludedReferrersDesc"; + $translationKeys[] = "SitesManager_ExcludedReferrers"; + $translationKeys[] = "SitesManager_ExcludedReferrersHelp"; + $translationKeys[] = "SitesManager_ExcludedReferrersHelpDetails"; + $translationKeys[] = "SitesManager_ExcludedReferrersHelpExamples"; + $translationKeys[] = "SitesManager_ExcludedReferrersHelpSubDomains"; } } diff --git a/plugins/SitesManager/lang/en.json b/plugins/SitesManager/lang/en.json index 8e0decd70e..e3e4166255 100644 --- a/plugins/SitesManager/lang/en.json +++ b/plugins/SitesManager/lang/en.json @@ -25,6 +25,13 @@ "ExcludedIps": "Excluded IPs", "ExcludedParameters": "Excluded Parameters", "ExcludedUserAgents": "Excluded User Agents", + "ExcludedReferrers": "Excluded referrers", + "ExcludedReferrersHelp": "Enter the list of hostnames and URLs, one per line, you want to exclude from referrer detection.", + "ExcludedReferrersHelpDetails": "Each entry needs to contain the hostname and may contain a path. If a path is provided a referrer will only be excluded if the path matches as well. URLs with and without 'www' are treated the same. Provided protocols will be ignored.", + "ExcludedReferrersHelpExamples": "e.g. \"%1$s\" would match \"%2$s\" and \"%3$s\" but not \"%4$s\"", + "ExcludedReferrersHelpSubDomains": "To also exclude all subdomains of a certain hostname, prefix it with a dot. e.g. \"%1$s\" would exclude \"%2$s\", but also all its subdomains like \"%3$s\".", + "GlobalListExcludedReferrers": "Global list of excluded referrers", + "GlobalListExcludedReferrersDesc": "The hostnames and URLs below will be excluded from referrer detection.", "Format_Utc": "UTC%s", "GlobalExcludedUserAgentHelp1": "Enter the list of user agents to exclude from being tracked by Matomo.", "GlobalExcludedUserAgentHelp2": "You can use this to exclude some bots from being tracked.", diff --git a/plugins/SitesManager/tests/Fixtures/ManySites.php b/plugins/SitesManager/tests/Fixtures/ManySites.php index f070a53174..4f30ae492f 100644 --- a/plugins/SitesManager/tests/Fixtures/ManySites.php +++ b/plugins/SitesManager/tests/Fixtures/ManySites.php @@ -1,10 +1,12 @@ <?php + /** * Matomo - free/libre analytics platform * * @link https://matomo.org * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later */ + namespace Piwik\Plugins\SitesManager\tests\Fixtures; use Piwik\Plugins\MobileAppMeasurable; @@ -32,12 +34,18 @@ class ManySites extends Fixture $type = MobileAppMeasurable\Type::ID; } - self::createWebsite($this->dateTime, $ecommerce = 0, $siteName, - $siteUrl = false, - $siteSearch = 1, $searchKeywordParameters = null, - $searchCategoryParameters = null, $timezone = null, $type); + self::createWebsite( + $this->dateTime, + $ecommerce = 0, + $siteName, + $siteUrl = false, + $siteSearch = 1, + $searchKeywordParameters = null, + $searchCategoryParameters = null, + $timezone = null, + $type + ); } } } - -}
\ No newline at end of file +} diff --git a/plugins/SitesManager/tests/Integration/ApiTest.php b/plugins/SitesManager/tests/Integration/ApiTest.php index 3966c30c76..e94fbdec16 100644 --- a/plugins/SitesManager/tests/Integration/ApiTest.php +++ b/plugins/SitesManager/tests/Integration/ApiTest.php @@ -1,4 +1,5 @@ <?php + /** * Matomo - free/libre analytics platform * @@ -52,11 +53,11 @@ class ApiTest extends IntegrationTestCase /** * empty name -> exception */ - public function test_addSite_WithEmptyName_ThrowsException() + public function testAddSiteWithEmptyNameThrowsException() { $this->expectException(\Exception::class); - API::getInstance()->addSite("", array("http://piwik.net")); + API::getInstance()->addSite("", ["http://piwik.net"]); } /** @@ -64,13 +65,13 @@ class ApiTest extends IntegrationTestCase */ public function getInvalidUrlData() { - return array( - array(array()), // no urls - array(array("")), - array(""), - array("5http://piwik.net"), - array("???://piwik.net"), - ); + return [ + [[]], // no urls + [[""]], + [""], + ["5http://piwik.net"], + ["???://piwik.net"], + ]; } /** @@ -78,7 +79,7 @@ class ApiTest extends IntegrationTestCase * * @dataProvider getInvalidUrlData */ - public function test_addSite_WithWrongUrls_ThrowsException($url) + public function testAddSiteWithWrongUrlsThrowsException($url) { $this->expectException(\Exception::class); API::getInstance()->addSite("name", $url); @@ -87,7 +88,7 @@ class ApiTest extends IntegrationTestCase /** * Test with valid IPs */ - public function test_addSite_WithExcludedIps_AndTimezone_AndCurrency_AndExcludedQueryParameters_SucceedsWhenParamsAreValid() + public function testAddSiteWithExcludedIpsAndTimezoneAndCurrencyAndExcludedQueryParametersSucceedsWhenParamsAreValid() { $this->addSiteTest($expectedWebsiteType = 'mobile-\'app'); } @@ -95,7 +96,7 @@ class ApiTest extends IntegrationTestCase /** * @dataProvider getDifferentTypesDataProvider */ - public function test_addSite_WhenTypeIsKnown($expectedWebsiteType) + public function testAddSiteWhenTypeIsKnown($expectedWebsiteType) { $this->addSiteTest($expectedWebsiteType); } @@ -109,11 +110,28 @@ class ApiTest extends IntegrationTestCase $expectedExcludedQueryParameters = 'p1,P2,P33333'; $excludedUserAgents = " p1,P2, \nP3333 "; $expectedExcludedUserAgents = "p1,P2,P3333"; + $excludedReferrers = 'http://www.paypal.com,https://amazon.com'; $keepUrlFragment = 1; - $idsite = API::getInstance()->addSite("name", "http://piwik.net/", $ecommerce = 1, - $siteSearch = 1, $searchKeywordParameters = 'search,param', $searchCategoryParameters = 'cat,category', - $ips, $excludedQueryParameters, $timezone, $currency, $group = null, $startDate = null, $excludedUserAgents, - $keepUrlFragment, $expectedWebsiteType, $settingValues); + $idsite = API::getInstance()->addSite( + "name", + "http://piwik.net/", + $ecommerce = 1, + $siteSearch = 1, + $searchKeywordParameters = 'search,param', + $searchCategoryParameters = 'cat,category', + $ips, + $excludedQueryParameters, + $timezone, + $currency, + $group = null, + $startDate = null, + $excludedUserAgents, + $keepUrlFragment, + $expectedWebsiteType, + $settingValues, + null, + $excludedReferrers + ); $siteInfo = API::getInstance()->getSiteFromId($idsite); $this->assertEquals($ips, $siteInfo['excluded_ips']); $this->assertEquals($timezone, $siteInfo['timezone']); @@ -131,6 +149,7 @@ class ApiTest extends IntegrationTestCase $this->assertEquals($searchCategoryParameters, $siteInfo['sitesearch_category_parameters']); $this->assertEquals($expectedExcludedQueryParameters, $siteInfo['excluded_parameters']); $this->assertEquals($expectedExcludedUserAgents, $siteInfo['excluded_user_agents']); + $this->assertEquals($excludedReferrers, $siteInfo['excluded_referrers']); return $siteInfo; } @@ -140,15 +159,15 @@ class ApiTest extends IntegrationTestCase */ public function getInvalidIPsData() { - return array( - array('35817587341'), - array('ieagieha'), - array('1.2.3'), - array('*.1.1.1'), - array('*.*.1.1'), - array('*.*.*.1'), - array('1.1.1.1.1'), - ); + return [ + ['35817587341'], + ['ieagieha'], + ['1.2.3'], + ['*.1.1.1'], + ['*.*.1.1'], + ['*.*.*.1'], + ['1.1.1.1.1'], + ]; } /** @@ -156,17 +175,24 @@ class ApiTest extends IntegrationTestCase * * @dataProvider getInvalidIPsData */ - public function test_addSite_WithInvalidExcludedIps_ThrowsException($ip) + public function testAddSiteWithInvalidExcludedIpsThrowsException($ip) { $this->expectException(\Exception::class); - API::getInstance()->addSite("name", "http://piwik.net/", $ecommerce = 0, - $siteSearch = 1, $searchKeywordParameters = null, $searchCategoryParameters = null, $ip); + API::getInstance()->addSite( + "name", + "http://piwik.net/", + $ecommerce = 0, + $siteSearch = 1, + $searchKeywordParameters = null, + $searchCategoryParameters = null, + $ip + ); } /** * one url -> one main_url and nothing inserted as alias urls */ - public function test_addSite_WithOneUrl_Succeeds_AndCreatesNoAliasUrls() + public function testAddSiteWithOneUrlSucceedsAndCreatesNoAliasUrls() { $url = "http://piwik.net/"; $urlOK = "http://piwik.net"; @@ -184,10 +210,10 @@ class ApiTest extends IntegrationTestCase /** * several urls -> one main_url and others as alias urls */ - public function test_addSite_WithSeveralUrls_Succeeds_AndCreatesAliasUrls() + public function testAddSiteWithSeveralUrlsSucceedsAndCreatesAliasUrls() { - $urls = array("http://piwik.net/", "http://piwik.com", "https://piwik.net/test/", "piwik.net/another/test"); - $urlsOK = array("http://piwik.net", "http://piwik.com", "http://piwik.net/another/test", "https://piwik.net/test"); + $urls = ["http://piwik.net/", "http://piwik.com", "https://piwik.net/test/", "piwik.net/another/test"]; + $urlsOK = ["http://piwik.net", "http://piwik.com", "http://piwik.net/another/test", "https://piwik.net/test"]; $idsite = API::getInstance()->addSite("super website", $urls); self::assertIsInt($idsite); @@ -201,7 +227,7 @@ class ApiTest extends IntegrationTestCase /** * strange name */ - public function test_addSite_WithStrangeName_Succeeds() + public function testAddSiteWithStrangeNameSucceeds() { $name = "supertest(); ~@@()''!£\$'%%^'!£ போ"; $idsite = API::getInstance()->addSite($name, "http://piwik.net"); @@ -209,34 +235,32 @@ class ApiTest extends IntegrationTestCase $siteInfo = API::getInstance()->getSiteFromId($idsite); $this->assertEquals($name, $siteInfo['name']); - } /** * @dataProvider getDifferentTypesDataProvider */ - public function test_addSite_ShouldFailAndNotCreatedASite_IfASettingIsInvalid($type) + public function testAddSiteShouldFailAndNotCreatedASiteIfASettingIsInvalid($type) { $this->expectException(\Exception::class); $this->expectExceptionMessage('SitesManager_OnlyMatchedUrlsAllowed'); try { - $settings = array('WebsiteMeasurable' => array(array('name' => 'exclude_unknown_urls', 'value' => 'fooBar'))); + $settings = ['WebsiteMeasurable' => [['name' => 'exclude_unknown_urls', 'value' => 'fooBar']]]; $this->addSiteWithType($type, $settings); } catch (Exception $e) { - // make sure no site created $ids = API::getInstance()->getAllSitesId(); - $this->assertEquals(array(), $ids); + $this->assertEquals([], $ids); throw $e; } } - public function test_addSite_ShouldSavePassedMeasurableSettings_IfSettingsAreValid() + public function testAddSiteShouldSavePassedMeasurableSettingsIfSettingsAreValid() { $type = WebsiteType::ID; - $settings = array('WebsiteMeasurable' => array(array('name' => 'urls', 'value' => array('http://www.piwik.org')))); + $settings = ['WebsiteMeasurable' => [['name' => 'urls', 'value' => ['http://www.piwik.org']]]]; $idSite = $this->addSiteWithType($type, $settings); $this->assertSame(1, $idSite); @@ -244,7 +268,7 @@ class ApiTest extends IntegrationTestCase $settings = $this->getWebsiteMeasurable($idSite); $urls = $settings->urls->getValue(); - $this->assertSame(array('http://www.piwik.org'), $urls); + $this->assertSame(['http://www.piwik.org'], $urls); } /** @@ -260,10 +284,10 @@ class ApiTest extends IntegrationTestCase * adds a site * use by several other unit tests */ - protected function _addSite() + protected function addSite() { $name = "website "; - $idsite = API::getInstance()->addSite($name, array("http://piwik.net", "http://piwik.com/test/")); + $idsite = API::getInstance()->addSite($name, ["http://piwik.net", "http://piwik.com/test/"]); self::assertIsInt($idsite); $siteInfo = API::getInstance()->getSiteFromId($idsite); @@ -271,15 +295,20 @@ class ApiTest extends IntegrationTestCase $this->assertEquals("http://piwik.net", $siteInfo['main_url']); $siteUrls = API::getInstance()->getSiteUrlsFromId($idsite); - $this->assertEquals(array("http://piwik.net", "http://piwik.com/test"), $siteUrls); + $this->assertEquals(["http://piwik.net", "http://piwik.com/test"], $siteUrls); return $idsite; } private function addSiteWithType($type, $settings) { - return API::getInstance()->addSite("name", "http://piwik.net/", $ecommerce = 0, - $siteSearch = 1, $searchKeywordParameters = null, $searchCategoryParameters = null, + return API::getInstance()->addSite( + "name", + "http://piwik.net/", + $ecommerce = 0, + $siteSearch = 1, + $searchKeywordParameters = null, + $searchCategoryParameters = null, $ip = null, $excludedQueryParameters = null, $timezone = null, @@ -288,12 +317,15 @@ class ApiTest extends IntegrationTestCase $startDate = null, $excludedUserAgents = null, $keepURLFragments = null, - $type, $settings); + $type, + $settings + ); } private function updateSiteSettings($idSite, $newSiteName, $settings) { - return API::getInstance()->updateSite($idSite, + return API::getInstance()->updateSite( + $idSite, $newSiteName, $urls = null, $ecommerce = null, @@ -309,33 +341,34 @@ class ApiTest extends IntegrationTestCase $excludedUserAgents = null, $keepURLFragments = null, $type = null, - $settings); + $settings + ); } /** * no duplicate -> all the urls are saved */ - public function test_addSiteAliasUrls_WithUniqueUrls_SavesAllUrls() + public function testAddSiteAliasUrlsWithUniqueUrlsSavesAllUrls() { - $idsite = $this->_addSite(); + $idsite = $this->addSite(); $siteUrlsBefore = API::getInstance()->getSiteUrlsFromId($idsite); - $toAdd = array("http://piwik1.net", + $toAdd = ["http://piwik1.net", "http://piwik2.net", "http://piwik3.net/test/", "http://localhost/test", "http://localho5.st/test", "http://l42578gqege.f4", "http://super.com/test/test/atqata675675/te" - ); - $toAddValid = array("http://piwik1.net", + ]; + $toAddValid = ["http://piwik1.net", "http://piwik2.net", "http://piwik3.net/test", "http://localhost/test", "http://localho5.st/test", "http://l42578gqege.f4", - "http://super.com/test/test/atqata675675/te"); + "http://super.com/test/test/atqata675675/te"]; $insertedUrls = API::getInstance()->addSiteAliasUrls($idsite, $toAdd); $this->assertEquals(count($toAdd), $insertedUrls); @@ -353,13 +386,13 @@ class ApiTest extends IntegrationTestCase /** * duplicate -> don't save the already existing URLs */ - public function test_addSiteAliasUrls_WithDuplicateUrls_RemovesDuplicatesBeforeSaving() + public function testAddSiteAliasUrlsWithDuplicateUrlsRemovesDuplicatesBeforeSaving() { - $idsite = $this->_addSite(); + $idsite = $this->addSite(); $siteUrlsBefore = API::getInstance()->getSiteUrlsFromId($idsite); - $toAdd = array_merge($siteUrlsBefore, array("http://piwik1.net", "http://piwik2.net")); + $toAdd = array_merge($siteUrlsBefore, ["http://piwik1.net", "http://piwik2.net"]); $insertedUrls = API::getInstance()->addSiteAliasUrls($idsite, $toAdd); $this->assertEquals(count($toAdd) - count($siteUrlsBefore), $insertedUrls); @@ -377,13 +410,13 @@ class ApiTest extends IntegrationTestCase /** * case empty array => nothing happens */ - public function test_addSiteAliasUrls_WithNoUrls_DoesNothing() + public function testAddSiteAliasUrlsWithNoUrlsDoesNothing() { - $idsite = $this->_addSite(); + $idsite = $this->addSite(); $siteUrlsBefore = API::getInstance()->getSiteUrlsFromId($idsite); - $toAdd = array(); + $toAdd = []; $insertedUrls = API::getInstance()->addSiteAliasUrls($idsite, $toAdd); $this->assertEquals(count($toAdd), $insertedUrls); @@ -401,9 +434,9 @@ class ApiTest extends IntegrationTestCase /** * case array only duplicate => nothing happens */ - public function test_addSiteAliasUrls_WithAlreadyPersistedUrls_DoesNothing() + public function testAddSiteAliasUrlsWithAlreadyPersistedUrlsDoesNothing() { - $idsite = $this->_addSite(); + $idsite = $this->addSite(); $siteUrlsBefore = API::getInstance()->getSiteUrlsFromId($idsite); @@ -425,41 +458,56 @@ class ApiTest extends IntegrationTestCase /** * wrong format urls => exception */ - public function test_addSiteAliasUrls_WithIncorrectFormat_ThrowsException_3() + public function testAddSiteAliasUrlsWithIncorrectFormatThrowsException3() { $this->expectException(\Exception::class); - $idsite = $this->_addSite(); - $toAdd = array("http:mpigeq"); + $idsite = $this->addSite(); + $toAdd = ["http:mpigeq"]; API::getInstance()->addSiteAliasUrls($idsite, $toAdd); } /** * wrong idsite => no exception because simply no access to this resource */ - public function test_addSiteAliasUrls_WithWrongIdSite_ThrowsException() + public function testAddSiteAliasUrlsWithWrongIdSiteThrowsException() { $this->expectException(\Exception::class); - $toAdd = array("http://pigeq.com/test"); + $toAdd = ["http://pigeq.com/test"]; API::getInstance()->addSiteAliasUrls(-1, $toAdd); } /** * wrong idsite => exception */ - public function test_addSiteAliasUrls_WithWrongIdSite_ThrowsException2() + public function testAddSiteAliasUrlsWithWrongIdSiteThrowsException2() { $this->expectException(\Exception::class); - $toAdd = array("http://pigeq.com/test"); + $toAdd = ["http://pigeq.com/test"]; API::getInstance()->addSiteAliasUrls(155, $toAdd); } - public function test_addSite_CorrectlySavesExcludeUnknownUrlsSetting() + public function testAddSiteCorrectlySavesExcludeUnknownUrlsSetting() { - $idSite = API::getInstance()->addSite("site", array("http://piwik.net"), $ecommerce = null, $siteSearch = null, - $searchKeywordParams = null, $searchCategoryParams = null, $excludedIps = null, $excludedQueryParams = null, - $timezone = null, $currency = null, $group = null, $startDate = null, $excludedUserAgents = null, - $keepUrlFragments = null, $type = null, $settings = null, $excludeUnknownUrls = true); + $idSite = API::getInstance()->addSite( + "site", + ["http://piwik.net"], + $ecommerce = null, + $siteSearch = null, + $searchKeywordParams = null, + $searchCategoryParams = null, + $excludedIps = null, + $excludedQueryParams = null, + $timezone = null, + $currency = null, + $group = null, + $startDate = null, + $excludedUserAgents = null, + $keepUrlFragments = null, + $type = null, + $settings = null, + $excludeUnknownUrls = true + ); $site = API::getInstance()->getSiteFromId($idSite); $this->assertEquals(1, $site['exclude_unknown_urls']); @@ -468,25 +516,25 @@ class ApiTest extends IntegrationTestCase /** * no Id -> empty array */ - public function test_getAllSitesId_ReturnsNothing_WhenNoSitesSaved() + public function testGetAllSitesIdReturnsNothingWhenNoSitesSaved() { $ids = API::getInstance()->getAllSitesId(); - $this->assertEquals(array(), $ids); + $this->assertEquals([], $ids); } /** * several Id -> normal array */ - public function test_getAllSitesId_ReturnsAllIds_WhenMultipleSitesPersisted() + public function testGetAllSitesIdReturnsAllIdsWhenMultipleSitesPersisted() { $name = "tetq"; - $idsites = array( - API::getInstance()->addSite($name, array("http://piwik.net", "http://piwik.com/test/")), - API::getInstance()->addSite($name, array("http://piwik.net", "http://piwik.com/test/")), - API::getInstance()->addSite($name, array("http://piwik.net", "http://piwik.com/test/")), - API::getInstance()->addSite($name, array("http://piwik.net", "http://piwik.com/test/")), - API::getInstance()->addSite($name, array("http://piwik.net", "http://piwik.com/test/")), - ); + $idsites = [ + API::getInstance()->addSite($name, ["http://piwik.net", "http://piwik.com/test/"]), + API::getInstance()->addSite($name, ["http://piwik.net", "http://piwik.com/test/"]), + API::getInstance()->addSite($name, ["http://piwik.net", "http://piwik.com/test/"]), + API::getInstance()->addSite($name, ["http://piwik.net", "http://piwik.com/test/"]), + API::getInstance()->addSite($name, ["http://piwik.net", "http://piwik.com/test/"]), + ]; $ids = API::getInstance()->getAllSitesId(); $this->assertEquals($idsites, $ids); @@ -495,7 +543,7 @@ class ApiTest extends IntegrationTestCase /** * wrong id => exception */ - public function test_getSiteFromId_WithWrongId_ThrowsException1() + public function testGetSiteFromIdWithWrongIdThrowsException1() { $this->expectException(\Exception::class); API::getInstance()->getSiteFromId(0); @@ -504,7 +552,7 @@ class ApiTest extends IntegrationTestCase /** * wrong id => exception */ - public function test_getSiteFromId_WithWrongId_ThrowsException2() + public function testGetSiteFromIdWithWrongIdThrowsException2() { $this->expectException(\Exception::class); API::getInstance()->getSiteFromId("x1"); @@ -513,15 +561,15 @@ class ApiTest extends IntegrationTestCase /** * wrong id : no access => exception */ - public function test_getSiteFromId_ThrowsException_WhenTheUserDoesNotHavaAcessToTheSite() + public function testGetSiteFromIdThrowsExceptionWhenTheUserDoesNotHavaAcessToTheSite() { $this->expectException(\Exception::class); - $idsite = API::getInstance()->addSite("site", array("http://piwik.net", "http://piwik.com/test/")); + $idsite = API::getInstance()->addSite("site", ["http://piwik.net", "http://piwik.com/test/"]); $this->assertEquals(1, $idsite); // set noaccess to site 1 - FakeAccess::setIdSitesView(array(2)); - FakeAccess::setIdSitesAdmin(array()); + FakeAccess::setIdSitesView([2]); + FakeAccess::setIdSitesAdmin([]); API::getInstance()->getSiteFromId(1); } @@ -529,10 +577,10 @@ class ApiTest extends IntegrationTestCase /** * normal case */ - public function test_getSiteFromId_WithNormalId_ReturnsTheCorrectSite() + public function testGetSiteFromIdWithNormalIdReturnsTheCorrectSite() { $name = "website ''"; - $idsite = API::getInstance()->addSite($name, array("http://piwik.net", "http://piwik.com/test/")); + $idsite = API::getInstance()->addSite($name, ["http://piwik.net", "http://piwik.com/test/"]); self::assertIsInt($idsite); $siteInfo = API::getInstance()->getSiteFromId($idsite); @@ -543,29 +591,29 @@ class ApiTest extends IntegrationTestCase /** * there is no admin site available -> array() */ - public function test_getSitesWithAdminAccess_ReturnsNothing_WhenUserHasNoAdminAccess() + public function testGetSitesWithAdminAccessReturnsNothingWhenUserHasNoAdminAccess() { - FakeAccess::setIdSitesAdmin(array()); + FakeAccess::setIdSitesAdmin([]); $sites = API::getInstance()->getSitesWithAdminAccess(); - $this->assertEquals(array(), $sites); + $this->assertEquals([], $sites); } /** * normal case, admin and view and noaccess website => return only admin */ - public function test_getSitesWithAdminAccess_shouldOnlyReturnSitesHavingActuallyAdminAccess() + public function testGetSitesWithAdminAccessShouldOnlyReturnSitesHavingActuallyAdminAccess() { - API::getInstance()->addSite("site1", array("http://piwik.net", "http://piwik.com/test/")); - API::getInstance()->addSite("site2", array("http://piwik.com/test/")); - API::getInstance()->addSite("site3", array("http://piwik.org"), null, null, null, null, null, null, 'Asia/Tokyo'); + API::getInstance()->addSite("site1", ["http://piwik.net", "http://piwik.com/test/"]); + API::getInstance()->addSite("site2", ["http://piwik.com/test/"]); + API::getInstance()->addSite("site3", ["http://piwik.org"], null, null, null, null, null, null, 'Asia/Tokyo'); - $resultWanted = array( - 0 => array("idsite" => 1, "name" => "site1", "main_url" => "http://piwik.net", "ecommerce" => 0, "excluded_ips" => "", 'sitesearch' => 1, 'sitesearch_keyword_parameters' => '', 'sitesearch_category_parameters' => '', 'excluded_parameters' => '', 'excluded_user_agents' => '', 'timezone' => 'UTC', 'timezone_name' => 'SitesManager_Format_Utc', 'currency' => 'USD', 'group' => '', 'keep_url_fragment' => 0, 'type' => 'website', 'exclude_unknown_urls' => 0, 'currency_name' => 'USD'), - 1 => array("idsite" => 3, "name" => "site3", "main_url" => "http://piwik.org", "ecommerce" => 0, "excluded_ips" => "", 'sitesearch' => 1, 'sitesearch_keyword_parameters' => '', 'sitesearch_category_parameters' => '', 'excluded_parameters' => '', 'excluded_user_agents' => '', 'timezone' => 'Asia/Tokyo', 'timezone_name' => 'Intl_Country_JP', 'currency' => 'USD', 'group' => '', 'keep_url_fragment' => 0, 'type' => 'website', 'exclude_unknown_urls' => 0, 'currency_name' => 'USD'), - ); + $resultWanted = [ + 0 => ["idsite" => 1, "name" => "site1", "main_url" => "http://piwik.net", "ecommerce" => 0, "excluded_ips" => "", 'sitesearch' => 1, 'sitesearch_keyword_parameters' => '', 'sitesearch_category_parameters' => '', 'excluded_parameters' => '', 'excluded_user_agents' => '', 'excluded_referrers' => '', 'timezone' => 'UTC', 'timezone_name' => 'SitesManager_Format_Utc', 'currency' => 'USD', 'group' => '', 'keep_url_fragment' => 0, 'type' => 'website', 'exclude_unknown_urls' => 0, 'currency_name' => 'USD'], + 1 => ["idsite" => 3, "name" => "site3", "main_url" => "http://piwik.org", "ecommerce" => 0, "excluded_ips" => "", 'sitesearch' => 1, 'sitesearch_keyword_parameters' => '', 'sitesearch_category_parameters' => '', 'excluded_parameters' => '', 'excluded_user_agents' => '', 'excluded_referrers' => '', 'timezone' => 'Asia/Tokyo', 'timezone_name' => 'Intl_Country_JP', 'currency' => 'USD', 'group' => '', 'keep_url_fragment' => 0, 'type' => 'website', 'exclude_unknown_urls' => 0, 'currency_name' => 'USD'], + ]; - FakeAccess::setIdSitesAdmin(array(1, 3)); + FakeAccess::setIdSitesAdmin([1, 3]); $sites = API::getInstance()->getSitesWithAdminAccess(); @@ -575,7 +623,7 @@ class ApiTest extends IntegrationTestCase $this->assertEquals($resultWanted, $sites); } - public function test_getSitesWithAdminAccess_shouldApplyLimit_IfSet() + public function testGetSitesWithAdminAccessShouldApplyLimitIfSet() { $this->createManySitesWithAdminAccess(40); @@ -585,50 +633,50 @@ class ApiTest extends IntegrationTestCase // return only 5 sites $sites = API::getInstance()->getSitesWithAdminAccess(false, false, 5); - $this->assertReturnedSitesContainsSiteIds(array(1, 2, 3, 4, 5), $sites); + $this->assertReturnedSitesContainsSiteIds([1, 2, 3, 4, 5], $sites); // return only 10 sites $sites = API::getInstance()->getSitesWithAdminAccess(false, false, 10); $this->assertReturnedSitesContainsSiteIds(range(1, 10), $sites); } - public function test_getSitesWithAdminAccess_shouldApplyPattern_IfSetAndFindBySiteName() + public function testGetSitesWithAdminAccessShouldApplyPatternIfSetAndFindBySiteName() { $this->createManySitesWithAdminAccess(40); // by site name $sites = API::getInstance()->getSitesWithAdminAccess(false, 'site38'); - $this->assertReturnedSitesContainsSiteIds(array(38), $sites); + $this->assertReturnedSitesContainsSiteIds([38], $sites); } - public function test_getSitesWithAdminAccess_shouldApplyPattern_IfSetAndFindByUrl() + public function testGetSitesWithAdminAccessShouldApplyPatternIfSetAndFindByUrl() { $this->createManySitesWithAdminAccess(40); $sites = API::getInstance()->getSitesWithAdminAccess(false, 'piwik38.o'); - $this->assertReturnedSitesContainsSiteIds(array(38), $sites); + $this->assertReturnedSitesContainsSiteIds([38], $sites); } - public function test_getSitesWithAdminAccess_shouldApplyPattern_AndFindMany() + public function testGetSitesWithAdminAccessShouldApplyPatternAndFindMany() { $this->createManySitesWithAdminAccess(40); $sites = API::getInstance()->getSitesWithAdminAccess(false, '5'); - $this->assertReturnedSitesContainsSiteIds(array(5, 15, 25, 35), $sites); + $this->assertReturnedSitesContainsSiteIds([5, 15, 25, 35], $sites); } - public function test_getSitesWithAdminAccess_shouldApplyPatternAndLimit() + public function testGetSitesWithAdminAccessShouldApplyPatternAndLimit() { $this->createManySitesWithAdminAccess(40); $sites = API::getInstance()->getSitesWithAdminAccess(false, '5', 2); - $this->assertReturnedSitesContainsSiteIds(array(5, 15), $sites); + $this->assertReturnedSitesContainsSiteIds([5, 15], $sites); } private function createManySitesWithAdminAccess($numSites) { for ($i = 1; $i <= $numSites; $i++) { - API::getInstance()->addSite("site" . $i, array("http://piwik$i.org")); + API::getInstance()->addSite("site" . $i, ["http://piwik$i.org"]); } FakeAccess::setIdSitesAdmin(range(1, $numSites)); @@ -651,31 +699,31 @@ class ApiTest extends IntegrationTestCase /** * there is no admin site available -> array() */ - public function test_getSitesWithViewAccess_ReturnsNothing_IfUserHasNoViewOrAdminAccess() + public function testGetSitesWithViewAccessReturnsNothingIfUserHasNoViewOrAdminAccess() { - FakeAccess::setIdSitesView(array()); - FakeAccess::setIdSitesAdmin(array()); + FakeAccess::setIdSitesView([]); + FakeAccess::setIdSitesAdmin([]); $sites = API::getInstance()->getSitesWithViewAccess(); - $this->assertEquals(array(), $sites); + $this->assertEquals([], $sites); } /** * normal case, admin and view and noaccess website => return only admin */ - public function test_getSitesWithViewAccess_ReturnsSitesWithViewAccess() + public function testGetSitesWithViewAccessReturnsSitesWithViewAccess() { - API::getInstance()->addSite("site1", array("http://piwik.net", "http://piwik.com/test/")); - API::getInstance()->addSite("site2", array("http://piwik.com/test/")); - API::getInstance()->addSite("site3", array("http://piwik.org")); + API::getInstance()->addSite("site1", ["http://piwik.net", "http://piwik.com/test/"]); + API::getInstance()->addSite("site2", ["http://piwik.com/test/"]); + API::getInstance()->addSite("site3", ["http://piwik.org"]); - $resultWanted = array( - 0 => array("idsite" => 1, "name" => "site1", "main_url" => "http://piwik.net", "ecommerce" => 0, 'sitesearch' => 1, 'sitesearch_keyword_parameters' => '', 'sitesearch_category_parameters' => '', "excluded_ips" => "", 'excluded_parameters' => '', 'excluded_user_agents' => '', 'timezone' => 'UTC', 'currency' => 'USD', 'group' => '', 'keep_url_fragment' => 0, 'type' => 'website', 'exclude_unknown_urls' => 0, 'timezone_name' => 'SitesManager_Format_Utc', 'currency_name' => 'USD'), - 1 => array("idsite" => 3, "name" => "site3", "main_url" => "http://piwik.org", "ecommerce" => 0, 'sitesearch' => 1, 'sitesearch_keyword_parameters' => '', 'sitesearch_category_parameters' => '', "excluded_ips" => "", 'excluded_parameters' => '', 'excluded_user_agents' => '', 'timezone' => 'UTC', 'currency' => 'USD', 'group' => '', 'keep_url_fragment' => 0, 'type' => 'website', 'exclude_unknown_urls' => 0, 'timezone_name' => 'SitesManager_Format_Utc', 'currency_name' => 'USD'), - ); + $resultWanted = [ + 0 => ["idsite" => 1, "name" => "site1", "main_url" => "http://piwik.net", "ecommerce" => 0, 'sitesearch' => 1, 'sitesearch_keyword_parameters' => '', 'sitesearch_category_parameters' => '', "excluded_ips" => "", 'excluded_parameters' => '', 'excluded_user_agents' => '', 'excluded_referrers' => '', 'timezone' => 'UTC', 'currency' => 'USD', 'group' => '', 'keep_url_fragment' => 0, 'type' => 'website', 'exclude_unknown_urls' => 0, 'timezone_name' => 'SitesManager_Format_Utc', 'currency_name' => 'USD'], + 1 => ["idsite" => 3, "name" => "site3", "main_url" => "http://piwik.org", "ecommerce" => 0, 'sitesearch' => 1, 'sitesearch_keyword_parameters' => '', 'sitesearch_category_parameters' => '', "excluded_ips" => "", 'excluded_parameters' => '', 'excluded_user_agents' => '', 'excluded_referrers' => '', 'timezone' => 'UTC', 'currency' => 'USD', 'group' => '', 'keep_url_fragment' => 0, 'type' => 'website', 'exclude_unknown_urls' => 0, 'timezone_name' => 'SitesManager_Format_Utc', 'currency_name' => 'USD'], + ]; - FakeAccess::setIdSitesView(array(1, 3)); - FakeAccess::setIdSitesAdmin(array()); + FakeAccess::setIdSitesView([1, 3]); + FakeAccess::setIdSitesAdmin([]); $sites = API::getInstance()->getSitesWithViewAccess(); @@ -689,31 +737,31 @@ class ApiTest extends IntegrationTestCase /** * there is no admin site available -> array() */ - public function test_getSitesWithAtLeastViewAccess_ReturnsNothing_WhenUserHasNoAccess() + public function testGetSitesWithAtLeastViewAccessReturnsNothingWhenUserHasNoAccess() { - FakeAccess::setIdSitesView(array()); - FakeAccess::setIdSitesAdmin(array()); + FakeAccess::setIdSitesView([]); + FakeAccess::setIdSitesAdmin([]); $sites = API::getInstance()->getSitesWithAtLeastViewAccess(); - $this->assertEquals(array(), $sites); + $this->assertEquals([], $sites); } /** * normal case, admin and view and noaccess website => return only admin */ - public function test_getSitesWithAtLeastViewAccess_ReturnsSitesWithViewAccess() + public function testGetSitesWithAtLeastViewAccessReturnsSitesWithViewAccess() { - API::getInstance()->addSite("site1", array("http://piwik.net", "http://piwik.com/test/"), $ecommerce = 1); - API::getInstance()->addSite("site2", array("http://piwik.com/test/")); - API::getInstance()->addSite("site3", array("http://piwik.org")); + API::getInstance()->addSite("site1", ["http://piwik.net", "http://piwik.com/test/"], $ecommerce = 1); + API::getInstance()->addSite("site2", ["http://piwik.com/test/"]); + API::getInstance()->addSite("site3", ["http://piwik.org"]); - $resultWanted = array( - 0 => array("idsite" => 1, "name" => "site1", "main_url" => "http://piwik.net", "ecommerce" => 1, "excluded_ips" => "", 'sitesearch' => 1, 'sitesearch_keyword_parameters' => '', 'sitesearch_category_parameters' => '', 'excluded_parameters' => '', 'excluded_user_agents' => '', 'timezone' => 'UTC', 'currency' => 'USD', 'group' => '', 'keep_url_fragment' => 0, 'type' => 'website', 'exclude_unknown_urls' => 0, 'timezone_name' => 'SitesManager_Format_Utc', 'currency_name' => 'USD'), - 1 => array("idsite" => 3, "name" => "site3", "main_url" => "http://piwik.org", "ecommerce" => 0, "excluded_ips" => "", 'sitesearch' => 1, 'sitesearch_keyword_parameters' => '', 'sitesearch_category_parameters' => '', 'excluded_parameters' => '', 'excluded_user_agents' => '', 'timezone' => 'UTC', 'currency' => 'USD', 'group' => '', 'keep_url_fragment' => 0, 'type' => 'website', 'exclude_unknown_urls' => 0, 'timezone_name' => 'SitesManager_Format_Utc', 'currency_name' => 'USD'), - ); + $resultWanted = [ + 0 => ["idsite" => 1, "name" => "site1", "main_url" => "http://piwik.net", "ecommerce" => 1, "excluded_ips" => "", 'sitesearch' => 1, 'sitesearch_keyword_parameters' => '', 'sitesearch_category_parameters' => '', 'excluded_parameters' => '', 'excluded_user_agents' => '', 'excluded_referrers' => '', 'timezone' => 'UTC', 'currency' => 'USD', 'group' => '', 'keep_url_fragment' => 0, 'type' => 'website', 'exclude_unknown_urls' => 0, 'timezone_name' => 'SitesManager_Format_Utc', 'currency_name' => 'USD'], + 1 => ["idsite" => 3, "name" => "site3", "main_url" => "http://piwik.org", "ecommerce" => 0, "excluded_ips" => "", 'sitesearch' => 1, 'sitesearch_keyword_parameters' => '', 'sitesearch_category_parameters' => '', 'excluded_parameters' => '', 'excluded_user_agents' => '', 'excluded_referrers' => '', 'timezone' => 'UTC', 'currency' => 'USD', 'group' => '', 'keep_url_fragment' => 0, 'type' => 'website', 'exclude_unknown_urls' => 0, 'timezone_name' => 'SitesManager_Format_Utc', 'currency_name' => 'USD'], + ]; - FakeAccess::setIdSitesView(array(1, 3)); - FakeAccess::setIdSitesAdmin(array()); + FakeAccess::setIdSitesView([1, 3]); + FakeAccess::setIdSitesAdmin([]); $sites = API::getInstance()->getSitesWithAtLeastViewAccess(); // we don't test the ts_created @@ -725,30 +773,30 @@ class ApiTest extends IntegrationTestCase /** * no urls for this site => array() */ - public function test_getSiteUrlsFromId_ReturnsMainUrlOnly_WhenNoAliasUrls() + public function testGetSiteUrlsFromIdReturnsMainUrlOnlyWhenNoAliasUrls() { - $idsite = API::getInstance()->addSite("site1", array("http://piwik.net")); + $idsite = API::getInstance()->addSite("site1", ["http://piwik.net"]); $urls = API::getInstance()->getSiteUrlsFromId($idsite); - $this->assertEquals(array("http://piwik.net"), $urls); + $this->assertEquals(["http://piwik.net"], $urls); } /** * normal case */ - public function test_getSiteUrlsFromId_ReturnsMainAndAliasUrls() + public function testGetSiteUrlsFromIdReturnsMainAndAliasUrls() { - $site = array("http://piwik.net", + $site = ["http://piwik.net", "http://piwik.org", "http://piwik.org", - "http://piwik.com"); + "http://piwik.com"]; sort($site); $idsite = API::getInstance()->addSite("site1", $site); - $siteWanted = array("http://piwik.net", + $siteWanted = ["http://piwik.net", "http://piwik.org", - "http://piwik.com"); + "http://piwik.com"]; sort($siteWanted); $urls = API::getInstance()->getSiteUrlsFromId($idsite); @@ -758,23 +806,23 @@ class ApiTest extends IntegrationTestCase /** * wrongId => exception */ - public function test_getSiteUrlsFromId_ThrowsException_WhenSiteIdIsIncorrect() + public function testGetSiteUrlsFromIdThrowsExceptionWhenSiteIdIsIncorrect() { $this->expectException(\Exception::class); - FakeAccess::setIdSitesView(array(3)); - FakeAccess::setIdSitesAdmin(array()); + FakeAccess::setIdSitesView([3]); + FakeAccess::setIdSitesAdmin([]); API::getInstance()->getSiteUrlsFromId(1); } /** * one url => no change to alias urls */ - public function test_updateSite_WithOneUrl_RemovesAliasUrls_AndUpdatesTheSiteCorrectly() + public function testUpdateSiteWithOneUrlRemovesAliasUrlsAndUpdatesTheSiteCorrectly() { - $urls = array("http://piwiknew.com", + $urls = ["http://piwiknew.com", "http://piwiknew.net", "http://piwiknew.org", - "http://piwiknew.fr"); + "http://piwiknew.fr"]; $idsite = API::getInstance()->addSite("site1", $urls); $newMainUrl = "http://main.url"; @@ -811,14 +859,13 @@ class ApiTest extends IntegrationTestCase $allUrls = API::getInstance()->getSiteUrlsFromId($idsite); $this->assertEquals($newMainUrl, $allUrls[0]); $aliasUrls = array_slice($allUrls, 1); - $this->assertEquals(array(), $aliasUrls); - + $this->assertEquals([], $aliasUrls); } /** * strange name and NO URL => name ok, main_url not updated */ - public function test_updateSite_WithStrangeName_AndNoAliasUrls_UpdatesTheName_ButNoUrls() + public function testUpdateSiteWithStrangeNameAndNoAliasUrlsUpdatesTheNameButNoUrls() { $idsite = API::getInstance()->addSite("site1", "http://main.url"); $newName = "test toto@{'786'}"; @@ -836,30 +883,52 @@ class ApiTest extends IntegrationTestCase * several urls => both main and alias are updated * also test the update of group field */ - public function test_updateSite_WithSeveralUrlsAndGroup_UpdatesGroupAndUrls() + public function testUpdateSiteWithSeveralUrlsAndGroupUpdatesGroupAndUrls() { - $urls = array("http://piwiknew.com", + $urls = ["http://piwiknew.com", "http://piwiknew.net", "http://piwiknew.org", - "http://piwiknew.fr"); + "http://piwiknew.fr"]; $group = 'GROUP Before'; - $idsite = API::getInstance()->addSite("site1", $urls, $ecommerce = 1, - $siteSearch = 1, $searchKeywordParameters = null, $searchCategoryParameters = null, - $excludedIps = null, $excludedQueryParameters = null, $timezone = null, $currency = null, $group, $startDate = '2011-01-01'); + $idsite = API::getInstance()->addSite( + "site1", + $urls, + $ecommerce = 1, + $siteSearch = 1, + $searchKeywordParameters = null, + $searchCategoryParameters = null, + $excludedIps = null, + $excludedQueryParameters = null, + $timezone = null, + $currency = null, + $group, + $startDate = '2011-01-01' + ); $websites = API::getInstance()->getSitesFromGroup($group); $this->assertEquals(1, count($websites)); - $newurls = array("http://piwiknew2.com", + $newurls = ["http://piwiknew2.com", "http://piwiknew2.net", "http://piwiknew2.org", - "http://piwiknew2.fr"); + "http://piwiknew2.fr"]; $groupAfter = ' GROUP After'; - API::getInstance()->updateSite($idsite, "test toto@{}", $newurls, $ecommerce = 0, - $siteSearch = 1, $searchKeywordParameters = null, $searchCategoryParameters = null, - $excludedIps = null, $excludedQueryParameters = null, $timezone = null, $currency = null, $groupAfter); + API::getInstance()->updateSite( + $idsite, + "test toto@{}", + $newurls, + $ecommerce = 0, + $siteSearch = 1, + $searchKeywordParameters = null, + $searchCategoryParameters = null, + $excludedIps = null, + $excludedQueryParameters = null, + $timezone = null, + $currency = null, + $groupAfter + ); // no result for the group before update $websites = API::getInstance()->getSitesFromGroup($group); @@ -871,7 +940,7 @@ class ApiTest extends IntegrationTestCase $this->assertEquals('2011-01-01', date('Y-m-d', strtotime($websites[0]['ts_created']))); // Test fetch website groups - $expectedGroups = array(trim($groupAfter)); + $expectedGroups = [trim($groupAfter)]; $fetched = API::getInstance()->getSitesGroups(); $this->assertEquals($expectedGroups, $fetched); @@ -881,18 +950,17 @@ class ApiTest extends IntegrationTestCase $this->assertEquals($newurls, $allUrls); } - public function test_updateSite_ShouldFailAndNotUpdateSite_IfASettingIsInvalid() + public function testUpdateSiteShouldFailAndNotUpdateSiteIfASettingIsInvalid() { $this->expectException(\Exception::class); $this->expectExceptionMessage('SitesManager_OnlyMatchedUrlsAllowed'); $type = MobileAppMeasurable\Type::ID; - $idSite = $this->addSiteWithType($type, array()); + $idSite = $this->addSiteWithType($type, []); try { - $settings = array('MobileAppMeasurable' => array(array('name' => 'exclude_unknown_urls', 'value' => 'fooBar'))); + $settings = ['MobileAppMeasurable' => [['name' => 'exclude_unknown_urls', 'value' => 'fooBar']]]; $this->updateSiteSettings($idSite, 'newSiteName', $settings); - } catch (Exception $e) { // verify nothing was updated (not even the name) $measurable = new Measurable($idSite); @@ -902,14 +970,14 @@ class ApiTest extends IntegrationTestCase } } - public function test_updateSite_ShouldSavePassedMeasurableSettings_IfSettingsAreValid() + public function testUpdateSiteShouldSavePassedMeasurableSettingsIfSettingsAreValid() { $type = WebsiteType::ID; - $idSite = $this->addSiteWithType($type, array()); + $idSite = $this->addSiteWithType($type, []); $this->assertSame(1, $idSite); - $settings = array('WebsiteMeasurable' => array(array('name' => 'urls', 'value' => array('http://www.piwik.org')))); + $settings = ['WebsiteMeasurable' => [['name' => 'urls', 'value' => ['http://www.piwik.org']]]]; $this->updateSiteSettings($idSite, 'newSiteName', $settings); @@ -918,20 +986,36 @@ class ApiTest extends IntegrationTestCase // verify it was updated $measurable = new Measurable($idSite); $this->assertSame('newSiteName', $measurable->getName()); - $this->assertSame(array('http://www.piwik.org'), $settings->urls->getValue()); + $this->assertSame(['http://www.piwik.org'], $settings->urls->getValue()); } - public function test_updateSite_CorreclySavesExcludedUnknownUrlSettings() + public function testUpdateSiteCorrectlySavesExcludedUnknownUrlSettings() { - $idSite = API::getInstance()->addSite("site1", array("http://piwik.net")); + $idSite = API::getInstance()->addSite("site1", ["http://piwik.net"]); $site = API::getInstance()->getSiteFromId($idSite); $this->assertEquals(0, $site['exclude_unknown_urls']); - API::getInstance()->updateSite($idSite, $siteName = null, $urls = null, $ecommerce = null, $siteSearch = null, - $searchKeywordParams = null, $searchCategoryParams = null, $excludedIps = null, $excludedQueryParameters = null, - $timzeone = null, $currency = null, $group = null, $startDate = null, $excludedUserAgents = null, - $keepUrlFragments = null, $type = null, $settings = null, $excludeUnknownUrls = true); + API::getInstance()->updateSite( + $idSite, + $siteName = null, + $urls = null, + $ecommerce = null, + $siteSearch = null, + $searchKeywordParams = null, + $searchCategoryParams = null, + $excludedIps = null, + $excludedQueryParameters = null, + $timzeone = null, + $currency = null, + $group = null, + $startDate = null, + $excludedUserAgents = null, + $keepUrlFragments = null, + $type = null, + $settings = null, + $excludeUnknownUrls = true + ); $site = API::getInstance()->getSiteFromId($idSite); $this->assertEquals(1, $site['exclude_unknown_urls']); @@ -940,17 +1024,33 @@ class ApiTest extends IntegrationTestCase /** * @dataProvider getDifferentTypesDataProvider */ - public function test_updateSite_WithDifferentTypes($type) + public function testUpdateSiteWithDifferentTypes($type) { - $idSite = $this->addSiteWithType('website', array()); + $idSite = $this->addSiteWithType('website', []); $site = API::getInstance()->getSiteFromId($idSite); $this->assertEquals(0, $site['exclude_unknown_urls']); - API::getInstance()->updateSite($idSite, $siteName = 'new site name', $urls = null, $ecommerce = true, $siteSearch = false, - $searchKeywordParams = null, $searchCategoryParams = null, $excludedIps = null, $excludedQueryParameters = null, - $timzeone = null, $currency = 'NZD', $group = null, $startDate = null, $excludedUserAgents = null, - $keepUrlFragments = null, $type, $settings = null, $excludeUnknownUrls = true); + API::getInstance()->updateSite( + $idSite, + $siteName = 'new site name', + $urls = null, + $ecommerce = true, + $siteSearch = false, + $searchKeywordParams = null, + $searchCategoryParams = null, + $excludedIps = null, + $excludedQueryParameters = null, + $timzeone = null, + $currency = 'NZD', + $group = null, + $startDate = null, + $excludedUserAgents = null, + $keepUrlFragments = null, + $type, + $settings = null, + $excludeUnknownUrls = true + ); $site = API::getInstance()->getSiteFromId($idSite); $this->assertEquals('new site name', $site['name']); @@ -962,19 +1062,19 @@ class ApiTest extends IntegrationTestCase public function getDifferentTypesDataProvider() { - return array( - array('website'), - array('mobileapp'), - array('notexistingtype'), - ); + return [ + ['website'], + ['mobileapp'], + ['notexistingtype'], + ]; } - public function test_delete_ShouldNotDeleteASiteInCaseThereIsOnlyOneSite() + public function testDeleteShouldNotDeleteASiteInCaseThereIsOnlyOneSite() { $this->expectException(\Exception::class); $this->expectExceptionMessage('SitesManager_ExceptionDeleteSite'); - $siteId1 = $this->_addSite(); + $siteId1 = $this->addSite(); $this->assertHasSite($siteId1); @@ -987,7 +1087,7 @@ class ApiTest extends IntegrationTestCase } } - public function test_delete_ShouldTriggerException_IfGivenSiteDoesNotExist() + public function testDeleteShouldTriggerExceptionIfGivenSiteDoesNotExist() { $this->expectException(\Exception::class); $this->expectExceptionMessage('website id = 99999498 not found'); @@ -995,11 +1095,11 @@ class ApiTest extends IntegrationTestCase API::getInstance()->deleteSite(99999498); } - public function test_delete_ShouldActuallyRemoveAnExistingSiteButOnlyTheGivenSite() + public function testDeleteShouldActuallyRemoveAnExistingSiteButOnlyTheGivenSite() { - $this->_addSite(); - $siteId1 = $this->_addSite(); - $siteId2 = $this->_addSite(); + $this->addSite(); + $siteId1 = $this->addSite(); + $siteId2 = $this->addSite(); $this->assertHasSite($siteId1); $this->assertHasSite($siteId2); @@ -1010,7 +1110,7 @@ class ApiTest extends IntegrationTestCase $this->assertHasSite($siteId2); } - public function test_delete_ShouldTriggerAnEventOnceSiteWasActuallyDeleted() + public function testDeleteShouldTriggerAnEventOnceSiteWasActuallyDeleted() { $called = 0; $deletedSiteId = null; @@ -1020,8 +1120,8 @@ class ApiTest extends IntegrationTestCase $deletedSiteId = $param; }); - $this->_addSite(); - $siteId1 = $this->_addSite(); + $this->addSite(); + $siteId1 = $this->addSite(); API::getInstance()->deleteSite($siteId1); @@ -1045,8 +1145,8 @@ class ApiTest extends IntegrationTestCase public function testGetSitesGroups() { - $groups = array('group1', ' group1 ', '', 'group2'); - $expectedGroups = array('group1', '', 'group2'); + $groups = ['group1', ' group1 ', '', 'group2']; + $expectedGroups = ['group1', '', 'group2']; foreach ($groups as $group) { API::getInstance()->addSite("test toto@{}", 'http://example.org', $ecommerce = 1, $siteSearch = null, $searchKeywordParameters = null, $searchCategoryParameters = null, $excludedIps = null, $excludedQueryParameters = null, $timezone = null, $currency = null, $group); } @@ -1056,34 +1156,52 @@ class ApiTest extends IntegrationTestCase public function getInvalidTimezoneData() { - return array( - array('UTC+15'), - array('Paris'), - ); + return [ + ['UTC+15'], + ['Paris'], + ]; } /** * * @dataProvider getInvalidTimezoneData */ - public function test_addSite_WithInvalidTimezone_ThrowsException($timezone) + public function testAddSiteWithInvalidTimezoneThrowsException($timezone) { $this->expectException(\Exception::class); - API::getInstance()->addSite("site1", array('http://example.org'), $ecommerce = 0, - $siteSearch = 1, $searchKeywordParameters = null, $searchCategoryParameters = null, $ip = '', $params = '', $timezone); + API::getInstance()->addSite( + "site1", + ['http://example.org'], + $ecommerce = 0, + $siteSearch = 1, + $searchKeywordParameters = null, + $searchCategoryParameters = null, + $ip = '', + $params = '', + $timezone + ); } - public function test_addSite_WithInvalidCurrency_ThrowsException() + public function testAddSiteWithInvalidCurrencyThrowsException() { $this->expectException(\Exception::class); $invalidCurrency = '€'; - API::getInstance()->addSite("site1", array('http://example.org'), $ecommerce = 0, - $siteSearch = 1, $searchKeywordParameters = null, $searchCategoryParameters = null, '', 'UTC', $invalidCurrency); + API::getInstance()->addSite( + "site1", + ['http://example.org'], + $ecommerce = 0, + $siteSearch = 1, + $searchKeywordParameters = null, + $searchCategoryParameters = null, + '', + 'UTC', + $invalidCurrency + ); } - public function test_setDefaultTimezone_AndCurrency_AndExcludedQueryParameters_AndExcludedIps_UpdatesDefaultsCorreclty() + public function testSetDefaultTimezoneAndCurrencyAndExcludedQueryParametersAndExcludedIpsUpdatesDefaultsCorrectly() { // test that they return default values $defaultTimezone = API::getInstance()->getDefaultTimezone(); @@ -1096,7 +1214,7 @@ class ApiTest extends IntegrationTestCase $this->assertEquals('', $excludedQueryParameters); // test that when not specified, defaults are set as expected - $idsite = API::getInstance()->addSite("site1", array('http://example.org')); + $idsite = API::getInstance()->addSite("site1", ['http://example.org']); $site = new Site($idsite); $this->assertEquals('UTC', $site->getTimezone()); $this->assertEquals('USD', $site->getCurrency()); @@ -1132,9 +1250,17 @@ class ApiTest extends IntegrationTestCase // create a website and check that default currency and default timezone are set // however, excluded IPs and excluded query Params are not returned - $idsite = API::getInstance()->addSite("site1", array('http://example.org'), $ecommerce = 0, - $siteSearch = 0, $searchKeywordParameters = 'test1,test2', $searchCategoryParameters = 'test2,test1', - '', '', $newDefaultTimezone); + $idsite = API::getInstance()->addSite( + "site1", + ['http://example.org'], + $ecommerce = 0, + $siteSearch = 0, + $searchKeywordParameters = 'test1,test2', + $searchCategoryParameters = 'test2,test1', + '', + '', + $newDefaultTimezone + ); $site = new Site($idsite); $this->assertEquals($newDefaultTimezone, $site->getTimezone()); $this->assertEquals(date('Y-m-d'), $site->getCreationDate()->toString()); @@ -1149,11 +1275,11 @@ class ApiTest extends IntegrationTestCase $this->assertFalse(Site::isEcommerceEnabledFor($idsite)); } - public function test_getSitesIdFromSiteUrl_AsSuperUser_ReturnsTheRequestedSiteIds() + public function testGetSitesIdFromSiteUrlAsSuperUserReturnsTheRequestedSiteIds() { - API::getInstance()->addSite("site1", array("http://piwik.net", "http://piwik.com")); - API::getInstance()->addSite("site2", array("http://piwik.com", "http://piwik.net")); - API::getInstance()->addSite("site3", array("http://piwik.com", "http://piwik.org")); + API::getInstance()->addSite("site1", ["http://piwik.net", "http://piwik.com"]); + API::getInstance()->addSite("site2", ["http://piwik.com", "http://piwik.net"]); + API::getInstance()->addSite("site3", ["http://piwik.com", "http://piwik.org"]); $idsites = API::getInstance()->getSitesIdFromSiteUrl('http://piwik.org'); $this->assertTrue(count($idsites) == 1); @@ -1168,29 +1294,29 @@ class ApiTest extends IntegrationTestCase $this->assertTrue(count($idsites) == 3); } - public function test_getSitesIdFromSiteUrl_MatchesBothHttpAndHttpsUrls_AsSuperUser() + public function testGetSitesIdFromSiteUrlMatchesBothHttpAndHttpsUrlsAsSuperUser() { - API::getInstance()->addSite("site1", array("https://piwik.org", "http://example.com", "fb://special-url")); + API::getInstance()->addSite("site1", ["https://piwik.org", "http://example.com", "fb://special-url"]); - $this->assert_getSitesIdFromSiteUrl_matchesBothHttpAndHttpsUrls(); + $this->assertGetSitesIdFromSiteUrlMatchesBothHttpAndHttpsUrls(); } - public function test_getSitesIdFromSiteUrl_MatchesBothHttpAndHttpsUrls_AsUserWithViewPermission() + public function testGetSitesIdFromSiteUrlMatchesBothHttpAndHttpsUrlsAsUserWithViewPermission() { - API::getInstance()->addSite("site1", array("https://piwik.org", "http://example.com", "fb://special-url")); + API::getInstance()->addSite("site1", ["https://piwik.org", "http://example.com", "fb://special-url"]); APIUsersManager::getInstance()->addUser("user1", "geqgegagae", "tegst@tesgt.com"); - APIUsersManager::getInstance()->setUserAccess("user1", "view", array(1)); + APIUsersManager::getInstance()->setUserAccess("user1", "view", [1]); // Make sure we're not Super user FakeAccess::$superUser = false; FakeAccess::$identity = 'user1'; $this->assertFalse(Piwik::hasUserSuperUserAccess()); - $this->assert_getSitesIdFromSiteUrl_matchesBothHttpAndHttpsUrls(); + $this->assertGetSitesIdFromSiteUrlMatchesBothHttpAndHttpsUrls(); } - private function assert_getSitesIdFromSiteUrl_matchesBothHttpAndHttpsUrls() + private function assertGetSitesIdFromSiteUrlMatchesBothHttpAndHttpsUrls() { $idsites = API::getInstance()->getSitesIdFromSiteUrl('http://piwik.org'); $this->assertTrue(count($idsites) == 1); @@ -1217,27 +1343,27 @@ class ApiTest extends IntegrationTestCase $this->assertTrue(count($idsites) == 0); } - public function test_getSitesIdFromSiteUrl_AsUser() + public function testGetSitesIdFromSiteUrlAsUser() { - API::getInstance()->addSite("site1", array("http://www.piwik.net", "https://piwik.com")); - API::getInstance()->addSite("site2", array("http://piwik.com", "http://piwik.net")); - API::getInstance()->addSite("site3", array("http://piwik.com", "http://piwik.org")); + API::getInstance()->addSite("site1", ["http://www.piwik.net", "https://piwik.com"]); + API::getInstance()->addSite("site2", ["http://piwik.com", "http://piwik.net"]); + API::getInstance()->addSite("site3", ["http://piwik.com", "http://piwik.org"]); APIUsersManager::getInstance()->addUser("user1", "geqgegagae", "tegst@tesgt.com"); - APIUsersManager::getInstance()->setUserAccess("user1", "view", array(1)); + APIUsersManager::getInstance()->setUserAccess("user1", "view", [1]); APIUsersManager::getInstance()->addUser("user2", "geqgegagae", "tegst2@tesgt.com"); - APIUsersManager::getInstance()->setUserAccess("user2", "view", array(1)); - APIUsersManager::getInstance()->setUserAccess("user2", "admin", array(3)); + APIUsersManager::getInstance()->setUserAccess("user2", "view", [1]); + APIUsersManager::getInstance()->setUserAccess("user2", "admin", [3]); APIUsersManager::getInstance()->addUser("user3", "geqgegagae", "tegst3@tesgt.com"); - APIUsersManager::getInstance()->setUserAccess("user3", "view", array(1, 2)); - APIUsersManager::getInstance()->setUserAccess("user3", "admin", array(3)); + APIUsersManager::getInstance()->setUserAccess("user3", "view", [1, 2]); + APIUsersManager::getInstance()->setUserAccess("user3", "admin", [3]); FakeAccess::$superUser = false; FakeAccess::$identity = 'user1'; - FakeAccess::setIdSitesView(array(1)); - FakeAccess::setIdSitesAdmin(array()); + FakeAccess::setIdSitesView([1]); + FakeAccess::setIdSitesAdmin([]); $this->assertFalse(Piwik::hasUserSuperUserAccess()); $idsites = API::getInstance()->getSitesIdFromSiteUrl('http://piwik.com'); @@ -1251,16 +1377,16 @@ class ApiTest extends IntegrationTestCase FakeAccess::$superUser = false; FakeAccess::$identity = 'user2'; - FakeAccess::setIdSitesView(array(1)); - FakeAccess::setIdSitesAdmin(array(3)); + FakeAccess::setIdSitesView([1]); + FakeAccess::setIdSitesAdmin([3]); $idsites = API::getInstance()->getSitesIdFromSiteUrl('http://piwik.com'); $this->assertEquals(2, count($idsites)); FakeAccess::$superUser = false; FakeAccess::$identity = 'user3'; - FakeAccess::setIdSitesView(array(1, 2)); - FakeAccess::setIdSitesAdmin(array(3)); + FakeAccess::setIdSitesView([1, 2]); + FakeAccess::setIdSitesAdmin([3]); $idsites = API::getInstance()->getSitesIdFromSiteUrl('http://piwik.com'); $this->assertEquals(3, count($idsites)); @@ -1269,21 +1395,20 @@ class ApiTest extends IntegrationTestCase $this->assertEquals(3, count($idsites)); } - public function test_getSitesFromTimezones_ReturnsCorrectIdSites() + public function testGetSitesFromTimezonesReturnsCorrectIdSites() { - API::getInstance()->addSite("site3", array("http://piwik.org"), null, $siteSearch = 1, $searchKeywordParameters = null, $searchCategoryParameters = null, null, null, 'UTC'); - $idsite2 = API::getInstance()->addSite("site3", array("http://piwik.org"), null, $siteSearch = 1, $searchKeywordParameters = null, $searchCategoryParameters = null, null, null, 'Pacific/Auckland'); - $idsite3 = API::getInstance()->addSite("site3", array("http://piwik.org"), null, $siteSearch = 1, $searchKeywordParameters = null, $searchCategoryParameters = null, null, null, 'Pacific/Auckland'); - $idsite4 = API::getInstance()->addSite("site3", array("http://piwik.org"), null, $siteSearch = 1, $searchKeywordParameters = null, $searchCategoryParameters = null, null, null, 'UTC+10'); - $result = API::getInstance()->getSitesIdFromTimezones(array('UTC+10', 'Pacific/Auckland')); - $this->assertEquals(array($idsite2, $idsite3, $idsite4), $result); + API::getInstance()->addSite("site3", ["http://piwik.org"], null, $siteSearch = 1, $searchKeywordParameters = null, $searchCategoryParameters = null, null, null, 'UTC'); + $idsite2 = API::getInstance()->addSite("site3", ["http://piwik.org"], null, $siteSearch = 1, $searchKeywordParameters = null, $searchCategoryParameters = null, null, null, 'Pacific/Auckland'); + $idsite3 = API::getInstance()->addSite("site3", ["http://piwik.org"], null, $siteSearch = 1, $searchKeywordParameters = null, $searchCategoryParameters = null, null, null, 'Pacific/Auckland'); + $idsite4 = API::getInstance()->addSite("site3", ["http://piwik.org"], null, $siteSearch = 1, $searchKeywordParameters = null, $searchCategoryParameters = null, null, null, 'UTC+10'); + $result = API::getInstance()->getSitesIdFromTimezones(['UTC+10', 'Pacific/Auckland']); + $this->assertEquals([$idsite2, $idsite3, $idsite4], $result); } public function provideContainerConfig() { - return array( + return [ 'Piwik\Access' => new FakeAccess(), - ); + ]; } - } diff --git a/plugins/SitesManager/tests/Integration/ModelTest.php b/plugins/SitesManager/tests/Integration/ModelTest.php index 21ff01479c..433662dda9 100644 --- a/plugins/SitesManager/tests/Integration/ModelTest.php +++ b/plugins/SitesManager/tests/Integration/ModelTest.php @@ -1,4 +1,5 @@ <?php + /** * Matomo - free/libre analytics platform * @@ -31,21 +32,21 @@ class ModelTest extends IntegrationTestCase $this->model = new Model(); } - public function test_getUsedTypeIds_shouldReturnNoType_IfNoSitesExist() + public function testGetUsedTypeIdsShouldReturnNoTypeIfNoSitesExist() { - $this->assertSame(array(), $this->model->getUsedTypeIds()); + $this->assertSame([], $this->model->getUsedTypeIds()); } - public function test_getUsedTypeIds_shouldReturnOnlyOneType_IfAllSitesUseSameType() + public function testGetUsedTypeIdsShouldReturnOnlyOneTypeIfAllSitesUseSameType() { for ($i = 0; $i < 9; $i++) { $this->createMeasurable('website'); } - $this->assertSame(array('website'), $this->model->getUsedTypeIds()); + $this->assertSame(['website'], $this->model->getUsedTypeIds()); } - public function test_getUsedTypeIds_shouldReturnAnotherType_IfDifferentOnesAreUsed() + public function testGetUsedTypeIdsShouldReturnAnotherTypeIfDifferentOnesAreUsed() { for ($i = 0; $i < 9; $i++) { $this->createMeasurable('website'); @@ -53,10 +54,10 @@ class ModelTest extends IntegrationTestCase $this->createMeasurable('mobileapp'); } - $this->assertSame(array('website', 'universal', 'mobileapp'), $this->model->getUsedTypeIds()); + $this->assertSame(['website', 'universal', 'mobileapp'], $this->model->getUsedTypeIds()); } - public function test_getAllKnownUrlsForAllSites_shouldReturnAllUrls() + public function testGetAllKnownUrlsForAllSitesShouldReturnAllUrls() { $idSite = $this->createMeasurable('website', 'http://apache.piwik'); $this->model->insertSiteUrl($idSite, 'http://example.apache.piwik'); @@ -68,45 +69,52 @@ class ModelTest extends IntegrationTestCase $idSite3 = $this->createMeasurable('website', 'http://example.pro'); - $expected = array( - array( + $expected = [ + [ 'idsite' => $idSite, 'url' => 'http://apache.piwik' - ), - array( + ], + [ 'idsite' => $idSite2, 'url' => 'http://piwik.net' - ), - array( + ], + [ 'idsite' => $idSite3, 'url' => 'http://example.pro' - ), - array( + ], + [ 'idsite' => $idSite, 'url' => 'http://example.apache.piwik' - ), - array( + ], + [ 'idsite' => $idSite, 'url' => 'http://example.org' - ), - array( + ], + [ 'idsite' => $idSite2, 'url' => 'http://example.com' - ), - array( + ], + [ 'idsite' => $idSite2, 'url' => 'http://example.org' - ) + ] - ); + ]; $this->assertEquals($expected, $this->model->getAllKnownUrlsForAllSites()); } private function createMeasurable($type, $siteUrl = false) { - return Fixture::createWebsite('2015-01-01 00:00:00', - $ecommerce = 0, $siteName = false, $siteUrl, - $siteSearch = 1, $searchKeywordParameters = null, - $searchCategoryParameters = null, $timezone = null, $type); + return Fixture::createWebsite( + '2015-01-01 00:00:00', + $ecommerce = 0, + $siteName = false, + $siteUrl, + $siteSearch = 1, + $searchKeywordParameters = null, + $searchCategoryParameters = null, + $timezone = null, + $type + ); } } diff --git a/plugins/SitesManager/tests/Integration/SiteUrlsTest.php b/plugins/SitesManager/tests/Integration/SiteUrlsTest.php index 69608e7cec..2232cf4e4c 100644 --- a/plugins/SitesManager/tests/Integration/SiteUrlsTest.php +++ b/plugins/SitesManager/tests/Integration/SiteUrlsTest.php @@ -1,4 +1,5 @@ <?php + /** * Matomo - free/libre analytics platform * @@ -7,6 +8,7 @@ */ namespace Piwik\Plugins\SitesManager\tests\Integration; + use Piwik\Cache; use Piwik\Plugins\SitesManager\API; use Piwik\Plugins\SitesManager\SiteUrls; @@ -39,50 +41,50 @@ class SiteUrlsTest extends IntegrationTestCase SiteUrls::clearSitesCache(); } - public function testGetAllSiteUrls_shouldReturnAnEmptyArray_IfThereAreNoSites() + public function testGetAllSiteUrlsShouldReturnAnEmptyArrayIfThereAreNoSites() { - $this->assertSiteUrls(array()); + $this->assertSiteUrls([]); } - public function testGetAllSiteUrls_shouldReturnUrlsForEachSiteId() + public function testGetAllSiteUrlsShouldReturnUrlsForEachSiteId() { $this->addSite('http://www.example.com'); // only one main URL - $this->assertSiteUrls(array(1 => array('http://www.example.com'))); + $this->assertSiteUrls([1 => ['http://www.example.com']]); $this->addSite('http://www.example.com', 'http://www.piwik.org'); // main URL and alias URL - $this->assertSiteUrls(array(1 => array('http://www.example.com'), 2 => array('http://www.example.com', 'http://www.piwik.org'))); + $this->assertSiteUrls([1 => ['http://www.example.com'], 2 => ['http://www.example.com', 'http://www.piwik.org']]); $this->api->addSiteAliasUrls(2, 'http://piwik.org'); - $this->assertSiteUrls(array(1 => array('http://www.example.com'), 2 => array('http://www.example.com', 'http://piwik.org', 'http://www.piwik.org'))); + $this->assertSiteUrls([1 => ['http://www.example.com'], 2 => ['http://www.example.com', 'http://piwik.org', 'http://www.piwik.org']]); - $this->api->setSiteAliasUrls(2, array()); - $this->assertSiteUrls(array(1 => array('http://www.example.com'), 2 => array('http://www.example.com'))); + $this->api->setSiteAliasUrls(2, []); + $this->assertSiteUrls([1 => ['http://www.example.com'], 2 => ['http://www.example.com']]); } - public function testGetAllCachedSiteUrls_shouldReturnAnEmptyArray_IfThereAreNoSites() + public function testGetAllCachedSiteUrlsShouldReturnAnEmptyArrayIfThereAreNoSites() { - $this->assertCachedSiteUrls(array()); + $this->assertCachedSiteUrls([]); } - public function testGetAllCachedSiteUrls_ShouldReturnCorrectResultEvenIfItIsCachedAsWeClearTheCacheOnAnyChange() + public function testGetAllCachedSiteUrlsShouldReturnCorrectResultEvenIfItIsCachedAsWeClearTheCacheOnAnyChange() { $this->addSite('http://www.example.com'); // only one main URL - $this->assertCachedSiteUrls(array(1 => array('http://www.example.com'))); + $this->assertCachedSiteUrls([1 => ['http://www.example.com']]); $this->addSite('http://www.example.com', 'http://www.piwik.org'); // main URL and alias URL - $this->assertCachedSiteUrls(array(1 => array('http://www.example.com'), 2 => array('http://www.example.com', 'http://www.piwik.org'))); + $this->assertCachedSiteUrls([1 => ['http://www.example.com'], 2 => ['http://www.example.com', 'http://www.piwik.org']]); $this->api->addSiteAliasUrls(2, 'http://piwik.org'); - $this->assertCachedSiteUrls(array(1 => array('http://www.example.com'), 2 => array('http://www.example.com', 'http://piwik.org', 'http://www.piwik.org'))); + $this->assertCachedSiteUrls([1 => ['http://www.example.com'], 2 => ['http://www.example.com', 'http://piwik.org', 'http://www.piwik.org']]); - $this->api->setSiteAliasUrls(2, array()); - $this->assertCachedSiteUrls(array(1 => array('http://www.example.com'), 2 => array('http://www.example.com'))); + $this->api->setSiteAliasUrls(2, []); + $this->assertCachedSiteUrls([1 => ['http://www.example.com'], 2 => ['http://www.example.com']]); - $this->api->updateSite(1, 'siteName3', array('http://updated.example.com', 'http://2.example.com')); - $this->assertCachedSiteUrls(array(1 => array('http://updated.example.com', 'http://2.example.com'), 2 => array('http://www.example.com'))); + $this->api->updateSite(1, 'siteName3', ['http://updated.example.com', 'http://2.example.com']); + $this->assertCachedSiteUrls([1 => ['http://updated.example.com', 'http://2.example.com'], 2 => ['http://www.example.com']]); } - public function testGetAllCachedSiteUrls_ShouldWriteACacheFile() + public function testGetAllCachedSiteUrlsShouldWriteACacheFile() { // make sure cache is empty $this->assertValueInCache(false); @@ -91,16 +93,16 @@ class SiteUrlsTest extends IntegrationTestCase $this->siteUrls->getAllCachedSiteUrls(); // make sure we have a cached result - $this->assertValueInCache(array(1 => array('http://www.example.com'))); + $this->assertValueInCache([1 => ['http://www.example.com']]); } - public function test_clearSitesCache_ShouldActuallyDeleteACache() + public function testClearSitesCacheShouldActuallyDeleteACache() { $this->addSite('http://www.example.com'); $this->siteUrls->getAllCachedSiteUrls(); // make sure we have a cached result - $this->assertValueInCache(array(1 => array('http://www.example.com'))); + $this->assertValueInCache([1 => ['http://www.example.com']]); SiteUrls::clearSitesCache(); @@ -108,9 +110,9 @@ class SiteUrlsTest extends IntegrationTestCase $this->assertValueInCache(false); } - public function testGetAllCachedSiteUrls_ShouldReadFromTheCacheFile() + public function testGetAllCachedSiteUrlsShouldReadFromTheCacheFile() { - $urlsToFake = array(1 => 'Whatever'); + $urlsToFake = [1 => 'Whatever']; $cache = $this->buildCache(); $cache->save('allSiteUrlsPerSite', $urlsToFake, 600); @@ -119,36 +121,36 @@ class SiteUrlsTest extends IntegrationTestCase $this->assertEquals($urlsToFake, $actual); } - public function test_groupUrlsByHost_shouldReturnEmptyArray_WhenNoUrlsGiven() + public function testGroupUrlsByHostShouldReturnEmptyArrayWhenNoUrlsGiven() { - $this->assertSame(array(), $this->siteUrls->groupUrlsByHost(array())); - $this->assertSame(array(), $this->siteUrls->groupUrlsByHost(null)); + $this->assertSame([], $this->siteUrls->groupUrlsByHost([])); + $this->assertSame([], $this->siteUrls->groupUrlsByHost(null)); } - public function test_groupUrlsByHost_shouldGroupByHost_WithOneSiteAndDifferentDomains_shouldRemoveWwwAndDefaultToPathSlash() + public function testGroupUrlsByHostShouldGroupByHostWithOneSiteAndDifferentDomainsShouldRemoveWwwAndDefaultToPathSlash() { $idSite = 1; - $oneSite = array( - $idSite => array( + $oneSite = [ + $idSite => [ 'http://apache.piwik', 'http://www.example.com', // should remove www. 'https://example.org', // should handle https or other protocol 'http://apache.piwik/', // same as initial one but with slash at the end, should not add idsite twice 'http://third.www.com' // should not remove www. in the middle of a domain - ) - ); + ] + ]; - $expected = array( - 'apache.piwik' => array('/' => array($idSite)), - 'example.com' => array('/' => array($idSite)), - 'example.org' => array('/' => array($idSite)), - 'third.www.com' => array('/' => array($idSite)), - ); + $expected = [ + 'apache.piwik' => ['/' => [$idSite]], + 'example.com' => ['/' => [$idSite]], + 'example.org' => ['/' => [$idSite]], + 'third.www.com' => ['/' => [$idSite]], + ]; $this->assertSame($expected, $this->siteUrls->groupUrlsByHost($oneSite)); } - public function test_groupUrlsByHost_shouldGroupByHost_WithDifferentDomainsAndPathsShouldListPathByNumberOfDirectoriesAndConvertToLowerCase() + public function testGroupUrlsByHostShouldGroupByHostWithDifferentDomainsAndPathsShouldListPathByNumberOfDirectoriesAndConvertToLowerCase() { $idSite = 1; $idSite2 = 2; @@ -156,36 +158,36 @@ class SiteUrlsTest extends IntegrationTestCase $idSite4 = 4; $idSite5 = 5; - $urls = array( - $idSite => array( + $urls = [ + $idSite => [ 'http://apache.piwik/test', 'http://apache.piWik', 'http://apache.piwik/foo/bAr/', 'http://apache.piwik/Foo/SECOND' - ), - $idSite2 => array( + ], + $idSite2 => [ 'http://apache.piwik/test/', 'http://example.oRg', 'http://apache.piwik/foo/secOnd' - ), - $idSite3 => array( + ], + $idSite3 => [ 'http://apache.piwik/', 'http://apache.piwik/third', 'http://exampLe.com', 'http://example.org/foo/test/two' - ), - $idSite4 => array(), - $idSite5 => array('invalidUrl', 'ftp://example.org/'), - ); - - $expected = array( - 'apache.piwik' => array( - '/foo/second/' => array($idSite, $idSite2), - '/foo/bar/' => array($idSite), - '/third/' => array($idSite3), - '/test/' => array($idSite, $idSite2), - '/' => array($idSite, $idSite3) - ), - 'example.org' => array( - '/foo/test/two/' => array($idSite3), - '/' => array($idSite2, $idSite5) - ), - 'example.com' => array( - '/' => array($idSite3) - ), - ); + ], + $idSite4 => [], + $idSite5 => ['invalidUrl', 'ftp://example.org/'], + ]; + + $expected = [ + 'apache.piwik' => [ + '/foo/second/' => [$idSite, $idSite2], + '/foo/bar/' => [$idSite], + '/third/' => [$idSite3], + '/test/' => [$idSite, $idSite2], + '/' => [$idSite, $idSite3] + ], + 'example.org' => [ + '/foo/test/two/' => [$idSite3], + '/' => [$idSite2, $idSite5] + ], + 'example.com' => [ + '/' => [$idSite3] + ], + ]; $this->assertSame($expected, $this->siteUrls->groupUrlsByHost($urls)); } @@ -193,26 +195,32 @@ class SiteUrlsTest extends IntegrationTestCase /** * @dataProvider getTestIdSitesMatchingUrl */ - public function test_getIdSitesMatchingUrl($expectedMatchSites, $parsedUrl) + public function testGetIdSitesMatchingUrl($expectedMatchSites, $parsedUrl) { - $urlsGroupedByHost = array( - 'apache.piwik' => array( - '/foo/second/' => array(2), - '/foo/sec/' => array(4), - '/foo/bar/' => array(1), - '/third/' => array(3), - '/test/' => array(1, 2), - '/' => array(1, 3) - ), - 'example.org' => array( - '/foo/test/two/' => array(3), - '/foo/second/' => array(6), - '/' => array(2, 5) - ), - 'example.com' => array( - '/' => array(3) - ), - ); + $urlsGroupedByHost = [ + 'apache.piwik' => [ + '/foo/second/' => [2], + '/foo/sec/' => [4], + '/foo/bar/' => [1], + '/third/' => [3], + '/test/' => [1, 2], + '/' => [1, 3] + ], + 'example.org' => [ + '/foo/test/two/' => [3], + '/foo/second/' => [6], + '/' => [2, 5] + ], + 'example.com' => [ + '/' => [3] + ], + 'my.site.com' => [ + '/path/' => [2] + ], + '.site.com' => [ + '/' => [3] + ] + ]; $matchedSites = $this->siteUrls->getIdSitesMatchingUrl($parsedUrl, $urlsGroupedByHost); $this->assertSame($expectedMatchSites, $matchedSites); @@ -220,49 +228,52 @@ class SiteUrlsTest extends IntegrationTestCase public function getTestIdSitesMatchingUrl() { - return array( - array(array(1,3), array('host' => 'apache.piwik')), - array(array(1,3), array('host' => 'apache.piwik', 'path' => '/')), - array(array(1,3), array('host' => 'apache.piwik', 'path' => 'nomatch')), // no other URL matches a site so we fall back to domain match - array(array(1,3), array('host' => 'apache.piwik', 'path' => '/nomatch')), - array(array(2), array('host' => 'apache.piwik', 'path' => '/foo/second')), - array(array(2), array('host' => 'apache.piwik', 'path' => '/foo/second/')), // it shouldn't matter if slash is at end or not - array(array(2), array('host' => 'apache.piwik', 'path' => '/foo/second/test')), // it should find best match - array(array(4), array('host' => 'apache.piwik', 'path' => '/foo/sec/test')), // it should not use /foo/second for these - array(array(4), array('host' => 'apache.piwik', 'path' => '/foo/sec/')), - array(array(4), array('host' => 'apache.piwik', 'path' => '/foo/sec')), - array(array(1,3), array('host' => 'apache.piwik', 'path' => '/foo')), - array(array(2,5), array('host' => 'example.org')), - array(array(2,5), array('host' => 'example.org', 'path' => '/')), - array(array(2,5), array('host' => 'example.org', 'path' => 'any/nonmatching/path')), - array(array(6), array('host' => 'example.org', 'path' => '/foo/second')), - array(array(6), array('host' => 'example.org', 'path' => '/foo/second/test')), - array(array(3), array('host' => 'example.com')), - array(null, array('host' => 'example.pro')), - array(null, array('host' => 'example.pro', 'path' => '/any')), - ); + return [ + [[1,3], ['host' => 'apache.piwik']], + [[1,3], ['host' => 'apache.piwik', 'path' => '/']], + [[1,3], ['host' => 'apache.piwik', 'path' => 'nomatch']], // no other URL matches a site so we fall back to domain match + [[1,3], ['host' => 'apache.piwik', 'path' => '/nomatch']], + [[2], ['host' => 'apache.piwik', 'path' => '/foo/second']], + [[2], ['host' => 'apache.piwik', 'path' => '/foo/second/']], // it shouldn't matter if slash is at end or not + [[2], ['host' => 'apache.piwik', 'path' => '/foo/second/test']], // it should find best match + [[4], ['host' => 'apache.piwik', 'path' => '/foo/sec/test']], // it should not use /foo/second for these + [[4], ['host' => 'apache.piwik', 'path' => '/foo/sec/']], + [[4], ['host' => 'apache.piwik', 'path' => '/foo/sec']], + [[1,3], ['host' => 'apache.piwik', 'path' => '/foo']], + [[2,5], ['host' => 'example.org']], + [[2,5], ['host' => 'example.org', 'path' => '/']], + [[2,5], ['host' => 'example.org', 'path' => 'any/nonmatching/path']], + [[6], ['host' => 'example.org', 'path' => '/foo/second']], + [[6], ['host' => 'example.org', 'path' => '/foo/second/test']], + [[3], ['host' => 'example.com']], + [null, ['host' => 'example.pro']], + [null, ['host' => 'example.pro', 'path' => '/any']], + [[2], ['host' => 'my.site.com', 'path' => '/path/sub']], + [[3], ['host' => 'my.site.com', 'path' => '/other/path']], + [[3], ['host' => 'any.site.com', 'path' => '/']], + ]; } /** * @dataProvider getTestPathMatchingUrl */ - public function test_getPathMatchingUrl($expectedMatchSites, $parsedUrl) + public function testGetPathMatchingUrl($expectedMatchSites, $parsedUrl) { - $urlsGroupedByHost = array( - 'apache.piwik' => array( - '/foo/second/' => array(2), - '/foo/sec/' => array(4), - '/foo/bar/' => array(1), - '/third/' => array(3), - '/test/' => array(1, 2), - '/' => array(1, 3) - ), - 'example.org' => array( - '/foo/test/two/' => array(3), - '/foo/second/' => array(6), - '/' => array(2, 5) - ), - ); + $urlsGroupedByHost = [ + 'apache.piwik' => [ + '/foo/second/' => [2], + '/foo/sec/' => [4], + '/foo/bar/' => [1], + '/third/' => [3], + '/test/' => [1, 2], + '/' => [1, 3] + ], + 'example.org' => [ + '/foo/test/two/' => [3], + '/foo/second/' => [6], + '/' => [2, 5] + ], + ]; $matchedSites = $this->siteUrls->getPathMatchingUrl($parsedUrl, $urlsGroupedByHost); $this->assertSame($expectedMatchSites, $matchedSites); @@ -270,23 +281,23 @@ class SiteUrlsTest extends IntegrationTestCase public function getTestPathMatchingUrl() { - return array( - array('/', array('host' => 'apache.piwik')), - array('/', array('host' => 'apache.piwik', 'path' => '/')), - array('/', array('host' => 'apache.piwik', 'path' => '')), - array(null, array('host' => 'test.piwik')), - array(null, array('host' => 'test.apache.piwik')), // we do not match subdomains, only exact domain match - - array('/foo/bar/', array('host' => 'apache.piwik', 'path' => '/foo/bar')), - array('/foo/bar/', array('host' => 'apache.piwik', 'path' => '/foo/bar/')), - array('/foo/bar/', array('host' => 'apache.piwik', 'path' => '/foo/bar/baz/')), - array('/', array('host' => 'apache.piwik', 'path' => '/foo/baz/bar/')), - array('/third/', array('host' => 'apache.piwik', 'path' => '/third/bar/baz/')), - - array('/foo/second/', array('host' => 'example.org', 'path' => '/foo/second/')), - array('/', array('host' => 'example.org', 'path' => '/foo/secon')), - array(null, array('host' => 'example.pro', 'path' => '/foo/second/')), - ); + return [ + ['/', ['host' => 'apache.piwik']], + ['/', ['host' => 'apache.piwik', 'path' => '/']], + ['/', ['host' => 'apache.piwik', 'path' => '']], + [null, ['host' => 'test.piwik']], + [null, ['host' => 'test.apache.piwik']], // we do not match subdomains, only exact domain match + + ['/foo/bar/', ['host' => 'apache.piwik', 'path' => '/foo/bar']], + ['/foo/bar/', ['host' => 'apache.piwik', 'path' => '/foo/bar/']], + ['/foo/bar/', ['host' => 'apache.piwik', 'path' => '/foo/bar/baz/']], + ['/', ['host' => 'apache.piwik', 'path' => '/foo/baz/bar/']], + ['/third/', ['host' => 'apache.piwik', 'path' => '/third/bar/baz/']], + + ['/foo/second/', ['host' => 'example.org', 'path' => '/foo/second/']], + ['/', ['host' => 'example.org', 'path' => '/foo/secon']], + [null, ['host' => 'example.pro', 'path' => '/foo/second/']], + ]; } private function assertSiteUrls($expectedUrls) diff --git a/plugins/SitesManager/tests/Integration/SitesManagerTest.php b/plugins/SitesManager/tests/Integration/SitesManagerTest.php index 2dcbba313a..20d6b959fd 100644 --- a/plugins/SitesManager/tests/Integration/SitesManagerTest.php +++ b/plugins/SitesManager/tests/Integration/SitesManagerTest.php @@ -1,4 +1,5 @@ <?php + /** * Matomo - free/libre analytics platform * @@ -45,7 +46,7 @@ class SitesManagerTest extends IntegrationTestCase $this->siteId = Fixture::createWebsite('2014-03-03 00:00:00'); } - public function test_onSiteDeleted_shouldClearSiteCache() + public function testOnSiteDeletedShouldClearSiteCache() { $cache = Cache::getLazyCache(); $cache->save($this->siteId, 'testcontent'); @@ -55,7 +56,7 @@ class SitesManagerTest extends IntegrationTestCase $this->assertFalse($cache->contains($this->siteId)); } - public function test_onSiteDeleted_shouldRemoveRememberedArchiveReports() + public function testOnSiteDeletedShouldRemoveRememberedArchiveReports() { $archive = StaticContainer::get('Piwik\Archive\ArchiveInvalidator'); $archive->rememberToInvalidateArchivedReportsLater($this->siteId, Date::factory('2014-04-05')); @@ -66,23 +67,23 @@ class SitesManagerTest extends IntegrationTestCase $this->assertCount(2, $remembered); sort($remembered['2014-04-05']); - $this->assertSame(array($this->siteId, 4949), $remembered['2014-04-05']); + $this->assertSame([$this->siteId, 4949], $remembered['2014-04-05']); sort($remembered['2014-04-06']); - $this->assertSame(array($this->siteId), $remembered['2014-04-06']); + $this->assertSame([$this->siteId], $remembered['2014-04-06']); $this->manager->onSiteDeleted($this->siteId); - $expected = array( - '2014-04-05' => array(4949) - ); + $expected = [ + '2014-04-05' => [4949] + ]; $this->assertEquals($expected, $archive->getRememberedArchivedReportsThatShouldBeInvalidated()); } /** * @dataProvider getTestDataForRedirectDashboard */ - public function test_redirectDashboardToWelcomePage_doesNothingIfModuleActionAreIncorrect($module, $action) + public function testRedirectDashboardToWelcomePageDoesNothingIfModuleActionAreIncorrect($module, $action) { $originalModule = $module; $originalAction = $action; @@ -102,7 +103,7 @@ class SitesManagerTest extends IntegrationTestCase ]; } - public function test_redirectDashboardToWelcomePage_doesNothingIfThereIsNoIdSiteParam() + public function testRedirectDashboardToWelcomePageDoesNothingIfThereIsNoIdSiteParam() { $module = 'CoreHome'; $action = 'index'; @@ -114,7 +115,7 @@ class SitesManagerTest extends IntegrationTestCase $this->assertEquals('index', $action); } - public function test_redirectDashboardToWelcomePage_doesNothingIfAVisitWasTrackedInThePast() + public function testRedirectDashboardToWelcomePageDoesNothingIfAVisitWasTrackedInThePast() { $module = 'CoreHome'; $action = 'index'; @@ -136,7 +137,7 @@ class SitesManagerTest extends IntegrationTestCase $this->assertEquals('index', $action); } - public function test_redirectDashboardToWelcomePage_doesNothingIfAVisitWasTrackedAndWasLaterPurged() + public function testRedirectDashboardToWelcomePageDoesNothingIfAVisitWasTrackedAndWasLaterPurged() { $module = 'CoreHome'; $action = 'index'; @@ -159,7 +160,7 @@ class SitesManagerTest extends IntegrationTestCase $this->assertEquals('index', $action); } - public function test_redirectDashboardToWelcomePage_redirectsIfThereIsNoDataAndAppropriateParams() + public function testRedirectDashboardToWelcomePageRedirectsIfThereIsNoDataAndAppropriateParams() { $module = 'CoreHome'; $action = 'index'; @@ -183,8 +184,8 @@ class SitesManagerTest extends IntegrationTestCase public function provideContainerConfig() { - return array( + return [ 'Piwik\Access' => new FakeAccess() - ); + ]; } } diff --git a/plugins/SitesManager/tests/Integration/TrackingTest.php b/plugins/SitesManager/tests/Integration/TrackingTest.php index 042f44075a..623c59e27c 100644 --- a/plugins/SitesManager/tests/Integration/TrackingTest.php +++ b/plugins/SitesManager/tests/Integration/TrackingTest.php @@ -1,4 +1,5 @@ <?php + /** * Matomo - free/libre analytics platform * @@ -20,7 +21,7 @@ use Piwik\Tests\Framework\TestCase\IntegrationTestCase; */ class TrackingTest extends IntegrationTestCase { - public function test_TrackingOldVisits_ResetsSiteCreatedTime_SoDataCanBeViewedInUI() + public function testTrackingOldVisitsResetsSiteCreatedTimeSoDataCanBeViewedInUI() { Fixture::createWebsite('2015-01-01 00:00:00'); @@ -35,7 +36,7 @@ class TrackingTest extends IntegrationTestCase $this->assertEquals('2014-05-04 00:00:00', $createdTime); } - public function test_TrackingOldVisit_ThatIsExcluded_DoesNotResetCreatedTime() + public function testTrackingOldVisitThatIsExcludedDoesNotResetCreatedTime() { Fixture::createWebsite('2015-01-01 00:00:00'); @@ -53,7 +54,7 @@ class TrackingTest extends IntegrationTestCase $this->assertEquals('2014-12-31 00:00:00', $createdTime); } - public function test_TrackingOldVisit_ForSiteWithNoTsCreatedTime_DoesNotResetCreatedTime() + public function testTrackingOldVisitForSiteWithNoTsCreatedTimeDoesNotResetCreatedTime() { Fixture::createWebsite('2015-01-01 00:00:00'); @@ -77,12 +78,12 @@ class TrackingTest extends IntegrationTestCase private function getSiteCreatedTime($idSite) { - return Db::fetchOne("SELECT ts_created FROM " . Common::prefixTable('site') . " WHERE idsite = ?", array($idSite)); + return Db::fetchOne("SELECT ts_created FROM " . Common::prefixTable('site') . " WHERE idsite = ?", [$idSite]); } private function unsetCreatedTime($idSite) { - Db::query("UPDATE " . Common::prefixTable('site') . " SET ts_created = NULL WHERE idsite = ?", array($idSite)); + Db::query("UPDATE " . Common::prefixTable('site') . " SET ts_created = NULL WHERE idsite = ?", [$idSite]); } protected static function configureFixture($fixture) @@ -91,4 +92,4 @@ class TrackingTest extends IntegrationTestCase $fixture->createSuperUser = true; } -}
\ No newline at end of file +} diff --git a/plugins/SitesManager/tests/System/ApiTest.php b/plugins/SitesManager/tests/System/ApiTest.php index 6d7d3e0ba7..188416c700 100644 --- a/plugins/SitesManager/tests/System/ApiTest.php +++ b/plugins/SitesManager/tests/System/ApiTest.php @@ -1,4 +1,5 @@ <?php + /** * Matomo - free/libre analytics platform * @@ -35,67 +36,67 @@ class ApiTest extends SystemTestCase public function getApiForTesting() { - $apiToTest = array(); - $apiToTest[] = array(array('SitesManager.getPatternMatchSites'), - array( + $apiToTest = []; + $apiToTest[] = [['SitesManager.getPatternMatchSites'], + [ 'idSite' => 1, 'date' => self::$fixture->dateTime, - 'periods' => array('day'), - 'otherRequestParameters' => array('pattern' => 'SiteTest1') - ) - ); - $apiToTest[] = array(array('SitesManager.getPatternMatchSites'), - array( + 'periods' => ['day'], + 'otherRequestParameters' => ['pattern' => 'SiteTest1'] + ] + ]; + $apiToTest[] = [['SitesManager.getPatternMatchSites'], + [ 'idSite' => 1, 'date' => self::$fixture->dateTime, - 'periods' => array('day'), - 'otherRequestParameters' => array('pattern' => 'SiteTest1', 'limit' => 2), + 'periods' => ['day'], + 'otherRequestParameters' => ['pattern' => 'SiteTest1', 'limit' => 2], 'testSuffix' => 'withLimit' - ) - ); - $apiToTest[] = array(array('SitesManager.getNumWebsitesToDisplayPerPage'), - array( + ] + ]; + $apiToTest[] = [['SitesManager.getNumWebsitesToDisplayPerPage'], + [ 'idSite' => 1, 'date' => self::$fixture->dateTime, - 'periods' => array('day'), - 'otherRequestParameters' => array('pattern' => 'SiteTest1') - ) - ); - $apiToTest[] = array(array('SitesManager.getSiteSettings'), - array( + 'periods' => ['day'], + 'otherRequestParameters' => ['pattern' => 'SiteTest1'] + ] + ]; + $apiToTest[] = [['SitesManager.getSiteSettings'], + [ 'idSite' => 1 - ) - ); + ] + ]; return $apiToTest; } - public function test_InstalledBeforeMatomo37() + public function testInstalledBeforeMatomo37() { $this->setInstallVersion('3.6.0'); - $this->runApiTests(array('SitesManager.getJavascriptTag', 'SitesManager.getImageTrackingCode'), array( + $this->runApiTests(['SitesManager.getJavascriptTag', 'SitesManager.getImageTrackingCode'], [ 'idSite' => 1, 'testSuffix' => '_prior3_7_0' - )); + ]); } - public function test_InstalledBeforeMatomo37ButForced() + public function testInstalledBeforeMatomo37ButForced() { $this->setInstallVersion('3.6.0'); - $this->runApiTests(array('SitesManager.getJavascriptTag', 'SitesManager.getImageTrackingCode'), array( + $this->runApiTests(['SitesManager.getJavascriptTag', 'SitesManager.getImageTrackingCode'], [ 'idSite' => 1, - 'otherRequestParameters' => array('forceMatomoEndpoint' => 1), + 'otherRequestParameters' => ['forceMatomoEndpoint' => 1], 'testSuffix' => '_prior3_7_0_but_forced' - )); + ]); } - public function test_InstalledAfterMatomo37() + public function testInstalledAfterMatomo37() { $this->setInstallVersion('3.7.0'); - $this->runApiTests(array('SitesManager.getJavascriptTag', 'SitesManager.getImageTrackingCode'), array( + $this->runApiTests(['SitesManager.getJavascriptTag', 'SitesManager.getImageTrackingCode'], [ 'idSite' => 1, 'testSuffix' => '_after3_7_0' - )); + ]); } private function setInstallVersion($installVersion) @@ -112,7 +113,6 @@ class ApiTest extends SystemTestCase { return dirname(__FILE__); } - } -ApiTest::$fixture = new ManySites();
\ No newline at end of file +ApiTest::$fixture = new ManySites(); diff --git a/plugins/SitesManager/tests/System/expected/test_SitesManager__SitesManager.getPatternMatchSites.xml b/plugins/SitesManager/tests/System/expected/test_SitesManager__SitesManager.getPatternMatchSites.xml index 40a0823b76..429d57fd42 100644 --- a/plugins/SitesManager/tests/System/expected/test_SitesManager__SitesManager.getPatternMatchSites.xml +++ b/plugins/SitesManager/tests/System/expected/test_SitesManager__SitesManager.getPatternMatchSites.xml @@ -15,6 +15,7 @@ <excluded_ips /> <excluded_parameters /> <excluded_user_agents /> + <excluded_referrers /> <group /> <type>website</type> <keep_url_fragment>0</keep_url_fragment> @@ -37,6 +38,7 @@ <excluded_ips /> <excluded_parameters /> <excluded_user_agents /> + <excluded_referrers /> <group /> <type>website</type> <keep_url_fragment>0</keep_url_fragment> @@ -59,6 +61,7 @@ <excluded_ips /> <excluded_parameters /> <excluded_user_agents /> + <excluded_referrers /> <group /> <type>website</type> <keep_url_fragment>0</keep_url_fragment> @@ -81,6 +84,7 @@ <excluded_ips /> <excluded_parameters /> <excluded_user_agents /> + <excluded_referrers /> <group /> <type>website</type> <keep_url_fragment>0</keep_url_fragment> @@ -103,6 +107,7 @@ <excluded_ips /> <excluded_parameters /> <excluded_user_agents /> + <excluded_referrers /> <group /> <type>website</type> <keep_url_fragment>0</keep_url_fragment> @@ -125,6 +130,7 @@ <excluded_ips /> <excluded_parameters /> <excluded_user_agents /> + <excluded_referrers /> <group /> <type>website</type> <keep_url_fragment>0</keep_url_fragment> @@ -147,6 +153,7 @@ <excluded_ips /> <excluded_parameters /> <excluded_user_agents /> + <excluded_referrers /> <group /> <type>website</type> <keep_url_fragment>0</keep_url_fragment> @@ -169,6 +176,7 @@ <excluded_ips /> <excluded_parameters /> <excluded_user_agents /> + <excluded_referrers /> <group /> <type>website</type> <keep_url_fragment>0</keep_url_fragment> @@ -191,6 +199,7 @@ <excluded_ips /> <excluded_parameters /> <excluded_user_agents /> + <excluded_referrers /> <group /> <type>website</type> <keep_url_fragment>0</keep_url_fragment> @@ -213,6 +222,7 @@ <excluded_ips /> <excluded_parameters /> <excluded_user_agents /> + <excluded_referrers /> <group /> <type>website</type> <keep_url_fragment>0</keep_url_fragment> @@ -235,6 +245,7 @@ <excluded_ips /> <excluded_parameters /> <excluded_user_agents /> + <excluded_referrers /> <group /> <type>website</type> <keep_url_fragment>0</keep_url_fragment> diff --git a/plugins/SitesManager/tests/System/expected/test_SitesManager__SitesManager.getSiteSettings.xml b/plugins/SitesManager/tests/System/expected/test_SitesManager__SitesManager.getSiteSettings.xml index 624774cb7d..0fadc11a5b 100644 --- a/plugins/SitesManager/tests/System/expected/test_SitesManager__SitesManager.getSiteSettings.xml +++ b/plugins/SitesManager/tests/System/expected/test_SitesManager__SitesManager.getSiteSettings.xml @@ -125,6 +125,26 @@ https://www.example.org/</placeholder> <condition /> </row> <row> + <name>excluded_referrers</name> + <title>Excluded referrers</title> + <value> + </value> + <defaultValue> + </defaultValue> + <type>array</type> + <uiControl>textarea</uiControl> + <uiControlAttributes> + <cols>20</cols> + <rows>4</rows> + </uiControlAttributes> + <availableValues /> + <description /> + <inlineHelp>Enter the list of hostnames and URLs, one per line, you want to exclude from referrer detection.<br /><br />Each entry needs to contain the hostname and may contain a path. If a path is provided a referrer will only be excluded if the path matches as well. URLs with and without 'www' are treated the same. Provided protocols will be ignored.<br />e.g. "www.example.org" would match "http://example.org/mypath" and "https://www.example.org/?param=1" but not "https://sub.example.org/"<br /><br />To also exclude all subdomains of a certain hostname, prefix it with a dot. e.g. ".sub.example.org" would exclude "http://sub.example.org/mypath", but also all its subdomains like "https://new.sub.example.org/".</inlineHelp> + <templateFile /> + <introduction /> + <condition /> + </row> + <row> <name>sitesearch</name> <title>Site Search</title> <value>1</value> diff --git a/plugins/SitesManager/tests/System/expected/test_SitesManagerwithLimit__SitesManager.getPatternMatchSites.xml b/plugins/SitesManager/tests/System/expected/test_SitesManagerwithLimit__SitesManager.getPatternMatchSites.xml index ff12b972da..d24e8d2354 100644 --- a/plugins/SitesManager/tests/System/expected/test_SitesManagerwithLimit__SitesManager.getPatternMatchSites.xml +++ b/plugins/SitesManager/tests/System/expected/test_SitesManagerwithLimit__SitesManager.getPatternMatchSites.xml @@ -15,6 +15,7 @@ <excluded_ips /> <excluded_parameters /> <excluded_user_agents /> + <excluded_referrers /> <group /> <type>website</type> <keep_url_fragment>0</keep_url_fragment> @@ -37,6 +38,7 @@ <excluded_ips /> <excluded_parameters /> <excluded_user_agents /> + <excluded_referrers /> <group /> <type>website</type> <keep_url_fragment>0</keep_url_fragment> diff --git a/plugins/SitesManager/tests/UI/expected-screenshots/SitesManager_global_settings.png b/plugins/SitesManager/tests/UI/expected-screenshots/SitesManager_global_settings.png index 2db69b918e..7a9b969825 100644 --- a/plugins/SitesManager/tests/UI/expected-screenshots/SitesManager_global_settings.png +++ b/plugins/SitesManager/tests/UI/expected-screenshots/SitesManager_global_settings.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:de015ca1177509f696d12d07bfdc10c034f90d688c143d544b5fcb9fc997e8f7 -size 254454 +oid sha256:a2c8a88774382621127514bca028ecbb35ed4c45c88ad2ccca1762053c7aaba9 +size 323951 diff --git a/plugins/SitesManager/tests/UI/expected-screenshots/SitesManager_site_edit_url.png b/plugins/SitesManager/tests/UI/expected-screenshots/SitesManager_site_edit_url.png index 891834b2c4..0cc7ff1efd 100644 --- a/plugins/SitesManager/tests/UI/expected-screenshots/SitesManager_site_edit_url.png +++ b/plugins/SitesManager/tests/UI/expected-screenshots/SitesManager_site_edit_url.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:50e9b492ac0e36727fce571beb6c4ee7fad2e4d54a3c5cebb4f41bb545af4f14 -size 330106 +oid sha256:2fda752b4a36129a30d2f31f382f62d0ef65fb8dfb5719c4a626b0299d751dc4 +size 391919 diff --git a/plugins/SitesManager/tests/Unit/APITest.php b/plugins/SitesManager/tests/Unit/APITest.php index 15b46171ac..2d7610aca8 100644 --- a/plugins/SitesManager/tests/Unit/APITest.php +++ b/plugins/SitesManager/tests/Unit/APITest.php @@ -1,4 +1,5 @@ <?php + /** * Matomo - free/libre analytics platform * @@ -47,18 +48,18 @@ class APITest extends \PHPUnit\Framework\TestCase public function getTimezoneNameTestData() { - return array( - array('Europe/Rome', 'en', 'Italy'), - array('Europe/Rome', 'it', 'Italia'), - array('America/New_York', 'en', 'United States - New York'), - array('America/New_York', 'ru', 'Соединенные Штаты - Нью-Йорк'), - array('Asia/Foo_Bar', 'en', 'Foo Bar'), - array('Etc/UTC', 'en', 'UTC'), - array('UTC', 'en', 'UTC'), - array('UTC+1', 'en', 'UTC+1'), - array('UTC+1.5', 'en', 'UTC+1:30'), - array('UTC-1.5', 'en', 'UTC-1:30'), - ); + return [ + ['Europe/Rome', 'en', 'Italy'], + ['Europe/Rome', 'it', 'Italia'], + ['America/New_York', 'en', 'United States - New York'], + ['America/New_York', 'ru', 'Соединенные Штаты - Нью-Йорк'], + ['Asia/Foo_Bar', 'en', 'Foo Bar'], + ['Etc/UTC', 'en', 'UTC'], + ['UTC', 'en', 'UTC'], + ['UTC+1', 'en', 'UTC+1'], + ['UTC+1.5', 'en', 'UTC+1:30'], + ['UTC-1.5', 'en', 'UTC-1:30'], + ]; } /** diff --git a/plugins/SitesManager/tests/Unit/GuessSiteTypeAndGtmTest.php b/plugins/SitesManager/tests/Unit/GuessSiteTypeAndGtmTest.php index 66045cc909..ed85e26a55 100644 --- a/plugins/SitesManager/tests/Unit/GuessSiteTypeAndGtmTest.php +++ b/plugins/SitesManager/tests/Unit/GuessSiteTypeAndGtmTest.php @@ -1,4 +1,5 @@ <?php + /** * Matomo - free/libre analytics platform * @@ -16,7 +17,7 @@ use Piwik\Plugins\SitesManager\SitesManager; * @group GtmSiteTypeGuesserTest * @group Plugins */ -class GtmSiteTypeGuesserTest extends \PHPUnit\Framework\TestCase +class GuessSiteTypeAndGtmTest extends \PHPUnit\Framework\TestCase { /** * @var GtmSiteTypeGuesser @@ -30,17 +31,17 @@ class GtmSiteTypeGuesserTest extends \PHPUnit\Framework\TestCase $this->guesser = new GtmSiteTypeGuesser(); } - public function test_site_type_unknown_if_response_false() + public function testSiteTypeUnknownIfResponseFalse() { $this->assertEquals(SitesManager::SITE_TYPE_UNKNOWN, $this->guesser->guessSiteTypeFromResponse(false)); } - public function test_gtm_is_false_if_response_false() + public function testGtmIsFalseIfResponseFalse() { $this->assertFalse($this->guesser->guessGtmFromResponse(false)); } - public function test_gtm_is_true() + public function testGtmIsTrue() { $response = [ 'status' => 200, @@ -54,7 +55,7 @@ class GtmSiteTypeGuesserTest extends \PHPUnit\Framework\TestCase /** * @dataProvider responseProvider */ - public function test_site_types_by_response($expected, $response) + public function testSiteTypesByResponse($expected, $response) { $this->assertEquals($expected, $this->guesser->guessSiteTypeFromResponse($response)); } diff --git a/plugins/SitesManager/vue/dist/SitesManager.umd.js b/plugins/SitesManager/vue/dist/SitesManager.umd.js index 4601a84174..aa0ff4d137 100644 --- a/plugins/SitesManager/vue/dist/SitesManager.umd.js +++ b/plugins/SitesManager/vue/dist/SitesManager.umd.js @@ -1442,6 +1442,7 @@ var GlobalSettingsStore_GlobalSettingsStore = /*#__PURE__*/function () { excludedIpsGlobal: '', excludedQueryParametersGlobal: '', excludedUserAgentsGlobal: '', + excludedReferrersGlobal: '', searchKeywordParametersGlobal: '', searchCategoryParametersGlobal: '' } @@ -1492,6 +1493,7 @@ var GlobalSettingsStore_GlobalSettingsStore = /*#__PURE__*/function () { excludedIpsGlobal: response.excludedIpsGlobal || '', excludedQueryParametersGlobal: response.excludedQueryParametersGlobal || '', excludedUserAgentsGlobal: response.excludedUserAgentsGlobal || '', + excludedReferrersGlobal: response.excludedReferrersGlobal || '', searchKeywordParametersGlobal: response.searchKeywordParametersGlobal || '', searchCategoryParametersGlobal: response.searchCategoryParametersGlobal || '' }); @@ -1806,81 +1808,96 @@ SitesManagementvue_type_script_lang_ts.render = render window.angular.module('piwikApp').factory('sitesManagerAPI', function () { return {}; }); -// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-babel/node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/templateLoader.js??ref--6!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--0-1!./plugins/SitesManager/vue/src/ManageGlobalSettings/ManageGlobalSettings.vue?vue&type=template&id=213acaec +// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-babel/node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/templateLoader.js??ref--6!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--0-1!./plugins/SitesManager/vue/src/ManageGlobalSettings/ManageGlobalSettings.vue?vue&type=template&id=5467128a -var ManageGlobalSettingsvue_type_template_id_213acaec_hoisted_1 = { +var ManageGlobalSettingsvue_type_template_id_5467128a_hoisted_1 = { class: "SitesManager" }; -var ManageGlobalSettingsvue_type_template_id_213acaec_hoisted_2 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", { +var ManageGlobalSettingsvue_type_template_id_5467128a_hoisted_2 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", { name: "globalSettings", id: "globalSettings" }, null, -1); -var ManageGlobalSettingsvue_type_template_id_213acaec_hoisted_3 = { +var ManageGlobalSettingsvue_type_template_id_5467128a_hoisted_3 = { id: "excludedIpsGlobalHelp", class: "inline-help-node" }; -var ManageGlobalSettingsvue_type_template_id_213acaec_hoisted_4 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("br", null, null, -1); +var ManageGlobalSettingsvue_type_template_id_5467128a_hoisted_4 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("br", null, null, -1); -var ManageGlobalSettingsvue_type_template_id_213acaec_hoisted_5 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("br", null, null, -1); +var ManageGlobalSettingsvue_type_template_id_5467128a_hoisted_5 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("br", null, null, -1); -var ManageGlobalSettingsvue_type_template_id_213acaec_hoisted_6 = ["innerHTML"]; -var ManageGlobalSettingsvue_type_template_id_213acaec_hoisted_7 = { +var ManageGlobalSettingsvue_type_template_id_5467128a_hoisted_6 = ["innerHTML"]; +var ManageGlobalSettingsvue_type_template_id_5467128a_hoisted_7 = { id: "excludedQueryParametersGlobalHelp", class: "inline-help-node" }; -var ManageGlobalSettingsvue_type_template_id_213acaec_hoisted_8 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("br", null, null, -1); +var ManageGlobalSettingsvue_type_template_id_5467128a_hoisted_8 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("br", null, null, -1); -var ManageGlobalSettingsvue_type_template_id_213acaec_hoisted_9 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("br", null, null, -1); +var ManageGlobalSettingsvue_type_template_id_5467128a_hoisted_9 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("br", null, null, -1); -var ManageGlobalSettingsvue_type_template_id_213acaec_hoisted_10 = { +var ManageGlobalSettingsvue_type_template_id_5467128a_hoisted_10 = { id: "excludedUserAgentsGlobalHelp", class: "inline-help-node" }; -var ManageGlobalSettingsvue_type_template_id_213acaec_hoisted_11 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("br", null, null, -1); +var ManageGlobalSettingsvue_type_template_id_5467128a_hoisted_11 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("br", null, null, -1); -var ManageGlobalSettingsvue_type_template_id_213acaec_hoisted_12 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("br", null, null, -1); +var ManageGlobalSettingsvue_type_template_id_5467128a_hoisted_12 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("br", null, null, -1); -var ManageGlobalSettingsvue_type_template_id_213acaec_hoisted_13 = { +var ManageGlobalSettingsvue_type_template_id_5467128a_hoisted_13 = { + id: "excludedReferrersGlobalHelp", + class: "inline-help-node" +}; + +var ManageGlobalSettingsvue_type_template_id_5467128a_hoisted_14 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("br", null, null, -1); + +var ManageGlobalSettingsvue_type_template_id_5467128a_hoisted_15 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("br", null, null, -1); + +var ManageGlobalSettingsvue_type_template_id_5467128a_hoisted_16 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("br", null, null, -1); + +var ManageGlobalSettingsvue_type_template_id_5467128a_hoisted_17 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("br", null, null, -1); + +var ManageGlobalSettingsvue_type_template_id_5467128a_hoisted_18 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("br", null, null, -1); + +var ManageGlobalSettingsvue_type_template_id_5467128a_hoisted_19 = { id: "timezoneHelp", class: "inline-help-node" }; -var ManageGlobalSettingsvue_type_template_id_213acaec_hoisted_14 = { +var ManageGlobalSettingsvue_type_template_id_5467128a_hoisted_20 = { key: 0 }; -var ManageGlobalSettingsvue_type_template_id_213acaec_hoisted_15 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("br", null, null, -1); +var ManageGlobalSettingsvue_type_template_id_5467128a_hoisted_21 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("br", null, null, -1); -var ManageGlobalSettingsvue_type_template_id_213acaec_hoisted_16 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("br", null, null, -1); +var ManageGlobalSettingsvue_type_template_id_5467128a_hoisted_22 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("br", null, null, -1); -var ManageGlobalSettingsvue_type_template_id_213acaec_hoisted_17 = { +var ManageGlobalSettingsvue_type_template_id_5467128a_hoisted_23 = { id: "keepURLFragmentsHelp", class: "inline-help-node" }; -var ManageGlobalSettingsvue_type_template_id_213acaec_hoisted_18 = ["innerHTML"]; -var ManageGlobalSettingsvue_type_template_id_213acaec_hoisted_19 = { +var ManageGlobalSettingsvue_type_template_id_5467128a_hoisted_24 = ["innerHTML"]; +var ManageGlobalSettingsvue_type_template_id_5467128a_hoisted_25 = { class: "alert alert-info" }; -function ManageGlobalSettingsvue_type_template_id_213acaec_render(_ctx, _cache, $props, $setup, $data, $options) { +function ManageGlobalSettingsvue_type_template_id_5467128a_render(_ctx, _cache, $props, $setup, $data, $options) { var _component_Field = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["resolveComponent"])("Field"); var _component_SaveButton = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["resolveComponent"])("SaveButton"); var _component_ContentBlock = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["resolveComponent"])("ContentBlock"); - return Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", ManageGlobalSettingsvue_type_template_id_213acaec_hoisted_1, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_ContentBlock, { + return Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", ManageGlobalSettingsvue_type_template_id_5467128a_hoisted_1, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_ContentBlock, { "content-title": _ctx.translate('SitesManager_GlobalWebsitesSettings') }, { default: Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withCtx"])(function () { - return [ManageGlobalSettingsvue_type_template_id_213acaec_hoisted_2, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", ManageGlobalSettingsvue_type_template_id_213acaec_hoisted_3, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createTextVNode"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('SitesManager_HelpExcludedIpAddresses', '1.2.3.4/24', '1.2.3.*', '1.2.*.*')) + " ", 1), ManageGlobalSettingsvue_type_template_id_213acaec_hoisted_4, ManageGlobalSettingsvue_type_template_id_213acaec_hoisted_5, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", { + return [ManageGlobalSettingsvue_type_template_id_5467128a_hoisted_2, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", ManageGlobalSettingsvue_type_template_id_5467128a_hoisted_3, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createTextVNode"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('SitesManager_HelpExcludedIpAddresses', '1.2.3.4/24', '1.2.3.*', '1.2.*.*')) + " ", 1), ManageGlobalSettingsvue_type_template_id_5467128a_hoisted_4, ManageGlobalSettingsvue_type_template_id_5467128a_hoisted_5, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", { innerHTML: _ctx.$sanitize(_ctx.yourCurrentIpAddressIs) - }, null, 8, ManageGlobalSettingsvue_type_template_id_213acaec_hoisted_6)])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", ManageGlobalSettingsvue_type_template_id_213acaec_hoisted_7, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createTextVNode"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('SitesManager_ListOfQueryParametersToExclude', '/^sess.*|.*[dD]ate$/')) + " ", 1), ManageGlobalSettingsvue_type_template_id_213acaec_hoisted_8, ManageGlobalSettingsvue_type_template_id_213acaec_hoisted_9, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createTextVNode"])(" " + Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('SitesManager_PiwikWillAutomaticallyExcludeCommonSessionParameters', 'phpsessid, sessionid, ...')), 1)])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", ManageGlobalSettingsvue_type_template_id_213acaec_hoisted_10, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createTextVNode"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('SitesManager_GlobalExcludedUserAgentHelp1')) + " ", 1), ManageGlobalSettingsvue_type_template_id_213acaec_hoisted_11, ManageGlobalSettingsvue_type_template_id_213acaec_hoisted_12, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createTextVNode"])(" " + Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('SitesManager_GlobalListExcludedUserAgents_Desc')) + " " + Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('SitesManager_GlobalExcludedUserAgentHelp2')) + " " + Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('SitesManager_GlobalExcludedUserAgentHelp3', '/bot|spider|crawl|scanner/i')), 1)])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", ManageGlobalSettingsvue_type_template_id_213acaec_hoisted_13, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [!_ctx.timezoneSupportEnabled ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("span", ManageGlobalSettingsvue_type_template_id_213acaec_hoisted_14, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createTextVNode"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('SitesManager_AdvancedTimezoneSupportNotFound')) + " ", 1), ManageGlobalSettingsvue_type_template_id_213acaec_hoisted_15])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createTextVNode"])(" " + Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('SitesManager_UTCTimeIs', _ctx.utcTimeDate)) + " ", 1), ManageGlobalSettingsvue_type_template_id_213acaec_hoisted_16, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createTextVNode"])(" " + Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('SitesManager_ChangingYourTimezoneWillOnlyAffectDataForward')), 1)])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", ManageGlobalSettingsvue_type_template_id_213acaec_hoisted_17, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", { + }, null, 8, ManageGlobalSettingsvue_type_template_id_5467128a_hoisted_6)])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", ManageGlobalSettingsvue_type_template_id_5467128a_hoisted_7, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createTextVNode"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('SitesManager_ListOfQueryParametersToExclude', '/^sess.*|.*[dD]ate$/')) + " ", 1), ManageGlobalSettingsvue_type_template_id_5467128a_hoisted_8, ManageGlobalSettingsvue_type_template_id_5467128a_hoisted_9, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createTextVNode"])(" " + Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('SitesManager_PiwikWillAutomaticallyExcludeCommonSessionParameters', 'phpsessid, sessionid, ...')), 1)])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", ManageGlobalSettingsvue_type_template_id_5467128a_hoisted_10, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createTextVNode"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('SitesManager_GlobalExcludedUserAgentHelp1')) + " ", 1), ManageGlobalSettingsvue_type_template_id_5467128a_hoisted_11, ManageGlobalSettingsvue_type_template_id_5467128a_hoisted_12, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createTextVNode"])(" " + Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('SitesManager_GlobalListExcludedUserAgents_Desc')) + " " + Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('SitesManager_GlobalExcludedUserAgentHelp2')) + " " + Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('SitesManager_GlobalExcludedUserAgentHelp3', '/bot|spider|crawl|scanner/i')), 1)])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", ManageGlobalSettingsvue_type_template_id_5467128a_hoisted_13, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createTextVNode"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('SitesManager_ExcludedReferrersHelp')) + " ", 1), ManageGlobalSettingsvue_type_template_id_5467128a_hoisted_14, ManageGlobalSettingsvue_type_template_id_5467128a_hoisted_15, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createTextVNode"])(" " + Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('SitesManager_ExcludedReferrersHelpDetails')) + " ", 1), ManageGlobalSettingsvue_type_template_id_5467128a_hoisted_16, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createTextVNode"])(" " + Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('SitesManager_ExcludedReferrersHelpExamples', 'www.example.org', 'http://example.org/mypath', 'https://www.example.org/?param=1', 'https://sub.example.org/')) + " ", 1), ManageGlobalSettingsvue_type_template_id_5467128a_hoisted_17, ManageGlobalSettingsvue_type_template_id_5467128a_hoisted_18, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createTextVNode"])(" " + Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('SitesManager_ExcludedReferrersHelpSubDomains', '.sub.example.org', 'http://sub.example.org/mypath', 'https://new.sub.example.org/')), 1)])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", ManageGlobalSettingsvue_type_template_id_5467128a_hoisted_19, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [!_ctx.timezoneSupportEnabled ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("span", ManageGlobalSettingsvue_type_template_id_5467128a_hoisted_20, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createTextVNode"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('SitesManager_AdvancedTimezoneSupportNotFound')) + " ", 1), ManageGlobalSettingsvue_type_template_id_5467128a_hoisted_21])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createTextVNode"])(" " + Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('SitesManager_UTCTimeIs', _ctx.utcTimeDate)) + " ", 1), ManageGlobalSettingsvue_type_template_id_5467128a_hoisted_22, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createTextVNode"])(" " + Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('SitesManager_ChangingYourTimezoneWillOnlyAffectDataForward')), 1)])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", ManageGlobalSettingsvue_type_template_id_5467128a_hoisted_23, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", { innerHTML: _ctx.$sanitize(_ctx.keepUrlFragmentHelp) - }, null, 8, ManageGlobalSettingsvue_type_template_id_213acaec_hoisted_18), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('SitesManager_KeepURLFragmentsHelp2')), 1)]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_Field, { + }, null, 8, ManageGlobalSettingsvue_type_template_id_5467128a_hoisted_24), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('SitesManager_KeepURLFragmentsHelp2')), 1)]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_Field, { uicontrol: "textarea", name: "excludedIpsGlobal", "var-type": "array", @@ -1917,22 +1934,34 @@ function ManageGlobalSettingsvue_type_template_id_213acaec_render(_ctx, _cache, "inline-help": '#excludedUserAgentsGlobalHelp', disabled: _ctx.isLoading }, null, 8, ["modelValue", "title", "introduction", "disabled"])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_Field, { + uicontrol: "textarea", + name: "excludedReferrersGlobal", + "var-type": "array", + modelValue: _ctx.excludedReferrersGlobal, + "onUpdate:modelValue": _cache[3] || (_cache[3] = function ($event) { + return _ctx.excludedReferrersGlobal = $event; + }), + title: _ctx.translate('SitesManager_GlobalListExcludedReferrersDesc'), + introduction: _ctx.translate('SitesManager_GlobalListExcludedReferrers'), + "inline-help": '#excludedReferrersGlobalHelp', + disabled: _ctx.isLoading + }, null, 8, ["modelValue", "title", "introduction", "disabled"])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_Field, { uicontrol: "checkbox", name: "keepURLFragmentsGlobal", modelValue: _ctx.keepURLFragmentsGlobal, - "onUpdate:modelValue": _cache[3] || (_cache[3] = function ($event) { + "onUpdate:modelValue": _cache[4] || (_cache[4] = function ($event) { return _ctx.keepURLFragmentsGlobal = $event; }), title: _ctx.translate('SitesManager_KeepURLFragmentsLong'), introduction: _ctx.translate('SitesManager_KeepURLFragments'), "inline-help": '#keepURLFragmentsHelp', disabled: _ctx.isLoading - }, null, 8, ["modelValue", "title", "introduction", "disabled"])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("h3", null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('SitesManager_TrackingSiteSearch')), 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("p", null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('SitesManager_SiteSearchUse')), 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", ManageGlobalSettingsvue_type_template_id_213acaec_hoisted_19, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('SitesManager_SearchParametersNote')) + " " + Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('SitesManager_SearchParametersNote2')), 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_Field, { + }, null, 8, ["modelValue", "title", "introduction", "disabled"])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("h3", null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('SitesManager_TrackingSiteSearch')), 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("p", null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('SitesManager_SiteSearchUse')), 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", ManageGlobalSettingsvue_type_template_id_5467128a_hoisted_25, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('SitesManager_SearchParametersNote')) + " " + Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('SitesManager_SearchParametersNote2')), 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_Field, { uicontrol: "text", name: "searchKeywordParametersGlobal", "var-type": "array", modelValue: _ctx.searchKeywordParametersGlobal, - "onUpdate:modelValue": _cache[4] || (_cache[4] = function ($event) { + "onUpdate:modelValue": _cache[5] || (_cache[5] = function ($event) { return _ctx.searchKeywordParametersGlobal = $event; }), title: _ctx.translate('SitesManager_SearchKeywordLabel'), @@ -1943,7 +1972,7 @@ function ManageGlobalSettingsvue_type_template_id_213acaec_render(_ctx, _cache, name: "searchCategoryParametersGlobal", "var-type": "array", modelValue: _ctx.searchCategoryParametersGlobal, - "onUpdate:modelValue": _cache[5] || (_cache[5] = function ($event) { + "onUpdate:modelValue": _cache[6] || (_cache[6] = function ($event) { return _ctx.searchCategoryParametersGlobal = $event; }), title: _ctx.translate('SitesManager_SearchCategoryLabel'), @@ -1958,14 +1987,14 @@ function ManageGlobalSettingsvue_type_template_id_213acaec_render(_ctx, _cache, "inline-help": '#timezoneHelp', disabled: _ctx.isLoading, modelValue: _ctx.defaultTimezone, - "onUpdate:modelValue": _cache[6] || (_cache[6] = function ($event) { + "onUpdate:modelValue": _cache[7] || (_cache[7] = function ($event) { return _ctx.defaultTimezone = $event; }) }, null, 8, ["options", "title", "introduction", "disabled", "modelValue"])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_Field, { uicontrol: "select", name: "defaultCurrency", modelValue: _ctx.defaultCurrency, - "onUpdate:modelValue": _cache[7] || (_cache[7] = function ($event) { + "onUpdate:modelValue": _cache[8] || (_cache[8] = function ($event) { return _ctx.defaultCurrency = $event; }), options: _ctx.currencies, @@ -1975,7 +2004,7 @@ function ManageGlobalSettingsvue_type_template_id_213acaec_render(_ctx, _cache, disabled: _ctx.isLoading }, null, 8, ["modelValue", "options", "title", "introduction", "inline-help", "disabled"])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_SaveButton, { saving: _ctx.isSaving, - onConfirm: _cache[8] || (_cache[8] = function ($event) { + onConfirm: _cache[9] || (_cache[9] = function ($event) { return _ctx.saveGlobalSettings(); }) }, null, 8, ["saving"])]; @@ -1983,7 +2012,7 @@ function ManageGlobalSettingsvue_type_template_id_213acaec_render(_ctx, _cache, _: 1 }, 8, ["content-title"]), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vShow"], _ctx.hasSuperUserAccess]])]); } -// CONCATENATED MODULE: ./plugins/SitesManager/vue/src/ManageGlobalSettings/ManageGlobalSettings.vue?vue&type=template&id=213acaec +// CONCATENATED MODULE: ./plugins/SitesManager/vue/src/ManageGlobalSettings/ManageGlobalSettings.vue?vue&type=template&id=5467128a // CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-typescript/node_modules/cache-loader/dist/cjs.js??ref--14-0!./node_modules/babel-loader/lib!./node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader??ref--14-2!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--0-1!./plugins/SitesManager/vue/src/ManageGlobalSettings/ManageGlobalSettings.vue?vue&type=script&lang=ts @@ -2016,6 +2045,7 @@ function ManageGlobalSettingsvue_type_template_id_213acaec_render(_ctx, _cache, excludedIpsGlobal: (settings.excludedIpsGlobal || '').split(','), excludedQueryParametersGlobal: (settings.excludedQueryParametersGlobal || '').split(','), excludedUserAgentsGlobal: (settings.excludedUserAgentsGlobal || '').split(','), + excludedReferrersGlobal: (settings.excludedReferrersGlobal || '').split(','), searchKeywordParametersGlobal: (settings.searchKeywordParametersGlobal || '').split(','), searchCategoryParametersGlobal: (settings.searchCategoryParametersGlobal || '').split(','), isSaving: false @@ -2036,6 +2066,7 @@ function ManageGlobalSettingsvue_type_template_id_213acaec_render(_ctx, _cache, _this.excludedIpsGlobal = (settings.excludedIpsGlobal || '').split(','); _this.excludedQueryParametersGlobal = (settings.excludedQueryParametersGlobal || '').split(','); _this.excludedUserAgentsGlobal = (settings.excludedUserAgentsGlobal || '').split(','); + _this.excludedReferrersGlobal = (settings.excludedReferrersGlobal || '').split(','); _this.searchKeywordParametersGlobal = (settings.searchKeywordParametersGlobal || '').split(','); _this.searchCategoryParametersGlobal = (settings.searchCategoryParametersGlobal || '').split(','); }); @@ -2057,6 +2088,7 @@ function ManageGlobalSettingsvue_type_template_id_213acaec_render(_ctx, _cache, excludedIps: this.excludedIpsGlobal.join(','), excludedQueryParameters: this.excludedQueryParametersGlobal.join(','), excludedUserAgents: this.excludedUserAgentsGlobal.join(','), + excludedReferrers: this.excludedReferrersGlobal.join(','), searchKeywordParameters: this.searchKeywordParametersGlobal.join(','), searchCategoryParameters: this.searchCategoryParametersGlobal.join(',') }).then(function () { @@ -2126,7 +2158,7 @@ function ManageGlobalSettingsvue_type_template_id_213acaec_render(_ctx, _cache, -ManageGlobalSettingsvue_type_script_lang_ts.render = ManageGlobalSettingsvue_type_template_id_213acaec_render +ManageGlobalSettingsvue_type_script_lang_ts.render = ManageGlobalSettingsvue_type_template_id_5467128a_render /* harmony default export */ var ManageGlobalSettings = (ManageGlobalSettingsvue_type_script_lang_ts); // CONCATENATED MODULE: ./plugins/SitesManager/vue/src/ManageGlobalSettings/ManageGlobalSettings.adapter.ts diff --git a/plugins/SitesManager/vue/dist/SitesManager.umd.min.js b/plugins/SitesManager/vue/dist/SitesManager.umd.min.js index 25fb5ddb6a..dea9ca88c0 100644 --- a/plugins/SitesManager/vue/dist/SitesManager.umd.min.js +++ b/plugins/SitesManager/vue/dist/SitesManager.umd.min.js @@ -1,45 +1,45 @@ -(function(e,t){"object"===typeof exports&&"object"===typeof module?module.exports=t(require("CoreHome"),require("vue"),require("CorePluginsAdmin")):"function"===typeof define&&define.amd?define(["CoreHome",,"CorePluginsAdmin"],t):"object"===typeof exports?exports["SitesManager"]=t(require("CoreHome"),require("vue"),require("CorePluginsAdmin")):e["SitesManager"]=t(e["CoreHome"],e["Vue"],e["CorePluginsAdmin"])})("undefined"!==typeof self?self:this,(function(e,t,n){return function(e){var t={};function n(a){if(t[a])return t[a].exports;var i=t[a]={i:a,l:!1,exports:{}};return e[a].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.d=function(e,t,a){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:a})},n.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var a=Object.create(null);if(n.r(a),Object.defineProperty(a,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)n.d(a,i,function(t){return e[t]}.bind(null,i));return a},n.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="plugins/SitesManager/vue/dist/",n(n.s="fae3")}({"19dc":function(t,n){t.exports=e},"8bbf":function(e,n){e.exports=t},a5a2:function(e,t){e.exports=n},fae3:function(e,t,n){"use strict";if(n.r(t),n.d(t,"SiteTypesStore",(function(){return h})),n.d(t,"CurrencyStore",(function(){return Xe})),n.d(t,"TimezoneStore",(function(){return Re})),n.d(t,"SitesManagement",(function(){return gt})),n.d(t,"ManageGlobalSettings",(function(){return Lt})),"undefined"!==typeof window){var a=window.document.currentScript,i=a&&a.src.match(/(.+\/)[^/]+\.js(\?.*)?$/);i&&(n.p=i[1])}var r=n("19dc"),l=n("8bbf");function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}function c(e,t,n){return t&&s(e.prototype,t),n&&s(e,n),e}function u(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e} +(function(e,t){"object"===typeof exports&&"object"===typeof module?module.exports=t(require("CoreHome"),require("vue"),require("CorePluginsAdmin")):"function"===typeof define&&define.amd?define(["CoreHome",,"CorePluginsAdmin"],t):"object"===typeof exports?exports["SitesManager"]=t(require("CoreHome"),require("vue"),require("CorePluginsAdmin")):e["SitesManager"]=t(e["CoreHome"],e["Vue"],e["CorePluginsAdmin"])})("undefined"!==typeof self?self:this,(function(e,t,n){return function(e){var t={};function n(a){if(t[a])return t[a].exports;var i=t[a]={i:a,l:!1,exports:{}};return e[a].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.d=function(e,t,a){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:a})},n.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var a=Object.create(null);if(n.r(a),Object.defineProperty(a,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)n.d(a,i,function(t){return e[t]}.bind(null,i));return a},n.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="plugins/SitesManager/vue/dist/",n(n.s="fae3")}({"19dc":function(t,n){t.exports=e},"8bbf":function(e,n){e.exports=t},a5a2:function(e,t){e.exports=n},fae3:function(e,t,n){"use strict";if(n.r(t),n.d(t,"SiteTypesStore",(function(){return p})),n.d(t,"CurrencyStore",(function(){return Xe})),n.d(t,"TimezoneStore",(function(){return We})),n.d(t,"SitesManagement",(function(){return gt})),n.d(t,"ManageGlobalSettings",(function(){return Rt})),"undefined"!==typeof window){var a=window.document.currentScript,i=a&&a.src.match(/(.+\/)[^/]+\.js(\?.*)?$/);i&&(n.p=i[1])}var r=n("19dc"),l=n("8bbf");function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}function c(e,t,n){return t&&s(e.prototype,t),n&&s(e,n),e}function u(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e} /*! * Matomo - free/libre analytics platform * * @link https://matomo.org * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later - */var d=window,b=d.$,m=function(){function e(){var t=this;o(this,e),u(this,"state",Object(l["reactive"])({isLoading:!1,typesById:{}})),u(this,"typesById",Object(l["computed"])((function(){return Object(l["readonly"])(t.state).typesById}))),u(this,"isLoading",Object(l["computed"])((function(){return Object(l["readonly"])(t.state).isLoading}))),u(this,"types",Object(l["computed"])((function(){return Object.values(t.typesById.value)}))),u(this,"response",void 0)}return c(e,[{key:"init",value:function(){return this.fetchAvailableTypes()}},{key:"fetchAvailableTypes",value:function(){var e=this;return this.response?Promise.resolve(this.response):(this.state.isLoading=!0,this.response=r["AjaxHelper"].fetch({method:"API.getAvailableMeasurableTypes",filter_limit:"-1"}).then((function(t){return t.forEach((function(t){e.state.typesById[t.id]=t})),e.types.value})).finally((function(){e.state.isLoading=!1})),this.response)}},{key:"getEditSiteIdParameter",value:function(){var e=r["MatomoUrl"].hashQuery.value.match(/editsiteid=([0-9]+)/);if(e){var t="1"===r["MatomoUrl"].urlParsed.value.showaddsite||"true"===r["MatomoUrl"].urlParsed.value.showaddsite,n=e[1];return n&&b.isNumeric(n)&&!t?n:void 0}}},{key:"removeEditSiteIdParameterFromHash",value:function(){var e=Object.assign({},r["MatomoUrl"].hashParsed.value);delete e.editsiteid,r["MatomoUrl"].updateHash(e)}}]),e}(),h=new m; + */var d=window,b=d.$,m=function(){function e(){var t=this;o(this,e),u(this,"state",Object(l["reactive"])({isLoading:!1,typesById:{}})),u(this,"typesById",Object(l["computed"])((function(){return Object(l["readonly"])(t.state).typesById}))),u(this,"isLoading",Object(l["computed"])((function(){return Object(l["readonly"])(t.state).isLoading}))),u(this,"types",Object(l["computed"])((function(){return Object.values(t.typesById.value)}))),u(this,"response",void 0)}return c(e,[{key:"init",value:function(){return this.fetchAvailableTypes()}},{key:"fetchAvailableTypes",value:function(){var e=this;return this.response?Promise.resolve(this.response):(this.state.isLoading=!0,this.response=r["AjaxHelper"].fetch({method:"API.getAvailableMeasurableTypes",filter_limit:"-1"}).then((function(t){return t.forEach((function(t){e.state.typesById[t.id]=t})),e.types.value})).finally((function(){e.state.isLoading=!1})),this.response)}},{key:"getEditSiteIdParameter",value:function(){var e=r["MatomoUrl"].hashQuery.value.match(/editsiteid=([0-9]+)/);if(e){var t="1"===r["MatomoUrl"].urlParsed.value.showaddsite||"true"===r["MatomoUrl"].urlParsed.value.showaddsite,n=e[1];return n&&b.isNumeric(n)&&!t?n:void 0}}},{key:"removeEditSiteIdParameterFromHash",value:function(){var e=Object.assign({},r["MatomoUrl"].hashParsed.value);delete e.editsiteid,r["MatomoUrl"].updateHash(e)}}]),e}(),p=new m; /*! * Matomo - free/libre analytics platform * * @link https://matomo.org * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later */ -function p(){return{get typesById(){return Object(r["clone"])(h.typesById.value)},fetchTypeById:function(e){var t=this;return h.fetchAvailableTypes().then((function(){return Object(r["cloneThenApply"])(t.typesById[e])}))},fetchAvailableTypes:function(){return h.fetchAvailableTypes().then((function(e){return Object(r["cloneThenApply"])(e)}))},hasMultipleTypes:function(){return h.fetchAvailableTypes().then((function(e){return e&&Object.keys(e).length>1}))},removeEditSiteIdParameterFromHash:h.removeEditSiteIdParameterFromHash.bind(h),getEditSiteIdParameter:h.getEditSiteIdParameter.bind(h)}}window.angular.module("piwikApp.service").factory("sitesManagerTypeModel",p);var g={class:"SitesManager",ref:"root"},f={class:"sites-manager-header"},S=["innerHTML"],v=Object(l["createElementVNode"])("br",null,null,-1),j=["innerHTML"],O={class:"loadingPiwik"},y=["alt"],E={class:"ui-confirm"},N={class:"center"},V=["title","onClick"],T={class:"ui-button-text"},x={class:"sitesManagerList"},M={key:0},w={class:"bottomButtonBar"};function A(e,t,n,a,i,r){var o=this,s=Object(l["resolveComponent"])("EnrichedHeadline"),c=Object(l["resolveComponent"])("ButtonBar"),u=Object(l["resolveComponent"])("MatomoDialog"),d=Object(l["resolveComponent"])("SiteFields"),b=Object(l["resolveDirective"])("content-intro");return Object(l["openBlock"])(),Object(l["createElementBlock"])("div",g,[Object(l["createElementVNode"])("div",f,[Object(l["withDirectives"])(Object(l["createElementVNode"])("div",null,[Object(l["withDirectives"])(Object(l["createElementVNode"])("h2",null,[Object(l["createVNode"])(s,{"help-url":"https://matomo.org/docs/manage-websites/","feature-name":e.translate("SitesManager_WebsitesManagement")},{default:Object(l["withCtx"])((function(){return[Object(l["createTextVNode"])(Object(l["toDisplayString"])(e.headlineText),1)]})),_:1},8,["help-url","feature-name"])],512),[[l["vShow"],e.availableTypes.length]]),Object(l["createElementVNode"])("p",null,[Object(l["createTextVNode"])(Object(l["toDisplayString"])(e.translate("SitesManager_MainDescription"))+" ",1),Object(l["createElementVNode"])("span",{innerHTML:e.$sanitize(e.mainDescription)},null,8,S),Object(l["withDirectives"])(Object(l["createElementVNode"])("span",null,[v,Object(l["createElementVNode"])("span",{innerHTML:e.$sanitize(e.superUserAccessMessage)},null,8,j)],512),[[l["vShow"],e.hasSuperUserAccess]])])],512),[[b]])]),Object(l["createElementVNode"])("div",null,[Object(l["createElementVNode"])("div",{class:Object(l["normalizeClass"])({hide_only:!e.isLoading})},[Object(l["createElementVNode"])("div",O,[Object(l["createElementVNode"])("img",{src:"plugins/Morpheus/images/loading-blue.gif",alt:e.translate("General_LoadingData")},null,8,y),Object(l["createTextVNode"])(" "+Object(l["toDisplayString"])(e.translate("General_LoadingData")),1)])],2)]),Object(l["createElementVNode"])("div",null,[Object(l["createVNode"])(c,{"site-is-being-edited":e.isSiteBeingEdited,"has-prev":e.hasPrev,hasNext:e.hasNext,"offset-start":e.offsetStart,"offset-end":e.offsetEnd,"total-number-of-sites":e.totalNumberOfSites,"is-loading":e.isLoading,"search-term":e.searchTerm,"is-searching":!!e.activeSearchTerm,"onUpdate:searchTerm":t[0]||(t[0]=function(t){return e.searchTerm=t}),onAdd:t[1]||(t[1]=function(t){return e.addNewEntity()}),onSearch:t[2]||(t[2]=function(t){return e.searchSites(t)}),onPrev:t[3]||(t[3]=function(t){return e.previousPage()}),onNext:t[4]||(t[4]=function(t){return e.nextPage()})},null,8,["site-is-being-edited","has-prev","hasNext","offset-start","offset-end","total-number-of-sites","is-loading","search-term","is-searching"])]),Object(l["createVNode"])(u,{modelValue:e.showAddSiteDialog,"onUpdate:modelValue":t[5]||(t[5]=function(t){return e.showAddSiteDialog=t})},{default:Object(l["withCtx"])((function(){return[Object(l["createElementVNode"])("div",E,[Object(l["createElementVNode"])("div",null,[Object(l["createElementVNode"])("h2",null,Object(l["toDisplayString"])(e.translate("SitesManager_ChooseMeasurableTypeHeadline")),1),Object(l["createElementVNode"])("div",N,[Object(l["createElementVNode"])("p",null,[(Object(l["openBlock"])(!0),Object(l["createElementBlock"])(l["Fragment"],null,Object(l["renderList"])(e.availableTypes,(function(t){return Object(l["openBlock"])(),Object(l["createElementBlock"])("button",{type:"button",key:t.id,title:t.description,class:"modal-close btn",style:{"margin-left":"20px"},onClick:function(n){e.addSite(t.id)},"aria-disabled":"false"},[Object(l["createElementVNode"])("span",T,Object(l["toDisplayString"])(t.name),1)],8,V)})),128))])])])])]})),_:1},8,["modelValue"]),Object(l["createElementVNode"])("div",x,[e.activeSearchTerm&&0===e.sites.length&&!e.isLoading?(Object(l["openBlock"])(),Object(l["createElementBlock"])("p",M,[Object(l["createTextVNode"])(Object(l["toDisplayString"])(e.translate("SitesManager_NotFound"))+" ",1),Object(l["createElementVNode"])("strong",null,Object(l["toDisplayString"])(e.activeSearchTerm),1)])):Object(l["createCommentVNode"])("",!0),(Object(l["openBlock"])(!0),Object(l["createElementBlock"])(l["Fragment"],null,Object(l["renderList"])(e.sites,(function(n,a){return Object(l["openBlock"])(),Object(l["createElementBlock"])("div",{key:n.idsite},[Object(l["createVNode"])(d,{site:n,"timezone-support-enabled":e.timezoneSupportEnabled,"utc-time":e.utcTime,"global-settings":e.globalSettings,onEditSite:t[6]||(t[6]=function(e){return o.isSiteBeingEdited=!0}),onCancelEditSite:t[7]||(t[7]=function(t){return e.afterCancelEdit(t)}),onDelete:t[8]||(t[8]=function(t){return e.afterDelete(t)}),onSave:function(t){return e.afterSave(t.site,t.settingValues,a,t.isNew)}},null,8,["site","timezone-support-enabled","utc-time","global-settings","onSave"])])})),128))]),Object(l["createElementVNode"])("div",w,[Object(l["createVNode"])(c,{"site-is-being-edited":e.isSiteBeingEdited,"has-prev":e.hasPrev,hasNext:e.hasNext,"offset-start":e.offsetStart,"offset-end":e.offsetEnd,"total-number-of-sites":e.totalNumberOfSites,"is-loading":e.isLoading,"search-term":e.searchTerm,"is-searching":!!e.activeSearchTerm,"onUpdate:searchTerm":t[9]||(t[9]=function(t){return e.searchTerm=t}),onAdd:t[10]||(t[10]=function(t){return e.addNewEntity()}),onSearch:t[11]||(t[11]=function(t){return e.searchSites(t)}),onPrev:t[12]||(t[12]=function(t){return e.previousPage()}),onNext:t[13]||(t[13]=function(t){return e.nextPage()})},null,8,["site-is-being-edited","has-prev","hasNext","offset-start","offset-end","total-number-of-sites","is-loading","search-term","is-searching"])])],512)}var C={class:"sitesButtonBar clearfix"},_={class:"search"},P=["value","placeholder","disabled"],D=["title"],k={class:"paging"},G=["disabled"],U={style:{cursor:"pointer"}},L={class:"counter"},z=["disabled"],I={style:{cursor:"pointer"},class:"pointer"};function B(e,t,n,a,i,r){return Object(l["openBlock"])(),Object(l["createElementBlock"])("div",C,[Object(l["withDirectives"])(Object(l["createElementVNode"])("a",{class:Object(l["normalizeClass"])(["btn addSite",{disabled:e.siteIsBeingEdited}]),onClick:t[0]||(t[0]=function(t){return e.addNewEntity()}),tabindex:"1"},Object(l["toDisplayString"])(e.availableTypes.length>1?e.translate("SitesManager_AddMeasurable"):e.translate("SitesManager_AddSite")),3),[[l["vShow"],e.hasSuperUserAccess&&e.availableTypes]]),Object(l["withDirectives"])(Object(l["createElementVNode"])("div",_,[Object(l["createElementVNode"])("input",{value:e.searchTerm,onKeydown:t[1]||(t[1]=function(t){return e.onKeydown(t)}),placeholder:e.translate("Actions_SubmenuSitesearch"),type:"text",disabled:e.siteIsBeingEdited},null,40,P),Object(l["createElementVNode"])("img",{onClick:t[2]||(t[2]=function(t){return e.searchSite()}),title:e.translate("General_ClickToSearch"),class:"search_ico",src:"plugins/Morpheus/images/search_ico.png"},null,8,D)],512),[[l["vShow"],e.hasPrev||e.hasNext||e.isSearching]]),Object(l["withDirectives"])(Object(l["createElementVNode"])("div",k,[Object(l["createElementVNode"])("a",{class:"btn prev",disabled:!(e.hasPrev&&!e.isLoading&&!e.siteIsBeingEdited)||void 0,onClick:t[3]||(t[3]=function(t){return e.previousPage()})},[Object(l["createElementVNode"])("span",U,"« "+Object(l["toDisplayString"])(e.translate("General_Previous")),1)],8,G),Object(l["withDirectives"])(Object(l["createElementVNode"])("span",L,[Object(l["createElementVNode"])("span",null,Object(l["toDisplayString"])(e.paginationText),1)],512),[[l["vShow"],e.hasPrev||e.hasNext]]),Object(l["createElementVNode"])("a",{class:"btn next",disabled:!(e.hasNext&&!e.isLoading&&!e.siteIsBeingEdited)||void 0,onClick:t[4]||(t[4]=function(t){return e.nextPage()})},[Object(l["createElementVNode"])("span",I,Object(l["toDisplayString"])(e.translate("General_Next"))+" »",1)],8,z)],512),[[l["vShow"],e.hasPrev||e.hasNext]])])}var H=Object(l["defineComponent"])({props:{siteIsBeingEdited:{type:Boolean,required:!0},hasPrev:{type:Boolean,required:!0},hasNext:{type:Boolean,required:!0},offsetStart:{type:Number,required:!0},offsetEnd:{type:Number,required:!0},totalNumberOfSites:{type:Number},isLoading:{type:Boolean,required:!0},searchTerm:{type:String,required:!0},isSearching:{type:Boolean,required:!0}},emits:["add","search","prev","next","update:searchTerm"],created:function(){h.init(),this.onKeydown=Object(r["debounce"])(this.onKeydown,50)},computed:{hasSuperUserAccess:function(){return r["Matomo"].hasSuperUserAccess},availableTypes:function(){return h.types.value},paginationText:function(){var e;return e=this.isSearching?Object(r["translate"])("General_PaginationWithoutTotal","".concat(this.offsetStart),"".concat(this.offsetEnd)):Object(r["translate"])("General_Pagination","".concat(this.offsetStart),"".concat(this.offsetEnd),null===this.totalNumberOfSites?"?":"".concat(this.totalNumberOfSites))," ".concat(e," ")}},methods:{addNewEntity:function(){this.$emit("add")},searchSite:function(){this.siteIsBeingEdited||this.$emit("search")},previousPage:function(){this.$emit("prev")},nextPage:function(){this.$emit("next")},onKeydown:function(e){var t=this;setTimeout((function(){"Enter"!==e.key?t.$emit("update:searchTerm",e.target.value):t.searchSiteOnEnter(e)}))},searchSiteOnEnter:function(e){e.preventDefault(),this.searchSite()}}});H.render=B;var F=H,K=["idsite","type"],W={class:"card-content"},R={key:0,class:"row"},Q={class:"col m3"},q={class:"title"},$={class:"title"},Y=["target","title","href"],J={class:"col m4"},X={class:"title"},Z={class:"title"},ee={class:"title"},te={class:"title"},ne={class:"col m4"},ae={class:"title"},ie=Object(l["createTextVNode"])(": "),re=["href"],le={key:0},oe={class:"title"},se={key:1},ce={class:"title"},ue={key:2},de={class:"title"},be={class:"col m1 text-right"},me=["title"],he=Object(l["createElementVNode"])("span",{class:"icon-edit"},null,-1),pe=[he],ge=["title"],fe=Object(l["createElementVNode"])("span",{class:"icon-delete"},null,-1),Se=[fe],ve={key:1},je={class:"form-group row"},Oe={class:"col s12 m6 input-field"},ye=["placeholder"],Ee=Object(l["createElementVNode"])("div",{class:"col s12 m6"},null,-1),Ne={id:"timezoneHelpText",class:"inline-help-node"},Ve={key:0},Te=Object(l["createElementVNode"])("br",null,null,-1),xe=Object(l["createElementVNode"])("br",null,null,-1),Me={class:"editingSiteFooter"},we=["value"],Ae={class:"ui-confirm"},Ce=["value"],_e=["value"];function Pe(e,t,n,a,i,r){var o,s,c,u=this,d=Object(l["resolveComponent"])("ActivityIndicator"),b=Object(l["resolveComponent"])("GroupedSettings"),m=Object(l["resolveComponent"])("Field"),h=Object(l["resolveComponent"])("MatomoDialog");return Object(l["openBlock"])(),Object(l["createElementBlock"])("div",{class:Object(l["normalizeClass"])(["site card hoverable",{editingSite:!!e.editMode}]),idsite:e.theSite.idsite,type:e.theSite.type,ref:"root"},[Object(l["createElementVNode"])("div",W,[e.editMode?Object(l["createCommentVNode"])("",!0):(Object(l["openBlock"])(),Object(l["createElementBlock"])("div",R,[Object(l["createElementVNode"])("div",Q,[Object(l["createElementVNode"])("h4",null,Object(l["toDisplayString"])(e.theSite.name),1),Object(l["createElementVNode"])("ul",null,[Object(l["createElementVNode"])("li",null,[Object(l["createElementVNode"])("span",q,Object(l["toDisplayString"])(e.translate("General_Id"))+":",1),Object(l["createTextVNode"])(" "+Object(l["toDisplayString"])(e.theSite.idsite),1)]),Object(l["withDirectives"])(Object(l["createElementVNode"])("li",null,[Object(l["createElementVNode"])("span",$,Object(l["toDisplayString"])(e.translate("SitesManager_Type"))+":",1),Object(l["createTextVNode"])(" "+Object(l["toDisplayString"])(e.currentType.name),1)],512),[[l["vShow"],e.availableTypes.length>1]]),Object(l["withDirectives"])(Object(l["createElementVNode"])("li",null,[Object(l["createElementVNode"])("a",{target:e.isInternalSetupUrl?"_self":"_blank",title:e.translate("SitesManager_ShowTrackingTag"),href:e.setupUrl},Object(l["toDisplayString"])(e.translate("SitesManager_ShowTrackingTag")),9,Y)],512),[[l["vShow"],e.theSite.idsite&&e.howToSetupUrl]])])]),Object(l["createElementVNode"])("div",J,[Object(l["createElementVNode"])("ul",null,[Object(l["createElementVNode"])("li",null,[Object(l["createElementVNode"])("span",X,Object(l["toDisplayString"])(e.translate("SitesManager_Timezone"))+":",1),Object(l["createTextVNode"])(" "+Object(l["toDisplayString"])(e.theSite.timezone_name),1)]),Object(l["createElementVNode"])("li",null,[Object(l["createElementVNode"])("span",Z,Object(l["toDisplayString"])(e.translate("SitesManager_Currency"))+":",1),Object(l["createTextVNode"])(" "+Object(l["toDisplayString"])(e.theSite.currency_name),1)]),Object(l["withDirectives"])(Object(l["createElementVNode"])("li",null,[Object(l["createElementVNode"])("span",ee,Object(l["toDisplayString"])(e.translate("Goals_Ecommerce"))+":",1),Object(l["createTextVNode"])(" "+Object(l["toDisplayString"])(e.translate("General_Yes")),1)],512),[[l["vShow"],1===e.theSite.ecommerce||"1"===e.theSite.ecommerce]]),Object(l["withDirectives"])(Object(l["createElementVNode"])("li",null,[Object(l["createElementVNode"])("span",te,Object(l["toDisplayString"])(e.translate("Actions_SubmenuSitesearch"))+":",1),Object(l["createTextVNode"])(" "+Object(l["toDisplayString"])(e.translate("General_Yes")),1)],512),[[l["vShow"],1===e.theSite.sitesearch||"1"===e.theSite.sitesearch]])])]),Object(l["createElementVNode"])("div",ne,[Object(l["createElementVNode"])("ul",null,[Object(l["createElementVNode"])("li",null,[Object(l["createElementVNode"])("span",ae,Object(l["toDisplayString"])(e.translate("SitesManager_Urls")),1),ie,(Object(l["openBlock"])(!0),Object(l["createElementBlock"])(l["Fragment"],null,Object(l["renderList"])(e.theSite.alias_urls,(function(t,n){return Object(l["openBlock"])(),Object(l["createElementBlock"])("span",{key:t},[Object(l["createElementVNode"])("a",{target:"_blank",rel:"noreferrer noopener",href:t},Object(l["toDisplayString"])(t)+Object(l["toDisplayString"])(n===e.theSite.alias_urls.length-1?"":", "),9,re)])})),128))]),null!==(o=e.theSite.excluded_ips)&&void 0!==o&&o.length?(Object(l["openBlock"])(),Object(l["createElementBlock"])("li",le,[Object(l["createElementVNode"])("span",oe,Object(l["toDisplayString"])(e.translate("SitesManager_ExcludedIps"))+":",1),Object(l["createTextVNode"])(" "+Object(l["toDisplayString"])(e.theSite.excluded_ips.split(/\s*,\s*/g).join(", ")),1)])):Object(l["createCommentVNode"])("",!0),null!==(s=e.theSite.excluded_parameters)&&void 0!==s&&s.length?(Object(l["openBlock"])(),Object(l["createElementBlock"])("li",se,[Object(l["createElementVNode"])("span",ce,Object(l["toDisplayString"])(e.translate("SitesManager_ExcludedParameters"))+":",1),Object(l["createTextVNode"])(" "+Object(l["toDisplayString"])(e.theSite.excluded_parameters.split(/\s*,\s*/g).join(", ")),1)])):Object(l["createCommentVNode"])("",!0),null!==(c=e.theSite.excluded_user_agents)&&void 0!==c&&c.length?(Object(l["openBlock"])(),Object(l["createElementBlock"])("li",ue,[Object(l["createElementVNode"])("span",de,Object(l["toDisplayString"])(e.translate("SitesManager_ExcludedUserAgents"))+":",1),Object(l["createTextVNode"])(" "+Object(l["toDisplayString"])(e.theSite.excluded_user_agents.split(/\s*,\s*/g).join(", ")),1)])):Object(l["createCommentVNode"])("",!0)])]),Object(l["createElementVNode"])("div",be,[Object(l["createElementVNode"])("ul",null,[Object(l["createElementVNode"])("li",null,[Object(l["createElementVNode"])("button",{class:"table-action",onClick:t[0]||(t[0]=function(t){return e.editSite()}),title:e.translate("General_Edit")},pe,8,me)]),Object(l["createElementVNode"])("li",null,[Object(l["withDirectives"])(Object(l["createElementVNode"])("button",{class:"table-action",onClick:t[1]||(t[1]=function(e){return u.showRemoveDialog=!0}),title:e.translate("General_Delete")},Se,8,ge),[[l["vShow"],e.theSite.idsite]])])])])])),e.editMode?(Object(l["openBlock"])(),Object(l["createElementBlock"])("div",ve,[Object(l["createElementVNode"])("div",je,[Object(l["createElementVNode"])("div",Oe,[Object(l["withDirectives"])(Object(l["createElementVNode"])("input",{type:"text","onUpdate:modelValue":t[2]||(t[2]=function(t){return e.theSite.name=t}),maxlength:"90",placeholder:e.translate("General_Name")},null,8,ye),[[l["vModelText"],e.theSite.name]]),Object(l["createElementVNode"])("label",null,Object(l["toDisplayString"])(e.translate("General_Name")),1)]),Ee]),Object(l["createVNode"])(d,{loading:e.isLoading},null,8,["loading"]),(Object(l["openBlock"])(!0),Object(l["createElementBlock"])(l["Fragment"],null,Object(l["renderList"])(e.measurableSettings,(function(t){return Object(l["openBlock"])(),Object(l["createElementBlock"])("div",{key:t.pluginName},[Object(l["createVNode"])(b,{"group-name":t.pluginName,settings:t.settings,"all-setting-values":e.settingValues,onChange:function(n){return e.settingValues["".concat(t.pluginName,".").concat(n.name)]=n.value}},null,8,["group-name","settings","all-setting-values","onChange"])])})),128)),Object(l["createVNode"])(m,{uicontrol:"select",name:"currency",modelValue:e.theSite.currency,"onUpdate:modelValue":t[3]||(t[3]=function(t){return e.theSite.currency=t}),title:e.translate("SitesManager_Currency"),"inline-help":e.translate("SitesManager_CurrencySymbolWillBeUsedForGoals"),options:e.currencies},null,8,["modelValue","title","inline-help","options"]),Object(l["createVNode"])(m,{uicontrol:"select",name:"timezone",modelValue:e.theSite.timezone,"onUpdate:modelValue":t[4]||(t[4]=function(t){return e.theSite.timezone=t}),title:e.translate("SitesManager_Timezone"),"inline-help":"#timezoneHelpText",options:e.timezones},null,8,["modelValue","title","options"]),Object(l["createElementVNode"])("div",Ne,[Object(l["createElementVNode"])("div",null,[e.timezoneSupportEnabled?Object(l["createCommentVNode"])("",!0):(Object(l["openBlock"])(),Object(l["createElementBlock"])("span",Ve,[Object(l["createTextVNode"])(Object(l["toDisplayString"])(e.translate("SitesManager_AdvancedTimezoneSupportNotFound"))+" ",1),Te])),Object(l["createTextVNode"])(" "+Object(l["toDisplayString"])(e.utcTimeIs)+" ",1),xe,Object(l["createTextVNode"])(" "+Object(l["toDisplayString"])(e.translate("SitesManager_ChangingYourTimezoneWillOnlyAffectDataForward")),1)])]),Object(l["createElementVNode"])("div",Me,[Object(l["withDirectives"])(Object(l["createElementVNode"])("input",{type:"submit",class:"btn",value:e.translate("General_Save"),onClick:t[5]||(t[5]=function(t){return e.saveSite()})},null,8,we),[[l["vShow"],!e.isLoading]]),Object(l["createElementVNode"])("button",{class:"btn btn-link",onClick:t[6]||(t[6]=function(t){return e.cancelEditSite(e.site)})},Object(l["toDisplayString"])(e.translate("General_Cancel","","")),1)])])):Object(l["createCommentVNode"])("",!0)]),Object(l["createVNode"])(h,{modelValue:e.showRemoveDialog,"onUpdate:modelValue":t[7]||(t[7]=function(t){return e.showRemoveDialog=t}),onYes:t[8]||(t[8]=function(t){return e.deleteSite()})},{default:Object(l["withCtx"])((function(){return[Object(l["createElementVNode"])("div",Ae,[Object(l["createElementVNode"])("h2",null,Object(l["toDisplayString"])(e.removeDialogTitle),1),Object(l["createElementVNode"])("p",null,Object(l["toDisplayString"])(e.translate("SitesManager_DeleteSiteExplanation")),1),Object(l["createElementVNode"])("input",{type:"button",value:e.translate("General_Yes"),role:"yes"},null,8,Ce),Object(l["createElementVNode"])("input",{type:"button",value:e.translate("General_No"),role:"no"},null,8,_e)])]})),_:1},8,["modelValue"])],10,K)}var De=n("a5a2");function ke(e,t){return Ie(e)||ze(e,t)||Ue(e,t)||Ge()}function Ge(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function Ue(e,t){if(e){if("string"===typeof e)return Le(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Le(e,t):void 0}}function Le(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=new Array(t);n<t;n++)a[n]=e[n];return a}function ze(e,t){var n=null==e?null:"undefined"!==typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,i,r=[],l=!0,o=!1;try{for(n=n.call(e);!(l=(a=n.next()).done);l=!0)if(r.push(a.value),t&&r.length===t)break}catch(s){o=!0,i=s}finally{try{l||null==n["return"]||n["return"]()}finally{if(o)throw i}}return r}}function Ie(e){if(Array.isArray(e))return e}function Be(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function He(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}function Fe(e,t,n){return t&&He(e.prototype,t),n&&He(e,n),e}function Ke(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e} +function h(){return{get typesById(){return Object(r["clone"])(p.typesById.value)},fetchTypeById:function(e){var t=this;return p.fetchAvailableTypes().then((function(){return Object(r["cloneThenApply"])(t.typesById[e])}))},fetchAvailableTypes:function(){return p.fetchAvailableTypes().then((function(e){return Object(r["cloneThenApply"])(e)}))},hasMultipleTypes:function(){return p.fetchAvailableTypes().then((function(e){return e&&Object.keys(e).length>1}))},removeEditSiteIdParameterFromHash:p.removeEditSiteIdParameterFromHash.bind(p),getEditSiteIdParameter:p.getEditSiteIdParameter.bind(p)}}window.angular.module("piwikApp.service").factory("sitesManagerTypeModel",h);var g={class:"SitesManager",ref:"root"},f={class:"sites-manager-header"},S=["innerHTML"],j=Object(l["createElementVNode"])("br",null,null,-1),O=["innerHTML"],v={class:"loadingPiwik"},y=["alt"],E={class:"ui-confirm"},N={class:"center"},V=["title","onClick"],x={class:"ui-button-text"},T={class:"sitesManagerList"},M={key:0},w={class:"bottomButtonBar"};function A(e,t,n,a,i,r){var o=this,s=Object(l["resolveComponent"])("EnrichedHeadline"),c=Object(l["resolveComponent"])("ButtonBar"),u=Object(l["resolveComponent"])("MatomoDialog"),d=Object(l["resolveComponent"])("SiteFields"),b=Object(l["resolveDirective"])("content-intro");return Object(l["openBlock"])(),Object(l["createElementBlock"])("div",g,[Object(l["createElementVNode"])("div",f,[Object(l["withDirectives"])(Object(l["createElementVNode"])("div",null,[Object(l["withDirectives"])(Object(l["createElementVNode"])("h2",null,[Object(l["createVNode"])(s,{"help-url":"https://matomo.org/docs/manage-websites/","feature-name":e.translate("SitesManager_WebsitesManagement")},{default:Object(l["withCtx"])((function(){return[Object(l["createTextVNode"])(Object(l["toDisplayString"])(e.headlineText),1)]})),_:1},8,["help-url","feature-name"])],512),[[l["vShow"],e.availableTypes.length]]),Object(l["createElementVNode"])("p",null,[Object(l["createTextVNode"])(Object(l["toDisplayString"])(e.translate("SitesManager_MainDescription"))+" ",1),Object(l["createElementVNode"])("span",{innerHTML:e.$sanitize(e.mainDescription)},null,8,S),Object(l["withDirectives"])(Object(l["createElementVNode"])("span",null,[j,Object(l["createElementVNode"])("span",{innerHTML:e.$sanitize(e.superUserAccessMessage)},null,8,O)],512),[[l["vShow"],e.hasSuperUserAccess]])])],512),[[b]])]),Object(l["createElementVNode"])("div",null,[Object(l["createElementVNode"])("div",{class:Object(l["normalizeClass"])({hide_only:!e.isLoading})},[Object(l["createElementVNode"])("div",v,[Object(l["createElementVNode"])("img",{src:"plugins/Morpheus/images/loading-blue.gif",alt:e.translate("General_LoadingData")},null,8,y),Object(l["createTextVNode"])(" "+Object(l["toDisplayString"])(e.translate("General_LoadingData")),1)])],2)]),Object(l["createElementVNode"])("div",null,[Object(l["createVNode"])(c,{"site-is-being-edited":e.isSiteBeingEdited,"has-prev":e.hasPrev,hasNext:e.hasNext,"offset-start":e.offsetStart,"offset-end":e.offsetEnd,"total-number-of-sites":e.totalNumberOfSites,"is-loading":e.isLoading,"search-term":e.searchTerm,"is-searching":!!e.activeSearchTerm,"onUpdate:searchTerm":t[0]||(t[0]=function(t){return e.searchTerm=t}),onAdd:t[1]||(t[1]=function(t){return e.addNewEntity()}),onSearch:t[2]||(t[2]=function(t){return e.searchSites(t)}),onPrev:t[3]||(t[3]=function(t){return e.previousPage()}),onNext:t[4]||(t[4]=function(t){return e.nextPage()})},null,8,["site-is-being-edited","has-prev","hasNext","offset-start","offset-end","total-number-of-sites","is-loading","search-term","is-searching"])]),Object(l["createVNode"])(u,{modelValue:e.showAddSiteDialog,"onUpdate:modelValue":t[5]||(t[5]=function(t){return e.showAddSiteDialog=t})},{default:Object(l["withCtx"])((function(){return[Object(l["createElementVNode"])("div",E,[Object(l["createElementVNode"])("div",null,[Object(l["createElementVNode"])("h2",null,Object(l["toDisplayString"])(e.translate("SitesManager_ChooseMeasurableTypeHeadline")),1),Object(l["createElementVNode"])("div",N,[Object(l["createElementVNode"])("p",null,[(Object(l["openBlock"])(!0),Object(l["createElementBlock"])(l["Fragment"],null,Object(l["renderList"])(e.availableTypes,(function(t){return Object(l["openBlock"])(),Object(l["createElementBlock"])("button",{type:"button",key:t.id,title:t.description,class:"modal-close btn",style:{"margin-left":"20px"},onClick:function(n){e.addSite(t.id)},"aria-disabled":"false"},[Object(l["createElementVNode"])("span",x,Object(l["toDisplayString"])(t.name),1)],8,V)})),128))])])])])]})),_:1},8,["modelValue"]),Object(l["createElementVNode"])("div",T,[e.activeSearchTerm&&0===e.sites.length&&!e.isLoading?(Object(l["openBlock"])(),Object(l["createElementBlock"])("p",M,[Object(l["createTextVNode"])(Object(l["toDisplayString"])(e.translate("SitesManager_NotFound"))+" ",1),Object(l["createElementVNode"])("strong",null,Object(l["toDisplayString"])(e.activeSearchTerm),1)])):Object(l["createCommentVNode"])("",!0),(Object(l["openBlock"])(!0),Object(l["createElementBlock"])(l["Fragment"],null,Object(l["renderList"])(e.sites,(function(n,a){return Object(l["openBlock"])(),Object(l["createElementBlock"])("div",{key:n.idsite},[Object(l["createVNode"])(d,{site:n,"timezone-support-enabled":e.timezoneSupportEnabled,"utc-time":e.utcTime,"global-settings":e.globalSettings,onEditSite:t[6]||(t[6]=function(e){return o.isSiteBeingEdited=!0}),onCancelEditSite:t[7]||(t[7]=function(t){return e.afterCancelEdit(t)}),onDelete:t[8]||(t[8]=function(t){return e.afterDelete(t)}),onSave:function(t){return e.afterSave(t.site,t.settingValues,a,t.isNew)}},null,8,["site","timezone-support-enabled","utc-time","global-settings","onSave"])])})),128))]),Object(l["createElementVNode"])("div",w,[Object(l["createVNode"])(c,{"site-is-being-edited":e.isSiteBeingEdited,"has-prev":e.hasPrev,hasNext:e.hasNext,"offset-start":e.offsetStart,"offset-end":e.offsetEnd,"total-number-of-sites":e.totalNumberOfSites,"is-loading":e.isLoading,"search-term":e.searchTerm,"is-searching":!!e.activeSearchTerm,"onUpdate:searchTerm":t[9]||(t[9]=function(t){return e.searchTerm=t}),onAdd:t[10]||(t[10]=function(t){return e.addNewEntity()}),onSearch:t[11]||(t[11]=function(t){return e.searchSites(t)}),onPrev:t[12]||(t[12]=function(t){return e.previousPage()}),onNext:t[13]||(t[13]=function(t){return e.nextPage()})},null,8,["site-is-being-edited","has-prev","hasNext","offset-start","offset-end","total-number-of-sites","is-loading","search-term","is-searching"])])],512)}var _={class:"sitesButtonBar clearfix"},C={class:"search"},G=["value","placeholder","disabled"],P=["title"],D={class:"paging"},k=["disabled"],U={style:{cursor:"pointer"}},L={class:"counter"},z=["disabled"],I={style:{cursor:"pointer"},class:"pointer"};function B(e,t,n,a,i,r){return Object(l["openBlock"])(),Object(l["createElementBlock"])("div",_,[Object(l["withDirectives"])(Object(l["createElementVNode"])("a",{class:Object(l["normalizeClass"])(["btn addSite",{disabled:e.siteIsBeingEdited}]),onClick:t[0]||(t[0]=function(t){return e.addNewEntity()}),tabindex:"1"},Object(l["toDisplayString"])(e.availableTypes.length>1?e.translate("SitesManager_AddMeasurable"):e.translate("SitesManager_AddSite")),3),[[l["vShow"],e.hasSuperUserAccess&&e.availableTypes]]),Object(l["withDirectives"])(Object(l["createElementVNode"])("div",C,[Object(l["createElementVNode"])("input",{value:e.searchTerm,onKeydown:t[1]||(t[1]=function(t){return e.onKeydown(t)}),placeholder:e.translate("Actions_SubmenuSitesearch"),type:"text",disabled:e.siteIsBeingEdited},null,40,G),Object(l["createElementVNode"])("img",{onClick:t[2]||(t[2]=function(t){return e.searchSite()}),title:e.translate("General_ClickToSearch"),class:"search_ico",src:"plugins/Morpheus/images/search_ico.png"},null,8,P)],512),[[l["vShow"],e.hasPrev||e.hasNext||e.isSearching]]),Object(l["withDirectives"])(Object(l["createElementVNode"])("div",D,[Object(l["createElementVNode"])("a",{class:"btn prev",disabled:!(e.hasPrev&&!e.isLoading&&!e.siteIsBeingEdited)||void 0,onClick:t[3]||(t[3]=function(t){return e.previousPage()})},[Object(l["createElementVNode"])("span",U,"« "+Object(l["toDisplayString"])(e.translate("General_Previous")),1)],8,k),Object(l["withDirectives"])(Object(l["createElementVNode"])("span",L,[Object(l["createElementVNode"])("span",null,Object(l["toDisplayString"])(e.paginationText),1)],512),[[l["vShow"],e.hasPrev||e.hasNext]]),Object(l["createElementVNode"])("a",{class:"btn next",disabled:!(e.hasNext&&!e.isLoading&&!e.siteIsBeingEdited)||void 0,onClick:t[4]||(t[4]=function(t){return e.nextPage()})},[Object(l["createElementVNode"])("span",I,Object(l["toDisplayString"])(e.translate("General_Next"))+" »",1)],8,z)],512),[[l["vShow"],e.hasPrev||e.hasNext]])])}var H=Object(l["defineComponent"])({props:{siteIsBeingEdited:{type:Boolean,required:!0},hasPrev:{type:Boolean,required:!0},hasNext:{type:Boolean,required:!0},offsetStart:{type:Number,required:!0},offsetEnd:{type:Number,required:!0},totalNumberOfSites:{type:Number},isLoading:{type:Boolean,required:!0},searchTerm:{type:String,required:!0},isSearching:{type:Boolean,required:!0}},emits:["add","search","prev","next","update:searchTerm"],created:function(){p.init(),this.onKeydown=Object(r["debounce"])(this.onKeydown,50)},computed:{hasSuperUserAccess:function(){return r["Matomo"].hasSuperUserAccess},availableTypes:function(){return p.types.value},paginationText:function(){var e;return e=this.isSearching?Object(r["translate"])("General_PaginationWithoutTotal","".concat(this.offsetStart),"".concat(this.offsetEnd)):Object(r["translate"])("General_Pagination","".concat(this.offsetStart),"".concat(this.offsetEnd),null===this.totalNumberOfSites?"?":"".concat(this.totalNumberOfSites))," ".concat(e," ")}},methods:{addNewEntity:function(){this.$emit("add")},searchSite:function(){this.siteIsBeingEdited||this.$emit("search")},previousPage:function(){this.$emit("prev")},nextPage:function(){this.$emit("next")},onKeydown:function(e){var t=this;setTimeout((function(){"Enter"!==e.key?t.$emit("update:searchTerm",e.target.value):t.searchSiteOnEnter(e)}))},searchSiteOnEnter:function(e){e.preventDefault(),this.searchSite()}}});H.render=B;var F=H,R=["idsite","type"],K={class:"card-content"},W={key:0,class:"row"},Q={class:"col m3"},q={class:"title"},$={class:"title"},Y=["target","title","href"],J={class:"col m4"},X={class:"title"},Z={class:"title"},ee={class:"title"},te={class:"title"},ne={class:"col m4"},ae={class:"title"},ie=Object(l["createTextVNode"])(": "),re=["href"],le={key:0},oe={class:"title"},se={key:1},ce={class:"title"},ue={key:2},de={class:"title"},be={class:"col m1 text-right"},me=["title"],pe=Object(l["createElementVNode"])("span",{class:"icon-edit"},null,-1),he=[pe],ge=["title"],fe=Object(l["createElementVNode"])("span",{class:"icon-delete"},null,-1),Se=[fe],je={key:1},Oe={class:"form-group row"},ve={class:"col s12 m6 input-field"},ye=["placeholder"],Ee=Object(l["createElementVNode"])("div",{class:"col s12 m6"},null,-1),Ne={id:"timezoneHelpText",class:"inline-help-node"},Ve={key:0},xe=Object(l["createElementVNode"])("br",null,null,-1),Te=Object(l["createElementVNode"])("br",null,null,-1),Me={class:"editingSiteFooter"},we=["value"],Ae={class:"ui-confirm"},_e=["value"],Ce=["value"];function Ge(e,t,n,a,i,r){var o,s,c,u=this,d=Object(l["resolveComponent"])("ActivityIndicator"),b=Object(l["resolveComponent"])("GroupedSettings"),m=Object(l["resolveComponent"])("Field"),p=Object(l["resolveComponent"])("MatomoDialog");return Object(l["openBlock"])(),Object(l["createElementBlock"])("div",{class:Object(l["normalizeClass"])(["site card hoverable",{editingSite:!!e.editMode}]),idsite:e.theSite.idsite,type:e.theSite.type,ref:"root"},[Object(l["createElementVNode"])("div",K,[e.editMode?Object(l["createCommentVNode"])("",!0):(Object(l["openBlock"])(),Object(l["createElementBlock"])("div",W,[Object(l["createElementVNode"])("div",Q,[Object(l["createElementVNode"])("h4",null,Object(l["toDisplayString"])(e.theSite.name),1),Object(l["createElementVNode"])("ul",null,[Object(l["createElementVNode"])("li",null,[Object(l["createElementVNode"])("span",q,Object(l["toDisplayString"])(e.translate("General_Id"))+":",1),Object(l["createTextVNode"])(" "+Object(l["toDisplayString"])(e.theSite.idsite),1)]),Object(l["withDirectives"])(Object(l["createElementVNode"])("li",null,[Object(l["createElementVNode"])("span",$,Object(l["toDisplayString"])(e.translate("SitesManager_Type"))+":",1),Object(l["createTextVNode"])(" "+Object(l["toDisplayString"])(e.currentType.name),1)],512),[[l["vShow"],e.availableTypes.length>1]]),Object(l["withDirectives"])(Object(l["createElementVNode"])("li",null,[Object(l["createElementVNode"])("a",{target:e.isInternalSetupUrl?"_self":"_blank",title:e.translate("SitesManager_ShowTrackingTag"),href:e.setupUrl},Object(l["toDisplayString"])(e.translate("SitesManager_ShowTrackingTag")),9,Y)],512),[[l["vShow"],e.theSite.idsite&&e.howToSetupUrl]])])]),Object(l["createElementVNode"])("div",J,[Object(l["createElementVNode"])("ul",null,[Object(l["createElementVNode"])("li",null,[Object(l["createElementVNode"])("span",X,Object(l["toDisplayString"])(e.translate("SitesManager_Timezone"))+":",1),Object(l["createTextVNode"])(" "+Object(l["toDisplayString"])(e.theSite.timezone_name),1)]),Object(l["createElementVNode"])("li",null,[Object(l["createElementVNode"])("span",Z,Object(l["toDisplayString"])(e.translate("SitesManager_Currency"))+":",1),Object(l["createTextVNode"])(" "+Object(l["toDisplayString"])(e.theSite.currency_name),1)]),Object(l["withDirectives"])(Object(l["createElementVNode"])("li",null,[Object(l["createElementVNode"])("span",ee,Object(l["toDisplayString"])(e.translate("Goals_Ecommerce"))+":",1),Object(l["createTextVNode"])(" "+Object(l["toDisplayString"])(e.translate("General_Yes")),1)],512),[[l["vShow"],1===e.theSite.ecommerce||"1"===e.theSite.ecommerce]]),Object(l["withDirectives"])(Object(l["createElementVNode"])("li",null,[Object(l["createElementVNode"])("span",te,Object(l["toDisplayString"])(e.translate("Actions_SubmenuSitesearch"))+":",1),Object(l["createTextVNode"])(" "+Object(l["toDisplayString"])(e.translate("General_Yes")),1)],512),[[l["vShow"],1===e.theSite.sitesearch||"1"===e.theSite.sitesearch]])])]),Object(l["createElementVNode"])("div",ne,[Object(l["createElementVNode"])("ul",null,[Object(l["createElementVNode"])("li",null,[Object(l["createElementVNode"])("span",ae,Object(l["toDisplayString"])(e.translate("SitesManager_Urls")),1),ie,(Object(l["openBlock"])(!0),Object(l["createElementBlock"])(l["Fragment"],null,Object(l["renderList"])(e.theSite.alias_urls,(function(t,n){return Object(l["openBlock"])(),Object(l["createElementBlock"])("span",{key:t},[Object(l["createElementVNode"])("a",{target:"_blank",rel:"noreferrer noopener",href:t},Object(l["toDisplayString"])(t)+Object(l["toDisplayString"])(n===e.theSite.alias_urls.length-1?"":", "),9,re)])})),128))]),null!==(o=e.theSite.excluded_ips)&&void 0!==o&&o.length?(Object(l["openBlock"])(),Object(l["createElementBlock"])("li",le,[Object(l["createElementVNode"])("span",oe,Object(l["toDisplayString"])(e.translate("SitesManager_ExcludedIps"))+":",1),Object(l["createTextVNode"])(" "+Object(l["toDisplayString"])(e.theSite.excluded_ips.split(/\s*,\s*/g).join(", ")),1)])):Object(l["createCommentVNode"])("",!0),null!==(s=e.theSite.excluded_parameters)&&void 0!==s&&s.length?(Object(l["openBlock"])(),Object(l["createElementBlock"])("li",se,[Object(l["createElementVNode"])("span",ce,Object(l["toDisplayString"])(e.translate("SitesManager_ExcludedParameters"))+":",1),Object(l["createTextVNode"])(" "+Object(l["toDisplayString"])(e.theSite.excluded_parameters.split(/\s*,\s*/g).join(", ")),1)])):Object(l["createCommentVNode"])("",!0),null!==(c=e.theSite.excluded_user_agents)&&void 0!==c&&c.length?(Object(l["openBlock"])(),Object(l["createElementBlock"])("li",ue,[Object(l["createElementVNode"])("span",de,Object(l["toDisplayString"])(e.translate("SitesManager_ExcludedUserAgents"))+":",1),Object(l["createTextVNode"])(" "+Object(l["toDisplayString"])(e.theSite.excluded_user_agents.split(/\s*,\s*/g).join(", ")),1)])):Object(l["createCommentVNode"])("",!0)])]),Object(l["createElementVNode"])("div",be,[Object(l["createElementVNode"])("ul",null,[Object(l["createElementVNode"])("li",null,[Object(l["createElementVNode"])("button",{class:"table-action",onClick:t[0]||(t[0]=function(t){return e.editSite()}),title:e.translate("General_Edit")},he,8,me)]),Object(l["createElementVNode"])("li",null,[Object(l["withDirectives"])(Object(l["createElementVNode"])("button",{class:"table-action",onClick:t[1]||(t[1]=function(e){return u.showRemoveDialog=!0}),title:e.translate("General_Delete")},Se,8,ge),[[l["vShow"],e.theSite.idsite]])])])])])),e.editMode?(Object(l["openBlock"])(),Object(l["createElementBlock"])("div",je,[Object(l["createElementVNode"])("div",Oe,[Object(l["createElementVNode"])("div",ve,[Object(l["withDirectives"])(Object(l["createElementVNode"])("input",{type:"text","onUpdate:modelValue":t[2]||(t[2]=function(t){return e.theSite.name=t}),maxlength:"90",placeholder:e.translate("General_Name")},null,8,ye),[[l["vModelText"],e.theSite.name]]),Object(l["createElementVNode"])("label",null,Object(l["toDisplayString"])(e.translate("General_Name")),1)]),Ee]),Object(l["createVNode"])(d,{loading:e.isLoading},null,8,["loading"]),(Object(l["openBlock"])(!0),Object(l["createElementBlock"])(l["Fragment"],null,Object(l["renderList"])(e.measurableSettings,(function(t){return Object(l["openBlock"])(),Object(l["createElementBlock"])("div",{key:t.pluginName},[Object(l["createVNode"])(b,{"group-name":t.pluginName,settings:t.settings,"all-setting-values":e.settingValues,onChange:function(n){return e.settingValues["".concat(t.pluginName,".").concat(n.name)]=n.value}},null,8,["group-name","settings","all-setting-values","onChange"])])})),128)),Object(l["createVNode"])(m,{uicontrol:"select",name:"currency",modelValue:e.theSite.currency,"onUpdate:modelValue":t[3]||(t[3]=function(t){return e.theSite.currency=t}),title:e.translate("SitesManager_Currency"),"inline-help":e.translate("SitesManager_CurrencySymbolWillBeUsedForGoals"),options:e.currencies},null,8,["modelValue","title","inline-help","options"]),Object(l["createVNode"])(m,{uicontrol:"select",name:"timezone",modelValue:e.theSite.timezone,"onUpdate:modelValue":t[4]||(t[4]=function(t){return e.theSite.timezone=t}),title:e.translate("SitesManager_Timezone"),"inline-help":"#timezoneHelpText",options:e.timezones},null,8,["modelValue","title","options"]),Object(l["createElementVNode"])("div",Ne,[Object(l["createElementVNode"])("div",null,[e.timezoneSupportEnabled?Object(l["createCommentVNode"])("",!0):(Object(l["openBlock"])(),Object(l["createElementBlock"])("span",Ve,[Object(l["createTextVNode"])(Object(l["toDisplayString"])(e.translate("SitesManager_AdvancedTimezoneSupportNotFound"))+" ",1),xe])),Object(l["createTextVNode"])(" "+Object(l["toDisplayString"])(e.utcTimeIs)+" ",1),Te,Object(l["createTextVNode"])(" "+Object(l["toDisplayString"])(e.translate("SitesManager_ChangingYourTimezoneWillOnlyAffectDataForward")),1)])]),Object(l["createElementVNode"])("div",Me,[Object(l["withDirectives"])(Object(l["createElementVNode"])("input",{type:"submit",class:"btn",value:e.translate("General_Save"),onClick:t[5]||(t[5]=function(t){return e.saveSite()})},null,8,we),[[l["vShow"],!e.isLoading]]),Object(l["createElementVNode"])("button",{class:"btn btn-link",onClick:t[6]||(t[6]=function(t){return e.cancelEditSite(e.site)})},Object(l["toDisplayString"])(e.translate("General_Cancel","","")),1)])])):Object(l["createCommentVNode"])("",!0)]),Object(l["createVNode"])(p,{modelValue:e.showRemoveDialog,"onUpdate:modelValue":t[7]||(t[7]=function(t){return e.showRemoveDialog=t}),onYes:t[8]||(t[8]=function(t){return e.deleteSite()})},{default:Object(l["withCtx"])((function(){return[Object(l["createElementVNode"])("div",Ae,[Object(l["createElementVNode"])("h2",null,Object(l["toDisplayString"])(e.removeDialogTitle),1),Object(l["createElementVNode"])("p",null,Object(l["toDisplayString"])(e.translate("SitesManager_DeleteSiteExplanation")),1),Object(l["createElementVNode"])("input",{type:"button",value:e.translate("General_Yes"),role:"yes"},null,8,_e),Object(l["createElementVNode"])("input",{type:"button",value:e.translate("General_No"),role:"no"},null,8,Ce)])]})),_:1},8,["modelValue"])],10,R)}var Pe=n("a5a2");function De(e,t){return Ie(e)||ze(e,t)||Ue(e,t)||ke()}function ke(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function Ue(e,t){if(e){if("string"===typeof e)return Le(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Le(e,t):void 0}}function Le(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=new Array(t);n<t;n++)a[n]=e[n];return a}function ze(e,t){var n=null==e?null:"undefined"!==typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,i,r=[],l=!0,o=!1;try{for(n=n.call(e);!(l=(a=n.next()).done);l=!0)if(r.push(a.value),t&&r.length===t)break}catch(s){o=!0,i=s}finally{try{l||null==n["return"]||n["return"]()}finally{if(o)throw i}}return r}}function Ie(e){if(Array.isArray(e))return e}function Be(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function He(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}function Fe(e,t,n){return t&&He(e.prototype,t),n&&He(e,n),e}function Re(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e} /*! * Matomo - free/libre analytics platform * * @link https://matomo.org * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later - */var We=function(){function e(){var t=this;Be(this,e),Ke(this,"privateState",Object(l["reactive"])({isLoading:!1,timezones:[],timezoneSupportEnabled:!1})),Ke(this,"state",Object(l["computed"])((function(){return Object(l["readonly"])(t.privateState)}))),Ke(this,"timezones",Object(l["computed"])((function(){return t.state.value.timezones}))),Ke(this,"timezoneSupportEnabled",Object(l["computed"])((function(){return t.state.value.timezoneSupportEnabled}))),Ke(this,"isLoading",Object(l["computed"])((function(){return t.state.value.isLoading}))),Ke(this,"initializePromise",null)}return Fe(e,[{key:"init",value:function(){var e=this;return this.initializePromise||(this.privateState.isLoading=!0,this.initializePromise=Promise.all([this.checkTimezoneSupportEnabled(),this.fetchTimezones()]).finally((function(){e.privateState.isLoading=!1}))),this.initializePromise}},{key:"fetchTimezones",value:function(){var e=this;return r["AjaxHelper"].fetch({method:"SitesManager.getTimezonesList"}).then((function(t){var n=[];Object.entries(t).forEach((function(e){var t=ke(e,2),a=t[0],i=t[1];Object.entries(i).forEach((function(e){var t=ke(e,2),i=t[0],r=t[1];n.push({group:a,label:i,code:r})}))})),e.privateState.timezones=n}))}},{key:"checkTimezoneSupportEnabled",value:function(){var e=this;return r["AjaxHelper"].fetch({method:"SitesManager.isTimezoneSupportEnabled"}).then((function(t){e.privateState.timezoneSupportEnabled=t.value}))}}]),e}(),Re=new We;function Qe(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function qe(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}function $e(e,t,n){return t&&qe(e.prototype,t),n&&qe(e,n),e}function Ye(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e} + */var Ke=function(){function e(){var t=this;Be(this,e),Re(this,"privateState",Object(l["reactive"])({isLoading:!1,timezones:[],timezoneSupportEnabled:!1})),Re(this,"state",Object(l["computed"])((function(){return Object(l["readonly"])(t.privateState)}))),Re(this,"timezones",Object(l["computed"])((function(){return t.state.value.timezones}))),Re(this,"timezoneSupportEnabled",Object(l["computed"])((function(){return t.state.value.timezoneSupportEnabled}))),Re(this,"isLoading",Object(l["computed"])((function(){return t.state.value.isLoading}))),Re(this,"initializePromise",null)}return Fe(e,[{key:"init",value:function(){var e=this;return this.initializePromise||(this.privateState.isLoading=!0,this.initializePromise=Promise.all([this.checkTimezoneSupportEnabled(),this.fetchTimezones()]).finally((function(){e.privateState.isLoading=!1}))),this.initializePromise}},{key:"fetchTimezones",value:function(){var e=this;return r["AjaxHelper"].fetch({method:"SitesManager.getTimezonesList"}).then((function(t){var n=[];Object.entries(t).forEach((function(e){var t=De(e,2),a=t[0],i=t[1];Object.entries(i).forEach((function(e){var t=De(e,2),i=t[0],r=t[1];n.push({group:a,label:i,code:r})}))})),e.privateState.timezones=n}))}},{key:"checkTimezoneSupportEnabled",value:function(){var e=this;return r["AjaxHelper"].fetch({method:"SitesManager.isTimezoneSupportEnabled"}).then((function(t){e.privateState.timezoneSupportEnabled=t.value}))}}]),e}(),We=new Ke;function Qe(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function qe(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}function $e(e,t,n){return t&&qe(e.prototype,t),n&&qe(e,n),e}function Ye(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e} /*! * Matomo - free/libre analytics platform * * @link https://matomo.org * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later - */var Je=function(){function e(){var t=this;Qe(this,e),Ye(this,"privateState",Object(l["reactive"])({isLoading:!1,currencies:{}})),Ye(this,"currencies",Object(l["computed"])((function(){return Object(l["readonly"])(t.privateState).currencies}))),Ye(this,"isLoading",Object(l["computed"])((function(){return Object(l["readonly"])(t.privateState).isLoading}))),Ye(this,"initializePromise",null)}return $e(e,[{key:"init",value:function(){return this.initializePromise||(this.initializePromise=this.fetchCurrencies()),this.initializePromise}},{key:"fetchCurrencies",value:function(){var e=this;return this.privateState.isLoading=!0,r["AjaxHelper"].fetch({method:"SitesManager.getCurrencyList"}).then((function(t){e.privateState.currencies=t})).finally((function(){e.privateState.isLoading=!1}))}}]),e}(),Xe=new Je;function Ze(e,t){return it(e)||at(e,t)||tt(e,t)||et()}function et(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function tt(e,t){if(e){if("string"===typeof e)return nt(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?nt(e,t):void 0}}function nt(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=new Array(t);n<t;n++)a[n]=e[n];return a}function at(e,t){var n=null==e?null:"undefined"!==typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,i,r=[],l=!0,o=!1;try{for(n=n.call(e);!(l=(a=n.next()).done);l=!0)if(r.push(a.value),t&&r.length===t)break}catch(s){o=!0,i=s}finally{try{l||null==n["return"]||n["return"]()}finally{if(o)throw i}}return r}}function it(e){if(Array.isArray(e))return e}var rt=Object(l["computed"])((function(){return Re.timezones.value.map((function(e){var t=e.group,n=e.label,a=e.code;return{group:t,key:n,value:a}}))}));function lt(e){return"undefined"===typeof e.idsite}var ot=Object(l["defineComponent"])({props:{site:{type:Object,required:!0},timezoneSupportEnabled:{type:Boolean},utcTime:{type:Date,required:!0},globalSettings:{type:Object,required:!0}},data:function(){return{isLoading:!1,editMode:!1,theSite:Object.assign({},this.site),measurableSettings:[],settingValues:{},showRemoveDialog:!1}},components:{MatomoDialog:r["MatomoDialog"],Field:De["Field"],GroupedSettings:De["GroupedSettings"],ActivityIndicator:r["ActivityIndicator"]},emits:["delete","editSite","cancelEditSite","save"],created:function(){Xe.init(),Re.init(),h.init(),this.onSiteChanged()},watch:{site:function(){this.onSiteChanged()},measurableSettings:function(e){if(e.length){var t={};e.forEach((function(e){e.settings.forEach((function(n){t["".concat(e.pluginName,".").concat(n.name)]=n.value}))})),this.settingValues=t}}},methods:{onSiteChanged:function(){var e=this.site;this.theSite=Object.assign({},e);var t=lt(e);if(t){var n=this.globalSettings;this.theSite.timezone=n.defaultTimezone,this.theSite.currency=n.defaultCurrency}var a=h.getEditSiteIdParameter();(t||a&&"".concat(e.idsite)===a)&&this.editSite()},editSite:function(){var e=this;if(this.editMode=!0,this.$emit("editSite",{idSite:this.theSite.idsite}),this.measurableSettings=[],lt(this.theSite)){if(!this.currentType)return;this.measurableSettings=this.currentType.settings||[]}else this.isLoading=!0,r["AjaxHelper"].fetch({method:"SitesManager.getSiteSettings",idSite:this.theSite.idsite}).then((function(t){e.measurableSettings=t})).finally((function(){e.isLoading=!1}))},saveSite:function(){var e=this,t={siteName:this.theSite.name,timezone:this.theSite.timezone,currency:this.theSite.currency,type:this.theSite.type,settingValues:{}},n=lt(this.theSite),a="SitesManager.addSite";n||(a="SitesManager.updateSite",t.idSite=this.theSite.idsite),Object.entries(this.settingValues).forEach((function(e){var n=Ze(e,2),a=n[0],i=n[1],r=a.split("."),l=Ze(r,2),o=l[0],s=l[1],c=t.settingValues;c[o]||(c[o]=[]);var u=i;!1===i?u="0":!0===i?u="1":Array.isArray(i)&&(u=i.filter((function(e){return!!e}))),c[o].push({name:s,value:u})})),r["AjaxHelper"].post({method:a},t).then((function(a){e.editMode=!1,!e.theSite.idsite&&a&&a.value&&(e.theSite.idsite="".concat(a.value));var i=Re.timezones.value.find((function(t){return t.code===e.theSite.timezone}));e.theSite.timezone_name=(null===i||void 0===i?void 0:i.label)||e.theSite.timezone,e.theSite.currency&&(e.theSite.currency_name=Xe.currencies.value[e.theSite.currency]);var l=r["NotificationsStore"].show({message:n?Object(r["translate"])("SitesManager_WebsiteCreated"):Object(r["translate"])("SitesManager_WebsiteUpdated"),context:"success",id:"websitecreated",type:"transient"});r["NotificationsStore"].scrollToNotification(l),h.removeEditSiteIdParameterFromHash(),e.$emit("save",{site:e.theSite,settingValues:t.settingValues,isNew:n})}))},cancelEditSite:function(e){this.editMode=!1,h.removeEditSiteIdParameterFromHash(),this.$emit("cancelEditSite",{site:e,element:this.$refs.root})},deleteSite:function(){var e=this;r["AjaxHelper"].fetch({idSite:this.theSite.idsite,module:"API",format:"json",method:"SitesManager.deleteSite"}).then((function(){e.$emit("delete",e.theSite)}))}},computed:{availableTypes:function(){return h.types.value},setupUrl:function(){var e=this.theSite,t="",n="";return this.isInternalSetupUrl&&(t=r["MatomoUrl"].stringify({idSite:e.idsite,period:r["MatomoUrl"].parsed.value.period,date:r["MatomoUrl"].parsed.value.date,updated:"false"}),n=-1===this.howToSetupUrl.indexOf("?")?"?":"&"),"".concat(this.howToSetupUrl).concat(n).concat(t)},utcTimeIs:function(){var e=this.utcTime,t=function(e){return e.toString().padStart(2,"0")},n=t(e.getHours()),a=t(e.getMinutes()),i=t(e.getSeconds()),l="".concat(Object(r["format"])(this.utcTime)," ").concat(n,":").concat(a,":").concat(i);return Object(r["translate"])("SitesManager_UTCTimeIs",l)},timezones:function(){return rt.value},currencies:function(){return Xe.currencies.value},currentType:function(){var e=this.site,t=h.typesById.value[e.type];return t||{name:e.type}},howToSetupUrl:function(){var e=this.currentType;if(e)return e.howToSetupUrl},isInternalSetupUrl:function(){var e=this.howToSetupUrl;return!!e&&"?"==="".concat(e).substring(0,1)},removeDialogTitle:function(){return Object(r["translate"])("SitesManager_DeleteConfirm",'"'.concat(this.theSite.name,'" (idSite = ').concat(this.theSite.idsite,")"))}}});ot.render=Pe;var st=ot;function ct(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function ut(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}function dt(e,t,n){return t&&ut(e.prototype,t),n&&ut(e,n),e}function bt(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e} + */var Je=function(){function e(){var t=this;Qe(this,e),Ye(this,"privateState",Object(l["reactive"])({isLoading:!1,currencies:{}})),Ye(this,"currencies",Object(l["computed"])((function(){return Object(l["readonly"])(t.privateState).currencies}))),Ye(this,"isLoading",Object(l["computed"])((function(){return Object(l["readonly"])(t.privateState).isLoading}))),Ye(this,"initializePromise",null)}return $e(e,[{key:"init",value:function(){return this.initializePromise||(this.initializePromise=this.fetchCurrencies()),this.initializePromise}},{key:"fetchCurrencies",value:function(){var e=this;return this.privateState.isLoading=!0,r["AjaxHelper"].fetch({method:"SitesManager.getCurrencyList"}).then((function(t){e.privateState.currencies=t})).finally((function(){e.privateState.isLoading=!1}))}}]),e}(),Xe=new Je;function Ze(e,t){return it(e)||at(e,t)||tt(e,t)||et()}function et(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function tt(e,t){if(e){if("string"===typeof e)return nt(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?nt(e,t):void 0}}function nt(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=new Array(t);n<t;n++)a[n]=e[n];return a}function at(e,t){var n=null==e?null:"undefined"!==typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,i,r=[],l=!0,o=!1;try{for(n=n.call(e);!(l=(a=n.next()).done);l=!0)if(r.push(a.value),t&&r.length===t)break}catch(s){o=!0,i=s}finally{try{l||null==n["return"]||n["return"]()}finally{if(o)throw i}}return r}}function it(e){if(Array.isArray(e))return e}var rt=Object(l["computed"])((function(){return We.timezones.value.map((function(e){var t=e.group,n=e.label,a=e.code;return{group:t,key:n,value:a}}))}));function lt(e){return"undefined"===typeof e.idsite}var ot=Object(l["defineComponent"])({props:{site:{type:Object,required:!0},timezoneSupportEnabled:{type:Boolean},utcTime:{type:Date,required:!0},globalSettings:{type:Object,required:!0}},data:function(){return{isLoading:!1,editMode:!1,theSite:Object.assign({},this.site),measurableSettings:[],settingValues:{},showRemoveDialog:!1}},components:{MatomoDialog:r["MatomoDialog"],Field:Pe["Field"],GroupedSettings:Pe["GroupedSettings"],ActivityIndicator:r["ActivityIndicator"]},emits:["delete","editSite","cancelEditSite","save"],created:function(){Xe.init(),We.init(),p.init(),this.onSiteChanged()},watch:{site:function(){this.onSiteChanged()},measurableSettings:function(e){if(e.length){var t={};e.forEach((function(e){e.settings.forEach((function(n){t["".concat(e.pluginName,".").concat(n.name)]=n.value}))})),this.settingValues=t}}},methods:{onSiteChanged:function(){var e=this.site;this.theSite=Object.assign({},e);var t=lt(e);if(t){var n=this.globalSettings;this.theSite.timezone=n.defaultTimezone,this.theSite.currency=n.defaultCurrency}var a=p.getEditSiteIdParameter();(t||a&&"".concat(e.idsite)===a)&&this.editSite()},editSite:function(){var e=this;if(this.editMode=!0,this.$emit("editSite",{idSite:this.theSite.idsite}),this.measurableSettings=[],lt(this.theSite)){if(!this.currentType)return;this.measurableSettings=this.currentType.settings||[]}else this.isLoading=!0,r["AjaxHelper"].fetch({method:"SitesManager.getSiteSettings",idSite:this.theSite.idsite}).then((function(t){e.measurableSettings=t})).finally((function(){e.isLoading=!1}))},saveSite:function(){var e=this,t={siteName:this.theSite.name,timezone:this.theSite.timezone,currency:this.theSite.currency,type:this.theSite.type,settingValues:{}},n=lt(this.theSite),a="SitesManager.addSite";n||(a="SitesManager.updateSite",t.idSite=this.theSite.idsite),Object.entries(this.settingValues).forEach((function(e){var n=Ze(e,2),a=n[0],i=n[1],r=a.split("."),l=Ze(r,2),o=l[0],s=l[1],c=t.settingValues;c[o]||(c[o]=[]);var u=i;!1===i?u="0":!0===i?u="1":Array.isArray(i)&&(u=i.filter((function(e){return!!e}))),c[o].push({name:s,value:u})})),r["AjaxHelper"].post({method:a},t).then((function(a){e.editMode=!1,!e.theSite.idsite&&a&&a.value&&(e.theSite.idsite="".concat(a.value));var i=We.timezones.value.find((function(t){return t.code===e.theSite.timezone}));e.theSite.timezone_name=(null===i||void 0===i?void 0:i.label)||e.theSite.timezone,e.theSite.currency&&(e.theSite.currency_name=Xe.currencies.value[e.theSite.currency]);var l=r["NotificationsStore"].show({message:n?Object(r["translate"])("SitesManager_WebsiteCreated"):Object(r["translate"])("SitesManager_WebsiteUpdated"),context:"success",id:"websitecreated",type:"transient"});r["NotificationsStore"].scrollToNotification(l),p.removeEditSiteIdParameterFromHash(),e.$emit("save",{site:e.theSite,settingValues:t.settingValues,isNew:n})}))},cancelEditSite:function(e){this.editMode=!1,p.removeEditSiteIdParameterFromHash(),this.$emit("cancelEditSite",{site:e,element:this.$refs.root})},deleteSite:function(){var e=this;r["AjaxHelper"].fetch({idSite:this.theSite.idsite,module:"API",format:"json",method:"SitesManager.deleteSite"}).then((function(){e.$emit("delete",e.theSite)}))}},computed:{availableTypes:function(){return p.types.value},setupUrl:function(){var e=this.theSite,t="",n="";return this.isInternalSetupUrl&&(t=r["MatomoUrl"].stringify({idSite:e.idsite,period:r["MatomoUrl"].parsed.value.period,date:r["MatomoUrl"].parsed.value.date,updated:"false"}),n=-1===this.howToSetupUrl.indexOf("?")?"?":"&"),"".concat(this.howToSetupUrl).concat(n).concat(t)},utcTimeIs:function(){var e=this.utcTime,t=function(e){return e.toString().padStart(2,"0")},n=t(e.getHours()),a=t(e.getMinutes()),i=t(e.getSeconds()),l="".concat(Object(r["format"])(this.utcTime)," ").concat(n,":").concat(a,":").concat(i);return Object(r["translate"])("SitesManager_UTCTimeIs",l)},timezones:function(){return rt.value},currencies:function(){return Xe.currencies.value},currentType:function(){var e=this.site,t=p.typesById.value[e.type];return t||{name:e.type}},howToSetupUrl:function(){var e=this.currentType;if(e)return e.howToSetupUrl},isInternalSetupUrl:function(){var e=this.howToSetupUrl;return!!e&&"?"==="".concat(e).substring(0,1)},removeDialogTitle:function(){return Object(r["translate"])("SitesManager_DeleteConfirm",'"'.concat(this.theSite.name,'" (idSite = ').concat(this.theSite.idsite,")"))}}});ot.render=Ge;var st=ot;function ct(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function ut(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}function dt(e,t,n){return t&&ut(e.prototype,t),n&&ut(e,n),e}function bt(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e} /*! * Matomo - free/libre analytics platform * * @link https://matomo.org * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later - */var mt=function(){function e(){var t=this;ct(this,e),bt(this,"privateState",Object(l["reactive"])({isLoading:!1,globalSettings:{keepURLFragmentsGlobal:!1,defaultCurrency:"",defaultTimezone:"",excludedIpsGlobal:"",excludedQueryParametersGlobal:"",excludedUserAgentsGlobal:"",searchKeywordParametersGlobal:"",searchCategoryParametersGlobal:""}})),bt(this,"isLoading",Object(l["computed"])((function(){return Object(l["readonly"])(t.privateState).isLoading}))),bt(this,"globalSettings",Object(l["computed"])((function(){return Object(l["readonly"])(t.privateState).globalSettings})))}return dt(e,[{key:"init",value:function(){return this.fetchGlobalSettings()}},{key:"saveGlobalSettings",value:function(e){var t=this;return this.privateState.isLoading=!0,r["AjaxHelper"].post({module:"SitesManager",format:"json",action:"setGlobalSettings"},e,{withTokenInUrl:!0}).finally((function(){t.privateState.isLoading=!1}))}},{key:"fetchGlobalSettings",value:function(){var e=this;this.privateState.isLoading=!0,r["AjaxHelper"].fetch({module:"SitesManager",action:"getGlobalSettings"}).then((function(t){e.privateState.globalSettings=Object.assign(Object.assign({},t),{},{excludedIpsGlobal:t.excludedIpsGlobal||"",excludedQueryParametersGlobal:t.excludedQueryParametersGlobal||"",excludedUserAgentsGlobal:t.excludedUserAgentsGlobal||"",searchKeywordParametersGlobal:t.searchKeywordParametersGlobal||"",searchCategoryParametersGlobal:t.searchCategoryParametersGlobal||""})})).finally((function(){e.privateState.isLoading=!1}))}}]),e}(),ht=new mt,pt=Object(l["defineComponent"])({props:{dummy:String},components:{MatomoDialog:r["MatomoDialog"],ButtonBar:F,SiteFields:st,EnrichedHeadline:r["EnrichedHeadline"]},directives:{ContentIntro:r["ContentIntro"]},data:function(){var e=new Date,t=new Date(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate(),e.getUTCHours(),e.getUTCMinutes(),e.getUTCSeconds());return{pageSize:10,currentPage:0,showAddSiteDialog:!1,searchTerm:"",activeSearchTerm:"",fetchedSites:[],isLoadingInitialEntities:!1,utcTime:t,totalNumberOfSites:null,isSiteBeingEdited:!1,fetchLimitedSitesAbortController:null}},created:function(){var e=this;Re.init(),h.init(),ht.init(),this.isLoadingInitialEntities=!0,Promise.all([h.fetchAvailableTypes(),this.fetchLimitedSitesWithAdminAccess(),this.getTotalNumberOfSites()]).then((function(){e.triggerAddSiteIfRequested()})).finally((function(){e.isLoadingInitialEntities=!1})),Object(l["watch"])((function(){return r["MatomoUrl"].hashQuery.value}),(function(){e.checkGlobalSettingsHash()}))},computed:{sites:function(){var e=this.fetchedSites.filter((function(e){return!e.idsite})).length;return this.fetchedSites.slice(0,this.pageSize+e)},isLoading:function(){return!!this.fetchLimitedSitesAbortController||this.isLoadingInitialEntities||null===this.totalNumberOfSites||h.isLoading.value||Re.isLoading.value||ht.isLoading.value},availableTypes:function(){return h.types.value},timezoneSupportEnabled:function(){return Re.timezoneSupportEnabled.value},globalSettings:function(){return ht.globalSettings.value},headlineText:function(){return Object(r["translate"])("SitesManager_XManagement",this.availableTypes.length>1?Object(r["translate"])("General_Measurables"):Object(r["translate"])("SitesManager_Sites"))},mainDescription:function(){return Object(r["translate"])("SitesManager_YouCurrentlyHaveAccessToNWebsites","<strong>".concat(this.totalNumberOfSites,"</strong>"))},hasSuperUserAccess:function(){return r["Matomo"].hasSuperUserAccess},superUserAccessMessage:function(){return Object(r["translate"])("SitesManager_SuperUserAccessCan","<a href='#globalSettings'>","</a>")},hasPrev:function(){return this.currentPage>=1},hasNext:function(){return this.fetchedSites.filter((function(e){return!!e.idsite})).length>=this.pageSize+1},offsetStart:function(){return this.currentPage*this.pageSize+1},offsetEnd:function(){return this.offsetStart+this.sites.filter((function(e){return!!e.idsite})).length-1}},methods:{checkGlobalSettingsHash:function(){var e=r["MatomoUrl"].hashQuery.value;!r["Matomo"].hasSuperUserAccess||"globalSettings"!==e&&"/globalSettings"!==e||r["MatomoUrl"].updateLocation(Object.assign(Object.assign({},r["MatomoUrl"].urlParsed.value),{},{action:"globalSettings"}))},addNewEntity:function(){this.availableTypes.length>1?this.showAddSiteDialog=!0:1===this.availableTypes.length&&this.addSite(this.availableTypes[0].id)},addSite:function(e){var t=e,n={isAllowed:!0,measurableType:t};r["Matomo"].postEvent("SitesManager.initAddSite",n),n&&!n.isAllowed||(t||(t="website"),this.fetchedSites.unshift({type:t}),this.isSiteBeingEdited=!0)},afterCancelEdit:function(e){var t=e.site,n=e.element;this.isSiteBeingEdited=!1,t.idsite?n.scrollIntoView():this.fetchedSites=this.fetchedSites.filter((function(e){return!!e.idsite}))},fetchLimitedSitesWithAdminAccess:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";this.fetchLimitedSitesAbortController&&this.fetchLimitedSitesAbortController.abort(),this.fetchLimitedSitesAbortController=new AbortController;var n=this.pageSize+1,a=this.currentPage*this.pageSize,i={method:"SitesManager.getSitesWithAdminAccess",fetchAliasUrls:1,limit:n+a,filter_offset:a,filter_limit:n};return t&&(i.pattern=t),r["AjaxHelper"].fetch(i).then((function(t){e.fetchedSites=t||[]})).then((function(n){return e.activeSearchTerm=t,n})).finally((function(){e.fetchLimitedSitesAbortController=null}))},getTotalNumberOfSites:function(){var e=this;return r["AjaxHelper"].fetch({method:"SitesManager.getSitesIdWithAdminAccess",filter_limit:"-1"}).then((function(t){e.totalNumberOfSites=t.length}))},triggerAddSiteIfRequested:function(){var e=h.getEditSiteIdParameter(),t=r["MatomoUrl"].urlParsed.value.showaddsite;"1"===t?this.addNewEntity():e&&(this.searchTerm=e,this.fetchLimitedSitesWithAdminAccess(this.searchTerm))},previousPage:function(){this.currentPage=Math.max(0,this.currentPage-1),this.fetchLimitedSitesWithAdminAccess(this.activeSearchTerm)},nextPage:function(){this.currentPage=Math.max(0,this.currentPage+1),this.fetchLimitedSitesWithAdminAccess(this.activeSearchTerm)},searchSites:function(){this.currentPage=0,this.fetchLimitedSitesWithAdminAccess(this.searchTerm)},afterDelete:function(e){var t={showaddsite:0};if(r["MatomoUrl"].urlParsed.value.idSite==="".concat(e.idsite)){var n=this.sites.find((function(t){return t.idsite!==e.idsite}));n&&(t=Object.assign(Object.assign({},t),{},{idSite:n.idsite}))}r["Matomo"].helper.redirect(t)},afterSave:function(e,t,n,a){var i=["excluded_ips","excluded_parameters","excluded_user_agents","sitesearch_keyword_parameters","sitesearch_category_parameters"],r=Object.assign({},e);Object.values(t).forEach((function(e){e.forEach((function(e){"urls"===e.name?r.alias_urls=e.value:-1!==i.indexOf(e.name)?r[e.name]=e.value.join(", "):r[e.name]=e.value}))})),this.fetchedSites[n]=r,a&&null!==this.totalNumberOfSites&&(this.totalNumberOfSites+=1),this.isSiteBeingEdited=!1}}});pt.render=A;var gt=pt; + */var mt=function(){function e(){var t=this;ct(this,e),bt(this,"privateState",Object(l["reactive"])({isLoading:!1,globalSettings:{keepURLFragmentsGlobal:!1,defaultCurrency:"",defaultTimezone:"",excludedIpsGlobal:"",excludedQueryParametersGlobal:"",excludedUserAgentsGlobal:"",excludedReferrersGlobal:"",searchKeywordParametersGlobal:"",searchCategoryParametersGlobal:""}})),bt(this,"isLoading",Object(l["computed"])((function(){return Object(l["readonly"])(t.privateState).isLoading}))),bt(this,"globalSettings",Object(l["computed"])((function(){return Object(l["readonly"])(t.privateState).globalSettings})))}return dt(e,[{key:"init",value:function(){return this.fetchGlobalSettings()}},{key:"saveGlobalSettings",value:function(e){var t=this;return this.privateState.isLoading=!0,r["AjaxHelper"].post({module:"SitesManager",format:"json",action:"setGlobalSettings"},e,{withTokenInUrl:!0}).finally((function(){t.privateState.isLoading=!1}))}},{key:"fetchGlobalSettings",value:function(){var e=this;this.privateState.isLoading=!0,r["AjaxHelper"].fetch({module:"SitesManager",action:"getGlobalSettings"}).then((function(t){e.privateState.globalSettings=Object.assign(Object.assign({},t),{},{excludedIpsGlobal:t.excludedIpsGlobal||"",excludedQueryParametersGlobal:t.excludedQueryParametersGlobal||"",excludedUserAgentsGlobal:t.excludedUserAgentsGlobal||"",excludedReferrersGlobal:t.excludedReferrersGlobal||"",searchKeywordParametersGlobal:t.searchKeywordParametersGlobal||"",searchCategoryParametersGlobal:t.searchCategoryParametersGlobal||""})})).finally((function(){e.privateState.isLoading=!1}))}}]),e}(),pt=new mt,ht=Object(l["defineComponent"])({props:{dummy:String},components:{MatomoDialog:r["MatomoDialog"],ButtonBar:F,SiteFields:st,EnrichedHeadline:r["EnrichedHeadline"]},directives:{ContentIntro:r["ContentIntro"]},data:function(){var e=new Date,t=new Date(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate(),e.getUTCHours(),e.getUTCMinutes(),e.getUTCSeconds());return{pageSize:10,currentPage:0,showAddSiteDialog:!1,searchTerm:"",activeSearchTerm:"",fetchedSites:[],isLoadingInitialEntities:!1,utcTime:t,totalNumberOfSites:null,isSiteBeingEdited:!1,fetchLimitedSitesAbortController:null}},created:function(){var e=this;We.init(),p.init(),pt.init(),this.isLoadingInitialEntities=!0,Promise.all([p.fetchAvailableTypes(),this.fetchLimitedSitesWithAdminAccess(),this.getTotalNumberOfSites()]).then((function(){e.triggerAddSiteIfRequested()})).finally((function(){e.isLoadingInitialEntities=!1})),Object(l["watch"])((function(){return r["MatomoUrl"].hashQuery.value}),(function(){e.checkGlobalSettingsHash()}))},computed:{sites:function(){var e=this.fetchedSites.filter((function(e){return!e.idsite})).length;return this.fetchedSites.slice(0,this.pageSize+e)},isLoading:function(){return!!this.fetchLimitedSitesAbortController||this.isLoadingInitialEntities||null===this.totalNumberOfSites||p.isLoading.value||We.isLoading.value||pt.isLoading.value},availableTypes:function(){return p.types.value},timezoneSupportEnabled:function(){return We.timezoneSupportEnabled.value},globalSettings:function(){return pt.globalSettings.value},headlineText:function(){return Object(r["translate"])("SitesManager_XManagement",this.availableTypes.length>1?Object(r["translate"])("General_Measurables"):Object(r["translate"])("SitesManager_Sites"))},mainDescription:function(){return Object(r["translate"])("SitesManager_YouCurrentlyHaveAccessToNWebsites","<strong>".concat(this.totalNumberOfSites,"</strong>"))},hasSuperUserAccess:function(){return r["Matomo"].hasSuperUserAccess},superUserAccessMessage:function(){return Object(r["translate"])("SitesManager_SuperUserAccessCan","<a href='#globalSettings'>","</a>")},hasPrev:function(){return this.currentPage>=1},hasNext:function(){return this.fetchedSites.filter((function(e){return!!e.idsite})).length>=this.pageSize+1},offsetStart:function(){return this.currentPage*this.pageSize+1},offsetEnd:function(){return this.offsetStart+this.sites.filter((function(e){return!!e.idsite})).length-1}},methods:{checkGlobalSettingsHash:function(){var e=r["MatomoUrl"].hashQuery.value;!r["Matomo"].hasSuperUserAccess||"globalSettings"!==e&&"/globalSettings"!==e||r["MatomoUrl"].updateLocation(Object.assign(Object.assign({},r["MatomoUrl"].urlParsed.value),{},{action:"globalSettings"}))},addNewEntity:function(){this.availableTypes.length>1?this.showAddSiteDialog=!0:1===this.availableTypes.length&&this.addSite(this.availableTypes[0].id)},addSite:function(e){var t=e,n={isAllowed:!0,measurableType:t};r["Matomo"].postEvent("SitesManager.initAddSite",n),n&&!n.isAllowed||(t||(t="website"),this.fetchedSites.unshift({type:t}),this.isSiteBeingEdited=!0)},afterCancelEdit:function(e){var t=e.site,n=e.element;this.isSiteBeingEdited=!1,t.idsite?n.scrollIntoView():this.fetchedSites=this.fetchedSites.filter((function(e){return!!e.idsite}))},fetchLimitedSitesWithAdminAccess:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";this.fetchLimitedSitesAbortController&&this.fetchLimitedSitesAbortController.abort(),this.fetchLimitedSitesAbortController=new AbortController;var n=this.pageSize+1,a=this.currentPage*this.pageSize,i={method:"SitesManager.getSitesWithAdminAccess",fetchAliasUrls:1,limit:n+a,filter_offset:a,filter_limit:n};return t&&(i.pattern=t),r["AjaxHelper"].fetch(i).then((function(t){e.fetchedSites=t||[]})).then((function(n){return e.activeSearchTerm=t,n})).finally((function(){e.fetchLimitedSitesAbortController=null}))},getTotalNumberOfSites:function(){var e=this;return r["AjaxHelper"].fetch({method:"SitesManager.getSitesIdWithAdminAccess",filter_limit:"-1"}).then((function(t){e.totalNumberOfSites=t.length}))},triggerAddSiteIfRequested:function(){var e=p.getEditSiteIdParameter(),t=r["MatomoUrl"].urlParsed.value.showaddsite;"1"===t?this.addNewEntity():e&&(this.searchTerm=e,this.fetchLimitedSitesWithAdminAccess(this.searchTerm))},previousPage:function(){this.currentPage=Math.max(0,this.currentPage-1),this.fetchLimitedSitesWithAdminAccess(this.activeSearchTerm)},nextPage:function(){this.currentPage=Math.max(0,this.currentPage+1),this.fetchLimitedSitesWithAdminAccess(this.activeSearchTerm)},searchSites:function(){this.currentPage=0,this.fetchLimitedSitesWithAdminAccess(this.searchTerm)},afterDelete:function(e){var t={showaddsite:0};if(r["MatomoUrl"].urlParsed.value.idSite==="".concat(e.idsite)){var n=this.sites.find((function(t){return t.idsite!==e.idsite}));n&&(t=Object.assign(Object.assign({},t),{},{idSite:n.idsite}))}r["Matomo"].helper.redirect(t)},afterSave:function(e,t,n,a){var i=["excluded_ips","excluded_parameters","excluded_user_agents","sitesearch_keyword_parameters","sitesearch_category_parameters"],r=Object.assign({},e);Object.values(t).forEach((function(e){e.forEach((function(e){"urls"===e.name?r.alias_urls=e.value:-1!==i.indexOf(e.name)?r[e.name]=e.value.join(", "):r[e.name]=e.value}))})),this.fetchedSites[n]=r,a&&null!==this.totalNumberOfSites&&(this.totalNumberOfSites+=1),this.isSiteBeingEdited=!1}}});ht.render=A;var gt=ht; /*! * Matomo - free/libre analytics platform * * @link https://matomo.org * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later - */Object(r["createAngularJsAdapter"])({component:gt,scope:{},directiveName:"matomoSitesManagement"});window.angular.module("piwikApp").factory("sitesManagerAPI",(function(){return{}}));var ft={class:"SitesManager"},St=Object(l["createElementVNode"])("a",{name:"globalSettings",id:"globalSettings"},null,-1),vt={id:"excludedIpsGlobalHelp",class:"inline-help-node"},jt=Object(l["createElementVNode"])("br",null,null,-1),Ot=Object(l["createElementVNode"])("br",null,null,-1),yt=["innerHTML"],Et={id:"excludedQueryParametersGlobalHelp",class:"inline-help-node"},Nt=Object(l["createElementVNode"])("br",null,null,-1),Vt=Object(l["createElementVNode"])("br",null,null,-1),Tt={id:"excludedUserAgentsGlobalHelp",class:"inline-help-node"},xt=Object(l["createElementVNode"])("br",null,null,-1),Mt=Object(l["createElementVNode"])("br",null,null,-1),wt={id:"timezoneHelp",class:"inline-help-node"},At={key:0},Ct=Object(l["createElementVNode"])("br",null,null,-1),_t=Object(l["createElementVNode"])("br",null,null,-1),Pt={id:"keepURLFragmentsHelp",class:"inline-help-node"},Dt=["innerHTML"],kt={class:"alert alert-info"};function Gt(e,t,n,a,i,r){var o=Object(l["resolveComponent"])("Field"),s=Object(l["resolveComponent"])("SaveButton"),c=Object(l["resolveComponent"])("ContentBlock");return Object(l["openBlock"])(),Object(l["createElementBlock"])("div",ft,[Object(l["withDirectives"])(Object(l["createVNode"])(c,{"content-title":e.translate("SitesManager_GlobalWebsitesSettings")},{default:Object(l["withCtx"])((function(){return[St,Object(l["createElementVNode"])("div",vt,[Object(l["createElementVNode"])("div",null,[Object(l["createTextVNode"])(Object(l["toDisplayString"])(e.translate("SitesManager_HelpExcludedIpAddresses","1.2.3.4/24","1.2.3.*","1.2.*.*"))+" ",1),jt,Ot,Object(l["createElementVNode"])("span",{innerHTML:e.$sanitize(e.yourCurrentIpAddressIs)},null,8,yt)])]),Object(l["createElementVNode"])("div",Et,[Object(l["createElementVNode"])("div",null,[Object(l["createTextVNode"])(Object(l["toDisplayString"])(e.translate("SitesManager_ListOfQueryParametersToExclude","/^sess.*|.*[dD]ate$/"))+" ",1),Nt,Vt,Object(l["createTextVNode"])(" "+Object(l["toDisplayString"])(e.translate("SitesManager_PiwikWillAutomaticallyExcludeCommonSessionParameters","phpsessid, sessionid, ...")),1)])]),Object(l["createElementVNode"])("div",Tt,[Object(l["createElementVNode"])("div",null,[Object(l["createTextVNode"])(Object(l["toDisplayString"])(e.translate("SitesManager_GlobalExcludedUserAgentHelp1"))+" ",1),xt,Mt,Object(l["createTextVNode"])(" "+Object(l["toDisplayString"])(e.translate("SitesManager_GlobalListExcludedUserAgents_Desc"))+" "+Object(l["toDisplayString"])(e.translate("SitesManager_GlobalExcludedUserAgentHelp2"))+" "+Object(l["toDisplayString"])(e.translate("SitesManager_GlobalExcludedUserAgentHelp3","/bot|spider|crawl|scanner/i")),1)])]),Object(l["createElementVNode"])("div",wt,[Object(l["createElementVNode"])("div",null,[e.timezoneSupportEnabled?Object(l["createCommentVNode"])("",!0):(Object(l["openBlock"])(),Object(l["createElementBlock"])("span",At,[Object(l["createTextVNode"])(Object(l["toDisplayString"])(e.translate("SitesManager_AdvancedTimezoneSupportNotFound"))+" ",1),Ct])),Object(l["createTextVNode"])(" "+Object(l["toDisplayString"])(e.translate("SitesManager_UTCTimeIs",e.utcTimeDate))+" ",1),_t,Object(l["createTextVNode"])(" "+Object(l["toDisplayString"])(e.translate("SitesManager_ChangingYourTimezoneWillOnlyAffectDataForward")),1)])]),Object(l["createElementVNode"])("div",Pt,[Object(l["createElementVNode"])("div",{innerHTML:e.$sanitize(e.keepUrlFragmentHelp)},null,8,Dt),Object(l["createElementVNode"])("div",null,Object(l["toDisplayString"])(e.translate("SitesManager_KeepURLFragmentsHelp2")),1)]),Object(l["createElementVNode"])("div",null,[Object(l["createVNode"])(o,{uicontrol:"textarea",name:"excludedIpsGlobal","var-type":"array",modelValue:e.excludedIpsGlobal,"onUpdate:modelValue":t[0]||(t[0]=function(t){return e.excludedIpsGlobal=t}),title:e.translate("SitesManager_ListOfIpsToBeExcludedOnAllWebsites"),introduction:e.translate("SitesManager_GlobalListExcludedIps"),"inline-help":"#excludedIpsGlobalHelp",disabled:e.isLoading},null,8,["modelValue","title","introduction","disabled"])]),Object(l["createElementVNode"])("div",null,[Object(l["createVNode"])(o,{uicontrol:"textarea",name:"excludedQueryParametersGlobal","var-type":"array",modelValue:e.excludedQueryParametersGlobal,"onUpdate:modelValue":t[1]||(t[1]=function(t){return e.excludedQueryParametersGlobal=t}),title:e.translate("SitesManager_ListOfQueryParametersToBeExcludedOnAllWebsites"),introduction:e.translate("SitesManager_GlobalListExcludedQueryParameters"),"inline-help":"#excludedQueryParametersGlobalHelp",disabled:e.isLoading},null,8,["modelValue","title","introduction","disabled"])]),Object(l["createElementVNode"])("div",null,[Object(l["createVNode"])(o,{uicontrol:"textarea",name:"excludedUserAgentsGlobal","var-type":"array",modelValue:e.excludedUserAgentsGlobal,"onUpdate:modelValue":t[2]||(t[2]=function(t){return e.excludedUserAgentsGlobal=t}),title:e.translate("SitesManager_GlobalListExcludedUserAgents_Desc"),introduction:e.translate("SitesManager_GlobalListExcludedUserAgents"),"inline-help":"#excludedUserAgentsGlobalHelp",disabled:e.isLoading},null,8,["modelValue","title","introduction","disabled"])]),Object(l["createElementVNode"])("div",null,[Object(l["createVNode"])(o,{uicontrol:"checkbox",name:"keepURLFragmentsGlobal",modelValue:e.keepURLFragmentsGlobal,"onUpdate:modelValue":t[3]||(t[3]=function(t){return e.keepURLFragmentsGlobal=t}),title:e.translate("SitesManager_KeepURLFragmentsLong"),introduction:e.translate("SitesManager_KeepURLFragments"),"inline-help":"#keepURLFragmentsHelp",disabled:e.isLoading},null,8,["modelValue","title","introduction","disabled"])]),Object(l["createElementVNode"])("h3",null,Object(l["toDisplayString"])(e.translate("SitesManager_TrackingSiteSearch")),1),Object(l["createElementVNode"])("p",null,Object(l["toDisplayString"])(e.translate("SitesManager_SiteSearchUse")),1),Object(l["createElementVNode"])("div",kt,Object(l["toDisplayString"])(e.translate("SitesManager_SearchParametersNote"))+" "+Object(l["toDisplayString"])(e.translate("SitesManager_SearchParametersNote2")),1),Object(l["createElementVNode"])("div",null,[Object(l["createVNode"])(o,{uicontrol:"text",name:"searchKeywordParametersGlobal","var-type":"array",modelValue:e.searchKeywordParametersGlobal,"onUpdate:modelValue":t[4]||(t[4]=function(t){return e.searchKeywordParametersGlobal=t}),title:e.translate("SitesManager_SearchKeywordLabel"),"inline-help":e.translate("SitesManager_SearchKeywordParametersDesc"),disabled:e.isLoading},null,8,["modelValue","title","inline-help","disabled"])]),Object(l["createElementVNode"])("div",null,[Object(l["createVNode"])(o,{uicontrol:"text",name:"searchCategoryParametersGlobal","var-type":"array",modelValue:e.searchCategoryParametersGlobal,"onUpdate:modelValue":t[5]||(t[5]=function(t){return e.searchCategoryParametersGlobal=t}),title:e.translate("SitesManager_SearchCategoryLabel"),"inline-help":e.searchCategoryParamsInlineHelp,disabled:e.isLoading},null,8,["modelValue","title","inline-help","disabled"])]),Object(l["createElementVNode"])("div",null,[Object(l["createVNode"])(o,{uicontrol:"select",name:"defaultTimezone",options:e.timezoneOptions,title:e.translate("SitesManager_SelectDefaultTimezone"),introduction:e.translate("SitesManager_DefaultTimezoneForNewWebsites"),"inline-help":"#timezoneHelp",disabled:e.isLoading,modelValue:e.defaultTimezone,"onUpdate:modelValue":t[6]||(t[6]=function(t){return e.defaultTimezone=t})},null,8,["options","title","introduction","disabled","modelValue"])]),Object(l["createElementVNode"])("div",null,[Object(l["createVNode"])(o,{uicontrol:"select",name:"defaultCurrency",modelValue:e.defaultCurrency,"onUpdate:modelValue":t[7]||(t[7]=function(t){return e.defaultCurrency=t}),options:e.currencies,title:e.translate("SitesManager_SelectDefaultCurrency"),introduction:e.translate("SitesManager_DefaultCurrencyForNewWebsites"),"inline-help":e.translate("SitesManager_CurrencySymbolWillBeUsedForGoals"),disabled:e.isLoading},null,8,["modelValue","options","title","introduction","inline-help","disabled"])]),Object(l["createVNode"])(s,{saving:e.isSaving,onConfirm:t[8]||(t[8]=function(t){return e.saveGlobalSettings()})},null,8,["saving"])]})),_:1},8,["content-title"]),[[l["vShow"],e.hasSuperUserAccess]])])}var Ut=Object(l["defineComponent"])({props:{dummy:String},components:{ContentBlock:r["ContentBlock"],Field:De["Field"],SaveButton:De["SaveButton"]},data:function(){var e=new Date,t=new Date(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate(),e.getUTCHours(),e.getUTCMinutes(),e.getUTCSeconds()),n=ht.globalSettings.value;return{currentIpAddress:null,utcTime:t,keepURLFragmentsGlobal:n.keepURLFragmentsGlobal,defaultTimezone:n.defaultTimezone,defaultCurrency:n.defaultCurrency,excludedIpsGlobal:(n.excludedIpsGlobal||"").split(","),excludedQueryParametersGlobal:(n.excludedQueryParametersGlobal||"").split(","),excludedUserAgentsGlobal:(n.excludedUserAgentsGlobal||"").split(","),searchKeywordParametersGlobal:(n.searchKeywordParametersGlobal||"").split(","),searchCategoryParametersGlobal:(n.searchCategoryParametersGlobal||"").split(","),isSaving:!1}},created:function(){var e=this;Xe.init(),Re.init(),ht.init(),Object(l["watch"])((function(){return ht.globalSettings.value}),(function(t){e.keepURLFragmentsGlobal=t.keepURLFragmentsGlobal,e.defaultTimezone=t.defaultTimezone,e.defaultCurrency=t.defaultCurrency,e.excludedIpsGlobal=(t.excludedIpsGlobal||"").split(","),e.excludedQueryParametersGlobal=(t.excludedQueryParametersGlobal||"").split(","),e.excludedUserAgentsGlobal=(t.excludedUserAgentsGlobal||"").split(","),e.searchKeywordParametersGlobal=(t.searchKeywordParametersGlobal||"").split(","),e.searchCategoryParametersGlobal=(t.searchCategoryParametersGlobal||"").split(",")})),r["AjaxHelper"].fetch({method:"API.getIpFromHeader"}).then((function(t){e.currentIpAddress=t.value}))},methods:{saveGlobalSettings:function(){var e=this;this.isSaving=!0,ht.saveGlobalSettings({keepURLFragments:this.keepURLFragmentsGlobal,currency:this.defaultCurrency,timezone:this.defaultTimezone,excludedIps:this.excludedIpsGlobal.join(","),excludedQueryParameters:this.excludedQueryParametersGlobal.join(","),excludedUserAgents:this.excludedUserAgentsGlobal.join(","),searchKeywordParameters:this.searchKeywordParametersGlobal.join(","),searchCategoryParameters:this.searchCategoryParametersGlobal.join(",")}).then((function(){r["Matomo"].helper.redirect({showaddsite:!1})})).finally((function(){e.isSaving=!1}))}},computed:{isLoading:function(){return ht.isLoading.value||Re.isLoading.value||Xe.isLoading.value},timezones:function(){return Re.timezones.value},timezoneOptions:function(){return this.timezones.map((function(e){var t=e.group,n=e.label,a=e.code;return{group:t,key:n,value:a}}))},currencies:function(){return Xe.currencies.value},hasSuperUserAccess:function(){return r["Matomo"].hasSuperUserAccess},yourCurrentIpAddressIs:function(){return Object(r["translate"])("SitesManager_YourCurrentIpAddressIs","<i>".concat(this.currentIpAddress,"</i>"))},timezoneSupportEnabled:function(){return Re.timezoneSupportEnabled.value},utcTimeDate:function(){var e=this.utcTime,t=function(e){return e.toString().padStart(2,"0")},n=t(e.getHours()),a=t(e.getMinutes()),i=t(e.getSeconds());return"".concat(Object(r["format"])(this.utcTime)," ").concat(n,":").concat(a,":").concat(i)},keepUrlFragmentHelp:function(){return Object(r["translate"])("SitesManager_KeepURLFragmentsHelp","<em>#</em>","<em>example.org/index.html#first_section</em>","<em>example.org/index.html</em>")},searchCategoryParamsInlineHelp:function(){var e=[Object(r["translate"])("Goals_Optional"),Object(r["translate"])("SitesManager_SearchCategoryDesc"),Object(r["translate"])("SitesManager_SearchCategoryParametersDesc")];return e.join(" ")}}});Ut.render=Gt;var Lt=Ut; + */Object(r["createAngularJsAdapter"])({component:gt,scope:{},directiveName:"matomoSitesManagement"});window.angular.module("piwikApp").factory("sitesManagerAPI",(function(){return{}}));var ft={class:"SitesManager"},St=Object(l["createElementVNode"])("a",{name:"globalSettings",id:"globalSettings"},null,-1),jt={id:"excludedIpsGlobalHelp",class:"inline-help-node"},Ot=Object(l["createElementVNode"])("br",null,null,-1),vt=Object(l["createElementVNode"])("br",null,null,-1),yt=["innerHTML"],Et={id:"excludedQueryParametersGlobalHelp",class:"inline-help-node"},Nt=Object(l["createElementVNode"])("br",null,null,-1),Vt=Object(l["createElementVNode"])("br",null,null,-1),xt={id:"excludedUserAgentsGlobalHelp",class:"inline-help-node"},Tt=Object(l["createElementVNode"])("br",null,null,-1),Mt=Object(l["createElementVNode"])("br",null,null,-1),wt={id:"excludedReferrersGlobalHelp",class:"inline-help-node"},At=Object(l["createElementVNode"])("br",null,null,-1),_t=Object(l["createElementVNode"])("br",null,null,-1),Ct=Object(l["createElementVNode"])("br",null,null,-1),Gt=Object(l["createElementVNode"])("br",null,null,-1),Pt=Object(l["createElementVNode"])("br",null,null,-1),Dt={id:"timezoneHelp",class:"inline-help-node"},kt={key:0},Ut=Object(l["createElementVNode"])("br",null,null,-1),Lt=Object(l["createElementVNode"])("br",null,null,-1),zt={id:"keepURLFragmentsHelp",class:"inline-help-node"},It=["innerHTML"],Bt={class:"alert alert-info"};function Ht(e,t,n,a,i,r){var o=Object(l["resolveComponent"])("Field"),s=Object(l["resolveComponent"])("SaveButton"),c=Object(l["resolveComponent"])("ContentBlock");return Object(l["openBlock"])(),Object(l["createElementBlock"])("div",ft,[Object(l["withDirectives"])(Object(l["createVNode"])(c,{"content-title":e.translate("SitesManager_GlobalWebsitesSettings")},{default:Object(l["withCtx"])((function(){return[St,Object(l["createElementVNode"])("div",jt,[Object(l["createElementVNode"])("div",null,[Object(l["createTextVNode"])(Object(l["toDisplayString"])(e.translate("SitesManager_HelpExcludedIpAddresses","1.2.3.4/24","1.2.3.*","1.2.*.*"))+" ",1),Ot,vt,Object(l["createElementVNode"])("span",{innerHTML:e.$sanitize(e.yourCurrentIpAddressIs)},null,8,yt)])]),Object(l["createElementVNode"])("div",Et,[Object(l["createElementVNode"])("div",null,[Object(l["createTextVNode"])(Object(l["toDisplayString"])(e.translate("SitesManager_ListOfQueryParametersToExclude","/^sess.*|.*[dD]ate$/"))+" ",1),Nt,Vt,Object(l["createTextVNode"])(" "+Object(l["toDisplayString"])(e.translate("SitesManager_PiwikWillAutomaticallyExcludeCommonSessionParameters","phpsessid, sessionid, ...")),1)])]),Object(l["createElementVNode"])("div",xt,[Object(l["createElementVNode"])("div",null,[Object(l["createTextVNode"])(Object(l["toDisplayString"])(e.translate("SitesManager_GlobalExcludedUserAgentHelp1"))+" ",1),Tt,Mt,Object(l["createTextVNode"])(" "+Object(l["toDisplayString"])(e.translate("SitesManager_GlobalListExcludedUserAgents_Desc"))+" "+Object(l["toDisplayString"])(e.translate("SitesManager_GlobalExcludedUserAgentHelp2"))+" "+Object(l["toDisplayString"])(e.translate("SitesManager_GlobalExcludedUserAgentHelp3","/bot|spider|crawl|scanner/i")),1)])]),Object(l["createElementVNode"])("div",wt,[Object(l["createElementVNode"])("div",null,[Object(l["createTextVNode"])(Object(l["toDisplayString"])(e.translate("SitesManager_ExcludedReferrersHelp"))+" ",1),At,_t,Object(l["createTextVNode"])(" "+Object(l["toDisplayString"])(e.translate("SitesManager_ExcludedReferrersHelpDetails"))+" ",1),Ct,Object(l["createTextVNode"])(" "+Object(l["toDisplayString"])(e.translate("SitesManager_ExcludedReferrersHelpExamples","www.example.org","http://example.org/mypath","https://www.example.org/?param=1","https://sub.example.org/"))+" ",1),Gt,Pt,Object(l["createTextVNode"])(" "+Object(l["toDisplayString"])(e.translate("SitesManager_ExcludedReferrersHelpSubDomains",".sub.example.org","http://sub.example.org/mypath","https://new.sub.example.org/")),1)])]),Object(l["createElementVNode"])("div",Dt,[Object(l["createElementVNode"])("div",null,[e.timezoneSupportEnabled?Object(l["createCommentVNode"])("",!0):(Object(l["openBlock"])(),Object(l["createElementBlock"])("span",kt,[Object(l["createTextVNode"])(Object(l["toDisplayString"])(e.translate("SitesManager_AdvancedTimezoneSupportNotFound"))+" ",1),Ut])),Object(l["createTextVNode"])(" "+Object(l["toDisplayString"])(e.translate("SitesManager_UTCTimeIs",e.utcTimeDate))+" ",1),Lt,Object(l["createTextVNode"])(" "+Object(l["toDisplayString"])(e.translate("SitesManager_ChangingYourTimezoneWillOnlyAffectDataForward")),1)])]),Object(l["createElementVNode"])("div",zt,[Object(l["createElementVNode"])("div",{innerHTML:e.$sanitize(e.keepUrlFragmentHelp)},null,8,It),Object(l["createElementVNode"])("div",null,Object(l["toDisplayString"])(e.translate("SitesManager_KeepURLFragmentsHelp2")),1)]),Object(l["createElementVNode"])("div",null,[Object(l["createVNode"])(o,{uicontrol:"textarea",name:"excludedIpsGlobal","var-type":"array",modelValue:e.excludedIpsGlobal,"onUpdate:modelValue":t[0]||(t[0]=function(t){return e.excludedIpsGlobal=t}),title:e.translate("SitesManager_ListOfIpsToBeExcludedOnAllWebsites"),introduction:e.translate("SitesManager_GlobalListExcludedIps"),"inline-help":"#excludedIpsGlobalHelp",disabled:e.isLoading},null,8,["modelValue","title","introduction","disabled"])]),Object(l["createElementVNode"])("div",null,[Object(l["createVNode"])(o,{uicontrol:"textarea",name:"excludedQueryParametersGlobal","var-type":"array",modelValue:e.excludedQueryParametersGlobal,"onUpdate:modelValue":t[1]||(t[1]=function(t){return e.excludedQueryParametersGlobal=t}),title:e.translate("SitesManager_ListOfQueryParametersToBeExcludedOnAllWebsites"),introduction:e.translate("SitesManager_GlobalListExcludedQueryParameters"),"inline-help":"#excludedQueryParametersGlobalHelp",disabled:e.isLoading},null,8,["modelValue","title","introduction","disabled"])]),Object(l["createElementVNode"])("div",null,[Object(l["createVNode"])(o,{uicontrol:"textarea",name:"excludedUserAgentsGlobal","var-type":"array",modelValue:e.excludedUserAgentsGlobal,"onUpdate:modelValue":t[2]||(t[2]=function(t){return e.excludedUserAgentsGlobal=t}),title:e.translate("SitesManager_GlobalListExcludedUserAgents_Desc"),introduction:e.translate("SitesManager_GlobalListExcludedUserAgents"),"inline-help":"#excludedUserAgentsGlobalHelp",disabled:e.isLoading},null,8,["modelValue","title","introduction","disabled"])]),Object(l["createElementVNode"])("div",null,[Object(l["createVNode"])(o,{uicontrol:"textarea",name:"excludedReferrersGlobal","var-type":"array",modelValue:e.excludedReferrersGlobal,"onUpdate:modelValue":t[3]||(t[3]=function(t){return e.excludedReferrersGlobal=t}),title:e.translate("SitesManager_GlobalListExcludedReferrersDesc"),introduction:e.translate("SitesManager_GlobalListExcludedReferrers"),"inline-help":"#excludedReferrersGlobalHelp",disabled:e.isLoading},null,8,["modelValue","title","introduction","disabled"])]),Object(l["createElementVNode"])("div",null,[Object(l["createVNode"])(o,{uicontrol:"checkbox",name:"keepURLFragmentsGlobal",modelValue:e.keepURLFragmentsGlobal,"onUpdate:modelValue":t[4]||(t[4]=function(t){return e.keepURLFragmentsGlobal=t}),title:e.translate("SitesManager_KeepURLFragmentsLong"),introduction:e.translate("SitesManager_KeepURLFragments"),"inline-help":"#keepURLFragmentsHelp",disabled:e.isLoading},null,8,["modelValue","title","introduction","disabled"])]),Object(l["createElementVNode"])("h3",null,Object(l["toDisplayString"])(e.translate("SitesManager_TrackingSiteSearch")),1),Object(l["createElementVNode"])("p",null,Object(l["toDisplayString"])(e.translate("SitesManager_SiteSearchUse")),1),Object(l["createElementVNode"])("div",Bt,Object(l["toDisplayString"])(e.translate("SitesManager_SearchParametersNote"))+" "+Object(l["toDisplayString"])(e.translate("SitesManager_SearchParametersNote2")),1),Object(l["createElementVNode"])("div",null,[Object(l["createVNode"])(o,{uicontrol:"text",name:"searchKeywordParametersGlobal","var-type":"array",modelValue:e.searchKeywordParametersGlobal,"onUpdate:modelValue":t[5]||(t[5]=function(t){return e.searchKeywordParametersGlobal=t}),title:e.translate("SitesManager_SearchKeywordLabel"),"inline-help":e.translate("SitesManager_SearchKeywordParametersDesc"),disabled:e.isLoading},null,8,["modelValue","title","inline-help","disabled"])]),Object(l["createElementVNode"])("div",null,[Object(l["createVNode"])(o,{uicontrol:"text",name:"searchCategoryParametersGlobal","var-type":"array",modelValue:e.searchCategoryParametersGlobal,"onUpdate:modelValue":t[6]||(t[6]=function(t){return e.searchCategoryParametersGlobal=t}),title:e.translate("SitesManager_SearchCategoryLabel"),"inline-help":e.searchCategoryParamsInlineHelp,disabled:e.isLoading},null,8,["modelValue","title","inline-help","disabled"])]),Object(l["createElementVNode"])("div",null,[Object(l["createVNode"])(o,{uicontrol:"select",name:"defaultTimezone",options:e.timezoneOptions,title:e.translate("SitesManager_SelectDefaultTimezone"),introduction:e.translate("SitesManager_DefaultTimezoneForNewWebsites"),"inline-help":"#timezoneHelp",disabled:e.isLoading,modelValue:e.defaultTimezone,"onUpdate:modelValue":t[7]||(t[7]=function(t){return e.defaultTimezone=t})},null,8,["options","title","introduction","disabled","modelValue"])]),Object(l["createElementVNode"])("div",null,[Object(l["createVNode"])(o,{uicontrol:"select",name:"defaultCurrency",modelValue:e.defaultCurrency,"onUpdate:modelValue":t[8]||(t[8]=function(t){return e.defaultCurrency=t}),options:e.currencies,title:e.translate("SitesManager_SelectDefaultCurrency"),introduction:e.translate("SitesManager_DefaultCurrencyForNewWebsites"),"inline-help":e.translate("SitesManager_CurrencySymbolWillBeUsedForGoals"),disabled:e.isLoading},null,8,["modelValue","options","title","introduction","inline-help","disabled"])]),Object(l["createVNode"])(s,{saving:e.isSaving,onConfirm:t[9]||(t[9]=function(t){return e.saveGlobalSettings()})},null,8,["saving"])]})),_:1},8,["content-title"]),[[l["vShow"],e.hasSuperUserAccess]])])}var Ft=Object(l["defineComponent"])({props:{dummy:String},components:{ContentBlock:r["ContentBlock"],Field:Pe["Field"],SaveButton:Pe["SaveButton"]},data:function(){var e=new Date,t=new Date(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate(),e.getUTCHours(),e.getUTCMinutes(),e.getUTCSeconds()),n=pt.globalSettings.value;return{currentIpAddress:null,utcTime:t,keepURLFragmentsGlobal:n.keepURLFragmentsGlobal,defaultTimezone:n.defaultTimezone,defaultCurrency:n.defaultCurrency,excludedIpsGlobal:(n.excludedIpsGlobal||"").split(","),excludedQueryParametersGlobal:(n.excludedQueryParametersGlobal||"").split(","),excludedUserAgentsGlobal:(n.excludedUserAgentsGlobal||"").split(","),excludedReferrersGlobal:(n.excludedReferrersGlobal||"").split(","),searchKeywordParametersGlobal:(n.searchKeywordParametersGlobal||"").split(","),searchCategoryParametersGlobal:(n.searchCategoryParametersGlobal||"").split(","),isSaving:!1}},created:function(){var e=this;Xe.init(),We.init(),pt.init(),Object(l["watch"])((function(){return pt.globalSettings.value}),(function(t){e.keepURLFragmentsGlobal=t.keepURLFragmentsGlobal,e.defaultTimezone=t.defaultTimezone,e.defaultCurrency=t.defaultCurrency,e.excludedIpsGlobal=(t.excludedIpsGlobal||"").split(","),e.excludedQueryParametersGlobal=(t.excludedQueryParametersGlobal||"").split(","),e.excludedUserAgentsGlobal=(t.excludedUserAgentsGlobal||"").split(","),e.excludedReferrersGlobal=(t.excludedReferrersGlobal||"").split(","),e.searchKeywordParametersGlobal=(t.searchKeywordParametersGlobal||"").split(","),e.searchCategoryParametersGlobal=(t.searchCategoryParametersGlobal||"").split(",")})),r["AjaxHelper"].fetch({method:"API.getIpFromHeader"}).then((function(t){e.currentIpAddress=t.value}))},methods:{saveGlobalSettings:function(){var e=this;this.isSaving=!0,pt.saveGlobalSettings({keepURLFragments:this.keepURLFragmentsGlobal,currency:this.defaultCurrency,timezone:this.defaultTimezone,excludedIps:this.excludedIpsGlobal.join(","),excludedQueryParameters:this.excludedQueryParametersGlobal.join(","),excludedUserAgents:this.excludedUserAgentsGlobal.join(","),excludedReferrers:this.excludedReferrersGlobal.join(","),searchKeywordParameters:this.searchKeywordParametersGlobal.join(","),searchCategoryParameters:this.searchCategoryParametersGlobal.join(",")}).then((function(){r["Matomo"].helper.redirect({showaddsite:!1})})).finally((function(){e.isSaving=!1}))}},computed:{isLoading:function(){return pt.isLoading.value||We.isLoading.value||Xe.isLoading.value},timezones:function(){return We.timezones.value},timezoneOptions:function(){return this.timezones.map((function(e){var t=e.group,n=e.label,a=e.code;return{group:t,key:n,value:a}}))},currencies:function(){return Xe.currencies.value},hasSuperUserAccess:function(){return r["Matomo"].hasSuperUserAccess},yourCurrentIpAddressIs:function(){return Object(r["translate"])("SitesManager_YourCurrentIpAddressIs","<i>".concat(this.currentIpAddress,"</i>"))},timezoneSupportEnabled:function(){return We.timezoneSupportEnabled.value},utcTimeDate:function(){var e=this.utcTime,t=function(e){return e.toString().padStart(2,"0")},n=t(e.getHours()),a=t(e.getMinutes()),i=t(e.getSeconds());return"".concat(Object(r["format"])(this.utcTime)," ").concat(n,":").concat(a,":").concat(i)},keepUrlFragmentHelp:function(){return Object(r["translate"])("SitesManager_KeepURLFragmentsHelp","<em>#</em>","<em>example.org/index.html#first_section</em>","<em>example.org/index.html</em>")},searchCategoryParamsInlineHelp:function(){var e=[Object(r["translate"])("Goals_Optional"),Object(r["translate"])("SitesManager_SearchCategoryDesc"),Object(r["translate"])("SitesManager_SearchCategoryParametersDesc")];return e.join(" ")}}});Ft.render=Ht;var Rt=Ft; /*! * Matomo - free/libre analytics platform * * @link https://matomo.org * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later - */Object(r["createAngularJsAdapter"])({component:Lt,scope:{},directiveName:"matomoGlobalSettings"})}})})); + */Object(r["createAngularJsAdapter"])({component:Rt,scope:{},directiveName:"matomoGlobalSettings"})}})})); //# sourceMappingURL=SitesManager.umd.min.js.map
\ No newline at end of file diff --git a/plugins/SitesManager/vue/src/GlobalSettingsStore/GlobalSettings.ts b/plugins/SitesManager/vue/src/GlobalSettingsStore/GlobalSettings.ts index 12d2edbf1a..e7a72a946d 100644 --- a/plugins/SitesManager/vue/src/GlobalSettingsStore/GlobalSettings.ts +++ b/plugins/SitesManager/vue/src/GlobalSettingsStore/GlobalSettings.ts @@ -12,6 +12,7 @@ interface GlobalSettings { excludedIpsGlobal?: string; excludedQueryParametersGlobal?: string; excludedUserAgentsGlobal?: string; + excludedReferrersGlobal?: string; searchKeywordParametersGlobal?: string; searchCategoryParametersGlobal?: string; } diff --git a/plugins/SitesManager/vue/src/GlobalSettingsStore/GlobalSettingsStore.ts b/plugins/SitesManager/vue/src/GlobalSettingsStore/GlobalSettingsStore.ts index 13201e74ef..da5af703db 100644 --- a/plugins/SitesManager/vue/src/GlobalSettingsStore/GlobalSettingsStore.ts +++ b/plugins/SitesManager/vue/src/GlobalSettingsStore/GlobalSettingsStore.ts @@ -25,6 +25,7 @@ interface SaveGlobalSettingsParams { excludedIps: string; excludedQueryParameters: string; excludedUserAgents: string; + excludedReferrers: string; searchKeywordParameters: string; searchCategoryParameters: string; } @@ -39,6 +40,7 @@ class GlobalSettingsStore { excludedIpsGlobal: '', excludedQueryParametersGlobal: '', excludedUserAgentsGlobal: '', + excludedReferrersGlobal: '', searchKeywordParametersGlobal: '', searchCategoryParametersGlobal: '', }, @@ -82,6 +84,7 @@ class GlobalSettingsStore { excludedIpsGlobal: response.excludedIpsGlobal || '', excludedQueryParametersGlobal: response.excludedQueryParametersGlobal || '', excludedUserAgentsGlobal: response.excludedUserAgentsGlobal || '', + excludedReferrersGlobal: response.excludedReferrersGlobal || '', searchKeywordParametersGlobal: response.searchKeywordParametersGlobal || '', searchCategoryParametersGlobal: response.searchCategoryParametersGlobal || '', }; diff --git a/plugins/SitesManager/vue/src/ManageGlobalSettings/ManageGlobalSettings.vue b/plugins/SitesManager/vue/src/ManageGlobalSettings/ManageGlobalSettings.vue index bc0dd92187..f2a59cdffe 100644 --- a/plugins/SitesManager/vue/src/ManageGlobalSettings/ManageGlobalSettings.vue +++ b/plugins/SitesManager/vue/src/ManageGlobalSettings/ManageGlobalSettings.vue @@ -55,6 +55,29 @@ </div> </div> + <div id="excludedReferrersGlobalHelp" class="inline-help-node"> + <div> + {{ translate('SitesManager_ExcludedReferrersHelp') }} + <br/><br/> + {{ translate('SitesManager_ExcludedReferrersHelpDetails') }} + <br/> + {{ translate( + 'SitesManager_ExcludedReferrersHelpExamples', + 'www.example.org', + 'http://example.org/mypath', + 'https://www.example.org/?param=1', + 'https://sub.example.org/' + ) }} + <br/><br/> + {{ translate( + 'SitesManager_ExcludedReferrersHelpSubDomains', + '.sub.example.org', + 'http://sub.example.org/mypath', + 'https://new.sub.example.org/' + ) }} + </div> + </div> + <div id="timezoneHelp" class="inline-help-node"> <div> <span v-if="!timezoneSupportEnabled"> @@ -114,6 +137,19 @@ <div> <Field + uicontrol="textarea" + name="excludedReferrersGlobal" + var-type="array" + v-model="excludedReferrersGlobal" + :title="translate('SitesManager_GlobalListExcludedReferrersDesc')" + :introduction="translate('SitesManager_GlobalListExcludedReferrers')" + :inline-help="'#excludedReferrersGlobalHelp'" + :disabled="isLoading" + /> + </div> + + <div> + <Field uicontrol="checkbox" name="keepURLFragmentsGlobal" v-model="keepURLFragmentsGlobal" @@ -210,6 +246,7 @@ interface GlobalSettingsState { excludedIpsGlobal: string[]; excludedQueryParametersGlobal: string[]; excludedUserAgentsGlobal: string[]; + excludedReferrersGlobal: string[]; searchKeywordParametersGlobal: string[]; searchCategoryParametersGlobal: string[]; isSaving: boolean; @@ -253,6 +290,7 @@ export default defineComponent({ excludedQueryParametersGlobal: (settings.excludedQueryParametersGlobal || '').split(','), excludedUserAgentsGlobal: (settings.excludedUserAgentsGlobal || '').split(','), + excludedReferrersGlobal: (settings.excludedReferrersGlobal || '').split(','), searchKeywordParametersGlobal: (settings.searchKeywordParametersGlobal || '').split(','), searchCategoryParametersGlobal: @@ -273,6 +311,7 @@ export default defineComponent({ this.excludedQueryParametersGlobal = (settings.excludedQueryParametersGlobal || '') .split(','); this.excludedUserAgentsGlobal = (settings.excludedUserAgentsGlobal || '').split(','); + this.excludedReferrersGlobal = (settings.excludedReferrersGlobal || '').split(','); this.searchKeywordParametersGlobal = (settings.searchKeywordParametersGlobal || '') .split(','); this.searchCategoryParametersGlobal = (settings.searchCategoryParametersGlobal || '') @@ -293,6 +332,7 @@ export default defineComponent({ excludedIps: this.excludedIpsGlobal.join(','), excludedQueryParameters: this.excludedQueryParametersGlobal.join(','), excludedUserAgents: this.excludedUserAgentsGlobal.join(','), + excludedReferrers: this.excludedReferrersGlobal.join(','), searchKeywordParameters: this.searchKeywordParametersGlobal.join(','), searchCategoryParameters: this.searchCategoryParametersGlobal.join(','), }).then(() => { diff --git a/plugins/WebsiteMeasurable/MeasurableSettings.php b/plugins/WebsiteMeasurable/MeasurableSettings.php index 749a32e8a3..ddea90083d 100644 --- a/plugins/WebsiteMeasurable/MeasurableSettings.php +++ b/plugins/WebsiteMeasurable/MeasurableSettings.php @@ -1,4 +1,5 @@ <?php + /** * Matomo - free/libre analytics platform * @@ -7,16 +8,19 @@ */ namespace Piwik\Plugins\WebsiteMeasurable; + use Piwik\IP; use Piwik\Measurable\Type\TypeManager; use Matomo\Network\IPUtils; use Piwik\Piwik; use Piwik\Plugin; use Piwik\Plugins\WebsiteMeasurable\Settings\Urls; +use Piwik\Settings\Measurable\MeasurableProperty; use Piwik\Settings\Setting; use Piwik\Settings\FieldConfig; use Piwik\Plugins\SitesManager; use Exception; +use Piwik\UrlHelper; /** * Defines Settings for ExampleSettingsPlugin. @@ -62,6 +66,9 @@ class MeasurableSettings extends \Piwik\Settings\Measurable\MeasurableSettings public $excludedParameters; /** @var Setting */ + public $excludedReferrers; + + /** @var Setting */ public $ecommerce; /** @@ -84,8 +91,13 @@ class MeasurableSettings extends \Piwik\Settings\Measurable\MeasurableSettings */ private $unsetSiteSearchKeywords = false; - public function __construct(SitesManager\API $api, Plugin\Manager $pluginManager, TypeManager $typeManager, $idSite, $idMeasurableType) - { + public function __construct( + SitesManager\API $api, + Plugin\Manager $pluginManager, + TypeManager $typeManager, + $idSite, + $idMeasurableType + ) { $this->sitesManagerApi = $api; $this->pluginManager = $pluginManager; $this->typeManager = $typeManager; @@ -119,6 +131,7 @@ class MeasurableSettings extends \Piwik\Settings\Measurable\MeasurableSettings $this->excludedIps = $this->makeExcludeIps(); $this->excludedParameters = $this->makeExcludedParameters(); $this->excludedUserAgents = $this->makeExcludedUserAgents(); + $this->excludedReferrers = $this->makeExcludedReferrers($this->sitesManagerApi); /** * SiteSearch @@ -139,7 +152,7 @@ class MeasurableSettings extends \Piwik\Settings\Measurable\MeasurableSettings $this->ecommerce = $this->makeEcommerce(); } - private function makeExcludeUnknownUrls() + private function makeExcludeUnknownUrls(): MeasurableProperty { return $this->makeProperty('exclude_unknown_urls', $default = false, FieldConfig::TYPE_BOOL, function (FieldConfig $field) { $field->title = Piwik::translate('SitesManager_OnlyMatchedUrlsAllowed'); @@ -150,7 +163,7 @@ class MeasurableSettings extends \Piwik\Settings\Measurable\MeasurableSettings }); } - private function makeKeepUrlFragments(SitesManager\API $sitesManagerApi) + private function makeKeepUrlFragments(SitesManager\API $sitesManagerApi): MeasurableProperty { return $this->makeProperty('keep_url_fragment', $default = '0', FieldConfig::TYPE_STRING, function (FieldConfig $field) use ($sitesManagerApi) { $field->title = Piwik::translate('SitesManager_KeepURLFragmentsLong'); @@ -162,29 +175,29 @@ class MeasurableSettings extends \Piwik\Settings\Measurable\MeasurableSettings $default = Piwik::translate('General_No'); } - $field->availableValues = array( + $field->availableValues = [ '0' => $default . ' (' . Piwik::translate('General_Default') . ')', '1' => Piwik::translate('General_Yes'), '2' => Piwik::translate('General_No') - ); + ]; }); } - private function makeExcludeIps() + private function makeExcludeIps(): MeasurableProperty { - return $this->makeProperty('excluded_ips', $default = array(), FieldConfig::TYPE_ARRAY, function (FieldConfig $field) { + return $this->makeProperty('excluded_ips', $default = [], FieldConfig::TYPE_ARRAY, function (FieldConfig $field) { $ip = IP::getIpFromHeader(); $field->title = Piwik::translate('SitesManager_ExcludedIps'); - $field->inlineHelp = Piwik::translate('SitesManager_HelpExcludedIpAddresses', array('1.2.3.4/24', '1.2.3.*', '1.2.*.*')) + $field->inlineHelp = Piwik::translate('SitesManager_HelpExcludedIpAddresses', ['1.2.3.4/24', '1.2.3.*', '1.2.*.*']) . '<br /><br />' - . Piwik::translate('SitesManager_YourCurrentIpAddressIs', array('<i>' . $ip . '</i>')); + . Piwik::translate('SitesManager_YourCurrentIpAddressIs', ['<i>' . $ip . '</i>']); $field->uiControl = FieldConfig::UI_CONTROL_TEXTAREA; - $field->uiControlAttributes = array( + $field->uiControlAttributes = [ 'cols' => '20', 'rows' => '4', 'placeholder' => $ip, - ); + ]; $field->validate = function ($value) { if (!empty($value)) { @@ -193,14 +206,14 @@ class MeasurableSettings extends \Piwik\Settings\Measurable\MeasurableSettings foreach ($ips as $ip) { if (IPUtils::getIPRangeBounds($ip) === null) { - throw new Exception(Piwik::translate('SitesManager_ExceptionInvalidIPFormat', array($ip, "1.2.3.4, 1.2.3.*, or 1.2.3.4/5"))); + throw new Exception(Piwik::translate('SitesManager_ExceptionInvalidIPFormat', [$ip, "1.2.3.4, 1.2.3.*, or 1.2.3.4/5"])); } } } }; $field->transform = function ($value) { if (empty($value)) { - return array(); + return []; } $ips = array_map('trim', $value); @@ -210,26 +223,26 @@ class MeasurableSettings extends \Piwik\Settings\Measurable\MeasurableSettings }); } - private function makeExcludedParameters() + private function makeExcludedParameters(): MeasurableProperty { $self = $this; - return $this->makeProperty('excluded_parameters', $default = array(), FieldConfig::TYPE_ARRAY, function (FieldConfig $field) use ($self) { + return $this->makeProperty('excluded_parameters', $default = [], FieldConfig::TYPE_ARRAY, function (FieldConfig $field) use ($self) { $field->title = Piwik::translate('SitesManager_ExcludedParameters'); $field->inlineHelp = Piwik::translate('SitesManager_ListOfQueryParametersToExclude', "/^sess.*|.*[dD]ate$/") . '<br /><br />' - . Piwik::translate('SitesManager_PiwikWillAutomaticallyExcludeCommonSessionParameters', array('phpsessid, sessionid, ...')); + . Piwik::translate('SitesManager_PiwikWillAutomaticallyExcludeCommonSessionParameters', ['phpsessid, sessionid, ...']); $field->uiControl = FieldConfig::UI_CONTROL_TEXTAREA; - $field->uiControlAttributes = array('cols' => '20', 'rows' => '4'); + $field->uiControlAttributes = ['cols' => '20', 'rows' => '4']; $field->transform = function ($value) use ($self) { return $self->checkAndReturnCommaSeparatedStringList($value); }; }); } - private function makeExcludedUserAgents() + private function makeExcludedUserAgents(): MeasurableProperty { $self = $this; - return $this->makeProperty('excluded_user_agents', $default = array(), FieldConfig::TYPE_ARRAY, function (FieldConfig $field) use ($self) { + return $this->makeProperty('excluded_user_agents', $default = [], FieldConfig::TYPE_ARRAY, function (FieldConfig $field) use ($self) { $field->title = Piwik::translate('SitesManager_ExcludedUserAgents'); $field->inlineHelp = Piwik::translate('SitesManager_GlobalExcludedUserAgentHelp1') . '<br /><br />' @@ -239,23 +252,80 @@ class MeasurableSettings extends \Piwik\Settings\Measurable\MeasurableSettings . Piwik::translate('SitesManager_GlobalExcludedUserAgentHelp3', "/bot|spider|crawl|scanner/i") ; $field->uiControl = FieldConfig::UI_CONTROL_TEXTAREA; - $field->uiControlAttributes = array('cols' => '20', 'rows' => '4'); + $field->uiControlAttributes = ['cols' => '20', 'rows' => '4']; $field->transform = function ($value) use ($self) { return $self->checkAndReturnCommaSeparatedStringList($value); }; }); } - private function makeSiteSearch() + private function makeExcludedReferrers(SitesManager\API $sitesManagerApi): MeasurableProperty + { + $self = $this; + return $this->makeProperty('excluded_referrers', $default = [], FieldConfig::TYPE_ARRAY, function (FieldConfig $field) use ($sitesManagerApi, $self) { + $field->title = Piwik::translate('SitesManager_ExcludedReferrers'); + + $referrersGlobal = $sitesManagerApi->getExcludedReferrersGlobal(); + + $field->inlineHelp = Piwik::translate('SitesManager_ExcludedReferrersHelp') + . '<br /><br />' + . Piwik::translate('SitesManager_ExcludedReferrersHelpDetails') + . '<br />' + . Piwik::translate('SitesManager_ExcludedReferrersHelpExamples', [ + 'www.example.org', + 'http://example.org/mypath', + 'https://www.example.org/?param=1', + 'https://sub.example.org/' + ]) + . '<br /><br />' + . Piwik::translate('SitesManager_ExcludedReferrersHelpSubDomains', [ + '.sub.example.org', + 'http://sub.example.org/mypath', + 'https://new.sub.example.org/' + ]) + ; + + if (!empty($referrersGlobal)) { + $field->inlineHelp .= '<br /><br />' + . '<strong>' . Piwik::translate('SitesManager_GlobalListExcludedReferrers') . '</strong><br />' + . $referrersGlobal; + } + $field->uiControl = FieldConfig::UI_CONTROL_TEXTAREA; + $field->uiControlAttributes = ['cols' => '20', 'rows' => '4']; + $field->validate = function ($value) { + if (!empty($value)) { + $urls = array_map('trim', $value); + $urls = array_filter($urls, 'strlen'); + + foreach ($urls as $url) { + // We allow urls to be provided: + // - fully qualified like http://example.url/path + // - without protocol like example.url/path + // - with subdomain wildcard like .example.url/path + $prefixedUrl = 'https://' . ltrim(preg_replace('/^https?:\/\//', '', $url), '.'); + $parsedUrl = @parse_url($prefixedUrl); + if (false === $parsedUrl || !UrlHelper::isLookLikeUrl($prefixedUrl)) { + throw new Exception(Piwik::translate('SitesManager_ExceptionInvalidUrl', [$url])); + } + } + } + }; + $field->transform = function ($value) use ($self) { + return $self->checkAndReturnCommaSeparatedStringList($value); + }; + }); + } + + private function makeSiteSearch(): MeasurableProperty { return $this->makeProperty('sitesearch', $default = 1, FieldConfig::TYPE_INT, function (FieldConfig $field) { $field->title = Piwik::translate('Actions_SubmenuSitesearch'); $field->inlineHelp = Piwik::translate('SitesManager_SiteSearchUse'); $field->uiControl = FieldConfig::UI_CONTROL_SINGLE_SELECT; - $field->availableValues = array( + $field->availableValues = [ 1 => Piwik::translate('SitesManager_EnableSiteSearch'), 0 => Piwik::translate('SitesManager_DisableSiteSearch') - ); + ]; }); } @@ -265,9 +335,9 @@ class MeasurableSettings extends \Piwik\Settings\Measurable\MeasurableSettings return $this->makeSetting('use_default_site_search_params', $default = true, FieldConfig::TYPE_BOOL, function (FieldConfig $field) use ($sitesManagerApi, $settings) { if (Piwik::hasUserSuperUserAccess()) { - $title = Piwik::translate('SitesManager_SearchUseDefault', array("<a href='#globalSettings'>","</a>")); + $title = Piwik::translate('SitesManager_SearchUseDefault', ["<a href='#globalSettings'>","</a>"]); } else { - $title = Piwik::translate('SitesManager_SearchUseDefault', array('', '')); + $title = Piwik::translate('SitesManager_SearchUseDefault', ['', '']); } $field->title = $title; @@ -301,7 +371,7 @@ class MeasurableSettings extends \Piwik\Settings\Measurable\MeasurableSettings private function makeSiteSearchKeywords() { $settings = $this; - return $this->makeProperty('sitesearch_keyword_parameters', $default = array(), FieldConfig::TYPE_ARRAY, function (FieldConfig $field) use ($settings) { + return $this->makeProperty('sitesearch_keyword_parameters', $default = [], FieldConfig::TYPE_ARRAY, function (FieldConfig $field) use ($settings) { $field->title = Piwik::translate('SitesManager_SearchKeywordLabel'); $field->uiControl = FieldConfig::UI_CONTROL_TEXT; $field->inlineHelp = Piwik::translate('SitesManager_SearchKeywordParametersDesc'); @@ -317,7 +387,7 @@ class MeasurableSettings extends \Piwik\Settings\Measurable\MeasurableSettings private function makeSiteSearchCategory(Plugin\Manager $pluginManager) { - return $this->makeProperty('sitesearch_category_parameters', $default = array(), FieldConfig::TYPE_ARRAY, function (FieldConfig $field) use ($pluginManager) { + return $this->makeProperty('sitesearch_category_parameters', $default = [], FieldConfig::TYPE_ARRAY, function (FieldConfig $field) use ($pluginManager) { $field->title = Piwik::translate('SitesManager_SearchCategoryLabel'); $field->uiControl = FieldConfig::UI_CONTROL_TEXT; $field->inlineHelp = Piwik::translate('Goals_Optional') @@ -334,20 +404,22 @@ class MeasurableSettings extends \Piwik\Settings\Measurable\MeasurableSettings $field->title = Piwik::translate('Goals_Ecommerce'); $field->inlineHelp = Piwik::translate('SitesManager_EcommerceHelp') . '<br />' - . Piwik::translate('SitesManager_PiwikOffersEcommerceAnalytics', - array("<a href='https://matomo.org/docs/ecommerce-analytics/' target='_blank'>", '</a>')); + . Piwik::translate( + 'SitesManager_PiwikOffersEcommerceAnalytics', + ["<a href='https://matomo.org/docs/ecommerce-analytics/' target='_blank'>", '</a>'] + ); $field->uiControl = FieldConfig::UI_CONTROL_SINGLE_SELECT; - $field->availableValues = array( + $field->availableValues = [ 0 => Piwik::translate('SitesManager_NotAnEcommerceSite'), 1 => Piwik::translate('SitesManager_EnableEcommerce') - ); + ]; }); } public function checkAndReturnCommaSeparatedStringList($parameters) { if (empty($parameters)) { - return array(); + return []; } $parameters = array_map('trim', $parameters); @@ -355,5 +427,4 @@ class MeasurableSettings extends \Piwik\Settings\Measurable\MeasurableSettings $parameters = array_unique($parameters); return $parameters; } - } |