diff --git a/core/Menu/MenuAdmin.php b/core/Menu/MenuAdmin.php index 1c71fea04d4..0a56c7e8f89 100644 --- a/core/Menu/MenuAdmin.php +++ b/core/Menu/MenuAdmin.php @@ -110,13 +110,14 @@ public function addPluginItem(string $menuName, array $url, int $order = 50, $to * @param string $menuName * @param array $url * @param int $order - * @param bool|string $tooltip + * @param false|string $tooltip + * @param false|string $icon * @api * @since 3.0.0 */ - public function addMeasurableItem($menuName, $url, $order = 50, $tooltip = false) + public function addMeasurableItem($menuName, $url, $order = 50, $tooltip = false, $icon = false) { - $this->addItem('CoreAdminHome_MenuMeasurables', $menuName, $url, $order, $tooltip); + $this->addItem('CoreAdminHome_MenuMeasurables', $menuName, $url, $order, $tooltip, $icon); } /** diff --git a/lang/en.json b/lang/en.json index 3f498897115..ffeab11a308 100644 --- a/lang/en.json +++ b/lang/en.json @@ -30,15 +30,19 @@ "Cancel": "Cancel", "CannotUnzipFile": "Cannot unzip file %1$s: %2$s", "CanNotEditGlobalSegment": "This is a global segment. Only super users can edit global segments.", + "CanNotDeleteGlobalSegment": "This is a global segment. Only super users can delete global segments.", "CanNotStarGlobalSegment": "This is a global segment. Only super users can star global segments.", "CanNotUnstarGlobalSegment": "This is a global segment. Only super users can unstar global segments.", "CanEditGlobalSegment": "This is a global segment. Any changes will apply across all websites.", + "CanDeleteGlobalSegment": "This is a global segment. Deleting will apply across all websites.", "CanStarGlobalSegment": "This is a global segment. Adding to Starred will apply across all websites.", "CanUnstarGlobalSegment": "This is a global segment. Removing from Starred will apply across all websites.", "CanNotEditSiteSegment": "You can only edit the segments you created yourself.", + "CanNotDeleteSiteSegment": "You can only delete the segments you created yourself.", "CanNotStarSiteSegment": "You can only add to Starred the segments you created yourself.", "CanNotUnstarSiteSegment": "You can only remove from Starred the segments you created yourself.", "CanEditSiteSegment": "Edit the segment for this website.", + "CanDeleteSiteSegment": "Delete the segment for this website.", "CanStarSiteSegment": "Add to Starred segments for this website.", "CanUnstarSiteSegment": "Remove from Starred segments for this website.", "ChangeInX": "Change in %1$s", @@ -70,6 +74,8 @@ "ColumnDestinationPage": "Destination Page", "ColumnEntrances": "Entrances", "ColumnEntrancesDocumentation": "Number of visits that started on this page.", + "ColumnEvolutionVisits": "Evolution Visits", + "ColumnEvolutionVisitsDocumentation": "The percentage change of visits compared to the previous period. A positive value indicates growth, while a negative value signals a decrease.", "ColumnExitRate": "Exit rate", "ColumnExitRateDocumentation": "The percentage of visits that left the website after viewing this page.", "ColumnExits": "Exits", @@ -95,6 +101,8 @@ "ColumnPercentageVisits": "%% Visits", "ColumnPercentageVisitsDocumentation": "The percentage of total visits.", "ColumnRevenue": "Revenue", + "ColumnSegment": "Segment", + "ColumnSegmentDocumentation": "A segment is a set of criteria used to select only a part of the entire set of visits.", "ColumnSumTimeOnSite": "Total Time on Website", "ColumnSumVisitLength": "Total time spent by visitors (in seconds)", "ColumnTotalPageviews": "Total Pageviews", diff --git a/plugins/CoreHome/stylesheets/dataTable/_dataTable.less b/plugins/CoreHome/stylesheets/dataTable/_dataTable.less index 7bccb34220a..251c14dbc91 100644 --- a/plugins/CoreHome/stylesheets/dataTable/_dataTable.less +++ b/plugins/CoreHome/stylesheets/dataTable/_dataTable.less @@ -101,7 +101,9 @@ body>.widget table.dataTable { } // for dataTables in report pages (not for widgets in the dashboard) -.theWidgetContent .card .card-content table.dataTable, table.dataTable, table.subDataTable { +.theWidgetContent .card .card-content table.dataTable, +table.dataTable, +table.subDataTable { th { background: @theme-color-background-base !important; @@ -156,10 +158,15 @@ table.dataTable td.column { white-space: nowrap; } -.dataTable tr.highlight td { +.dataTable tr.highlight td, +.dataTable_row-highlight td { font-weight: bold; } +tr:nth-last-child(1 of .dataTable_row-group) td { + border-bottom: 3px solid @theme-color-background-tinyContrast !important; +} + table.dataTable th.label, table.dataTable td.label, table.subActionsDataTable td.label, diff --git a/plugins/CoreHome/stylesheets/dataTable/_entityTable.less b/plugins/CoreHome/stylesheets/dataTable/_entityTable.less index 8bcac416490..ae47f1adb2c 100644 --- a/plugins/CoreHome/stylesheets/dataTable/_entityTable.less +++ b/plugins/CoreHome/stylesheets/dataTable/_entityTable.less @@ -50,6 +50,45 @@ table.entityTable { } } } + + th.entityTable_Numeric { + text-align: right !important; + } + td.entityTable_Numeric { + text-align: right; + font-variant-numeric: tabular-nums; + } + + .entityTable_Sparkline { + padding: 0; + width: 100px; + } +} + +.entityTable_StarCell, +table.entityTable tbody tr .entityTable_StarCell { + width: 40px; + padding-right: 0; +} + +.entityTable_Filler, +table.entityTable tbody tr .entityTable_Filler { + padding: 0; +} + +.entityTable_ActionCell, +table.entityTable tbody tr .entityTable_ActionCell { + padding: 0 16px; +} + +.entityTable_ActionCell-1, +table.entityTable tbody tr .entityTable_ActionCell-1 { + width: 80px; +} + +.entityTable_ActionCell-3, +table.entityTable tbody tr .entityTable_ActionCell-3 { + width: 170px; } .table-action { @@ -71,6 +110,15 @@ table.entityTable { box-shadow: 0 1px 2px 0 rgba(0,0,0,0.16), 0 1px 5px 0 rgba(0,0,0,0.12); cursor: pointer; } + + &[data-state="disabled"] { + opacity: 0.2; + cursor: not-allowed; + } + + .entityTable_ActionCell & { + display: inline-block; + } } .card .tableActionBar { @@ -82,6 +130,11 @@ table.entityTable { } } +.tableFooterLabel { + margin-bottom: 16px; + font-style: italic; +} + .tableActionBar { a, button { @@ -105,12 +158,14 @@ table.entityTable { text-transform: uppercase; vertical-align: middle; -webkit-tap-highlight-color: transparent; + &:hover { text-decoration: none; } } - button:first-child, a:first-child { + button:first-child, + a:first-child { background-color: @theme-color-brand !important; color: @color-white; } diff --git a/plugins/CoreHome/vue/src/Sparkline/Sparkline.less b/plugins/CoreHome/vue/src/Sparkline/Sparkline.less index 2dfcf64c157..7a6a58d697d 100644 --- a/plugins/CoreHome/vue/src/Sparkline/Sparkline.less +++ b/plugins/CoreHome/vue/src/Sparkline/Sparkline.less @@ -2,3 +2,22 @@ img.sparklineImg { width: 100px; height: 25px; } + +.sparklineEvolution { + color: black; + font-size: 12px; + white-space: nowrap; +} + +.sparklineEvolution-positive { + color: green; +} + +.sparklineEvolution-negative { + color: red; +} + +.sparklineEvolution_icon { + margin-right: 1em; + vertical-align: middle; +} diff --git a/plugins/CoreVue/types/index.d.ts b/plugins/CoreVue/types/index.d.ts index 5f1c4f0df84..9f67bef17af 100644 --- a/plugins/CoreVue/types/index.d.ts +++ b/plugins/CoreVue/types/index.d.ts @@ -83,6 +83,7 @@ declare global { interface PiwikHelperGlobal { escape(text: string): string; redirect(params?: any); + getCurrentQueryStringWithParametersModified(newparams: string); htmlDecode(encoded: string): string; htmlEntities(value: string): string; modalConfirm(element: JQuery|HTMLElement|string, callbacks?: ModalConfirmCallbacks, options?: ModalConfirmOptions); diff --git a/plugins/CustomDimensions/tests/System/expected/test___API.getReportPagesMetadata.xml b/plugins/CustomDimensions/tests/System/expected/test___API.getReportPagesMetadata.xml index dc2ab4a83b1..87d3c6e0620 100644 --- a/plugins/CustomDimensions/tests/System/expected/test___API.getReportPagesMetadata.xml +++ b/plugins/CustomDimensions/tests/System/expected/test___API.getReportPagesMetadata.xml @@ -1565,4 +1565,35 @@ - \ No newline at end of file + + General_Visitors.CoreHome_Segments + + General_Visitors + Visitors + 5 + icon-reporting-visitors + <p>The Visitors pages tell you things about who your visitors are. Things like where your visitors came from, what devices and browsers they're using and when they generally visit your website. Understand, in the aggregate, who your audience is, and look for outliers to see how your audience could grow.</p><p>In addition to general information about your visitors, you can also use the <a href="#" onclick="this.href=broadcast.buildReportingUrl('category=General_Visitors&subcategory=Live_VisitorLog')">Visits Log</a> to see what occurred in every individual visit.</p> + + + + CoreHome_Segments + Segments + 99 + + + + + Segments + SegmentEditor + manageSegments + 99 + + SegmentEditor + manageSegments + + widgetSegmentEditormanageSegments + 0 + + + + diff --git a/plugins/CustomDimensions/tests/UI/expected-screenshots/CustomDimensions_report_visit_mainmenu.png b/plugins/CustomDimensions/tests/UI/expected-screenshots/CustomDimensions_report_visit_mainmenu.png index f76ce1962b0..4bf91d4422b 100644 --- a/plugins/CustomDimensions/tests/UI/expected-screenshots/CustomDimensions_report_visit_mainmenu.png +++ b/plugins/CustomDimensions/tests/UI/expected-screenshots/CustomDimensions_report_visit_mainmenu.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7e871cf2b85a7342016772411034b40b4ce3cf1c75763dfb9d9beccfd537cc0d -size 32273 +oid sha256:68f11338406c2c78b9028361c5e9bdbe7ab0248a25a236f5f46da8476f947012 +size 33543 diff --git a/plugins/Goals/Menu.php b/plugins/Goals/Menu.php index 93cdb3b19ab..b25dc81958f 100644 --- a/plugins/Goals/Menu.php +++ b/plugins/Goals/Menu.php @@ -22,7 +22,7 @@ public function configureAdminMenu(MenuAdmin $menu) $idSite = $this->getIdSite($userPreferences->getDefaultWebsiteId()); if (Piwik::isUserHasWriteAccess($idSite)) { - $menu->addMeasurableItem('Goals_Goals', $this->urlForAction('manage', array('idSite' => $idSite)), 40); + $menu->addMeasurableItem('Goals_Goals', $this->urlForAction('manage', array('idSite' => $idSite)), 15); } } diff --git a/plugins/Morpheus/stylesheets/ui/_cards.less b/plugins/Morpheus/stylesheets/ui/_cards.less index b8acd3bae86..f1796bbe667 100644 --- a/plugins/Morpheus/stylesheets/ui/_cards.less +++ b/plugins/Morpheus/stylesheets/ui/_cards.less @@ -59,7 +59,12 @@ h1, } } -.card-table + .tableActionBar { +.card-introduction { + max-width: 900px; +} + +.card-table + .tableActionBar, +.tableFooterLabel + .tableActionBar { margin: 0 0 0 -20px; } diff --git a/plugins/ScheduledReports/ScheduledReports.php b/plugins/ScheduledReports/ScheduledReports.php index 4f39104d145..8f32bd9b4df 100644 --- a/plugins/ScheduledReports/ScheduledReports.php +++ b/plugins/ScheduledReports/ScheduledReports.php @@ -153,7 +153,7 @@ public function getClientSideTranslationKeys(&$translationKeys) $translationKeys[] = 'ScheduledReports_ReportIncludeNWebsites'; $translationKeys[] = 'SegmentEditor_LoadingSegmentedDataMayTakeSomeTime'; $translationKeys[] = 'General_Download'; - $translationKeys[] = 'ScheduledReports_Segment_HelpScheduledReport'; + $translationKeys[] = 'ScheduledReports_HelpSegmentManagement'; $translationKeys[] = 'SegmentEditor_AddNewSegment'; $translationKeys[] = 'ScheduledReports_SentToMe'; $translationKeys[] = 'ScheduledReports_AlsoSendReportToTheseEmails'; diff --git a/plugins/ScheduledReports/lang/en.json b/plugins/ScheduledReports/lang/en.json index e96eaa80584..8ffc20aae10 100644 --- a/plugins/ScheduledReports/lang/en.json +++ b/plugins/ScheduledReports/lang/en.json @@ -36,7 +36,7 @@ "ReportUpdated": "Report updated", "ReportAdded": "Report added", "Segment_Deletion_Error": "This segment cannot be deleted or made invisible to other users because it is used to generate email report(s) %s. Please retry after removing this segment from this report(s).", - "Segment_HelpScheduledReport": "You can select an existing custom segment to apply to data in this scheduled report. You may create and edit custom segments in your dashboard %1$s(click here to open)%2$s, then click on the \"%3$s\" box, then \"%4$s\".", + "HelpSegmentManagement": "You can select an existing custom segment to apply to data in this scheduled report. You may create and edit custom segments in the dedicated segments management page %1$s(click here to open)%2$s.", "SegmentAppliedToReports": "The segment '%s' is applied to the reports.", "SegmentDeleted": "Segment deleted", "SendReportNow": "Send Report now", diff --git a/plugins/ScheduledReports/vue/dist/ScheduledReports.umd.js b/plugins/ScheduledReports/vue/dist/ScheduledReports.umd.js index 71ee0342cf7..ce1bc6676d2 100644 --- a/plugins/ScheduledReports/vue/dist/ScheduledReports.umd.js +++ b/plugins/ScheduledReports/vue/dist/ScheduledReports.umd.js @@ -348,26 +348,26 @@ function ManageScheduledReportvue_type_template_id_038aa0f7_render(_ctx, _cache, // EXTERNAL MODULE: external "CoreHome" var external_CoreHome_ = __webpack_require__("19dc"); -// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-babel/node_modules/cache-loader/dist/cjs.js??ref--13-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--1-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--1-1!./plugins/ScheduledReports/vue/src/AddReport/AddReport.vue?vue&type=template&id=711546b4 +// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-babel/node_modules/cache-loader/dist/cjs.js??ref--13-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--1-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--1-1!./plugins/ScheduledReports/vue/src/AddReport/AddReport.vue?vue&type=template&id=67aaa7f8 -const AddReportvue_type_template_id_711546b4_hoisted_1 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", { +const AddReportvue_type_template_id_67aaa7f8_hoisted_1 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", { class: "clear" }, null, -1); -const AddReportvue_type_template_id_711546b4_hoisted_2 = { +const AddReportvue_type_template_id_67aaa7f8_hoisted_2 = { key: 0 }; -const AddReportvue_type_template_id_711546b4_hoisted_3 = ["innerHTML"]; -const AddReportvue_type_template_id_711546b4_hoisted_4 = { +const AddReportvue_type_template_id_67aaa7f8_hoisted_3 = ["innerHTML"]; +const AddReportvue_type_template_id_67aaa7f8_hoisted_4 = { id: "emailScheduleInlineHelp", class: "inline-help-node" }; -const AddReportvue_type_template_id_711546b4_hoisted_5 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("br", null, null, -1); -const AddReportvue_type_template_id_711546b4_hoisted_6 = { +const AddReportvue_type_template_id_67aaa7f8_hoisted_5 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("br", null, null, -1); +const AddReportvue_type_template_id_67aaa7f8_hoisted_6 = { id: "emailReportPeriodInlineHelp", class: "inline-help-node" }; -const AddReportvue_type_template_id_711546b4_hoisted_7 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("br", null, null, -1); -const AddReportvue_type_template_id_711546b4_hoisted_8 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("br", null, null, -1); +const AddReportvue_type_template_id_67aaa7f8_hoisted_7 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("br", null, null, -1); +const AddReportvue_type_template_id_67aaa7f8_hoisted_8 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("br", null, null, -1); const _hoisted_9 = { key: 0, id: "reportHourHelpText", @@ -423,7 +423,7 @@ const _hoisted_29 = { }; const _hoisted_30 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("br", null, null, -1); const _hoisted_31 = ["innerHTML"]; -function AddReportvue_type_template_id_711546b4_render(_ctx, _cache, $props, $setup, $data, $options) { +function AddReportvue_type_template_id_67aaa7f8_render(_ctx, _cache, $props, $setup, $data, $options) { const _component_Field = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["resolveComponent"])("Field"); const _component_SelectedReportsList = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["resolveComponent"])("SelectedReportsList"); const _component_SaveButton = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["resolveComponent"])("SaveButton"); @@ -433,7 +433,7 @@ function AddReportvue_type_template_id_711546b4_render(_ctx, _cache, $props, $se class: "entityAddContainer", "content-title": _ctx.contentTitle }, { - default: Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withCtx"])(() => [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("p", null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('ScheduledReports_CreateTooltip')), 1), AddReportvue_type_template_id_711546b4_hoisted_1, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])((Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("form", { + default: Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withCtx"])(() => [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("p", null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('ScheduledReports_CreateTooltip')), 1), AddReportvue_type_template_id_67aaa7f8_hoisted_1, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])((Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("form", { id: "addEditReport", onSubmit: _cache[13] || (_cache[13] = $event => _ctx.$emit('submit')) }, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_Field, { @@ -452,7 +452,7 @@ function AddReportvue_type_template_id_711546b4_render(_ctx, _cache, $props, $se value: $event })), "inline-help": _ctx.translate('ScheduledReports_DescriptionOnFirstPageScheduledReport') - }, null, 8, ["title", "model-value", "inline-help"])]), _ctx.segmentEditorActivated ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", AddReportvue_type_template_id_711546b4_hoisted_2, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_Field, { + }, null, 8, ["title", "model-value", "inline-help"])]), _ctx.segmentEditorActivated ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", AddReportvue_type_template_id_67aaa7f8_hoisted_2, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_Field, { uicontrol: "select", name: "report_segment", title: _ctx.translate('SegmentEditor_ChooseASegment'), @@ -468,7 +468,7 @@ function AddReportvue_type_template_id_711546b4_render(_ctx, _cache, $props, $se id: "reportSegmentInlineHelp", class: "inline-help-node", innerHTML: _ctx.$sanitize(_ctx.reportSegmentInlineHelp) - }, null, 8, AddReportvue_type_template_id_711546b4_hoisted_3)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true)]), + }, null, 8, AddReportvue_type_template_id_67aaa7f8_hoisted_3)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true)]), _: 1 }, 8, ["title", "model-value", "options"])])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_Field, { uicontrol: "select", @@ -487,7 +487,7 @@ function AddReportvue_type_template_id_711546b4_render(_ctx, _cache, $props, $se title: _ctx.translate('ScheduledReports_ReportSchedule'), options: _ctx.periods }, { - "inline-help": Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withCtx"])(() => [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", AddReportvue_type_template_id_711546b4_hoisted_4, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createTextVNode"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('ScheduledReports_WeeklyScheduleHelp')) + " ", 1), AddReportvue_type_template_id_711546b4_hoisted_5, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createTextVNode"])(" " + Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('ScheduledReports_MonthlyScheduleHelp')), 1)])]), + "inline-help": Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withCtx"])(() => [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", AddReportvue_type_template_id_67aaa7f8_hoisted_4, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createTextVNode"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('ScheduledReports_WeeklyScheduleHelp')) + " ", 1), AddReportvue_type_template_id_67aaa7f8_hoisted_5, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createTextVNode"])(" " + Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('ScheduledReports_MonthlyScheduleHelp')), 1)])]), _: 1 }, 8, ["model-value", "title", "options"])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_Field, { uicontrol: "select", @@ -500,7 +500,7 @@ function AddReportvue_type_template_id_711546b4_render(_ctx, _cache, $props, $se options: _ctx.paramPeriods, title: _ctx.translate('ScheduledReports_ReportPeriod') }, { - "inline-help": Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withCtx"])(() => [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", AddReportvue_type_template_id_711546b4_hoisted_6, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createTextVNode"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('ScheduledReports_ScheduleReportPeriodHelp')) + " ", 1), AddReportvue_type_template_id_711546b4_hoisted_7, AddReportvue_type_template_id_711546b4_hoisted_8, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createTextVNode"])(" " + Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('ScheduledReports_ScheduleReportPeriodHelp2')), 1)])]), + "inline-help": Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withCtx"])(() => [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", AddReportvue_type_template_id_67aaa7f8_hoisted_6, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createTextVNode"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('ScheduledReports_ScheduleReportPeriodHelp')) + " ", 1), AddReportvue_type_template_id_67aaa7f8_hoisted_7, AddReportvue_type_template_id_67aaa7f8_hoisted_8, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createTextVNode"])(" " + Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('ScheduledReports_ScheduleReportPeriodHelp2')), 1)])]), _: 1 }, 8, ["model-value", "options", "title"])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_Field, { uicontrol: "select", @@ -640,7 +640,7 @@ function AddReportvue_type_template_id_711546b4_render(_ctx, _cache, $props, $se _: 3 }, 8, ["content-title"]); } -// CONCATENATED MODULE: ./plugins/ScheduledReports/vue/src/AddReport/AddReport.vue?vue&type=template&id=711546b4 +// CONCATENATED MODULE: ./plugins/ScheduledReports/vue/src/AddReport/AddReport.vue?vue&type=template&id=67aaa7f8 // CONCATENATED MODULE: ./plugins/ScheduledReports/vue/src/utilities.ts /*! @@ -1035,7 +1035,9 @@ SelectedReportsListvue_type_script_lang_ts.render = SelectedReportsListvue_type_ return Object(external_CoreHome_["translate"])('ScheduledReports_EvolutionGraphsShowForEachInPeriod', '', '', this.frequencyPeriodSingle); }, reportSegmentInlineHelp() { - return Object(external_CoreHome_["translate"])('ScheduledReports_Segment_HelpScheduledReport', '', '', Object(external_CoreHome_["translate"])('SegmentEditor_DefaultAllVisits'), Object(external_CoreHome_["translate"])('SegmentEditor_AddNewSegment')); + const segmentManagementPageParams = ['module=CoreHome', 'action=index', 'category=General_Visitors', 'subcategory=CoreHome_Segments'].join('&'); + const segmentManagementPageUrl = piwikHelper.getCurrentQueryStringWithParametersModified(segmentManagementPageParams); + return Object(external_CoreHome_["translate"])('ScheduledReports_HelpSegmentManagement', ``, ''); }, timezoneOffset() { return external_CoreHome_["Matomo"].timezoneOffset; @@ -1090,7 +1092,7 @@ SelectedReportsListvue_type_script_lang_ts.render = SelectedReportsListvue_type_ -AddReportvue_type_script_lang_ts.render = AddReportvue_type_template_id_711546b4_render +AddReportvue_type_script_lang_ts.render = AddReportvue_type_template_id_67aaa7f8_render /* harmony default export */ var AddReport = (AddReportvue_type_script_lang_ts); // CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-babel/node_modules/cache-loader/dist/cjs.js??ref--13-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--1-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--1-1!./plugins/ScheduledReports/vue/src/ListReports/ListReports.vue?vue&type=template&id=0bb9d0fc diff --git a/plugins/ScheduledReports/vue/dist/ScheduledReports.umd.min.js b/plugins/ScheduledReports/vue/dist/ScheduledReports.umd.min.js index 889872a38b9..69c7699a1cc 100644 --- a/plugins/ScheduledReports/vue/dist/ScheduledReports.umd.min.js +++ b/plugins/ScheduledReports/vue/dist/ScheduledReports.umd.min.js @@ -4,13 +4,13 @@ * * @link https://matomo.org * @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later - */const i={key:0};function a(e,t,r,o,n,a){const c=Object(l["resolveComponent"])("Field");return e.report?(Object(l["openBlock"])(),Object(l["createElementBlock"])("div",i,[Object(l["createElementVNode"])("div",null,[Object(l["withDirectives"])(Object(l["createVNode"])(c,{uicontrol:"checkbox",name:"report_email_me",introduction:e.translate("ScheduledReports_SendReportTo"),"model-value":e.report.emailMe,"onUpdate:modelValue":t[0]||(t[0]=t=>e.$emit("change","emailMe",t)),title:`${e.translate("ScheduledReports_SentToMe")} (${e.currentUserEmail})`},null,8,["introduction","model-value","title"]),[[l["vShow"],"email"===e.report.type]])]),Object(l["createElementVNode"])("div",null,[Object(l["withDirectives"])(Object(l["createVNode"])(c,{uicontrol:"textarea","var-type":"array","model-value":e.report.additionalEmails,"onUpdate:modelValue":t[1]||(t[1]=t=>e.$emit("change","additionalEmails",t)),title:e.translate("ScheduledReports_AlsoSendReportToTheseEmails")},null,8,["model-value","title"]),[[l["vShow"],"email"===e.report.type]])])])):Object(l["createCommentVNode"])("",!0)}var c=r("a5a2"),s=Object(l["defineComponent"])({props:{report:{type:Object,required:!0},reportType:{type:String,required:!0},defaultDisplayFormat:{type:Number,required:!0},defaultEmailMe:{type:Boolean,required:!0},defaultEvolutionGraph:{type:Boolean,required:!0},currentUserEmail:{type:String,required:!0}},emits:["change"],components:{Field:c["Field"]},setup(e){const{resetReportParametersFunctions:t,updateReportParametersFunctions:r,getReportParametersFunctions:o}=window;t[e.reportType]||(t[e.reportType]=t=>{t.displayFormat=e.defaultDisplayFormat,t.emailMe=e.defaultEmailMe,t.evolutionGraph=e.defaultEvolutionGraph,t.additionalEmails=[]}),r[e.reportType]||(r[e.reportType]=e=>{null!==e&&void 0!==e&&e.parameters&&["displayFormat","emailMe","evolutionGraph","additionalEmails"].forEach(t=>{t in e.parameters&&(e[t]=e.parameters[t])})}),o[e.reportType]||(o[e.reportType]=e=>({displayFormat:e.displayFormat,emailMe:e.emailMe,evolutionGraph:e.evolutionGraph,additionalEmails:e.additionalEmails||[],enforceOrder:!0}))}});s.render=a;var d=s;const p={class:"emailReports",ref:"root"},u={ref:"reportSentSuccess"},m={ref:"reportUpdatedSuccess"},b=Object(l["createElementVNode"])("div",{id:"ajaxError",style:{display:"none"}},null,-1),O={id:"ajaxLoadingDiv",style:{display:"none"}},h={class:"loadingPiwik"},y={class:"loadingSegment"},j=Object(l["createElementVNode"])("a",{id:"bottom"},null,-1);function g(e,t,r,o,n,i){const a=Object(l["resolveComponent"])("MatomoLoader"),c=Object(l["resolveComponent"])("ListReports"),s=Object(l["resolveComponent"])("AddReport");return Object(l["openBlock"])(),Object(l["createElementBlock"])("div",p,[Object(l["createElementVNode"])("div",u,null,512),Object(l["createElementVNode"])("div",m,null,512),Object(l["createElementVNode"])("div",null,[b,Object(l["createElementVNode"])("div",O,[Object(l["createElementVNode"])("div",h,[Object(l["createVNode"])(a),Object(l["createTextVNode"])(" "+Object(l["toDisplayString"])(e.translate("General_LoadingData")),1)]),Object(l["createElementVNode"])("div",y,Object(l["toDisplayString"])(e.translate("SegmentEditor_LoadingSegmentedDataMayTakeSomeTime")),1)]),Object(l["withDirectives"])(Object(l["createVNode"])(c,{"content-title":e.contentTitle,"user-login":e.userLogin,"login-module":e.loginModule,reports:e.reports,"site-name":e.decodedSiteName,"segment-editor-activated":e.segmentEditorActivated,"saved-segments-by-id":e.savedSegmentsById,periods:e.periods,"report-types":e.reportTypes,"download-output-type":e.downloadOutputType,language:e.language,"report-formats-by-report-type":e.reportFormatsByReportType,"sending-reports":e.sendingReports,onCreate:t[0]||(t[0]=t=>e.createReport()),onEdit:t[1]||(t[1]=t=>e.editReport(t)),onDelete:t[2]||(t[2]=t=>e.deleteReport(t)),onSendnow:t[3]||(t[3]=t=>e.sendReportNow(t))},null,8,["content-title","user-login","login-module","reports","site-name","segment-editor-activated","saved-segments-by-id","periods","report-types","download-output-type","language","report-formats-by-report-type","sending-reports"]),[[l["vShow"],e.showReportsList]]),e.showReportForm?(Object(l["openBlock"])(),Object(l["createBlock"])(s,{key:0,report:e.report,periods:e.periods,"param-periods":e.paramPeriods,"report-type-options":e.reportTypeOptions,"report-formats-by-report-type-options":e.reportFormatsByReportTypeOptions,"display-formats":e.displayFormats,"reports-by-category-by-report-type":e.reportsByCategoryByReportType,"allow-multiple-reports-by-report-type":e.allowMultipleReportsByReportType,"count-websites":e.countWebsites,"site-name":e.decodedSiteName,"selected-reports":e.selectedReports,"selected-reports-order":e.selectedReportsOrder,"report-types":e.reportTypes,"segment-editor-activated":e.segmentEditorActivated,"saved-segments-by-id":e.savedSegmentsById,onToggleSelectedReport:t[4]||(t[4]=t=>e.toggleSelectedReport(t.reportType,t.uniqueId)),onReorderSelectedReports:t[5]||(t[5]=t=>e.onReorderSelectedReports(t.reportType,t.order)),onChange:t[6]||(t[6]=t=>e.onChangeProperty(t.prop,t.value)),onSubmit:t[7]||(t[7]=t=>e.submitReport())},{"report-parameters":Object(l["withCtx"])(()=>[Object(l["renderSlot"])(e.$slots,"report-parameters")]),_:3},8,["report","periods","param-periods","report-type-options","report-formats-by-report-type-options","display-formats","reports-by-category-by-report-type","allow-multiple-reports-by-report-type","count-websites","site-name","selected-reports","selected-reports-order","report-types","segment-editor-activated","saved-segments-by-id"])):Object(l["createCommentVNode"])("",!0),j])],512)}var v=r("19dc");const R=Object(l["createElementVNode"])("div",{class:"clear"},null,-1),f={key:0},S=["innerHTML"],E={id:"emailScheduleInlineHelp",class:"inline-help-node"},N=Object(l["createElementVNode"])("br",null,null,-1),k={id:"emailReportPeriodInlineHelp",class:"inline-help-node"},V=Object(l["createElementVNode"])("br",null,null,-1),B=Object(l["createElementVNode"])("br",null,null,-1),w={key:0,id:"reportHourHelpText",class:"inline-help-node"},T=["textContent"],_={id:"deliveryMediumnInlineHelp",class:"inline-help-node"},C=["innerHTML"],P={ref:"reportParameters"},F={class:"report_evolution_graph"},D={class:"row evolution-graph-period"},M={class:"col s12"},q={for:"report_evolution_period_for_each"},x=["checked"],L=["innerHTML"],I={class:"col s12"},H={for:"report_evolution_period_for_prev"},A=["checked"],U=["value"],G={class:"row"},z={class:"col s12"},W={class:"reportCategory"},Z={class:"listReports"},K=["name","type","id","checked","onChange"],X={key:0,class:"entityInlineHelp"},J=Object(l["createElementVNode"])("br",null,null,-1),Q=["innerHTML"];function Y(e,t,r,o,n,i){const a=Object(l["resolveComponent"])("Field"),c=Object(l["resolveComponent"])("SelectedReportsList"),s=Object(l["resolveComponent"])("SaveButton"),d=Object(l["resolveComponent"])("ContentBlock"),p=Object(l["resolveDirective"])("form");return Object(l["openBlock"])(),Object(l["createBlock"])(d,{class:"entityAddContainer","content-title":e.contentTitle},{default:Object(l["withCtx"])(()=>[Object(l["createElementVNode"])("p",null,Object(l["toDisplayString"])(e.translate("ScheduledReports_CreateTooltip")),1),R,Object(l["withDirectives"])((Object(l["openBlock"])(),Object(l["createElementBlock"])("form",{id:"addEditReport",onSubmit:t[13]||(t[13]=t=>e.$emit("submit"))},[Object(l["createElementVNode"])("div",null,[Object(l["createVNode"])(a,{uicontrol:"text",name:"website",title:e.translate("General_Website"),disabled:!0,"model-value":e.siteName},null,8,["title","model-value"])]),Object(l["createElementVNode"])("div",null,[Object(l["createVNode"])(a,{uicontrol:"textarea",name:"report_description",title:e.translate("General_Description"),"model-value":e.report.description,"onUpdate:modelValue":t[0]||(t[0]=t=>e.$emit("change",{prop:"description",value:t})),"inline-help":e.translate("ScheduledReports_DescriptionOnFirstPageScheduledReport")},null,8,["title","model-value","inline-help"])]),e.segmentEditorActivated?(Object(l["openBlock"])(),Object(l["createElementBlock"])("div",f,[Object(l["createVNode"])(a,{uicontrol:"select",name:"report_segment",title:e.translate("SegmentEditor_ChooseASegment"),"model-value":e.report.idsegment,"onUpdate:modelValue":t[1]||(t[1]=t=>e.$emit("change",{prop:"idsegment",value:t})),options:e.savedSegmentsById},{"inline-help":Object(l["withCtx"])(()=>[e.segmentEditorActivated?(Object(l["openBlock"])(),Object(l["createElementBlock"])("div",{key:0,id:"reportSegmentInlineHelp",class:"inline-help-node",innerHTML:e.$sanitize(e.reportSegmentInlineHelp)},null,8,S)):Object(l["createCommentVNode"])("",!0)]),_:1},8,["title","model-value","options"])])):Object(l["createCommentVNode"])("",!0),Object(l["createElementVNode"])("div",null,[Object(l["createVNode"])(a,{uicontrol:"select",name:"report_schedule","model-value":e.report.period,"onUpdate:modelValue":t[2]||(t[2]=t=>{e.$emit("change",{prop:"period",value:t}),e.$emit("change",{prop:"periodParam",value:"never"===e.report.period?null:e.report.period})}),title:e.translate("ScheduledReports_ReportSchedule"),options:e.periods},{"inline-help":Object(l["withCtx"])(()=>[Object(l["createElementVNode"])("div",E,[Object(l["createTextVNode"])(Object(l["toDisplayString"])(e.translate("ScheduledReports_WeeklyScheduleHelp"))+" ",1),N,Object(l["createTextVNode"])(" "+Object(l["toDisplayString"])(e.translate("ScheduledReports_MonthlyScheduleHelp")),1)])]),_:1},8,["model-value","title","options"])]),Object(l["createElementVNode"])("div",null,[Object(l["createVNode"])(a,{uicontrol:"select",name:"report_period","model-value":e.report.periodParam,"onUpdate:modelValue":t[3]||(t[3]=t=>e.$emit("change",{prop:"periodParam",value:t})),options:e.paramPeriods,title:e.translate("ScheduledReports_ReportPeriod")},{"inline-help":Object(l["withCtx"])(()=>[Object(l["createElementVNode"])("div",k,[Object(l["createTextVNode"])(Object(l["toDisplayString"])(e.translate("ScheduledReports_ScheduleReportPeriodHelp"))+" ",1),V,B,Object(l["createTextVNode"])(" "+Object(l["toDisplayString"])(e.translate("ScheduledReports_ScheduleReportPeriodHelp2")),1)])]),_:1},8,["model-value","options","title"])]),Object(l["createElementVNode"])("div",null,[Object(l["createVNode"])(a,{uicontrol:"select",name:"report_hour","model-value":e.report.hour,"onUpdate:modelValue":t[4]||(t[4]=t=>e.$emit("change",{prop:"hour",value:t})),title:e.translate("ScheduledReports_ReportHour","X"),options:e.reportHours},{"inline-help":Object(l["withCtx"])(()=>[0!==e.timezoneOffset&&"0"!==e.timezoneOffset?(Object(l["openBlock"])(),Object(l["createElementBlock"])("div",w,[Object(l["createElementVNode"])("span",{textContent:Object(l["toDisplayString"])(e.reportHourUtc)},null,8,T)])):Object(l["createCommentVNode"])("",!0)]),_:1},8,["model-value","title","options"])]),Object(l["createElementVNode"])("div",null,[Object(l["createVNode"])(a,{uicontrol:"select",name:"report_type",disabled:1===e.reportTypes.length,"model-value":e.report.type,"onUpdate:modelValue":t[5]||(t[5]=t=>e.$emit("change",{prop:"type",value:t})),title:e.translate("ScheduledReports_ReportType"),options:e.reportTypeOptions},{"inline-help":Object(l["withCtx"])(()=>[Object(l["createElementVNode"])("div",_,[Object(l["createElementVNode"])("span",{innerHTML:e.$sanitize(e.getDeliveryMediumInlineTooltip)},null,8,C)])]),_:1},8,["disabled","model-value","title","options"])]),Object(l["createElementVNode"])("div",P,[Object(l["renderSlot"])(e.$slots,"report-parameters")],512),(Object(l["openBlock"])(!0),Object(l["createElementBlock"])(l["Fragment"],null,Object(l["renderList"])(e.reportFormatsByReportTypeOptions,(t,r)=>(Object(l["openBlock"])(),Object(l["createElementBlock"])("div",{key:r},[Object(l["withDirectives"])(Object(l["createVNode"])(a,{uicontrol:"select",name:"report_format",title:e.translate("ScheduledReports_ReportFormat"),class:Object(l["normalizeClass"])(r),"model-value":e.report["format"+r],"onUpdate:modelValue":t=>e.$emit("change",{prop:"format"+r,value:t}),options:t},null,8,["title","class","model-value","onUpdate:modelValue","options"]),[[l["vShow"],e.report.type===r]])]))),128)),Object(l["withDirectives"])(Object(l["createElementVNode"])("div",null,[Object(l["createElementVNode"])("div",{class:Object(l["normalizeClass"])(e.report.type)},[Object(l["createVNode"])(a,{uicontrol:"select",name:"display_format","model-value":e.report.displayFormat,"onUpdate:modelValue":t[6]||(t[6]=t=>e.$emit("change",{prop:"displayFormat",value:t})),options:e.displayFormats,introduction:e.translate("ScheduledReports_AggregateReportsFormat")},null,8,["model-value","options","introduction"])],2),Object(l["createElementVNode"])("div",F,[Object(l["withDirectives"])(Object(l["createVNode"])(a,{uicontrol:"checkbox",name:"report_evolution_graph",title:e.translate("ScheduledReports_EvolutionGraph",5),"model-value":e.report.evolutionGraph,"onUpdate:modelValue":t[7]||(t[7]=t=>e.$emit("change",{prop:"evolutionGraph",value:t}))},null,8,["title","model-value"]),[[l["vShow"],-1!==[2,"2",3,"3"].indexOf(e.report.displayFormat)]])]),Object(l["withDirectives"])(Object(l["createElementVNode"])("div",D,[Object(l["createElementVNode"])("div",M,[Object(l["createElementVNode"])("label",q,[Object(l["createElementVNode"])("input",{id:"report_evolution_period_for_each",name:"report_evolution_period_for",type:"radio",value:"each",checked:"each"===e.report.evolutionPeriodFor,onChange:t[8]||(t[8]=t=>e.$emit("change",{prop:"evolutionPeriodFor",value:t.target.value}))},null,40,x),Object(l["createElementVNode"])("span",{innerHTML:e.$sanitize(e.evolutionGraphsShowForEachInPeriod)},null,8,L)])]),Object(l["createElementVNode"])("div",I,[Object(l["createElementVNode"])("label",H,[Object(l["createElementVNode"])("input",{id:"report_evolution_period_for_prev",name:"report_evolution_period_for",type:"radio",value:"prev",checked:"prev"===e.report.evolutionPeriodFor,onChange:t[9]||(t[9]=t=>e.$emit("change",{prop:"evolutionPeriodFor",value:t.target.value}))},null,40,A),Object(l["createElementVNode"])("span",null,[Object(l["createTextVNode"])(Object(l["toDisplayString"])(e.translate("ScheduledReports_EvolutionGraphsShowForPreviousN",e.frequencyPeriodPlural))+": ",1),Object(l["createElementVNode"])("input",{type:"number",name:"report_evolution_period_n",value:e.report.evolutionPeriodN,onKeydown:t[10]||(t[10]=t=>e.onEvolutionPeriodN(t)),onChange:t[11]||(t[11]=t=>e.onEvolutionPeriodN(t))},null,40,U)])])])],512),[[l["vShow"],-1!==[1,"1",2,"2",3,"3"].indexOf(e.report.displayFormat)]])],512),[[l["vShow"],"pdf"===e.report["format"+e.report.type]||"html"===e.report["format"+e.report.type]]]),Object(l["createElementVNode"])("div",G,[Object(l["createElementVNode"])("h3",z,Object(l["toDisplayString"])(e.translate("ScheduledReports_ReportsIncluded")),1)]),(Object(l["openBlock"])(!0),Object(l["createElementBlock"])(l["Fragment"],null,Object(l["renderList"])(e.reportsByCategoryByReportTypeInColumns,(t,r)=>Object(l["withDirectives"])((Object(l["openBlock"])(),Object(l["createElementBlock"])("div",{name:"reportsList",class:Object(l["normalizeClass"])("row "+r),key:r},[(Object(l["openBlock"])(!0),Object(l["createElementBlock"])(l["Fragment"],null,Object(l["renderList"])(t,(t,o)=>(Object(l["openBlock"])(),Object(l["createElementBlock"])("div",{class:"col s12 m6",key:o},[(Object(l["openBlock"])(!0),Object(l["createElementBlock"])(l["Fragment"],null,Object(l["renderList"])(t,(t,o)=>(Object(l["openBlock"])(),Object(l["createElementBlock"])("div",{key:o},[Object(l["createElementVNode"])("h3",W,Object(l["toDisplayString"])(o),1),Object(l["createElementVNode"])("ul",Z,[(Object(l["openBlock"])(!0),Object(l["createElementBlock"])(l["Fragment"],null,Object(l["renderList"])(t,t=>{var o;return Object(l["openBlock"])(),Object(l["createElementBlock"])("li",{key:t.uniqueId},[Object(l["createElementVNode"])("label",null,[Object(l["createElementVNode"])("input",{name:r+"Reports",type:e.allowMultipleReportsByReportType[r]?"checkbox":"radio",id:`${r}${t.uniqueId}`,checked:null===(o=e.selectedReports[r])||void 0===o?void 0:o[t.uniqueId],onChange:o=>e.$emit("toggleSelectedReport",{reportType:r,uniqueId:t.uniqueId})},null,40,K),Object(l["createElementVNode"])("span",null,Object(l["toDisplayString"])(e.decode(t.name)),1),"MultiSites_getAll"===t.uniqueId?(Object(l["openBlock"])(),Object(l["createElementBlock"])("div",X,Object(l["toDisplayString"])(e.translate("ScheduledReports_ReportIncludeNWebsites",e.countWebsites)),1)):Object(l["createCommentVNode"])("",!0)])])}),128))]),J]))),128))]))),128))],2)),[[l["vShow"],e.report.type===r]])),128)),Object(l["createVNode"])(c,{reports:e.selectedReportsForCurrentType,enabled:e.allowMultipleReportsByReportType[e.report.type],onReorder:e.onSelectedReportsReorder},null,8,["reports","enabled","onReorder"]),Object(l["createVNode"])(s,{value:e.saveButtonTitle,onConfirm:t[12]||(t[12]=t=>e.$emit("submit"))},null,8,["value"]),Object(l["createElementVNode"])("div",{class:"entityCancel",innerHTML:e.$sanitize(e.entityCancelText)},null,8,Q)],32)),[[p]])]),_:3},8,["content-title"])} + */const i={key:0};function a(e,t,r,o,n,a){const c=Object(l["resolveComponent"])("Field");return e.report?(Object(l["openBlock"])(),Object(l["createElementBlock"])("div",i,[Object(l["createElementVNode"])("div",null,[Object(l["withDirectives"])(Object(l["createVNode"])(c,{uicontrol:"checkbox",name:"report_email_me",introduction:e.translate("ScheduledReports_SendReportTo"),"model-value":e.report.emailMe,"onUpdate:modelValue":t[0]||(t[0]=t=>e.$emit("change","emailMe",t)),title:`${e.translate("ScheduledReports_SentToMe")} (${e.currentUserEmail})`},null,8,["introduction","model-value","title"]),[[l["vShow"],"email"===e.report.type]])]),Object(l["createElementVNode"])("div",null,[Object(l["withDirectives"])(Object(l["createVNode"])(c,{uicontrol:"textarea","var-type":"array","model-value":e.report.additionalEmails,"onUpdate:modelValue":t[1]||(t[1]=t=>e.$emit("change","additionalEmails",t)),title:e.translate("ScheduledReports_AlsoSendReportToTheseEmails")},null,8,["model-value","title"]),[[l["vShow"],"email"===e.report.type]])])])):Object(l["createCommentVNode"])("",!0)}var c=r("a5a2"),s=Object(l["defineComponent"])({props:{report:{type:Object,required:!0},reportType:{type:String,required:!0},defaultDisplayFormat:{type:Number,required:!0},defaultEmailMe:{type:Boolean,required:!0},defaultEvolutionGraph:{type:Boolean,required:!0},currentUserEmail:{type:String,required:!0}},emits:["change"],components:{Field:c["Field"]},setup(e){const{resetReportParametersFunctions:t,updateReportParametersFunctions:r,getReportParametersFunctions:o}=window;t[e.reportType]||(t[e.reportType]=t=>{t.displayFormat=e.defaultDisplayFormat,t.emailMe=e.defaultEmailMe,t.evolutionGraph=e.defaultEvolutionGraph,t.additionalEmails=[]}),r[e.reportType]||(r[e.reportType]=e=>{null!==e&&void 0!==e&&e.parameters&&["displayFormat","emailMe","evolutionGraph","additionalEmails"].forEach(t=>{t in e.parameters&&(e[t]=e.parameters[t])})}),o[e.reportType]||(o[e.reportType]=e=>({displayFormat:e.displayFormat,emailMe:e.emailMe,evolutionGraph:e.evolutionGraph,additionalEmails:e.additionalEmails||[],enforceOrder:!0}))}});s.render=a;var d=s;const p={class:"emailReports",ref:"root"},u={ref:"reportSentSuccess"},m={ref:"reportUpdatedSuccess"},b=Object(l["createElementVNode"])("div",{id:"ajaxError",style:{display:"none"}},null,-1),O={id:"ajaxLoadingDiv",style:{display:"none"}},h={class:"loadingPiwik"},y={class:"loadingSegment"},j=Object(l["createElementVNode"])("a",{id:"bottom"},null,-1);function g(e,t,r,o,n,i){const a=Object(l["resolveComponent"])("MatomoLoader"),c=Object(l["resolveComponent"])("ListReports"),s=Object(l["resolveComponent"])("AddReport");return Object(l["openBlock"])(),Object(l["createElementBlock"])("div",p,[Object(l["createElementVNode"])("div",u,null,512),Object(l["createElementVNode"])("div",m,null,512),Object(l["createElementVNode"])("div",null,[b,Object(l["createElementVNode"])("div",O,[Object(l["createElementVNode"])("div",h,[Object(l["createVNode"])(a),Object(l["createTextVNode"])(" "+Object(l["toDisplayString"])(e.translate("General_LoadingData")),1)]),Object(l["createElementVNode"])("div",y,Object(l["toDisplayString"])(e.translate("SegmentEditor_LoadingSegmentedDataMayTakeSomeTime")),1)]),Object(l["withDirectives"])(Object(l["createVNode"])(c,{"content-title":e.contentTitle,"user-login":e.userLogin,"login-module":e.loginModule,reports:e.reports,"site-name":e.decodedSiteName,"segment-editor-activated":e.segmentEditorActivated,"saved-segments-by-id":e.savedSegmentsById,periods:e.periods,"report-types":e.reportTypes,"download-output-type":e.downloadOutputType,language:e.language,"report-formats-by-report-type":e.reportFormatsByReportType,"sending-reports":e.sendingReports,onCreate:t[0]||(t[0]=t=>e.createReport()),onEdit:t[1]||(t[1]=t=>e.editReport(t)),onDelete:t[2]||(t[2]=t=>e.deleteReport(t)),onSendnow:t[3]||(t[3]=t=>e.sendReportNow(t))},null,8,["content-title","user-login","login-module","reports","site-name","segment-editor-activated","saved-segments-by-id","periods","report-types","download-output-type","language","report-formats-by-report-type","sending-reports"]),[[l["vShow"],e.showReportsList]]),e.showReportForm?(Object(l["openBlock"])(),Object(l["createBlock"])(s,{key:0,report:e.report,periods:e.periods,"param-periods":e.paramPeriods,"report-type-options":e.reportTypeOptions,"report-formats-by-report-type-options":e.reportFormatsByReportTypeOptions,"display-formats":e.displayFormats,"reports-by-category-by-report-type":e.reportsByCategoryByReportType,"allow-multiple-reports-by-report-type":e.allowMultipleReportsByReportType,"count-websites":e.countWebsites,"site-name":e.decodedSiteName,"selected-reports":e.selectedReports,"selected-reports-order":e.selectedReportsOrder,"report-types":e.reportTypes,"segment-editor-activated":e.segmentEditorActivated,"saved-segments-by-id":e.savedSegmentsById,onToggleSelectedReport:t[4]||(t[4]=t=>e.toggleSelectedReport(t.reportType,t.uniqueId)),onReorderSelectedReports:t[5]||(t[5]=t=>e.onReorderSelectedReports(t.reportType,t.order)),onChange:t[6]||(t[6]=t=>e.onChangeProperty(t.prop,t.value)),onSubmit:t[7]||(t[7]=t=>e.submitReport())},{"report-parameters":Object(l["withCtx"])(()=>[Object(l["renderSlot"])(e.$slots,"report-parameters")]),_:3},8,["report","periods","param-periods","report-type-options","report-formats-by-report-type-options","display-formats","reports-by-category-by-report-type","allow-multiple-reports-by-report-type","count-websites","site-name","selected-reports","selected-reports-order","report-types","segment-editor-activated","saved-segments-by-id"])):Object(l["createCommentVNode"])("",!0),j])],512)}var v=r("19dc");const R=Object(l["createElementVNode"])("div",{class:"clear"},null,-1),f={key:0},S=["innerHTML"],E={id:"emailScheduleInlineHelp",class:"inline-help-node"},N=Object(l["createElementVNode"])("br",null,null,-1),k={id:"emailReportPeriodInlineHelp",class:"inline-help-node"},V=Object(l["createElementVNode"])("br",null,null,-1),B=Object(l["createElementVNode"])("br",null,null,-1),w={key:0,id:"reportHourHelpText",class:"inline-help-node"},T=["textContent"],_={id:"deliveryMediumnInlineHelp",class:"inline-help-node"},C=["innerHTML"],P={ref:"reportParameters"},F={class:"report_evolution_graph"},D={class:"row evolution-graph-period"},M={class:"col s12"},q={for:"report_evolution_period_for_each"},x=["checked"],L=["innerHTML"],I={class:"col s12"},H={for:"report_evolution_period_for_prev"},A=["checked"],U=["value"],G={class:"row"},z={class:"col s12"},W={class:"reportCategory"},Z={class:"listReports"},K=["name","type","id","checked","onChange"],Q={key:0,class:"entityInlineHelp"},X=Object(l["createElementVNode"])("br",null,null,-1),J=["innerHTML"];function Y(e,t,r,o,n,i){const a=Object(l["resolveComponent"])("Field"),c=Object(l["resolveComponent"])("SelectedReportsList"),s=Object(l["resolveComponent"])("SaveButton"),d=Object(l["resolveComponent"])("ContentBlock"),p=Object(l["resolveDirective"])("form");return Object(l["openBlock"])(),Object(l["createBlock"])(d,{class:"entityAddContainer","content-title":e.contentTitle},{default:Object(l["withCtx"])(()=>[Object(l["createElementVNode"])("p",null,Object(l["toDisplayString"])(e.translate("ScheduledReports_CreateTooltip")),1),R,Object(l["withDirectives"])((Object(l["openBlock"])(),Object(l["createElementBlock"])("form",{id:"addEditReport",onSubmit:t[13]||(t[13]=t=>e.$emit("submit"))},[Object(l["createElementVNode"])("div",null,[Object(l["createVNode"])(a,{uicontrol:"text",name:"website",title:e.translate("General_Website"),disabled:!0,"model-value":e.siteName},null,8,["title","model-value"])]),Object(l["createElementVNode"])("div",null,[Object(l["createVNode"])(a,{uicontrol:"textarea",name:"report_description",title:e.translate("General_Description"),"model-value":e.report.description,"onUpdate:modelValue":t[0]||(t[0]=t=>e.$emit("change",{prop:"description",value:t})),"inline-help":e.translate("ScheduledReports_DescriptionOnFirstPageScheduledReport")},null,8,["title","model-value","inline-help"])]),e.segmentEditorActivated?(Object(l["openBlock"])(),Object(l["createElementBlock"])("div",f,[Object(l["createVNode"])(a,{uicontrol:"select",name:"report_segment",title:e.translate("SegmentEditor_ChooseASegment"),"model-value":e.report.idsegment,"onUpdate:modelValue":t[1]||(t[1]=t=>e.$emit("change",{prop:"idsegment",value:t})),options:e.savedSegmentsById},{"inline-help":Object(l["withCtx"])(()=>[e.segmentEditorActivated?(Object(l["openBlock"])(),Object(l["createElementBlock"])("div",{key:0,id:"reportSegmentInlineHelp",class:"inline-help-node",innerHTML:e.$sanitize(e.reportSegmentInlineHelp)},null,8,S)):Object(l["createCommentVNode"])("",!0)]),_:1},8,["title","model-value","options"])])):Object(l["createCommentVNode"])("",!0),Object(l["createElementVNode"])("div",null,[Object(l["createVNode"])(a,{uicontrol:"select",name:"report_schedule","model-value":e.report.period,"onUpdate:modelValue":t[2]||(t[2]=t=>{e.$emit("change",{prop:"period",value:t}),e.$emit("change",{prop:"periodParam",value:"never"===e.report.period?null:e.report.period})}),title:e.translate("ScheduledReports_ReportSchedule"),options:e.periods},{"inline-help":Object(l["withCtx"])(()=>[Object(l["createElementVNode"])("div",E,[Object(l["createTextVNode"])(Object(l["toDisplayString"])(e.translate("ScheduledReports_WeeklyScheduleHelp"))+" ",1),N,Object(l["createTextVNode"])(" "+Object(l["toDisplayString"])(e.translate("ScheduledReports_MonthlyScheduleHelp")),1)])]),_:1},8,["model-value","title","options"])]),Object(l["createElementVNode"])("div",null,[Object(l["createVNode"])(a,{uicontrol:"select",name:"report_period","model-value":e.report.periodParam,"onUpdate:modelValue":t[3]||(t[3]=t=>e.$emit("change",{prop:"periodParam",value:t})),options:e.paramPeriods,title:e.translate("ScheduledReports_ReportPeriod")},{"inline-help":Object(l["withCtx"])(()=>[Object(l["createElementVNode"])("div",k,[Object(l["createTextVNode"])(Object(l["toDisplayString"])(e.translate("ScheduledReports_ScheduleReportPeriodHelp"))+" ",1),V,B,Object(l["createTextVNode"])(" "+Object(l["toDisplayString"])(e.translate("ScheduledReports_ScheduleReportPeriodHelp2")),1)])]),_:1},8,["model-value","options","title"])]),Object(l["createElementVNode"])("div",null,[Object(l["createVNode"])(a,{uicontrol:"select",name:"report_hour","model-value":e.report.hour,"onUpdate:modelValue":t[4]||(t[4]=t=>e.$emit("change",{prop:"hour",value:t})),title:e.translate("ScheduledReports_ReportHour","X"),options:e.reportHours},{"inline-help":Object(l["withCtx"])(()=>[0!==e.timezoneOffset&&"0"!==e.timezoneOffset?(Object(l["openBlock"])(),Object(l["createElementBlock"])("div",w,[Object(l["createElementVNode"])("span",{textContent:Object(l["toDisplayString"])(e.reportHourUtc)},null,8,T)])):Object(l["createCommentVNode"])("",!0)]),_:1},8,["model-value","title","options"])]),Object(l["createElementVNode"])("div",null,[Object(l["createVNode"])(a,{uicontrol:"select",name:"report_type",disabled:1===e.reportTypes.length,"model-value":e.report.type,"onUpdate:modelValue":t[5]||(t[5]=t=>e.$emit("change",{prop:"type",value:t})),title:e.translate("ScheduledReports_ReportType"),options:e.reportTypeOptions},{"inline-help":Object(l["withCtx"])(()=>[Object(l["createElementVNode"])("div",_,[Object(l["createElementVNode"])("span",{innerHTML:e.$sanitize(e.getDeliveryMediumInlineTooltip)},null,8,C)])]),_:1},8,["disabled","model-value","title","options"])]),Object(l["createElementVNode"])("div",P,[Object(l["renderSlot"])(e.$slots,"report-parameters")],512),(Object(l["openBlock"])(!0),Object(l["createElementBlock"])(l["Fragment"],null,Object(l["renderList"])(e.reportFormatsByReportTypeOptions,(t,r)=>(Object(l["openBlock"])(),Object(l["createElementBlock"])("div",{key:r},[Object(l["withDirectives"])(Object(l["createVNode"])(a,{uicontrol:"select",name:"report_format",title:e.translate("ScheduledReports_ReportFormat"),class:Object(l["normalizeClass"])(r),"model-value":e.report["format"+r],"onUpdate:modelValue":t=>e.$emit("change",{prop:"format"+r,value:t}),options:t},null,8,["title","class","model-value","onUpdate:modelValue","options"]),[[l["vShow"],e.report.type===r]])]))),128)),Object(l["withDirectives"])(Object(l["createElementVNode"])("div",null,[Object(l["createElementVNode"])("div",{class:Object(l["normalizeClass"])(e.report.type)},[Object(l["createVNode"])(a,{uicontrol:"select",name:"display_format","model-value":e.report.displayFormat,"onUpdate:modelValue":t[6]||(t[6]=t=>e.$emit("change",{prop:"displayFormat",value:t})),options:e.displayFormats,introduction:e.translate("ScheduledReports_AggregateReportsFormat")},null,8,["model-value","options","introduction"])],2),Object(l["createElementVNode"])("div",F,[Object(l["withDirectives"])(Object(l["createVNode"])(a,{uicontrol:"checkbox",name:"report_evolution_graph",title:e.translate("ScheduledReports_EvolutionGraph",5),"model-value":e.report.evolutionGraph,"onUpdate:modelValue":t[7]||(t[7]=t=>e.$emit("change",{prop:"evolutionGraph",value:t}))},null,8,["title","model-value"]),[[l["vShow"],-1!==[2,"2",3,"3"].indexOf(e.report.displayFormat)]])]),Object(l["withDirectives"])(Object(l["createElementVNode"])("div",D,[Object(l["createElementVNode"])("div",M,[Object(l["createElementVNode"])("label",q,[Object(l["createElementVNode"])("input",{id:"report_evolution_period_for_each",name:"report_evolution_period_for",type:"radio",value:"each",checked:"each"===e.report.evolutionPeriodFor,onChange:t[8]||(t[8]=t=>e.$emit("change",{prop:"evolutionPeriodFor",value:t.target.value}))},null,40,x),Object(l["createElementVNode"])("span",{innerHTML:e.$sanitize(e.evolutionGraphsShowForEachInPeriod)},null,8,L)])]),Object(l["createElementVNode"])("div",I,[Object(l["createElementVNode"])("label",H,[Object(l["createElementVNode"])("input",{id:"report_evolution_period_for_prev",name:"report_evolution_period_for",type:"radio",value:"prev",checked:"prev"===e.report.evolutionPeriodFor,onChange:t[9]||(t[9]=t=>e.$emit("change",{prop:"evolutionPeriodFor",value:t.target.value}))},null,40,A),Object(l["createElementVNode"])("span",null,[Object(l["createTextVNode"])(Object(l["toDisplayString"])(e.translate("ScheduledReports_EvolutionGraphsShowForPreviousN",e.frequencyPeriodPlural))+": ",1),Object(l["createElementVNode"])("input",{type:"number",name:"report_evolution_period_n",value:e.report.evolutionPeriodN,onKeydown:t[10]||(t[10]=t=>e.onEvolutionPeriodN(t)),onChange:t[11]||(t[11]=t=>e.onEvolutionPeriodN(t))},null,40,U)])])])],512),[[l["vShow"],-1!==[1,"1",2,"2",3,"3"].indexOf(e.report.displayFormat)]])],512),[[l["vShow"],"pdf"===e.report["format"+e.report.type]||"html"===e.report["format"+e.report.type]]]),Object(l["createElementVNode"])("div",G,[Object(l["createElementVNode"])("h3",z,Object(l["toDisplayString"])(e.translate("ScheduledReports_ReportsIncluded")),1)]),(Object(l["openBlock"])(!0),Object(l["createElementBlock"])(l["Fragment"],null,Object(l["renderList"])(e.reportsByCategoryByReportTypeInColumns,(t,r)=>Object(l["withDirectives"])((Object(l["openBlock"])(),Object(l["createElementBlock"])("div",{name:"reportsList",class:Object(l["normalizeClass"])("row "+r),key:r},[(Object(l["openBlock"])(!0),Object(l["createElementBlock"])(l["Fragment"],null,Object(l["renderList"])(t,(t,o)=>(Object(l["openBlock"])(),Object(l["createElementBlock"])("div",{class:"col s12 m6",key:o},[(Object(l["openBlock"])(!0),Object(l["createElementBlock"])(l["Fragment"],null,Object(l["renderList"])(t,(t,o)=>(Object(l["openBlock"])(),Object(l["createElementBlock"])("div",{key:o},[Object(l["createElementVNode"])("h3",W,Object(l["toDisplayString"])(o),1),Object(l["createElementVNode"])("ul",Z,[(Object(l["openBlock"])(!0),Object(l["createElementBlock"])(l["Fragment"],null,Object(l["renderList"])(t,t=>{var o;return Object(l["openBlock"])(),Object(l["createElementBlock"])("li",{key:t.uniqueId},[Object(l["createElementVNode"])("label",null,[Object(l["createElementVNode"])("input",{name:r+"Reports",type:e.allowMultipleReportsByReportType[r]?"checkbox":"radio",id:`${r}${t.uniqueId}`,checked:null===(o=e.selectedReports[r])||void 0===o?void 0:o[t.uniqueId],onChange:o=>e.$emit("toggleSelectedReport",{reportType:r,uniqueId:t.uniqueId})},null,40,K),Object(l["createElementVNode"])("span",null,Object(l["toDisplayString"])(e.decode(t.name)),1),"MultiSites_getAll"===t.uniqueId?(Object(l["openBlock"])(),Object(l["createElementBlock"])("div",Q,Object(l["toDisplayString"])(e.translate("ScheduledReports_ReportIncludeNWebsites",e.countWebsites)),1)):Object(l["createCommentVNode"])("",!0)])])}),128))]),X]))),128))]))),128))],2)),[[l["vShow"],e.report.type===r]])),128)),Object(l["createVNode"])(c,{reports:e.selectedReportsForCurrentType,enabled:e.allowMultipleReportsByReportType[e.report.type],onReorder:e.onSelectedReportsReorder},null,8,["reports","enabled","onReorder"]),Object(l["createVNode"])(s,{value:e.saveButtonTitle,onConfirm:t[12]||(t[12]=t=>e.$emit("submit"))},null,8,["value"]),Object(l["createElementVNode"])("div",{class:"entityCancel",innerHTML:e.$sanitize(e.entityCancelText)},null,8,J)],32)),[[p]])]),_:3},8,["content-title"])} /*! * Matomo - free/libre analytics platform * * @link https://matomo.org * @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later - */function ee(e,t){return""+(24+parseFloat(e)+t)%24}const te={key:0,class:"selectedReportsWrapper"},re={class:"selectedReportsHeading"},oe={class:"selectedReportsHelp"},ne={class:"selectedReportsList",ref:"list"},le=["data-unique-id"],ie=Object(l["createElementVNode"])("span",{class:"icon-menu-hamburger drag-icon"},null,-1),ae={class:"selectedReportName"};function ce(e,t,r,o,n,i){return e.shouldDisplay?(Object(l["openBlock"])(),Object(l["createElementBlock"])("div",te,[Object(l["createElementVNode"])("div",re,[Object(l["createElementVNode"])("h3",null,Object(l["toDisplayString"])(e.translate("ScheduledReports_SelectedReports")),1)]),Object(l["createElementVNode"])("p",oe,Object(l["toDisplayString"])(e.translate("ScheduledReports_SelectedReportsHelp")),1),Object(l["createElementVNode"])("ul",ne,[(Object(l["openBlock"])(!0),Object(l["createElementBlock"])(l["Fragment"],null,Object(l["renderList"])(e.reports,t=>(Object(l["openBlock"])(),Object(l["createElementBlock"])("li",{key:t.uniqueId,"data-unique-id":t.uniqueId},[ie,Object(l["createElementVNode"])("span",ae,Object(l["toDisplayString"])(e.decode(t.name)),1)],8,le))),128))],512)])):Object(l["createCommentVNode"])("",!0)}const{$:se}=window;var de=Object(l["defineComponent"])({name:"SelectedReportsList",props:{reports:{type:Array,required:!0},enabled:{type:Boolean,default:!0}},emits:["reorder"],computed:{shouldDisplay(){return!!this.enabled&&this.reports.length>0}},watch:{reports(){this.scheduleRefresh()},enabled(){this.scheduleRefresh()}},mounted(){this.scheduleRefresh()},beforeUnmount(){this.destroySortable()},methods:{translate:v["translate"],decode(e){return v["Matomo"].helper.htmlDecode(e)},getListElement(){return this.$refs.list},scheduleRefresh(){Object(l["nextTick"])(()=>{this.refreshSortable()})},refreshSortable(){if(!this.shouldDisplay)return void this.destroySortable();const e=this.getListElement();if(!e)return;const t=se(e);t.data("ui-sortable")?t.sortable("refresh"):t.sortable({axis:"y",helper:"clone",placeholder:"selectedReportPlaceholder",stop:()=>{this.emitOrder()}})},destroySortable(){const e=this.getListElement();if(!e)return;const t=se(e);t.data("ui-sortable")&&t.sortable("destroy")},emitOrder(){const e=this.getListElement();if(!e)return;const t=se(e).find("li").map((function(){return String(se(this).data("uniqueId"))})).get();this.$emit("reorder",t)}}});de.render=ce;var pe=de,ue=Object(l["defineComponent"])({props:{report:{type:Object,required:!0},selectedReports:Object,selectedReportsOrder:{type:Object,default:()=>({})},paramPeriods:{type:Object,required:!0},reportTypeOptions:{type:Object,required:!0},reportFormatsByReportTypeOptions:{type:Object,required:!0},displayFormats:{type:Object,required:!0},reportsByCategoryByReportType:{type:Object,required:!0},allowMultipleReportsByReportType:{type:Object,required:!0},countWebsites:{type:Number,required:!0},siteName:{type:String,required:!0},reportTypes:{type:Object,required:!0},segmentEditorActivated:Boolean,savedSegmentsById:Object,periods:{type:Object,required:!0}},emits:["submit","change","toggleSelectedReport","reorderSelectedReports"],components:{ContentBlock:v["ContentBlock"],Field:c["Field"],SaveButton:c["SaveButton"],SelectedReportsList:pe},directives:{Form:c["Form"]},created(){this.onEvolutionPeriodN=Object(v["debounce"])(this.onEvolutionPeriodN,50)},methods:{onEvolutionPeriodN(e){this.$emit("change",{prop:"evolutionPeriodN",value:e.target.value})},decode(e){return v["Matomo"].helper.htmlDecode(e)},onSelectedReportsReorder(e){this.report&&this.report.type&&this.$emit("reorderSelectedReports",{reportType:this.report.type,order:e})}},setup(e,t){const r=Object(l["ref"])(null);return Object(l["watch"])(()=>e.report,e=>{const t=r.value;t.querySelectorAll("[vue-entry]").forEach(t=>{$(t).data("vueAppInstance").report_=e})}),Object(l["onMounted"])(()=>{const o=r.value;v["Matomo"].helper.compileVueEntryComponents(o,{report:e.report,onChange(e,r){t.emit("change",{prop:e,value:r})}})}),{reportParameters:r}},beforeUnmount(){const e=this.$refs.reportParameters;v["Matomo"].helper.destroyVueComponent(e)},computed:{enforceSelectedReportOrder(){var e;const t=(null===(e=this.report)||void 0===e?void 0:e.parameters)||{};return"undefined"!==typeof t.enforceOrder&&!!t.enforceOrder},selectedReportsOrderNormalized(){const e={},t=this.selectedReports||{};return Object.keys(t).forEach(r=>{const o=t[r]||{},n=((this.selectedReportsOrder||{})[r]||[]).filter(e=>o[e]),l=Object.keys(o).filter(e=>o[e]&&-1===n.indexOf(e));e[r]=n.concat(l)}),e},reportsLookup(){const e=this.reportsByCategoryByReportType,t={};return Object.entries(e).forEach(([e,r])=>{t[e]=t[e]||{},Object.values(r).forEach(r=>{r.forEach(r=>{t[e][r.uniqueId]=r})})}),t},selectedReportsForCurrentType(){var e;const t=null===(e=this.report)||void 0===e?void 0:e.type;if(!t)return[];const r=(this.selectedReports||{})[t]||{};let o=[];if(this.enforceSelectedReportOrder)o=this.selectedReportsOrderNormalized[t]||[];else{const e=this.reportsByCategoryByReportType[t]||{},n=[];Object.values(e).forEach(e=>{e.forEach(e=>{r[e.uniqueId]&&n.push(e.uniqueId)})}),o=n}if(o.length||(o=Object.keys(r).filter(e=>r[e])),!o.length)return[];const n=this.reportsLookup[t]||{};return o.map(e=>n[e]).filter(e=>!!e)},reportsByCategoryByReportTypeInColumns(){const e=this.reportsByCategoryByReportType,t=Object.entries(e).map(([e,t])=>{const r=Math.floor((Object.keys(t).length+1)/2),o={},n={};let l=o;return Object.entries(t).forEach(([e,t])=>{l[e]=t,Object.keys(l).length>=r&&(l=n)}),[e,[o,n]]});return Object.fromEntries(t)},entityCancelText(){return Object(v["translate"])("General_OrCancel",'',"")},frequencyPeriodSingle(){if(!this.report||!this.report.period)return"";const{ReportPlugin:e}=window;let t=e.periodTranslations[this.report.period];return t||(t=e.periodTranslations.day),t.single},frequencyPeriodPlural(){if(!this.report||!this.report.period)return"";const{ReportPlugin:e}=window;let t=e.periodTranslations[this.report.period];return t||(t=e.periodTranslations.day),t.plural},evolutionGraphsShowForEachInPeriod(){return Object(v["translate"])("ScheduledReports_EvolutionGraphsShowForEachInPeriod","","",this.frequencyPeriodSingle)},reportSegmentInlineHelp(){return Object(v["translate"])("ScheduledReports_Segment_HelpScheduledReport",'',"",Object(v["translate"])("SegmentEditor_DefaultAllVisits"),Object(v["translate"])("SegmentEditor_AddNewSegment"))},timezoneOffset(){return v["Matomo"].timezoneOffset},timeZoneDifferenceInHours(){return v["Matomo"].timezoneOffset/3600},reportHours(){const e=[];for(let t=0;t<24;t+=1)2*this.timeZoneDifferenceInHours%2!==0?e.push({key:t+".5",value:t+":30"}):e.push({key:""+t,value:""+t});return e},reportHourUtc(){const e=ee(this.report.hour,-this.timeZoneDifferenceInHours);return Object(v["translate"])("ScheduledReports_ReportHourWithUTC",[e])},saveButtonTitle(){const{ReportPlugin:e}=window,t=this.report.idreport>0;return t?e.updateReportString:e.createReportString},contentTitle(){const{ReportPlugin:e}=window,t=this.report.idreport>0;return t?e.updateReportString:Object(v["translate"])("ScheduledReports_CreateAndScheduleReport")},getDeliveryMediumInlineTooltip(){const e=Object(v["translate"])("CoreHome_LearnMoreFullStop",Object(v["externalLink"])("https://matomo.org/faq/general/create-and-schedule-a-report/"),"");return`${Object(v["translate"])("ScheduledReports_CreateTooltip")} ${e}`}}});ue.render=Y;var me=ue;const be={class:"first"},Oe={key:0},he={colspan:"7"},ye=Object(l["createElementVNode"])("br",null,null,-1),je=Object(l["createElementVNode"])("br",null,null,-1),ge=["href"],ve=Object(l["createElementVNode"])("br",null,null,-1),Re=Object(l["createElementVNode"])("br",null,null,-1),fe={key:1},Se={colspan:"7"},Ee=Object(l["createElementVNode"])("br",null,null,-1),Ne=Object(l["createElementVNode"])("br",null,null,-1),ke=Object(l["createElementVNode"])("br",null,null,-1),Ve={class:"first"},Be={key:0,class:"entityInlineHelp",style:{"font-size":"9pt"}},we={key:0},Te={key:1},_e={key:0},Ce={key:0},Pe=Object(l["createElementVNode"])("br",null,null,-1),Fe=["onClick"],De=["src"],Me={key:2,class:"loadingPiwik"},qe=["id","action"],xe=["value"],Le=Object(l["createElementVNode"])("input",{type:"hidden",name:"force_api_session",value:"1"},null,-1),Ie=["onClick","id"],$e=["src"],He={style:{"text-align":"center","padding-top":"2px"}},Ae=["onClick","title"],Ue=Object(l["createElementVNode"])("span",{class:"icon-edit"},null,-1),Ge=[Ue],ze={style:{"text-align":"center","padding-top":"2px"}},We=["onClick","title"],Ze=Object(l["createElementVNode"])("span",{class:"icon-delete"},null,-1),Ke=[Ze],Xe={class:"tableActionBar"},Je=Object(l["createElementVNode"])("span",{class:"icon-add"},null,-1);function Qe(e,t,r,o,n,i){const a=Object(l["resolveComponent"])("MatomoLoader"),c=Object(l["resolveComponent"])("ContentBlock"),s=Object(l["resolveDirective"])("content-table");return Object(l["openBlock"])(),Object(l["createBlock"])(c,{id:"entityEditContainer",class:"entityTableContainer","help-url":e.externalRawLink("https://matomo.org/docs/email-reports/"),feature:"true","content-title":e.contentTitle},{default:Object(l["withCtx"])(()=>{var r;return[Object(l["createElementVNode"])("p",null,Object(l["toDisplayString"])(e.translate("ScheduledReports_ManageTooltip")),1),Object(l["withDirectives"])((Object(l["openBlock"])(),Object(l["createElementBlock"])("table",null,[Object(l["createElementVNode"])("thead",null,[Object(l["createElementVNode"])("tr",null,[Object(l["createElementVNode"])("th",be,Object(l["toDisplayString"])(e.translate("General_Description")),1),Object(l["createElementVNode"])("th",null,Object(l["toDisplayString"])(e.translate("ScheduledReports_ReportSchedule")),1),Object(l["createElementVNode"])("th",null,Object(l["toDisplayString"])(e.translate("ScheduledReports_ReportFormat")),1),Object(l["createElementVNode"])("th",null,Object(l["toDisplayString"])(e.translate("ScheduledReports_SendReportTo")),1),Object(l["createElementVNode"])("th",null,Object(l["toDisplayString"])(e.translate("General_Download")),1),Object(l["createElementVNode"])("th",null,Object(l["toDisplayString"])(e.translate("General_Edit")),1),Object(l["createElementVNode"])("th",null,Object(l["toDisplayString"])(e.translate("General_Delete")),1)])]),Object(l["createElementVNode"])("tbody",null,["anonymous"===e.userLogin?(Object(l["openBlock"])(),Object(l["createElementBlock"])("tr",Oe,[Object(l["createElementVNode"])("td",he,[ye,Object(l["createTextVNode"])(" "+Object(l["toDisplayString"])(e.translate("ScheduledReports_MustBeLoggedIn"))+" ",1),je,Object(l["createTextVNode"])("› "),Object(l["createElementVNode"])("a",{href:"index.php?module="+e.loginModule},Object(l["toDisplayString"])(e.translate("Login_LogIn")),9,ge),ve,Re])])):null!==(r=e.reports)&&void 0!==r&&r.length?Object(l["createCommentVNode"])("",!0):(Object(l["openBlock"])(),Object(l["createElementBlock"])("tr",fe,[Object(l["createElementVNode"])("td",Se,[Ee,Object(l["createTextVNode"])(" "+Object(l["toDisplayString"])(e.translate("ScheduledReports_ThereIsNoReportToManage",e.siteName))+". ",1),Ne,ke])])),(Object(l["openBlock"])(!0),Object(l["createElementBlock"])(l["Fragment"],null,Object(l["renderList"])(e.decodedReports,t=>(Object(l["openBlock"])(),Object(l["createElementBlock"])("tr",{key:t.idreport},[Object(l["createElementVNode"])("td",Ve,[Object(l["createTextVNode"])(Object(l["toDisplayString"])(t.description)+" ",1),e.segmentEditorActivated&&t.idsegment?(Object(l["openBlock"])(),Object(l["createElementBlock"])("div",Be,[e.savedSegmentsById[t.idsegment]?(Object(l["openBlock"])(),Object(l["createElementBlock"])("span",we,Object(l["toDisplayString"])(e.savedSegmentsById[t.idsegment]),1)):(Object(l["openBlock"])(),Object(l["createElementBlock"])("span",Te,Object(l["toDisplayString"])(e.translate("ScheduledReports_SegmentDeleted")),1))])):Object(l["createCommentVNode"])("",!0)]),Object(l["createElementVNode"])("td",null,Object(l["toDisplayString"])(e.periods[t.period])+" ",1),Object(l["createElementVNode"])("td",null,[t.format?(Object(l["openBlock"])(),Object(l["createElementBlock"])("span",_e,Object(l["toDisplayString"])(t.format.toUpperCase()),1)):Object(l["createCommentVNode"])("",!0)]),Object(l["createElementVNode"])("td",null,[0===t.recipients.length?(Object(l["openBlock"])(),Object(l["createElementBlock"])("span",Ce,Object(l["toDisplayString"])(e.translate("ScheduledReports_NoRecipients")),1)):Object(l["createCommentVNode"])("",!0),(Object(l["openBlock"])(!0),Object(l["createElementBlock"])(l["Fragment"],null,Object(l["renderList"])(t.recipients,(e,t)=>(Object(l["openBlock"])(),Object(l["createElementBlock"])("span",{key:t},[Object(l["createTextVNode"])(Object(l["toDisplayString"])(e)+" ",1),Pe]))),128)),0===t.recipients.length||e.sendingReports.includes(t.idreport)?Object(l["createCommentVNode"])("",!0):(Object(l["openBlock"])(),Object(l["createElementBlock"])("a",{key:1,href:"#",name:"linkSendNow",class:"link_but withIcon",style:{"margin-top":"3px"},onClick:Object(l["withModifiers"])(r=>e.$emit("sendnow",t.idreport),["prevent"])},[Object(l["createElementVNode"])("img",{border:"0",src:e.reportTypes[t.type]},null,8,De),Object(l["createTextVNode"])(" "+Object(l["toDisplayString"])(e.translate("ScheduledReports_SendReportNow")),1)],8,Fe)),e.sendingReports.includes(t.idreport)?(Object(l["openBlock"])(),Object(l["createElementBlock"])("div",Me,[Object(l["createVNode"])(a),Object(l["createTextVNode"])(" "+Object(l["toDisplayString"])(e.translate("ScheduledReports_SendingReport")),1)])):Object(l["createCommentVNode"])("",!0)]),Object(l["createElementVNode"])("td",null,[Object(l["createElementVNode"])("form",{method:"POST",target:"_blank",id:"downloadReportForm_"+t.idreport,action:e.linkTo({module:"API",segment:null,method:"ScheduledReports.generateReport",idReport:t.idreport,outputType:e.downloadOutputType,language:e.language,format:-1!==["html","csv","tsv"].indexOf(t.format)?t.format:"original"})},[Object(l["createElementVNode"])("input",{type:"hidden",name:"token_auth",value:e.token_auth},null,8,xe),Le],8,qe),Object(l["createElementVNode"])("a",{href:"",rel:"noreferrer noopener",name:"linkDownloadReport",class:"link_but withIcon",onClick:Object(l["withModifiers"])(r=>e.displayReport(t.idreport),["prevent"]),id:t.idreport},[Object(l["createElementVNode"])("img",{border:"0",width:16,height:16,src:e.reportFormatsByReportType[t.type][t.format]},null,8,$e),Object(l["createTextVNode"])(" "+Object(l["toDisplayString"])(e.translate("General_Download")),1)],8,Ie)]),Object(l["createElementVNode"])("td",He,[Object(l["createElementVNode"])("button",{class:"table-action",onClick:r=>e.$emit("edit",t.idreport),title:e.translate("General_Edit")},Ge,8,Ae)]),Object(l["createElementVNode"])("td",ze,[Object(l["createElementVNode"])("button",{class:"table-action",onClick:r=>e.$emit("delete",t.idreport),title:e.translate("General_Delete")},Ke,8,We)])]))),128))])])),[[s]]),Object(l["createElementVNode"])("div",Xe,["anonymous"!==e.userLogin?(Object(l["openBlock"])(),Object(l["createElementBlock"])("button",{key:0,id:"add-report",onClick:t[0]||(t[0]=t=>e.$emit("create"))},[Je,Object(l["createTextVNode"])(" "+Object(l["toDisplayString"])(e.translate("ScheduledReports_CreateAndScheduleReport")),1)])):Object(l["createCommentVNode"])("",!0)])]}),_:1},8,["help-url","content-title"])}var Ye=Object(l["defineComponent"])({props:{contentTitle:{type:String,required:!0},userLogin:{type:String,required:!0},loginModule:{type:String,required:!0},reports:{type:Array,required:!0},siteName:{type:String,required:!0},segmentEditorActivated:Boolean,savedSegmentsById:Object,periods:{type:Object,required:!0},downloadOutputType:{type:Number,required:!0},language:{type:String,required:!0},reportFormatsByReportType:{type:Object,required:!0},reportTypes:{type:Object,required:!0},sendingReports:{type:Array,required:!1}},components:{ContentBlock:v["ContentBlock"],MatomoLoader:v["MatomoLoader"]},directives:{ContentTable:v["ContentTable"]},emits:["create","edit","delete","sendnow"],methods:{linkTo(e){return"?"+v["MatomoUrl"].stringify(Object.assign(Object.assign({},v["MatomoUrl"].urlParsed.value),e))},displayReport(e){$("#downloadReportForm_"+e).submit()}},computed:{token_auth(){return v["Matomo"].token_auth},decodedReports(){return this.reports.map(e=>Object.assign(Object.assign({},e),{},{description:v["Matomo"].helper.htmlDecode(e.description)}))}}});Ye.render=Qe;var et=Ye;function tt(){v["Matomo"].helper.lazyScrollTo(".emailReports",200)}function rt(e,t){var r;null!==(r=window.updateReportParametersFunctions)&&void 0!==r&&r[e]&&window.updateReportParametersFunctions[e](t)}function ot(e,t){var r;null!==(r=window.resetReportParametersFunctions)&&void 0!==r&&r[e]&&window.resetReportParametersFunctions[e](t)}window.resetReportParametersFunctions=window.resetReportParametersFunctions||{},window.updateReportParametersFunctions=window.updateReportParametersFunctions||{},window.getReportParametersFunctions=window.getReportParametersFunctions||{};const{$:nt}=window,lt="scheduledReports.pendingNotification",it=v["Matomo"].timezoneOffset/3600;var at=Object(l["defineComponent"])({props:{contentTitle:{type:String,required:!0},userLogin:{type:String,required:!0},loginModule:{type:String,required:!0},reports:{type:Array,required:!0},siteName:{type:String,required:!0},segmentEditorActivated:Boolean,savedSegmentsById:Object,periods:{type:Object,required:!0},downloadOutputType:{type:Number,required:!0},language:{type:String,required:!0},reportFormatsByReportType:{type:Object,required:!0},paramPeriods:{type:Object,required:!0},reportTypeOptions:{type:Object,required:!0},reportFormatsByReportTypeOptions:{type:Object,required:!0},displayFormats:{type:Object,required:!0},reportsByCategoryByReportType:{type:Object,required:!0},allowMultipleReportsByReportType:{type:Object,required:!0},countWebsites:{type:Number,required:!0},reportTypes:{type:Object,required:!0}},components:{MatomoLoader:v["MatomoLoader"],AddReport:me,ListReports:et},directives:{ContentTable:v["ContentTable"],Form:c["Form"]},mounted(){nt(this.$refs.root).on("click","a.entityCancelLink",()=>{this.showListOfReports()}),v["Matomo"].postEvent("ScheduledReports.ManageScheduledReport.mounted",{element:this.$refs.root});const e="undefined"!==typeof sessionStorage?sessionStorage.getItem(lt):null;e&&this.$refs.reportUpdatedSuccess&&(sessionStorage.removeItem(lt),this.fadeInOutSuccessMessage(this.$refs.reportUpdatedSuccess,e,!1))},unmounted(){v["Matomo"].postEvent("ScheduledReports.ManageScheduledReport.unmounted",{element:this.$refs.root})},data(){return{showReportsList:!0,report:{},selectedReports:{},selectedReportsOrder:{},sendingReports:[]}},methods:{sendReportNow(e){this.sendingReports.includes(e)||(tt(),this.sendingReports.push(e),v["AjaxHelper"].post({method:"ScheduledReports.sendReport"},{idReport:e,force:!0}).then(()=>{this.fadeInOutSuccessMessage(this.$refs.reportSentSuccess,Object(v["translate"])("ScheduledReports_ReportSent"),!1)}).finally(()=>{this.sendingReports=this.sendingReports.filter(t=>t!==e)}))},formSetEditReport(e){const{ReportPlugin:t}=window;let r={idreport:e,type:t.defaultReportType,format:t.defaultReportFormat,description:"",period:t.defaultPeriod,hour:t.defaultHour,reports:[],idsegment:"",evolutionPeriodFor:"prev",evolutionPeriodN:t.defaultEvolutionPeriodN,periodParam:t.defaultPeriod};e>0?(r=t.reportList[e],rt(r.type,r)):ot(r.type,r),r.hour=ee(r.hour,it),this.selectedReports={},this.selectedReportsOrder={},Object.values(r.reports).forEach(e=>{this.selectedReports[r.type]=this.selectedReports[r.type]||{},this.selectedReports[r.type][e]=!0}),this.selectedReportsOrder[r.type]=Object.values(r.reports).map(e=>e),r["format"+r.type]=r.format,r.idsegment||(r.idsegment=""),this.report=r,this.report.description=v["Matomo"].helper.htmlDecode(r.description)},fadeInOutSuccessMessage(e,t,r=!0){v["NotificationsStore"].show({message:t,placeat:e,context:"success",noclear:!0,type:"toast",style:{display:"inline-block",marginTop:"10px",width:"100%"},id:"scheduledReportSuccess"}),r&&("undefined"!==typeof sessionStorage&&sessionStorage.setItem(lt,t),v["Matomo"].helper.refreshAfter(2))},changedReportType(){ot(this.report.type,this.report)},deleteReport(e){v["Matomo"].helper.modalConfirm("#confirm",{yes:()=>{v["AjaxHelper"].post({method:"ScheduledReports.deleteReport"},{idReport:e},{redirectOnSuccess:!0})}})},showListOfReports(e){this.showReportsList=!0,v["Matomo"].helper.hideAjaxError(),("undefined"===typeof e||e)&&tt()},createReport(){this.showReportsList=!1,Object(l["nextTick"])(()=>{this.formSetEditReport(0)})},editReport(e){this.showReportsList=!1,Object(l["nextTick"])(()=>{this.formSetEditReport(e)})},submitReport(){const e={idReport:this.report.idreport,description:this.report.description,idSegment:this.report.idsegment,reportType:this.report.type,reportFormat:this.report["format"+this.report.type],periodParam:this.report.periodParam,evolutionPeriodFor:this.report.evolutionPeriodFor};"each"!==e.evolutionPeriodFor&&(e.evolutionPeriodN=this.report.evolutionPeriodN);const{period:t}=this.report,r=ee(this.report.hour,-it),o=e.reportType,n=this.selectedReports[o]||{};let l=(this.selectedReportsOrder[o]||[]).filter(e=>n[e]);l.length||(l=Object.keys(n).filter(e=>n[e])),l.length>0&&(e.reports=l);const i=window.getReportParametersFunctions[this.report.type](this.report);e.parameters=i;const a=this.report.idreport>0;return v["AjaxHelper"].post({method:a?"ScheduledReports.updateReport":"ScheduledReports.addReport",period:t,hour:r},e).then(()=>{tt(),this.fadeInOutSuccessMessage(this.$refs.reportUpdatedSuccess,a?Object(v["translate"])("ScheduledReports_ReportUpdated"):Object(v["translate"])("ScheduledReports_ReportAdded"))}),!1},onChangeProperty(e,t){this.report[e]=t,"type"===e&&this.changedReportType()},toggleSelectedReport(e,t){this.selectedReports[e]=this.selectedReports[e]||{};const r=!this.selectedReports[e][t];this.selectedReports[e][t]=r,this.selectedReportsOrder[e]=this.selectedReportsOrder[e]||[],r?-1===this.selectedReportsOrder[e].indexOf(t)&&this.selectedReportsOrder[e].push(t):this.selectedReportsOrder[e]=this.selectedReportsOrder[e].filter(e=>e!==t)},onReorderSelectedReports(e,t){this.selectedReportsOrder[e]=t.filter(t=>{var r;return null===(r=this.selectedReports[e])||void 0===r?void 0:r[t]})}},computed:{showReportForm(){return!this.showReportsList},decodedSiteName(){return v["Matomo"].helper.htmlDecode(this.siteName)}}});at.render=g;var ct=at; + */function ee(e,t){return""+(24+parseFloat(e)+t)%24}const te={key:0,class:"selectedReportsWrapper"},re={class:"selectedReportsHeading"},oe={class:"selectedReportsHelp"},ne={class:"selectedReportsList",ref:"list"},le=["data-unique-id"],ie=Object(l["createElementVNode"])("span",{class:"icon-menu-hamburger drag-icon"},null,-1),ae={class:"selectedReportName"};function ce(e,t,r,o,n,i){return e.shouldDisplay?(Object(l["openBlock"])(),Object(l["createElementBlock"])("div",te,[Object(l["createElementVNode"])("div",re,[Object(l["createElementVNode"])("h3",null,Object(l["toDisplayString"])(e.translate("ScheduledReports_SelectedReports")),1)]),Object(l["createElementVNode"])("p",oe,Object(l["toDisplayString"])(e.translate("ScheduledReports_SelectedReportsHelp")),1),Object(l["createElementVNode"])("ul",ne,[(Object(l["openBlock"])(!0),Object(l["createElementBlock"])(l["Fragment"],null,Object(l["renderList"])(e.reports,t=>(Object(l["openBlock"])(),Object(l["createElementBlock"])("li",{key:t.uniqueId,"data-unique-id":t.uniqueId},[ie,Object(l["createElementVNode"])("span",ae,Object(l["toDisplayString"])(e.decode(t.name)),1)],8,le))),128))],512)])):Object(l["createCommentVNode"])("",!0)}const{$:se}=window;var de=Object(l["defineComponent"])({name:"SelectedReportsList",props:{reports:{type:Array,required:!0},enabled:{type:Boolean,default:!0}},emits:["reorder"],computed:{shouldDisplay(){return!!this.enabled&&this.reports.length>0}},watch:{reports(){this.scheduleRefresh()},enabled(){this.scheduleRefresh()}},mounted(){this.scheduleRefresh()},beforeUnmount(){this.destroySortable()},methods:{translate:v["translate"],decode(e){return v["Matomo"].helper.htmlDecode(e)},getListElement(){return this.$refs.list},scheduleRefresh(){Object(l["nextTick"])(()=>{this.refreshSortable()})},refreshSortable(){if(!this.shouldDisplay)return void this.destroySortable();const e=this.getListElement();if(!e)return;const t=se(e);t.data("ui-sortable")?t.sortable("refresh"):t.sortable({axis:"y",helper:"clone",placeholder:"selectedReportPlaceholder",stop:()=>{this.emitOrder()}})},destroySortable(){const e=this.getListElement();if(!e)return;const t=se(e);t.data("ui-sortable")&&t.sortable("destroy")},emitOrder(){const e=this.getListElement();if(!e)return;const t=se(e).find("li").map((function(){return String(se(this).data("uniqueId"))})).get();this.$emit("reorder",t)}}});de.render=ce;var pe=de,ue=Object(l["defineComponent"])({props:{report:{type:Object,required:!0},selectedReports:Object,selectedReportsOrder:{type:Object,default:()=>({})},paramPeriods:{type:Object,required:!0},reportTypeOptions:{type:Object,required:!0},reportFormatsByReportTypeOptions:{type:Object,required:!0},displayFormats:{type:Object,required:!0},reportsByCategoryByReportType:{type:Object,required:!0},allowMultipleReportsByReportType:{type:Object,required:!0},countWebsites:{type:Number,required:!0},siteName:{type:String,required:!0},reportTypes:{type:Object,required:!0},segmentEditorActivated:Boolean,savedSegmentsById:Object,periods:{type:Object,required:!0}},emits:["submit","change","toggleSelectedReport","reorderSelectedReports"],components:{ContentBlock:v["ContentBlock"],Field:c["Field"],SaveButton:c["SaveButton"],SelectedReportsList:pe},directives:{Form:c["Form"]},created(){this.onEvolutionPeriodN=Object(v["debounce"])(this.onEvolutionPeriodN,50)},methods:{onEvolutionPeriodN(e){this.$emit("change",{prop:"evolutionPeriodN",value:e.target.value})},decode(e){return v["Matomo"].helper.htmlDecode(e)},onSelectedReportsReorder(e){this.report&&this.report.type&&this.$emit("reorderSelectedReports",{reportType:this.report.type,order:e})}},setup(e,t){const r=Object(l["ref"])(null);return Object(l["watch"])(()=>e.report,e=>{const t=r.value;t.querySelectorAll("[vue-entry]").forEach(t=>{$(t).data("vueAppInstance").report_=e})}),Object(l["onMounted"])(()=>{const o=r.value;v["Matomo"].helper.compileVueEntryComponents(o,{report:e.report,onChange(e,r){t.emit("change",{prop:e,value:r})}})}),{reportParameters:r}},beforeUnmount(){const e=this.$refs.reportParameters;v["Matomo"].helper.destroyVueComponent(e)},computed:{enforceSelectedReportOrder(){var e;const t=(null===(e=this.report)||void 0===e?void 0:e.parameters)||{};return"undefined"!==typeof t.enforceOrder&&!!t.enforceOrder},selectedReportsOrderNormalized(){const e={},t=this.selectedReports||{};return Object.keys(t).forEach(r=>{const o=t[r]||{},n=((this.selectedReportsOrder||{})[r]||[]).filter(e=>o[e]),l=Object.keys(o).filter(e=>o[e]&&-1===n.indexOf(e));e[r]=n.concat(l)}),e},reportsLookup(){const e=this.reportsByCategoryByReportType,t={};return Object.entries(e).forEach(([e,r])=>{t[e]=t[e]||{},Object.values(r).forEach(r=>{r.forEach(r=>{t[e][r.uniqueId]=r})})}),t},selectedReportsForCurrentType(){var e;const t=null===(e=this.report)||void 0===e?void 0:e.type;if(!t)return[];const r=(this.selectedReports||{})[t]||{};let o=[];if(this.enforceSelectedReportOrder)o=this.selectedReportsOrderNormalized[t]||[];else{const e=this.reportsByCategoryByReportType[t]||{},n=[];Object.values(e).forEach(e=>{e.forEach(e=>{r[e.uniqueId]&&n.push(e.uniqueId)})}),o=n}if(o.length||(o=Object.keys(r).filter(e=>r[e])),!o.length)return[];const n=this.reportsLookup[t]||{};return o.map(e=>n[e]).filter(e=>!!e)},reportsByCategoryByReportTypeInColumns(){const e=this.reportsByCategoryByReportType,t=Object.entries(e).map(([e,t])=>{const r=Math.floor((Object.keys(t).length+1)/2),o={},n={};let l=o;return Object.entries(t).forEach(([e,t])=>{l[e]=t,Object.keys(l).length>=r&&(l=n)}),[e,[o,n]]});return Object.fromEntries(t)},entityCancelText(){return Object(v["translate"])("General_OrCancel",'',"")},frequencyPeriodSingle(){if(!this.report||!this.report.period)return"";const{ReportPlugin:e}=window;let t=e.periodTranslations[this.report.period];return t||(t=e.periodTranslations.day),t.single},frequencyPeriodPlural(){if(!this.report||!this.report.period)return"";const{ReportPlugin:e}=window;let t=e.periodTranslations[this.report.period];return t||(t=e.periodTranslations.day),t.plural},evolutionGraphsShowForEachInPeriod(){return Object(v["translate"])("ScheduledReports_EvolutionGraphsShowForEachInPeriod","","",this.frequencyPeriodSingle)},reportSegmentInlineHelp(){const e=["module=CoreHome","action=index","category=General_Visitors","subcategory=CoreHome_Segments"].join("&"),t=piwikHelper.getCurrentQueryStringWithParametersModified(e);return Object(v["translate"])("ScheduledReports_HelpSegmentManagement",``,"")},timezoneOffset(){return v["Matomo"].timezoneOffset},timeZoneDifferenceInHours(){return v["Matomo"].timezoneOffset/3600},reportHours(){const e=[];for(let t=0;t<24;t+=1)2*this.timeZoneDifferenceInHours%2!==0?e.push({key:t+".5",value:t+":30"}):e.push({key:""+t,value:""+t});return e},reportHourUtc(){const e=ee(this.report.hour,-this.timeZoneDifferenceInHours);return Object(v["translate"])("ScheduledReports_ReportHourWithUTC",[e])},saveButtonTitle(){const{ReportPlugin:e}=window,t=this.report.idreport>0;return t?e.updateReportString:e.createReportString},contentTitle(){const{ReportPlugin:e}=window,t=this.report.idreport>0;return t?e.updateReportString:Object(v["translate"])("ScheduledReports_CreateAndScheduleReport")},getDeliveryMediumInlineTooltip(){const e=Object(v["translate"])("CoreHome_LearnMoreFullStop",Object(v["externalLink"])("https://matomo.org/faq/general/create-and-schedule-a-report/"),"");return`${Object(v["translate"])("ScheduledReports_CreateTooltip")} ${e}`}}});ue.render=Y;var me=ue;const be={class:"first"},Oe={key:0},he={colspan:"7"},ye=Object(l["createElementVNode"])("br",null,null,-1),je=Object(l["createElementVNode"])("br",null,null,-1),ge=["href"],ve=Object(l["createElementVNode"])("br",null,null,-1),Re=Object(l["createElementVNode"])("br",null,null,-1),fe={key:1},Se={colspan:"7"},Ee=Object(l["createElementVNode"])("br",null,null,-1),Ne=Object(l["createElementVNode"])("br",null,null,-1),ke=Object(l["createElementVNode"])("br",null,null,-1),Ve={class:"first"},Be={key:0,class:"entityInlineHelp",style:{"font-size":"9pt"}},we={key:0},Te={key:1},_e={key:0},Ce={key:0},Pe=Object(l["createElementVNode"])("br",null,null,-1),Fe=["onClick"],De=["src"],Me={key:2,class:"loadingPiwik"},qe=["id","action"],xe=["value"],Le=Object(l["createElementVNode"])("input",{type:"hidden",name:"force_api_session",value:"1"},null,-1),Ie=["onClick","id"],$e=["src"],He={style:{"text-align":"center","padding-top":"2px"}},Ae=["onClick","title"],Ue=Object(l["createElementVNode"])("span",{class:"icon-edit"},null,-1),Ge=[Ue],ze={style:{"text-align":"center","padding-top":"2px"}},We=["onClick","title"],Ze=Object(l["createElementVNode"])("span",{class:"icon-delete"},null,-1),Ke=[Ze],Qe={class:"tableActionBar"},Xe=Object(l["createElementVNode"])("span",{class:"icon-add"},null,-1);function Je(e,t,r,o,n,i){const a=Object(l["resolveComponent"])("MatomoLoader"),c=Object(l["resolveComponent"])("ContentBlock"),s=Object(l["resolveDirective"])("content-table");return Object(l["openBlock"])(),Object(l["createBlock"])(c,{id:"entityEditContainer",class:"entityTableContainer","help-url":e.externalRawLink("https://matomo.org/docs/email-reports/"),feature:"true","content-title":e.contentTitle},{default:Object(l["withCtx"])(()=>{var r;return[Object(l["createElementVNode"])("p",null,Object(l["toDisplayString"])(e.translate("ScheduledReports_ManageTooltip")),1),Object(l["withDirectives"])((Object(l["openBlock"])(),Object(l["createElementBlock"])("table",null,[Object(l["createElementVNode"])("thead",null,[Object(l["createElementVNode"])("tr",null,[Object(l["createElementVNode"])("th",be,Object(l["toDisplayString"])(e.translate("General_Description")),1),Object(l["createElementVNode"])("th",null,Object(l["toDisplayString"])(e.translate("ScheduledReports_ReportSchedule")),1),Object(l["createElementVNode"])("th",null,Object(l["toDisplayString"])(e.translate("ScheduledReports_ReportFormat")),1),Object(l["createElementVNode"])("th",null,Object(l["toDisplayString"])(e.translate("ScheduledReports_SendReportTo")),1),Object(l["createElementVNode"])("th",null,Object(l["toDisplayString"])(e.translate("General_Download")),1),Object(l["createElementVNode"])("th",null,Object(l["toDisplayString"])(e.translate("General_Edit")),1),Object(l["createElementVNode"])("th",null,Object(l["toDisplayString"])(e.translate("General_Delete")),1)])]),Object(l["createElementVNode"])("tbody",null,["anonymous"===e.userLogin?(Object(l["openBlock"])(),Object(l["createElementBlock"])("tr",Oe,[Object(l["createElementVNode"])("td",he,[ye,Object(l["createTextVNode"])(" "+Object(l["toDisplayString"])(e.translate("ScheduledReports_MustBeLoggedIn"))+" ",1),je,Object(l["createTextVNode"])("› "),Object(l["createElementVNode"])("a",{href:"index.php?module="+e.loginModule},Object(l["toDisplayString"])(e.translate("Login_LogIn")),9,ge),ve,Re])])):null!==(r=e.reports)&&void 0!==r&&r.length?Object(l["createCommentVNode"])("",!0):(Object(l["openBlock"])(),Object(l["createElementBlock"])("tr",fe,[Object(l["createElementVNode"])("td",Se,[Ee,Object(l["createTextVNode"])(" "+Object(l["toDisplayString"])(e.translate("ScheduledReports_ThereIsNoReportToManage",e.siteName))+". ",1),Ne,ke])])),(Object(l["openBlock"])(!0),Object(l["createElementBlock"])(l["Fragment"],null,Object(l["renderList"])(e.decodedReports,t=>(Object(l["openBlock"])(),Object(l["createElementBlock"])("tr",{key:t.idreport},[Object(l["createElementVNode"])("td",Ve,[Object(l["createTextVNode"])(Object(l["toDisplayString"])(t.description)+" ",1),e.segmentEditorActivated&&t.idsegment?(Object(l["openBlock"])(),Object(l["createElementBlock"])("div",Be,[e.savedSegmentsById[t.idsegment]?(Object(l["openBlock"])(),Object(l["createElementBlock"])("span",we,Object(l["toDisplayString"])(e.savedSegmentsById[t.idsegment]),1)):(Object(l["openBlock"])(),Object(l["createElementBlock"])("span",Te,Object(l["toDisplayString"])(e.translate("ScheduledReports_SegmentDeleted")),1))])):Object(l["createCommentVNode"])("",!0)]),Object(l["createElementVNode"])("td",null,Object(l["toDisplayString"])(e.periods[t.period])+" ",1),Object(l["createElementVNode"])("td",null,[t.format?(Object(l["openBlock"])(),Object(l["createElementBlock"])("span",_e,Object(l["toDisplayString"])(t.format.toUpperCase()),1)):Object(l["createCommentVNode"])("",!0)]),Object(l["createElementVNode"])("td",null,[0===t.recipients.length?(Object(l["openBlock"])(),Object(l["createElementBlock"])("span",Ce,Object(l["toDisplayString"])(e.translate("ScheduledReports_NoRecipients")),1)):Object(l["createCommentVNode"])("",!0),(Object(l["openBlock"])(!0),Object(l["createElementBlock"])(l["Fragment"],null,Object(l["renderList"])(t.recipients,(e,t)=>(Object(l["openBlock"])(),Object(l["createElementBlock"])("span",{key:t},[Object(l["createTextVNode"])(Object(l["toDisplayString"])(e)+" ",1),Pe]))),128)),0===t.recipients.length||e.sendingReports.includes(t.idreport)?Object(l["createCommentVNode"])("",!0):(Object(l["openBlock"])(),Object(l["createElementBlock"])("a",{key:1,href:"#",name:"linkSendNow",class:"link_but withIcon",style:{"margin-top":"3px"},onClick:Object(l["withModifiers"])(r=>e.$emit("sendnow",t.idreport),["prevent"])},[Object(l["createElementVNode"])("img",{border:"0",src:e.reportTypes[t.type]},null,8,De),Object(l["createTextVNode"])(" "+Object(l["toDisplayString"])(e.translate("ScheduledReports_SendReportNow")),1)],8,Fe)),e.sendingReports.includes(t.idreport)?(Object(l["openBlock"])(),Object(l["createElementBlock"])("div",Me,[Object(l["createVNode"])(a),Object(l["createTextVNode"])(" "+Object(l["toDisplayString"])(e.translate("ScheduledReports_SendingReport")),1)])):Object(l["createCommentVNode"])("",!0)]),Object(l["createElementVNode"])("td",null,[Object(l["createElementVNode"])("form",{method:"POST",target:"_blank",id:"downloadReportForm_"+t.idreport,action:e.linkTo({module:"API",segment:null,method:"ScheduledReports.generateReport",idReport:t.idreport,outputType:e.downloadOutputType,language:e.language,format:-1!==["html","csv","tsv"].indexOf(t.format)?t.format:"original"})},[Object(l["createElementVNode"])("input",{type:"hidden",name:"token_auth",value:e.token_auth},null,8,xe),Le],8,qe),Object(l["createElementVNode"])("a",{href:"",rel:"noreferrer noopener",name:"linkDownloadReport",class:"link_but withIcon",onClick:Object(l["withModifiers"])(r=>e.displayReport(t.idreport),["prevent"]),id:t.idreport},[Object(l["createElementVNode"])("img",{border:"0",width:16,height:16,src:e.reportFormatsByReportType[t.type][t.format]},null,8,$e),Object(l["createTextVNode"])(" "+Object(l["toDisplayString"])(e.translate("General_Download")),1)],8,Ie)]),Object(l["createElementVNode"])("td",He,[Object(l["createElementVNode"])("button",{class:"table-action",onClick:r=>e.$emit("edit",t.idreport),title:e.translate("General_Edit")},Ge,8,Ae)]),Object(l["createElementVNode"])("td",ze,[Object(l["createElementVNode"])("button",{class:"table-action",onClick:r=>e.$emit("delete",t.idreport),title:e.translate("General_Delete")},Ke,8,We)])]))),128))])])),[[s]]),Object(l["createElementVNode"])("div",Qe,["anonymous"!==e.userLogin?(Object(l["openBlock"])(),Object(l["createElementBlock"])("button",{key:0,id:"add-report",onClick:t[0]||(t[0]=t=>e.$emit("create"))},[Xe,Object(l["createTextVNode"])(" "+Object(l["toDisplayString"])(e.translate("ScheduledReports_CreateAndScheduleReport")),1)])):Object(l["createCommentVNode"])("",!0)])]}),_:1},8,["help-url","content-title"])}var Ye=Object(l["defineComponent"])({props:{contentTitle:{type:String,required:!0},userLogin:{type:String,required:!0},loginModule:{type:String,required:!0},reports:{type:Array,required:!0},siteName:{type:String,required:!0},segmentEditorActivated:Boolean,savedSegmentsById:Object,periods:{type:Object,required:!0},downloadOutputType:{type:Number,required:!0},language:{type:String,required:!0},reportFormatsByReportType:{type:Object,required:!0},reportTypes:{type:Object,required:!0},sendingReports:{type:Array,required:!1}},components:{ContentBlock:v["ContentBlock"],MatomoLoader:v["MatomoLoader"]},directives:{ContentTable:v["ContentTable"]},emits:["create","edit","delete","sendnow"],methods:{linkTo(e){return"?"+v["MatomoUrl"].stringify(Object.assign(Object.assign({},v["MatomoUrl"].urlParsed.value),e))},displayReport(e){$("#downloadReportForm_"+e).submit()}},computed:{token_auth(){return v["Matomo"].token_auth},decodedReports(){return this.reports.map(e=>Object.assign(Object.assign({},e),{},{description:v["Matomo"].helper.htmlDecode(e.description)}))}}});Ye.render=Je;var et=Ye;function tt(){v["Matomo"].helper.lazyScrollTo(".emailReports",200)}function rt(e,t){var r;null!==(r=window.updateReportParametersFunctions)&&void 0!==r&&r[e]&&window.updateReportParametersFunctions[e](t)}function ot(e,t){var r;null!==(r=window.resetReportParametersFunctions)&&void 0!==r&&r[e]&&window.resetReportParametersFunctions[e](t)}window.resetReportParametersFunctions=window.resetReportParametersFunctions||{},window.updateReportParametersFunctions=window.updateReportParametersFunctions||{},window.getReportParametersFunctions=window.getReportParametersFunctions||{};const{$:nt}=window,lt="scheduledReports.pendingNotification",it=v["Matomo"].timezoneOffset/3600;var at=Object(l["defineComponent"])({props:{contentTitle:{type:String,required:!0},userLogin:{type:String,required:!0},loginModule:{type:String,required:!0},reports:{type:Array,required:!0},siteName:{type:String,required:!0},segmentEditorActivated:Boolean,savedSegmentsById:Object,periods:{type:Object,required:!0},downloadOutputType:{type:Number,required:!0},language:{type:String,required:!0},reportFormatsByReportType:{type:Object,required:!0},paramPeriods:{type:Object,required:!0},reportTypeOptions:{type:Object,required:!0},reportFormatsByReportTypeOptions:{type:Object,required:!0},displayFormats:{type:Object,required:!0},reportsByCategoryByReportType:{type:Object,required:!0},allowMultipleReportsByReportType:{type:Object,required:!0},countWebsites:{type:Number,required:!0},reportTypes:{type:Object,required:!0}},components:{MatomoLoader:v["MatomoLoader"],AddReport:me,ListReports:et},directives:{ContentTable:v["ContentTable"],Form:c["Form"]},mounted(){nt(this.$refs.root).on("click","a.entityCancelLink",()=>{this.showListOfReports()}),v["Matomo"].postEvent("ScheduledReports.ManageScheduledReport.mounted",{element:this.$refs.root});const e="undefined"!==typeof sessionStorage?sessionStorage.getItem(lt):null;e&&this.$refs.reportUpdatedSuccess&&(sessionStorage.removeItem(lt),this.fadeInOutSuccessMessage(this.$refs.reportUpdatedSuccess,e,!1))},unmounted(){v["Matomo"].postEvent("ScheduledReports.ManageScheduledReport.unmounted",{element:this.$refs.root})},data(){return{showReportsList:!0,report:{},selectedReports:{},selectedReportsOrder:{},sendingReports:[]}},methods:{sendReportNow(e){this.sendingReports.includes(e)||(tt(),this.sendingReports.push(e),v["AjaxHelper"].post({method:"ScheduledReports.sendReport"},{idReport:e,force:!0}).then(()=>{this.fadeInOutSuccessMessage(this.$refs.reportSentSuccess,Object(v["translate"])("ScheduledReports_ReportSent"),!1)}).finally(()=>{this.sendingReports=this.sendingReports.filter(t=>t!==e)}))},formSetEditReport(e){const{ReportPlugin:t}=window;let r={idreport:e,type:t.defaultReportType,format:t.defaultReportFormat,description:"",period:t.defaultPeriod,hour:t.defaultHour,reports:[],idsegment:"",evolutionPeriodFor:"prev",evolutionPeriodN:t.defaultEvolutionPeriodN,periodParam:t.defaultPeriod};e>0?(r=t.reportList[e],rt(r.type,r)):ot(r.type,r),r.hour=ee(r.hour,it),this.selectedReports={},this.selectedReportsOrder={},Object.values(r.reports).forEach(e=>{this.selectedReports[r.type]=this.selectedReports[r.type]||{},this.selectedReports[r.type][e]=!0}),this.selectedReportsOrder[r.type]=Object.values(r.reports).map(e=>e),r["format"+r.type]=r.format,r.idsegment||(r.idsegment=""),this.report=r,this.report.description=v["Matomo"].helper.htmlDecode(r.description)},fadeInOutSuccessMessage(e,t,r=!0){v["NotificationsStore"].show({message:t,placeat:e,context:"success",noclear:!0,type:"toast",style:{display:"inline-block",marginTop:"10px",width:"100%"},id:"scheduledReportSuccess"}),r&&("undefined"!==typeof sessionStorage&&sessionStorage.setItem(lt,t),v["Matomo"].helper.refreshAfter(2))},changedReportType(){ot(this.report.type,this.report)},deleteReport(e){v["Matomo"].helper.modalConfirm("#confirm",{yes:()=>{v["AjaxHelper"].post({method:"ScheduledReports.deleteReport"},{idReport:e},{redirectOnSuccess:!0})}})},showListOfReports(e){this.showReportsList=!0,v["Matomo"].helper.hideAjaxError(),("undefined"===typeof e||e)&&tt()},createReport(){this.showReportsList=!1,Object(l["nextTick"])(()=>{this.formSetEditReport(0)})},editReport(e){this.showReportsList=!1,Object(l["nextTick"])(()=>{this.formSetEditReport(e)})},submitReport(){const e={idReport:this.report.idreport,description:this.report.description,idSegment:this.report.idsegment,reportType:this.report.type,reportFormat:this.report["format"+this.report.type],periodParam:this.report.periodParam,evolutionPeriodFor:this.report.evolutionPeriodFor};"each"!==e.evolutionPeriodFor&&(e.evolutionPeriodN=this.report.evolutionPeriodN);const{period:t}=this.report,r=ee(this.report.hour,-it),o=e.reportType,n=this.selectedReports[o]||{};let l=(this.selectedReportsOrder[o]||[]).filter(e=>n[e]);l.length||(l=Object.keys(n).filter(e=>n[e])),l.length>0&&(e.reports=l);const i=window.getReportParametersFunctions[this.report.type](this.report);e.parameters=i;const a=this.report.idreport>0;return v["AjaxHelper"].post({method:a?"ScheduledReports.updateReport":"ScheduledReports.addReport",period:t,hour:r},e).then(()=>{tt(),this.fadeInOutSuccessMessage(this.$refs.reportUpdatedSuccess,a?Object(v["translate"])("ScheduledReports_ReportUpdated"):Object(v["translate"])("ScheduledReports_ReportAdded"))}),!1},onChangeProperty(e,t){this.report[e]=t,"type"===e&&this.changedReportType()},toggleSelectedReport(e,t){this.selectedReports[e]=this.selectedReports[e]||{};const r=!this.selectedReports[e][t];this.selectedReports[e][t]=r,this.selectedReportsOrder[e]=this.selectedReportsOrder[e]||[],r?-1===this.selectedReportsOrder[e].indexOf(t)&&this.selectedReportsOrder[e].push(t):this.selectedReportsOrder[e]=this.selectedReportsOrder[e].filter(e=>e!==t)},onReorderSelectedReports(e,t){this.selectedReportsOrder[e]=t.filter(t=>{var r;return null===(r=this.selectedReports[e])||void 0===r?void 0:r[t]})}},computed:{showReportForm(){return!this.showReportsList},decodedSiteName(){return v["Matomo"].helper.htmlDecode(this.siteName)}}});at.render=g;var ct=at; /*! * Matomo - free/libre analytics platform * diff --git a/plugins/ScheduledReports/vue/dist/umd.metadata.json b/plugins/ScheduledReports/vue/dist/umd.metadata.json index 6eb1c55162a..dce4477a3c5 100644 --- a/plugins/ScheduledReports/vue/dist/umd.metadata.json +++ b/plugins/ScheduledReports/vue/dist/umd.metadata.json @@ -1,6 +1,6 @@ { "dependsOn": [ - "CorePluginsAdmin", - "CoreHome" + "CoreHome", + "CorePluginsAdmin" ] } \ No newline at end of file diff --git a/plugins/ScheduledReports/vue/src/AddReport/AddReport.vue b/plugins/ScheduledReports/vue/src/AddReport/AddReport.vue index 2910a3098fb..7a80409bbdd 100644 --- a/plugins/ScheduledReports/vue/src/AddReport/AddReport.vue +++ b/plugins/ScheduledReports/vue/src/AddReport/AddReport.vue @@ -600,12 +600,19 @@ export default defineComponent({ ); }, reportSegmentInlineHelp() { + const segmentManagementPageParams = [ + 'module=CoreHome', + 'action=index', + 'category=General_Visitors', + 'subcategory=CoreHome_Segments', + ].join('&'); + const segmentManagementPageUrl = piwikHelper.getCurrentQueryStringWithParametersModified( + segmentManagementPageParams, + ); return translate( - 'ScheduledReports_Segment_HelpScheduledReport', - '', + 'ScheduledReports_HelpSegmentManagement', + ``, '', - translate('SegmentEditor_DefaultAllVisits'), - translate('SegmentEditor_AddNewSegment'), ); }, timezoneOffset() { diff --git a/plugins/SegmentEditor/Controller.php b/plugins/SegmentEditor/Controller.php new file mode 100644 index 00000000000..4116f902784 --- /dev/null +++ b/plugins/SegmentEditor/Controller.php @@ -0,0 +1,171 @@ +period = Request::fromRequest()->getStringParameter('period', 'day'); + $this->strDate = Request::fromRequest()->getStringParameter('date', 'yesterday'); + $this->currentSegmentDefinition = Request::fromRequest()->getStringParameter('segment', ''); + $this->checkSitePermission(); + Piwik::checkUserHasViewAccess($this->idSite); + } + + public function manageSegments(): string + { + $view = new View('@SegmentEditor/manageSegments'); + $this->setGeneralVariablesView($view); + $view->authorizedToCreateSegments = SegmentEditorAPI::getInstance()->isUserCanAddNewSegment($this->idSite); + $view->segmentTranslations = $this->getTranslations(); + $view->showMenu = true; + $view->sparklineTooltipKey = $this->getSparklineTooltipKey(); + + $allVisitsSegment = [ + 'definition' => '', + 'name' => Piwik::translate('SegmentEditor_DefaultAllVisits'), + 'fixed' => true, + 'starred' => false, + ]; + $view->segmentList = SegmentEditor\API::getInstance()->getAll($this->idSite); + array_unshift($view->segmentList, $allVisitsSegment); + $view->segmentData = []; + foreach ($view->segmentList as $index => &$segment) { + $segment['fixed'] = $segment['fixed'] ?? false; + $segment['selected'] = $segment['definition'] === $this->currentSegmentDefinition; + $segment['dashboardUrl'] = '?module=CoreHome&action=index&idSite=' . $this->idSite . '&period=' . $this->period . '&date=' . $this->strDate . '&segment=' . urlencode($segment['definition']); + $segment['sparklineUrl'] = $this->getSegmentSparklineUrl($segment); + $data = VisitsSummary\API::getInstance() + ->get($this->idSite, $this->period, $this->strDate, $segment['definition']) + ->getFirstRow()->getArrayCopy(); + list($previousDate, $ignore) = Range::getLastDate($this->strDate, $this->period); + $data['past_nb_visits'] = VisitsSummary\API::getInstance() + ->getVisits($this->idSite, $this->period, $previousDate, $segment['definition']) + ->getFirstRow()->getColumn('nb_visits'); + $data['evolution_visits_direction'] = $this->getEvolutionDirection($data["nb_visits"], $data['past_nb_visits']); + $data['evolution_visits_icon'] = $this->getEvolutionIcon($data['evolution_visits_direction']); + $data['evolution_visits'] = CalculateEvolutionFilter::calculate($data["nb_visits"], $data['past_nb_visits'], 0, true, false); + $view->segmentData[$index] = $data; + } + + return $view->render(); + } + + protected function getEvolutionDirection($currentValue, $pastValue): string + { + if ($currentValue > $pastValue) { + return self::$POSITIVE; + } + + if ($currentValue < $pastValue) { + return self::$NEGATIVE; + } + + return self::$STABLE; + } + + protected function getEvolutionIcon($direction): string + { + if ($direction === self::$POSITIVE) { + return 'plugins/MultiSites/images/arrow_up.png'; + } + + if ($direction === self::$NEGATIVE) { + return 'plugins/MultiSites/images/arrow_down.png'; + } + + return 'plugins/MultiSites/images/stop.png'; + } + + protected function getSegmentSparklineUrl($segment): string + { + $params = $this->getGraphParamsModified([ + 'viewDataTable' => 'sparkline', + 'action' => 'getEvolutionGraph', + 'module' => 'VisitsSummary', + 'columns' => ['nb_visits'], + 'segment' => $segment['definition'], + ]); + return Url::getCurrentQueryStringWithParametersModified($params); + } + + private function getSparklineTooltipKey(): string + { + if ($this->period === 'day') { + return 'SegmentEditor_SparklineTooltipDays'; + } + if ($this->period === 'week') { + return 'SegmentEditor_SparklineTooltipWeeks'; + } + if ($this->period === 'month') { + return 'SegmentEditor_SparklineTooltipMonths'; + } + if ($this->period === 'year') { + return 'SegmentEditor_SparklineTooltipYears'; + } + + return ''; + } + + private function getTranslations(): array + { + $translationKeys = array( + 'SegmentEditor_AddNewSegment', + 'SegmentEditor_ManageSegments', + 'SegmentEditor_SegmentPageTitle', + 'SegmentEditor_SegmentPageDescription', + 'SegmentEditor_SeeDashboardForThisSegment', + 'SegmentEditor_SparklineTooltipDays', + 'SegmentEditor_SparklineTooltipWeeks', + 'SegmentEditor_SparklineTooltipMonths', + 'SegmentEditor_SparklineTooltipYears', + 'General_Segment', + 'General_SegmentDocumentation', + 'General_ColumnEvolutionVisits', + 'General_ColumnEvolutionVisitsDocumentation', + 'General_ColumnNbVisits', + 'General_ColumnNbVisitsDocumentation', + 'General_ColumnNbActions', + 'General_ColumnNbActionsDocumentation', + 'General_Search', + 'General_SearchNoResults', + ); + $translations = array(); + foreach ($translationKeys as $key) { + $translations[$key] = Piwik::translate($key); + } + return $translations; + } +} diff --git a/plugins/SegmentEditor/Menu.php b/plugins/SegmentEditor/Menu.php new file mode 100644 index 00000000000..63456006321 --- /dev/null +++ b/plugins/SegmentEditor/Menu.php @@ -0,0 +1,41 @@ +getIntegerParameter('idSite', 0); + if (Piwik::isUserHasWriteAccess($idSite)) { + $menu->addMeasurableItem( + 'CoreHome_Segments', + $this->urlForModuleAction('CoreHome', 'index', [ + 'category' => 'General_Visitors', + 'subcategory' => 'CoreHome_Segments', + ]), + 19, + Piwik::translate('SegmentEditor_ManageSegments'), + 'icon-outlink' + ); + } + } +} diff --git a/plugins/SegmentEditor/SegmentEditor.php b/plugins/SegmentEditor/SegmentEditor.php index d17f6bbff2b..43edf062123 100644 --- a/plugins/SegmentEditor/SegmentEditor.php +++ b/plugins/SegmentEditor/SegmentEditor.php @@ -57,9 +57,15 @@ public function registerEvents() 'Db.getTablesInstalled' => 'getTablesInstalled', 'SitesManager.deleteSite.end' => 'onDeleteSite', 'UsersManager.deleteUser' => 'onDeleteUser', + 'API.getPagesComparisonsDisabledFor' => 'getPagesComparisonsDisabledFor', ); } + public function getPagesComparisonsDisabledFor(&$pages) + { + $pages[] = 'General_Visitors.CoreHome_Segments'; + } + public function onDeleteSite($idSite) { $model = new Model(); @@ -328,6 +334,7 @@ public function install() public function getJsFiles(&$jsFiles) { $jsFiles[] = "plugins/SegmentEditor/javascripts/Segmentation.js"; + $jsFiles[] = "plugins/SegmentEditor/javascripts/manageSegmentsPage.js"; } public function getStylesheetFiles(&$stylesheets) @@ -367,6 +374,7 @@ public function getClientSideTranslationKeys(&$translationKeys) $translationKeys[] = 'SegmentEditor_OperatorOR'; $translationKeys[] = 'SegmentEditor_AddANDorORCondition'; $translationKeys[] = 'SegmentEditor_DefaultAllVisits'; + $translationKeys[] = 'SegmentEditor_AreYouSureDeleteSegment'; $translationKeys[] = 'General_OperationEquals'; $translationKeys[] = 'General_OperationNotEquals'; $translationKeys[] = 'General_OperationAtMost'; diff --git a/plugins/SegmentEditor/SegmentSelectorControl.php b/plugins/SegmentEditor/SegmentSelectorControl.php index f3a3c2cee22..d72e7869156 100644 --- a/plugins/SegmentEditor/SegmentSelectorControl.php +++ b/plugins/SegmentEditor/SegmentSelectorControl.php @@ -75,6 +75,12 @@ public function __construct() } } + $this->manageSegmentUrl = [ + 'module' => 'CoreHome', + 'action' => 'index', + 'category' => 'General_Visitors', + 'subcategory' => 'CoreHome_Segments', + ]; $this->authorizedToCreateSegments = SegmentEditorAPI::getInstance()->isUserCanAddNewSegment($this->idSite); $this->isUserAnonymous = Piwik::isUserIsAnonymous(); $this->segmentTranslations = $this->getTranslations(); @@ -110,15 +116,19 @@ private function getTranslations() { $translationKeys = array( 'General_CanNotEditGlobalSegment', + 'General_CanNotDeleteGlobalSegment', 'General_CanNotStarGlobalSegment', 'General_CanNotUnstarGlobalSegment', 'General_CanEditGlobalSegment', + 'General_CanDeleteGlobalSegment', 'General_CanStarGlobalSegment', 'General_CanUnstarGlobalSegment', 'General_CanNotEditSiteSegment', + 'General_CanNotDeleteSiteSegment', 'General_CanNotStarSiteSegment', 'General_CanNotUnstarSiteSegment', 'General_CanEditSiteSegment', + 'General_CanDeleteSiteSegment', 'General_CanStarSiteSegment', 'General_CanUnstarSiteSegment', 'General_OperationEquals', diff --git a/plugins/SegmentEditor/Widgets/ManageSegments.php b/plugins/SegmentEditor/Widgets/ManageSegments.php new file mode 100644 index 00000000000..c28664473f1 --- /dev/null +++ b/plugins/SegmentEditor/Widgets/ManageSegments.php @@ -0,0 +1,29 @@ +getIntegerParameter('idSite', 0); + + $config->setCategoryId('General_Visitors'); + $config->setSubcategoryId('CoreHome_Segments'); + $config->setName('CoreHome_Segments'); + $config->setIsNotWidgetizable(); + + if (empty($idSite)) { + $config->disable(); + } + } +} diff --git a/plugins/SegmentEditor/categories/ManageSegmentsSubcategory.php b/plugins/SegmentEditor/categories/ManageSegmentsSubcategory.php new file mode 100644 index 00000000000..67c718cbb1d --- /dev/null +++ b/plugins/SegmentEditor/categories/ManageSegmentsSubcategory.php @@ -0,0 +1,19 @@ +'; + listHtml += ''; } listHtml += ''; @@ -243,33 +244,33 @@ Segmentation = (function($) { '>' + '' + getSegmentName(segment) + ''; - const canEdit = getIsUserCanEditSegment(segment); + const canEdit = getCanUserEditSegment(segment); // We do not use "disabled" attribute here because it remove pointer events and we want to show tooltips const disabledAttribute = canEdit ? '' : 'data-state="disabled"'; const starTitleAttribute = 'title="' + getStarSegmentTitle(segment, canEdit) + '"'; listHtml += '' + - ''; if (self.segmentAccess === 'write') { const editTitleAttribute = 'title="' + getEditSegmentTitle(segment, canEdit) + '"'; - listHtml += ''; + listHtml += ''; } if ( comparisonService.isComparisonEnabled() || comparisonService.isComparisonEnabled() === null // may not be initialized since this code is outside of Vue ) { - listHtml += ''; + listHtml += ''; } listHtml += ''; } $(html).find(".segmentList > ul").append(listHtml); - if (self.segmentAccess === "write"){ - $(html).find(".add_new_segment").html(self.translations['SegmentEditor_AddNewSegment']); + if (self.segmentAccess === "write") { + $(html).find(".add_new_segment").show(); } else { $(html).find(".add_new_segment").hide(); } @@ -402,25 +403,88 @@ Segmentation = (function($) { $(self.target).find(".segmentList .segmentsSharedWithMeBySuperUser").show(); }; - var bindEvents = function () { - self.target.on('click', '.segmentationContainer', function (e) { - // hide all other modals connected with this widget - if (self.content.closest('.segmentEditorPanel').hasClass("expanded")) { - if ($(e.target).hasClass("jspDrag") === true - || $(e.target).hasClass("segmentFilterContainer") === true - || $(e.target).parents().hasClass("segmentFilterContainer") === true - || $(e.target).hasClass("filterNoResults")) { - e.stopPropagation(); - } else { - self.target.closest('.segmentEditorPanel').removeClass('expanded'); - } - } else { - // for each visible segmentationContainer -> trigger click event to close and kill scrollpane - very important ! - closeAllOpenLists(); - self.target.closest('.segmentEditorPanel').addClass('expanded'); - self.target.find('.segmentFilter').val(self.translations['General_Search']).trigger('keyup'); - } + function togglePanel(event) { + if (self.content.closest('.segmentEditorPanel').hasClass("expanded")) { + closePanel(event); + } else { + openPanel(); + } + } + + function openPanel() { + // for each visible segmentationContainer -> trigger click event to close and kill scrollpane - very important ! + closeAllOpenLists(); + self.target.closest('.segmentEditorPanel').addClass('expanded'); + self.target.find('.segmentFilter').val(self.translations['General_Search']).trigger('keyup'); + } + + function closePanel(event) { + if (event) { + // hide all other modals connected with this widget + if ( + $(event.target).hasClass("jspDrag") === true || + $(event.target).hasClass("segmentFilterContainer") === true || + $(event.target).parents().hasClass("segmentFilterContainer") === true || + $(event.target).hasClass("filterNoResults") + ) { + e.stopPropagation(); + } + } + self.target.closest('.segmentEditorPanel').removeClass('expanded'); + } + + function askToDeleteSegment(idSegment) { + const segment = getSegmentFromId(idSegment); + const label = _pk_translate('SegmentEditor_AreYouSureDeleteSegment', [getSegmentName(segment)]); + $('#segment-delete-confirm').find('h2').text(label); + if (idSegment != "") { + piwikHelper.modalConfirm($('#segment-delete-confirm'), { + yes: function(){ + self.deleteMethod({ + "idsegment" : idSegment + }); + } }); + } + } + + function toggleStarredSegment($segment, idSegment) { + const segment = getSegmentFromId(idSegment); + segment.starred = !segment.starred; + const method = segment.starred ? 'star' : 'unstar'; + updateStarredSegment(segment); + + var ajaxHandler = new ajaxHelper(); + ajaxHandler.addParams({ + "module": 'API', + "format": 'json', + "method": 'SegmentEditor.' + method, + "userLogin": piwik.userLogin, + "idSegment": idSegment, + }, 'POST'); + ajaxHandler.setErrorCallback(function () { + segment.starred = !segment.starred; + updateStarredSegment(segment, true); + }); + ajaxHandler.setCallback(function (response) { + segment.starred_by = response.starred_by; + updateStarredSegment(segment); + }); + ajaxHandler.send(); + } + + function onSegmentsStarChange(callback) { + starCallbackList.push(callback); + } + onSegmentsStarChange(function(segment, isError) { + const $starButton = self.target.find(`[data-star="${segment.idsegment}"]`); + const $segment = $starButton.closest('li'); + updateStarSegmentTitle($starButton, segment); + triggerStarAnimation($segment, segment, isError); + }); + + var bindEvents = function () { + self.target.on('click', '.segmentationContainer', togglePanel); self.target.on('click', '.editSegment', function(e) { const $button = $(this); @@ -442,30 +506,9 @@ Segmentation = (function($) { if ($button.attr('data-state') === 'disabled') { return false; } - const $root = $button.closest('li'); - const idSegment = $root.data('idsegment'); - const segment = getSegmentFromId(idSegment); - segment.starred = !segment.starred; - const method = segment.starred ? 'star' : 'unstar'; - updateStarredSegment($root, segment); - - var ajaxHandler = new ajaxHelper(); - ajaxHandler.addParams({ - "module": 'API', - "format": 'json', - "method": 'SegmentEditor.' + method, - "userLogin": piwik.userLogin, - "idSegment": idSegment, - }, 'POST'); - ajaxHandler.setErrorCallback(function () { - segment.starred = !segment.starred; - updateStarredSegment($root, segment, true); - }); - ajaxHandler.setCallback(function (response) { - segment.starred_by = response.starred_by; - updateStarSegmentTooltip($root, segment); - }); - ajaxHandler.send(); + const $segment = $button.closest('li'); + const idSegment = $button.attr('data-star'); + toggleStarredSegment($segment, idSegment); }); self.target.on('click', '.compareSegment', function (e) { @@ -478,7 +521,9 @@ Segmentation = (function($) { const comparisonService = window.CoreHome.ComparisonsStoreInstance; const segmentDefinition = $button.closest('li').data('definition'); if ($button.attr('data-state') === 'active') { - comparisonService.removeSegmentComparisonByDefinition(segmentDefinition); + if (segmentDefinition) { + comparisonService.removeSegmentComparisonByDefinition(segmentDefinition); + } } else { comparisonService.addSegmentComparison({ segment: segmentDefinition, @@ -585,21 +630,9 @@ Segmentation = (function($) { e.preventDefault(); }); - self.target.on('click', ".delete", function() { - var segmentName = $(self.form).find(".segment-content > h3 > span").text(); var segmentId = $(self.form).find(".available_segments_select").val(); - var params = { - "idsegment" : segmentId - }; - $('#segment-delete-confirm').find('#name').text( segmentName ); - if(segmentId != ""){ - piwikHelper.modalConfirm($('#segment-delete-confirm'), { - yes: function(){ - self.deleteMethod(params); - } - }); - } + askToDeleteSegment(segmentId); }); self.target.on("click", "a.close", function (e) { @@ -623,7 +656,11 @@ Segmentation = (function($) { }; - function getIsUserCanEditSegment(segment) { + function getCanUserCreateSegment() { + return self.segmentAccess === 'write'; + } + + function getCanUserEditSegment(segment) { if (self.segmentAccess !== 'write') { return false; } @@ -634,6 +671,40 @@ Segmentation = (function($) { return (segment.login === piwik.userLogin); } + function getDeleteSegmentTitle(segment, canEdit) { + // Site-specific segments + if (segment.enable_only_idsite) { + if (canEdit) { + return self.translations['General_CanDeleteSiteSegment']; + } else { + return self.translations['General_CanNotDeleteSiteSegment']; + } + } + + // Global segments + if (canEdit) { + return self.translations['General_CanDeleteGlobalSegment']; + } + return self.translations['General_CanNotDeleteGlobalSegment']; + } + + function getEditSegmentTitle(segment, canEdit) { + // Site-specific segments + if (segment.enable_only_idsite) { + if (canEdit) { + return self.translations['General_CanEditSiteSegment']; + } else { + return self.translations['General_CanNotEditSiteSegment']; + } + } + + // Global segments + if (canEdit) { + return self.translations['General_CanEditGlobalSegment']; + } + return self.translations['General_CanNotEditGlobalSegment']; + } + function getStarredByTitlePart(segment) { const login = segment.starred_by || ''; if (login === piwik.userLogin) { @@ -677,32 +748,22 @@ Segmentation = (function($) { return self.translations['General_CanNotStarGlobalSegment']; } - function getEditSegmentTitle(segment, canEdit) { - // Site-specific segments - if (segment.enable_only_idsite) { - if (canEdit) { - return self.translations['General_CanEditSiteSegment']; - } else { - return self.translations['General_CanNotEditSiteSegment']; - } - } - - // Global segments - if (canEdit) { - return self.translations['General_CanEditGlobalSegment']; - } - return self.translations['General_CanNotEditGlobalSegment']; + function updateStarSegmentTitle($starButton, segment) { + const canEdit = getCanUserEditSegment(segment); + $starButton.attr('title', getStarSegmentTitle(segment, canEdit)); } - function updateStarSegmentTooltip($segment, segment) { - const $starButton = $segment.find('.starSegment'); - const canEdit = getIsUserCanEditSegment(segment); - $starButton.attr('title', getStarSegmentTitle(segment, canEdit)); + function updateStarredSegment(segment, isError = false) { + starCallbackList.forEach(function(callback) { + callback(segment, isError); + }); } - function updateStarredSegment($segment, segment, isError = false) { - updateStarSegmentTooltip($segment, segment); + function triggerStarAnimation($segment, segment, isError = false) { $segment.toggleClass('segmentStarred', segment.starred); + if (!$segment.is(":visible")) { + return; + } $segment.one('animationend', function avoidAnimationRepetition() { $segment.removeClass('segmentStarAnimation'); $segment.removeClass('segmentStarErrorAnimation'); @@ -712,7 +773,7 @@ Segmentation = (function($) { } function openEditFormGivenSegment(option) { - var idsegment = option.attr("data-idsegment"); + var idsegment = option.attr("data-idsegment") || ''; if (idsegment.length == 0) { displayFormAddNewSegment(); @@ -723,6 +784,11 @@ Segmentation = (function($) { } } + function openEditFormGivenIdSegment(idSegment) { + const $segment = $(self.target).find("[data-idsegment='" + idSegment + "']"); + openEditFormGivenSegment($segment); + } + var normalizeSearchString = function(search){ search = search.replace(/^\s+|\s+$/g, ''); // trim search = search.toLowerCase(); @@ -1030,6 +1096,23 @@ Segmentation = (function($) { }); } + window.SegmentEditorPanel = { + askToDeleteSegment, + closePanel, + getDeleteSegmentTitle, + getEditSegmentTitle, + getCanUserEditSegment, + getSegmentFromId, + normalizeSearchString, + onSegmentsStarChange, + openPanel, + openEditFormGivenIdSegment, + togglePanel, + toggleStarredSegment, + triggerStarAnimation, + updateStarSegmentTitle, + }; + this.initHtml(); bindEvents(); handleAddNewSegment(); @@ -1045,8 +1128,8 @@ $(document).ready(function() { /** * Sets up and handles events for the segment selector & editor control. * - * @param {Element} element The HTML element generated by the SegmentSelectorControl PHP class. Should - * have the CSS class 'segmentEditorPanel'. + * @param {Element} element The HTML element generated by the SegmentSelectorControl PHP class. + * Should have the CSS class 'segmentEditorPanel'. * @constructor */ var SegmentSelectorControl = function (element) { @@ -1281,7 +1364,7 @@ $(document).ready(function() { }; /** - * Initializes all elements w/ the .segmentEditorPanel CSS class as SegmentSelectorControls, + * Initializes all elements w/ the .segmentEditorPanel CSS class as SegmentSelectorControl, * if the element has not already been initialized. */ SegmentSelectorControl.initElements = function () { diff --git a/plugins/SegmentEditor/javascripts/manageSegmentsPage.js b/plugins/SegmentEditor/javascripts/manageSegmentsPage.js new file mode 100644 index 00000000000..7fe98f535e3 --- /dev/null +++ b/plugins/SegmentEditor/javascripts/manageSegmentsPage.js @@ -0,0 +1,165 @@ +function initManageSegmentsPage() { + const root = document.querySelector('[data-page="manage-segments"]'); + if (!root) { + return; + } + const tbody = root.querySelector('tbody'); + const rowList = Array.from(tbody.children).reverse(); + const noResultElement = root.querySelector('.tableFooterLabel'); + let filterTimerId = null; + init(); + + function init() { + reorderSegments(); + initListener(); + initTitles(); + window.SegmentEditorPanel.onSegmentsStarChange(onSegmentsStarChange); + } + + function reorderSegments() { + let currentOrder = -1; + const lastRowByOrder = []; + rowList.forEach(function (row) { + const order = row.getAttribute('data-segment-order'); + if (currentOrder < order) { + currentOrder = order; + } + const nextSibling = findNextSiblingByOrder(lastRowByOrder, order); + if (nextSibling) { + tbody.insertBefore(row, nextSibling); + } else { + tbody.appendChild(row); + } + lastRowByOrder[order] = row; + }); + } + + function findNextSiblingByOrder(lastRowByOrder, order) { + if (lastRowByOrder[order]) { + return lastRowByOrder[order]; + } + if (order <= 0) { + return null; + } + return findNextSiblingByOrder(lastRowByOrder, order - 1); + } + + function initTitles() { + rowList.forEach(function (row) { + const $starButton = $('[data-star]', row); + const $editButton = $('[data-edit-segment]', row); + const $deleteButton = $('[data-delete-segment]', row); + const idSegment = $starButton.attr('data-star'); + const segment = window.SegmentEditorPanel.getSegmentFromId(idSegment); + const canEdit = window.SegmentEditorPanel.getCanUserEditSegment(segment); + if (!canEdit) { + $starButton.attr('data-state', 'disabled'); + $editButton.attr('data-state', 'disabled'); + $deleteButton.attr('data-state', 'disabled'); + } + window.SegmentEditorPanel.updateStarSegmentTitle($starButton, segment); + $editButton.attr('title', window.SegmentEditorPanel.getEditSegmentTitle(segment, canEdit)); + $deleteButton.attr('title', window.SegmentEditorPanel.getDeleteSegmentTitle(segment, canEdit)); + }); + } + + function initListener() { + $(root).on('click', '[data-edit-segment]', function (e) { + e.stopPropagation(); + e.preventDefault(); + const $button = $(this); + if ($button.attr('data-state') === 'disabled') { + return false; + } + const idSegment = $button.attr('data-edit-segment'); + SegmentEditorPanel.openEditFormGivenIdSegment(idSegment); + }); + $(root).on('click', '[data-delete-segment]', function (e) { + e.stopPropagation(); + e.preventDefault(); + const $button = $(this); + if ($button.attr('data-state') === 'disabled') { + return false; + } + const idSegment = $button.attr('data-delete-segment'); + SegmentEditorPanel.openEditFormGivenIdSegment(idSegment); + SegmentEditorPanel.askToDeleteSegment(idSegment); + }); + $(root).on('click', '[data-star]', function (e) { + e.stopPropagation(); + e.preventDefault(); + const $button = $(this); + if ($button.attr('data-state') === 'disabled') { + return false; + } + const $segment = $button.closest('tr'); + const idSegment = $button.attr('data-star'); + window.SegmentEditorPanel.toggleStarredSegment($segment, idSegment); + }); + $(root).on('input', '#manageSegmentSearch', function (e) { + e.stopPropagation(); + e.preventDefault(); + + if (filterTimerId) { + clearTimeout(filterTimerId); + filterTimerId = null; + } + const value = $(this).val(); + if (value.length >= 2) { + filterTimerId = setTimeout(function () { + filterSegmentList(value); + }, 500); + } else { + filterTimerId = setTimeout(clearFilterSegmentList, 500); + } + }); + $(root).on('click', '.createNewSegment', function (e) { + e.stopPropagation(); + e.preventDefault(); + window.SegmentEditorPanel.openEditFormGivenIdSegment(); + }); + } + + function getStarButtonFromSegmentId(segmentId) { + return $(`[data-star="${segmentId}"]`, root); + } + + function onSegmentsStarChange(segment, isError) { + const $starButton = getStarButtonFromSegmentId(segment.idsegment); + const $segment = $starButton.closest('tr'); + const $previousOrder = $segment.attr('data-segment-order'); + var tooltip = $(root).parents('.matomo-widget').tooltip('instance'); + if (tooltip) { + tooltip.disable(); + } + window.SegmentEditorPanel.updateStarSegmentTitle($starButton, segment); + if (tooltip) { + tooltip.enable(); + } + $segment.attr('data-segment-order', $previousOrder === '2' ? 2 : segment.starred ? 1 : 0); + reorderSegments(); + window.SegmentEditorPanel.triggerStarAnimation($segment, segment, isError); + } + + function filterSegmentList(keyword) { + clearFilterSegmentList(); + const search = window.SegmentEditorPanel.normalizeSearchString(keyword); + rowList.forEach(function (row) { + const segmentSeed = window.SegmentEditorPanel.normalizeSearchString($(row).attr('data-segment-name')); + if (segmentSeed.indexOf(search) === -1) { + $(row).hide(); + } + }); + + if ($(root).find("[data-segment-name]:visible").length === 0) { + $(noResultElement).show(); + } + } + + function clearFilterSegmentList() { + rowList.forEach(function (row) { + $(row).show(); + }); + $(noResultElement).hide(); + } +} diff --git a/plugins/SegmentEditor/lang/en.json b/plugins/SegmentEditor/lang/en.json index ecb2fd925b6..3d9302bfde8 100644 --- a/plugins/SegmentEditor/lang/en.json +++ b/plugins/SegmentEditor/lang/en.json @@ -2,8 +2,12 @@ "SegmentEditor": { "PluginDescription": "A segment is a set of criteria used to select only a part of the entire set of visits. Using segments you can inject arbitrary context back into your reports.", "AddANDorORCondition": "Add %s condition", - "AddNewSegment": "Add new segment", - "AreYouSureDeleteSegment": "Are you sure you want to delete this segment?", + "AddNewSegment": "Create new segment", + "ManageSegments": "Manage Segments", + "SegmentPageTitle": "Segments overview", + "SegmentPageDescription": "View and manage your segments while monitoring their impact on traffic and behaviour. This table shows visits, actions, and trends over time, with quick links to view, edit, or delete each segment.", + "SeeDashboardForThisSegment": "See dashboard for this segment.", + "AreYouSureDeleteSegment": "Are you sure you want to delete segment \"%s\"?", "AutoArchivePreProcessed": "segmented reports are pre-processed (faster, requires cron)", "AutoArchiveRealTime": "segmented reports are processed in real time", "ChangingSegmentDefinitionConfirmationNotProcessedOnRequest": "You're about to change the segment definition. Your analytics reports for this new segment won't be available until the reports are re-processed. It may take a few hours for reports data to show for this segment. Proceed anyway?", @@ -18,6 +22,7 @@ "OperatorAND": "AND", "OperatorOR": "OR", "SaveAndApply": "Save & Apply", + "Segments": "Segments", "SegmentDisplayedAllWebsites": "all websites", "SegmentDisplayedThisWebsiteOnly": "this website only", "SegmentEditor": "Segment editor", @@ -25,6 +30,10 @@ "SegmentNotApplied": "Segment '%s' not applied", "SegmentNotAppliedMessage": "You are requesting data for the Custom Segment '%s', this Matomo's configuration currently prevents real time processing of reports for performance reasons.", "SelectSegmentOfVisits": "Select a segment of visits:", + "SparklineTooltipDays": "Evolution of Visits for segment \"%s\" over the last 30 days", + "SparklineTooltipWeeks": "Evolution of Visits for segment \"%s\" over the last 30 weeks", + "SparklineTooltipMonths": "Evolution of Visits for segment \"%s\" over the last 30 months", + "SparklineTooltipYears": "Evolution of Visits for segment \"%s\" over the last 30 years", "ThisSegmentIsVisibleTo": "This segment is visible to:", "VisibleToAllUsers": "all users", "VisibleToMe": "me", diff --git a/plugins/SegmentEditor/stylesheets/segmentation.less b/plugins/SegmentEditor/stylesheets/segmentation.less index ce68984498c..5a3f914cbc7 100644 --- a/plugins/SegmentEditor/stylesheets/segmentation.less +++ b/plugins/SegmentEditor/stylesheets/segmentation.less @@ -321,100 +321,98 @@ div.scrollable { 100% { stroke: black; fill: transparent; } } -.segmentationContainer ul.submenu > li { - .editSegment, - .compareSegment, - .starSegment { - flex: none; - display: flex; - width: 16px; - height: 16px; +.segmentAction { + flex: none; + display: flex; + width: 16px; + height: 16px; - // Button reset - padding: 0; - border: 0; - background: transparent; - cursor: pointer; + // Button reset + padding: 0; + border: 0; + background: transparent; + cursor: pointer; - font-weight: normal; - text-align: center; - opacity: 0.5; + font-weight: normal; + text-align: center; + opacity: 0.5; - &:hover { - opacity: 1; - } + &:hover { + opacity: 1; + } - &[data-state=disabled] { - opacity: 0.2; - cursor: not-allowed; - } - } + &:focus { + background-color: transparent; + } - .editSegment { - background: url(plugins/SegmentEditor/images/edit_segment.svg) no-repeat; - background-size: cover; - order: 3; - } + &[data-state=disabled] { + opacity: 0.2; + cursor: not-allowed; + } +} - .starSegment { - order: 2; - } +.editSegment { + background: url(plugins/SegmentEditor/images/edit_segment.svg) no-repeat; + background-size: cover; + order: 3; +} - .segmentStarAnimation .starSegment { - animation: unstarAnimation 0.5s 1; - } +.starSegment { + order: 2; +} - .segmentStarAnimation .starSegment path { - animation: unstarAnimationPath 0.5s 1; - } +.segmentStarAnimation .starSegment { + animation: unstarAnimation 0.5s 1; +} - .segmentStarred.segmentStarAnimation .starSegment { - animation-name: starAnimation; - } +.segmentStarAnimation .starSegment path { + animation: unstarAnimationPath 0.5s 1; +} - .segmentStarred.segmentStarAnimation .starSegment path { - animation-name: starAnimationPath; - } +.segmentStarred.segmentStarAnimation .starSegment { + animation-name: starAnimation; +} - .segmentStarErrorAnimation .starSegment { - animation: starErrorAnimation 2s 1; - } +.segmentStarred.segmentStarAnimation .starSegment path { + animation-name: starAnimationPath; +} - .segmentStarErrorAnimation .starSegment path { - animation: starErrorAnimationPath 2s 1; - } +.segmentStarErrorAnimation .starSegment { + animation: starErrorAnimation 2s 1; +} - .segmentStarred.segmentStarErrorAnimation .starSegment path { - animation-direction: reverse; - } +.segmentStarErrorAnimation .starSegment path { + animation: starErrorAnimationPath 2s 1; +} - /* We do not want filled & transparent stars, design wanted by Matthieu */ - .segmentStarred .starSegment[data-state=disabled] { - opacity: 0.5; - } +.segmentStarred.segmentStarErrorAnimation .starSegment path { + animation-direction: reverse; +} - .segmentStarred .starSegment path { - fill: black; - } +/* We do not want filled & transparent stars, design wanted by Matthieu */ +.segmentStarred .starSegment[data-state=disabled] { + opacity: 0.5; +} - .compareSegment { - background: url(plugins/Morpheus/images/compare.svg) no-repeat; - background-size: cover; - order: 2; +.segmentStarred .starSegment path { + fill: black; +} - &.allVisitsCompareSegment { - margin-left: 20px; - } - &.allVisitsCompareSegment--write { - margin-right: 20px; - } +.compareSegment { + background: url(plugins/Morpheus/images/compare.svg) no-repeat; + background-size: cover; + order: 2; + + &.allVisitsCompareSegment { + margin-left: 20px; + } + &.allVisitsCompareSegment--write { + margin-right: 20px; } } -html.comparisonsDisabled .segmentationContainer ul.submenu { - .compareSegment { - display: none; - } +.comparisonsDisabled .compareSegment { + display: none; } .segmentEditorPanel.expanded .segmentationContainer { diff --git a/plugins/SegmentEditor/templates/_segmentSelector.twig b/plugins/SegmentEditor/templates/_segmentSelector.twig index 20603049d59..2d770e58cc3 100644 --- a/plugins/SegmentEditor/templates/_segmentSelector.twig +++ b/plugins/SegmentEditor/templates/_segmentSelector.twig @@ -18,7 +18,13 @@ {% if authorizedToCreateSegments %} - {{ 'SegmentEditor_AddNewSegment'|translate }} + + + {{ 'SegmentEditor_ManageSegments'|translate }} + {% else %}