diff --git a/plugins/ScheduledReports/API.php b/plugins/ScheduledReports/API.php index e7fb7830b6b..17f26f42ded 100644 --- a/plugins/ScheduledReports/API.php +++ b/plugins/ScheduledReports/API.php @@ -49,6 +49,8 @@ */ class API extends \Piwik\Plugin\API { + public const ENFORCE_ORDER_PARAMETER = ScheduledReports::ENFORCE_ORDER_PARAMETER; + public const VALIDATE_PARAMETERS_EVENT = 'ScheduledReports.validateReportParameters'; public const GET_REPORT_PARAMETERS_EVENT = 'ScheduledReports.getReportParameters'; public const GET_REPORT_METADATA_EVENT = 'ScheduledReports.getReportMetadata'; @@ -407,6 +409,10 @@ public function generateReport( self::validateReportParameters($reportType, empty($parameters) ? $report['parameters'] : $parameters), true ); + $parameters = $report['parameters']; + $enforceCustomOrder = is_array($parameters) + && array_key_exists(self::ENFORCE_ORDER_PARAMETER, $parameters) + && !empty($parameters[self::ENFORCE_ORDER_PARAMETER]); $originalShowEvolutionWithinSelectedPeriod = Config::getInstance()->General['graphs_show_evolution_within_selected_period']; $originalDefaultEvolutionGraphLastPeriodsAmount = Config::getInstance()->General['graphs_default_evolution_graph_last_days_amount']; @@ -418,11 +424,26 @@ public function generateReport( // available reports $availableReportMetadata = \Piwik\Plugins\API\API::getInstance()->getReportMetadata($idSite); - // we need to lookup which reports metadata are registered in this report $reportMetadata = []; - foreach ($availableReportMetadata as $metadata) { - if (in_array($metadata['uniqueId'], $report['reports'])) { - $reportMetadata[] = $metadata; + if ($enforceCustomOrder) { + // we need to lookup which reports metadata are registered in this report + // and keep the order defined + $reportMetadataByUniqueId = []; + foreach ($availableReportMetadata as $metadata) { + $reportMetadataByUniqueId[$metadata['uniqueId']] = $metadata; + } + + foreach ($report['reports'] as $reportUniqueId) { + if (isset($reportMetadataByUniqueId[$reportUniqueId])) { + $reportMetadata[] = $reportMetadataByUniqueId[$reportUniqueId]; + } + } + } else { + // fallback to default metadata order when the flag isn't set + foreach ($availableReportMetadata as $metadata) { + if (in_array($metadata['uniqueId'], $report['reports'], true)) { + $reportMetadata[] = $metadata; + } } } diff --git a/plugins/ScheduledReports/ScheduledReports.php b/plugins/ScheduledReports/ScheduledReports.php index 6008dfa2180..39e27a1acd2 100644 --- a/plugins/ScheduledReports/ScheduledReports.php +++ b/plugins/ScheduledReports/ScheduledReports.php @@ -45,8 +45,10 @@ class ScheduledReports extends \Piwik\Plugin public const EVOLUTION_GRAPH_PARAMETER = 'evolutionGraph'; public const ADDITIONAL_EMAILS_PARAMETER = 'additionalEmails'; public const DISPLAY_FORMAT_PARAMETER = 'displayFormat'; + public const ENFORCE_ORDER_PARAMETER = 'enforceOrder'; public const EMAIL_ME_PARAMETER_DEFAULT_VALUE = true; public const EVOLUTION_GRAPH_PARAMETER_DEFAULT_VALUE = false; + public const ENFORCE_ORDER_PARAMETER_DEFAULT_VALUE = false; public const EMAIL_TYPE = 'email'; @@ -55,6 +57,7 @@ class ScheduledReports extends \Piwik\Plugin self::EVOLUTION_GRAPH_PARAMETER => false, self::ADDITIONAL_EMAILS_PARAMETER => false, self::DISPLAY_FORMAT_PARAMETER => true, + self::ENFORCE_ORDER_PARAMETER => false, ); private static $managedReportTypes = array( @@ -156,6 +159,9 @@ public function getClientSideTranslationKeys(&$translationKeys) $translationKeys[] = 'ScheduledReports_AlsoSendReportToTheseEmails'; $translationKeys[] = 'ScheduledReports_ReportSchedule'; $translationKeys[] = 'ScheduledReports_SendingReport'; + $translationKeys[] = 'ScheduledReports_SelectedReports'; + $translationKeys[] = 'ScheduledReports_SelectedReportsHelp'; + $translationKeys[] = "ScheduledReports_ReportAdded"; } /** @@ -216,6 +222,12 @@ public function validateReportParameters(&$parameters, $reportType) if (isset($parameters[self::ADDITIONAL_EMAILS_PARAMETER])) { $parameters[self::ADDITIONAL_EMAILS_PARAMETER] = self::checkAdditionalEmails($parameters[self::ADDITIONAL_EMAILS_PARAMETER]); } + + if (!isset($parameters[self::ENFORCE_ORDER_PARAMETER])) { + $parameters[self::ENFORCE_ORDER_PARAMETER] = self::ENFORCE_ORDER_PARAMETER_DEFAULT_VALUE; + } else { + $parameters[self::ENFORCE_ORDER_PARAMETER] = self::valueIsTrue($parameters[self::ENFORCE_ORDER_PARAMETER]); + } } // based on https://www.php.net/manual/en/filter.filters.validate.php -> FILTER_VALIDATE_BOOLEAN diff --git a/plugins/ScheduledReports/lang/en.json b/plugins/ScheduledReports/lang/en.json index 723a49edd2d..fb181a0bfa8 100644 --- a/plugins/ScheduledReports/lang/en.json +++ b/plugins/ScheduledReports/lang/en.json @@ -29,9 +29,12 @@ "ReportHourWithUTC": "%s o'clock UTC", "ReportIncludeNWebsites": "The report will include main metrics for all websites that have at least one visit (from the %s websites currently available).", "ReportSent": "Report sent", - "ReportsIncluded": "Statistics included", + "ReportsIncluded": "Select the reports to include", + "SelectedReports": "Preview of your report", + "SelectedReportsHelp": "Drag and drop to re-order the report sections.", "ReportType": "Send report via", "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\".", "SegmentAppliedToReports": "The segment '%s' is applied to the reports.", @@ -62,4 +65,4 @@ "ReportSchedule": "Report Schedule", "SendingReport": "Sending report…" } -} \ No newline at end of file +} diff --git a/plugins/ScheduledReports/stylesheets/scheduledreports.less b/plugins/ScheduledReports/stylesheets/scheduledreports.less index 263e7a6f323..3c1f9b5811b 100644 --- a/plugins/ScheduledReports/stylesheets/scheduledreports.less +++ b/plugins/ScheduledReports/stylesheets/scheduledreports.less @@ -30,3 +30,52 @@ } } } +.selectedReportsWrapper { + font-size: 1rem; + margin-top: 1.5rem; + margin-bottom: 2.5rem; + + .selectedReportsHeading { + margin-bottom: 0.4rem; + } + + .selectedReportsHelp { + margin-top: 0; + color: @color-silver; + } + + .selectedReportsList { + list-style: none; + padding: 0; + margin: 0; + + li { + display: flex; + align-items: center; + padding: 0.6rem 0.9rem; + border: 1px solid @color-silver-l85; + border-radius: 4px; + background: @color-white; + cursor: move; + margin-bottom: 0.6rem; + + span.drag-icon { + padding-right: 15px; + font-size: 13px; + color: @color-silver-l60; + } + } + + .selectedReportName { + flex: 1; + } + + .selectedReportPlaceholder { + border: 1px dashed @color-silver; + border-radius: 4px; + background: @color-silver-l95; + height: 2.6rem; + margin-bottom: 0.6rem; + } + } +} diff --git a/plugins/ScheduledReports/tests/Integration/ApiTest.php b/plugins/ScheduledReports/tests/Integration/ApiTest.php index f25ea3a7944..8aa864e755c 100644 --- a/plugins/ScheduledReports/tests/Integration/ApiTest.php +++ b/plugins/ScheduledReports/tests/Integration/ApiTest.php @@ -171,6 +171,7 @@ public function testAddReportGetReports() 'emailMe' => true, 'additionalEmails' => array('test@test.com', 't2@test.com'), 'evolutionGraph' => true, + 'enforceOrder' => true, ), ); @@ -208,6 +209,18 @@ public function testAddReportGetReports() $this->assertReportsEqual($report, $data); } + public function testAddReportDefaultsEnforceOrderToFalse() + { + $data = self::getDailyPDFReportData($this->idSite); + $idReport = self::addReport($data); + + $reports = APIScheduledReports::getInstance()->getReports($this->idSite, $data['period'], $idReport); + $report = reset($reports); + + $this->assertArrayHasKey('enforceOrder', $report['parameters']); + $this->assertFalse($report['parameters']['enforceOrder']); + } + /** * @group Plugins */ @@ -1004,6 +1017,7 @@ private static function getMonthlyEmailReportData($idSite) 'emailMe' => false, 'additionalEmails' => array('blabla@ec.fr'), 'evolutionGraph' => false, + 'enforceOrder' => true, ), ); } diff --git a/plugins/ScheduledReports/tests/UI/ScheduledReports_spec.js b/plugins/ScheduledReports/tests/UI/ScheduledReports_spec.js index b85dab8c957..d8579c37675 100644 --- a/plugins/ScheduledReports/tests/UI/ScheduledReports_spec.js +++ b/plugins/ScheduledReports/tests/UI/ScheduledReports_spec.js @@ -40,4 +40,97 @@ describe("ScheduledReports", function () { expect(await page.screenshot({ fullPage: true })).to.matchImage('invalid_token'); }); + + describe('ManageScheduledReports', function () { + const manageReportsUrl = "?module=ScheduledReports&action=index&idSite=1&period=day&date=2013-01-23"; + const createdReportName = "for testing"; + + // Helper function to open the report we will use for testing + async function openReportForTesting() { + await page.evaluate((description) => { + const rows = Array.from(document.querySelectorAll('#entityEditContainer tbody tr')); + + for (const row of rows) { + if (!row.textContent || row.textContent.indexOf(description) === -1) { + continue; + } + const editButton = row.querySelector('button[title="Edit"]'); + editButton.click(); + } + }, createdReportName); + + await page.waitForSelector('#addEditReport', { visible: true }); + await page.waitForSelector('.selectedReportsList li', { visible: true }); + } + + it("should show selected reports when creating a new report", async function () { + await page.goto(manageReportsUrl); + await page.waitForNetworkIdle(); + + await page.waitForSelector('#add-report'); + await page.click('#add-report'); + await page.waitForSelector('#addEditReport', { visible: true }); + + const reportCheckboxes = await page.$$( + 'div[name="reportsList"]:not([style*="display: none"]) .listReports input[type="checkbox"]', + ); + + const selectedReportIds = []; + // Click the first 4 checkboxes + for (const checkbox of reportCheckboxes.slice(0, 4)) { + await checkbox.click(); + const uniqueId = await checkbox.evaluate((input) => input.id ); + if (uniqueId) { + selectedReportIds.push(uniqueId); + } + } + const selectedReportsWrapper = await page.$('.selectedReportsWrapper'); + expect(await selectedReportsWrapper.screenshot()).to.matchImage('selected_reports'); + }); + + it("should persist manually reordered selected reports when saving a report", async function () { + await openReportForTesting(); + + const initialOrder = await page.$$eval( + '.selectedReportsList li', + (items) => items.map((item) => item.getAttribute('data-unique-id')), + ); + const expectedOrder = initialOrder.slice().reverse(); + + // Reorder the selected reports via DOM manipulation + await page.evaluate((newOrder) => { + const list = document.querySelector('.selectedReportsList'); + newOrder.forEach((uniqueId) => { + const item = list.querySelector(`li[data-unique-id="${uniqueId}"]`); + if (item) { + list.appendChild(item); + } + }); + + const jq = window.jQuery || window.$; + const $list = jq('.selectedReportsList'); + // Get sortable instance and call stop handler manually, + // so that we simulate the emitted reorder event + const stopHandler = $list.sortable('option', 'stop'); + if (typeof stopHandler === 'function') { + stopHandler(); + } + }, expectedOrder); + + await page.click('.matomo-save-button .btn'); + await page.waitForNetworkIdle(); + await page.waitForTimeout(500); + + await openReportForTesting(); + const persistedOrder = await page.$$eval( + '.selectedReportsList li', + (items) => items.map((item) => item.getAttribute('data-unique-id')), + ); + + expect(persistedOrder).to.deep.equal(expectedOrder); + + const selectedReportsWrapper = await page.$('.selectedReportsWrapper'); + expect(await selectedReportsWrapper.screenshot()).to.matchImage('reorder_persisted'); + }); + }); }); diff --git a/plugins/ScheduledReports/tests/UI/expected-screenshots/ManageScheduledReports_reorder_persisted.png b/plugins/ScheduledReports/tests/UI/expected-screenshots/ManageScheduledReports_reorder_persisted.png new file mode 100644 index 00000000000..ca512c5bf6d --- /dev/null +++ b/plugins/ScheduledReports/tests/UI/expected-screenshots/ManageScheduledReports_reorder_persisted.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:805035f534f05163f3d24d6c2d3966bbf7c35b3df17e6e945bdac6d4e09aecac +size 16897 diff --git a/plugins/ScheduledReports/tests/UI/expected-screenshots/ManageScheduledReports_selected_reports.png b/plugins/ScheduledReports/tests/UI/expected-screenshots/ManageScheduledReports_selected_reports.png new file mode 100644 index 00000000000..ea6e597b3e6 --- /dev/null +++ b/plugins/ScheduledReports/tests/UI/expected-screenshots/ManageScheduledReports_selected_reports.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:666968390c22665478dead63a4deeec1a7f2177f244df071abe8ccde71fdfb6e +size 16910 diff --git a/plugins/ScheduledReports/vue/dist/ScheduledReports.umd.js b/plugins/ScheduledReports/vue/dist/ScheduledReports.umd.js index 4487056efb5..a47c75cb1fc 100644 --- a/plugins/ScheduledReports/vue/dist/ScheduledReports.umd.js +++ b/plugins/ScheduledReports/vue/dist/ScheduledReports.umd.js @@ -155,7 +155,7 @@ if (typeof window !== 'undefined') { // EXTERNAL MODULE: external {"commonjs":"vue","commonjs2":"vue","root":"Vue"} var external_commonjs_vue_commonjs2_vue_root_Vue_ = __webpack_require__("8bbf"); -// 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/ReportParameters/ReportParameters.vue?vue&type=template&id=6b4d0de2 +// 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/ReportParameters/ReportParameters.vue?vue&type=template&id=da7188f8 const _hoisted_1 = { key: 0 @@ -177,7 +177,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { title: _ctx.translate('ScheduledReports_AlsoSendReportToTheseEmails') }, null, 8, ["model-value", "title"]), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vShow"], _ctx.report.type === 'email']])])])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true); } -// CONCATENATED MODULE: ./plugins/ScheduledReports/vue/src/ReportParameters/ReportParameters.vue?vue&type=template&id=6b4d0de2 +// CONCATENATED MODULE: ./plugins/ScheduledReports/vue/src/ReportParameters/ReportParameters.vue?vue&type=template&id=da7188f8 // EXTERNAL MODULE: external "CorePluginsAdmin" var external_CorePluginsAdmin_ = __webpack_require__("a5a2"); @@ -247,7 +247,8 @@ var external_CorePluginsAdmin_ = __webpack_require__("a5a2"); displayFormat: theReport.displayFormat, emailMe: theReport.emailMe, evolutionGraph: theReport.evolutionGraph, - additionalEmails: theReport.additionalEmails || [] + additionalEmails: theReport.additionalEmails || [], + enforceOrder: true }); } } @@ -261,9 +262,9 @@ var external_CorePluginsAdmin_ = __webpack_require__("a5a2"); ReportParametersvue_type_script_lang_ts.render = render /* harmony default export */ var ReportParameters = (ReportParametersvue_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/ManageScheduledReport/ManageScheduledReport.vue?vue&type=template&id=f9ce53e8 +// 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/ManageScheduledReport/ManageScheduledReport.vue?vue&type=template&id=038aa0f7 -const ManageScheduledReportvue_type_template_id_f9ce53e8_hoisted_1 = { +const ManageScheduledReportvue_type_template_id_038aa0f7_hoisted_1 = { class: "emailReports", ref: "root" }; @@ -294,11 +295,11 @@ const _hoisted_7 = { const _hoisted_8 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", { id: "bottom" }, null, -1); -function ManageScheduledReportvue_type_template_id_f9ce53e8_render(_ctx, _cache, $props, $setup, $data, $options) { +function ManageScheduledReportvue_type_template_id_038aa0f7_render(_ctx, _cache, $props, $setup, $data, $options) { const _component_MatomoLoader = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["resolveComponent"])("MatomoLoader"); const _component_ListReports = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["resolveComponent"])("ListReports"); const _component_AddReport = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["resolveComponent"])("AddReport"); - return Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", ManageScheduledReportvue_type_template_id_f9ce53e8_hoisted_1, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_2, null, 512), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_3, null, 512), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [_hoisted_4, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_5, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_6, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_MatomoLoader), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createTextVNode"])(" " + Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('General_LoadingData')), 1)]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_7, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('SegmentEditor_LoadingSegmentedDataMayTakeSomeTime')), 1)]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_ListReports, { + return Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", ManageScheduledReportvue_type_template_id_038aa0f7_hoisted_1, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_2, null, 512), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_3, null, 512), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [_hoisted_4, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_5, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_6, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_MatomoLoader), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createTextVNode"])(" " + Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('General_LoadingData')), 1)]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_7, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('SegmentEditor_LoadingSegmentedDataMayTakeSomeTime')), 1)]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_ListReports, { "content-title": _ctx.contentTitle, "user-login": _ctx.userLogin, "login-module": _ctx.loginModule, @@ -329,42 +330,44 @@ function ManageScheduledReportvue_type_template_id_f9ce53e8_render(_ctx, _cache, "count-websites": _ctx.countWebsites, "site-name": _ctx.decodedSiteName, "selected-reports": _ctx.selectedReports, + "selected-reports-order": _ctx.selectedReportsOrder, "report-types": _ctx.reportTypes, "segment-editor-activated": _ctx.segmentEditorActivated, "saved-segments-by-id": _ctx.savedSegmentsById, onToggleSelectedReport: _cache[4] || (_cache[4] = $event => _ctx.toggleSelectedReport($event.reportType, $event.uniqueId)), - onChange: _cache[5] || (_cache[5] = $event => _ctx.onChangeProperty($event.prop, $event.value)), - onSubmit: _cache[6] || (_cache[6] = $event => _ctx.submitReport()) + onReorderSelectedReports: _cache[5] || (_cache[5] = $event => _ctx.onReorderSelectedReports($event.reportType, $event.order)), + onChange: _cache[6] || (_cache[6] = $event => _ctx.onChangeProperty($event.prop, $event.value)), + onSubmit: _cache[7] || (_cache[7] = $event => _ctx.submitReport()) }, { "report-parameters": Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withCtx"])(() => [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["renderSlot"])(_ctx.$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", "report-types", "segment-editor-activated", "saved-segments-by-id"])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), _hoisted_8])], 512); + }, 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(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), _hoisted_8])], 512); } -// CONCATENATED MODULE: ./plugins/ScheduledReports/vue/src/ManageScheduledReport/ManageScheduledReport.vue?vue&type=template&id=f9ce53e8 +// CONCATENATED MODULE: ./plugins/ScheduledReports/vue/src/ManageScheduledReport/ManageScheduledReport.vue?vue&type=template&id=038aa0f7 // 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=ed4cd200 +// 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=09129a87 -const AddReportvue_type_template_id_ed4cd200_hoisted_1 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", { +const AddReportvue_type_template_id_09129a87_hoisted_1 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", { class: "clear" }, null, -1); -const AddReportvue_type_template_id_ed4cd200_hoisted_2 = { +const AddReportvue_type_template_id_09129a87_hoisted_2 = { key: 0 }; -const AddReportvue_type_template_id_ed4cd200_hoisted_3 = ["innerHTML"]; -const AddReportvue_type_template_id_ed4cd200_hoisted_4 = { +const AddReportvue_type_template_id_09129a87_hoisted_3 = ["innerHTML"]; +const AddReportvue_type_template_id_09129a87_hoisted_4 = { id: "emailScheduleInlineHelp", class: "inline-help-node" }; -const AddReportvue_type_template_id_ed4cd200_hoisted_5 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("br", null, null, -1); -const AddReportvue_type_template_id_ed4cd200_hoisted_6 = { +const AddReportvue_type_template_id_09129a87_hoisted_5 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("br", null, null, -1); +const AddReportvue_type_template_id_09129a87_hoisted_6 = { id: "emailReportPeriodInlineHelp", class: "inline-help-node" }; -const AddReportvue_type_template_id_ed4cd200_hoisted_7 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("br", null, null, -1); -const AddReportvue_type_template_id_ed4cd200_hoisted_8 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("br", null, null, -1); +const AddReportvue_type_template_id_09129a87_hoisted_7 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("br", null, null, -1); +const AddReportvue_type_template_id_09129a87_hoisted_8 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("br", null, null, -1); const _hoisted_9 = { key: 0, id: "reportHourHelpText", @@ -415,8 +418,9 @@ const _hoisted_27 = { }; const _hoisted_28 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("br", null, null, -1); const _hoisted_29 = ["innerHTML"]; -function AddReportvue_type_template_id_ed4cd200_render(_ctx, _cache, $props, $setup, $data, $options) { +function AddReportvue_type_template_id_09129a87_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"); const _component_ContentBlock = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["resolveComponent"])("ContentBlock"); const _directive_form = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["resolveDirective"])("form"); @@ -424,7 +428,7 @@ function AddReportvue_type_template_id_ed4cd200_render(_ctx, _cache, $props, $se class: "entityAddContainer", "content-title": _ctx.contentTitle }, { - default: Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withCtx"])(() => [AddReportvue_type_template_id_ed4cd200_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"])(() => [AddReportvue_type_template_id_09129a87_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, { @@ -443,7 +447,7 @@ function AddReportvue_type_template_id_ed4cd200_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_ed4cd200_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_09129a87_hoisted_2, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_Field, { uicontrol: "select", name: "report_segment", title: _ctx.translate('SegmentEditor_ChooseASegment'), @@ -459,7 +463,7 @@ function AddReportvue_type_template_id_ed4cd200_render(_ctx, _cache, $props, $se id: "reportSegmentInlineHelp", class: "inline-help-node", innerHTML: _ctx.$sanitize(_ctx.reportSegmentInlineHelp) - }, null, 8, AddReportvue_type_template_id_ed4cd200_hoisted_3)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true)]), + }, null, 8, AddReportvue_type_template_id_09129a87_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", @@ -478,7 +482,7 @@ function AddReportvue_type_template_id_ed4cd200_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_ed4cd200_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_ed4cd200_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_09129a87_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_09129a87_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", @@ -491,7 +495,7 @@ function AddReportvue_type_template_id_ed4cd200_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_ed4cd200_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_ed4cd200_hoisted_7, AddReportvue_type_template_id_ed4cd200_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_09129a87_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_09129a87_hoisted_7, AddReportvue_type_template_id_09129a87_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", @@ -612,7 +616,11 @@ function AddReportvue_type_template_id_ed4cd200_render(_ctx, _cache, $props, $se }), 128))]), _hoisted_28]); }), 128))]); }), 128))], 2)), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vShow"], _ctx.report.type === reportType]]); - }), 128)), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_SaveButton, { + }), 128)), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_SelectedReportsList, { + reports: _ctx.selectedReportsForCurrentType, + enabled: _ctx.allowMultipleReportsByReportType[_ctx.report.type], + onReorder: _ctx.onSelectedReportsReorder + }, null, 8, ["reports", "enabled", "onReorder"]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_SaveButton, { value: _ctx.saveButtonTitle, onConfirm: _cache[12] || (_cache[12] = $event => _ctx.$emit('submit')) }, null, 8, ["value"]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", { @@ -622,7 +630,7 @@ function AddReportvue_type_template_id_ed4cd200_render(_ctx, _cache, $props, $se _: 3 }, 8, ["content-title"]); } -// CONCATENATED MODULE: ./plugins/ScheduledReports/vue/src/AddReport/AddReport.vue?vue&type=template&id=ed4cd200 +// CONCATENATED MODULE: ./plugins/ScheduledReports/vue/src/AddReport/AddReport.vue?vue&type=template&id=09129a87 // CONCATENATED MODULE: ./plugins/ScheduledReports/vue/src/utilities.ts /*! @@ -634,14 +642,150 @@ function AddReportvue_type_template_id_ed4cd200_render(_ctx, _cache, $props, $se function adjustHourToTimezone(hour, difference) { return `${(24 + parseFloat(hour) + difference) % 24}`; } -// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-typescript/node_modules/cache-loader/dist/cjs.js??ref--15-0!./node_modules/babel-loader/lib!./node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader??ref--15-2!./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=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/AddReport/SelectedReportsList.vue?vue&type=template&id=7b1ffe4c +const SelectedReportsListvue_type_template_id_7b1ffe4c_hoisted_1 = { + key: 0, + class: "selectedReportsWrapper" +}; +const SelectedReportsListvue_type_template_id_7b1ffe4c_hoisted_2 = { + class: "selectedReportsHeading" +}; +const SelectedReportsListvue_type_template_id_7b1ffe4c_hoisted_3 = { + class: "selectedReportsHelp" +}; +const SelectedReportsListvue_type_template_id_7b1ffe4c_hoisted_4 = { + class: "selectedReportsList", + ref: "list" +}; +const SelectedReportsListvue_type_template_id_7b1ffe4c_hoisted_5 = ["data-unique-id"]; +const SelectedReportsListvue_type_template_id_7b1ffe4c_hoisted_6 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", { + class: "icon-menu-hamburger drag-icon" +}, null, -1); +const SelectedReportsListvue_type_template_id_7b1ffe4c_hoisted_7 = { + class: "selectedReportName" +}; +function SelectedReportsListvue_type_template_id_7b1ffe4c_render(_ctx, _cache, $props, $setup, $data, $options) { + return _ctx.shouldDisplay ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", SelectedReportsListvue_type_template_id_7b1ffe4c_hoisted_1, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", SelectedReportsListvue_type_template_id_7b1ffe4c_hoisted_2, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("h3", null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('ScheduledReports_SelectedReports')), 1)]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("p", SelectedReportsListvue_type_template_id_7b1ffe4c_hoisted_3, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('ScheduledReports_SelectedReportsHelp')), 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("ul", SelectedReportsListvue_type_template_id_7b1ffe4c_hoisted_4, [(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(true), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])(external_commonjs_vue_commonjs2_vue_root_Vue_["Fragment"], null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["renderList"])(_ctx.reports, report => { + return Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("li", { + key: report.uniqueId, + "data-unique-id": report.uniqueId + }, [SelectedReportsListvue_type_template_id_7b1ffe4c_hoisted_6, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", SelectedReportsListvue_type_template_id_7b1ffe4c_hoisted_7, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.decode(report.name)), 1)], 8, SelectedReportsListvue_type_template_id_7b1ffe4c_hoisted_5); + }), 128))], 512)])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true); +} +// CONCATENATED MODULE: ./plugins/ScheduledReports/vue/src/AddReport/SelectedReportsList.vue?vue&type=template&id=7b1ffe4c +// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-typescript/node_modules/cache-loader/dist/cjs.js??ref--15-0!./node_modules/babel-loader/lib!./node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader??ref--15-2!./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/SelectedReportsList.vue?vue&type=script&lang=ts const { - $: AddReportvue_type_script_lang_ts_$ + $: SelectedReportsListvue_type_script_lang_ts_$ } = window; +/* harmony default export */ var SelectedReportsListvue_type_script_lang_ts = (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["defineComponent"])({ + name: 'SelectedReportsList', + props: { + reports: { + type: Array, + required: true + }, + enabled: { + type: Boolean, + default: true + } + }, + 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: external_CoreHome_["translate"], + decode(name) { + return external_CoreHome_["Matomo"].helper.htmlDecode(name); + }, + getListElement() { + return this.$refs.list; + }, + scheduleRefresh() { + Object(external_commonjs_vue_commonjs2_vue_root_Vue_["nextTick"])(() => { + this.refreshSortable(); + }); + }, + refreshSortable() { + if (!this.shouldDisplay) { + this.destroySortable(); + return; + } + const listElement = this.getListElement(); + if (!listElement) { + return; + } + const $list = SelectedReportsListvue_type_script_lang_ts_$(listElement); + if ($list.data('ui-sortable')) { + $list.sortable('refresh'); + return; + } + $list.sortable({ + axis: 'y', + helper: 'clone', + placeholder: 'selectedReportPlaceholder', + stop: () => { + this.emitOrder(); + } + }); + }, + destroySortable() { + const listElement = this.getListElement(); + if (!listElement) { + return; + } + const $list = SelectedReportsListvue_type_script_lang_ts_$(listElement); + if ($list.data('ui-sortable')) { + $list.sortable('destroy'); + } + }, + emitOrder() { + const listElement = this.getListElement(); + if (!listElement) { + return; + } + const order = SelectedReportsListvue_type_script_lang_ts_$(listElement).find('li').map(function mapSelected() { + return String(SelectedReportsListvue_type_script_lang_ts_$(this).data('uniqueId')); + }).get(); + this.$emit('reorder', order); + } + } +})); +// CONCATENATED MODULE: ./plugins/ScheduledReports/vue/src/AddReport/SelectedReportsList.vue?vue&type=script&lang=ts + +// CONCATENATED MODULE: ./plugins/ScheduledReports/vue/src/AddReport/SelectedReportsList.vue + + + +SelectedReportsListvue_type_script_lang_ts.render = SelectedReportsListvue_type_template_id_7b1ffe4c_render + +/* harmony default export */ var SelectedReportsList = (SelectedReportsListvue_type_script_lang_ts); +// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-typescript/node_modules/cache-loader/dist/cjs.js??ref--15-0!./node_modules/babel-loader/lib!./node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader??ref--15-2!./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=script&lang=ts + + + + + /* harmony default export */ var AddReportvue_type_script_lang_ts = (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["defineComponent"])({ props: { report: { @@ -649,6 +793,10 @@ const { required: true }, selectedReports: Object, + selectedReportsOrder: { + type: Object, + default: () => ({}) + }, paramPeriods: { type: Object, required: true @@ -692,11 +840,12 @@ const { required: true } }, - emits: ['submit', 'change', 'toggleSelectedReport'], + emits: ['submit', 'change', 'toggleSelectedReport', 'reorderSelectedReports'], components: { ContentBlock: external_CoreHome_["ContentBlock"], Field: external_CorePluginsAdmin_["Field"], - SaveButton: external_CorePluginsAdmin_["SaveButton"] + SaveButton: external_CorePluginsAdmin_["SaveButton"], + SelectedReportsList: SelectedReportsList }, directives: { Form: external_CorePluginsAdmin_["Form"] @@ -714,6 +863,15 @@ const { decode(s) { // report names can be encoded (mainly goals) return external_CoreHome_["Matomo"].helper.htmlDecode(s); + }, + onSelectedReportsReorder(order) { + if (!this.report || !this.report.type) { + return; + } + this.$emit('reorderSelectedReports', { + reportType: this.report.type, + order + }); } }, setup(props, ctx) { @@ -722,7 +880,7 @@ const { const reportParametersElement = reportParameters.value; reportParametersElement.querySelectorAll('[vue-entry]').forEach(node => { // eslint-disable-next-line no-underscore-dangle - AddReportvue_type_script_lang_ts_$(node).data('vueAppInstance').report_ = newValue; + $(node).data('vueAppInstance').report_ = newValue; }); }); Object(external_commonjs_vue_commonjs2_vue_root_Vue_["onMounted"])(() => { @@ -746,6 +904,77 @@ const { external_CoreHome_["Matomo"].helper.destroyVueComponent(reportParameters); }, computed: { + enforceSelectedReportOrder() { + var _this$report; + const parameters = ((_this$report = this.report) === null || _this$report === void 0 ? void 0 : _this$report.parameters) || {}; + if (typeof parameters.enforceOrder !== 'undefined') { + return !!parameters.enforceOrder; + } + return false; + }, + /** + * Ensures each report type has a flattened order array where every selected report + * appears exactly once (ordered first, then any remaining selections). + */ + selectedReportsOrderNormalized() { + const normalized = {}; + const allSelectedReports = this.selectedReports || {}; + Object.keys(allSelectedReports).forEach(reportType => { + const selectedForType = allSelectedReports[reportType] || {}; + const ordered = ((this.selectedReportsOrder || {})[reportType] || []).filter(uniqueId => selectedForType[uniqueId]); + const remaining = Object.keys(selectedForType).filter(uniqueId => selectedForType[uniqueId] && ordered.indexOf(uniqueId) === -1); + normalized[reportType] = ordered.concat(remaining); + }); + return normalized; + }, + /** + * Flattens the nested report metadata into a two-level lookup so we can access any report + * by its type and unique id without re-iterating the category structure. + */ + reportsLookup() { + const reportsByType = this.reportsByCategoryByReportType; + const lookup = {}; + Object.entries(reportsByType).forEach(([reportType, reportsByCategory]) => { + lookup[reportType] = lookup[reportType] || {}; + Object.values(reportsByCategory).forEach(reports => { + reports.forEach(report => { + lookup[reportType][report.uniqueId] = report; + }); + }); + }); + return lookup; + }, + selectedReportsForCurrentType() { + var _this$report2; + const type = (_this$report2 = this.report) === null || _this$report2 === void 0 ? void 0 : _this$report2.type; + if (!type) { + return []; + } + const selectedForType = (this.selectedReports || {})[type] || {}; + let order = []; + if (this.enforceSelectedReportOrder) { + order = this.selectedReportsOrderNormalized[type] || []; + } else { + const reportsByCategory = this.reportsByCategoryByReportType[type] || {}; + const ordered = []; + Object.values(reportsByCategory).forEach(reports => { + reports.forEach(report => { + if (selectedForType[report.uniqueId]) { + ordered.push(report.uniqueId); + } + }); + }); + order = ordered; + } + if (!order.length) { + order = Object.keys(selectedForType).filter(uniqueId => selectedForType[uniqueId]); + } + if (!order.length) { + return []; + } + const lookup = this.reportsLookup[type] || {}; + return order.map(uniqueId => lookup[uniqueId]).filter(report => !!report); + }, reportsByCategoryByReportTypeInColumns() { const reportsByCategoryByReportType = this.reportsByCategoryByReportType; const inColumns = Object.entries(reportsByCategoryByReportType).map(([key, reportsByCategory]) => { @@ -847,7 +1076,7 @@ const { -AddReportvue_type_script_lang_ts.render = AddReportvue_type_template_id_ed4cd200_render +AddReportvue_type_script_lang_ts.render = AddReportvue_type_template_id_09129a87_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=64da9c8a @@ -1140,6 +1369,7 @@ window.getReportParametersFunctions = window.getReportParametersFunctions || {}; const { $: ManageScheduledReportvue_type_script_lang_ts_$ } = window; +const PENDING_NOTIFICATION_KEY = 'scheduledReports.pendingNotification'; const timeZoneDifferenceInHours = external_CoreHome_["Matomo"].timezoneOffset / 3600; /* harmony default export */ var ManageScheduledReportvue_type_script_lang_ts = (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["defineComponent"])({ props: { @@ -1230,6 +1460,11 @@ const timeZoneDifferenceInHours = external_CoreHome_["Matomo"].timezoneOffset / external_CoreHome_["Matomo"].postEvent('ScheduledReports.ManageScheduledReport.mounted', { element: this.$refs.root }); + const pendingMessage = typeof sessionStorage !== 'undefined' ? sessionStorage.getItem(PENDING_NOTIFICATION_KEY) : null; + if (pendingMessage && this.$refs.reportUpdatedSuccess) { + sessionStorage.removeItem(PENDING_NOTIFICATION_KEY); + this.fadeInOutSuccessMessage(this.$refs.reportUpdatedSuccess, pendingMessage, false); + } }, unmounted() { external_CoreHome_["Matomo"].postEvent('ScheduledReports.ManageScheduledReport.unmounted', { @@ -1241,6 +1476,7 @@ const timeZoneDifferenceInHours = external_CoreHome_["Matomo"].timezoneOffset / showReportsList: true, report: {}, selectedReports: {}, + selectedReportsOrder: {}, sendingReports: [] }; }, @@ -1287,10 +1523,12 @@ const timeZoneDifferenceInHours = external_CoreHome_["Matomo"].timezoneOffset / } report.hour = adjustHourToTimezone(report.hour, timeZoneDifferenceInHours); this.selectedReports = {}; + this.selectedReportsOrder = {}; Object.values(report.reports).forEach(reportId => { this.selectedReports[report.type] = this.selectedReports[report.type] || {}; this.selectedReports[report.type][reportId] = true; }); + this.selectedReportsOrder[report.type] = Object.values(report.reports).map(reportId => reportId); report[`format${report.type}`] = report.format; if (!report.idsegment) { report.idsegment = ''; @@ -1313,6 +1551,9 @@ const timeZoneDifferenceInHours = external_CoreHome_["Matomo"].timezoneOffset / id: 'scheduledReportSuccess' }); if (reload) { + if (typeof sessionStorage !== 'undefined') { + sessionStorage.setItem(PENDING_NOTIFICATION_KEY, message); + } external_CoreHome_["Matomo"].helper.refreshAfter(2); } }, @@ -1372,20 +1613,25 @@ const timeZoneDifferenceInHours = external_CoreHome_["Matomo"].timezoneOffset / period } = this.report; const hour = adjustHourToTimezone(this.report.hour, -timeZoneDifferenceInHours); - const selectedReports = this.selectedReports[apiParameters.reportType] || {}; - const reports = Object.keys(selectedReports).filter(name => this.selectedReports[apiParameters.reportType][name]); + const reportType = apiParameters.reportType; + const selectedReports = this.selectedReports[reportType] || {}; + let reports = (this.selectedReportsOrder[reportType] || []).filter(name => selectedReports[name]); + if (!reports.length) { + reports = Object.keys(selectedReports).filter(name => selectedReports[name]); + } if (reports.length > 0) { apiParameters.reports = reports; } const reportParams = window.getReportParametersFunctions[this.report.type](this.report); apiParameters.parameters = reportParams; - const isCreate = this.report.idreport > 0; + const isUpdate = this.report.idreport > 0; external_CoreHome_["AjaxHelper"].post({ - method: isCreate ? 'ScheduledReports.updateReport' : 'ScheduledReports.addReport', + method: isUpdate ? 'ScheduledReports.updateReport' : 'ScheduledReports.addReport', period, hour }, apiParameters).then(() => { - this.fadeInOutSuccessMessage(this.$refs.reportUpdatedSuccess, Object(external_CoreHome_["translate"])('ScheduledReports_ReportUpdated')); + scrollToTop(); + this.fadeInOutSuccessMessage(this.$refs.reportUpdatedSuccess, isUpdate ? Object(external_CoreHome_["translate"])('ScheduledReports_ReportUpdated') : Object(external_CoreHome_["translate"])('ScheduledReports_ReportAdded')); }); return false; }, @@ -1397,7 +1643,22 @@ const timeZoneDifferenceInHours = external_CoreHome_["Matomo"].timezoneOffset / }, toggleSelectedReport(reportType, uniqueId) { this.selectedReports[reportType] = this.selectedReports[reportType] || {}; - this.selectedReports[reportType][uniqueId] = !this.selectedReports[reportType][uniqueId]; + const newValue = !this.selectedReports[reportType][uniqueId]; + this.selectedReports[reportType][uniqueId] = newValue; + this.selectedReportsOrder[reportType] = this.selectedReportsOrder[reportType] || []; + if (newValue) { + if (this.selectedReportsOrder[reportType].indexOf(uniqueId) === -1) { + this.selectedReportsOrder[reportType].push(uniqueId); + } + } else { + this.selectedReportsOrder[reportType] = this.selectedReportsOrder[reportType].filter(reportId => reportId !== uniqueId); + } + }, + onReorderSelectedReports(reportType, order) { + this.selectedReportsOrder[reportType] = order.filter(uniqueId => { + var _this$selectedReports; + return (_this$selectedReports = this.selectedReports[reportType]) === null || _this$selectedReports === void 0 ? void 0 : _this$selectedReports[uniqueId]; + }); } }, computed: { @@ -1415,7 +1676,7 @@ const timeZoneDifferenceInHours = external_CoreHome_["Matomo"].timezoneOffset / -ManageScheduledReportvue_type_script_lang_ts.render = ManageScheduledReportvue_type_template_id_f9ce53e8_render +ManageScheduledReportvue_type_script_lang_ts.render = ManageScheduledReportvue_type_template_id_038aa0f7_render /* harmony default export */ var ManageScheduledReport = (ManageScheduledReportvue_type_script_lang_ts); // CONCATENATED MODULE: ./plugins/ScheduledReports/vue/src/index.ts diff --git a/plugins/ScheduledReports/vue/dist/ScheduledReports.umd.min.js b/plugins/ScheduledReports/vue/dist/ScheduledReports.umd.min.js index 42dff4bf3f7..8fe3b385232 100644 --- a/plugins/ScheduledReports/vue/dist/ScheduledReports.umd.min.js +++ b/plugins/ScheduledReports/vue/dist/ScheduledReports.umd.min.js @@ -1,16 +1,16 @@ -(function(e,t){"object"===typeof exports&&"object"===typeof module?module.exports=t(require("CoreHome"),require("vue"),require("CorePluginsAdmin")):"function"===typeof define&&define.amd?define(["CoreHome",,"CorePluginsAdmin"],t):"object"===typeof exports?exports["ScheduledReports"]=t(require("CoreHome"),require("vue"),require("CorePluginsAdmin")):e["ScheduledReports"]=t(e["CoreHome"],e["Vue"],e["CorePluginsAdmin"])})("undefined"!==typeof self?self:this,(function(e,t,r){return function(e){var t={};function r(o){if(t[o])return t[o].exports;var n=t[o]={i:o,l:!1,exports:{}};return e[o].call(n.exports,n,n.exports,r),n.l=!0,n.exports}return r.m=e,r.c=t,r.d=function(e,t,o){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:o})},r.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var o=Object.create(null);if(r.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)r.d(o,n,function(t){return e[t]}.bind(null,n));return o},r.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="plugins/ScheduledReports/vue/dist/",r(r.s="fae3")}({"19dc":function(t,r){t.exports=e},"8bbf":function(e,r){e.exports=t},a5a2:function(e,t){e.exports=r},fae3:function(e,t,r){"use strict";if(r.r(t),r.d(t,"ReportParameters",(function(){return d})),r.d(t,"ManageScheduledReport",(function(){return Ke})),"undefined"!==typeof window){var o=window.document.currentScript,n=o&&o.src.match(/(.+\/)[^/]+\.js(\?.*)?$/);n&&(r.p=n[1])}var l=r("8bbf"); +(function(e,t){"object"===typeof exports&&"object"===typeof module?module.exports=t(require("CoreHome"),require("vue"),require("CorePluginsAdmin")):"function"===typeof define&&define.amd?define(["CoreHome",,"CorePluginsAdmin"],t):"object"===typeof exports?exports["ScheduledReports"]=t(require("CoreHome"),require("vue"),require("CorePluginsAdmin")):e["ScheduledReports"]=t(e["CoreHome"],e["Vue"],e["CorePluginsAdmin"])})("undefined"!==typeof self?self:this,(function(e,t,r){return function(e){var t={};function r(o){if(t[o])return t[o].exports;var n=t[o]={i:o,l:!1,exports:{}};return e[o].call(n.exports,n,n.exports,r),n.l=!0,n.exports}return r.m=e,r.c=t,r.d=function(e,t,o){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:o})},r.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var o=Object.create(null);if(r.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)r.d(o,n,function(t){return e[t]}.bind(null,n));return o},r.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="plugins/ScheduledReports/vue/dist/",r(r.s="fae3")}({"19dc":function(t,r){t.exports=e},"8bbf":function(e,r){e.exports=t},a5a2:function(e,t){e.exports=r},fae3:function(e,t,r){"use strict";if(r.r(t),r.d(t,"ReportParameters",(function(){return d})),r.d(t,"ManageScheduledReport",(function(){return it})),"undefined"!==typeof window){var o=window.document.currentScript,n=o&&o.src.match(/(.+\/)[^/]+\.js(\?.*)?$/);n&&(r.p=n[1])}var l=r("8bbf"); /*! * Matomo - free/libre analytics platform * * @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"),p=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||[]}))}});p.render=a;var d=p;const s={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"}},j={class:"loadingPiwik"},y={class:"loadingSegment"},h=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"),p=Object(l["resolveComponent"])("AddReport");return Object(l["openBlock"])(),Object(l["createElementBlock"])("div",s,[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",j,[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"])(p,{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,"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)),onChange:t[5]||(t[5]=t=>e.onChangeProperty(t.prop,t.value)),onSubmit:t[6]||(t[6]=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","report-types","segment-editor-activated","saved-segments-by-id"])):Object(l["createCommentVNode"])("",!0),h])],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),V={id:"emailReportPeriodInlineHelp",class:"inline-help-node"},k=Object(l["createElementVNode"])("br",null,null,-1),w=Object(l["createElementVNode"])("br",null,null,-1),B={key:0,id:"reportHourHelpText",class:"inline-help-node"},_=["textContent"],T={ref:"reportParameters"},C={class:"report_evolution_graph"},P={class:"row evolution-graph-period"},F={class:"col s12"},D={for:"report_evolution_period_for_each"},M=["checked"],x=["innerHTML"],q={class:"col s12"},L={for:"report_evolution_period_for_prev"},I=["checked"],H=["value"],A={class:"row"},G={class:"col s12"},U={class:"reportCategory"},z={class:"listReports"},W=["name","type","id","checked","onChange"],Z={key:0,class:"entityInlineHelp"},K=Object(l["createElementVNode"])("br",null,null,-1),X=["innerHTML"];function J(e,t,r,o,n,i){const a=Object(l["resolveComponent"])("Field"),c=Object(l["resolveComponent"])("SaveButton"),p=Object(l["resolveComponent"])("ContentBlock"),d=Object(l["resolveDirective"])("form");return Object(l["openBlock"])(),Object(l["createBlock"])(p,{class:"entityAddContainer","content-title":e.contentTitle},{default:Object(l["withCtx"])(()=>[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",V,[Object(l["createTextVNode"])(Object(l["toDisplayString"])(e.translate("ScheduledReports_ScheduleReportPeriodHelp"))+" ",1),k,w,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",B,[Object(l["createElementVNode"])("span",{textContent:Object(l["toDisplayString"])(e.reportHourUtc)},null,8,_)])):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},null,8,["disabled","model-value","title","options"])]),Object(l["createElementVNode"])("div",T,[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",C,[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",P,[Object(l["createElementVNode"])("div",F,[Object(l["createElementVNode"])("label",D,[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,M),Object(l["createElementVNode"])("span",{innerHTML:e.$sanitize(e.evolutionGraphsShowForEachInPeriod)},null,8,x)])]),Object(l["createElementVNode"])("div",q,[Object(l["createElementVNode"])("label",L,[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,I),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,H)])])])],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",A,[Object(l["createElementVNode"])("h3",G,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",U,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,W),Object(l["createElementVNode"])("span",null,Object(l["toDisplayString"])(e.decode(t.name)),1),"MultiSites_getAll"===t.uniqueId?(Object(l["openBlock"])(),Object(l["createElementBlock"])("div",Z,Object(l["toDisplayString"])(e.translate("ScheduledReports_ReportIncludeNWebsites",e.countWebsites)),1)):Object(l["createCommentVNode"])("",!0)])])}),128))]),K]))),128))]))),128))],2)),[[l["vShow"],e.report.type===r]])),128)),Object(l["createVNode"])(c,{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,X)],32)),[[d]])]),_:3},8,["content-title"])} + */const i={key:0};function c(e,t,r,o,n,c){const a=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"])(a,{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"])(a,{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 a=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:a["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=c;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 c=Object(l["resolveComponent"])("MatomoLoader"),a=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"])(c),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"])(a,{"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"},_=["textContent"],T={ref:"reportParameters"},C={class:"report_evolution_graph"},P={class:"row evolution-graph-period"},F={class:"col s12"},D={for:"report_evolution_period_for_each"},q=["checked"],x=["innerHTML"],M={class:"col s12"},L={for:"report_evolution_period_for_prev"},I=["checked"],H=["value"],A={class:"row"},U={class:"col s12"},G={class:"reportCategory"},z={class:"listReports"},W=["name","type","id","checked","onChange"],Z={key:0,class:"entityInlineHelp"},K=Object(l["createElementVNode"])("br",null,null,-1),X=["innerHTML"];function J(e,t,r,o,n,i){const c=Object(l["resolveComponent"])("Field"),a=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"])(()=>[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"])(c,{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"])(c,{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"])(c,{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"])(c,{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"])(c,{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"])(c,{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,_)])):Object(l["createCommentVNode"])("",!0)]),_:1},8,["model-value","title","options"])]),Object(l["createElementVNode"])("div",null,[Object(l["createVNode"])(c,{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},null,8,["disabled","model-value","title","options"])]),Object(l["createElementVNode"])("div",T,[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"])(c,{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"])(c,{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",C,[Object(l["withDirectives"])(Object(l["createVNode"])(c,{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",P,[Object(l["createElementVNode"])("div",F,[Object(l["createElementVNode"])("label",D,[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,q),Object(l["createElementVNode"])("span",{innerHTML:e.$sanitize(e.evolutionGraphsShowForEachInPeriod)},null,8,x)])]),Object(l["createElementVNode"])("div",M,[Object(l["createElementVNode"])("label",L,[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,I),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,H)])])])],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",A,[Object(l["createElementVNode"])("h3",U,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",G,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,W),Object(l["createElementVNode"])("span",null,Object(l["toDisplayString"])(e.decode(t.name)),1),"MultiSites_getAll"===t.uniqueId?(Object(l["openBlock"])(),Object(l["createElementBlock"])("div",Z,Object(l["toDisplayString"])(e.translate("ScheduledReports_ReportIncludeNWebsites",e.countWebsites)),1)):Object(l["createCommentVNode"])("",!0)])])}),128))]),K]))),128))]))),128))],2)),[[l["vShow"],e.report.type===r]])),128)),Object(l["createVNode"])(a,{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,X)],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 Q(e,t){return""+(24+parseFloat(e)+t)%24}const{$:Y}=window;var ee=Object(l["defineComponent"])({props:{report:{type:Object,required:!0},selectedReports:Object,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"],components:{ContentBlock:v["ContentBlock"],Field:c["Field"],SaveButton:c["SaveButton"]},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)}},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=>{Y(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:{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=Q(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")}}});ee.render=J;var te=ee;const re={class:"first"},oe={key:0},ne={colspan:"7"},le=Object(l["createElementVNode"])("br",null,null,-1),ie=Object(l["createElementVNode"])("br",null,null,-1),ae=["href"],ce=Object(l["createElementVNode"])("br",null,null,-1),pe=Object(l["createElementVNode"])("br",null,null,-1),de={key:1},se={colspan:"7"},ue=Object(l["createElementVNode"])("br",null,null,-1),me=Object(l["createElementVNode"])("br",null,null,-1),be=Object(l["createElementVNode"])("br",null,null,-1),Oe={class:"first"},je={key:0,class:"entityInlineHelp",style:{"font-size":"9pt"}},ye={key:0},he={key:1},ge={key:0},ve={key:0},Re=Object(l["createElementVNode"])("br",null,null,-1),fe=["onClick"],Se=["src"],Ee={key:2,class:"loadingPiwik"},Ne=["id","action"],Ve=["value"],ke=Object(l["createElementVNode"])("input",{type:"hidden",name:"force_api_session",value:"1"},null,-1),we=["onClick","id"],Be=["src"],_e={style:{"text-align":"center","padding-top":"2px"}},Te=["onClick","title"],Ce=Object(l["createElementVNode"])("span",{class:"icon-edit"},null,-1),Pe=[Ce],Fe={style:{"text-align":"center","padding-top":"2px"}},De=["onClick","title"],Me=Object(l["createElementVNode"])("span",{class:"icon-delete"},null,-1),xe=[Me],qe={class:"tableActionBar"},Le=Object(l["createElementVNode"])("span",{class:"icon-add"},null,-1);function Ie(e,t,r,o,n,i){const a=Object(l["resolveComponent"])("MatomoLoader"),c=Object(l["resolveComponent"])("ContentBlock"),p=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["withDirectives"])((Object(l["openBlock"])(),Object(l["createElementBlock"])("table",null,[Object(l["createElementVNode"])("thead",null,[Object(l["createElementVNode"])("tr",null,[Object(l["createElementVNode"])("th",re,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",ne,[le,Object(l["createTextVNode"])(" "+Object(l["toDisplayString"])(e.translate("ScheduledReports_MustBeLoggedIn"))+" ",1),ie,Object(l["createTextVNode"])("› "),Object(l["createElementVNode"])("a",{href:"index.php?module="+e.loginModule},Object(l["toDisplayString"])(e.translate("Login_LogIn")),9,ae),ce,pe])])):null!==(r=e.reports)&&void 0!==r&&r.length?Object(l["createCommentVNode"])("",!0):(Object(l["openBlock"])(),Object(l["createElementBlock"])("tr",de,[Object(l["createElementVNode"])("td",se,[ue,Object(l["createTextVNode"])(" "+Object(l["toDisplayString"])(e.translate("ScheduledReports_ThereIsNoReportToManage",e.siteName))+". ",1),me,be])])),(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",Oe,[Object(l["createTextVNode"])(Object(l["toDisplayString"])(t.description)+" ",1),e.segmentEditorActivated&&t.idsegment?(Object(l["openBlock"])(),Object(l["createElementBlock"])("div",je,[e.savedSegmentsById[t.idsegment]?(Object(l["openBlock"])(),Object(l["createElementBlock"])("span",ye,Object(l["toDisplayString"])(e.savedSegmentsById[t.idsegment]),1)):(Object(l["openBlock"])(),Object(l["createElementBlock"])("span",he,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",ge,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",ve,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),Re]))),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,Se),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",Ee,[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,Ve),ke],8,Ne),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,Be),Object(l["createTextVNode"])(" "+Object(l["toDisplayString"])(e.translate("General_Download")),1)],8,we)]),Object(l["createElementVNode"])("td",_e,[Object(l["createElementVNode"])("button",{class:"table-action",onClick:r=>e.$emit("edit",t.idreport),title:e.translate("General_Edit")},Pe,8,Te)]),Object(l["createElementVNode"])("td",Fe,[Object(l["createElementVNode"])("button",{class:"table-action",onClick:r=>e.$emit("delete",t.idreport),title:e.translate("General_Delete")},xe,8,De)])]))),128))])])),[[p]]),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"))},[Le,Object(l["createTextVNode"])(" "+Object(l["toDisplayString"])(e.translate("ScheduledReports_CreateAndScheduleReport")),1)])):Object(l["createCommentVNode"])("",!0)])]}),_:1},8,["help-url","content-title"])}var $e=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)}))}}});$e.render=Ie;var He=$e;function Ae(){v["Matomo"].helper.lazyScrollTo(".emailReports",200)}function Ge(e,t){var r;null!==(r=window.updateReportParametersFunctions)&&void 0!==r&&r[e]&&window.updateReportParametersFunctions[e](t)}function Ue(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{$:ze}=window,We=v["Matomo"].timezoneOffset/3600;var Ze=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:te,ListReports:He},directives:{ContentTable:v["ContentTable"],Form:c["Form"]},mounted(){ze(this.$refs.root).on("click","a.entityCancelLink",()=>{this.showListOfReports()}),v["Matomo"].postEvent("ScheduledReports.ManageScheduledReport.mounted",{element:this.$refs.root})},unmounted(){v["Matomo"].postEvent("ScheduledReports.ManageScheduledReport.unmounted",{element:this.$refs.root})},data(){return{showReportsList:!0,report:{},selectedReports:{},sendingReports:[]}},methods:{sendReportNow(e){this.sendingReports.includes(e)||(Ae(),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],Ge(r.type,r)):Ue(r.type,r),r.hour=Q(r.hour,We),this.selectedReports={},Object.values(r.reports).forEach(e=>{this.selectedReports[r.type]=this.selectedReports[r.type]||{},this.selectedReports[r.type][e]=!0}),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&&v["Matomo"].helper.refreshAfter(2)},changedReportType(){Ue(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)&&Ae()},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=Q(this.report.hour,-We),o=this.selectedReports[e.reportType]||{},n=Object.keys(o).filter(t=>this.selectedReports[e.reportType][t]);n.length>0&&(e.reports=n);const l=window.getReportParametersFunctions[this.report.type](this.report);e.parameters=l;const i=this.report.idreport>0;return v["AjaxHelper"].post({method:i?"ScheduledReports.updateReport":"ScheduledReports.addReport",period:t,hour:r},e).then(()=>{this.fadeInOutSuccessMessage(this.$refs.reportUpdatedSuccess,Object(v["translate"])("ScheduledReports_ReportUpdated"))}),!1},onChangeProperty(e,t){this.report[e]=t,"type"===e&&this.changedReportType()},toggleSelectedReport(e,t){this.selectedReports[e]=this.selectedReports[e]||{},this.selectedReports[e][t]=!this.selectedReports[e][t]}},computed:{showReportForm(){return!this.showReportsList},decodedSiteName(){return v["Matomo"].helper.htmlDecode(this.siteName)}}});Ze.render=g;var Ke=Ze; + */function Q(e,t){return""+(24+parseFloat(e)+t)%24}const Y={key:0,class:"selectedReportsWrapper"},ee={class:"selectedReportsHeading"},te={class:"selectedReportsHelp"},re={class:"selectedReportsList",ref:"list"},oe=["data-unique-id"],ne=Object(l["createElementVNode"])("span",{class:"icon-menu-hamburger drag-icon"},null,-1),le={class:"selectedReportName"};function ie(e,t,r,o,n,i){return e.shouldDisplay?(Object(l["openBlock"])(),Object(l["createElementBlock"])("div",Y,[Object(l["createElementVNode"])("div",ee,[Object(l["createElementVNode"])("h3",null,Object(l["toDisplayString"])(e.translate("ScheduledReports_SelectedReports")),1)]),Object(l["createElementVNode"])("p",te,Object(l["toDisplayString"])(e.translate("ScheduledReports_SelectedReportsHelp")),1),Object(l["createElementVNode"])("ul",re,[(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},[ne,Object(l["createElementVNode"])("span",le,Object(l["toDisplayString"])(e.decode(t.name)),1)],8,oe))),128))],512)])):Object(l["createCommentVNode"])("",!0)}const{$:ce}=window;var ae=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=ce(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=ce(e);t.data("ui-sortable")&&t.sortable("destroy")},emitOrder(){const e=this.getListElement();if(!e)return;const t=ce(e).find("li").map((function(){return String(ce(this).data("uniqueId"))})).get();this.$emit("reorder",t)}}});ae.render=ie;var se=ae,de=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:a["Field"],SaveButton:a["SaveButton"],SelectedReportsList:se},directives:{Form:a["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=Q(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")}}});de.render=J;var pe=de;const ue={class:"first"},me={key:0},be={colspan:"7"},Oe=Object(l["createElementVNode"])("br",null,null,-1),he=Object(l["createElementVNode"])("br",null,null,-1),ye=["href"],je=Object(l["createElementVNode"])("br",null,null,-1),ge=Object(l["createElementVNode"])("br",null,null,-1),ve={key:1},Re={colspan:"7"},fe=Object(l["createElementVNode"])("br",null,null,-1),Se=Object(l["createElementVNode"])("br",null,null,-1),Ee=Object(l["createElementVNode"])("br",null,null,-1),Ne={class:"first"},ke={key:0,class:"entityInlineHelp",style:{"font-size":"9pt"}},Ve={key:0},Be={key:1},we={key:0},_e={key:0},Te=Object(l["createElementVNode"])("br",null,null,-1),Ce=["onClick"],Pe=["src"],Fe={key:2,class:"loadingPiwik"},De=["id","action"],qe=["value"],xe=Object(l["createElementVNode"])("input",{type:"hidden",name:"force_api_session",value:"1"},null,-1),Me=["onClick","id"],Le=["src"],Ie={style:{"text-align":"center","padding-top":"2px"}},$e=["onClick","title"],He=Object(l["createElementVNode"])("span",{class:"icon-edit"},null,-1),Ae=[He],Ue={style:{"text-align":"center","padding-top":"2px"}},Ge=["onClick","title"],ze=Object(l["createElementVNode"])("span",{class:"icon-delete"},null,-1),We=[ze],Ze={class:"tableActionBar"},Ke=Object(l["createElementVNode"])("span",{class:"icon-add"},null,-1);function Xe(e,t,r,o,n,i){const c=Object(l["resolveComponent"])("MatomoLoader"),a=Object(l["resolveComponent"])("ContentBlock"),s=Object(l["resolveDirective"])("content-table");return Object(l["openBlock"])(),Object(l["createBlock"])(a,{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["withDirectives"])((Object(l["openBlock"])(),Object(l["createElementBlock"])("table",null,[Object(l["createElementVNode"])("thead",null,[Object(l["createElementVNode"])("tr",null,[Object(l["createElementVNode"])("th",ue,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",me,[Object(l["createElementVNode"])("td",be,[Oe,Object(l["createTextVNode"])(" "+Object(l["toDisplayString"])(e.translate("ScheduledReports_MustBeLoggedIn"))+" ",1),he,Object(l["createTextVNode"])("› "),Object(l["createElementVNode"])("a",{href:"index.php?module="+e.loginModule},Object(l["toDisplayString"])(e.translate("Login_LogIn")),9,ye),je,ge])])):null!==(r=e.reports)&&void 0!==r&&r.length?Object(l["createCommentVNode"])("",!0):(Object(l["openBlock"])(),Object(l["createElementBlock"])("tr",ve,[Object(l["createElementVNode"])("td",Re,[fe,Object(l["createTextVNode"])(" "+Object(l["toDisplayString"])(e.translate("ScheduledReports_ThereIsNoReportToManage",e.siteName))+". ",1),Se,Ee])])),(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",Ne,[Object(l["createTextVNode"])(Object(l["toDisplayString"])(t.description)+" ",1),e.segmentEditorActivated&&t.idsegment?(Object(l["openBlock"])(),Object(l["createElementBlock"])("div",ke,[e.savedSegmentsById[t.idsegment]?(Object(l["openBlock"])(),Object(l["createElementBlock"])("span",Ve,Object(l["toDisplayString"])(e.savedSegmentsById[t.idsegment]),1)):(Object(l["openBlock"])(),Object(l["createElementBlock"])("span",Be,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",we,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",_e,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),Te]))),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,Pe),Object(l["createTextVNode"])(" "+Object(l["toDisplayString"])(e.translate("ScheduledReports_SendReportNow")),1)],8,Ce)),e.sendingReports.includes(t.idreport)?(Object(l["openBlock"])(),Object(l["createElementBlock"])("div",Fe,[Object(l["createVNode"])(c),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,qe),xe],8,De),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,Le),Object(l["createTextVNode"])(" "+Object(l["toDisplayString"])(e.translate("General_Download")),1)],8,Me)]),Object(l["createElementVNode"])("td",Ie,[Object(l["createElementVNode"])("button",{class:"table-action",onClick:r=>e.$emit("edit",t.idreport),title:e.translate("General_Edit")},Ae,8,$e)]),Object(l["createElementVNode"])("td",Ue,[Object(l["createElementVNode"])("button",{class:"table-action",onClick:r=>e.$emit("delete",t.idreport),title:e.translate("General_Delete")},We,8,Ge)])]))),128))])])),[[s]]),Object(l["createElementVNode"])("div",Ze,["anonymous"!==e.userLogin?(Object(l["openBlock"])(),Object(l["createElementBlock"])("button",{key:0,id:"add-report",onClick:t[0]||(t[0]=t=>e.$emit("create"))},[Ke,Object(l["createTextVNode"])(" "+Object(l["toDisplayString"])(e.translate("ScheduledReports_CreateAndScheduleReport")),1)])):Object(l["createCommentVNode"])("",!0)])]}),_:1},8,["help-url","content-title"])}var Je=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)}))}}});Je.render=Xe;var Qe=Je;function Ye(){v["Matomo"].helper.lazyScrollTo(".emailReports",200)}function et(e,t){var r;null!==(r=window.updateReportParametersFunctions)&&void 0!==r&&r[e]&&window.updateReportParametersFunctions[e](t)}function tt(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{$:rt}=window,ot="scheduledReports.pendingNotification",nt=v["Matomo"].timezoneOffset/3600;var lt=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:pe,ListReports:Qe},directives:{ContentTable:v["ContentTable"],Form:a["Form"]},mounted(){rt(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(ot):null;e&&this.$refs.reportUpdatedSuccess&&(sessionStorage.removeItem(ot),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)||(Ye(),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],et(r.type,r)):tt(r.type,r),r.hour=Q(r.hour,nt),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(ot,t),v["Matomo"].helper.refreshAfter(2))},changedReportType(){tt(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)&&Ye()},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=Q(this.report.hour,-nt),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 c=this.report.idreport>0;return v["AjaxHelper"].post({method:c?"ScheduledReports.updateReport":"ScheduledReports.addReport",period:t,hour:r},e).then(()=>{Ye(),this.fadeInOutSuccessMessage(this.$refs.reportUpdatedSuccess,c?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)}}});lt.render=g;var it=lt; /*! * Matomo - free/libre analytics platform * diff --git a/plugins/ScheduledReports/vue/src/AddReport/AddReport.vue b/plugins/ScheduledReports/vue/src/AddReport/AddReport.vue index bd09c660a39..e156fbfbc56 100644 --- a/plugins/ScheduledReports/vue/src/AddReport/AddReport.vue +++ b/plugins/ScheduledReports/vue/src/AddReport/AddReport.vue @@ -266,6 +266,11 @@ + ; +} + +interface ReportsLookupByType { + [reportType: string]: Record; +} export default defineComponent({ props: { @@ -309,6 +326,10 @@ export default defineComponent({ required: true, }, selectedReports: Object, + selectedReportsOrder: { + type: Object, + default: () => ({}), + }, paramPeriods: { type: Object, required: true, @@ -352,11 +373,12 @@ export default defineComponent({ required: true, }, }, - emits: ['submit', 'change', 'toggleSelectedReport'], + emits: ['submit', 'change', 'toggleSelectedReport', 'reorderSelectedReports'], components: { ContentBlock, Field, SaveButton, + SelectedReportsList, }, directives: { Form, @@ -375,6 +397,16 @@ export default defineComponent({ // report names can be encoded (mainly goals) return Matomo.helper.htmlDecode(s); }, + onSelectedReportsReorder(order: string[]) { + if (!this.report || !this.report.type) { + return; + } + + this.$emit('reorderSelectedReports', { + reportType: this.report.type, + order, + }); + }, }, setup(props, ctx) { const reportParameters = ref(null); @@ -406,6 +438,90 @@ export default defineComponent({ Matomo.helper.destroyVueComponent(reportParameters); }, computed: { + enforceSelectedReportOrder(): boolean { + const parameters = (this.report?.parameters || {}) as { enforceOrder?: boolean }; + if (typeof parameters.enforceOrder !== 'undefined') { + return !!parameters.enforceOrder; + } + + return false; + }, + + /** + * Ensures each report type has a flattened order array where every selected report + * appears exactly once (ordered first, then any remaining selections). + */ + selectedReportsOrderNormalized(): Record { + const normalized: Record = {}; + const allSelectedReports = this.selectedReports || {}; + Object.keys(allSelectedReports).forEach((reportType) => { + const selectedForType = allSelectedReports[reportType] || {}; + const ordered = ((this.selectedReportsOrder || {})[reportType] || []) + .filter((uniqueId: string) => selectedForType[uniqueId]); + const remaining = Object.keys(selectedForType).filter( + (uniqueId) => selectedForType[uniqueId] && ordered.indexOf(uniqueId) === -1, + ); + normalized[reportType] = ordered.concat(remaining); + }); + return normalized; + }, + + /** + * Flattens the nested report metadata into a two-level lookup so we can access any report + * by its type and unique id without re-iterating the category structure. + */ + reportsLookup(): ReportsLookupByType { + const reportsByType = this.reportsByCategoryByReportType as ReportsByType; + const lookup: ReportsLookupByType = {}; + + Object.entries(reportsByType).forEach(([reportType, reportsByCategory]) => { + lookup[reportType] = lookup[reportType] || {}; + Object.values(reportsByCategory).forEach((reports) => { + reports.forEach((report) => { + lookup[reportType][report.uniqueId] = report; + }); + }); + }); + + return lookup; + }, + selectedReportsForCurrentType(): ReportMetadata[] { + const type = this.report?.type as string; + if (!type) { + return []; + } + + const selectedForType = (this.selectedReports || {})[type] || {}; + let order: string[] = []; + if (this.enforceSelectedReportOrder) { + order = this.selectedReportsOrderNormalized[type] || []; + } else { + const reportsByCategory = (this.reportsByCategoryByReportType as ReportsByType)[type] || {}; + const ordered: string[] = []; + Object.values(reportsByCategory).forEach((reports) => { + reports.forEach((report) => { + if (selectedForType[report.uniqueId]) { + ordered.push(report.uniqueId); + } + }); + }); + order = ordered; + } + + if (!order.length) { + order = Object.keys(selectedForType).filter((uniqueId) => selectedForType[uniqueId]); + } + + if (!order.length) { + return []; + } + + const lookup = this.reportsLookup[type] || {}; + + return order + .map((uniqueId) => lookup[uniqueId]) + .filter((report): report is ReportMetadata => !!report); + }, reportsByCategoryByReportTypeInColumns() { const reportsByCategoryByReportType = this.reportsByCategoryByReportType as Record>; diff --git a/plugins/ScheduledReports/vue/src/AddReport/SelectedReportsList.vue b/plugins/ScheduledReports/vue/src/AddReport/SelectedReportsList.vue new file mode 100644 index 00000000000..7999a27ae9a --- /dev/null +++ b/plugins/ScheduledReports/vue/src/AddReport/SelectedReportsList.vue @@ -0,0 +1,142 @@ + + + diff --git a/plugins/ScheduledReports/vue/src/ManageScheduledReport/ManageScheduledReport.vue b/plugins/ScheduledReports/vue/src/ManageScheduledReport/ManageScheduledReport.vue index b8c84717b9f..1a133efb643 100644 --- a/plugins/ScheduledReports/vue/src/ManageScheduledReport/ManageScheduledReport.vue +++ b/plugins/ScheduledReports/vue/src/ManageScheduledReport/ManageScheduledReport.vue @@ -54,10 +54,12 @@ :count-websites="countWebsites" :site-name="decodedSiteName" :selected-reports="selectedReports" + :selected-reports-order="selectedReportsOrder" :report-types="reportTypes" :segment-editor-activated="segmentEditorActivated" :saved-segments-by-id="savedSegmentsById" @toggle-selected-report="toggleSelectedReport($event.reportType, $event.uniqueId)" + @reorder-selected-reports="onReorderSelectedReports($event.reportType, $event.order)" @change="onChangeProperty($event.prop, $event.value)" @submit="submitReport()" > @@ -91,6 +93,7 @@ interface ManageScheduledReportState { showReportsList: boolean; report: Report; selectedReports: Record>; + selectedReportsOrder: Record; sendingReports: Array; } @@ -115,6 +118,7 @@ window.updateReportParametersFunctions = window.updateReportParametersFunctions window.getReportParametersFunctions = window.getReportParametersFunctions || {}; const { $ } = window; +const PENDING_NOTIFICATION_KEY = 'scheduledReports.pendingNotification'; const timeZoneDifferenceInHours = Matomo.timezoneOffset / 3600; @@ -208,6 +212,18 @@ export default defineComponent({ Matomo.postEvent('ScheduledReports.ManageScheduledReport.mounted', { element: this.$refs.root, }); + + const pendingMessage = typeof sessionStorage !== 'undefined' + ? sessionStorage.getItem(PENDING_NOTIFICATION_KEY) + : null; + if (pendingMessage && this.$refs.reportUpdatedSuccess) { + sessionStorage.removeItem(PENDING_NOTIFICATION_KEY); + this.fadeInOutSuccessMessage( + this.$refs.reportUpdatedSuccess as HTMLElement, + pendingMessage, + false, + ); + } }, unmounted() { Matomo.postEvent('ScheduledReports.ManageScheduledReport.unmounted', { @@ -219,6 +235,7 @@ export default defineComponent({ showReportsList: true, report: {} as unknown as Report, selectedReports: {}, + selectedReportsOrder: {}, sendingReports: [], }; }, @@ -276,10 +293,14 @@ export default defineComponent({ report.hour = adjustHourToTimezone(report.hour as string, timeZoneDifferenceInHours); this.selectedReports = {}; + this.selectedReportsOrder = {}; Object.values(report.reports).forEach((reportId) => { this.selectedReports[report.type] = this.selectedReports[report.type] || {}; this.selectedReports[report.type][reportId] = true; }); + this.selectedReportsOrder[report.type] = Object.values(report.reports).map( + (reportId) => reportId as string, + ); report[`format${report.type}`] = report.format; @@ -306,6 +327,9 @@ export default defineComponent({ }); if (reload) { + if (typeof sessionStorage !== 'undefined') { + sessionStorage.setItem(PENDING_NOTIFICATION_KEY, message); + } Matomo.helper.refreshAfter(2); } }, @@ -374,11 +398,18 @@ export default defineComponent({ const { period } = this.report; const hour = adjustHourToTimezone(this.report.hour as string, -timeZoneDifferenceInHours); - const selectedReports = this.selectedReports[apiParameters.reportType as string] || {}; - const reports = Object.keys(selectedReports).filter( - (name) => this.selectedReports[apiParameters.reportType as string][name], + const reportType = apiParameters.reportType as string; + const selectedReports = this.selectedReports[reportType] || {}; + let reports = (this.selectedReportsOrder[reportType] || []).filter( + (name) => selectedReports[name], ); + if (!reports.length) { + reports = Object.keys(selectedReports).filter( + (name) => selectedReports[name], + ); + } + if (reports.length > 0) { apiParameters.reports = reports; } @@ -386,18 +417,21 @@ export default defineComponent({ const reportParams = window.getReportParametersFunctions[this.report.type](this.report); apiParameters.parameters = reportParams as unknown as QueryParameters; - const isCreate = this.report.idreport > 0; + const isUpdate = this.report.idreport > 0; AjaxHelper.post( { - method: isCreate ? 'ScheduledReports.updateReport' : 'ScheduledReports.addReport', + method: isUpdate ? 'ScheduledReports.updateReport' : 'ScheduledReports.addReport', period, hour, }, apiParameters, ).then(() => { + scrollToTop(); this.fadeInOutSuccessMessage( this.$refs.reportUpdatedSuccess as HTMLElement, - translate('ScheduledReports_ReportUpdated'), + isUpdate + ? translate('ScheduledReports_ReportUpdated') + : translate('ScheduledReports_ReportAdded'), ); }); return false; @@ -411,7 +445,25 @@ export default defineComponent({ }, toggleSelectedReport(reportType: string, uniqueId: string) { this.selectedReports[reportType] = this.selectedReports[reportType] || {}; - this.selectedReports[reportType][uniqueId] = !this.selectedReports[reportType][uniqueId]; + const newValue = !this.selectedReports[reportType][uniqueId]; + this.selectedReports[reportType][uniqueId] = newValue; + + this.selectedReportsOrder[reportType] = this.selectedReportsOrder[reportType] || []; + + if (newValue) { + if (this.selectedReportsOrder[reportType].indexOf(uniqueId) === -1) { + this.selectedReportsOrder[reportType].push(uniqueId); + } + } else { + this.selectedReportsOrder[reportType] = this.selectedReportsOrder[reportType].filter( + (reportId) => reportId !== uniqueId, + ); + } + }, + onReorderSelectedReports(reportType: string, order: string[]) { + this.selectedReportsOrder[reportType] = order.filter( + (uniqueId) => this.selectedReports[reportType]?.[uniqueId], + ); }, }, computed: { diff --git a/plugins/ScheduledReports/vue/src/ReportParameters/ReportParameters.vue b/plugins/ScheduledReports/vue/src/ReportParameters/ReportParameters.vue index 0db0d74463d..94deefa6bcc 100644 --- a/plugins/ScheduledReports/vue/src/ReportParameters/ReportParameters.vue +++ b/plugins/ScheduledReports/vue/src/ReportParameters/ReportParameters.vue @@ -103,6 +103,7 @@ export default defineComponent({ emailMe: theReport.emailMe, evolutionGraph: theReport.evolutionGraph, additionalEmails: (theReport.additionalEmails || []), + enforceOrder: true, }); } }, diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_email_reports_editor.png b/tests/UI/expected-screenshots/UIIntegrationTest_email_reports_editor.png index 3db2408ec3f..afe233d314a 100644 --- a/tests/UI/expected-screenshots/UIIntegrationTest_email_reports_editor.png +++ b/tests/UI/expected-screenshots/UIIntegrationTest_email_reports_editor.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7d4e7952d8d0002966c1ed63d76f2e56e66c704a013c94a260dc7518e15a9105 -size 500028 +oid sha256:90f4d6f13ab35beaa452ef4cff3df0ac7a8c0294437e0710dfb39cae3f0876a7 +size 836370