Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/matomo-org/matomo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordizzy <diosmosis@users.noreply.github.com>2022-02-09 20:30:36 +0300
committerGitHub <noreply@github.com>2022-02-09 20:30:36 +0300
commitc0a1767561ddc7fa85b11b713febdb027c3323cf (patch)
treeee8a2137a0ae1ed45ef264a255185d204dfd4531
parent3dde24427e41e384fdb478a8e047e8cbb3fa4d51 (diff)
[Vue] migrate user-permissions-edit component to vue (#18572)
* fix couple tests * fix several test failures * fix string concat * fix test failure * extra change * fix last change and random failure * styling fix * fix last fix * real fix this time * fix stray request * proper fix * update build files * try to fix random failure * do not submit form * check for api errors in promise chain in ajaxhelper.ts * force a digest after a location change * use proper abortcontroller method instead of promise hack, have to add new polyfill + try to fix random test failure * some UI test fixes * fix some report export issues * several save button fixes + make replace approximation in createAngularJsAdapter better * fix sparkline * apply after manual click triggering in savebutton * css fixes and piwik-content-table was never applied by angularjs in installtion * rebuild vue * add names to divs so they can still be queried as they were in angularjs * rebuild vue * rebuild vue * now that format_metrics checkbox works, need to check it * small delay before processing first popover * fix dropdown class/directive name * fix overlay test * remove unintended changes * remove unintended changes * migrate archiving controller * do not do a passthrough transpile of vue typescript, and fix many typescript errors in existing code * more typescript fixes * even more fixes * workarounds to fix recursive typing issues * get corehome to build w/ full typescript build and output type definitions to local dir * get outputted typings to be used when compiling other plugins and fix typescript issues in CorePluginsAdmin * readd corehome umd * fix typescript errors in ExampleVue plugin * fix feedback typescript errors * rebuild * migrate branding controller and get to build * fix issues and get to work * rebuild * fix notification scroll * migrate smtp settings controller in coreadminhome * get to work * migrate js tracking code generator and get to build * migrate image tracking code generator and get to build * get to work in UI * get UI tests to pass locally * forgot to add files + rebuild vue * update screenshots * Show a summary of new features (#18065) * Added "What is new" notification display, populated by a new event * Removed test example event hook * Added support for applying a link attribute to menu items, fixes layout issue for mobile with html menu items * Updated UI test screenshots * Revert accidental edit * Hide the "What's new" icon if there are no new features to show * Changed to use changes.json, track user last viewed, added ui test * Fix UserManager unit tests broken by new ts_changes_viewed user field * Moved getChanges to separate helper class, added unit test, added user view access check * Updated to add new changes table and populate only on plugin update/install * Added missing fixture class, updated UI screenshots * Updated matomo font to add ringing bell and new releases icons * Fix for integration test * Reworked class structure, removed unnecessary angular directive, merged templates, other tidy ups * built vue files * built vue files * Added null user check, missing table exception handling, show plugin name in change title, better handling of missing change fields * Added sample changes file, moved UserChanges db code to changes model, added return type hints, better db error code handling, various other improvements * Revert accidental UI screenshot commit * Fix for incorrect link name parameter in sample changes, switched back to using $db->query for INSERT IGNORE * Integration test fix, UI screenshot updates * Test fix * Added link styling, show CoreHome changes without plugin prefix in title * Update UI test screenshot * Added styles to the popover, added event for filtering changes * Test fix * UI test screenshot updates Co-authored-by: sgiehl <stefan@matomo.org> Co-authored-by: bx80 <bx80@users.noreply.github.com> * Update test translation (#18531) update a test failed XML * updates all submodules (#18541) Co-authored-by: diosmosis <diosmosis@users.noreply.github.com> * Translations update from Hosted Weblate (#18529) * Translated using Weblate (Greek) Currently translated at 100.0% (162 of 162 strings) Translation: Matomo/Plugin CoreAdminHome Translate-URL: https://hosted.weblate.org/projects/matomo/plugin-coreadminhome/el/ [ci skip] Co-authored-by: Hosted Weblate <hosted@weblate.org> Co-authored-by: Vasilis Lourdas <dev@lourdas.eu> * Translated using Weblate (Chinese (Simplified)) Currently translated at 83.9% (136 of 162 strings) Translation: Matomo/Plugin CoreAdminHome Translate-URL: https://hosted.weblate.org/projects/matomo/plugin-coreadminhome/zh_Hans/ [ci skip] Translated using Weblate (Chinese (Simplified)) Currently translated at 99.6% (620 of 622 strings) Translation: Matomo/Matomo Base Translate-URL: https://hosted.weblate.org/projects/matomo/matomo-base/zh_Hans/ [ci skip] Co-authored-by: Hosted Weblate <hosted@weblate.org> Co-authored-by: 刘韬 <lyuutau@outlook.com> * Update translation files Updated by "Squash Git commits" hook in Weblate. Translation: Matomo/Plugin CoreAdminHome Translate-URL: https://hosted.weblate.org/projects/matomo/plugin-coreadminhome/ [ci skip] Co-authored-by: Vasilis Lourdas <dev@lourdas.eu> Co-authored-by: 刘韬 <lyuutau@outlook.com> * [Vue] migrate report export directive and popover (#18440) * update files * sidenav start * make getRef a utility method * tweak * add return type * finish converting side-nav directive * starting on reporting menu conversion * remove unused properties * convert reporting pages service * migrate report metadata store * remove angularjs files * migrating reporting pages store * make store adapters more immutable * get service adapters to work * fix a UI test * another html fix * migrate most of reporting menu directive and model * Use themed font family for input forms to override materialize.css styling * rebuild vue * add a missing div * ui test fixes * update styling * get to build * get to load in the UI w/o error * clone result of functions * fix compile issue * migrate widget loader and get to load in UI * rebuild vue * migrate widgetcontainer * migrate widget bydimension container * migrate widget + add tooltips directive * quick fix * Updating version to 4.6.0 * loading in page * update expected screenshot * add wait just in case travis is slow * fix ordering bug * add another wait * rebuild vue * css tweak * fix some bugs and tests * undo screenshot changes * Menus test passing locally * [Vue] date picker viewDate property is not kept up to date (#18385) * viewDate ref is not kept up to date * rebuild corehome * reporting menu subcategory items are meant to be normal links * update some screenshots * use innerText instead of text() since angularjs maintains newlines in HTML that vue does not add * trigger angularjs digest after ajaxhelper request * rebuild vue * update screenshots, fix bug in link generation in reporting menu and allow syncing multiple screenshot regexes at a time * undo box-shadow change for UI tests * fix more issues & update more tests * update some screenshots * fix some tests * rebuild CoreHome * quick fix * built vue files * fix angularjs issue * add comment * update umd files * 4.6.1-rc1 * 4.6.1 * fix field array title * apply some pr feedback * apply more pr feedback * another fix * tweak * fix ng-change not executed before ng-model * fix another set of issues * fix another issue * rebuild vue * better ng-change/ng-model fix * update some screenshots * rebuild vue * remove some TODOs * initiate initial ng-change ONLY for site selectors where this behavior applies * emit/broadcast on correct scope in wrapper * rebuild vue * fix some issues * couple more fixes * fix another title issue * rebuild vue * do not report on ajax errors in notifications if not logged in * migrate reporting page and model * rebuild vue * create sites selector model adapter * fix siteselector vue bug, initial site is only set if there is just one site available * rebuild vue * migrate plugin settings directive * remove TODO * migrate plugin filter directive * migrate two more plugins directives * migrate save button * fix a bunch of bugs * fix another widget bug * allow change event name between angularjs and vue * rebuild vue * migrate plugin form directive * get to work * migrate select-on-focus directive and start migrating report-export directive * finish migrating report export directive & popover component + create reusable function to create vue app and add globals to it * rebuild vue * remove angularjs files and move less contents to vue dir * built vue files * fix function signature * fix vue warning * fix ajax request race condition * rebuild vue * add new notification type "help" so the help notification is not cleared when clearing transient notifications * fix some bugs and tests * update screenshot * update screenshot & fix a test * allow using unminified jquery ui + fix bug in last fix * fix error when enrichedheadline is used in modal * add polyfill min.js * remove two todos * fix widget url logic * update some screenshots and fix sanitization/escape issue * update screenshots * rebuild vue * fix url location updating regression in MatomoUrl.updateLocation use * submodule * update screenshots and fix possible error in json parse * built vue files * Merge branch 'vue-period-selector-regression' into vue-reporting-menu * rebuild vue * use correct variable * rebuild vue * fix widget url logic * segment parameter can be undefined now for some reason * fix ngmodel binding in siteselector adapter (for last time hopefully) * the original site selector only set the first site to the first site in the initial sites query if there was only one site in the entire matomo instance * fix sitesmanager ui test failure * fix usersettings test failure * rebuild vue * more siteselector tweaks. * build CoreHome * more siteselector tweaks. * another siteselector issue * update screenshots * update screenshot and try to fix random failure * fix some issues in widget.vue when containerid is specified * fix couple tests * fix several test failures * fix string concat * fix test failure * extra change * fix last change and random failure * styling fix * fix last fix * real fix this time * fix stray request * proper fix * update build files * try to fix random failure * do not submit form * check for api errors in promise chain in ajaxhelper.ts * force a digest after a location change * use proper abortcontroller method instead of promise hack, have to add new polyfill + try to fix random test failure * some UI test fixes * fix some report export issues * several save button fixes + make replace approximation in createAngularJsAdapter better * apply after manual click triggering in savebutton * add names to divs so they can still be queried as they were in angularjs * rebuild vue * now that format_metrics checkbox works, need to check it * fix unintended changes * updated expected screenshots * update two more * go back to previous format_metrics behavior in popover Co-authored-by: Justin Velluppillai <justin@innocraft.com> Co-authored-by: justinvelluppillai <justinvelluppillai@users.noreply.github.com> Co-authored-by: Matthieu Aubry <mattab@users.noreply.github.com> * [Vue] remove support in vue for FormField.allSettings (#18542) * deprecate support in vue for FormField.allSettings since deep watching the property doesnt quite work * built vue files * update screenshots * update screenshot * Show a summary of new features (#18065) * Added "What is new" notification display, populated by a new event * Removed test example event hook * Added support for applying a link attribute to menu items, fixes layout issue for mobile with html menu items * Updated UI test screenshots * Revert accidental edit * Hide the "What's new" icon if there are no new features to show * Changed to use changes.json, track user last viewed, added ui test * Fix UserManager unit tests broken by new ts_changes_viewed user field * Moved getChanges to separate helper class, added unit test, added user view access check * Updated to add new changes table and populate only on plugin update/install * Added missing fixture class, updated UI screenshots * Updated matomo font to add ringing bell and new releases icons * Fix for integration test * Reworked class structure, removed unnecessary angular directive, merged templates, other tidy ups * built vue files * built vue files * Added null user check, missing table exception handling, show plugin name in change title, better handling of missing change fields * Added sample changes file, moved UserChanges db code to changes model, added return type hints, better db error code handling, various other improvements * Revert accidental UI screenshot commit * Fix for incorrect link name parameter in sample changes, switched back to using $db->query for INSERT IGNORE * Integration test fix, UI screenshot updates * Test fix * Added link styling, show CoreHome changes without plugin prefix in title * Update UI test screenshot * Added styles to the popover, added event for filtering changes * Test fix * UI test screenshot updates Co-authored-by: sgiehl <stefan@matomo.org> Co-authored-by: bx80 <bx80@users.noreply.github.com> * Update test translation (#18531) update a test failed XML * updates all submodules (#18541) Co-authored-by: diosmosis <diosmosis@users.noreply.github.com> * Translations update from Hosted Weblate (#18529) * Translated using Weblate (Greek) Currently translated at 100.0% (162 of 162 strings) Translation: Matomo/Plugin CoreAdminHome Translate-URL: https://hosted.weblate.org/projects/matomo/plugin-coreadminhome/el/ [ci skip] Co-authored-by: Hosted Weblate <hosted@weblate.org> Co-authored-by: Vasilis Lourdas <dev@lourdas.eu> * Translated using Weblate (Chinese (Simplified)) Currently translated at 83.9% (136 of 162 strings) Translation: Matomo/Plugin CoreAdminHome Translate-URL: https://hosted.weblate.org/projects/matomo/plugin-coreadminhome/zh_Hans/ [ci skip] Translated using Weblate (Chinese (Simplified)) Currently translated at 99.6% (620 of 622 strings) Translation: Matomo/Matomo Base Translate-URL: https://hosted.weblate.org/projects/matomo/matomo-base/zh_Hans/ [ci skip] Co-authored-by: Hosted Weblate <hosted@weblate.org> Co-authored-by: 刘韬 <lyuutau@outlook.com> * Update translation files Updated by "Squash Git commits" hook in Weblate. Translation: Matomo/Plugin CoreAdminHome Translate-URL: https://hosted.weblate.org/projects/matomo/plugin-coreadminhome/ [ci skip] Co-authored-by: Vasilis Lourdas <dev@lourdas.eu> Co-authored-by: 刘韬 <lyuutau@outlook.com> * [Vue] migrate report export directive and popover (#18440) * update files * sidenav start * make getRef a utility method * tweak * add return type * finish converting side-nav directive * starting on reporting menu conversion * remove unused properties * convert reporting pages service * migrate report metadata store * remove angularjs files * migrating reporting pages store * make store adapters more immutable * get service adapters to work * fix a UI test * another html fix * migrate most of reporting menu directive and model * Use themed font family for input forms to override materialize.css styling * rebuild vue * add a missing div * ui test fixes * update styling * get to build * get to load in the UI w/o error * clone result of functions * fix compile issue * migrate widget loader and get to load in UI * rebuild vue * migrate widgetcontainer * migrate widget bydimension container * migrate widget + add tooltips directive * quick fix * Updating version to 4.6.0 * loading in page * update expected screenshot * add wait just in case travis is slow * fix ordering bug * add another wait * rebuild vue * css tweak * fix some bugs and tests * undo screenshot changes * Menus test passing locally * [Vue] date picker viewDate property is not kept up to date (#18385) * viewDate ref is not kept up to date * rebuild corehome * reporting menu subcategory items are meant to be normal links * update some screenshots * use innerText instead of text() since angularjs maintains newlines in HTML that vue does not add * trigger angularjs digest after ajaxhelper request * rebuild vue * update screenshots, fix bug in link generation in reporting menu and allow syncing multiple screenshot regexes at a time * undo box-shadow change for UI tests * fix more issues & update more tests * update some screenshots * fix some tests * rebuild CoreHome * quick fix * built vue files * fix angularjs issue * add comment * update umd files * 4.6.1-rc1 * 4.6.1 * fix field array title * apply some pr feedback * apply more pr feedback * another fix * tweak * fix ng-change not executed before ng-model * fix another set of issues * fix another issue * rebuild vue * better ng-change/ng-model fix * update some screenshots * rebuild vue * remove some TODOs * initiate initial ng-change ONLY for site selectors where this behavior applies * emit/broadcast on correct scope in wrapper * rebuild vue * fix some issues * couple more fixes * fix another title issue * rebuild vue * do not report on ajax errors in notifications if not logged in * migrate reporting page and model * rebuild vue * create sites selector model adapter * fix siteselector vue bug, initial site is only set if there is just one site available * rebuild vue * migrate plugin settings directive * remove TODO * migrate plugin filter directive * migrate two more plugins directives * migrate save button * fix a bunch of bugs * fix another widget bug * allow change event name between angularjs and vue * rebuild vue * migrate plugin form directive * get to work * migrate select-on-focus directive and start migrating report-export directive * finish migrating report export directive & popover component + create reusable function to create vue app and add globals to it * rebuild vue * remove angularjs files and move less contents to vue dir * built vue files * fix function signature * fix vue warning * fix ajax request race condition * rebuild vue * add new notification type "help" so the help notification is not cleared when clearing transient notifications * fix some bugs and tests * update screenshot * update screenshot & fix a test * allow using unminified jquery ui + fix bug in last fix * fix error when enrichedheadline is used in modal * add polyfill min.js * remove two todos * fix widget url logic * update some screenshots and fix sanitization/escape issue * update screenshots * rebuild vue * fix url location updating regression in MatomoUrl.updateLocation use * submodule * update screenshots and fix possible error in json parse * built vue files * Merge branch 'vue-period-selector-regression' into vue-reporting-menu * rebuild vue * use correct variable * rebuild vue * fix widget url logic * segment parameter can be undefined now for some reason * fix ngmodel binding in siteselector adapter (for last time hopefully) * the original site selector only set the first site to the first site in the initial sites query if there was only one site in the entire matomo instance * fix sitesmanager ui test failure * fix usersettings test failure * rebuild vue * more siteselector tweaks. * build CoreHome * more siteselector tweaks. * another siteselector issue * update screenshots * update screenshot and try to fix random failure * fix some issues in widget.vue when containerid is specified * fix couple tests * fix several test failures * fix string concat * fix test failure * extra change * fix last change and random failure * styling fix * fix last fix * real fix this time * fix stray request * proper fix * update build files * try to fix random failure * do not submit form * check for api errors in promise chain in ajaxhelper.ts * force a digest after a location change * use proper abortcontroller method instead of promise hack, have to add new polyfill + try to fix random test failure * some UI test fixes * fix some report export issues * several save button fixes + make replace approximation in createAngularJsAdapter better * apply after manual click triggering in savebutton * add names to divs so they can still be queried as they were in angularjs * rebuild vue * now that format_metrics checkbox works, need to check it * fix unintended changes * updated expected screenshots * update two more * go back to previous format_metrics behavior in popover Co-authored-by: Justin Velluppillai <justin@innocraft.com> Co-authored-by: justinvelluppillai <justinvelluppillai@users.noreply.github.com> Co-authored-by: Matthieu Aubry <mattab@users.noreply.github.com> * [Vue] remove support in vue for FormField.allSettings (#18542) * deprecate support in vue for FormField.allSettings since deep watching the property doesnt quite work * built vue files * update screenshots * update screenshot * fix tests * rebuild * rebuild * order plugins by dependencies in vue:build and fix warning in corehome build * built vue files * built vue files * remove unused imports * built vue files * remove multilinefield component, fieldtextareaarray does the same thing * edit-trigger is not used anywhere * migrate sitetypes model to store * do not load nonexistant files * remove reference nonexistant files * start converting sitefields component * more work on sitefields component * undo submodule change * rebuild * get sitesmanager to build * get SiteFields component to work in UI * datepicker does not format times * export other stores * fix some typing issues and rebuild * start on site management conversion * add more comma delimited props to list + remove controller JS * rebuild * convert sites manager controller to sitesmanagement component * remove TODOs * finish migrating sitesmanager * remove some TODO * get to build * fixes from testing * rebuild * rebuild and fix issue w/ globalsettings hash detection * migrate capabilities-edit component. * some fixes and get to build * get to work * built vue files * get to work and rebuild * fixes * another fix * more fixes * update file * fix ref * rebuild vue * fix bug and rebuild * fix bug and rebuild * fix issue * fix issues and rebuild * fix ui test * fix UI test failure * fixing some issues * complete fixes * fix some more issues * fix ui test failures * another fix * several more fixes * fix delete dialog * more fixes * fix styling issue * more fixes * fix another ui test + update other UI tests * fixing edisiteid handling * update screenshots * fix UI tests somre more * fix random failure * fixes * reference css class not attribute (since that is what is added in vue) * fixing more ui tests * try to fix vue css class in directive issue * tweak * in groupedsetting handle templateFile property for angularjs BC * rebuild vue * fix view tracking code link * fixing UI tests * fix selector in test for this branch only * Update screenshot. * update screenshot * update screenshots * fix styling * built vue files Co-authored-by: Ben Burgess <88810029+bx80@users.noreply.github.com> Co-authored-by: sgiehl <stefan@matomo.org> Co-authored-by: bx80 <bx80@users.noreply.github.com> Co-authored-by: Peter Zhang <peter@innocraft.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Weblate (bot) <hosted@weblate.org> Co-authored-by: Vasilis Lourdas <dev@lourdas.eu> Co-authored-by: 刘韬 <lyuutau@outlook.com> Co-authored-by: Justin Velluppillai <justin@innocraft.com> Co-authored-by: justinvelluppillai <justinvelluppillai@users.noreply.github.com> Co-authored-by: Matthieu Aubry <mattab@users.noreply.github.com>
-rw-r--r--plugins/CoreHome/vue/dist/CoreHome.umd.js37
-rw-r--r--plugins/CoreHome/vue/dist/CoreHome.umd.min.js6
-rw-r--r--plugins/CoreHome/vue/src/AjaxHelper/AjaxHelper.ts25
-rw-r--r--plugins/CoreHome/vue/src/DropdownMenu/DropdownMenu.ts12
-rw-r--r--plugins/CoreHome/vue/src/index.ts2
-rw-r--r--plugins/Morpheus/javascripts/piwikHelper.js3
-rw-r--r--plugins/UsersManager/UsersManager.php3
-rw-r--r--plugins/UsersManager/angularjs/user-permissions-edit/user-permissions-edit.component.html222
-rw-r--r--plugins/UsersManager/angularjs/user-permissions-edit/user-permissions-edit.component.js300
-rw-r--r--plugins/UsersManager/tests/UI/UsersManager_spec.js2
-rw-r--r--plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_admin_view_admin_edit_permissions.png4
-rw-r--r--plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_permissions_all_rows_in_search.png4
-rw-r--r--plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_permissions_all_sites_access.png4
-rw-r--r--plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_permissions_capability_single_site.png4
-rw-r--r--plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_permissions_edit.png4
-rw-r--r--plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_permissions_filters.png4
-rw-r--r--plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_permissions_next.png4
-rw-r--r--plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_permissions_remove_access.png4
-rw-r--r--plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_permissions_remove_single.png4
-rw-r--r--plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_permissions_select_all.png4
-rw-r--r--plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_permissions_select_multiple.png4
-rw-r--r--plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_permissions_single_site_access.png4
-rw-r--r--plugins/UsersManager/vue/dist/UsersManager.umd.js852
-rw-r--r--plugins/UsersManager/vue/dist/UsersManager.umd.min.js12
-rw-r--r--plugins/UsersManager/vue/src/UserPermissionsEdit/UserPermissionsEdit.adapter.ts37
-rw-r--r--plugins/UsersManager/vue/src/UserPermissionsEdit/UserPermissionsEdit.less (renamed from plugins/UsersManager/angularjs/user-permissions-edit/user-permissions-edit.component.less)0
-rw-r--r--plugins/UsersManager/vue/src/UserPermissionsEdit/UserPermissionsEdit.vue798
-rw-r--r--plugins/UsersManager/vue/src/index.ts2
28 files changed, 1795 insertions, 566 deletions
diff --git a/plugins/CoreHome/vue/dist/CoreHome.umd.js b/plugins/CoreHome/vue/dist/CoreHome.umd.js
index c519d5dd6c..240359edbd 100644
--- a/plugins/CoreHome/vue/dist/CoreHome.umd.js
+++ b/plugins/CoreHome/vue/dist/CoreHome.umd.js
@@ -159,7 +159,7 @@ __webpack_require__.d(__webpack_exports__, "format", function() { return /* reex
__webpack_require__.d(__webpack_exports__, "getToday", function() { return /* reexport */ getToday; });
__webpack_require__.d(__webpack_exports__, "parseDate", function() { return /* reexport */ parseDate; });
__webpack_require__.d(__webpack_exports__, "todayIsInRange", function() { return /* reexport */ todayIsInRange; });
-__webpack_require__.d(__webpack_exports__, "Dropdown", function() { return /* reexport */ DropdownMenu; });
+__webpack_require__.d(__webpack_exports__, "DropdownMenu", function() { return /* reexport */ DropdownMenu; });
__webpack_require__.d(__webpack_exports__, "FocusAnywhereButHere", function() { return /* reexport */ FocusAnywhereButHere; });
__webpack_require__.d(__webpack_exports__, "FocusIf", function() { return /* reexport */ FocusIf; });
__webpack_require__.d(__webpack_exports__, "MatomoDialog", function() { return /* reexport */ MatomoDialog; });
@@ -1489,6 +1489,8 @@ var AjaxHelper_AjaxHelper = /*#__PURE__*/function () {
AjaxHelper_defineProperty(this, "defaultParams", ['idSite', 'period', 'date', 'segment']);
+ AjaxHelper_defineProperty(this, "resolveWithHelper", false);
+
this.errorCallback = defaultErrorCallback;
}
/**
@@ -1735,7 +1737,13 @@ var AjaxHelper_AjaxHelper = /*#__PURE__*/function () {
var result = new Promise(function (resolve, reject) {
_this2.requestHandle.then(function (data) {
- resolve(data); // ignoring textStatus/jqXHR
+ if (_this2.resolveWithHelper) {
+ // NOTE: we can't resolve w/ the jquery xhr, because it's a promise, and will
+ // just result in following the promise chain back to 'data'
+ resolve(_this2); // casting hack here
+ } else {
+ resolve(data); // ignoring textStatus/jqXHR
+ }
}).fail(function (xhr) {
if (xhr.statusText !== 'abort') {
console.log("Warning: the ".concat($.param(_this2.getParams), " request failed!"));
@@ -1926,6 +1934,11 @@ var AjaxHelper_AjaxHelper = /*#__PURE__*/function () {
return params;
}
+ }, {
+ key: "getRequestHandle",
+ value: function getRequestHandle() {
+ return this.requestHandle;
+ }
}], [{
key: "fetch",
value:
@@ -2025,13 +2038,18 @@ var AjaxHelper_AjaxHelper = /*#__PURE__*/function () {
helper.abortController = options.abortController;
}
- return helper.send().then(function (data) {
- // check for error if not using default notification behavior
+ if (options.returnResponseObject) {
+ helper.resolveWithHelper = true;
+ }
+
+ return helper.send().then(function (result) {
+ var data = result instanceof AjaxHelper ? result.requestHandle.responseJSON : result; // check for error if not using default notification behavior
+
if (data.result === 'error') {
throw new ApiResponseError(data.message);
}
- return data;
+ return result;
});
} // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -2557,6 +2575,7 @@ function cloneThenApply(p) {
* </li>
* </ul>
*/
+
/* harmony default export */ var DropdownMenu = ({
mounted: function mounted(element, binding) {
var options = {};
@@ -2576,6 +2595,14 @@ function cloneThenApply(p) {
}
$(element).dropdown(options);
+ },
+ updated: function updated(element) {
+ // classes can be overwritten when elements bind to :class, nextTick + using
+ // updated avoids this problem (and doing in both mounted and updated avoids a temporary
+ // state where the classes aren't added)
+ Object(external_commonjs_vue_commonjs2_vue_root_Vue_["nextTick"])(function () {
+ $(element).addClass('matomo-dropdown-menu');
+ });
}
});
// CONCATENATED MODULE: ./plugins/CoreHome/vue/src/DropdownMenu/DropdownMenu.adapter.ts
diff --git a/plugins/CoreHome/vue/dist/CoreHome.umd.min.js b/plugins/CoreHome/vue/dist/CoreHome.umd.min.js
index 7b4e9b841f..2ee8996aef 100644
--- a/plugins/CoreHome/vue/dist/CoreHome.umd.min.js
+++ b/plugins/CoreHome/vue/dist/CoreHome.umd.min.js
@@ -4,7 +4,7 @@
*
* @link https://matomo.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
- */window.hasBlockedContent=!1},"8bbf":function(t,n){t.exports=e},fae3:function(e,t,n){"use strict";if(n.r(t),n.d(t,"createVueApp",(function(){return it})),n.d(t,"useExternalPluginComponent",(function(){return An})),n.d(t,"DirectiveUtilities",(function(){return It})),n.d(t,"debounce",(function(){return Bi})),n.d(t,"lazyInitSingleton",(function(){return yu})),n.d(t,"createAngularJsAdapter",(function(){return gt})),n.d(t,"transformAngularJsBoolAttr",(function(){return vt})),n.d(t,"transformAngularJsIntAttr",(function(){return bt})),n.d(t,"removeAngularJsSpecificProperties",(function(){return ht})),n.d(t,"clone",(function(){return yt})),n.d(t,"cloneThenApply",(function(){return wt})),n.d(t,"activityIndicatorAdapter",(function(){return wu})),n.d(t,"ActivityIndicator",(function(){return ro})),n.d(t,"translate",(function(){return C})),n.d(t,"Alert",(function(){return rt})),n.d(t,"AjaxHelper",(function(){return Je})),n.d(t,"setCookie",(function(){return Ou})),n.d(t,"getCookie",(function(){return ju})),n.d(t,"deleteCookie",(function(){return ku})),n.d(t,"MatomoUrl",(function(){return Ce})),n.d(t,"Matomo",(function(){return S})),n.d(t,"Periods",(function(){return p})),n.d(t,"Day",(function(){return G})),n.d(t,"Week",(function(){return X})),n.d(t,"Month",(function(){return re})),n.d(t,"Year",(function(){return ce})),n.d(t,"Range",(function(){return _})),n.d(t,"format",(function(){return E})),n.d(t,"getToday",(function(){return D})),n.d(t,"parseDate",(function(){return P})),n.d(t,"todayIsInRange",(function(){return V})),n.d(t,"Dropdown",(function(){return Ot})),n.d(t,"FocusAnywhereButHere",(function(){return Pt})),n.d(t,"FocusIf",(function(){return Tt})),n.d(t,"MatomoDialog",(function(){return gn})),n.d(t,"ExpandOnClick",(function(){return $t})),n.d(t,"ExpandOnHover",(function(){return zt})),n.d(t,"ShowSensitiveData",(function(){return Xt})),n.d(t,"DropdownButton",(function(){return nn})),n.d(t,"SelectOnFocus",(function(){return cn})),n.d(t,"SideNav",(function(){return dn})),n.d(t,"EnrichedHeadline",(function(){return Bn})),n.d(t,"ContentBlock",(function(){return Jn})),n.d(t,"Comparisons",(function(){return Pr})),n.d(t,"MenuDropdown",(function(){return Ur})),n.d(t,"DatePicker",(function(){return Qr})),n.d(t,"DateRangePicker",(function(){return ni})),n.d(t,"PeriodDatePicker",(function(){return li})),n.d(t,"Notification",(function(){return zo})),n.d(t,"NotificationGroup",(function(){return cl})),n.d(t,"NotificationsStore",(function(){return rl})),n.d(t,"SitesStore",(function(){return xi})),n.d(t,"SiteSelector",(function(){return Mi})),n.d(t,"QuickAccess",(function(){return ea})),n.d(t,"FieldArray",(function(){return fa})),n.d(t,"MultiPairField",(function(){return Ta})),n.d(t,"PeriodSelector",(function(){return bo})),n.d(t,"ReportingMenu",(function(){return $l})),n.d(t,"ReportingPagesStore",(function(){return fl})),n.d(t,"ReportMetadataStore",(function(){return Ql})),n.d(t,"WidgetsStore",(function(){return Fl})),n.d(t,"WidgetLoader",(function(){return rc})),n.d(t,"WidgetContainer",(function(){return vc})),n.d(t,"WidgetByDimensionContainer",(function(){return xc})),n.d(t,"Widget",(function(){return _c})),n.d(t,"ReportingPage",(function(){return us})),n.d(t,"ReportExport",(function(){return Hs})),n.d(t,"Sparkline",(function(){return Gs})),n.d(t,"Progressbar",(function(){return eu})),n.d(t,"ContentIntro",(function(){return tu})),n.d(t,"ContentTable",(function(){return ru})),n.d(t,"AjaxForm",(function(){return uu})),"undefined"!==typeof window){var r=window.document.currentScript,i=r&&r.src.match(/(.+\/)[^/]+\.js(\?.*)?$/);i&&(n.p=i[1])}n("2342");var a=n("8bbf");function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function l(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function c(e,t,n){return t&&l(e.prototype,t),n&&l(e,n),e}function s(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}
+ */window.hasBlockedContent=!1},"8bbf":function(t,n){t.exports=e},fae3:function(e,t,n){"use strict";if(n.r(t),n.d(t,"createVueApp",(function(){return it})),n.d(t,"useExternalPluginComponent",(function(){return An})),n.d(t,"DirectiveUtilities",(function(){return It})),n.d(t,"debounce",(function(){return Bi})),n.d(t,"lazyInitSingleton",(function(){return yu})),n.d(t,"createAngularJsAdapter",(function(){return gt})),n.d(t,"transformAngularJsBoolAttr",(function(){return vt})),n.d(t,"transformAngularJsIntAttr",(function(){return bt})),n.d(t,"removeAngularJsSpecificProperties",(function(){return ht})),n.d(t,"clone",(function(){return yt})),n.d(t,"cloneThenApply",(function(){return wt})),n.d(t,"activityIndicatorAdapter",(function(){return wu})),n.d(t,"ActivityIndicator",(function(){return ro})),n.d(t,"translate",(function(){return C})),n.d(t,"Alert",(function(){return rt})),n.d(t,"AjaxHelper",(function(){return Je})),n.d(t,"setCookie",(function(){return Ou})),n.d(t,"getCookie",(function(){return ju})),n.d(t,"deleteCookie",(function(){return ku})),n.d(t,"MatomoUrl",(function(){return Ce})),n.d(t,"Matomo",(function(){return S})),n.d(t,"Periods",(function(){return p})),n.d(t,"Day",(function(){return G})),n.d(t,"Week",(function(){return X})),n.d(t,"Month",(function(){return re})),n.d(t,"Year",(function(){return ce})),n.d(t,"Range",(function(){return _})),n.d(t,"format",(function(){return E})),n.d(t,"getToday",(function(){return D})),n.d(t,"parseDate",(function(){return P})),n.d(t,"todayIsInRange",(function(){return V})),n.d(t,"DropdownMenu",(function(){return Ot})),n.d(t,"FocusAnywhereButHere",(function(){return Pt})),n.d(t,"FocusIf",(function(){return Tt})),n.d(t,"MatomoDialog",(function(){return gn})),n.d(t,"ExpandOnClick",(function(){return $t})),n.d(t,"ExpandOnHover",(function(){return zt})),n.d(t,"ShowSensitiveData",(function(){return Xt})),n.d(t,"DropdownButton",(function(){return nn})),n.d(t,"SelectOnFocus",(function(){return cn})),n.d(t,"SideNav",(function(){return dn})),n.d(t,"EnrichedHeadline",(function(){return Bn})),n.d(t,"ContentBlock",(function(){return Jn})),n.d(t,"Comparisons",(function(){return Pr})),n.d(t,"MenuDropdown",(function(){return Ur})),n.d(t,"DatePicker",(function(){return Qr})),n.d(t,"DateRangePicker",(function(){return ni})),n.d(t,"PeriodDatePicker",(function(){return li})),n.d(t,"Notification",(function(){return zo})),n.d(t,"NotificationGroup",(function(){return cl})),n.d(t,"NotificationsStore",(function(){return rl})),n.d(t,"SitesStore",(function(){return xi})),n.d(t,"SiteSelector",(function(){return Mi})),n.d(t,"QuickAccess",(function(){return ea})),n.d(t,"FieldArray",(function(){return fa})),n.d(t,"MultiPairField",(function(){return Ta})),n.d(t,"PeriodSelector",(function(){return bo})),n.d(t,"ReportingMenu",(function(){return $l})),n.d(t,"ReportingPagesStore",(function(){return fl})),n.d(t,"ReportMetadataStore",(function(){return Ql})),n.d(t,"WidgetsStore",(function(){return Fl})),n.d(t,"WidgetLoader",(function(){return rc})),n.d(t,"WidgetContainer",(function(){return vc})),n.d(t,"WidgetByDimensionContainer",(function(){return xc})),n.d(t,"Widget",(function(){return _c})),n.d(t,"ReportingPage",(function(){return us})),n.d(t,"ReportExport",(function(){return Hs})),n.d(t,"Sparkline",(function(){return Gs})),n.d(t,"Progressbar",(function(){return eu})),n.d(t,"ContentIntro",(function(){return tu})),n.d(t,"ContentTable",(function(){return ru})),n.d(t,"AjaxForm",(function(){return uu})),"undefined"!==typeof window){var r=window.document.currentScript,i=r&&r.src.match(/(.+\/)[^/]+\.js(\?.*)?$/);i&&(n.p=i[1])}n("2342");var a=n("8bbf");function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function l(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function c(e,t,n){return t&&l(e.prototype,t),n&&l(e,n),e}function s(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}
/*!
* Matomo - free/libre analytics platform
*
@@ -99,7 +99,7 @@ function De(){return S}function Pe(e,t){t.$oldEmit=t.$emit,t.$emit=function(e){f
*
* @link https://matomo.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
- */function qe(e,t){if("abort"!==t)if("undefined"!==typeof Piwik_Popover){var n=$("#loadingError");Piwik_Popover.isOpen()&&e&&500===e.status?e&&500===e.status&&$(document.body).html(piwikHelper.escape(e.responseText)):n.show()}else console.log("Request failed: ".concat(e.responseText))}we.updatePeriodParamsFromUrl=Se.updatePeriodParamsFromUrl.bind(Se),window.angular.module("piwikApp.service").service("piwikUrl",Ee),window.angular.module("piwikApp.service").run(["$location",function(){return null}]),window.angular.module("piwikApp.service").service("piwik",De),Pe.$inject=["piwik","$rootScope"],window.angular.module("piwikApp.service").run(Pe),window.globalAjaxQueue=[],window.globalAjaxQueue.active=0,window.globalAjaxQueue.clean=function(){for(var e=this.length;e>=0;e-=1)this[e]&&4!==this[e].readyState||this.splice(e,1)},window.globalAjaxQueue.push=function(){for(var e,t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return this.active+=n.length,this.clean(),(e=Array.prototype.push).call.apply(e,[this].concat(n))},window.globalAjaxQueue.abort=function(){this.forEach((function(e){return e&&e.abort&&e.abort()})),this.splice(0,this.length),this.active=0};var We=function(e){Ie(n,e);var t=Be(n);function n(){return xe(this,n),t.apply(this,arguments)}return n}(Fe(Error)),Je=function(){function e(){xe(this,e),Ae(this,"format","json"),Ae(this,"timeout",null),Ae(this,"callback",null),Ae(this,"useRegularCallbackInCaseOfError",!1),Ae(this,"errorCallback",void 0),Ae(this,"withToken",!1),Ae(this,"completeCallback",void 0),Ae(this,"getParams",{}),Ae(this,"getUrl","?"),Ae(this,"postParams",{}),Ae(this,"loadingElement",null),Ae(this,"errorElement","#ajaxError"),Ae(this,"headers",void 0),Ae(this,"requestHandle",null),Ae(this,"abortController",null),Ae(this,"defaultParams",["idSite","period","date","segment"]),this.errorCallback=qe}return Te(e,[{key:"addParams",value:function(e,t){var n=this,r="string"===typeof e?window.broadcast.getValuesFromUrl(e):e,i=["compareSegments","comparePeriods","compareDates"];Object.keys(r).forEach((function(e){var a=r[e];(-1===i.indexOf(e)||a)&&("get"===t.toLowerCase()?n.getParams[e]=a:"post"===t.toLowerCase()&&(n.postParams[e]=a))}))}},{key:"withTokenInUrl",value:function(){this.withToken=!0}},{key:"setUrl",value:function(e){this.addParams(broadcast.getValuesFromUrl(e),"GET")}},{key:"setBulkRequests",value:function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];var r=t.map((function(e){return"string"===typeof e?e:$.param(e)}));this.addParams({module:"API",method:"API.getBulkRequest",urls:r,format:"json"},"post")}},{key:"setTimeout",value:function(e){this.timeout=e}},{key:"setCallback",value:function(e){this.callback=e}},{key:"useCallbackInCaseOfError",value:function(){this.useRegularCallbackInCaseOfError=!0}},{key:"redirectOnSuccess",value:function(e){this.setCallback((function(){piwikHelper.redirect(e)}))}},{key:"setErrorCallback",value:function(e){this.errorCallback=e}},{key:"setCompleteCallback",value:function(e){this.completeCallback=e}},{key:"setFormat",value:function(e){this.format=e}},{key:"setLoadingElement",value:function(e){this.loadingElement=e||"#ajaxLoadingDiv"}},{key:"setErrorElement",value:function(e){e&&(this.errorElement=e)}},{key:"useGETDefaultParameter",value:function(e){if(e&&this.defaultParams)for(var t=0;t<this.defaultParams.length;t+=1)if(this.defaultParams[t]===e)return!0;return!1}},{key:"removeDefaultParameter",value:function(e){if(e&&this.defaultParams)for(var t=0;t<this.defaultParams.length;t+=1)this.defaultParams[t]===e&&this.defaultParams.splice(t,1)}},{key:"send",value:function(){var e=this;$(this.errorElement).length&&$(this.errorElement).hide(),this.loadingElement&&$(this.loadingElement).fadeIn(),this.requestHandle=this.buildAjaxCall(),window.globalAjaxQueue.push(this.requestHandle);var t=null;try{t=S.helper.getAngularDependency("$timeout")}catch(r){}this.abortController&&this.abortController.signal.addEventListener("abort",(function(){e.requestHandle&&e.requestHandle.abort()}));var n=new Promise((function(n,r){e.requestHandle.then((function(e){n(e)})).fail((function(t){"abort"!==t.statusText&&(console.log("Warning: the ".concat($.param(e.getParams)," request failed!")),r(t))})).done((function(){t&&t()}))}));return n}},{key:"abort",value:function(){this.requestHandle&&"function"===typeof this.requestHandle.abort&&(this.requestHandle.abort(),this.requestHandle=null)}},{key:"buildAjaxCall",value:function(){var e=this,t=this,n=this.mixinDefaultGetParams(this.getParams),r=this.getUrl;"?"!==r[r.length-1]&&(r+="&"),n.segment&&(r="".concat(r,"segment=").concat(n.segment,"&"),delete n.segment),n.date&&(r="".concat(r,"date=").concat(decodeURIComponent(n.date.toString()),"&"),delete n.date),r+=$.param(n);var i={type:"POST",async:!0,url:r,dataType:this.format||"json",complete:this.completeCallback,headers:this.headers?this.headers:void 0,error:function(){if(window.globalAjaxQueue.active-=1,t.errorCallback){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];t.errorCallback.apply(this,n)}},success:function(t,n,r){if(e.loadingElement&&$(e.loadingElement).hide(),t&&"error"===t.result&&!e.useRegularCallbackInCaseOfError){var i=null,a="toast";$(e.errorElement).length&&t.message&&($(e.errorElement).show(),i=e.errorElement,a=null);var o=!document.querySelector("#login_form");if(t.message&&o){var l=window["require"]("piwik/UI"),c=new l.Notification;c.show(t.message,{placeat:i,context:"error",type:a,id:"ajaxHelper"}),c.scrollToNotification()}}else e.callback&&e.callback(t,n,r);window.globalAjaxQueue.active-=1,S.ajaxRequestFinished&&S.ajaxRequestFinished()},data:this.mixinDefaultPostParams(this.postParams),timeout:null!==this.timeout?this.timeout:void 0};return $.ajax(i)}},{key:"isRequestToApiMethod",value:function(){return this.getParams&&"API"===this.getParams.module&&this.getParams.method||this.postParams&&"API"===this.postParams.module&&this.postParams.method}},{key:"isWidgetizedRequest",value:function(){return"Widgetize"===broadcast.getValueFromUrl("module")}},{key:"getDefaultPostParams",value:function(){return this.withToken||this.isRequestToApiMethod()||S.shouldPropagateTokenAuth?{token_auth:S.token_auth,force_api_session:broadcast.isWidgetizeRequestWithoutSession()?0:1}:{}}},{key:"mixinDefaultPostParams",value:function(e){var t=this.getDefaultPostParams(),n=Object.assign(Object.assign({},t),e);return n}},{key:"mixinDefaultGetParams",value:function(e){var t=this,n=Ce.getSearchParam("segment"),r={idSite:S.idSite?S.idSite.toString():broadcast.getValueFromUrl("idSite"),period:S.period||broadcast.getValueFromUrl("period"),segment:n},i=e;return i.token_auth&&(i.token_auth=null,delete i.token_auth),Object.keys(r).forEach((function(e){t.useGETDefaultParameter(e)&&!i[e]&&!t.postParams[e]&&r[e]&&(i[e]=r[e])})),!this.useGETDefaultParameter("date")||i.date||this.postParams.date||(i.date=S.currentDateString),i}}],[{key:"fetch",value:function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=new e;return n.withTokenInUrl&&r.withTokenInUrl(),r.setFormat(n.format||"json"),r.addParams(Object.assign({module:"API",format:n.format||"json"},t),"get"),n.postParams&&r.addParams(n.postParams,"post"),n.headers&&(r.headers=n.headers),"undefined"===typeof n.createErrorNotification||n.createErrorNotification||r.useCallbackInCaseOfError(),n.abortController&&(r.abortController=n.abortController),r.send().then((function(e){if("error"===e.result)throw new We(e.message);return e}))}},{key:"post",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.fetch(e,Object.assign(Object.assign({},n),{},{postParams:t}))}}]),e}();function Ge(){return window.globalAjaxQueue}function ze(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Ye(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function Qe(e,t,n){return t&&Ye(e.prototype,t),n&&Ye(e,n),e}
+ */function qe(e,t){if("abort"!==t)if("undefined"!==typeof Piwik_Popover){var n=$("#loadingError");Piwik_Popover.isOpen()&&e&&500===e.status?e&&500===e.status&&$(document.body).html(piwikHelper.escape(e.responseText)):n.show()}else console.log("Request failed: ".concat(e.responseText))}we.updatePeriodParamsFromUrl=Se.updatePeriodParamsFromUrl.bind(Se),window.angular.module("piwikApp.service").service("piwikUrl",Ee),window.angular.module("piwikApp.service").run(["$location",function(){return null}]),window.angular.module("piwikApp.service").service("piwik",De),Pe.$inject=["piwik","$rootScope"],window.angular.module("piwikApp.service").run(Pe),window.globalAjaxQueue=[],window.globalAjaxQueue.active=0,window.globalAjaxQueue.clean=function(){for(var e=this.length;e>=0;e-=1)this[e]&&4!==this[e].readyState||this.splice(e,1)},window.globalAjaxQueue.push=function(){for(var e,t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return this.active+=n.length,this.clean(),(e=Array.prototype.push).call.apply(e,[this].concat(n))},window.globalAjaxQueue.abort=function(){this.forEach((function(e){return e&&e.abort&&e.abort()})),this.splice(0,this.length),this.active=0};var We=function(e){Ie(n,e);var t=Be(n);function n(){return xe(this,n),t.apply(this,arguments)}return n}(Fe(Error)),Je=function(){function e(){xe(this,e),Ae(this,"format","json"),Ae(this,"timeout",null),Ae(this,"callback",null),Ae(this,"useRegularCallbackInCaseOfError",!1),Ae(this,"errorCallback",void 0),Ae(this,"withToken",!1),Ae(this,"completeCallback",void 0),Ae(this,"getParams",{}),Ae(this,"getUrl","?"),Ae(this,"postParams",{}),Ae(this,"loadingElement",null),Ae(this,"errorElement","#ajaxError"),Ae(this,"headers",void 0),Ae(this,"requestHandle",null),Ae(this,"abortController",null),Ae(this,"defaultParams",["idSite","period","date","segment"]),Ae(this,"resolveWithHelper",!1),this.errorCallback=qe}return Te(e,[{key:"addParams",value:function(e,t){var n=this,r="string"===typeof e?window.broadcast.getValuesFromUrl(e):e,i=["compareSegments","comparePeriods","compareDates"];Object.keys(r).forEach((function(e){var a=r[e];(-1===i.indexOf(e)||a)&&("get"===t.toLowerCase()?n.getParams[e]=a:"post"===t.toLowerCase()&&(n.postParams[e]=a))}))}},{key:"withTokenInUrl",value:function(){this.withToken=!0}},{key:"setUrl",value:function(e){this.addParams(broadcast.getValuesFromUrl(e),"GET")}},{key:"setBulkRequests",value:function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];var r=t.map((function(e){return"string"===typeof e?e:$.param(e)}));this.addParams({module:"API",method:"API.getBulkRequest",urls:r,format:"json"},"post")}},{key:"setTimeout",value:function(e){this.timeout=e}},{key:"setCallback",value:function(e){this.callback=e}},{key:"useCallbackInCaseOfError",value:function(){this.useRegularCallbackInCaseOfError=!0}},{key:"redirectOnSuccess",value:function(e){this.setCallback((function(){piwikHelper.redirect(e)}))}},{key:"setErrorCallback",value:function(e){this.errorCallback=e}},{key:"setCompleteCallback",value:function(e){this.completeCallback=e}},{key:"setFormat",value:function(e){this.format=e}},{key:"setLoadingElement",value:function(e){this.loadingElement=e||"#ajaxLoadingDiv"}},{key:"setErrorElement",value:function(e){e&&(this.errorElement=e)}},{key:"useGETDefaultParameter",value:function(e){if(e&&this.defaultParams)for(var t=0;t<this.defaultParams.length;t+=1)if(this.defaultParams[t]===e)return!0;return!1}},{key:"removeDefaultParameter",value:function(e){if(e&&this.defaultParams)for(var t=0;t<this.defaultParams.length;t+=1)this.defaultParams[t]===e&&this.defaultParams.splice(t,1)}},{key:"send",value:function(){var e=this;$(this.errorElement).length&&$(this.errorElement).hide(),this.loadingElement&&$(this.loadingElement).fadeIn(),this.requestHandle=this.buildAjaxCall(),window.globalAjaxQueue.push(this.requestHandle);var t=null;try{t=S.helper.getAngularDependency("$timeout")}catch(r){}this.abortController&&this.abortController.signal.addEventListener("abort",(function(){e.requestHandle&&e.requestHandle.abort()}));var n=new Promise((function(n,r){e.requestHandle.then((function(t){e.resolveWithHelper?n(e):n(t)})).fail((function(t){"abort"!==t.statusText&&(console.log("Warning: the ".concat($.param(e.getParams)," request failed!")),r(t))})).done((function(){t&&t()}))}));return n}},{key:"abort",value:function(){this.requestHandle&&"function"===typeof this.requestHandle.abort&&(this.requestHandle.abort(),this.requestHandle=null)}},{key:"buildAjaxCall",value:function(){var e=this,t=this,n=this.mixinDefaultGetParams(this.getParams),r=this.getUrl;"?"!==r[r.length-1]&&(r+="&"),n.segment&&(r="".concat(r,"segment=").concat(n.segment,"&"),delete n.segment),n.date&&(r="".concat(r,"date=").concat(decodeURIComponent(n.date.toString()),"&"),delete n.date),r+=$.param(n);var i={type:"POST",async:!0,url:r,dataType:this.format||"json",complete:this.completeCallback,headers:this.headers?this.headers:void 0,error:function(){if(window.globalAjaxQueue.active-=1,t.errorCallback){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];t.errorCallback.apply(this,n)}},success:function(t,n,r){if(e.loadingElement&&$(e.loadingElement).hide(),t&&"error"===t.result&&!e.useRegularCallbackInCaseOfError){var i=null,a="toast";$(e.errorElement).length&&t.message&&($(e.errorElement).show(),i=e.errorElement,a=null);var o=!document.querySelector("#login_form");if(t.message&&o){var l=window["require"]("piwik/UI"),c=new l.Notification;c.show(t.message,{placeat:i,context:"error",type:a,id:"ajaxHelper"}),c.scrollToNotification()}}else e.callback&&e.callback(t,n,r);window.globalAjaxQueue.active-=1,S.ajaxRequestFinished&&S.ajaxRequestFinished()},data:this.mixinDefaultPostParams(this.postParams),timeout:null!==this.timeout?this.timeout:void 0};return $.ajax(i)}},{key:"isRequestToApiMethod",value:function(){return this.getParams&&"API"===this.getParams.module&&this.getParams.method||this.postParams&&"API"===this.postParams.module&&this.postParams.method}},{key:"isWidgetizedRequest",value:function(){return"Widgetize"===broadcast.getValueFromUrl("module")}},{key:"getDefaultPostParams",value:function(){return this.withToken||this.isRequestToApiMethod()||S.shouldPropagateTokenAuth?{token_auth:S.token_auth,force_api_session:broadcast.isWidgetizeRequestWithoutSession()?0:1}:{}}},{key:"mixinDefaultPostParams",value:function(e){var t=this.getDefaultPostParams(),n=Object.assign(Object.assign({},t),e);return n}},{key:"mixinDefaultGetParams",value:function(e){var t=this,n=Ce.getSearchParam("segment"),r={idSite:S.idSite?S.idSite.toString():broadcast.getValueFromUrl("idSite"),period:S.period||broadcast.getValueFromUrl("period"),segment:n},i=e;return i.token_auth&&(i.token_auth=null,delete i.token_auth),Object.keys(r).forEach((function(e){t.useGETDefaultParameter(e)&&!i[e]&&!t.postParams[e]&&r[e]&&(i[e]=r[e])})),!this.useGETDefaultParameter("date")||i.date||this.postParams.date||(i.date=S.currentDateString),i}},{key:"getRequestHandle",value:function(){return this.requestHandle}}],[{key:"fetch",value:function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=new e;return n.withTokenInUrl&&r.withTokenInUrl(),r.setFormat(n.format||"json"),r.addParams(Object.assign({module:"API",format:n.format||"json"},t),"get"),n.postParams&&r.addParams(n.postParams,"post"),n.headers&&(r.headers=n.headers),"undefined"===typeof n.createErrorNotification||n.createErrorNotification||r.useCallbackInCaseOfError(),n.abortController&&(r.abortController=n.abortController),n.returnResponseObject&&(r.resolveWithHelper=!0),r.send().then((function(t){var n=t instanceof e?t.requestHandle.responseJSON:t;if("error"===n.result)throw new We(n.message);return t}))}},{key:"post",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.fetch(e,Object.assign(Object.assign({},n),{},{postParams:t}))}}]),e}();function Ge(){return window.globalAjaxQueue}function ze(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Ye(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function Qe(e,t,n){return t&&Ye(e.prototype,t),n&&Ye(e,n),e}
/*!
* Matomo - free/libre analytics platform
*
@@ -129,7 +129,7 @@ function De(){return S}function Pe(e,t){t.$oldEmit=t.$emit,t.$emit=function(e){f
*
* @link https://matomo.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
- */var Ot={mounted:function(e,t){var n={};$(e).addClass("matomo-dropdown-menu");var r,i=!!$(e).parent().closest(".dropdown-content").length;i&&(n={hover:!0},$(e).addClass("submenu"),$((null===(r=t.value)||void 0===r?void 0:r.activates)||$(e).data("target")).addClass("submenu-dropdown-content"),$(e).parents(".dropdown-content").addClass("submenu-container"));$(e).dropdown(n)}};
+ */var Ot={mounted:function(e,t){var n={};$(e).addClass("matomo-dropdown-menu");var r,i=!!$(e).parent().closest(".dropdown-content").length;i&&(n={hover:!0},$(e).addClass("submenu"),$((null===(r=t.value)||void 0===r?void 0:r.activates)||$(e).data("target")).addClass("submenu-dropdown-content"),$(e).parents(".dropdown-content").addClass("submenu-container"));$(e).dropdown(n)},updated:function(e){Object(a["nextTick"])((function(){$(e).addClass("matomo-dropdown-menu")}))}};
/*!
* Matomo - free/libre analytics platform
*
diff --git a/plugins/CoreHome/vue/src/AjaxHelper/AjaxHelper.ts b/plugins/CoreHome/vue/src/AjaxHelper/AjaxHelper.ts
index 09ec644d81..fee659fc9b 100644
--- a/plugins/CoreHome/vue/src/AjaxHelper/AjaxHelper.ts
+++ b/plugins/CoreHome/vue/src/AjaxHelper/AjaxHelper.ts
@@ -19,6 +19,7 @@ interface AjaxOptions {
format?: string;
createErrorNotification?: boolean;
abortController?: AbortController;
+ returnResponseObject?: boolean;
}
interface ErrorResponse {
@@ -173,6 +174,8 @@ export default class AjaxHelper<T = any> { // eslint-disable-line
defaultParams = ['idSite', 'period', 'date', 'segment'];
+ resolveWithHelper = false;
+
// helper method entry point
static fetch<R = any>( // eslint-disable-line
params: QueryParameters,
@@ -205,13 +208,19 @@ export default class AjaxHelper<T = any> { // eslint-disable-line
helper.abortController = options.abortController;
}
- return helper.send().then((data: R | ErrorResponse) => {
+ if (options.returnResponseObject) {
+ helper.resolveWithHelper = true;
+ }
+
+ return helper.send().then((result: R | ErrorResponse | AjaxHelper) => {
+ const data = result instanceof AjaxHelper ? result.requestHandle!.responseJSON : result;
+
// check for error if not using default notification behavior
if ((data as ErrorResponse).result === 'error') {
throw new ApiResponseError((data as ErrorResponse).message);
}
- return data as R;
+ return result as R;
});
}
@@ -434,7 +443,13 @@ export default class AjaxHelper<T = any> { // eslint-disable-line
const result = new Promise<T | ErrorResponse>((resolve, reject) => {
this.requestHandle!.then((data: unknown) => {
- resolve(data as (T | ErrorResponse)); // ignoring textStatus/jqXHR
+ if (this.resolveWithHelper) {
+ // NOTE: we can't resolve w/ the jquery xhr, because it's a promise, and will
+ // just result in following the promise chain back to 'data'
+ resolve(this as unknown as (T | ErrorResponse)); // casting hack here
+ } else {
+ resolve(data as (T | ErrorResponse)); // ignoring textStatus/jqXHR
+ }
}).fail((xhr: jqXHR) => {
if (xhr.statusText !== 'abort') {
console.log(`Warning: the ${$.param(this.getParams)} request failed!`);
@@ -617,4 +632,8 @@ export default class AjaxHelper<T = any> { // eslint-disable-line
return params;
}
+
+ getRequestHandle(): jqXHR|null {
+ return this.requestHandle;
+ }
}
diff --git a/plugins/CoreHome/vue/src/DropdownMenu/DropdownMenu.ts b/plugins/CoreHome/vue/src/DropdownMenu/DropdownMenu.ts
index 035c4614c6..177ce4c357 100644
--- a/plugins/CoreHome/vue/src/DropdownMenu/DropdownMenu.ts
+++ b/plugins/CoreHome/vue/src/DropdownMenu/DropdownMenu.ts
@@ -5,10 +5,10 @@
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
-import { DirectiveBinding } from 'vue';
+import { DirectiveBinding, nextTick } from 'vue';
interface DropdownArgs {
- activates: HTMLElement,
+ activates: HTMLElement|string,
}
/**
@@ -51,4 +51,12 @@ export default {
$(element).dropdown(options);
},
+ updated(element: HTMLElement): void {
+ // classes can be overwritten when elements bind to :class, nextTick + using
+ // updated avoids this problem (and doing in both mounted and updated avoids a temporary
+ // state where the classes aren't added)
+ nextTick(() => {
+ $(element).addClass('matomo-dropdown-menu');
+ });
+ },
};
diff --git a/plugins/CoreHome/vue/src/index.ts b/plugins/CoreHome/vue/src/index.ts
index 7684f6ff2b..1cf58e4d72 100644
--- a/plugins/CoreHome/vue/src/index.ts
+++ b/plugins/CoreHome/vue/src/index.ts
@@ -78,7 +78,7 @@ export { setCookie, getCookie, deleteCookie } from './CookieHelper/CookieHelper'
export { default as MatomoUrl } from './MatomoUrl/MatomoUrl';
export { default as Matomo } from './Matomo/Matomo';
export * from './Periods';
-export { default as Dropdown } from './DropdownMenu/DropdownMenu';
+export { default as DropdownMenu } from './DropdownMenu/DropdownMenu';
export { default as FocusAnywhereButHere } from './FocusAnywhereButHere/FocusAnywhereButHere';
export { default as FocusIf } from './FocusIf/FocusIf';
export { default as MatomoDialog } from './MatomoDialog/MatomoDialog.vue';
diff --git a/plugins/Morpheus/javascripts/piwikHelper.js b/plugins/Morpheus/javascripts/piwikHelper.js
index 548a5a2fb2..e14d6c1985 100644
--- a/plugins/Morpheus/javascripts/piwikHelper.js
+++ b/plugins/Morpheus/javascripts/piwikHelper.js
@@ -109,6 +109,9 @@ window.piwikHelper = {
return value;
},
+ /**
+ * @deprecated use window.vueSanitize instead
+ */
escape: function (value)
{
var escape = angular.element(document).injector().get('$sanitize');
diff --git a/plugins/UsersManager/UsersManager.php b/plugins/UsersManager/UsersManager.php
index d45083b1f2..b47b20f592 100644
--- a/plugins/UsersManager/UsersManager.php
+++ b/plugins/UsersManager/UsersManager.php
@@ -131,7 +131,6 @@ class UsersManager extends \Piwik\Plugin
$jsFiles[] = "plugins/UsersManager/angularjs/users-manager/users-manager.component.js";
$jsFiles[] = "plugins/UsersManager/angularjs/paged-users-list/paged-users-list.component.js";
$jsFiles[] = "plugins/UsersManager/angularjs/user-edit-form/user-edit-form.component.js";
- $jsFiles[] = "plugins/UsersManager/angularjs/user-permissions-edit/user-permissions-edit.component.js";
$jsFiles[] = "plugins/UsersManager/angularjs/personal-settings/personal-settings.controller.js";
$jsFiles[] = "plugins/UsersManager/angularjs/personal-settings/anonymous-settings.controller.js";
}
@@ -146,7 +145,7 @@ class UsersManager extends \Piwik\Plugin
$stylesheets[] = "plugins/UsersManager/angularjs/users-manager/users-manager.component.less";
$stylesheets[] = "plugins/UsersManager/angularjs/paged-users-list/paged-users-list.component.less";
$stylesheets[] = "plugins/UsersManager/angularjs/user-edit-form/user-edit-form.component.less";
- $stylesheets[] = "plugins/UsersManager/angularjs/user-permissions-edit/user-permissions-edit.component.less";
+ $stylesheets[] = "plugins/UsersManager/vue/src/UserPermissionsEdit/UserPermissionsEdit.less";
$stylesheets[] = "plugins/UsersManager/vue/src/CapabilitiesEdit/CapabilitiesEdit.less";
}
diff --git a/plugins/UsersManager/angularjs/user-permissions-edit/user-permissions-edit.component.html b/plugins/UsersManager/angularjs/user-permissions-edit/user-permissions-edit.component.html
deleted file mode 100644
index 10cba274a5..0000000000
--- a/plugins/UsersManager/angularjs/user-permissions-edit/user-permissions-edit.component.html
+++ /dev/null
@@ -1,222 +0,0 @@
-<div class="userPermissionsEdit" ng-class="{ loading: $ctrl.isLoadingAccess }">
- <div class="row" ng-if="!$ctrl.hasAccessToAtLeastOneSite">
- <div piwik-notification context="warning" type="transient" noclear="true">
- <strong>{{:: 'General_Warning'|translate }}:</strong>
-
- {{:: 'UsersManager_NoAccessWarning'|translate }}
- </div>
- </div>
- <div class="row to-all-websites">
- <div class="col s12">
- <div>
- <span>{{ 'UsersManager_GiveAccessToAll'|translate }}:</span>
-
- <div
- id="all-sites-access-select"
- piwik-field
- uicontrol="select"
- ng-model="$ctrl.allWebsitesAccssLevelSet"
- options="$ctrl.accessLevels"
- full-width="true"
- ></div>
-
- <a href="" class="btn" ng-class="{ disabled: $ctrl.isGivingAccessToAllSites }" ng-click="$ctrl.showChangeAccessAllSitesModal()">
- {{:: 'General_Apply'|translate }}
- </a>
- </div>
- <p>&nbsp;</p>
- <p>{{ 'UsersManager_OrManageIndividually'|translate }}:</p>
- </div>
- </div>
- <div class="filters row">
- <div class="col s12 m12 l8">
- <div class="input-field bulk-actions">
- <a
- class='dropdown-trigger btn'
- href=''
- data-target='user-permissions-edit-bulk-actions'
- piwik-dropdown-menu
- ng-class="{ disabled: $ctrl.isBulkActionsDisabled }"
- >
- {{:: 'UsersManager_BulkActions'|translate }}
- </a>
- <ul id='user-permissions-edit-bulk-actions' class='dropdown-content'>
- <li>
- <a class='dropdown-trigger' data-target="user-permissions-bulk-set-access" piwik-dropdown-menu>{{:: 'UsersManager_SetPermission'|translate }}</a>
- <ul id="user-permissions-bulk-set-access" class="dropdown-content">
- <li ng-repeat="access in $ctrl.accessLevels">
- <a href="" ng-click="$ctrl.siteAccessToChange = null; $ctrl.roleToChangeTo = access.key; $ctrl.showChangeAccessConfirm();">{{ access.value }}</a>
- </li>
- </ul>
- </li>
- <li>
- <a href="" ng-click="$ctrl.siteAccessToChange = null; $ctrl.roleToChangeTo = 'noaccess'; $ctrl.showRemoveAccessConfirm();">{{:: 'UsersManager_RemovePermissions'|translate }}</a>
- </li>
- </ul>
- </div>
-
- <div class="input-field site-filter">
- <input
- type="text"
- placeholder="{{:: 'UsersManager_FilterByWebsite'|translate }}"
- ng-model="$ctrl.siteNameFilter"
- ng-model-options="{debounce: 300}"
- ng-change="$ctrl.offset = 0; $ctrl.fetchAccess()"
- />
- </div>
-
- <div class="input-field access-filter">
- <div
- piwik-field
- uicontrol="select"
- ng-model="$ctrl.accessLevelFilter"
- options="$ctrl.filterAccessLevels"
- full-width="true"
- ng-change="$ctrl.offset = 0; $ctrl.fetchAccess()"
- placeholder="{{ 'UsersManager_FilterByAccess'|translate }}"
- ></div>
- </div>
- </div>
-
- <div class="col s12 m12 l4 sites-for-permission-pagination-container" ng-if="$ctrl.totalEntries > $ctrl.limit">
- <div class="sites-for-permission-pagination">
- <a class="prev" ng-class="{ disabled: $ctrl.offset <= 0 }">
- <span class="pointer" ng-click="$ctrl.gotoPreviousPage()">« {{:: 'General_Previous'|translate }}</span>
- </a>
-
- <span class="counter">
- <span>
- {{ 'General_Pagination'|translate:$ctrl.getPaginationLowerBound():$ctrl.getPaginationUpperBound():$ctrl.totalEntries }}
- </span>
- </span>
-
- <a class="next" ng-class="{ disabled: $ctrl.offset + $ctrl.limit >= $ctrl.totalEntries }">
- <span class="pointer" ng-click="$ctrl.gotoNextPage()">{{:: 'General_Next'|translate }} »</span>
- </a>
- </div>
- </div>
- </div>
-
- <div piwik-notification context="info" type="persistent" noclear="true" ng-if="$ctrl.isRoleHelpToggled" class="roles-help-notification">
- <span piwik-translate="UsersManager_RolesHelp">
- <a href='https://matomo.org/faq/general/faq_70/' target='_blank' rel='noreferrer noopener'>::</a>::<a href='https://matomo.org/faq/general/faq_69/' target='_blank' rel='noreferrer noopener'>::</a>
- </span>
- </div>
-
- <div piwik-notification context="info" type="persistent" noclear="true" ng-if="$ctrl.isCapabilitiesHelpToggled" class="capabilities-help-notification">
- <span piwik-translate="UsersManager_CapabilitiesHelp">
- TODO
- </span>
- </div>
-
- <table piwik-content-table id="sitesForPermission">
- <thead>
- <tr>
- <th class="select-cell">
- <span class="checkbox-container">
- <label>
- <input type="checkbox" id="perm_edit_select_all" ng-model="$ctrl.isAllCheckboxSelected" ng-change="$ctrl.onAllCheckboxChange()" />
- <span></span>
- </label>
- </span>
- </th>
- <th>{{:: 'General_Name'|translate }}</th>
- <th class="role_header">
- <span>{{:: 'UsersManager_Role'|translate }}</span>
- <a href="" class="helpIcon" ng-click="$ctrl.isRoleHelpToggled = !$ctrl.isRoleHelpToggled" ng-class="{ sticky: $ctrl.isRoleHelpToggled }">
- <span class="icon-help"></span>
- </a>
- </th>
- <th class="capabilities_header">
- <span>{{:: 'UsersManager_Capabilities'|translate }}</span>
- <a href="" class="helpIcon" ng-click="$ctrl.isCapabilitiesHelpToggled = !$ctrl.isCapabilitiesHelpToggled" ng-class="{ sticky: $ctrl.isCapabilitiesHelpToggled }">
- <span class="icon-help"></span>
- </a>
- </th>
- </tr>
- </thead>
- <tbody>
- <tr class="select-all-row" ng-if="$ctrl.isAllCheckboxSelected && $ctrl.siteAccess.length < $ctrl.totalEntries">
- <td colspan="4">
- <div ng-if="!$ctrl.areAllResultsSelected">
- <span piwik-translate="UsersManager_TheDisplayedWebsitesAreSelected"><strong>{{ $ctrl.siteAccess.length }}</strong></span>
- <a href="#" ng-click="$ctrl.areAllResultsSelected = !$ctrl.areAllResultsSelected" piwik-translate="UsersManager_ClickToSelectAll"><strong>{{ $ctrl.totalEntries }}</strong></a>
- </div>
-
- <div ng-if="$ctrl.areAllResultsSelected">
- <span piwik-translate="UsersManager_AllWebsitesAreSelected"><strong>{{ $ctrl.totalEntries }}</strong></span>
- <a href="#" ng-click="$ctrl.areAllResultsSelected = !$ctrl.areAllResultsSelected" piwik-translate="UsersManager_ClickToSelectDisplayedWebsites"><strong>{{ $ctrl.siteAccess.length }}</strong></a>
- </div>
- </td>
- </tr>
- <tr ng-repeat="entry in $ctrl.siteAccess">
- <td class="select-cell">
- <span class="checkbox-container">
- <label>
- <input type="checkbox" ng-attr-id="perm_edit_select_row{{ $index }}" ng-model="$ctrl.selectedRows[$index]" ng-click="$ctrl.onRowSelected()" />
- <span></span>
- </label>
- </span>
- </td>
- <td>
- <span>{{ entry.site_name }}</span>
- </td>
- <td>
- <div
- piwik-field
- uicontrol="select"
- ng-model="entry.role"
- options="$ctrl.accessLevels"
- ng-change="$ctrl.previousRole = '{{ entry.role }}'; $ctrl.roleToChangeTo = entry.role; $ctrl.siteAccessToChange = entry; $ctrl.showChangeAccessConfirm();"
- full-width="true"
- class="role-select"
- ></div>
- </td>
- <td>
- <piwik-capabilities-edit
- idsite="entry.idsite"
- site-name="entry.site_name"
- user-login="$ctrl.userLogin"
- user-role="entry.role"
- capabilities="entry.capabilities"
- on-capabilities-change="$ctrl.fetchAccess()"
- >
- </piwik-capabilities-edit>
- </td>
- </tr>
- </tbody>
- </table>
-
- <div class="delete-access-confirm-modal modal">
- <div class="modal-content">
- <h3 ng-if="$ctrl.siteAccessToChange" piwik-translate="UsersManager_DeletePermConfirmSingle"><strong>{{ $ctrl.userLogin }}</strong>::<strong>{{ $ctrl.siteAccessToChange.site_name }}</strong></h3>
- <p ng-if="!$ctrl.siteAccessToChange" piwik-translate="UsersManager_DeletePermConfirmMultiple"><strong>{{ $ctrl.userLogin }}</strong>::<strong>{{ $ctrl.getAffectedSitesCount() }}</strong></p>
- </div>
- <div class="modal-footer">
- <a href="" class="modal-action modal-close btn" ng-click="$ctrl.changeUserRole()">{{:: 'General_Yes'|translate }}</a>
- <a href="" class="modal-action modal-close modal-no" ng-click="$ctrl.siteAccessToChange = null; $ctrl.roleToChangeTo = null;">{{:: 'General_No'|translate }}</a>
- </div>
- </div>
-
- <div class="change-access-confirm-modal modal">
- <div class="modal-content">
- <h3 ng-if="$ctrl.siteAccessToChange" piwik-translate="UsersManager_ChangePermToSiteConfirmSingle"><strong>{{ $ctrl.userLogin }}</strong>::<strong>{{ $ctrl.siteAccessToChange.site_name }}</strong>::<strong>{{ $ctrl.getRoleDisplay($ctrl.roleToChangeTo) }}</strong></h3>
- <p ng-if="!$ctrl.siteAccessToChange" piwik-translate="UsersManager_ChangePermToSiteConfirmMultiple"><strong>{{ $ctrl.userLogin }}</strong>::<strong>{{ $ctrl.getAffectedSitesCount() }}</strong>::<strong>{{ $ctrl.getRoleDisplay($ctrl.roleToChangeTo) }}</strong></p>
- </div>
- <div class="modal-footer">
- <a href="" class="modal-action modal-close btn" ng-click="$ctrl.changeUserRole()">{{:: 'General_Yes'|translate }}</a>
- <a href="" class="modal-action modal-close modal-no" ng-click="$ctrl.siteAccessToChange.role = $ctrl.previousRole; $ctrl.siteAccessToChange = null; $ctrl.roleToChangeTo = null;">{{:: 'General_No'|translate }}</a>
- </div>
- </div>
-
- <div class="confirm-give-access-all-sites modal">
- <div class="modal-content">
- <h3 piwik-translate="UsersManager_ChangePermToAllSitesConfirm"><strong>{{ $ctrl.userLogin }}</strong>::<strong>{{ $ctrl.getRoleDisplay($ctrl.allWebsitesAccssLevelSet) }}</strong></h3>
- <p>{{ 'UsersManager_ChangePermToAllSitesConfirm2'|translate }}</p>
- </div>
- <div class="modal-footer">
- <a href="" class="modal-action modal-close btn" ng-click="$ctrl.giveAccessToAllSites()">{{:: 'General_Yes'|translate }}</a>
- <a href="" class="modal-action modal-close modal-no">{{:: 'General_No'|translate }}</a>
- </div>
- </div>
-</div>
diff --git a/plugins/UsersManager/angularjs/user-permissions-edit/user-permissions-edit.component.js b/plugins/UsersManager/angularjs/user-permissions-edit/user-permissions-edit.component.js
deleted file mode 100644
index 7b86f6aef3..0000000000
--- a/plugins/UsersManager/angularjs/user-permissions-edit/user-permissions-edit.component.js
+++ /dev/null
@@ -1,300 +0,0 @@
-/*!
- * Matomo - free/libre analytics platform
- *
- * @link https://matomo.org
- * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
- */
-
-/**
- * Usage:
- * <piwik-user-permissions-edit>
- */
-(function () {
- angular.module('piwikApp').component('piwikUserPermissionsEdit', {
- templateUrl: 'plugins/UsersManager/angularjs/user-permissions-edit/user-permissions-edit.component.html?cb=' + piwik.cacheBuster,
- bindings: {
- userLogin: '<',
- limit: '<',
- onUserHasAccessDetected: '&',
- onAccessChange: '&',
- accessLevels: '<',
- filterAccessLevels: '<'
- },
- controller: UserPermissionsEditController
- });
-
- UserPermissionsEditController.$inject = ['piwikApi', '$element', '$q', '$timeout'];
-
- function UserPermissionsEditController(piwikApi, $element, $q, $timeout) {
- var vm = this;
-
- // search/pagination state
- vm.siteAccess = [];
- vm.offset = 0;
- vm.totalEntries = null;
- vm.accessLevelFilter = '';
- vm.siteNameFilter = '';
- vm.isLoadingAccess = false;
- vm.allWebsitesAccssLevelSet = 'view';
-
- // row selection state
- vm.isAllCheckboxSelected = false;
- vm.selectedRows = {};
- vm.isBulkActionsDisabled = true;
- vm.areAllResultsSelected = false;
- vm.previousRole = null;
-
- // other state
- vm.hasAccessToAtLeastOneSite = true;
- vm.isRoleHelpToggled = false;
- vm.isCapabilitiesHelpToggled = false;
- vm.isGivingAccessToAllSites = false;
-
- // intermediate state
- vm.roleToChangeTo = null;
- vm.siteAccessToChange = null;
-
- vm.$onInit = $onInit;
- vm.$onChanges = $onChanges;
- vm.onAllCheckboxChange = onAllCheckboxChange;
- vm.onRowSelected = onRowSelected;
- vm.getPaginationLowerBound = getPaginationLowerBound;
- vm.getPaginationUpperBound = getPaginationUpperBound;
- vm.fetchAccess = fetchAccess;
- vm.gotoPreviousPage = gotoPreviousPage;
- vm.gotoNextPage = gotoNextPage;
- vm.showRemoveAccessConfirm = showRemoveAccessConfirm;
- vm.getSelectedRowsCount = getSelectedRowsCount;
- vm.getAffectedSitesCount = getAffectedSitesCount;
- vm.changeUserRole = changeUserRole;
- vm.showChangeAccessConfirm = showChangeAccessConfirm;
- vm.getRoleDisplay = getRoleDisplay;
- vm.showAddExistingUserModal = showAddExistingUserModal;
- vm.giveAccessToAllSites = giveAccessToAllSites;
- vm.showChangeAccessAllSitesModal = showChangeAccessAllSitesModal;
-
- function giveAccessToAllSites() {
- vm.isGivingAccessToAllSites = true;
- piwikApi.fetch({
- method: 'SitesManager.getSitesWithAdminAccess',
- }).then(function (allSites) {
- var idSites = allSites.map(function (s) { return s.idsite; });
- return piwikApi.post({
- method: 'UsersManager.setUserAccess'
- }, {
- userLogin: vm.userLogin,
- access: vm.allWebsitesAccssLevelSet,
- 'idSites[]': idSites,
- });
- }).then(function () {
- return vm.fetchAccess();
- })['finally'](function () {
- vm.isGivingAccessToAllSites = false;
- });
- }
-
- function showChangeAccessAllSitesModal() {
- $element.find('.confirm-give-access-all-sites').modal({ dismissible: false }).modal('open');
- }
-
- function $onInit() {
- vm.limit = vm.limit || 10;
-
- resetSiteToAdd();
- fetchAccess();
- }
-
- function $onChanges() {
- vm.accessLevels = vm.accessLevels.filter(shouldShowAccessLevel);
- vm.filterAccessLevels = vm.filterAccessLevels.filter(shouldShowAccessLevel);
-
- if (vm.limit) {
- fetchAccess();
- }
-
- function shouldShowAccessLevel(entry) {
- return entry.key !== 'superuser';
- }
- }
-
- function fetchAccess() {
- vm.isLoadingAccess = true;
- piwikApi.fetch({
- method: 'UsersManager.getSitesAccessForUser',
- limit: vm.limit,
- offset: vm.offset,
- filter_search: vm.siteNameFilter,
- filter_access: vm.accessLevelFilter,
- userLogin: vm.userLogin
- }, { includeHeaders: true }).then(function (result) {
- vm.isLoadingAccess = false;
- vm.siteAccess = result.response;
- vm.totalEntries = parseInt(result.headers('x-matomo-total-results')) || 0;
- vm.hasAccessToAtLeastOneSite = !! result.headers('x-matomo-has-some');
-
- if (vm.onUserHasAccessDetected) {
- vm.onUserHasAccessDetected({ hasAccess: vm.hasAccessToAtLeastOneSite });
- }
-
- clearSelection();
- }).catch(function () {
- vm.isLoadingAccess = false;
-
- clearSelection();
- });
- }
-
- function getAllSitesInSearch() {
- return piwikApi.fetch({
- method: 'UsersManager.getSitesAccessForUser',
- filter_search: vm.siteNameFilter,
- filter_access: vm.accessLevelFilter,
- userLogin: vm.userLogin,
- filter_limit: '-1'
- }).then(function (access) {
- return access.map(function (a) { return a.idsite; });
- });
- }
-
- function clearSelection() {
- vm.selectedRows = {};
- vm.areAllResultsSelected = false;
- vm.isBulkActionsDisabled = true;
- vm.isAllCheckboxSelected = false;
- vm.siteAccessToChange = null;
- }
-
- function onAllCheckboxChange() {
- if (!vm.isAllCheckboxSelected) {
- clearSelection();
- } else {
- for (var i = 0; i !== vm.siteAccess.length; ++i) {
- vm.selectedRows[i] = true;
- }
- vm.isBulkActionsDisabled = false;
- }
- }
-
- function onRowSelected() {
- $timeout(function () {
- var selectedRowKeyCount = getSelectedRowsCount();
- vm.isBulkActionsDisabled = selectedRowKeyCount === 0;
- vm.isAllCheckboxSelected = selectedRowKeyCount === vm.siteAccess.length;
- });
- }
-
- function getPaginationLowerBound() {
- return vm.offset + 1;
- }
-
- function getPaginationUpperBound() {
- return Math.min(vm.offset + vm.limit, vm.totalEntries);
- }
-
- function resetSiteToAdd() {
- vm.siteToAdd = {
- id: null,
- name: ''
- };
- }
-
- function changeUserRole() {
- vm.isLoadingAccess = true;
-
- return $q.resolve().then(function () {
- if (vm.siteAccessToChange) {
- return [vm.siteAccessToChange.idsite];
- }
-
- if (vm.areAllResultsSelected) {
- return getAllSitesInSearch();
- }
-
- return getSelectedSites();
- }).then(function (idSites) {
- return piwikApi.post({
- method: 'UsersManager.setUserAccess'
- }, {
- userLogin: vm.userLogin,
- access: vm.roleToChangeTo,
- 'idSites[]': idSites
- });
- }).catch(function () {
- // ignore (errors will still be displayed to the user)
- }).then(function () {
- vm.onAccessChange();
-
- return fetchAccess();
- });
- }
-
- function getSelectedSites() {
- var result = [];
- Object.keys(vm.selectedRows).forEach(function (index) {
- if (vm.selectedRows[index]
- && vm.siteAccess[index] // safety check
- ) {
- result.push(vm.siteAccess[index].idsite);
- }
- });
- return result;
- }
-
- function gotoPreviousPage() {
- vm.offset = Math.max(0, vm.offset - vm.limit);
-
- fetchAccess();
- }
-
- function gotoNextPage() {
- var newOffset = vm.offset + vm.limit;
- if (newOffset >= vm.totalEntries) {
- return;
- }
-
- vm.offset = newOffset;
- fetchAccess();
- }
-
- function showRemoveAccessConfirm() {
- $element.find('.delete-access-confirm-modal').modal({ dismissible: false }).modal('open');
- }
-
- function showChangeAccessConfirm() {
- $element.find('.change-access-confirm-modal').modal({ dismissible: false }).modal('open');
- }
-
- function showAddExistingUserModal() {
- $element.find('.add-existing-user-modal').modal({ dismissible: false }).modal('open');
- }
-
- function getSelectedRowsCount() {
- var selectedRowKeyCount = 0;
- Object.keys(vm.selectedRows).forEach(function (key) {
- if (vm.selectedRows[key]) {
- ++selectedRowKeyCount;
- }
- });
- return selectedRowKeyCount;
- }
-
- function getAffectedSitesCount() {
- if (vm.areAllResultsSelected) {
- return vm.totalEntries;
- }
-
- return getSelectedRowsCount();
- }
-
- function getRoleDisplay(role) {
- var result = null;
- vm.accessLevels.forEach(function (entry) {
- if (entry.key === role) {
- result = entry.value;
- }
- });
- return result;
- }
- }
-
-})();
diff --git a/plugins/UsersManager/tests/UI/UsersManager_spec.js b/plugins/UsersManager/tests/UI/UsersManager_spec.js
index 475bba3d8c..e1c06bce75 100644
--- a/plugins/UsersManager/tests/UI/UsersManager_spec.js
+++ b/plugins/UsersManager/tests/UI/UsersManager_spec.js
@@ -331,7 +331,7 @@ describe("UsersManager", function () {
it('should select all displayed rows when the select all checkbox is clicked', async function () {
await page.click('.userPermissionsEdit th.select-cell input + span');
- await page.waitForTimeout(250); // for checkbox animations
+ await page.waitForTimeout(400); // for checkbox animations
await page.mouse.move(-10, -10);
expect(await page.screenshotSelector('.usersManager')).to.matchImage({
diff --git a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_admin_view_admin_edit_permissions.png b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_admin_view_admin_edit_permissions.png
index 2bea700701..5a134db55c 100644
--- a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_admin_view_admin_edit_permissions.png
+++ b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_admin_view_admin_edit_permissions.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:8355571b0804e59efbe22334c97e798510f6791314630ad591446204f2e0cea5
-size 81574
+oid sha256:3346b885e52e6a1eba7713264051248faaaaf3f3f45d99ed3e1fa73a35128f92
+size 81607
diff --git a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_permissions_all_rows_in_search.png b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_permissions_all_rows_in_search.png
index 0e1ea76c0b..da6f81d0cd 100644
--- a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_permissions_all_rows_in_search.png
+++ b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_permissions_all_rows_in_search.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:7f8e3168bfd55b755751e9cfae27b3dd60674019de38c338970b4a22cb2cde57
-size 93240
+oid sha256:ccdd00490fc3007eba85e4885878c055adbb780e498818738325abda97ab401b
+size 93431
diff --git a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_permissions_all_sites_access.png b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_permissions_all_sites_access.png
index 3ce1307b10..814cc1bfdf 100644
--- a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_permissions_all_sites_access.png
+++ b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_permissions_all_sites_access.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:1187cff49198d1ec7784bcf8ef9c57813b4325c0e6778117dd32b30d777c4594
-size 100480
+oid sha256:d5dab1176dddeb53bcc1240c1fd0be6b4e5adf346044b54ce9954e0e4c8d1dab
+size 100457
diff --git a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_permissions_capability_single_site.png b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_permissions_capability_single_site.png
index 9365527f47..4493dccfc7 100644
--- a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_permissions_capability_single_site.png
+++ b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_permissions_capability_single_site.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:7245e5f4269836c8e2cde0c44de8ddb12423eb63f2e36d1ddb72c2926225ea5d
-size 92457
+oid sha256:d046b81c450841dabd11d6aee75e551f58da0dd6bf2eb6105954eeb27d623712
+size 92643
diff --git a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_permissions_edit.png b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_permissions_edit.png
index cbf99243ba..8a5d1d2fff 100644
--- a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_permissions_edit.png
+++ b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_permissions_edit.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:82b0987e271f10a015994227a82c733313da191d5abda6dea80a50c66cca44d9
-size 82163
+oid sha256:3a22f31407a292e25abd22086b520440e44c4ab49b283a150ac5eae8ef2233d9
+size 82154
diff --git a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_permissions_filters.png b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_permissions_filters.png
index a8ef38d934..b06125805a 100644
--- a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_permissions_filters.png
+++ b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_permissions_filters.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:0da4043873fd4a03586344399e4d230cbf49bcfb3a21258af02fb86c283855a2
-size 66659
+oid sha256:792553c87314cfd1c5f6115d4aa8a8e02705b08cad97697d36ac4aa371e51d4a
+size 66603
diff --git a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_permissions_next.png b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_permissions_next.png
index f22b6b6284..c2328e9c47 100644
--- a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_permissions_next.png
+++ b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_permissions_next.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:2ec58a4d3d51a8b13bad20f858453cba578e68b5a946ecede4d2b0174a76d83f
-size 92466
+oid sha256:908f27b2e116530f1ef60b305bc9e4417c7f5a0999eff4ec9ba9923cb1fe3e04
+size 92304
diff --git a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_permissions_remove_access.png b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_permissions_remove_access.png
index 32b43b0cc2..8843e2ac5e 100644
--- a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_permissions_remove_access.png
+++ b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_permissions_remove_access.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:2db1d07ee054bb937ddaa3544f447920b01d1ba5dbd9d0371d31d076ec3718d2
-size 47993
+oid sha256:b2c360c4cc4b1d0ecf49efbf71cd444cf451b841bf1ff9640a66831b3efb79d1
+size 48046
diff --git a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_permissions_remove_single.png b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_permissions_remove_single.png
index 367f2c5b10..eec6d9c49d 100644
--- a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_permissions_remove_single.png
+++ b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_permissions_remove_single.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:86efc969c58f87ddfe9df3451d585cfe3710d851354e71f4d45b52225b03c320
-size 90565
+oid sha256:cf8b4d58b4d51af043a6c9e6bd71e58921d22b56e6b35f7e0986452527c5392b
+size 90402
diff --git a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_permissions_select_all.png b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_permissions_select_all.png
index 5c553934b1..0c18eb70d9 100644
--- a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_permissions_select_all.png
+++ b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_permissions_select_all.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:0775b9728bcc5c1ccd4497df6e77ad686ce380c1215d4f79fd8e284f831f0d0c
-size 69078
+oid sha256:0df07e4f847d726c31258787973dcc65b319df3900a5d736226fdcc8de25ef14
+size 68958
diff --git a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_permissions_select_multiple.png b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_permissions_select_multiple.png
index 69215c0e74..d5a3219e39 100644
--- a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_permissions_select_multiple.png
+++ b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_permissions_select_multiple.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:bb5d14dcd6075e80cdbf488ad9e03dc6a830dbfb8b31b3f0a172c9396697c82b
-size 92579
+oid sha256:02de73538753bf94f25be31031defbe8a096b3cbd266b28902fab4535bde38aa
+size 92435
diff --git a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_permissions_single_site_access.png b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_permissions_single_site_access.png
index ab419ee5f9..bfd451cd99 100644
--- a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_permissions_single_site_access.png
+++ b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_permissions_single_site_access.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:cec452b68a9801e37be4050f2454d5656844c5ccdd31af643d1e0583dbf8df08
-size 89100
+oid sha256:11b17e734653fdd890a0e0a6a052a604e18552e1367f5f663d4030fbcf571dd2
+size 89272
diff --git a/plugins/UsersManager/vue/dist/UsersManager.umd.js b/plugins/UsersManager/vue/dist/UsersManager.umd.js
index ae145d094b..36b9629aab 100644
--- a/plugins/UsersManager/vue/dist/UsersManager.umd.js
+++ b/plugins/UsersManager/vue/dist/UsersManager.umd.js
@@ -126,6 +126,7 @@ __webpack_require__.r(__webpack_exports__);
// EXPORTS
__webpack_require__.d(__webpack_exports__, "CapabilitiesEdit", function() { return /* reexport */ CapabilitiesEdit; });
+__webpack_require__.d(__webpack_exports__, "UserPermissionsEdit", function() { return /* reexport */ UserPermissionsEdit; });
// CONCATENATED MODULE: ./node_modules/@vue/cli-service/lib/commands/build/setPublicPath.js
// This file is imported into lib/wc client bundles.
@@ -575,6 +576,855 @@ CapabilitiesEditvue_type_script_lang_ts.render = render
}
}
}));
+// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-babel/node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/templateLoader.js??ref--6!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--0-1!./plugins/UsersManager/vue/src/UserPermissionsEdit/UserPermissionsEdit.vue?vue&type=template&id=b8ef996c
+
+var UserPermissionsEditvue_type_template_id_b8ef996c_hoisted_1 = {
+ key: 0,
+ class: "row"
+};
+var UserPermissionsEditvue_type_template_id_b8ef996c_hoisted_2 = {
+ class: "row to-all-websites"
+};
+var UserPermissionsEditvue_type_template_id_b8ef996c_hoisted_3 = {
+ class: "col s12"
+};
+var UserPermissionsEditvue_type_template_id_b8ef996c_hoisted_4 = {
+ style: {
+ "margin-right": "3.5px"
+ }
+};
+var UserPermissionsEditvue_type_template_id_b8ef996c_hoisted_5 = {
+ id: "all-sites-access-select",
+ style: {
+ "margin-right": "3.5px"
+ }
+};
+
+var UserPermissionsEditvue_type_template_id_b8ef996c_hoisted_6 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("p", null, " ", -1);
+
+var UserPermissionsEditvue_type_template_id_b8ef996c_hoisted_7 = {
+ class: "filters row"
+};
+var UserPermissionsEditvue_type_template_id_b8ef996c_hoisted_8 = {
+ class: "col s12 m12 l8"
+};
+var _hoisted_9 = {
+ class: "input-field bulk-actions",
+ style: {
+ "margin-right": "3.5px"
+ }
+};
+var _hoisted_10 = {
+ id: "user-permissions-edit-bulk-actions",
+ class: "dropdown-content"
+};
+var _hoisted_11 = {
+ class: "dropdown-trigger",
+ "data-target": "user-permissions-bulk-set-access"
+};
+var _hoisted_12 = {
+ id: "user-permissions-bulk-set-access",
+ class: "dropdown-content"
+};
+var _hoisted_13 = ["onClick"];
+var _hoisted_14 = {
+ class: "input-field site-filter",
+ style: {
+ "margin-right": "3.5px"
+ }
+};
+var _hoisted_15 = ["value", "placeholder"];
+var _hoisted_16 = {
+ class: "input-field access-filter",
+ style: {
+ "margin-right": "3.5px"
+ }
+};
+var _hoisted_17 = {
+ key: 0,
+ class: "col s12 m12 l4 sites-for-permission-pagination-container"
+};
+var _hoisted_18 = {
+ class: "sites-for-permission-pagination"
+};
+var _hoisted_19 = {
+ class: "counter"
+};
+var _hoisted_20 = ["textContent"];
+var _hoisted_21 = {
+ class: "roles-help-notification"
+};
+var _hoisted_22 = ["innerHTML"];
+var _hoisted_23 = {
+ class: "capabilities-help-notification"
+};
+var _hoisted_24 = {
+ id: "sitesForPermission"
+};
+var _hoisted_25 = {
+ class: "select-cell"
+};
+var _hoisted_26 = {
+ class: "checkbox-container"
+};
+var _hoisted_27 = ["checked"];
+
+var _hoisted_28 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", null, null, -1);
+
+var _hoisted_29 = {
+ class: "role_header"
+};
+var _hoisted_30 = ["innerHTML"];
+
+var _hoisted_31 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", {
+ class: "icon-help"
+}, null, -1);
+
+var _hoisted_32 = [_hoisted_31];
+var _hoisted_33 = {
+ class: "capabilities_header"
+};
+var _hoisted_34 = ["innerHTML"];
+
+var _hoisted_35 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", {
+ class: "icon-help"
+}, null, -1);
+
+var _hoisted_36 = [_hoisted_35];
+var _hoisted_37 = {
+ key: 0,
+ class: "select-all-row"
+};
+var _hoisted_38 = {
+ colspan: "4"
+};
+var _hoisted_39 = {
+ key: 0
+};
+var _hoisted_40 = ["innerHTML"];
+var _hoisted_41 = ["innerHTML"];
+var _hoisted_42 = {
+ key: 1
+};
+var _hoisted_43 = ["innerHTML"];
+var _hoisted_44 = ["innerHTML"];
+var _hoisted_45 = {
+ class: "select-cell"
+};
+var _hoisted_46 = {
+ class: "checkbox-container"
+};
+var _hoisted_47 = ["id", "onUpdate:modelValue"];
+
+var _hoisted_48 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", null, null, -1);
+
+var _hoisted_49 = {
+ class: "role-select"
+};
+var _hoisted_50 = {
+ class: "delete-access-confirm-modal modal",
+ ref: "deleteAccessConfirmModal"
+};
+var _hoisted_51 = {
+ class: "modal-content"
+};
+var _hoisted_52 = ["innerHTML"];
+var _hoisted_53 = ["innerHTML"];
+var _hoisted_54 = {
+ class: "modal-footer"
+};
+var _hoisted_55 = {
+ class: "change-access-confirm-modal modal",
+ ref: "changeAccessConfirmModal"
+};
+var _hoisted_56 = {
+ class: "modal-content"
+};
+var _hoisted_57 = ["innerHTML"];
+var _hoisted_58 = ["innerHTML"];
+var _hoisted_59 = {
+ class: "modal-footer"
+};
+var _hoisted_60 = {
+ class: "confirm-give-access-all-sites modal",
+ ref: "confirmGiveAccessAllSitesModal"
+};
+var _hoisted_61 = {
+ class: "modal-content"
+};
+var _hoisted_62 = ["innerHTML"];
+var _hoisted_63 = {
+ class: "modal-footer"
+};
+function UserPermissionsEditvue_type_template_id_b8ef996c_render(_ctx, _cache, $props, $setup, $data, $options) {
+ var _component_Notification = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["resolveComponent"])("Notification");
+
+ var _component_Field = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["resolveComponent"])("Field");
+
+ var _component_CapabilitiesEdit = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["resolveComponent"])("CapabilitiesEdit");
+
+ var _directive_dropdown_menu = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["resolveDirective"])("dropdown-menu");
+
+ var _directive_content_table = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["resolveDirective"])("content-table");
+
+ return Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", {
+ class: Object(external_commonjs_vue_commonjs2_vue_root_Vue_["normalizeClass"])(["userPermissionsEdit", {
+ loading: _ctx.isLoadingAccess
+ }])
+ }, [!_ctx.hasAccessToAtLeastOneSite ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", UserPermissionsEditvue_type_template_id_b8ef996c_hoisted_1, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_Notification, {
+ context: "warning",
+ type: "transient",
+ noclear: true
+ }, {
+ default: Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withCtx"])(function () {
+ return [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("strong", null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('General_Warning')) + ":", 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createTextVNode"])(" " + Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_NoAccessWarning')), 1)];
+ }),
+ _: 1
+ })])])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UserPermissionsEditvue_type_template_id_b8ef996c_hoisted_2, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UserPermissionsEditvue_type_template_id_b8ef996c_hoisted_3, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", UserPermissionsEditvue_type_template_id_b8ef996c_hoisted_4, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_GiveAccessToAll')) + ":", 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UserPermissionsEditvue_type_template_id_b8ef996c_hoisted_5, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_Field, {
+ modelValue: _ctx.allWebsitesAccssLevelSet,
+ "onUpdate:modelValue": _cache[0] || (_cache[0] = function ($event) {
+ return _ctx.allWebsitesAccssLevelSet = $event;
+ }),
+ uicontrol: "select",
+ options: _ctx.filteredAccessLevels,
+ "full-width": true
+ }, null, 8, ["modelValue", "options"])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", {
+ href: "",
+ class: Object(external_commonjs_vue_commonjs2_vue_root_Vue_["normalizeClass"])(["btn", {
+ disabled: _ctx.isGivingAccessToAllSites
+ }]),
+ onClick: _cache[1] || (_cache[1] = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withModifiers"])(function ($event) {
+ return _ctx.showChangeAccessAllSitesModal();
+ }, ["prevent"]))
+ }, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('General_Apply')), 3)]), UserPermissionsEditvue_type_template_id_b8ef996c_hoisted_6, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("p", null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_OrManageIndividually')) + ":", 1)])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UserPermissionsEditvue_type_template_id_b8ef996c_hoisted_7, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UserPermissionsEditvue_type_template_id_b8ef996c_hoisted_8, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_9, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", {
+ class: Object(external_commonjs_vue_commonjs2_vue_root_Vue_["normalizeClass"])(["dropdown-trigger btn", {
+ disabled: _ctx.isBulkActionsDisabled
+ }]),
+ href: "",
+ "data-target": "user-permissions-edit-bulk-actions"
+ }, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createTextVNode"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_BulkActions')), 1)], 2), [[_directive_dropdown_menu, {
+ activates: '#user-permissions-edit-bulk-actions'
+ }]]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("ul", _hoisted_10, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("li", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", _hoisted_11, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createTextVNode"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_SetPermission')), 1)], 512), [[_directive_dropdown_menu, {
+ activates: '#user-permissions-bulk-set-access'
+ }]]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("ul", _hoisted_12, [(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.filteredAccessLevels, function (access) {
+ return Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("li", {
+ key: access.key
+ }, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", {
+ href: "",
+ onClick: Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withModifiers"])(function ($event) {
+ _ctx.siteAccessToChange = null;
+ _ctx.roleToChangeTo = access.key;
+
+ _ctx.showChangeAccessConfirm();
+ }, ["prevent"])
+ }, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(access.value), 9, _hoisted_13)]);
+ }), 128))])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("li", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", {
+ href: "",
+ onClick: _cache[2] || (_cache[2] = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withModifiers"])(function ($event) {
+ _ctx.siteAccessToChange = null;
+ _ctx.roleToChangeTo = 'noaccess';
+
+ _ctx.showRemoveAccessConfirm();
+ }, ["prevent"]))
+ }, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_RemovePermissions')), 1)])])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_14, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("input", {
+ type: "text",
+ value: _ctx.siteNameFilter,
+ onKeydown: _cache[3] || (_cache[3] = function ($event) {
+ _ctx.onChangeSiteFilter($event);
+ }),
+ onChange: _cache[4] || (_cache[4] = function ($event) {
+ _ctx.onChangeSiteFilter($event);
+ }),
+ placeholder: _ctx.translate('UsersManager_FilterByWebsite')
+ }, null, 40, _hoisted_15)]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_16, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_Field, {
+ modelValue: _ctx.accessLevelFilter,
+ "onUpdate:modelValue": _cache[5] || (_cache[5] = function ($event) {
+ return _ctx.accessLevelFilter = $event;
+ }),
+ uicontrol: "select",
+ options: _ctx.filteredSelectAccessLevels,
+ "full-width": true,
+ placeholder: _ctx.translate('UsersManager_FilterByAccess')
+ }, null, 8, ["modelValue", "options", "placeholder"])])])]), _ctx.totalEntries > _ctx.limit ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", _hoisted_17, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_18, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", {
+ class: Object(external_commonjs_vue_commonjs2_vue_root_Vue_["normalizeClass"])(["prev", {
+ disabled: _ctx.offset <= 0
+ }])
+ }, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", {
+ class: "pointer",
+ onClick: _cache[6] || (_cache[6] = function ($event) {
+ return _ctx.gotoPreviousPage();
+ })
+ }, "« " + Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('General_Previous')), 1)], 2), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", _hoisted_19, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", {
+ textContent: Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.paginationText)
+ }, null, 8, _hoisted_20)]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", {
+ class: Object(external_commonjs_vue_commonjs2_vue_root_Vue_["normalizeClass"])(["next", {
+ disabled: _ctx.offset + _ctx.limit >= _ctx.totalEntries
+ }])
+ }, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", {
+ class: "pointer",
+ onClick: _cache[7] || (_cache[7] = function ($event) {
+ return _ctx.gotoNextPage();
+ })
+ }, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('General_Next')) + " »", 1)], 2)])])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true)]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_21, [_ctx.isRoleHelpToggled ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createBlock"])(_component_Notification, {
+ key: 0,
+ context: "info",
+ type: "persistent",
+ noclear: true
+ }, {
+ default: Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withCtx"])(function () {
+ return [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", {
+ innerHTML: _ctx.$sanitize(_ctx.rolesHelpText)
+ }, null, 8, _hoisted_22)];
+ }),
+ _: 1
+ })) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true)]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_23, [_ctx.isCapabilitiesHelpToggled ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createBlock"])(_component_Notification, {
+ key: 0,
+ context: "info",
+ type: "persistent",
+ noclear: true
+ }, {
+ default: Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withCtx"])(function () {
+ return [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_CapabilitiesHelp')), 1)];
+ }),
+ _: 1
+ })) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true)]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("table", _hoisted_24, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("thead", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("tr", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("th", _hoisted_25, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", _hoisted_26, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("label", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("input", {
+ type: "checkbox",
+ id: "perm_edit_select_all",
+ checked: _ctx.isAllCheckboxSelected,
+ onChange: _cache[8] || (_cache[8] = function ($event) {
+ return _ctx.onAllCheckboxChange($event);
+ })
+ }, null, 40, _hoisted_27), _hoisted_28])])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("th", null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('General_Name')), 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("th", _hoisted_29, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", {
+ innerHTML: "".concat(_ctx.translate('UsersManager_Role'), " ")
+ }, null, 8, _hoisted_30), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", {
+ href: "",
+ class: Object(external_commonjs_vue_commonjs2_vue_root_Vue_["normalizeClass"])(["helpIcon", {
+ sticky: _ctx.isRoleHelpToggled
+ }]),
+ onClick: _cache[9] || (_cache[9] = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withModifiers"])(function ($event) {
+ return _ctx.isRoleHelpToggled = !_ctx.isRoleHelpToggled;
+ }, ["prevent"]))
+ }, _hoisted_32, 2)]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("th", _hoisted_33, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", {
+ innerHTML: "".concat(_ctx.translate('UsersManager_Capabilities'), " ")
+ }, null, 8, _hoisted_34), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", {
+ href: "",
+ class: Object(external_commonjs_vue_commonjs2_vue_root_Vue_["normalizeClass"])(["helpIcon", {
+ sticky: _ctx.isCapabilitiesHelpToggled
+ }]),
+ onClick: _cache[10] || (_cache[10] = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withModifiers"])(function ($event) {
+ return _ctx.isCapabilitiesHelpToggled = !_ctx.isCapabilitiesHelpToggled;
+ }, ["prevent"]))
+ }, _hoisted_36, 2)])])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("tbody", null, [_ctx.isAllCheckboxSelected && _ctx.siteAccess.length < _ctx.totalEntries ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("tr", _hoisted_37, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("td", _hoisted_38, [!_ctx.areAllResultsSelected ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", _hoisted_39, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", {
+ innerHTML: _ctx.$sanitize(_ctx.theDisplayedWebsitesAreSelectedText),
+ style: {
+ "margin-right": "3.5px"
+ }
+ }, null, 8, _hoisted_40), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", {
+ href: "#",
+ onClick: _cache[11] || (_cache[11] = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withModifiers"])(function ($event) {
+ return _ctx.areAllResultsSelected = !_ctx.areAllResultsSelected;
+ }, ["prevent"])),
+ innerHTML: _ctx.$sanitize(_ctx.clickToSelectAllText)
+ }, null, 8, _hoisted_41)])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), _ctx.areAllResultsSelected ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", _hoisted_42, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", {
+ innerHTML: _ctx.$sanitize(_ctx.allWebsitesAreSelectedText),
+ style: {
+ "margin-right": "3.5px"
+ }
+ }, null, 8, _hoisted_43), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", {
+ href: "#",
+ onClick: _cache[12] || (_cache[12] = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withModifiers"])(function ($event) {
+ return _ctx.areAllResultsSelected = !_ctx.areAllResultsSelected;
+ }, ["prevent"])),
+ innerHTML: _ctx.$sanitize(_ctx.clickToSelectDisplayedWebsitesText)
+ }, null, 8, _hoisted_44)])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true)])])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), (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.siteAccess, function (entry, index) {
+ return Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("tr", {
+ key: entry.idsite
+ }, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("td", _hoisted_45, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", _hoisted_46, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("label", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("input", {
+ type: "checkbox",
+ id: "perm_edit_select_row".concat(index),
+ "onUpdate:modelValue": function onUpdateModelValue($event) {
+ return _ctx.selectedRows[index] = $event;
+ },
+ onClick: _cache[13] || (_cache[13] = function ($event) {
+ return _ctx.onRowSelected();
+ })
+ }, null, 8, _hoisted_47), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vModelCheckbox"], _ctx.selectedRows[index]]]), _hoisted_48])])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("td", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(entry.site_name), 1)]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("td", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_49, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_Field, {
+ "model-value": entry.role,
+ "onUpdate:modelValue": function onUpdateModelValue($event) {
+ _ctx.onRoleChange(entry, $event);
+ },
+ uicontrol: "select",
+ options: _ctx.filteredAccessLevels,
+ "full-width": true
+ }, null, 8, ["model-value", "onUpdate:modelValue", "options"])])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("td", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_CapabilitiesEdit, {
+ idsite: entry.idsite,
+ "site-name": entry.site_name,
+ "user-login": _ctx.userLogin,
+ "user-role": entry.role,
+ capabilities: entry.capabilities,
+ onChange: _cache[14] || (_cache[14] = function ($event) {
+ return _ctx.fetchAccess();
+ })
+ }, null, 8, ["idsite", "site-name", "user-login", "user-role", "capabilities"])])])]);
+ }), 128))])], 512), [[_directive_content_table]]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_50, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_51, [_ctx.siteAccessToChange ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("h3", {
+ key: 0,
+ innerHTML: _ctx.$sanitize(_ctx.deletePermConfirmSingleText)
+ }, null, 8, _hoisted_52)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), !_ctx.siteAccessToChange ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("p", {
+ key: 1,
+ innerHTML: _ctx.$sanitize(_ctx.deletePermConfirmMultipleText)
+ }, null, 8, _hoisted_53)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true)]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_54, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", {
+ href: "",
+ class: "modal-action modal-close btn",
+ onClick: _cache[15] || (_cache[15] = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withModifiers"])(function ($event) {
+ return _ctx.changeUserRole();
+ }, ["prevent"]))
+ }, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('General_Yes')), 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", {
+ href: "",
+ class: "modal-action modal-close modal-no",
+ onClick: _cache[16] || (_cache[16] = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withModifiers"])(function ($event) {
+ _ctx.siteAccessToChange = null;
+ _ctx.roleToChangeTo = null;
+ }, ["prevent"]))
+ }, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('General_No')), 1)])], 512), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_55, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_56, [_ctx.siteAccessToChange ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("h3", {
+ key: 0,
+ innerHTML: _ctx.$sanitize(_ctx.changePermToSiteConfirmSingleText)
+ }, null, 8, _hoisted_57)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), !_ctx.siteAccessToChange ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("p", {
+ key: 1,
+ innerHTML: _ctx.$sanitize(_ctx.changePermToSiteConfirmMultipleText)
+ }, null, 8, _hoisted_58)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true)]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_59, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", {
+ href: "",
+ class: "modal-action modal-close btn",
+ onClick: _cache[17] || (_cache[17] = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withModifiers"])(function ($event) {
+ return _ctx.changeUserRole();
+ }, ["prevent"]))
+ }, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('General_Yes')), 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", {
+ href: "",
+ class: "modal-action modal-close modal-no",
+ onClick: _cache[18] || (_cache[18] = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withModifiers"])(function ($event) {
+ _ctx.siteAccessToChange.role = _ctx.previousRole;
+ _ctx.siteAccessToChange = null;
+ _ctx.roleToChangeTo = null;
+ }, ["prevent"]))
+ }, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('General_No')), 1)])], 512), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_60, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_61, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("h3", {
+ innerHTML: _ctx.$sanitize(_ctx.changePermToAllSitesConfirmText)
+ }, null, 8, _hoisted_62), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("p", null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_ChangePermToAllSitesConfirm2')), 1)]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_63, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", {
+ href: "",
+ class: "modal-action modal-close btn",
+ onClick: _cache[19] || (_cache[19] = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withModifiers"])(function ($event) {
+ return _ctx.giveAccessToAllSites();
+ }, ["prevent"]))
+ }, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('General_Yes')), 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", {
+ href: "",
+ class: "modal-action modal-close modal-no",
+ onClick: _cache[20] || (_cache[20] = function ($event) {
+ return $event.preventDefault();
+ })
+ }, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('General_No')), 1)])], 512)], 2);
+}
+// CONCATENATED MODULE: ./plugins/UsersManager/vue/src/UserPermissionsEdit/UserPermissionsEdit.vue?vue&type=template&id=b8ef996c
+
+// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-typescript/node_modules/cache-loader/dist/cjs.js??ref--14-0!./node_modules/babel-loader/lib!./node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader??ref--14-2!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--0-1!./plugins/UsersManager/vue/src/UserPermissionsEdit/UserPermissionsEdit.vue?vue&type=script&lang=ts
+
+
+
+
+var UserPermissionsEditvue_type_script_lang_ts_window = window,
+ UserPermissionsEditvue_type_script_lang_ts_$ = UserPermissionsEditvue_type_script_lang_ts_window.$;
+/* harmony default export */ var UserPermissionsEditvue_type_script_lang_ts = (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["defineComponent"])({
+ props: {
+ userLogin: {
+ type: String,
+ required: true
+ },
+ limit: {
+ type: Number,
+ default: 10
+ },
+ accessLevels: {
+ type: Array,
+ required: true
+ },
+ filterAccessLevels: {
+ type: Array,
+ required: true
+ }
+ },
+ components: {
+ Notification: external_CoreHome_["Notification"],
+ Field: external_CorePluginsAdmin_["Field"],
+ CapabilitiesEdit: CapabilitiesEdit
+ },
+ directives: {
+ DropdownMenu: external_CoreHome_["DropdownMenu"],
+ ContentTable: external_CoreHome_["ContentTable"]
+ },
+ data: function data() {
+ return {
+ siteAccess: [],
+ offset: 0,
+ totalEntries: null,
+ accessLevelFilter: '',
+ siteNameFilter: '',
+ isLoadingAccess: false,
+ allWebsitesAccssLevelSet: 'view',
+ isAllCheckboxSelected: false,
+ selectedRows: {},
+ isBulkActionsDisabled: true,
+ areAllResultsSelected: false,
+ previousRole: null,
+ hasAccessToAtLeastOneSite: true,
+ isRoleHelpToggled: false,
+ isCapabilitiesHelpToggled: false,
+ isGivingAccessToAllSites: false,
+ roleToChangeTo: null,
+ siteAccessToChange: null
+ };
+ },
+ emits: ['userHasAccessDetected', 'accessChanged'],
+ created: function created() {
+ var _this = this;
+
+ this.onChangeSiteFilter = Object(external_CoreHome_["debounce"])(this.onChangeSiteFilter, 300);
+ Object(external_commonjs_vue_commonjs2_vue_root_Vue_["watch"])(function () {
+ return _this.allPropsWatch;
+ }, function () {
+ if (_this.limit) {
+ _this.fetchAccess();
+ }
+ });
+ this.fetchAccess();
+ },
+ watch: {
+ accessLevelFilter: function accessLevelFilter() {
+ this.offset = 0;
+ this.fetchAccess();
+ }
+ },
+ methods: {
+ onAllCheckboxChange: function onAllCheckboxChange(event) {
+ var _this2 = this;
+
+ this.isAllCheckboxSelected = event.target.checked;
+
+ if (!this.isAllCheckboxSelected) {
+ this.clearSelection();
+ } else {
+ this.siteAccess.forEach(function (e, i) {
+ _this2.selectedRows[i] = true;
+ });
+ this.isBulkActionsDisabled = false;
+ }
+ },
+ clearSelection: function clearSelection() {
+ this.selectedRows = {};
+ this.areAllResultsSelected = false;
+ this.isBulkActionsDisabled = true;
+ this.isAllCheckboxSelected = false;
+ this.siteAccessToChange = null;
+ },
+ onRowSelected: function onRowSelected() {
+ var _this3 = this;
+
+ setTimeout(function () {
+ var selectedRowKeyCount = _this3.selectedRowsCount;
+ _this3.isBulkActionsDisabled = selectedRowKeyCount === 0;
+ _this3.isAllCheckboxSelected = selectedRowKeyCount === _this3.siteAccess.length;
+ });
+ },
+ fetchAccess: function fetchAccess() {
+ var _this4 = this;
+
+ this.isLoadingAccess = true;
+ return external_CoreHome_["AjaxHelper"].fetch({
+ method: 'UsersManager.getSitesAccessForUser',
+ limit: this.limit,
+ offset: this.offset,
+ filter_search: this.siteNameFilter,
+ filter_access: this.accessLevelFilter,
+ userLogin: this.userLogin
+ }, {
+ returnResponseObject: true
+ }).then(function (helper) {
+ var result = helper.getRequestHandle();
+ _this4.isLoadingAccess = false;
+ _this4.siteAccess = result.responseJSON;
+ _this4.totalEntries = parseInt(result.getResponseHeader('x-matomo-total-results'), 10) || 0;
+ _this4.hasAccessToAtLeastOneSite = !!result.getResponseHeader('x-matomo-has-some');
+
+ _this4.$emit('userHasAccessDetected', {
+ hasAccess: _this4.hasAccessToAtLeastOneSite
+ });
+
+ _this4.clearSelection();
+ }).catch(function () {
+ _this4.isLoadingAccess = false;
+
+ _this4.clearSelection();
+ });
+ },
+ gotoPreviousPage: function gotoPreviousPage() {
+ this.offset = Math.max(0, this.offset - this.limit);
+ this.fetchAccess();
+ },
+ gotoNextPage: function gotoNextPage() {
+ var newOffset = this.offset + this.limit;
+
+ if (newOffset >= (this.totalEntries || 0)) {
+ return;
+ }
+
+ this.offset = newOffset;
+ this.fetchAccess();
+ },
+ showRemoveAccessConfirm: function showRemoveAccessConfirm() {
+ UserPermissionsEditvue_type_script_lang_ts_$(this.$refs.deleteAccessConfirmModal).modal({
+ dismissible: false
+ }).modal('open');
+ },
+ changeUserRole: function changeUserRole() {
+ var _this5 = this;
+
+ var getSelectedSites = function getSelectedSites() {
+ var result = [];
+ Object.keys(_this5.selectedRows).forEach(function (index) {
+ if (_this5.selectedRows[index] && _this5.siteAccess[index] // safety check
+ ) {
+ result.push(_this5.siteAccess[index].idsite);
+ }
+ });
+ return result;
+ };
+
+ var getAllSitesInSearch = function getAllSitesInSearch() {
+ return external_CoreHome_["AjaxHelper"].fetch({
+ method: 'UsersManager.getSitesAccessForUser',
+ filter_search: _this5.siteNameFilter,
+ filter_access: _this5.accessLevelFilter,
+ userLogin: _this5.userLogin,
+ filter_limit: '-1'
+ }).then(function (access) {
+ return access.map(function (a) {
+ return a.idsite;
+ });
+ });
+ };
+
+ this.isLoadingAccess = true;
+ return Promise.resolve().then(function () {
+ if (_this5.siteAccessToChange) {
+ return [_this5.siteAccessToChange.idsite];
+ }
+
+ if (_this5.areAllResultsSelected) {
+ return getAllSitesInSearch();
+ }
+
+ return getSelectedSites();
+ }).then(function (idSites) {
+ return external_CoreHome_["AjaxHelper"].post({
+ method: 'UsersManager.setUserAccess'
+ }, {
+ userLogin: _this5.userLogin,
+ access: _this5.roleToChangeTo,
+ idSites: idSites
+ });
+ }).catch(function () {// ignore (errors will still be displayed to the user)
+ }).then(function () {
+ _this5.$emit('accessChanged');
+
+ return _this5.fetchAccess();
+ });
+ },
+ showChangeAccessConfirm: function showChangeAccessConfirm() {
+ UserPermissionsEditvue_type_script_lang_ts_$(this.$refs.changeAccessConfirmModal).modal({
+ dismissible: false
+ }).modal('open');
+ },
+ getRoleDisplay: function getRoleDisplay(role) {
+ var result = null;
+ this.filteredAccessLevels.forEach(function (entry) {
+ if (entry.key === role) {
+ result = entry.value;
+ }
+ });
+ return result;
+ },
+ giveAccessToAllSites: function giveAccessToAllSites() {
+ var _this6 = this;
+
+ this.isGivingAccessToAllSites = true;
+ external_CoreHome_["AjaxHelper"].fetch({
+ method: 'SitesManager.getSitesWithAdminAccess'
+ }).then(function (allSites) {
+ var idSites = allSites.map(function (s) {
+ return s.idsite;
+ });
+ return external_CoreHome_["AjaxHelper"].post({
+ method: 'UsersManager.setUserAccess'
+ }, {
+ userLogin: _this6.userLogin,
+ access: _this6.allWebsitesAccssLevelSet,
+ idSites: idSites
+ });
+ }).then(function () {
+ return _this6.fetchAccess();
+ }).finally(function () {
+ _this6.isGivingAccessToAllSites = false;
+ });
+ },
+ showChangeAccessAllSitesModal: function showChangeAccessAllSitesModal() {
+ UserPermissionsEditvue_type_script_lang_ts_$(this.$refs.confirmGiveAccessAllSitesModal).modal({
+ dismissible: false
+ }).modal('open');
+ },
+ onChangeSiteFilter: function onChangeSiteFilter(event) {
+ var _this7 = this;
+
+ setTimeout(function () {
+ var inputValue = event.target.value;
+
+ if (_this7.siteNameFilter !== inputValue) {
+ _this7.siteNameFilter = inputValue;
+ _this7.offset = 0;
+
+ _this7.fetchAccess();
+ }
+ });
+ },
+ onRoleChange: function onRoleChange(entry, newRole) {
+ this.previousRole = entry.role;
+ this.roleToChangeTo = newRole;
+ this.siteAccessToChange = entry;
+ this.showChangeAccessConfirm();
+ }
+ },
+ computed: {
+ rolesHelpText: function rolesHelpText() {
+ return Object(external_CoreHome_["translate"])('UsersManager_RolesHelp', '<a href="https://matomo.org/faq/general/faq_70/" target="_blank" rel="noreferrer noopener">', '</a>', '<a href="https://matomo.org/faq/general/faq_69/" target="_blank" rel="noreferrer noopener">', '</a>');
+ },
+ theDisplayedWebsitesAreSelectedText: function theDisplayedWebsitesAreSelectedText() {
+ var text = Object(external_CoreHome_["translate"])('UsersManager_TheDisplayedWebsitesAreSelected', "<strong>".concat(this.siteAccess.length, "</strong>"));
+ return "".concat(text, " ");
+ },
+ clickToSelectAllText: function clickToSelectAllText() {
+ return Object(external_CoreHome_["translate"])('UsersManager_ClickToSelectAll', "<strong>".concat(this.totalEntries, "</strong>"));
+ },
+ allWebsitesAreSelectedText: function allWebsitesAreSelectedText() {
+ return Object(external_CoreHome_["translate"])('UsersManager_AllWebsitesAreSelected', "<strong>".concat(this.totalEntries, "</strong>"));
+ },
+ clickToSelectDisplayedWebsitesText: function clickToSelectDisplayedWebsitesText() {
+ return Object(external_CoreHome_["translate"])('UsersManager_ClickToSelectDisplayedWebsites', "<strong>".concat(this.siteAccess.length, "</strong>"));
+ },
+ deletePermConfirmSingleText: function deletePermConfirmSingleText() {
+ return Object(external_CoreHome_["translate"])('UsersManager_DeletePermConfirmSingle', "<strong>".concat(this.userLogin, "</strong>"), "<strong>".concat(this.siteAccessToChangeName, "</strong>"));
+ },
+ deletePermConfirmMultipleText: function deletePermConfirmMultipleText() {
+ return Object(external_CoreHome_["translate"])('UsersManager_DeletePermConfirmMultiple', "<strong>".concat(this.userLogin, "</strong>"), "<strong>".concat(this.affectedSitesCount, "</strong>"));
+ },
+ changePermToSiteConfirmSingleText: function changePermToSiteConfirmSingleText() {
+ return Object(external_CoreHome_["translate"])('UsersManager_ChangePermToSiteConfirmSingle', "<strong>".concat(this.userLogin, "</strong>"), "<strong>".concat(this.siteAccessToChangeName, "</strong>"), "<strong>".concat(this.getRoleDisplay(this.roleToChangeTo), "</strong>"));
+ },
+ changePermToSiteConfirmMultipleText: function changePermToSiteConfirmMultipleText() {
+ return Object(external_CoreHome_["translate"])('UsersManager_ChangePermToSiteConfirmMultiple', "<strong>".concat(this.userLogin, "</strong>"), "<strong>".concat(this.affectedSitesCount, "</strong>"), "<strong>".concat(this.getRoleDisplay(this.roleToChangeTo), "</strong>"));
+ },
+ changePermToAllSitesConfirmText: function changePermToAllSitesConfirmText() {
+ return Object(external_CoreHome_["translate"])('UsersManager_ChangePermToAllSitesConfirm', "<strong>".concat(this.userLogin, "</strong>"), "<strong>".concat(this.getRoleDisplay(this.allWebsitesAccssLevelSet), "</strong>"));
+ },
+ paginationLowerBound: function paginationLowerBound() {
+ return this.offset + 1;
+ },
+ paginationUpperBound: function paginationUpperBound() {
+ if (!this.totalEntries) {
+ return '?';
+ }
+
+ return Math.min(this.offset + this.limit, this.totalEntries);
+ },
+ filteredAccessLevels: function filteredAccessLevels() {
+ return this.accessLevels.filter(function (entry) {
+ return entry.key !== 'superuser';
+ });
+ },
+ filteredSelectAccessLevels: function filteredSelectAccessLevels() {
+ return this.filterAccessLevels.filter(function (entry) {
+ return entry.key !== 'superuser';
+ });
+ },
+ selectedRowsCount: function selectedRowsCount() {
+ var selectedRowKeyCount = 0;
+ Object.values(this.selectedRows).forEach(function (v) {
+ if (v) {
+ selectedRowKeyCount += 1;
+ }
+ });
+ return selectedRowKeyCount;
+ },
+ affectedSitesCount: function affectedSitesCount() {
+ if (this.areAllResultsSelected) {
+ return this.totalEntries;
+ }
+
+ return this.selectedRowsCount;
+ },
+ allPropsWatch: function allPropsWatch() {
+ // see https://github.com/vuejs/vue/issues/844#issuecomment-390500758
+ // eslint-disable-next-line no-sequences
+ return this.userLogin, this.limit, this.accessLevels, this.filterAccessLevels, Date.now();
+ },
+ siteAccessToChangeName: function siteAccessToChangeName() {
+ return this.siteAccessToChange ? external_CoreHome_["Matomo"].helper.htmlEntities(this.siteAccessToChange.site_name) : '';
+ },
+ paginationText: function paginationText() {
+ var text = Object(external_CoreHome_["translate"])('General_Pagination', "".concat(this.paginationLowerBound), "".concat(this.paginationUpperBound), "".concat(this.totalEntries));
+ return " ".concat(text, " ");
+ }
+ }
+}));
+// CONCATENATED MODULE: ./plugins/UsersManager/vue/src/UserPermissionsEdit/UserPermissionsEdit.vue?vue&type=script&lang=ts
+
+// CONCATENATED MODULE: ./plugins/UsersManager/vue/src/UserPermissionsEdit/UserPermissionsEdit.vue
+
+
+
+UserPermissionsEditvue_type_script_lang_ts.render = UserPermissionsEditvue_type_template_id_b8ef996c_render
+
+/* harmony default export */ var UserPermissionsEdit = (UserPermissionsEditvue_type_script_lang_ts);
+// CONCATENATED MODULE: ./plugins/UsersManager/vue/src/UserPermissionsEdit/UserPermissionsEdit.adapter.ts
+/*!
+ * Matomo - free/libre analytics platform
+ *
+ * @link https://matomo.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ */
+
+
+/* harmony default export */ var UserPermissionsEdit_adapter = (Object(external_CoreHome_["createAngularJsAdapter"])({
+ component: UserPermissionsEdit,
+ scope: {
+ userLogin: {
+ angularJsBind: '<'
+ },
+ limit: {
+ angularJsBind: '<'
+ },
+ onUserHasAccessDetected: {
+ angularJsBind: '&',
+ vue: 'userHasAccessDetected'
+ },
+ onAccessChange: {
+ angularJsBind: '&',
+ vue: 'accessChanged'
+ },
+ accessLevels: {
+ angularJsBind: '<'
+ },
+ filterAccessLevels: {
+ angularJsBind: '<'
+ }
+ },
+ directiveName: 'piwikUserPermissionsEdit',
+ restrict: 'E'
+}));
// CONCATENATED MODULE: ./plugins/UsersManager/vue/src/index.ts
/*!
* Matomo - free/libre analytics platform
@@ -584,6 +1434,8 @@ CapabilitiesEditvue_type_script_lang_ts.render = render
*/
+
+
// CONCATENATED MODULE: ./node_modules/@vue/cli-service/lib/commands/build/entry-lib-no-default.js
diff --git a/plugins/UsersManager/vue/dist/UsersManager.umd.min.js b/plugins/UsersManager/vue/dist/UsersManager.umd.min.js
index 2a1f272e0c..64e638b725 100644
--- a/plugins/UsersManager/vue/dist/UsersManager.umd.min.js
+++ b/plugins/UsersManager/vue/dist/UsersManager.umd.min.js
@@ -1,14 +1,20 @@
-(function(e,i){"object"===typeof exports&&"object"===typeof module?module.exports=i(require("CoreHome"),require("vue"),require("CorePluginsAdmin")):"function"===typeof define&&define.amd?define(["CoreHome",,"CorePluginsAdmin"],i):"object"===typeof exports?exports["UsersManager"]=i(require("CoreHome"),require("vue"),require("CorePluginsAdmin")):e["UsersManager"]=i(e["CoreHome"],e["Vue"],e["CorePluginsAdmin"])})("undefined"!==typeof self?self:this,(function(e,i,t){return function(e){var i={};function t(a){if(i[a])return i[a].exports;var n=i[a]={i:a,l:!1,exports:{}};return e[a].call(n.exports,n,n.exports,t),n.l=!0,n.exports}return t.m=e,t.c=i,t.d=function(e,i,a){t.o(e,i)||Object.defineProperty(e,i,{enumerable:!0,get:a})},t.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},t.t=function(e,i){if(1&i&&(e=t(e)),8&i)return e;if(4&i&&"object"===typeof e&&e&&e.__esModule)return e;var a=Object.create(null);if(t.r(a),Object.defineProperty(a,"default",{enumerable:!0,value:e}),2&i&&"string"!=typeof e)for(var n in e)t.d(a,n,function(i){return e[i]}.bind(null,n));return a},t.n=function(e){var i=e&&e.__esModule?function(){return e["default"]}:function(){return e};return t.d(i,"a",i),i},t.o=function(e,i){return Object.prototype.hasOwnProperty.call(e,i)},t.p="plugins/UsersManager/vue/dist/",t(t.s="fae3")}({"19dc":function(i,t){i.exports=e},"8bbf":function(e,t){e.exports=i},a5a2:function(e,i){e.exports=t},fae3:function(e,i,t){"use strict";if(t.r(i),t.d(i,"CapabilitiesEdit",(function(){return B})),"undefined"!==typeof window){var a=window.document.currentScript,n=a&&a.src.match(/(.+\/)[^/]+\.js(\?.*)?$/);n&&(t.p=n[1])}var o=t("19dc"),l=t("8bbf"),r=["title"],s=["onClick"],c={key:0,class:"addCapability"},u={class:"ui-confirm confirmCapabilityToggle modal",ref:"confirmCapabilityToggleModal"},d={class:"modal-content"},p=["innerHTML"],b=["innerHTML"],f={class:"modal-footer"};function m(e,i,t,a,n,o){var m=Object(l["resolveComponent"])("Field");return Object(l["openBlock"])(),Object(l["createElementBlock"])("div",{class:Object(l["normalizeClass"])(["capabilitiesEdit",{busy:e.isBusy}])},[(Object(l["openBlock"])(!0),Object(l["createElementBlock"])(l["Fragment"],null,Object(l["renderList"])(e.actualCapabilities,(function(i){return Object(l["openBlock"])(),Object(l["createElementBlock"])("div",{key:i.id,class:"chip"},[Object(l["createElementVNode"])("span",{class:"capability-name",title:"".concat(i.description," ").concat(e.isIncludedInRole(i)?"<br/><br/>".concat(e.translate("UsersManager_IncludedInUsersRole")):"")},Object(l["toDisplayString"])(i.category)+": "+Object(l["toDisplayString"])(i.name),9,r),e.isIncludedInRole(i)?Object(l["createCommentVNode"])("",!0):(Object(l["openBlock"])(),Object(l["createElementBlock"])("span",{key:0,class:"icon-close",onClick:function(t){e.capabilityToRemoveId=i.id,e.onToggleCapability(!1)}},null,8,s))])})),128)),e.availableCapabilitiesGrouped.length?(Object(l["openBlock"])(),Object(l["createElementBlock"])("div",c,[Object(l["createVNode"])(m,{"model-value":e.capabilityToAddId,"onUpdate:modelValue":i[0]||(i[0]=function(i){e.capabilityToAddId=i,e.onToggleCapability(!0)}),disabled:e.isBusy,uicontrol:"expandable-select",name:"add_capability","full-width":!0,options:e.availableCapabilitiesGrouped},null,8,["model-value","disabled","options"])])):Object(l["createCommentVNode"])("",!0),Object(l["createElementVNode"])("div",u,[Object(l["createElementVNode"])("div",d,[e.isAddingCapability?(Object(l["openBlock"])(),Object(l["createElementBlock"])("h2",{key:0,innerHTML:e.$sanitize(e.confirmAddCapabilityToggleContent)},null,8,p)):Object(l["createCommentVNode"])("",!0),e.isAddingCapability?Object(l["createCommentVNode"])("",!0):(Object(l["openBlock"])(),Object(l["createElementBlock"])("h2",{key:1,innerHTML:e.$sanitize(e.confirmCapabilityToggleContent)},null,8,b))]),Object(l["createElementVNode"])("div",f,[Object(l["createElementVNode"])("a",{href:"",class:"modal-action modal-close btn",onClick:i[1]||(i[1]=Object(l["withModifiers"])((function(i){return e.toggleCapability()}),["prevent"]))},Object(l["toDisplayString"])(e.translate("General_Yes")),1),Object(l["createElementVNode"])("a",{href:"",class:"modal-action modal-close modal-no",onClick:i[2]||(i[2]=Object(l["withModifiers"])((function(i){e.capabilityToAddOrRemove=null,e.capabilityToAddId=null,e.capabilityToRemoveId=null}),["prevent"]))},Object(l["toDisplayString"])(e.translate("General_No")),1)])],512)],2)}var g=t("a5a2");function h(e,i){if(!(e instanceof i))throw new TypeError("Cannot call a class as a function")}function y(e,i){for(var t=0;t<i.length;t++){var a=i[t];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}function v(e,i,t){return i&&y(e.prototype,i),t&&y(e,t),e}function C(e,i,t){return i in e?Object.defineProperty(e,i,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[i]=t,e}
+(function(e,t){"object"===typeof exports&&"object"===typeof module?module.exports=t(require("CoreHome"),require("vue"),require("CorePluginsAdmin")):"function"===typeof define&&define.amd?define(["CoreHome",,"CorePluginsAdmin"],t):"object"===typeof exports?exports["UsersManager"]=t(require("CoreHome"),require("vue"),require("CorePluginsAdmin")):e["UsersManager"]=t(e["CoreHome"],e["Vue"],e["CorePluginsAdmin"])})("undefined"!==typeof self?self:this,(function(e,t,i){return function(e){var t={};function i(n){if(t[n])return t[n].exports;var s=t[n]={i:n,l:!1,exports:{}};return e[n].call(s.exports,s,s.exports,i),s.l=!0,s.exports}return i.m=e,i.c=t,i.d=function(e,t,n){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},i.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(i.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var s in e)i.d(n,s,function(t){return e[t]}.bind(null,s));return n},i.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="plugins/UsersManager/vue/dist/",i(i.s="fae3")}({"19dc":function(t,i){t.exports=e},"8bbf":function(e,i){e.exports=t},a5a2:function(e,t){e.exports=i},fae3:function(e,t,i){"use strict";if(i.r(t),i.d(t,"CapabilitiesEdit",(function(){return E})),i.d(t,"UserPermissionsEdit",(function(){return Pe})),"undefined"!==typeof window){var n=window.document.currentScript,s=n&&n.src.match(/(.+\/)[^/]+\.js(\?.*)?$/);s&&(i.p=s[1])}var c=i("19dc"),l=i("8bbf"),a=["title"],o=["onClick"],r={key:0,class:"addCapability"},d={class:"ui-confirm confirmCapabilityToggle modal",ref:"confirmCapabilityToggleModal"},u={class:"modal-content"},b=["innerHTML"],m=["innerHTML"],p={class:"modal-footer"};function h(e,t,i,n,s,c){var h=Object(l["resolveComponent"])("Field");return Object(l["openBlock"])(),Object(l["createElementBlock"])("div",{class:Object(l["normalizeClass"])(["capabilitiesEdit",{busy:e.isBusy}])},[(Object(l["openBlock"])(!0),Object(l["createElementBlock"])(l["Fragment"],null,Object(l["renderList"])(e.actualCapabilities,(function(t){return Object(l["openBlock"])(),Object(l["createElementBlock"])("div",{key:t.id,class:"chip"},[Object(l["createElementVNode"])("span",{class:"capability-name",title:"".concat(t.description," ").concat(e.isIncludedInRole(t)?"<br/><br/>".concat(e.translate("UsersManager_IncludedInUsersRole")):"")},Object(l["toDisplayString"])(t.category)+": "+Object(l["toDisplayString"])(t.name),9,a),e.isIncludedInRole(t)?Object(l["createCommentVNode"])("",!0):(Object(l["openBlock"])(),Object(l["createElementBlock"])("span",{key:0,class:"icon-close",onClick:function(i){e.capabilityToRemoveId=t.id,e.onToggleCapability(!1)}},null,8,o))])})),128)),e.availableCapabilitiesGrouped.length?(Object(l["openBlock"])(),Object(l["createElementBlock"])("div",r,[Object(l["createVNode"])(h,{"model-value":e.capabilityToAddId,"onUpdate:modelValue":t[0]||(t[0]=function(t){e.capabilityToAddId=t,e.onToggleCapability(!0)}),disabled:e.isBusy,uicontrol:"expandable-select",name:"add_capability","full-width":!0,options:e.availableCapabilitiesGrouped},null,8,["model-value","disabled","options"])])):Object(l["createCommentVNode"])("",!0),Object(l["createElementVNode"])("div",d,[Object(l["createElementVNode"])("div",u,[e.isAddingCapability?(Object(l["openBlock"])(),Object(l["createElementBlock"])("h2",{key:0,innerHTML:e.$sanitize(e.confirmAddCapabilityToggleContent)},null,8,b)):Object(l["createCommentVNode"])("",!0),e.isAddingCapability?Object(l["createCommentVNode"])("",!0):(Object(l["openBlock"])(),Object(l["createElementBlock"])("h2",{key:1,innerHTML:e.$sanitize(e.confirmCapabilityToggleContent)},null,8,m))]),Object(l["createElementVNode"])("div",p,[Object(l["createElementVNode"])("a",{href:"",class:"modal-action modal-close btn",onClick:t[1]||(t[1]=Object(l["withModifiers"])((function(t){return e.toggleCapability()}),["prevent"]))},Object(l["toDisplayString"])(e.translate("General_Yes")),1),Object(l["createElementVNode"])("a",{href:"",class:"modal-action modal-close modal-no",onClick:t[2]||(t[2]=Object(l["withModifiers"])((function(t){e.capabilityToAddOrRemove=null,e.capabilityToAddId=null,e.capabilityToRemoveId=null}),["prevent"]))},Object(l["toDisplayString"])(e.translate("General_No")),1)])],512)],2)}var f=i("a5a2");function g(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function O(e,t){for(var i=0;i<t.length;i++){var n=t[i];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function j(e,t,i){return t&&O(e.prototype,t),i&&O(e,i),e}function v(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}
/*!
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
- */var O=function(){function e(){var i=this;h(this,e),C(this,"privateState",Object(l["reactive"])({isLoading:!1,capabilities:[]})),C(this,"state",Object(l["computed"])((function(){return Object(l["readonly"])(i.privateState)}))),C(this,"capabilities",Object(l["computed"])((function(){return i.state.value.capabilities}))),C(this,"isLoading",Object(l["computed"])((function(){return i.state.value.isLoading}))),C(this,"fetchPromise",void 0),this.fetchCapabilities()}return v(e,[{key:"fetchCapabilities",value:function(){var e=this;return this.fetchPromise||(this.privateState.isLoading=!0,this.fetchPromise=o["AjaxHelper"].fetch({method:"UsersManager.getAvailableCapabilities"}).then((function(i){return e.privateState.capabilities=i,e.capabilities.value})).finally((function(){e.privateState.isLoading=!1}))),this.fetchPromise}}]),e}(),j=Object(o["lazyInitSingleton"])(O),T=window,A=T.$,R=Object(l["defineComponent"])({props:{idsite:[String,Number],siteName:{type:String,required:!0},userLogin:{type:String,required:!0},userRole:{type:String,required:!0},capabilities:Array},components:{Field:g["Field"]},data:function(){return{theCapabilities:this.capabilities||[],isBusy:!1,isAddingCapability:!1,capabilityToAddId:null,capabilityToRemoveId:null,capabilityToAddOrRemove:null}},emits:["change"],watch:{capabilities:function(e){e&&(this.theCapabilities=e)}},created:function(){var e=this;this.capabilities?this.theCapabilities=this.capabilities:(this.isBusy=!0,o["AjaxHelper"].fetch({method:"UsersManager.getUsersPlusRole",limit:"1",filter_search:this.userLogin}).then((function(e){return e&&e.capabilities?e.capabilities:[]})).then((function(i){e.theCapabilities=i})).finally((function(){e.isBusy=!1})))},methods:{onToggleCapability:function(e){var i=this;this.isAddingCapability=e;var t=e?this.capabilityToAddId:this.capabilityToRemoveId;this.capabilityToAddOrRemove=null,this.availableCapabilities.forEach((function(e){e.id===t&&(i.capabilityToAddOrRemove=e)})),this.$refs.confirmCapabilityToggleModal&&A(this.$refs.confirmCapabilityToggleModal).modal({dismissible:!1,yes:function(){return null}}).modal("open")},toggleCapability:function(){this.isAddingCapability?this.addCapability(this.capabilityToAddOrRemove):this.removeCapability(this.capabilityToAddOrRemove)},isIncludedInRole:function(e){return-1!==(e.includedInRoles||[]).indexOf(this.userRole)},getCapabilitiesList:function(){var e=this,i=[];return this.availableCapabilities.forEach((function(t){e.isIncludedInRole(t)||e.capabilitiesSet[t.id]&&i.push(t.id)})),i},addCapability:function(e){var i=this;this.isBusy=!0,o["AjaxHelper"].post({method:"UsersManager.addCapabilities"},{userLogin:this.userLogin,capabilities:e.id,idSites:this.idsite}).then((function(){i.$emit("change",i.getCapabilitiesList())})).finally((function(){i.isBusy=!1,i.capabilityToAddOrRemove=null,i.capabilityToAddId=null,i.capabilityToRemoveId=null}))},removeCapability:function(e){var i=this;this.isBusy=!0,o["AjaxHelper"].post({method:"UsersManager.removeCapabilities"},{userLogin:this.userLogin,capabilities:e.id,idSites:this.idsite}).then((function(){i.$emit("change",i.getCapabilitiesList())})).finally((function(){i.isBusy=!1,i.capabilityToAddOrRemove=null,i.capabilityToAddId=null,i.capabilityToRemoveId=null}))}},computed:{availableCapabilities:function(){return j.capabilities.value},confirmAddCapabilityToggleContent:function(){return Object(o["translate"])("UsersManager_AreYouSureAddCapability","<strong>".concat(this.userLogin,"</strong>"),"<strong>".concat(this.capabilityToAddOrRemove?this.capabilityToAddOrRemove.name:"","</strong>"),"<strong>".concat(this.siteNameText,"</strong>"))},confirmCapabilityToggleContent:function(){return Object(o["translate"])("UsersManager_AreYouSureRemoveCapability","<strong>".concat(this.capabilityToAddOrRemove?this.capabilityToAddOrRemove.name:"","</strong>"),"<strong>".concat(this.userLogin,"</strong>"),"<strong>".concat(this.siteNameText,"</strong>"))},siteNameText:function(){return o["Matomo"].helper.htmlEntities(this.siteName)},availableCapabilitiesGrouped:function(){var e=this,i=this.availableCapabilities.filter((function(i){return!e.capabilitiesSet[i.id]})).map((function(e){return{group:e.category,key:e.id,value:e.name,tooltip:e.description}}));return i.sort((function(e,i){return e.group===i.group?e.value===i.value?0:e.value<i.value?-1:1:e.group<i.group?-1:1})),i},capabilitiesSet:function(){var e=this,i={},t=this.theCapabilities;return(t||[]).forEach((function(e){i[e]=!0})),(this.availableCapabilities||[]).forEach((function(t){e.isIncludedInRole(t)&&(i[t.id]=!0)})),i},actualCapabilities:function(){var e=this.capabilitiesSet;return this.availableCapabilities.filter((function(i){return!!e[i.id]}))}}});R.render=m;var B=R;
+ */var C=function(){function e(){var t=this;g(this,e),v(this,"privateState",Object(l["reactive"])({isLoading:!1,capabilities:[]})),v(this,"state",Object(l["computed"])((function(){return Object(l["readonly"])(t.privateState)}))),v(this,"capabilities",Object(l["computed"])((function(){return t.state.value.capabilities}))),v(this,"isLoading",Object(l["computed"])((function(){return t.state.value.isLoading}))),v(this,"fetchPromise",void 0),this.fetchCapabilities()}return j(e,[{key:"fetchCapabilities",value:function(){var e=this;return this.fetchPromise||(this.privateState.isLoading=!0,this.fetchPromise=c["AjaxHelper"].fetch({method:"UsersManager.getAvailableCapabilities"}).then((function(t){return e.privateState.capabilities=t,e.capabilities.value})).finally((function(){e.privateState.isLoading=!1}))),this.fetchPromise}}]),e}(),A=Object(c["lazyInitSingleton"])(C),y=window,T=y.$,N=Object(l["defineComponent"])({props:{idsite:[String,Number],siteName:{type:String,required:!0},userLogin:{type:String,required:!0},userRole:{type:String,required:!0},capabilities:Array},components:{Field:f["Field"]},data:function(){return{theCapabilities:this.capabilities||[],isBusy:!1,isAddingCapability:!1,capabilityToAddId:null,capabilityToRemoveId:null,capabilityToAddOrRemove:null}},emits:["change"],watch:{capabilities:function(e){e&&(this.theCapabilities=e)}},created:function(){var e=this;this.capabilities?this.theCapabilities=this.capabilities:(this.isBusy=!0,c["AjaxHelper"].fetch({method:"UsersManager.getUsersPlusRole",limit:"1",filter_search:this.userLogin}).then((function(e){return e&&e.capabilities?e.capabilities:[]})).then((function(t){e.theCapabilities=t})).finally((function(){e.isBusy=!1})))},methods:{onToggleCapability:function(e){var t=this;this.isAddingCapability=e;var i=e?this.capabilityToAddId:this.capabilityToRemoveId;this.capabilityToAddOrRemove=null,this.availableCapabilities.forEach((function(e){e.id===i&&(t.capabilityToAddOrRemove=e)})),this.$refs.confirmCapabilityToggleModal&&T(this.$refs.confirmCapabilityToggleModal).modal({dismissible:!1,yes:function(){return null}}).modal("open")},toggleCapability:function(){this.isAddingCapability?this.addCapability(this.capabilityToAddOrRemove):this.removeCapability(this.capabilityToAddOrRemove)},isIncludedInRole:function(e){return-1!==(e.includedInRoles||[]).indexOf(this.userRole)},getCapabilitiesList:function(){var e=this,t=[];return this.availableCapabilities.forEach((function(i){e.isIncludedInRole(i)||e.capabilitiesSet[i.id]&&t.push(i.id)})),t},addCapability:function(e){var t=this;this.isBusy=!0,c["AjaxHelper"].post({method:"UsersManager.addCapabilities"},{userLogin:this.userLogin,capabilities:e.id,idSites:this.idsite}).then((function(){t.$emit("change",t.getCapabilitiesList())})).finally((function(){t.isBusy=!1,t.capabilityToAddOrRemove=null,t.capabilityToAddId=null,t.capabilityToRemoveId=null}))},removeCapability:function(e){var t=this;this.isBusy=!0,c["AjaxHelper"].post({method:"UsersManager.removeCapabilities"},{userLogin:this.userLogin,capabilities:e.id,idSites:this.idsite}).then((function(){t.$emit("change",t.getCapabilitiesList())})).finally((function(){t.isBusy=!1,t.capabilityToAddOrRemove=null,t.capabilityToAddId=null,t.capabilityToRemoveId=null}))}},computed:{availableCapabilities:function(){return A.capabilities.value},confirmAddCapabilityToggleContent:function(){return Object(c["translate"])("UsersManager_AreYouSureAddCapability","<strong>".concat(this.userLogin,"</strong>"),"<strong>".concat(this.capabilityToAddOrRemove?this.capabilityToAddOrRemove.name:"","</strong>"),"<strong>".concat(this.siteNameText,"</strong>"))},confirmCapabilityToggleContent:function(){return Object(c["translate"])("UsersManager_AreYouSureRemoveCapability","<strong>".concat(this.capabilityToAddOrRemove?this.capabilityToAddOrRemove.name:"","</strong>"),"<strong>".concat(this.userLogin,"</strong>"),"<strong>".concat(this.siteNameText,"</strong>"))},siteNameText:function(){return c["Matomo"].helper.htmlEntities(this.siteName)},availableCapabilitiesGrouped:function(){var e=this,t=this.availableCapabilities.filter((function(t){return!e.capabilitiesSet[t.id]})).map((function(e){return{group:e.category,key:e.id,value:e.name,tooltip:e.description}}));return t.sort((function(e,t){return e.group===t.group?e.value===t.value?0:e.value<t.value?-1:1:e.group<t.group?-1:1})),t},capabilitiesSet:function(){var e=this,t={},i=this.theCapabilities;return(i||[]).forEach((function(e){t[e]=!0})),(this.availableCapabilities||[]).forEach((function(i){e.isIncludedInRole(i)&&(t[i.id]=!0)})),t},actualCapabilities:function(){var e=this.capabilitiesSet;return this.availableCapabilities.filter((function(t){return!!e[t.id]}))}}});N.render=h;var E=N,S=(Object(c["createAngularJsAdapter"])({component:E,scope:{idsite:{angularJsBind:"<"},siteName:{angularJsBind:"<"},userLogin:{angularJsBind:"<"},userRole:{angularJsBind:"<"},capabilities:{angularJsBind:"<"},onCapabilitiesChange:{angularJsBind:"&",vue:"change"}},directiveName:"piwikCapabilitiesEdit",restrict:"E",$inject:["$timeout"],events:{change:function(e,t,i,n,s,c,l){l((function(){i.onCapabilitiesChange&&i.onCapabilitiesChange.call({capabilities:e})}))}}}),{key:0,class:"row"}),k={class:"row to-all-websites"},V={class:"col s12"},M={style:{"margin-right":"3.5px"}},L={id:"all-sites-access-select",style:{"margin-right":"3.5px"}},x=Object(l["createElementVNode"])("p",null," ",-1),w={class:"filters row"},B={class:"col s12 m12 l8"},R={class:"input-field bulk-actions",style:{"margin-right":"3.5px"}},_={id:"user-permissions-edit-bulk-actions",class:"dropdown-content"},H={class:"dropdown-trigger","data-target":"user-permissions-bulk-set-access"},D={id:"user-permissions-bulk-set-access",class:"dropdown-content"},U=["onClick"],P={class:"input-field site-filter",style:{"margin-right":"3.5px"}},F=["value","placeholder"],I={class:"input-field access-filter",style:{"margin-right":"3.5px"}},$={key:0,class:"col s12 m12 l4 sites-for-permission-pagination-container"},G={class:"sites-for-permission-pagination"},z={class:"counter"},W=["textContent"],q={class:"roles-help-notification"},J=["innerHTML"],Y={class:"capabilities-help-notification"},K={id:"sitesForPermission"},Q={class:"select-cell"},X={class:"checkbox-container"},Z=["checked"],ee=Object(l["createElementVNode"])("span",null,null,-1),te={class:"role_header"},ie=["innerHTML"],ne=Object(l["createElementVNode"])("span",{class:"icon-help"},null,-1),se=[ne],ce={class:"capabilities_header"},le=["innerHTML"],ae=Object(l["createElementVNode"])("span",{class:"icon-help"},null,-1),oe=[ae],re={key:0,class:"select-all-row"},de={colspan:"4"},ue={key:0},be=["innerHTML"],me=["innerHTML"],pe={key:1},he=["innerHTML"],fe=["innerHTML"],ge={class:"select-cell"},Oe={class:"checkbox-container"},je=["id","onUpdate:modelValue"],ve=Object(l["createElementVNode"])("span",null,null,-1),Ce={class:"role-select"},Ae={class:"delete-access-confirm-modal modal",ref:"deleteAccessConfirmModal"},ye={class:"modal-content"},Te=["innerHTML"],Ne=["innerHTML"],Ee={class:"modal-footer"},Se={class:"change-access-confirm-modal modal",ref:"changeAccessConfirmModal"},ke={class:"modal-content"},Ve=["innerHTML"],Me=["innerHTML"],Le={class:"modal-footer"},xe={class:"confirm-give-access-all-sites modal",ref:"confirmGiveAccessAllSitesModal"},we={class:"modal-content"},Be=["innerHTML"],Re={class:"modal-footer"};
/*!
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
- */Object(o["createAngularJsAdapter"])({component:B,scope:{idsite:{angularJsBind:"<"},siteName:{angularJsBind:"<"},userLogin:{angularJsBind:"<"},userRole:{angularJsBind:"<"},capabilities:{angularJsBind:"<"},onCapabilitiesChange:{angularJsBind:"&",vue:"change"}},directiveName:"piwikCapabilitiesEdit",restrict:"E",$inject:["$timeout"],events:{change:function(e,i,t,a,n,o,l){l((function(){t.onCapabilitiesChange&&t.onCapabilitiesChange.call({capabilities:e})}))}}})}})}));
+ */function _e(e,t,i,n,s,c){var a=Object(l["resolveComponent"])("Notification"),o=Object(l["resolveComponent"])("Field"),r=Object(l["resolveComponent"])("CapabilitiesEdit"),d=Object(l["resolveDirective"])("dropdown-menu"),u=Object(l["resolveDirective"])("content-table");return Object(l["openBlock"])(),Object(l["createElementBlock"])("div",{class:Object(l["normalizeClass"])(["userPermissionsEdit",{loading:e.isLoadingAccess}])},[e.hasAccessToAtLeastOneSite?Object(l["createCommentVNode"])("",!0):(Object(l["openBlock"])(),Object(l["createElementBlock"])("div",S,[Object(l["createElementVNode"])("div",null,[Object(l["createVNode"])(a,{context:"warning",type:"transient",noclear:!0},{default:Object(l["withCtx"])((function(){return[Object(l["createElementVNode"])("strong",null,Object(l["toDisplayString"])(e.translate("General_Warning"))+":",1),Object(l["createTextVNode"])(" "+Object(l["toDisplayString"])(e.translate("UsersManager_NoAccessWarning")),1)]})),_:1})])])),Object(l["createElementVNode"])("div",k,[Object(l["createElementVNode"])("div",V,[Object(l["createElementVNode"])("div",null,[Object(l["createElementVNode"])("span",M,Object(l["toDisplayString"])(e.translate("UsersManager_GiveAccessToAll"))+":",1),Object(l["createElementVNode"])("div",L,[Object(l["createVNode"])(o,{modelValue:e.allWebsitesAccssLevelSet,"onUpdate:modelValue":t[0]||(t[0]=function(t){return e.allWebsitesAccssLevelSet=t}),uicontrol:"select",options:e.filteredAccessLevels,"full-width":!0},null,8,["modelValue","options"])]),Object(l["createElementVNode"])("a",{href:"",class:Object(l["normalizeClass"])(["btn",{disabled:e.isGivingAccessToAllSites}]),onClick:t[1]||(t[1]=Object(l["withModifiers"])((function(t){return e.showChangeAccessAllSitesModal()}),["prevent"]))},Object(l["toDisplayString"])(e.translate("General_Apply")),3)]),x,Object(l["createElementVNode"])("p",null,Object(l["toDisplayString"])(e.translate("UsersManager_OrManageIndividually"))+":",1)])]),Object(l["createElementVNode"])("div",w,[Object(l["createElementVNode"])("div",B,[Object(l["createElementVNode"])("div",R,[Object(l["withDirectives"])(Object(l["createElementVNode"])("a",{class:Object(l["normalizeClass"])(["dropdown-trigger btn",{disabled:e.isBulkActionsDisabled}]),href:"","data-target":"user-permissions-edit-bulk-actions"},[Object(l["createTextVNode"])(Object(l["toDisplayString"])(e.translate("UsersManager_BulkActions")),1)],2),[[d,{activates:"#user-permissions-edit-bulk-actions"}]]),Object(l["createElementVNode"])("ul",_,[Object(l["createElementVNode"])("li",null,[Object(l["withDirectives"])(Object(l["createElementVNode"])("a",H,[Object(l["createTextVNode"])(Object(l["toDisplayString"])(e.translate("UsersManager_SetPermission")),1)],512),[[d,{activates:"#user-permissions-bulk-set-access"}]]),Object(l["createElementVNode"])("ul",D,[(Object(l["openBlock"])(!0),Object(l["createElementBlock"])(l["Fragment"],null,Object(l["renderList"])(e.filteredAccessLevels,(function(t){return Object(l["openBlock"])(),Object(l["createElementBlock"])("li",{key:t.key},[Object(l["createElementVNode"])("a",{href:"",onClick:Object(l["withModifiers"])((function(i){e.siteAccessToChange=null,e.roleToChangeTo=t.key,e.showChangeAccessConfirm()}),["prevent"])},Object(l["toDisplayString"])(t.value),9,U)])})),128))])]),Object(l["createElementVNode"])("li",null,[Object(l["createElementVNode"])("a",{href:"",onClick:t[2]||(t[2]=Object(l["withModifiers"])((function(t){e.siteAccessToChange=null,e.roleToChangeTo="noaccess",e.showRemoveAccessConfirm()}),["prevent"]))},Object(l["toDisplayString"])(e.translate("UsersManager_RemovePermissions")),1)])])]),Object(l["createElementVNode"])("div",P,[Object(l["createElementVNode"])("input",{type:"text",value:e.siteNameFilter,onKeydown:t[3]||(t[3]=function(t){e.onChangeSiteFilter(t)}),onChange:t[4]||(t[4]=function(t){e.onChangeSiteFilter(t)}),placeholder:e.translate("UsersManager_FilterByWebsite")},null,40,F)]),Object(l["createElementVNode"])("div",I,[Object(l["createElementVNode"])("div",null,[Object(l["createVNode"])(o,{modelValue:e.accessLevelFilter,"onUpdate:modelValue":t[5]||(t[5]=function(t){return e.accessLevelFilter=t}),uicontrol:"select",options:e.filteredSelectAccessLevels,"full-width":!0,placeholder:e.translate("UsersManager_FilterByAccess")},null,8,["modelValue","options","placeholder"])])])]),e.totalEntries>e.limit?(Object(l["openBlock"])(),Object(l["createElementBlock"])("div",$,[Object(l["createElementVNode"])("div",G,[Object(l["createElementVNode"])("a",{class:Object(l["normalizeClass"])(["prev",{disabled:e.offset<=0}])},[Object(l["createElementVNode"])("span",{class:"pointer",onClick:t[6]||(t[6]=function(t){return e.gotoPreviousPage()})},"« "+Object(l["toDisplayString"])(e.translate("General_Previous")),1)],2),Object(l["createElementVNode"])("span",z,[Object(l["createElementVNode"])("span",{textContent:Object(l["toDisplayString"])(e.paginationText)},null,8,W)]),Object(l["createElementVNode"])("a",{class:Object(l["normalizeClass"])(["next",{disabled:e.offset+e.limit>=e.totalEntries}])},[Object(l["createElementVNode"])("span",{class:"pointer",onClick:t[7]||(t[7]=function(t){return e.gotoNextPage()})},Object(l["toDisplayString"])(e.translate("General_Next"))+" »",1)],2)])])):Object(l["createCommentVNode"])("",!0)]),Object(l["createElementVNode"])("div",q,[e.isRoleHelpToggled?(Object(l["openBlock"])(),Object(l["createBlock"])(a,{key:0,context:"info",type:"persistent",noclear:!0},{default:Object(l["withCtx"])((function(){return[Object(l["createElementVNode"])("span",{innerHTML:e.$sanitize(e.rolesHelpText)},null,8,J)]})),_:1})):Object(l["createCommentVNode"])("",!0)]),Object(l["createElementVNode"])("div",Y,[e.isCapabilitiesHelpToggled?(Object(l["openBlock"])(),Object(l["createBlock"])(a,{key:0,context:"info",type:"persistent",noclear:!0},{default:Object(l["withCtx"])((function(){return[Object(l["createElementVNode"])("span",null,Object(l["toDisplayString"])(e.translate("UsersManager_CapabilitiesHelp")),1)]})),_:1})):Object(l["createCommentVNode"])("",!0)]),Object(l["withDirectives"])(Object(l["createElementVNode"])("table",K,[Object(l["createElementVNode"])("thead",null,[Object(l["createElementVNode"])("tr",null,[Object(l["createElementVNode"])("th",Q,[Object(l["createElementVNode"])("span",X,[Object(l["createElementVNode"])("label",null,[Object(l["createElementVNode"])("input",{type:"checkbox",id:"perm_edit_select_all",checked:e.isAllCheckboxSelected,onChange:t[8]||(t[8]=function(t){return e.onAllCheckboxChange(t)})},null,40,Z),ee])])]),Object(l["createElementVNode"])("th",null,Object(l["toDisplayString"])(e.translate("General_Name")),1),Object(l["createElementVNode"])("th",te,[Object(l["createElementVNode"])("span",{innerHTML:"".concat(e.translate("UsersManager_Role")," ")},null,8,ie),Object(l["createElementVNode"])("a",{href:"",class:Object(l["normalizeClass"])(["helpIcon",{sticky:e.isRoleHelpToggled}]),onClick:t[9]||(t[9]=Object(l["withModifiers"])((function(t){return e.isRoleHelpToggled=!e.isRoleHelpToggled}),["prevent"]))},se,2)]),Object(l["createElementVNode"])("th",ce,[Object(l["createElementVNode"])("span",{innerHTML:"".concat(e.translate("UsersManager_Capabilities")," ")},null,8,le),Object(l["createElementVNode"])("a",{href:"",class:Object(l["normalizeClass"])(["helpIcon",{sticky:e.isCapabilitiesHelpToggled}]),onClick:t[10]||(t[10]=Object(l["withModifiers"])((function(t){return e.isCapabilitiesHelpToggled=!e.isCapabilitiesHelpToggled}),["prevent"]))},oe,2)])])]),Object(l["createElementVNode"])("tbody",null,[e.isAllCheckboxSelected&&e.siteAccess.length<e.totalEntries?(Object(l["openBlock"])(),Object(l["createElementBlock"])("tr",re,[Object(l["createElementVNode"])("td",de,[e.areAllResultsSelected?Object(l["createCommentVNode"])("",!0):(Object(l["openBlock"])(),Object(l["createElementBlock"])("div",ue,[Object(l["createElementVNode"])("span",{innerHTML:e.$sanitize(e.theDisplayedWebsitesAreSelectedText),style:{"margin-right":"3.5px"}},null,8,be),Object(l["createElementVNode"])("a",{href:"#",onClick:t[11]||(t[11]=Object(l["withModifiers"])((function(t){return e.areAllResultsSelected=!e.areAllResultsSelected}),["prevent"])),innerHTML:e.$sanitize(e.clickToSelectAllText)},null,8,me)])),e.areAllResultsSelected?(Object(l["openBlock"])(),Object(l["createElementBlock"])("div",pe,[Object(l["createElementVNode"])("span",{innerHTML:e.$sanitize(e.allWebsitesAreSelectedText),style:{"margin-right":"3.5px"}},null,8,he),Object(l["createElementVNode"])("a",{href:"#",onClick:t[12]||(t[12]=Object(l["withModifiers"])((function(t){return e.areAllResultsSelected=!e.areAllResultsSelected}),["prevent"])),innerHTML:e.$sanitize(e.clickToSelectDisplayedWebsitesText)},null,8,fe)])):Object(l["createCommentVNode"])("",!0)])])):Object(l["createCommentVNode"])("",!0),(Object(l["openBlock"])(!0),Object(l["createElementBlock"])(l["Fragment"],null,Object(l["renderList"])(e.siteAccess,(function(i,n){return Object(l["openBlock"])(),Object(l["createElementBlock"])("tr",{key:i.idsite},[Object(l["createElementVNode"])("td",ge,[Object(l["createElementVNode"])("span",Oe,[Object(l["createElementVNode"])("label",null,[Object(l["withDirectives"])(Object(l["createElementVNode"])("input",{type:"checkbox",id:"perm_edit_select_row".concat(n),"onUpdate:modelValue":function(t){return e.selectedRows[n]=t},onClick:t[13]||(t[13]=function(t){return e.onRowSelected()})},null,8,je),[[l["vModelCheckbox"],e.selectedRows[n]]]),ve])])]),Object(l["createElementVNode"])("td",null,[Object(l["createElementVNode"])("span",null,Object(l["toDisplayString"])(i.site_name),1)]),Object(l["createElementVNode"])("td",null,[Object(l["createElementVNode"])("div",Ce,[Object(l["createVNode"])(o,{"model-value":i.role,"onUpdate:modelValue":function(t){e.onRoleChange(i,t)},uicontrol:"select",options:e.filteredAccessLevels,"full-width":!0},null,8,["model-value","onUpdate:modelValue","options"])])]),Object(l["createElementVNode"])("td",null,[Object(l["createElementVNode"])("div",null,[Object(l["createVNode"])(r,{idsite:i.idsite,"site-name":i.site_name,"user-login":e.userLogin,"user-role":i.role,capabilities:i.capabilities,onChange:t[14]||(t[14]=function(t){return e.fetchAccess()})},null,8,["idsite","site-name","user-login","user-role","capabilities"])])])])})),128))])],512),[[u]]),Object(l["createElementVNode"])("div",Ae,[Object(l["createElementVNode"])("div",ye,[e.siteAccessToChange?(Object(l["openBlock"])(),Object(l["createElementBlock"])("h3",{key:0,innerHTML:e.$sanitize(e.deletePermConfirmSingleText)},null,8,Te)):Object(l["createCommentVNode"])("",!0),e.siteAccessToChange?Object(l["createCommentVNode"])("",!0):(Object(l["openBlock"])(),Object(l["createElementBlock"])("p",{key:1,innerHTML:e.$sanitize(e.deletePermConfirmMultipleText)},null,8,Ne))]),Object(l["createElementVNode"])("div",Ee,[Object(l["createElementVNode"])("a",{href:"",class:"modal-action modal-close btn",onClick:t[15]||(t[15]=Object(l["withModifiers"])((function(t){return e.changeUserRole()}),["prevent"]))},Object(l["toDisplayString"])(e.translate("General_Yes")),1),Object(l["createElementVNode"])("a",{href:"",class:"modal-action modal-close modal-no",onClick:t[16]||(t[16]=Object(l["withModifiers"])((function(t){e.siteAccessToChange=null,e.roleToChangeTo=null}),["prevent"]))},Object(l["toDisplayString"])(e.translate("General_No")),1)])],512),Object(l["createElementVNode"])("div",Se,[Object(l["createElementVNode"])("div",ke,[e.siteAccessToChange?(Object(l["openBlock"])(),Object(l["createElementBlock"])("h3",{key:0,innerHTML:e.$sanitize(e.changePermToSiteConfirmSingleText)},null,8,Ve)):Object(l["createCommentVNode"])("",!0),e.siteAccessToChange?Object(l["createCommentVNode"])("",!0):(Object(l["openBlock"])(),Object(l["createElementBlock"])("p",{key:1,innerHTML:e.$sanitize(e.changePermToSiteConfirmMultipleText)},null,8,Me))]),Object(l["createElementVNode"])("div",Le,[Object(l["createElementVNode"])("a",{href:"",class:"modal-action modal-close btn",onClick:t[17]||(t[17]=Object(l["withModifiers"])((function(t){return e.changeUserRole()}),["prevent"]))},Object(l["toDisplayString"])(e.translate("General_Yes")),1),Object(l["createElementVNode"])("a",{href:"",class:"modal-action modal-close modal-no",onClick:t[18]||(t[18]=Object(l["withModifiers"])((function(t){e.siteAccessToChange.role=e.previousRole,e.siteAccessToChange=null,e.roleToChangeTo=null}),["prevent"]))},Object(l["toDisplayString"])(e.translate("General_No")),1)])],512),Object(l["createElementVNode"])("div",xe,[Object(l["createElementVNode"])("div",we,[Object(l["createElementVNode"])("h3",{innerHTML:e.$sanitize(e.changePermToAllSitesConfirmText)},null,8,Be),Object(l["createElementVNode"])("p",null,Object(l["toDisplayString"])(e.translate("UsersManager_ChangePermToAllSitesConfirm2")),1)]),Object(l["createElementVNode"])("div",Re,[Object(l["createElementVNode"])("a",{href:"",class:"modal-action modal-close btn",onClick:t[19]||(t[19]=Object(l["withModifiers"])((function(t){return e.giveAccessToAllSites()}),["prevent"]))},Object(l["toDisplayString"])(e.translate("General_Yes")),1),Object(l["createElementVNode"])("a",{href:"",class:"modal-action modal-close modal-no",onClick:t[20]||(t[20]=function(e){return e.preventDefault()})},Object(l["toDisplayString"])(e.translate("General_No")),1)])],512)],2)}var He=window,De=He.$,Ue=Object(l["defineComponent"])({props:{userLogin:{type:String,required:!0},limit:{type:Number,default:10},accessLevels:{type:Array,required:!0},filterAccessLevels:{type:Array,required:!0}},components:{Notification:c["Notification"],Field:f["Field"],CapabilitiesEdit:E},directives:{DropdownMenu:c["DropdownMenu"],ContentTable:c["ContentTable"]},data:function(){return{siteAccess:[],offset:0,totalEntries:null,accessLevelFilter:"",siteNameFilter:"",isLoadingAccess:!1,allWebsitesAccssLevelSet:"view",isAllCheckboxSelected:!1,selectedRows:{},isBulkActionsDisabled:!0,areAllResultsSelected:!1,previousRole:null,hasAccessToAtLeastOneSite:!0,isRoleHelpToggled:!1,isCapabilitiesHelpToggled:!1,isGivingAccessToAllSites:!1,roleToChangeTo:null,siteAccessToChange:null}},emits:["userHasAccessDetected","accessChanged"],created:function(){var e=this;this.onChangeSiteFilter=Object(c["debounce"])(this.onChangeSiteFilter,300),Object(l["watch"])((function(){return e.allPropsWatch}),(function(){e.limit&&e.fetchAccess()})),this.fetchAccess()},watch:{accessLevelFilter:function(){this.offset=0,this.fetchAccess()}},methods:{onAllCheckboxChange:function(e){var t=this;this.isAllCheckboxSelected=e.target.checked,this.isAllCheckboxSelected?(this.siteAccess.forEach((function(e,i){t.selectedRows[i]=!0})),this.isBulkActionsDisabled=!1):this.clearSelection()},clearSelection:function(){this.selectedRows={},this.areAllResultsSelected=!1,this.isBulkActionsDisabled=!0,this.isAllCheckboxSelected=!1,this.siteAccessToChange=null},onRowSelected:function(){var e=this;setTimeout((function(){var t=e.selectedRowsCount;e.isBulkActionsDisabled=0===t,e.isAllCheckboxSelected=t===e.siteAccess.length}))},fetchAccess:function(){var e=this;return this.isLoadingAccess=!0,c["AjaxHelper"].fetch({method:"UsersManager.getSitesAccessForUser",limit:this.limit,offset:this.offset,filter_search:this.siteNameFilter,filter_access:this.accessLevelFilter,userLogin:this.userLogin},{returnResponseObject:!0}).then((function(t){var i=t.getRequestHandle();e.isLoadingAccess=!1,e.siteAccess=i.responseJSON,e.totalEntries=parseInt(i.getResponseHeader("x-matomo-total-results"),10)||0,e.hasAccessToAtLeastOneSite=!!i.getResponseHeader("x-matomo-has-some"),e.$emit("userHasAccessDetected",{hasAccess:e.hasAccessToAtLeastOneSite}),e.clearSelection()})).catch((function(){e.isLoadingAccess=!1,e.clearSelection()}))},gotoPreviousPage:function(){this.offset=Math.max(0,this.offset-this.limit),this.fetchAccess()},gotoNextPage:function(){var e=this.offset+this.limit;e>=(this.totalEntries||0)||(this.offset=e,this.fetchAccess())},showRemoveAccessConfirm:function(){De(this.$refs.deleteAccessConfirmModal).modal({dismissible:!1}).modal("open")},changeUserRole:function(){var e=this,t=function(){var t=[];return Object.keys(e.selectedRows).forEach((function(i){e.selectedRows[i]&&e.siteAccess[i]&&t.push(e.siteAccess[i].idsite)})),t},i=function(){return c["AjaxHelper"].fetch({method:"UsersManager.getSitesAccessForUser",filter_search:e.siteNameFilter,filter_access:e.accessLevelFilter,userLogin:e.userLogin,filter_limit:"-1"}).then((function(e){return e.map((function(e){return e.idsite}))}))};return this.isLoadingAccess=!0,Promise.resolve().then((function(){return e.siteAccessToChange?[e.siteAccessToChange.idsite]:e.areAllResultsSelected?i():t()})).then((function(t){return c["AjaxHelper"].post({method:"UsersManager.setUserAccess"},{userLogin:e.userLogin,access:e.roleToChangeTo,idSites:t})})).catch((function(){})).then((function(){return e.$emit("accessChanged"),e.fetchAccess()}))},showChangeAccessConfirm:function(){De(this.$refs.changeAccessConfirmModal).modal({dismissible:!1}).modal("open")},getRoleDisplay:function(e){var t=null;return this.filteredAccessLevels.forEach((function(i){i.key===e&&(t=i.value)})),t},giveAccessToAllSites:function(){var e=this;this.isGivingAccessToAllSites=!0,c["AjaxHelper"].fetch({method:"SitesManager.getSitesWithAdminAccess"}).then((function(t){var i=t.map((function(e){return e.idsite}));return c["AjaxHelper"].post({method:"UsersManager.setUserAccess"},{userLogin:e.userLogin,access:e.allWebsitesAccssLevelSet,idSites:i})})).then((function(){return e.fetchAccess()})).finally((function(){e.isGivingAccessToAllSites=!1}))},showChangeAccessAllSitesModal:function(){De(this.$refs.confirmGiveAccessAllSitesModal).modal({dismissible:!1}).modal("open")},onChangeSiteFilter:function(e){var t=this;setTimeout((function(){var i=e.target.value;t.siteNameFilter!==i&&(t.siteNameFilter=i,t.offset=0,t.fetchAccess())}))},onRoleChange:function(e,t){this.previousRole=e.role,this.roleToChangeTo=t,this.siteAccessToChange=e,this.showChangeAccessConfirm()}},computed:{rolesHelpText:function(){return Object(c["translate"])("UsersManager_RolesHelp",'<a href="https://matomo.org/faq/general/faq_70/" target="_blank" rel="noreferrer noopener">',"</a>",'<a href="https://matomo.org/faq/general/faq_69/" target="_blank" rel="noreferrer noopener">',"</a>")},theDisplayedWebsitesAreSelectedText:function(){var e=Object(c["translate"])("UsersManager_TheDisplayedWebsitesAreSelected","<strong>".concat(this.siteAccess.length,"</strong>"));return"".concat(e," ")},clickToSelectAllText:function(){return Object(c["translate"])("UsersManager_ClickToSelectAll","<strong>".concat(this.totalEntries,"</strong>"))},allWebsitesAreSelectedText:function(){return Object(c["translate"])("UsersManager_AllWebsitesAreSelected","<strong>".concat(this.totalEntries,"</strong>"))},clickToSelectDisplayedWebsitesText:function(){return Object(c["translate"])("UsersManager_ClickToSelectDisplayedWebsites","<strong>".concat(this.siteAccess.length,"</strong>"))},deletePermConfirmSingleText:function(){return Object(c["translate"])("UsersManager_DeletePermConfirmSingle","<strong>".concat(this.userLogin,"</strong>"),"<strong>".concat(this.siteAccessToChangeName,"</strong>"))},deletePermConfirmMultipleText:function(){return Object(c["translate"])("UsersManager_DeletePermConfirmMultiple","<strong>".concat(this.userLogin,"</strong>"),"<strong>".concat(this.affectedSitesCount,"</strong>"))},changePermToSiteConfirmSingleText:function(){return Object(c["translate"])("UsersManager_ChangePermToSiteConfirmSingle","<strong>".concat(this.userLogin,"</strong>"),"<strong>".concat(this.siteAccessToChangeName,"</strong>"),"<strong>".concat(this.getRoleDisplay(this.roleToChangeTo),"</strong>"))},changePermToSiteConfirmMultipleText:function(){return Object(c["translate"])("UsersManager_ChangePermToSiteConfirmMultiple","<strong>".concat(this.userLogin,"</strong>"),"<strong>".concat(this.affectedSitesCount,"</strong>"),"<strong>".concat(this.getRoleDisplay(this.roleToChangeTo),"</strong>"))},changePermToAllSitesConfirmText:function(){return Object(c["translate"])("UsersManager_ChangePermToAllSitesConfirm","<strong>".concat(this.userLogin,"</strong>"),"<strong>".concat(this.getRoleDisplay(this.allWebsitesAccssLevelSet),"</strong>"))},paginationLowerBound:function(){return this.offset+1},paginationUpperBound:function(){return this.totalEntries?Math.min(this.offset+this.limit,this.totalEntries):"?"},filteredAccessLevels:function(){return this.accessLevels.filter((function(e){return"superuser"!==e.key}))},filteredSelectAccessLevels:function(){return this.filterAccessLevels.filter((function(e){return"superuser"!==e.key}))},selectedRowsCount:function(){var e=0;return Object.values(this.selectedRows).forEach((function(t){t&&(e+=1)})),e},affectedSitesCount:function(){return this.areAllResultsSelected?this.totalEntries:this.selectedRowsCount},allPropsWatch:function(){return this.userLogin,this.limit,this.accessLevels,this.filterAccessLevels,Date.now()},siteAccessToChangeName:function(){return this.siteAccessToChange?c["Matomo"].helper.htmlEntities(this.siteAccessToChange.site_name):""},paginationText:function(){var e=Object(c["translate"])("General_Pagination","".concat(this.paginationLowerBound),"".concat(this.paginationUpperBound),"".concat(this.totalEntries));return" ".concat(e," ")}}});Ue.render=_e;var Pe=Ue;
+/*!
+ * Matomo - free/libre analytics platform
+ *
+ * @link https://matomo.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ */Object(c["createAngularJsAdapter"])({component:Pe,scope:{userLogin:{angularJsBind:"<"},limit:{angularJsBind:"<"},onUserHasAccessDetected:{angularJsBind:"&",vue:"userHasAccessDetected"},onAccessChange:{angularJsBind:"&",vue:"accessChanged"},accessLevels:{angularJsBind:"<"},filterAccessLevels:{angularJsBind:"<"}},directiveName:"piwikUserPermissionsEdit",restrict:"E"})}})}));
//# sourceMappingURL=UsersManager.umd.min.js.map \ No newline at end of file
diff --git a/plugins/UsersManager/vue/src/UserPermissionsEdit/UserPermissionsEdit.adapter.ts b/plugins/UsersManager/vue/src/UserPermissionsEdit/UserPermissionsEdit.adapter.ts
new file mode 100644
index 0000000000..c4599b80b6
--- /dev/null
+++ b/plugins/UsersManager/vue/src/UserPermissionsEdit/UserPermissionsEdit.adapter.ts
@@ -0,0 +1,37 @@
+/*!
+ * Matomo - free/libre analytics platform
+ *
+ * @link https://matomo.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ */
+
+import { createAngularJsAdapter } from 'CoreHome';
+import UserPermissionsEdit from './UserPermissionsEdit.vue';
+
+export default createAngularJsAdapter({
+ component: UserPermissionsEdit,
+ scope: {
+ userLogin: {
+ angularJsBind: '<',
+ },
+ limit: {
+ angularJsBind: '<',
+ },
+ onUserHasAccessDetected: {
+ angularJsBind: '&',
+ vue: 'userHasAccessDetected',
+ },
+ onAccessChange: {
+ angularJsBind: '&',
+ vue: 'accessChanged',
+ },
+ accessLevels: {
+ angularJsBind: '<',
+ },
+ filterAccessLevels: {
+ angularJsBind: '<',
+ },
+ },
+ directiveName: 'piwikUserPermissionsEdit',
+ restrict: 'E',
+});
diff --git a/plugins/UsersManager/angularjs/user-permissions-edit/user-permissions-edit.component.less b/plugins/UsersManager/vue/src/UserPermissionsEdit/UserPermissionsEdit.less
index 16760f4ade..16760f4ade 100644
--- a/plugins/UsersManager/angularjs/user-permissions-edit/user-permissions-edit.component.less
+++ b/plugins/UsersManager/vue/src/UserPermissionsEdit/UserPermissionsEdit.less
diff --git a/plugins/UsersManager/vue/src/UserPermissionsEdit/UserPermissionsEdit.vue b/plugins/UsersManager/vue/src/UserPermissionsEdit/UserPermissionsEdit.vue
new file mode 100644
index 0000000000..7dc293186d
--- /dev/null
+++ b/plugins/UsersManager/vue/src/UserPermissionsEdit/UserPermissionsEdit.vue
@@ -0,0 +1,798 @@
+<!--
+ Matomo - free/libre analytics platform
+ @link https://matomo.org
+ @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+-->
+
+<template>
+ <div
+ class="userPermissionsEdit"
+ :class="{ loading: isLoadingAccess }"
+ >
+ <div
+ class="row"
+ v-if="!hasAccessToAtLeastOneSite"
+ >
+ <div>
+ <Notification
+ context="warning"
+ type="transient"
+ :noclear="true"
+ >
+ <strong>{{ translate('General_Warning') }}:</strong>
+ {{ translate('UsersManager_NoAccessWarning') }}
+ </Notification>
+ </div>
+ </div>
+ <div class="row to-all-websites">
+ <div class="col s12">
+ <div>
+ <span style="margin-right:3.5px">{{ translate('UsersManager_GiveAccessToAll') }}:</span>
+ <div
+ id="all-sites-access-select"
+ style="margin-right:3.5px"
+ >
+ <Field
+ v-model="allWebsitesAccssLevelSet"
+ uicontrol="select"
+ :options="filteredAccessLevels"
+ :full-width="true"
+ />
+ </div>
+ <a
+ href=""
+ class="btn"
+ :class="{ disabled: isGivingAccessToAllSites }"
+ @click.prevent="showChangeAccessAllSitesModal()"
+ >
+ {{ translate('General_Apply') }}
+ </a>
+ </div>
+ <p>&nbsp;</p>
+ <p>{{ translate('UsersManager_OrManageIndividually') }}:</p>
+ </div>
+ </div>
+ <div class="filters row">
+ <div class="col s12 m12 l8">
+ <div class="input-field bulk-actions" style="margin-right:3.5px">
+ <a
+ class="dropdown-trigger btn"
+ href=""
+ :class="{ disabled: isBulkActionsDisabled }"
+ data-target="user-permissions-edit-bulk-actions"
+ v-dropdown-menu="{ activates: '#user-permissions-edit-bulk-actions' }"
+ >
+ {{ translate('UsersManager_BulkActions') }}
+ </a>
+ <ul
+ id="user-permissions-edit-bulk-actions"
+ class="dropdown-content"
+ >
+ <li>
+ <a
+ class="dropdown-trigger"
+ data-target="user-permissions-bulk-set-access"
+ v-dropdown-menu="{ activates: '#user-permissions-bulk-set-access' }"
+ >{{ translate('UsersManager_SetPermission') }}</a>
+ <ul
+ id="user-permissions-bulk-set-access"
+ class="dropdown-content"
+ >
+ <li v-for="access in filteredAccessLevels" :key="access.key">
+ <a
+ href=""
+ @click.prevent="
+ siteAccessToChange = null;
+ roleToChangeTo = access.key;
+ showChangeAccessConfirm();"
+ >{{ access.value }}</a>
+ </li>
+ </ul>
+ </li>
+ <li>
+ <a
+ href=""
+ @click.prevent="
+ siteAccessToChange = null;
+ roleToChangeTo = 'noaccess';
+ showRemoveAccessConfirm();"
+ >{{ translate('UsersManager_RemovePermissions') }}</a>
+ </li>
+ </ul>
+ </div>
+ <div class="input-field site-filter" style="margin-right:3.5px">
+ <input
+ type="text"
+ :value="siteNameFilter"
+ @keydown="onChangeSiteFilter($event);"
+ @change="onChangeSiteFilter($event);"
+ :placeholder="translate('UsersManager_FilterByWebsite')"
+ />
+ </div>
+ <div class="input-field access-filter" style="margin-right:3.5px">
+ <div>
+ <Field
+ v-model="accessLevelFilter"
+ uicontrol="select"
+ :options="filteredSelectAccessLevels"
+ :full-width="true"
+ :placeholder="translate('UsersManager_FilterByAccess')"
+ />
+ </div>
+ </div>
+ </div>
+ <div
+ class="col s12 m12 l4 sites-for-permission-pagination-container"
+ v-if="totalEntries > limit"
+ >
+ <div class="sites-for-permission-pagination">
+ <a
+ class="prev"
+ :class="{ disabled: offset <= 0 }"
+ >
+ <span
+ class="pointer"
+ @click="gotoPreviousPage()"
+ >&#xAB; {{ translate('General_Previous') }}</span>
+ </a>
+ <span class="counter">
+ <span v-text="paginationText"></span>
+ </span>
+ <a
+ class="next"
+ :class="{ disabled: offset + limit >= totalEntries }"
+ >
+ <span
+ class="pointer"
+ @click="gotoNextPage()"
+ >{{ translate('General_Next') }} &#xBB;</span>
+ </a>
+ </div>
+ </div>
+ </div>
+ <div
+ class="roles-help-notification"
+ >
+ <Notification
+ v-if="isRoleHelpToggled"
+ context="info"
+ type="persistent"
+ :noclear="true"
+ >
+ <span v-html="$sanitize(rolesHelpText)"></span>
+ </Notification>
+ </div>
+ <div
+ class="capabilities-help-notification"
+ >
+ <Notification
+ v-if="isCapabilitiesHelpToggled"
+ context="info"
+ type="persistent"
+ :noclear="true"
+ >
+ <span>
+ {{ translate('UsersManager_CapabilitiesHelp') }}
+ </span>
+ </Notification>
+ </div>
+ <table
+ id="sitesForPermission"
+ v-content-table
+ >
+ <thead>
+ <tr>
+ <th class="select-cell">
+ <span class="checkbox-container">
+ <label>
+ <input
+ type="checkbox"
+ id="perm_edit_select_all"
+ :checked="isAllCheckboxSelected"
+ @change="onAllCheckboxChange($event)"
+ />
+ <span />
+ </label>
+ </span>
+ </th>
+ <th>{{ translate('General_Name') }}</th>
+ <th class="role_header">
+ <span v-html="`${translate('UsersManager_Role')} `"></span>
+ <a
+ href=""
+ class="helpIcon"
+ @click.prevent="isRoleHelpToggled = !isRoleHelpToggled"
+ :class="{ sticky: isRoleHelpToggled }"
+ >
+ <span class="icon-help" />
+ </a>
+ </th>
+ <th class="capabilities_header">
+ <span v-html="`${translate('UsersManager_Capabilities')} `"></span>
+ <a
+ href=""
+ class="helpIcon"
+ @click.prevent="isCapabilitiesHelpToggled = !isCapabilitiesHelpToggled"
+ :class="{ sticky: isCapabilitiesHelpToggled }"
+ >
+ <span class="icon-help" />
+ </a>
+ </th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr
+ class="select-all-row"
+ v-if="isAllCheckboxSelected && siteAccess.length < totalEntries"
+ >
+ <td colspan="4">
+ <div v-if="!areAllResultsSelected">
+ <span
+ v-html="$sanitize(theDisplayedWebsitesAreSelectedText)"
+ style="margin-right:3.5px"
+ ></span>
+ <a
+ href="#"
+ @click.prevent="areAllResultsSelected = !areAllResultsSelected"
+ v-html="$sanitize(clickToSelectAllText)"
+ ></a>
+ </div>
+ <div v-if="areAllResultsSelected">
+ <span
+ v-html="$sanitize(allWebsitesAreSelectedText)"
+ style="margin-right:3.5px"
+ ></span>
+ <a
+ href="#"
+ @click.prevent="areAllResultsSelected = !areAllResultsSelected"
+ v-html="$sanitize(clickToSelectDisplayedWebsitesText)"
+ ></a>
+ </div>
+ </td>
+ </tr>
+ <tr v-for="(entry, index) in siteAccess" :key="entry.idsite">
+ <td class="select-cell">
+ <span class="checkbox-container">
+ <label>
+ <input
+ type="checkbox"
+ :id="`perm_edit_select_row${index}`"
+ v-model="selectedRows[index]"
+ @click="onRowSelected()"
+ />
+ <span />
+ </label>
+ </span>
+ </td>
+ <td>
+ <span>{{ entry.site_name }}</span>
+ </td>
+ <td>
+ <div
+ class="role-select"
+ >
+ <Field
+ :model-value="entry.role"
+ @update:model-value="onRoleChange(entry, $event);"
+ uicontrol="select"
+ :options="filteredAccessLevels"
+ :full-width="true"
+ />
+ </div>
+ </td>
+ <td>
+ <div>
+ <CapabilitiesEdit
+ :idsite="entry.idsite"
+ :site-name="entry.site_name"
+ :user-login="userLogin"
+ :user-role="entry.role"
+ :capabilities="entry.capabilities"
+ @change="fetchAccess()"
+ >
+ </CapabilitiesEdit>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ <div class="delete-access-confirm-modal modal" ref="deleteAccessConfirmModal">
+ <div class="modal-content">
+ <h3
+ v-if="siteAccessToChange"
+ v-html="$sanitize(deletePermConfirmSingleText)"
+ ></h3>
+ <p
+ v-if="!siteAccessToChange"
+ v-html="$sanitize(deletePermConfirmMultipleText)"
+ ></p>
+ </div>
+ <div class="modal-footer">
+ <a
+ href=""
+ class="modal-action modal-close btn"
+ @click.prevent="changeUserRole()"
+ >{{ translate('General_Yes') }}</a>
+ <a
+ href=""
+ class="modal-action modal-close modal-no"
+ @click.prevent="siteAccessToChange = null; roleToChangeTo = null;"
+ >{{ translate('General_No') }}</a>
+ </div>
+ </div>
+ <div class="change-access-confirm-modal modal" ref="changeAccessConfirmModal">
+ <div class="modal-content">
+ <h3
+ v-if="siteAccessToChange"
+ v-html="$sanitize(changePermToSiteConfirmSingleText)"
+ ></h3>
+ <p
+ v-if="!siteAccessToChange"
+ v-html="$sanitize(changePermToSiteConfirmMultipleText)"
+ ></p>
+ </div>
+ <div class="modal-footer">
+ <a
+ href=""
+ class="modal-action modal-close btn"
+ @click.prevent="changeUserRole()"
+ >{{ translate('General_Yes') }}</a>
+ <a
+ href=""
+ class="modal-action modal-close modal-no"
+ @click.prevent="
+ siteAccessToChange.role = previousRole;
+ siteAccessToChange = null;
+ roleToChangeTo = null;"
+ >{{ translate('General_No') }}</a>
+ </div>
+ </div>
+ <div class="confirm-give-access-all-sites modal" ref="confirmGiveAccessAllSitesModal">
+ <div class="modal-content">
+ <h3 v-html="$sanitize(changePermToAllSitesConfirmText)"></h3>
+ <p>{{ translate('UsersManager_ChangePermToAllSitesConfirm2') }}</p>
+ </div>
+ <div class="modal-footer">
+ <a
+ href=""
+ class="modal-action modal-close btn"
+ @click.prevent="giveAccessToAllSites()"
+ >{{ translate('General_Yes') }}</a>
+ <a
+ href=""
+ class="modal-action modal-close modal-no"
+ @click="$event.preventDefault()"
+ >{{ translate('General_No') }}</a>
+ </div>
+ </div>
+ </div>
+</template>
+
+<script lang="ts">
+import { defineComponent, watch } from 'vue';
+import {
+ Notification,
+ DropdownMenu,
+ ContentTable,
+ debounce,
+ translate,
+ AjaxHelper,
+ Site,
+ Matomo,
+} from 'CoreHome';
+import { Field } from 'CorePluginsAdmin';
+import CapabilitiesEdit from '../CapabilitiesEdit/CapabilitiesEdit.vue';
+import Capability from '../CapabilitiesStore/Capability';
+
+interface SiteAccess {
+ idsite: string|number;
+ site_name: string;
+ role: string;
+ capabilities: Capability[];
+}
+
+interface AccessLevel {
+ key: string|number;
+ value: unknown;
+}
+
+interface UserPermissionsEditState {
+ siteAccess: SiteAccess[];
+ offset: number;
+ totalEntries: number|null;
+ accessLevelFilter: string;
+ siteNameFilter: string;
+ isLoadingAccess: boolean;
+ allWebsitesAccssLevelSet: string;
+ isAllCheckboxSelected: boolean;
+ selectedRows: Record<string, boolean>;
+ isBulkActionsDisabled: boolean;
+ areAllResultsSelected: boolean;
+ previousRole: string|null;
+ hasAccessToAtLeastOneSite: boolean;
+ isRoleHelpToggled: boolean;
+ isCapabilitiesHelpToggled: boolean;
+ isGivingAccessToAllSites: boolean;
+ roleToChangeTo: string|null;
+ siteAccessToChange: SiteAccess|null;
+}
+
+const { $ } = window;
+
+export default defineComponent({
+ props: {
+ userLogin: {
+ type: String,
+ required: true,
+ },
+ limit: {
+ type: Number,
+ default: 10,
+ },
+ accessLevels: {
+ type: Array,
+ required: true,
+ },
+ filterAccessLevels: {
+ type: Array,
+ required: true,
+ },
+ },
+ components: {
+ Notification,
+ Field,
+ CapabilitiesEdit,
+ },
+ directives: {
+ DropdownMenu,
+ ContentTable,
+ },
+ data(): UserPermissionsEditState {
+ return {
+ siteAccess: [],
+ offset: 0,
+ totalEntries: null,
+ accessLevelFilter: '',
+ siteNameFilter: '',
+ isLoadingAccess: false,
+ allWebsitesAccssLevelSet: 'view',
+ isAllCheckboxSelected: false,
+ selectedRows: {},
+ isBulkActionsDisabled: true,
+ areAllResultsSelected: false,
+ previousRole: null,
+ hasAccessToAtLeastOneSite: true,
+ isRoleHelpToggled: false,
+ isCapabilitiesHelpToggled: false,
+ isGivingAccessToAllSites: false,
+ roleToChangeTo: null,
+ siteAccessToChange: null,
+ };
+ },
+ emits: ['userHasAccessDetected', 'accessChanged'],
+ created() {
+ this.onChangeSiteFilter = debounce(this.onChangeSiteFilter, 300);
+
+ watch(
+ () => this.allPropsWatch,
+ () => {
+ if (this.limit) {
+ this.fetchAccess();
+ }
+ },
+ );
+
+ this.fetchAccess();
+ },
+ watch: {
+ accessLevelFilter() {
+ this.offset = 0;
+ this.fetchAccess();
+ },
+ },
+ methods: {
+ onAllCheckboxChange(event: Event) {
+ this.isAllCheckboxSelected = (event.target as HTMLInputElement).checked;
+ if (!this.isAllCheckboxSelected) {
+ this.clearSelection();
+ } else {
+ this.siteAccess.forEach((e, i) => {
+ this.selectedRows[i] = true;
+ });
+ this.isBulkActionsDisabled = false;
+ }
+ },
+ clearSelection() {
+ this.selectedRows = {};
+ this.areAllResultsSelected = false;
+ this.isBulkActionsDisabled = true;
+ this.isAllCheckboxSelected = false;
+ this.siteAccessToChange = null;
+ },
+ onRowSelected() {
+ setTimeout(() => {
+ const selectedRowKeyCount = this.selectedRowsCount;
+ this.isBulkActionsDisabled = selectedRowKeyCount === 0;
+ this.isAllCheckboxSelected = selectedRowKeyCount === this.siteAccess.length;
+ });
+ },
+ fetchAccess() {
+ this.isLoadingAccess = true;
+ return AjaxHelper.fetch<AjaxHelper>(
+ {
+ method: 'UsersManager.getSitesAccessForUser',
+ limit: this.limit,
+ offset: this.offset,
+ filter_search: this.siteNameFilter,
+ filter_access: this.accessLevelFilter,
+ userLogin: this.userLogin,
+ },
+ { returnResponseObject: true },
+ ).then((helper) => {
+ const result = helper.getRequestHandle()!;
+
+ this.isLoadingAccess = false;
+ this.siteAccess = result.responseJSON as SiteAccess[];
+ this.totalEntries = parseInt(result.getResponseHeader('x-matomo-total-results')!, 10) || 0;
+ this.hasAccessToAtLeastOneSite = !!result.getResponseHeader('x-matomo-has-some');
+
+ this.$emit('userHasAccessDetected', { hasAccess: this.hasAccessToAtLeastOneSite });
+
+ this.clearSelection();
+ }).catch(() => {
+ this.isLoadingAccess = false;
+
+ this.clearSelection();
+ });
+ },
+ gotoPreviousPage() {
+ this.offset = Math.max(0, this.offset - this.limit);
+
+ this.fetchAccess();
+ },
+ gotoNextPage() {
+ const newOffset = this.offset + this.limit;
+ if (newOffset >= (this.totalEntries || 0)) {
+ return;
+ }
+
+ this.offset = newOffset;
+ this.fetchAccess();
+ },
+ showRemoveAccessConfirm() {
+ $(this.$refs.deleteAccessConfirmModal as HTMLElement).modal({
+ dismissible: false,
+ }).modal('open');
+ },
+ changeUserRole() {
+ const getSelectedSites = () => {
+ const result: (string|number)[] = [];
+ Object.keys(this.selectedRows).forEach((index) => {
+ if (this.selectedRows[index]
+ && this.siteAccess[index as unknown as number] // safety check
+ ) {
+ result.push(this.siteAccess[index as unknown as number].idsite);
+ }
+ });
+ return result;
+ };
+
+ const getAllSitesInSearch = () => (
+ AjaxHelper.fetch<{ idsite: string }[]>(
+ {
+ method: 'UsersManager.getSitesAccessForUser',
+ filter_search: this.siteNameFilter,
+ filter_access: this.accessLevelFilter,
+ userLogin: this.userLogin,
+ filter_limit: '-1',
+ },
+ ).then((access) => access.map((a) => a.idsite))
+ );
+
+ this.isLoadingAccess = true;
+
+ return Promise.resolve().then(() => {
+ if (this.siteAccessToChange) {
+ return [this.siteAccessToChange.idsite];
+ }
+
+ if (this.areAllResultsSelected) {
+ return getAllSitesInSearch();
+ }
+
+ return getSelectedSites();
+ }).then((idSites) => AjaxHelper.post(
+ {
+ method: 'UsersManager.setUserAccess',
+ }, {
+ userLogin: this.userLogin,
+ access: this.roleToChangeTo,
+ idSites,
+ },
+ )).catch(() => {
+ // ignore (errors will still be displayed to the user)
+ }).then(() => { // eslint-disable-line
+ this.$emit('accessChanged');
+
+ return this.fetchAccess();
+ });
+ },
+ showChangeAccessConfirm() {
+ $(this.$refs.changeAccessConfirmModal as HTMLElement).modal({
+ dismissible: false,
+ }).modal('open');
+ },
+ getRoleDisplay(role: string|null) {
+ let result = null;
+ (this.filteredAccessLevels as AccessLevel[]).forEach((entry) => {
+ if (entry.key === role) {
+ result = entry.value;
+ }
+ });
+ return result;
+ },
+ giveAccessToAllSites() {
+ this.isGivingAccessToAllSites = true;
+ AjaxHelper.fetch<Site[]>({
+ method: 'SitesManager.getSitesWithAdminAccess',
+ }).then((allSites) => {
+ const idSites = allSites.map((s) => s.idsite);
+ return AjaxHelper.post(
+ {
+ method: 'UsersManager.setUserAccess',
+ }, {
+ userLogin: this.userLogin,
+ access: this.allWebsitesAccssLevelSet,
+ idSites,
+ },
+ );
+ }).then(() => this.fetchAccess()).finally(() => {
+ this.isGivingAccessToAllSites = false;
+ });
+ },
+ showChangeAccessAllSitesModal() {
+ $(this.$refs.confirmGiveAccessAllSitesModal as HTMLElement).modal({
+ dismissible: false,
+ }).modal('open');
+ },
+ onChangeSiteFilter(event: KeyboardEvent) {
+ setTimeout(() => {
+ const inputValue = (event.target as HTMLInputElement).value;
+ if (this.siteNameFilter !== inputValue) {
+ this.siteNameFilter = inputValue;
+ this.offset = 0;
+ this.fetchAccess();
+ }
+ });
+ },
+ onRoleChange(entry: SiteAccess, newRole: string) {
+ this.previousRole = entry.role;
+ this.roleToChangeTo = newRole;
+ this.siteAccessToChange = entry;
+ this.showChangeAccessConfirm();
+ },
+ },
+ computed: {
+ rolesHelpText() {
+ return translate(
+ 'UsersManager_RolesHelp',
+ '<a href="https://matomo.org/faq/general/faq_70/" target="_blank" rel="noreferrer noopener">',
+ '</a>',
+ '<a href="https://matomo.org/faq/general/faq_69/" target="_blank" rel="noreferrer noopener">',
+ '</a>',
+ );
+ },
+ theDisplayedWebsitesAreSelectedText() {
+ const text = translate(
+ 'UsersManager_TheDisplayedWebsitesAreSelected',
+ `<strong>${this.siteAccess.length}</strong>`,
+ );
+ return `${text} `;
+ },
+ clickToSelectAllText() {
+ return translate('UsersManager_ClickToSelectAll', `<strong>${this.totalEntries}</strong>`);
+ },
+ allWebsitesAreSelectedText() {
+ return translate(
+ 'UsersManager_AllWebsitesAreSelected',
+ `<strong>${this.totalEntries}</strong>`,
+ );
+ },
+ clickToSelectDisplayedWebsitesText() {
+ return translate(
+ 'UsersManager_ClickToSelectDisplayedWebsites',
+ `<strong>${this.siteAccess.length}</strong>`,
+ );
+ },
+ deletePermConfirmSingleText() {
+ return translate(
+ 'UsersManager_DeletePermConfirmSingle',
+ `<strong>${this.userLogin}</strong>`,
+ `<strong>${this.siteAccessToChangeName}</strong>`,
+ );
+ },
+ deletePermConfirmMultipleText() {
+ return translate(
+ 'UsersManager_DeletePermConfirmMultiple',
+ `<strong>${this.userLogin}</strong>`,
+ `<strong>${this.affectedSitesCount}</strong>`,
+ );
+ },
+ changePermToSiteConfirmSingleText() {
+ return translate(
+ 'UsersManager_ChangePermToSiteConfirmSingle',
+ `<strong>${this.userLogin}</strong>`,
+ `<strong>${this.siteAccessToChangeName}</strong>`,
+ `<strong>${this.getRoleDisplay(this.roleToChangeTo)}</strong>`,
+ );
+ },
+ changePermToSiteConfirmMultipleText() {
+ return translate(
+ 'UsersManager_ChangePermToSiteConfirmMultiple',
+ `<strong>${this.userLogin}</strong>`,
+ `<strong>${this.affectedSitesCount}</strong>`,
+ `<strong>${this.getRoleDisplay(this.roleToChangeTo)}</strong>`,
+ );
+ },
+ changePermToAllSitesConfirmText() {
+ return translate(
+ 'UsersManager_ChangePermToAllSitesConfirm',
+ `<strong>${this.userLogin}</strong>`,
+ `<strong>${this.getRoleDisplay(this.allWebsitesAccssLevelSet)}</strong>`,
+ );
+ },
+ paginationLowerBound() {
+ return this.offset + 1;
+ },
+ paginationUpperBound() {
+ if (!this.totalEntries) {
+ return '?';
+ }
+ return Math.min(this.offset + this.limit, this.totalEntries);
+ },
+ filteredAccessLevels() {
+ return (this.accessLevels as AccessLevel[]).filter((entry) => entry.key !== 'superuser');
+ },
+ filteredSelectAccessLevels() {
+ return (this.filterAccessLevels as AccessLevel[]).filter(
+ (entry) => entry.key !== 'superuser',
+ );
+ },
+ selectedRowsCount() {
+ let selectedRowKeyCount = 0;
+ Object.values(this.selectedRows).forEach((v) => {
+ if (v) {
+ selectedRowKeyCount += 1;
+ }
+ });
+ return selectedRowKeyCount;
+ },
+ affectedSitesCount() {
+ if (this.areAllResultsSelected) {
+ return this.totalEntries;
+ }
+
+ return this.selectedRowsCount;
+ },
+ allPropsWatch() {
+ // see https://github.com/vuejs/vue/issues/844#issuecomment-390500758
+ // eslint-disable-next-line no-sequences
+ return (this.userLogin, this.limit, this.accessLevels, this.filterAccessLevels, Date.now());
+ },
+ siteAccessToChangeName() {
+ return this.siteAccessToChange
+ ? Matomo.helper.htmlEntities(this.siteAccessToChange.site_name)
+ : '';
+ },
+ paginationText() {
+ const text = translate(
+ 'General_Pagination',
+ `${this.paginationLowerBound}`,
+ `${this.paginationUpperBound}`,
+ `${this.totalEntries}`,
+ );
+ return ` ${text} `;
+ },
+ },
+});
+</script>
diff --git a/plugins/UsersManager/vue/src/index.ts b/plugins/UsersManager/vue/src/index.ts
index 7411497560..bac1eaf08d 100644
--- a/plugins/UsersManager/vue/src/index.ts
+++ b/plugins/UsersManager/vue/src/index.ts
@@ -5,6 +5,8 @@
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
import './CapabilitiesEdit/CapabilitiesEdit.adapter';
+import './UserPermissionsEdit/UserPermissionsEdit.adapter';
export { default as CapabilitiesEdit } from './CapabilitiesEdit/CapabilitiesEdit.vue';
export { default as Capability } from './CapabilitiesStore/Capability';
+export { default as UserPermissionsEdit } from './UserPermissionsEdit/UserPermissionsEdit.vue';