From 5df7397b4276a8f23e5537b7ba84394f4238dbed Mon Sep 17 00:00:00 2001 From: Peter Zhang Date: Fri, 8 Jul 2022 23:24:54 +1200 Subject: update invite user (#19366) * update invite update invite * update tests and VUE error update tests and VUE error * built vue files * update ui update ui * update vue update vue * update vue update vue * built vue files * Update UsersManager_spec.js update tests * update clean update clean * Update UsersManager_spec.js update success * Update UsersManager_spec.js remove popup error * update tests order update tests order * Update UsersManager_next_click.png updateui * revert screenshot revert screenshot * delete if user if declined delete use if declined add privacy split templated into 3 parts * remove decline remove decline * add invited by column add invited by column * Revert "add invited by column" This reverts commit e2358cb493684dc26fdf9a436d00a29981365861. * Update UserRepository.php add view user display * add email tests and update admin email add email tests and update admin email * update php cs update php cs * add expire task and default setting add expire task and default setting * add api tests add api tests * add filter add filter * update ui tests update ui tests * built vue files * update tests update tests * update signup and tests update signup and tests * update tests update tests * update screenshots update screenshots * update screenshots update screenshots * update ui update ui * update typo update typo * built vue files * Update core/Updates/4.12.0-b1.php Co-authored-by: Ben Burgess <88810029+bx80@users.noreply.github.com> * Update plugins/UsersManager/API.php Co-authored-by: Ben Burgess <88810029+bx80@users.noreply.github.com> * Update plugins/UsersManager/UsersManager.php Co-authored-by: Ben Burgess <88810029+bx80@users.noreply.github.com> * Update plugins/UsersManager/lang/en.json Co-authored-by: Ben Burgess <88810029+bx80@users.noreply.github.com> * Update config/global.ini.php Co-authored-by: Ben Burgess <88810029+bx80@users.noreply.github.com> * update email date update email date * update typo update typo * update UI update UI * Updated UI screenshot * Update plugins/Login/lang/en.json Co-authored-by: Stefan Giehl * Update plugins/Login/templates/invitationDecline.twig Co-authored-by: Stefan Giehl * update some feedbacks update some feedbacks * built vue files * update feedbacks update feedbacks * update filter update filter * pending your can't reset password pending your can't reset password * fix php cs fix php cs * update column update column * built vue files * set up terms in tests set up terms in tests * Update PendingUsers.php setup website * update tests and broken template update tests * update password update password * update screenshots update screenshots * add delete to admin add delete to admin * update invite success notification update invite success notification * add tests add tests * built vue files * update tests update tests * update UI and checkbox update UI and checkbox * Update Invite_spec.js show error screen * update tests update tests * update lang update lang * Update OmniFixture-dump.sql revert OmniFixture * update wording update wording * update version update version * fix change column fix change column * Update UsersManagerTest.php update tests * Update Model.php update tests * Update Model.php update tests * remove fixes remove fixes * Revert "remove fixes" This reverts commit f8fe33706513a32bf3386bc6b52800d68ec58562. * update tests update tests * revert password reset revert password reset * update tests update tests * update resend update resend * update tests update tests * Update PasswordResetter.php update tests * correct pending user from last time correct pending user from last time * apply some fixes /improvements * Apply suggestions from code review Co-authored-by: Ben Burgess <88810029+bx80@users.noreply.github.com> * Allow composer plugins for dev dependency codesniffer to fix travis builds. (#19468) Co-authored-by: peterhashair Co-authored-by: Ben Burgess <88810029+bx80@users.noreply.github.com> Co-authored-by: Ben Co-authored-by: Stefan Giehl Co-authored-by: dizzy --- plugins/UsersManager/API.php | 316 +++++---- plugins/UsersManager/Controller.php | 7 + plugins/UsersManager/Emails/UserInviteEmail.php | 44 +- plugins/UsersManager/Model.php | 100 ++- plugins/UsersManager/Repository/UserRepository.php | 197 +++--- plugins/UsersManager/Sql/UserTableFilter.php | 32 +- plugins/UsersManager/Tasks.php | 23 +- plugins/UsersManager/UserAccessFilter.php | 3 +- plugins/UsersManager/UsersManager.php | 34 +- plugins/UsersManager/Validators/Email.php | 26 +- plugins/UsersManager/Validators/Login.php | 22 +- plugins/UsersManager/lang/en.json | 12 +- plugins/UsersManager/templates/index.twig | 1 + plugins/UsersManager/tests/Fixtures/ManyUsers.php | 90 +-- plugins/UsersManager/tests/Integration/APITest.php | 747 ++++++++++++++++----- .../tests/Integration/UserInviteTest.php | 102 ++- .../tests/Integration/UsersManagerTest.php | 273 ++++---- plugins/UsersManager/tests/System/ApiTest.php | 13 +- ...Manager.getUser_login1_when_superuseraccess.xml | 4 + ...sersManager.getUser_login2_when_adminaccess.xml | 1 + ...Manager.getUser_login2_when_superuseraccess.xml | 4 + ...Manager.getUser_login4_when_superuseraccess.xml | 4 + ...UsersManager.getUser_login4_when_viewaccess.xml | 1 + ...Manager.getUser_login6_when_superuseraccess.xml | 4 + ...sersManager.getUsersLogin__when_adminaccess.xml | 1 + ...Manager.getUsersLogin__when_superuseraccess.xml | 1 + ...WithSiteAccess_3_admin_when_superuseraccess.xml | 8 + ...t___UsersManager.getUsers__when_adminaccess.xml | 16 +- ...UsersManager.getUsers__when_superuseraccess.xml | 84 ++- plugins/UsersManager/tests/UI/UsersManager_spec.js | 32 +- .../UsersManager_add_new_user_form.png | 4 +- .../UsersManager_admin_view_admin_add_user.png | 4 +- ...sManager_admin_view_admin_add_user_by_email.png | 4 +- ...sManager_admin_view_admin_add_user_by_login.png | 4 +- ...anager_admin_view_admin_add_user_not_exists.png | 4 +- .../UsersManager_admin_view_admin_load.png | 4 +- .../UsersManager_all_rows_deselected.png | 4 +- .../UsersManager_all_rows_in_search.png | 4 +- .../UsersManager_all_rows_selected.png | 4 +- .../UsersManager_bulk_remove_access.png | 4 +- .../UsersManager_bulk_set_access.png | 4 +- .../UsersManager_bulk_set_access_confirm.png | 4 +- .../UsersManager_delete_bulk_access.png | 4 +- .../UsersManager_delete_single.png | 4 +- ...rsManager_edit_user_basic_asks_confirmation.png | 4 +- ...er_edit_user_basic_confirmed_wrong_password.png | 4 +- .../UsersManager_edit_user_form.png | 4 +- .../expected-screenshots/UsersManager_filters.png | 4 +- .../UI/expected-screenshots/UsersManager_load.png | 4 +- .../UsersManager_manage_users_back.png | 4 +- .../UsersManager_next_click.png | 4 +- ...UsersManager_permissions_all_rows_in_search.png | 4 +- .../UsersManager_permissions_edit.png | 4 +- .../expected-screenshots/UsersManager_previous.png | 4 +- .../UsersManager_resend_popup.png | 4 +- .../UsersManager_resend_success.png | 3 + .../expected-screenshots/UsersManager_role_for.png | 4 +- .../UsersManager_rows_selected.png | 4 +- .../UsersManager_user_created.png | 4 +- plugins/UsersManager/vue/dist/UsersManager.umd.js | 567 ++++++++-------- .../UsersManager/vue/dist/UsersManager.umd.min.js | 20 +- .../vue/src/PagedUsersList/PagedUsersList.less | 13 +- .../vue/src/PagedUsersList/PagedUsersList.vue | 480 +++++++------ .../vue/src/PagedUsersList/SearchParams.ts | 1 + plugins/UsersManager/vue/src/User.ts | 2 +- .../vue/src/UserEditForm/UserEditForm.vue | 28 +- .../vue/src/UsersManager/UsersManager.adapter.ts | 3 + .../vue/src/UsersManager/UsersManager.vue | 273 ++++---- 68 files changed, 2351 insertions(+), 1353 deletions(-) create mode 100644 plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_resend_success.png (limited to 'plugins/UsersManager') diff --git a/plugins/UsersManager/API.php b/plugins/UsersManager/API.php index 6eb5e6b9b7..9accb8f35c 100644 --- a/plugins/UsersManager/API.php +++ b/plugins/UsersManager/API.php @@ -1,4 +1,5 @@ model = $model; $this->userFilter = $filter; @@ -131,7 +133,6 @@ class API extends \Piwik\Plugin\API throw new Exception('UsersManager_API must inherit API'); } self::$instance = $instance; - } catch (Exception $e) { self::$instance = StaticContainer::get('Piwik\Plugins\UsersManager\API'); StaticContainer::getContainer()->set('UsersManager_API', self::$instance); @@ -149,15 +150,15 @@ class API extends \Piwik\Plugin\API { Piwik::checkUserHasSomeAdminAccess(); - $response = array(); + $response = []; foreach ($this->roleProvider->getAllRoles() as $role) { - $response[] = array( + $response[] = [ 'id' => $role->getId(), 'name' => $role->getName(), 'description' => $role->getDescription(), 'helpUrl' => $role->getHelpUrl(), - ); + ]; } return $response; @@ -171,17 +172,17 @@ class API extends \Piwik\Plugin\API { Piwik::checkUserHasSomeAdminAccess(); - $response = array(); + $response = []; foreach ($this->capabilityProvider->getAllCapabilities() as $capability) { - $response[] = array( + $response[] = [ 'id' => $capability->getId(), 'name' => $capability->getName(), 'description' => $capability->getDescription(), 'helpUrl' => $capability->getHelpUrl(), 'includedInRoles' => $capability->getIncludedInRoles(), 'category' => $capability->getCategory(), - ); + ]; } return $response; @@ -272,7 +273,7 @@ class API extends \Piwik\Plugin\API { Piwik::checkUserHasSuperUserAccess(); - $userPreferences = array(); + $userPreferences = []; foreach ($preferenceNames as $preferenceName) { $optionNameMatchAllUsers = $this->getPreferenceId('%', $preferenceName); $preferences = Option::getLike($optionNameMatchAllUsers); @@ -292,16 +293,18 @@ class API extends \Piwik\Plugin\API if (false !== strpos($preference, self::OPTION_NAME_PREFERENCE_SEPARATOR)) { throw new Exception("Preference name cannot contain underscores."); } - $names = array( + $names = [ self::PREFERENCE_DEFAULT_REPORT, self::PREFERENCE_DEFAULT_REPORT_DATE, 'isLDAPUser', // used in loginldap 'hideSegmentDefinitionChangeMessage',// used in JS - ); + ]; $customPreferences = StaticContainer::get('usersmanager.user_preference_names'); - if (!in_array($preference, $names, true) - && !in_array($preference, $customPreferences, true)) { + if ( + !in_array($preference, $names, true) + && !in_array($preference, $customPreferences, true) + ) { throw new Exception('Not supported preference name: ' . $preference); } return $login . self::OPTION_NAME_PREFERENCE_SEPARATOR . $preference; @@ -339,7 +342,7 @@ class API extends \Piwik\Plugin\API * Filtering by 'superuser' is only allowed for other superusers. * @return array */ - public function getUsersPlusRole($idSite, $limit = null, $offset = 0, $filter_search = null, $filter_access = null) + public function getUsersPlusRole($idSite, $limit = null, $offset = 0, $filter_search = null, $filter_access = null, $filter_status = null) { if (!$this->isUserHasAdminAccessTo($idSite)) { // if the user is not an admin to $idSite, they can only see their own user @@ -371,10 +374,16 @@ class API extends \Piwik\Plugin\API // access is managed by another plugin, and the current user cannot manage any user with UsersManager Common::sendHeader('X-Matomo-Total-Results: 0'); return []; - } else { - [$users, $totalResults] = $this->model->getUsersWithRole($idSite, $limit, $offset, $filter_search, - $filter_access, $loginsToLimit); + [$users, $totalResults] = $this->model->getUsersWithRole( + $idSite, + $limit, + $offset, + $filter_search, + $filter_access, + $filter_status, + $loginsToLimit + ); foreach ($users as &$user) { $user['superuser_access'] = $user['superuser_access'] == 1; @@ -419,7 +428,7 @@ class API extends \Piwik\Plugin\API throw new \Exception('Parameter userLogins needs to be a string containing a comma separated list of users'); } - $logins = array(); + $logins = []; if (!empty($userLogins)) { $logins = explode(',', $userLogins); @@ -428,7 +437,6 @@ class API extends \Piwik\Plugin\API $users = $this->model->getUsers($logins); $users = $this->userFilter->filterUsers($users); return $this->userRepository->enrichUsers($users); - } /** @@ -484,8 +492,10 @@ class API extends \Piwik\Plugin\API foreach ($access as $entry) { if (!$this->isValidAccessType($entry)) { - throw new Exception(Piwik::translate("UsersManager_ExceptionAccessValues", - [implode(", ", $this->getAllRolesAndCapabilities()), $entry])); + throw new Exception(Piwik::translate( + "UsersManager_ExceptionAccessValues", + [implode(", ", $this->getAllRolesAndCapabilities()), $entry] + )); } } } @@ -541,7 +551,7 @@ class API extends \Piwik\Plugin\API $logins = $this->model->getUsersLoginWithSiteAccess($idSite, $access); if (empty($logins)) { - return array(); + return []; } $logins = $this->userFilter->filterLogins($logins); @@ -572,14 +582,14 @@ class API extends \Piwik\Plugin\API $this->checkUserExists($userLogin); // Super users have 'admin' access for every site if (Piwik::hasTheUserSuperUserAccess($userLogin)) { - $return = array(); + $return = []; $siteManagerModel = new \Piwik\Plugins\SitesManager\Model(); $sites = $siteManagerModel->getAllSites(); foreach ($sites as $site) { - $return[] = array( + $return[] = [ 'site' => $site['idsite'], 'access' => 'admin' - ); + ]; } return $return; } @@ -607,11 +617,11 @@ class API extends \Piwik\Plugin\API * @throws Exception */ public function getSitesAccessForUser( - $userLogin, - $limit = null, - $offset = 0, - $filter_search = null, - $filter_access = null + $userLogin, + $limit = null, + $offset = 0, + $filter_search = null, + $filter_access = null ) { Piwik::checkUserHasSomeAdminAccess(); $this->checkUserExists($userLogin); @@ -628,8 +638,14 @@ class API extends \Piwik\Plugin\API } } - [$sites, $totalResults] = $this->model->getSitesAccessFromUserWithFilters($userLogin, $limit, $offset, - $filter_search, $filter_access, $idSites); + [$sites, $totalResults] = $this->model->getSitesAccessFromUserWithFilters( + $userLogin, + $limit, + $offset, + $filter_search, + $filter_access, + $idSites + ); foreach ($sites as &$siteAccess) { [ $siteAccess['role'], @@ -662,9 +678,12 @@ class API extends \Piwik\Plugin\API $user = $this->model->getUser($userLogin); + if (empty($user) || !is_array($user)) { + return []; + } + $user = $this->userFilter->filterUser($user); return $this->userRepository->enrichUser($user); - } /** @@ -681,6 +700,10 @@ class API extends \Piwik\Plugin\API $user = $this->model->getUserByEmail($userEmail); + if (empty($user) || !is_array($user)) { + return []; + } + $user = $this->userFilter->filterUser($user); return $this->userRepository->enrichUser($user); } @@ -701,24 +724,54 @@ class API extends \Piwik\Plugin\API */ public function addUser($userLogin, $password, $email, $_isPasswordHashed = false, $initialIdSite = null) { + Piwik::checkUserHasSomeAdminAccess(); + UsersManager::dieIfUsersAdminIsDisabled(); + $password = Common::unsanitizeInputValue($password); UsersManager::checkPassword($password); - //create User - $this->userRepository->create($userLogin, $email, $initialIdSite, $password, $_isPasswordHashed); + $initialIdSite = $initialIdSite === null ? null : intval($initialIdSite); + + $this->userRepository->create( + (string) $userLogin, + (string) $email, + $initialIdSite, + (string) $password, + (bool) $_isPasswordHashed + ); - // send admin Email - $this->userRepository->sendNewUserEmails($userLogin, null); + /** + * Triggered after a new user is created. + * + * @param string $userLogin The new user's login. + * @param string $email The new user's e-mail. + * @param string $inviterLogin The login of the user who created the new user + */ + Piwik::postEvent('UsersManager.addUser.end', [$userLogin, $email, Piwik::getCurrentUserLogin()]); } - - public function inviteUser($userLogin, $email, $initialIdSite = null, $expired = 7) + /** + * @throws Exception + */ + public function inviteUser($userLogin, $email, $idSite = null, $expiryInDays = null) { - //create User - $this->userRepository->create($userLogin, $email, $initialIdSite); + Piwik::checkUserHasSomeAdminAccess(); + UsersManager::dieIfUsersAdminIsDisabled(); + + if (empty($expiryInDays)) { + $expiryInDays = Config\GeneralConfig::getConfigValue('default_invite_user_token_expiry_days'); + } - // send invited user an email - $this->userRepository->sendNewUserEmails($userLogin, $expired); + $idSite = $idSite === null ? null : intval($idSite); + $this->userRepository->inviteUser((string) $userLogin, (string) $email, $idSite, (int) $expiryInDays); + + /** + * Triggered after a new user was invited. + * + * @param string $userLogin The new user's login. + * @param string $email The new user's e-mail. + */ + Piwik::postEvent('UsersManager.inviteUser.end', [$userLogin, $email]); } /** @@ -742,8 +795,9 @@ class API extends \Piwik\Plugin\API self::$SET_SUPERUSER_ACCESS_REQUIRE_PASSWORD_CONFIRMATION = true; $isCliMode = Common::isPhpCliMode() && !(defined('PIWIK_TEST_MODE') && PIWIK_TEST_MODE); - if (!$isCliMode - && $requirePasswordConfirmation + if ( + !$isCliMode + && $requirePasswordConfirmation ) { $this->confirmCurrentUserPassword($passwordConfirmation); } @@ -799,11 +853,11 @@ class API extends \Piwik\Plugin\API * @see addUser() for all the parameters */ public function updateUser( - $userLogin, - $password = false, - $email = false, - $_isPasswordHashed = false, - $passwordConfirmation = false + $userLogin, + $password = false, + $email = false, + $_isPasswordHashed = false, + $passwordConfirmation = false ) { $requirePasswordConfirmation = self::$UPDATE_USER_REQUIRE_PASSWORD_CONFIRMATION; self::$UPDATE_USER_REQUIRE_PASSWORD_CONFIRMATION = true; @@ -848,7 +902,7 @@ class API extends \Piwik\Plugin\API $hasEmailChanged = mb_strtolower($email) !== mb_strtolower($userInfo['email']); if ($hasEmailChanged) { - BaseValidator::check('email', $email, [new Email(true)]); + BaseValidator::check('email', $email, [new Email(true, $userLogin)]); $changeShouldRequirePasswordConfirmation = true; } @@ -875,7 +929,7 @@ class API extends \Piwik\Plugin\API * @param string $userLogin The user's login handle. * @param boolean $passwordHasBeenUpdated Flag containing information about password change. */ - Piwik::postEvent('UsersManager.updateUser.end', array($userLogin, $passwordHasBeenUpdated, $email, $password)); + Piwik::postEvent('UsersManager.updateUser.end', [$userLogin, $passwordHasBeenUpdated, $email, $password]); } /** @@ -889,10 +943,19 @@ class API extends \Piwik\Plugin\API */ public function deleteUser($userLogin) { - Piwik::checkUserHasSuperUserAccess(); + Piwik::checkUserHasSomeAdminAccess(); UsersManager::dieIfUsersAdminIsDisabled(); $this->checkUserIsNotAnonymous($userLogin); + $user = $this->model->getUser($userLogin); + + // If user is not a super user check if the user was invited by the current user + if (!Piwik::hasUserSuperUserAccess()) { + if ($user['invited_by'] !== Piwik::getCurrentUserLogin() || !$this->model->isPendingUser($userLogin)) { + throw new NoAccessException(Piwik::translate('UsersManager_ExceptionUserDoesNotExist', $userLogin)); + } + } + $this->checkUserExist($userLogin); if ($this->isUserTheOnlyUserHavingSuperUserAccess($userLogin)) { @@ -902,16 +965,14 @@ class API extends \Piwik\Plugin\API throw new Exception($message); } - $this->model->deleteUserOnly($userLogin); - $this->model->deleteUserOptions($userLogin); - $this->model->deleteUserAccess($userLogin); + $this->model->deleteUser($userLogin); $container = StaticContainer::getContainer(); - $email = $container->make(UserDeletedEmail::class, array( + $email = $container->make(UserDeletedEmail::class, [ 'login' => Piwik::getCurrentUserLogin(), 'emailAddress' => Piwik::getCurrentUserEmail(), 'userLogin' => $userLogin - )); + ]); $email->safeSend(); Cache::deleteTrackerCache(); @@ -999,15 +1060,18 @@ class API extends \Piwik\Plugin\API $idSites = $this->getIdSitesCheckAdminAccess($idSites); - if ($userLogin === 'anonymous' && - (is_array($access) || !in_array($access, array('view', 'noaccess'), true)) + if ( + $userLogin === 'anonymous' && + (is_array($access) || !in_array($access, ['view', 'noaccess'], true)) ) { - throw new Exception(Piwik::translate("UsersManager_ExceptionAnonymousAccessNotPossible", - array('noaccess', 'view'))); + throw new Exception(Piwik::translate( + "UsersManager_ExceptionAnonymousAccessNotPossible", + ['noaccess', 'view'] + )); } - $roles = array(); - $capabilities = array(); + $roles = []; + $capabilities = []; if (is_array($access)) { // we require one role, and optionally multiple capabilities @@ -1022,7 +1086,6 @@ class API extends \Piwik\Plugin\API $ids = implode(', ', $this->roleProvider->getAllRoleIds()); throw new Exception(Piwik::translate('UsersManager_ExceptionMultipleRoleSet', $ids)); } - } else { // as only one access is set, we require it to be a role or "noaccess"... if ($access !== 'noaccess') { @@ -1039,7 +1102,7 @@ class API extends \Piwik\Plugin\API if ($access === 'noaccess') { // if the access is noaccess then we don't save it as this is the default value // when no access are specified - Piwik::postEvent('UsersManager.removeSiteAccess', array($userLogin, $idSites)); + Piwik::postEvent('UsersManager.removeSiteAccess', [$userLogin, $idSites]); } else { $role = array_shift($roles); $this->model->addUserAccess($userLogin, $role, $idSites); @@ -1077,7 +1140,7 @@ class API extends \Piwik\Plugin\API $this->checkUsersHasNotSuperUserAccess([$userLogin]); if (!is_array($capabilities)) { - $capabilities = array($capabilities); + $capabilities = [$capabilities]; } foreach ($capabilities as $entry) { @@ -1091,8 +1154,11 @@ class API extends \Piwik\Plugin\API foreach ($idSites as $idSite) { $hasRole = array_key_exists($idSite, $sitesIdWithRole); - $hasCapabilityAlready = array_key_exists($idSite, $sitesIdWithCapability) && in_array($entry, - $sitesIdWithCapability[$idSite], true); + $hasCapabilityAlready = array_key_exists($idSite, $sitesIdWithCapability) && in_array( + $entry, + $sitesIdWithCapability[$idSite], + true + ); // so far we are adding the capability only to people that also have a role... // to be defined how to handle this... eg we are not throwing an exception currently @@ -1105,10 +1171,9 @@ class API extends \Piwik\Plugin\API continue; } - $this->model->addUserAccess($userLogin, $entry, array($idSite)); + $this->model->addUserAccess($userLogin, $entry, [$idSite]); } } - } // we reload the access list which doesn't yet take in consideration this new user access @@ -1120,14 +1185,14 @@ class API extends \Piwik\Plugin\API $sites = $this->model->getSitesAccessFromUser($userLogin); $roleIds = $this->roleProvider->getAllRoleIds(); - $sitesIdWithRole = array(); - $sitesIdWithCapability = array(); + $sitesIdWithRole = []; + $sitesIdWithCapability = []; foreach ($sites as $site) { if (in_array($site['access'], $roleIds, true)) { $sitesIdWithRole[(int)$site['site']] = $site['access']; } else { if (!isset($sitesIdWithCapability[(int)$site['site']])) { - $sitesIdWithCapability[(int)$site['site']] = array(); + $sitesIdWithCapability[(int)$site['site']] = []; } $sitesIdWithCapability[(int)$site['site']][] = $site['access']; } @@ -1153,7 +1218,7 @@ class API extends \Piwik\Plugin\API $this->checkUserExists($userLogin); if (!is_array($capabilities)) { - $capabilities = array($capabilities); + $capabilities = [$capabilities]; } foreach ($capabilities as $capability) { @@ -1176,11 +1241,11 @@ class API extends \Piwik\Plugin\API private function getIdSitesCheckAdminAccess($idSites) { - // in case idSites is all we grant access to all the websites on which the current connected user has an 'admin' access if ($idSites === 'all') { + // in case idSites is all we grant access to all the websites on which the current connected user has an 'admin' access $idSites = \Piwik\Plugins\SitesManager\API::getInstance()->getSitesIdWithAdminAccess(); - } // in case the idSites is an integer we build an array - else { + } else { + // in case the idSites is an integer we build an array $idSites = Site::getIdSitesFromIdSitesString($idSites); } @@ -1193,7 +1258,7 @@ class API extends \Piwik\Plugin\API Piwik::checkUserHasAdminAccess($idSites); if (!is_array($idSites)) { - $idSites = array($idSites); + $idSites = [$idSites]; } return $idSites; @@ -1282,11 +1347,11 @@ class API extends \Piwik\Plugin\API * @return string */ public function createAppSpecificTokenAuth( - $userLogin, - $passwordConfirmation, - $description, - $expireDate = null, - $expireHours = 0 + $userLogin, + $passwordConfirmation, + $description, + $expireDate = null, + $expireHours = 0 ) { $user = $this->model->getUser($userLogin); if (empty($user) && Piwik::isValidEmailString($userLogin)) { @@ -1303,7 +1368,7 @@ class API extends \Piwik\Plugin\API * @ignore * @internal */ - Piwik::postEvent('Login.authenticate.failed', array($userLogin)); + Piwik::postEvent('Login.authenticate.failed', [$userLogin]); } throw new \Exception(Piwik::translate('UsersManager_CurrentPasswordNotCorrect')); @@ -1329,7 +1394,7 @@ class API extends \Piwik\Plugin\API $email = Piwik::getCurrentUserEmail(); $success = NewsletterSignup::signupForNewsletter($userLogin, $email, true); - $result = $success ? array('success' => true) : array('error' => true); + $result = $success ? ['success' => true] : ['error' => true]; return $result; } @@ -1363,10 +1428,8 @@ class API extends \Piwik\Plugin\API if ($this->roleProvider->isValidRole($entry)) { $roles[] = $entry; - } else { - if ($this->isValidAccessType($entry)) { - $capabilities[] = $entry; - } + } elseif ($this->isValidAccessType($entry)) { + $capabilities[] = $entry; } } return [$roles, $capabilities]; @@ -1390,8 +1453,13 @@ class API extends \Piwik\Plugin\API { // send the mail to both the old email and the new email foreach ([$newEmail, $user['email']] as $emailTo) { - $this->sendUserInfoChangedEmail('email', $user, $newEmail, $emailTo, - 'UsersManager_EmailChangeNotificationSubject'); + $this->sendUserInfoChangedEmail( + 'email', + $user, + $newEmail, + $emailTo, + 'UsersManager_EmailChangeNotificationSubject' + ); } } @@ -1409,8 +1477,13 @@ class API extends \Piwik\Plugin\API private function sendPasswordChangedEmail($user) { - $this->sendUserInfoChangedEmail('password', $user, null, $user['email'], - 'UsersManager_PasswordChangeNotificationSubject'); + $this->sendUserInfoChangedEmail( + 'password', + $user, + null, + $user['email'], + 'UsersManager_PasswordChangeNotificationSubject' + ); } private function getDeviceDescription() @@ -1429,9 +1502,7 @@ class API extends \Piwik\Plugin\API $deviceBrand = $uaParser->getBrandName(); $deviceModel = $uaParser->getModel(); - if (!empty($deviceBrand) - || !empty($deviceModel) - ) { + if (!empty($deviceBrand) || !empty($deviceModel)) { $parts = array_filter([$deviceBrand, $deviceModel]); $description .= ' (' . implode(' ', $parts) . ')'; } @@ -1441,26 +1512,35 @@ class API extends \Piwik\Plugin\API /** * resend the invite email to user - * @param $userLogin + * + * @param string $userLogin + * @param int $expiryInDays * @throws NoAccessException - * @throws \DI\DependencyException - * @throws \DI\NotFoundException */ - public function resendInvite($userLogin, $expired = 7) + public function resendInvite($userLogin, $expiryInDays = 7) { - Piwik::checkUserIsNotAnonymous(); - Piwik::checkUserHasSuperUserAccess(); - - $this->checkUserIsNotAnonymous($userLogin); + Piwik::checkUserHasSomeAdminAccess(); - if (!$this->model->getPendingUser($userLogin)) { - throw new Exception(Piwik::translate("UsersManager_ExceptionUserDoesNotExist", $userLogin)); + if (!$this->model->isPendingUser($userLogin)) { + throw new Exception(Piwik::translate('UsersManager_ExceptionUserDoesNotExist', $userLogin)); } - $this->model->updateUserFields($userLogin, ['invite_status' => 'pending']); - $this->userRepository->sendNewUserEmails($userLogin, $expired, false); - Cache::deleteTrackerCache(); - } + $user = $this->model->getUser($userLogin); + + // If user is not a super user check if the user was invited by the current user + if (!Piwik::hasUserSuperUserAccess()) { + if ($user['invited_by'] !== Piwik::getCurrentUserLogin()) { + throw new NoAccessException(Piwik::translate('UsersManager_ExceptionResendInviteDenied', $userLogin)); + } + } + $this->userRepository->reInviteUser($userLogin, (int)$expiryInDays); + /** + * Triggered after a new user was invited. + * + * @param string $userLogin The new user's login. + */ + Piwik::postEvent('UsersManager.inviteUser.resendInvite', [$userLogin, $user['email']]); + } } diff --git a/plugins/UsersManager/Controller.php b/plugins/UsersManager/Controller.php index 559ffd4324..b5bad81dcd 100644 --- a/plugins/UsersManager/Controller.php +++ b/plugins/UsersManager/Controller.php @@ -110,6 +110,13 @@ class Controller extends ControllerAdmin ['key' => 'superuser', 'value' => Piwik::translate('Installation_SuperUser')], ]; + $view->statusAccessLevels = [ + ['key' => '', 'value' => ''], // show all + ['key' => 'pending', 'value' => Piwik::translate('UsersManager_Pending')], + ['key' => 'active', 'value' => Piwik::translate('UsersManager_Active')], + ['key' => 'expired', 'value' => Piwik::translate('UsersManager_Expired')], + ]; + $capabilities = Request::processRequest('UsersManager.getAvailableCapabilities', [], []); foreach ($capabilities as $capability) { $capabilityEntry = [ diff --git a/plugins/UsersManager/Emails/UserInviteEmail.php b/plugins/UsersManager/Emails/UserInviteEmail.php index bfe43771bc..62d6daca72 100644 --- a/plugins/UsersManager/Emails/UserInviteEmail.php +++ b/plugins/UsersManager/Emails/UserInviteEmail.php @@ -1,4 +1,5 @@ currentUser = $currentUser; - $this->user = $user; - $this->token = $token; + $this->currentUser = $currentUser; + $this->invitedUser = $invitedUser; + $this->token = $token; + $this->expiryInDays = $expiryInDays; + $this->siteName = $siteName; $this->setUpEmail(); } @@ -49,7 +59,7 @@ class UserInviteEmail extends Mail private function setUpEmail() { $this->setDefaultFromPiwik(); - $this->addTo($this->user['email']); + $this->addTo($this->invitedUser['email']); $this->setSubject($this->getDefaultSubject()); $this->addReplyTo($this->getFrom(), $this->getFromName()); $this->setWrappedHtmlBody($this->getDefaultBodyView()); @@ -57,28 +67,32 @@ class UserInviteEmail extends Mail protected function getDefaultSubject() { - return Piwik::translate('CoreAdminHome_UserInviteSubject', - [$this->currentUser, $this->user['login']]); + return Piwik::translate( + 'CoreAdminHome_UserInviteSubject', + [$this->currentUser, $this->siteName] + ); } private function getDefaultSubjectWithStyle() { - return Piwik::translate('CoreAdminHome_UserInviteSubject', - ["" . $this->currentUser . "", "" . $this->user['login'] . ""]); + return Piwik::translate( + 'CoreAdminHome_UserInviteSubject', + ['' . $this->currentUser . '', '' . $this->siteName . ''] + ); } protected function getDefaultBodyView() { $view = new View('@UsersManager/_userInviteEmail.twig'); - $view->login = $this->user['login']; - $view->emailAddress = $this->user['email']; + $view->login = $this->invitedUser['login']; + $view->emailAddress = $this->invitedUser['email']; $view->token = $this->token; // content line for email body $view->content = $this->getDefaultSubjectWithStyle(); //notes for email footer - $view->notes = Piwik::translate('CoreAdminHome_UserInviteNotes', [$this->user['login'], $this->currentUser]); + $view->notes = Piwik::translate('CoreAdminHome_UserInviteNotes', [$this->currentUser, $this->expiryInDays]); return $view; } } \ No newline at end of file diff --git a/plugins/UsersManager/Model.php b/plugins/UsersManager/Model.php index 362491760e..873dbb12fa 100644 --- a/plugins/UsersManager/Model.php +++ b/plugins/UsersManager/Model.php @@ -264,6 +264,25 @@ class Model return hash(self::TOKEN_HASH_ALGO, $tokenAuth . $salt); } + public function generateRandomInviteToken() + { + $count = 0; + + do { + $token = $this->generateTokenAuth(); + + $count++; + if ($count > 20) { + // something seems wrong as the odds of that happening is basically 0. Only catching it to prevent + // endless loop in case there is some bug somewhere + throw new \Exception('Failed to generate token'); + } + + } while ($this->getUserByInviteToken($token)); + + return $token; + } + public function generateRandomTokenAuth() { $count = 0; @@ -369,6 +388,14 @@ class Model $expiredSince); } + public function getExpiredInvites($expiredSince) + { + $db = $this->getDb(); + + return $db->fetchAll("SELECT * FROM " . $this->userTable . " WHERE `invite_expired_at` is not null and invite_expired_at < ?", + $expiredSince); + } + public function checkUserHasUnexpiredToken($login) { $db = $this->getDb(); @@ -378,7 +405,6 @@ class Model $bind); } - public function deleteAllTokensForUser($login) { $db = $this->getDb(); @@ -465,6 +491,16 @@ class Model return $db->fetchRow("SELECT * FROM " . $this->userTable . " WHERE email = ?", $userEmail); } + + public function getUserByInviteToken($tokenAuth) + { + $token = $this->hashTokenAuth($tokenAuth); + if (!empty($token)) { + $db = $this->getDb(); + return $db->fetchRow("SELECT * FROM " . $this->userTable . " WHERE `invite_token` = ?", $token); + } + } + public function getUserByTokenAuth($tokenAuth) { if ($tokenAuth === 'anonymous') { @@ -478,7 +514,13 @@ class Model } } - public function addUser($userLogin, $hashedPassword, $email, $dateRegistered, $inviteStatus = null) + /** + * @param $userLogin + * @param $hashedPassword + * @param $email + * @param $dateRegistered + */ + public function addUser($userLogin, $hashedPassword, $email, $dateRegistered) { $user = array( 'login' => $userLogin, @@ -487,17 +529,20 @@ class Model 'date_registered' => $dateRegistered, 'superuser_access' => 0, 'ts_password_modified' => Date::now()->getDatetime(), - 'idchange_last_viewed' => null + 'idchange_last_viewed' => null, + 'invited_by' => null, ); - - if ($inviteStatus) { - $user['invite_status'] = 'pending'; - } - $db = $this->getDb(); $db->insert($this->userTable, $user); - return $user; + } + + public function attachInviteToken($userLogin, $token, $expiryInDays = 7) + { + $this->updateUserFields($userLogin, [ + 'invite_token' => $this->hashTokenAuth($token), + 'invite_expired_at' => Date::now()->addDay($expiryInDays)->getDatetime() + ]); } public function setSuperUserAccess($userLogin, $hasSuperUserAccess) @@ -593,6 +638,13 @@ class Model } } + public function deleteUser($userLogin): void + { + $this->deleteUserOnly($userLogin); + $this->deleteUserOptions($userLogin); + $this->deleteUserAccess($userLogin); + } + /** * @param string $userLogin */ @@ -640,23 +692,6 @@ class Model return Db::get(); } - public function getUserLoginsMatching($idSite = null, $pattern = null, $access = null, $logins = null) - { - $filter = new UserTableFilter($access, $idSite, $pattern, $logins); - - list($joins, $bind) = $filter->getJoins('u'); - list($where, $whereBind) = $filter->getWhere(); - - $bind = array_merge($bind, $whereBind); - - $sql = 'SELECT u.login FROM ' . $this->userTable . " u $joins $where"; - - $db = $this->getDb(); - - $result = $db->fetchAll($sql, $bind); - $result = array_column($result, 'login'); - return $result; - } /** * Returns all users and their access to `$idSite`. @@ -675,9 +710,10 @@ class Model $offset = null, $pattern = null, $access = null, + $status = null, $logins = null ) { - $filter = new UserTableFilter($access, $idSite, $pattern, $logins); + $filter = new UserTableFilter($access, $idSite, $pattern, $status, $logins); list($joins, $bind) = $filter->getJoins('u'); list($where, $whereBind) = $filter->getWhere(); @@ -735,12 +771,12 @@ class Model return $logins; } - public function getPendingUser($userLogin) + public function isPendingUser(string $userLogin): bool { $db = $this->getDb(); - $sql = "SELECT count(*) FROM " . $this->userTable . " WHERE login = ? and invite_status not like ?"; - $bind = [$userLogin, 'accept']; - return $db->fetchOne($sql, $bind); + $sql = "SELECT count(*) FROM " . $this->userTable . " WHERE (login = ? or email = ?) and invite_token is not null"; + $bind = [$userLogin, $userLogin]; + $count = (int) $db->fetchOne($sql, $bind); + return $count > 0; } - } diff --git a/plugins/UsersManager/Repository/UserRepository.php b/plugins/UsersManager/Repository/UserRepository.php index 51dd49636b..e806211abc 100644 --- a/plugins/UsersManager/Repository/UserRepository.php +++ b/plugins/UsersManager/Repository/UserRepository.php @@ -16,18 +16,26 @@ use Piwik\Plugins\UsersManager\UserAccessFilter; use Piwik\Plugins\UsersManager\UsersManager; use Piwik\Plugins\UsersManager\Validators\Email; use Piwik\Plugins\UsersManager\Validators\Login; +use Piwik\Site; use Piwik\Validators\BaseValidator; use Piwik\Validators\IdSite; use Piwik\Plugin; - class UserRepository { - + /** + * @var Model + */ protected $model; + /** + * @var UserAccessFilter + */ protected $filter; + /** + * @var Password + */ protected $password; public function __construct(Model $model, UserAccessFilter $filter, Password $password) @@ -37,36 +45,35 @@ class UserRepository $this->password = $password; } - - public function index($userLogin, $pending) - { - Piwik::checkUserHasSuperUserAccessOrIsTheUser($userLogin); - $this->checkUserExists($userLogin); - - $user = $this->model->getUser($userLogin, $pending); - - $user = $this->filter->filterUser($user); - return $this->enrichUser($user); - } - - public function create($userLogin, $email, $initialIdSite, $password = '', $_isPasswordHashed = false) - { - $this->validateAccess(); + /** + * @param string $userLogin + * @param string $email + * @param int $initialIdSite + * @param string $password + * @param bool $isPasswordHashed + * @throws \Exception + */ + public function create( + string $userLogin, + string $email, + ?int $initialIdSite = null, + string $password = '', + bool $isPasswordHashed = false + ): void { if (!Piwik::hasUserSuperUserAccess()) { if (empty($initialIdSite)) { throw new \Exception(Piwik::translate("UsersManager_AddUserNoInitialAccessError")); } - // check if the site exist + // check if the site exists BaseValidator::check('siteId', $initialIdSite, [new IdSite()]); Piwik::checkUserHasAdminAccess($initialIdSite); } - //validate info - BaseValidator::check('userLogin', $userLogin, [new Login(true)]); - BaseValidator::check('email', $email, [new Email(true)]); + BaseValidator::check(Piwik::translate('General_Username'), $userLogin, [new Login(true)]); + BaseValidator::check(Piwik::translate('Installation_Email'), $email, [new Email(true)]); if (!empty($password)) { - if (!$_isPasswordHashed) { + if (!$isPasswordHashed) { $passwordTransformed = UsersManager::getPasswordHash($password); } else { $passwordTransformed = $password; @@ -74,67 +81,69 @@ class UserRepository $password = $this->password->hash($passwordTransformed); } - //insert user into database. - $this->model->addUser($userLogin, $password, $email, Date::now()->getDatetime(), empty($password)); - - /** - * Triggered after a new user is invited. - * - * @param string $userLogin The new user's details handle. - */ - Piwik::postEvent('UsersManager.inviteUser.end', array($userLogin, $email)); + $this->model->addUser($userLogin, $password, $email, Date::now()->getDatetime()); if ($initialIdSite) { API::getInstance()->setUserAccess($userLogin, 'view', $initialIdSite); } + + $this->sendUserCreationNotification($userLogin); } - public function sendNewUserEmails($userLogin, $expired = 7, $newUser = true) + public function inviteUser(string $userLogin, string $email, ?int $initialIdSite = null, $expiryInDays = null): void { + $this->create($userLogin, $email, $initialIdSite); + $this->model->updateUserFields($userLogin, ['invited_by' => Piwik::getCurrentUserLogin()]); + $user = $this->model->getUser($userLogin); + $generatedToken = $this->model->generateRandomInviteToken(); + $this->model->attachInviteToken($userLogin, $generatedToken, $expiryInDays); + $this->sendInvitationEmail($user, $generatedToken, $expiryInDays); + } - //send Admin Email - if ($newUser) { - $mail = StaticContainer::getContainer()->make(UserCreatedEmail::class, array( - 'login' => Piwik::getCurrentUserLogin(), - 'emailAddress' => Piwik::getCurrentUserEmail(), - 'userLogin' => $userLogin, - )); - $mail->safeSend(); - } - - - if (!empty($expired)) { - //retrieve user details - $user = API::getInstance()->getUser($userLogin); - - //remove all previous token - $this->model->deleteAllTokensForUser($userLogin); - - //generate Token - $generatedToken = $this->model->generateRandomTokenAuth(); - - //attach token to user - $this->model->addTokenAuth($userLogin, $generatedToken, "Invite Token", Date::now()->getDatetime(), - Date::now()->addDay($expired)->getDatetime()); - + public function reInviteUser(string $userLogin, $expiryInDays = null): void + { + $user = $this->model->getUser($userLogin); + $generatedToken = $this->model->generateRandomInviteToken(); + $this->model->attachInviteToken($userLogin, $generatedToken, $expiryInDays); + $this->sendInvitationEmail($user, $generatedToken, $expiryInDays); + } - // send email - $email = StaticContainer::getContainer()->make(UserInviteEmail::class, array( - 'currentUser' => Piwik::getCurrentUserLogin(), - 'user' => $user, - 'token' => $generatedToken - )); - $email->safeSend(); - } + protected function sendUserCreationNotification(string $createdUserLogin): void + { + $mail = StaticContainer::getContainer()->make(UserCreatedEmail::class, [ + 'login' => Piwik::getCurrentUserLogin(), + 'emailAddress' => Piwik::getCurrentUserEmail(), + 'userLogin' => $createdUserLogin, + ]); + $mail->safeSend(); } - private function validateAccess() + protected function sendInvitationEmail(array $user, string $inviteToken, int $expiryInDays): void { - Piwik::checkUserHasSomeAdminAccess(); - UsersManager::dieIfUsersAdminIsDisabled(); + $site = $this->model->getSitesAccessFromUser($user['login']); + + if (isset($site[0])) { + $siteName = Site::getNameFor($site[0]['site']); + } else { + $siteName = "Default Site"; + } + + $email = StaticContainer::getContainer()->make(UserInviteEmail::class, [ + 'currentUser' => Piwik::getCurrentUserLogin(), + 'invitedUser' => $user, + 'siteName' => $siteName, + 'token' => $inviteToken, + 'expiryInDays' => $expiryInDays + ]); + $email->safeSend(); } - public function enrichUser($user) + /** + * @param array $user + * @return array + * @throws \Exception + */ + public function enrichUser(array $user): array { if (empty($user)) { return $user; @@ -149,22 +158,28 @@ class UserRepository $user['last_seen'] = Date::getDatetimeFromTimestamp($lastSeen); } + $user['invite_status'] = 'active'; + + if (!empty($user['invite_expired_at'])) { + $inviteExpireAt = Date::factory($user['invite_expired_at']); + // if token expired + if (Date::now()->isLater($inviteExpireAt)) { + $user['invite_status'] = 'expired'; + } + // if token not expired + if (Date::now()->isEarlier($inviteExpireAt)) { + $dayLeft = floor(Date::secondsToDays($inviteExpireAt->getTimestamp() - Date::now()->getTimestamp())); + $user['invite_status'] = $dayLeft; + } + } + if (Piwik::hasUserSuperUserAccess()) { $user['uses_2fa'] = !empty($user['twofactor_secret']) && $this->isTwoFactorAuthPluginEnabled(); unset($user['twofactor_secret']); - if (!empty($user['invite_status']) && $user['invite_status'] === 'pending') { - $validToken = $this->model->checkUserHasUnexpiredToken($user['login']); - if (!$validToken) { - $user['invite_status'] = 'expired'; - } - } - if (empty($user['invite_status'])) { - $user['invite_status'] = 'accept'; - } return $user; } - $newUser = array('login' => $user['login']); + $newUser = ['login' => $user['login']]; if ($user['login'] === Piwik::getCurrentUserLogin() || !empty($user['superuser_access'])) { $newUser['email'] = $user['email']; @@ -184,11 +199,20 @@ class UserRepository if (isset($user['last_seen'])) { $newUser['last_seen'] = $user['last_seen']; } + $newUser['invite_status'] = $user['invite_status']; + if (isset($user['invited_by'])) { + $newUser['invited_by'] = $user['invited_by']; + } return $newUser; } - public function enrichUsers($users) + /** + * @param array $users + * @return mixed + * @throws \Exception + */ + public function enrichUsers(array $users): array { if (!empty($users)) { foreach ($users as $index => $user) { @@ -198,7 +222,11 @@ class UserRepository return $users; } - public function enrichUsersWithLastSeen($users) + /** + * @param array $users + * @return mixed + */ + public function enrichUsersWithLastSeen(array $users): array { $formatter = new Formatter(); @@ -212,14 +240,11 @@ class UserRepository return $users; } - - private function isTwoFactorAuthPluginEnabled() + private function isTwoFactorAuthPluginEnabled(): bool { if (!isset($this->twoFaPluginActivated)) { $this->twoFaPluginActivated = Plugin\Manager::getInstance()->isPluginActivated('TwoFactorAuth'); } return $this->twoFaPluginActivated; } - - -} \ No newline at end of file +} diff --git a/plugins/UsersManager/Sql/UserTableFilter.php b/plugins/UsersManager/Sql/UserTableFilter.php index 4743d17755..84d259639d 100644 --- a/plugins/UsersManager/Sql/UserTableFilter.php +++ b/plugins/UsersManager/Sql/UserTableFilter.php @@ -29,16 +29,22 @@ class UserTableFilter */ private $filterSearch; + /** + * @var string + */ + private $filterStatus; + /** * @var string[] */ private $logins; - public function __construct($filterByRole, $filterByRoleSite, $filterSearch, $logins = null) + public function __construct($filterByRole, $filterByRoleSite, $filterSearch, $filterStatus, $logins = null) { $this->filterByRole = $filterByRole; $this->filterByRoleSite = $filterByRoleSite; $this->filterSearch = $filterSearch; + $this->filterStatus = $filterStatus; $this->logins = $logins; if (isset($this->filterByRole) && !isset($this->filterByRoleSite)) { @@ -47,7 +53,7 @@ class UserTableFilter // can only filter by superuser if current user is a superuser if ($this->filterByRole == 'superuser' - && !Piwik::hasUserSuperUserAccess() + && !Piwik::hasUserSuperUserAccess() ) { $this->filterByRole = null; } @@ -78,6 +84,28 @@ class UserTableFilter $bind = array_merge($bind, ['%' . $this->filterSearch . '%', '%' . $this->filterSearch . '%']); } + if ($this->filterStatus) { + if ($this->filterStatus === 'active') { + $conditions[] = '(u.invite_token is NULL and u.invite_expired_at is NULL)'; + } + if ($this->filterStatus === 'pending') { + $conditions[] = '(u.invite_token is not NULL and u.invite_expired_at > DATE(Now()))'; + // Pending users are only visible for super user or the user, who invited the user + if (!Piwik::hasUserSuperUserAccess()) { + $conditions[] = 'u.invited_by = ?'; + $bind[] = Piwik::getCurrentUserLogin(); + } + } + if ($this->filterStatus === 'expired') { + $conditions[] = '(u.invite_token is not NULL and u.invite_expired_at < DATE(Now()))'; + // Expired users are only visible for super user or the user, who invited the user + if (!Piwik::hasUserSuperUserAccess()) { + $conditions[] = 'u.invited_by = ?'; + $bind[] = Piwik::getCurrentUserLogin(); + } + } + } + if ($this->logins !== null) { $logins = array_map('json_encode', $this->logins); $conditions[] = 'u.login IN (' . implode(',', $logins) . ')'; diff --git a/plugins/UsersManager/Tasks.php b/plugins/UsersManager/Tasks.php index 41484fe0c9..d8842d9c4d 100644 --- a/plugins/UsersManager/Tasks.php +++ b/plugins/UsersManager/Tasks.php @@ -1,10 +1,12 @@ daily("cleanupExpiredTokens"); $this->daily("setUserDefaultReportPreference"); + $this->daily("cleanUpExpiredInvites"); } - public function cleanupExpiredTokens() { + public function cleanupExpiredTokens() + { $this->usersModel->deleteExpiredTokens(Date::now()->getDatetime()); } + public function cleanUpExpiredInvites() + { + // Expired invites will be removed after 3 days, so there's a chance to resend an invite before it's removed. + + $expiredInvites = $this->usersModel->getExpiredInvites(Date::now()->subDay(3)->getDatetime()); + + foreach ($expiredInvites as $expiredInvite) { + try { + $this->usersModel->deleteUser($expiredInvite['login']); + } catch (\Exception $e) { + // ignore possible errors thrown during delete user event + } + } + } + public function setUserDefaultReportPreference() { // We initialize the default report user preference for each user (if it hasn't been inited before) for performance, @@ -46,7 +65,7 @@ class Tasks extends \Piwik\Plugin\Tasks $usersModel = $this->usersModel; $usersManagerApi = $this->usersManagerApi; Access::getInstance()->doAsSuperUser(function () use ($usersModel, $usersManagerApi) { - $allUsers = $usersModel->getUsers(array()); + $allUsers = $usersModel->getUsers([]); foreach ($allUsers as $user) { $usersManagerApi->initUserPreferenceWithDefault($user['login'], API::PREFERENCE_DEFAULT_REPORT); } diff --git a/plugins/UsersManager/UserAccessFilter.php b/plugins/UsersManager/UserAccessFilter.php index 9378b8a3d1..f0391138ce 100644 --- a/plugins/UsersManager/UserAccessFilter.php +++ b/plugins/UsersManager/UserAccessFilter.php @@ -108,7 +108,8 @@ class UserAccessFilter } return array_values(array_filter($users, function ($user) { - return $this->isNonSuperUserAllowedToSeeThisLogin($user['login']); + $isPendingVisible = empty($user['invite_token']) || $this->isOwnLogin($user['invited_by']); + return $isPendingVisible && $this->isNonSuperUserAllowedToSeeThisLogin($user['login']); })); } diff --git a/plugins/UsersManager/UsersManager.php b/plugins/UsersManager/UsersManager.php index 5403dd6645..16fc1aedf9 100644 --- a/plugins/UsersManager/UsersManager.php +++ b/plugins/UsersManager/UsersManager.php @@ -1,4 +1,5 @@ 'getStylesheetFiles', - 'SitesManager.deleteSite.end' => 'deleteSite', - 'Tracker.Cache.getSiteAttributes' => 'recordAdminUsersInCache', - 'Translate.getClientSideTranslationKeys' => 'getClientSideTranslationKeys', - 'Platform.initialized' => 'onPlatformInitialized', - 'System.addSystemSummaryItems' => 'addSystemSummaryItems', - ); + return [ + 'AssetManager.getStylesheetFiles' => 'getStylesheetFiles', + 'SitesManager.deleteSite.end' => 'deleteSite', + 'Tracker.Cache.getSiteAttributes' => 'recordAdminUsersInCache', + 'Translate.getClientSideTranslationKeys' => 'getClientSideTranslationKeys', + 'Platform.initialized' => 'onPlatformInitialized', + 'System.addSystemSummaryItems' => 'addSystemSummaryItems', + ]; } public static function isUsersAdminEnabled() { - return (bool) Config::getInstance()->General['enable_users_admin']; + return (bool)Config::getInstance()->General['enable_users_admin']; } public static function dieIfUsersAdminIsDisabled() @@ -140,7 +142,7 @@ class UsersManager extends \Piwik\Plugin public static function isValidPasswordString($input) { if (!SettingsPiwik::isUserCredentialsSanityCheckEnabled() - && !empty($input) + && !empty($input) ) { return true; } @@ -171,10 +173,12 @@ class UsersManager extends \Piwik\Plugin Piwik::postEvent('UsersManager.checkPassword', array($password)); if (!self::isValidPasswordString($password)) { - throw new Exception(Piwik::translate('UsersManager_ExceptionInvalidPassword', array(self::PASSWORD_MIN_LENGTH))); + throw new Exception(Piwik::translate('UsersManager_ExceptionInvalidPassword', + array(self::PASSWORD_MIN_LENGTH))); } if (mb_strlen($password) > self::PASSWORD_MAX_LENGTH) { - throw new Exception(Piwik::translate('UsersManager_ExceptionInvalidPasswordTooLong', array(self::PASSWORD_MAX_LENGTH))); + throw new Exception(Piwik::translate('UsersManager_ExceptionInvalidPasswordTooLong', + array(self::PASSWORD_MAX_LENGTH))); } } @@ -331,6 +335,10 @@ class UsersManager extends \Piwik\Plugin $translationKeys[] = 'UsersManager_Pending'; $translationKeys[] = 'UsersManager_Expired'; $translationKeys[] = 'UsersManager_Decline'; - + $translationKeys[] = 'UsersManager_ResendInviteSuccess'; + $translationKeys[] = 'UsersManager_InviteSuccess'; + $translationKeys[] = 'UsersManager_InviteDayLeft'; + $translationKeys[] = 'UsersManager_FilterByStatus'; + $translationKeys[] = 'UsersManager_ExpiredInviteAutomaticallyRemoved'; } } diff --git a/plugins/UsersManager/Validators/Email.php b/plugins/UsersManager/Validators/Email.php index 98ed633747..4539c777bb 100644 --- a/plugins/UsersManager/Validators/Email.php +++ b/plugins/UsersManager/Validators/Email.php @@ -1,4 +1,5 @@ checkUnique = $checkUnique; + $this->userLogin = $userLogin; } public function validate($value) @@ -30,13 +32,12 @@ class Email extends BaseValidator } if (!Piwik::isValidEmailString($value)) { - throw new Exception(Piwik::translate('General_ValidatorErrorNotEmailLike', array($value))); + throw new Exception(Piwik::translate('General_ValidatorErrorNotEmailLike', [$value])); } if ($this->checkUnique) { $this->isUnique($value); } - } /** @@ -46,13 +47,20 @@ class Email extends BaseValidator */ private function isUnique($email) { - if (APIUsersManager::getInstance()->userExists($email)) { - throw new Exception(Piwik::translate('UsersManager_ExceptionLoginExists', $email)); + if (APIUsersManager::getInstance()->userEmailExists($email)) { + throw new Exception(Piwik::translate('UsersManager_ExceptionEmailExists', $email)); } - if (APIUsersManager::getInstance()->userEmailExists($email)) { - throw new Exception(Piwik::translate('UsersManager_ExceptionLoginExistsAsEmail', $email)); + if ($this->userLogin && mb_strtolower($this->userLogin) !== mb_strtolower($email) && APIUsersManager::getInstance()->userExists($email)) { + throw new Exception(Piwik::translate('UsersManager_ExceptionEmailExistsAsLogin', $email)); + } + + if (!$this->userLogin && APIUsersManager::getInstance()->userExists($email)) { + throw new Exception(Piwik::translate('UsersManager_ExceptionEmailExistsAsLogin', $email)); } - } + if (!Piwik::isValidEmailString($email)) { + throw new Exception(Piwik::translate('UsersManager_ExceptionInvalidEmail')); + } + } } diff --git a/plugins/UsersManager/Validators/Login.php b/plugins/UsersManager/Validators/Login.php index 7e3e19cda5..ad97537c0d 100644 --- a/plugins/UsersManager/Validators/Login.php +++ b/plugins/UsersManager/Validators/Login.php @@ -1,4 +1,5 @@ = self::loginMinimumLength - && $l <= self::loginMaximumLength - && (preg_match('/^[A-Za-zÄäÖöÜüß0-9_.@+-]*$/D', $value) > 0)) + if ( + !($l >= self::loginMinimumLength + && $l <= self::loginMaximumLength + && (preg_match('/^[A-Za-zÄäÖöÜüß0-9_.@+-]*$/D', $value) > 0)) ) { - throw new Exception(Piwik::translate('UsersManager_ExceptionInvalidLoginFormat', - array(self::loginMinimumLength, self::loginMaximumLength))); + throw new Exception(Piwik::translate( + 'UsersManager_ExceptionInvalidLoginFormat', + [self::loginMinimumLength, self::loginMaximumLength] + )); } if ($this->checkUnique) { @@ -65,4 +69,4 @@ class Login extends BaseValidator throw new Exception(Piwik::translate('UsersManager_ExceptionLoginExistsAsEmail', $login)); } } -} \ No newline at end of file +} diff --git a/plugins/UsersManager/lang/en.json b/plugins/UsersManager/lang/en.json index a4fa908773..1e23b14686 100644 --- a/plugins/UsersManager/lang/en.json +++ b/plugins/UsersManager/lang/en.json @@ -187,12 +187,18 @@ "NewsletterSignupFailureMessage": "Whoops, something went wrong. We weren't able to sign you up for the newsletter.", "NewsletterSignupSuccessMessage": "Super, you're all signed up! We'll be in touch soon.", "FirstWebsitePermission": "First website permission", - "InviteSuccessNotification": "The invited User will receive an email to accept the invite, the invite valid for %1$s days, you can also resend and delete the invite in the user management page.", + "InviteSuccessNotification": "The invited user will receive an email to accept the invite. This invite is valid for %1$s days. You can also resend and delete the invite on the user management page.", "ResendInviteConfirmSingle": "Are you sure you want to resend invitation to %1$s?", "Status": "Status", "Pending": "Pending", "Active": "Active", - "Expired": "Invite Expired", - "Decline": "Invite Declined" + "Expired": "Invite expired", + "Decline": "Invite declined", + "ResendInviteSuccess": "Success! The invite has been resent to user %s", + "InviteSuccess": "Success! The invite has been sent.", + "InviteDayLeft": "Expires in %s days", + "FilterByStatus": "Filter by status", + "ExceptionResendInviteDenied": "Resending an invite is only allowed to the user who invited %s or any super user.", + "ExpiredInviteAutomaticallyRemoved": "Expired invites will be automatically deleted after %1$s days." } } diff --git a/plugins/UsersManager/templates/index.twig b/plugins/UsersManager/templates/index.twig index 82237074a1..fc6c0057f5 100644 --- a/plugins/UsersManager/templates/index.twig +++ b/plugins/UsersManager/templates/index.twig @@ -10,6 +10,7 @@ current-user-role="'{{ currentUserRole }}'" access-levels="{{ accessLevels|json_encode|e('html_attr') }}" filter-access-levels="{{ filterAccessLevels|json_encode|e('html_attr') }}" + filter-status-levels="{{ statusAccessLevels|json_encode|e('html_attr') }}" > diff --git a/plugins/UsersManager/tests/Fixtures/ManyUsers.php b/plugins/UsersManager/tests/Fixtures/ManyUsers.php index 2fa2607f4a..66da0384a4 100644 --- a/plugins/UsersManager/tests/Fixtures/ManyUsers.php +++ b/plugins/UsersManager/tests/Fixtures/ManyUsers.php @@ -1,10 +1,12 @@ array('superuser' => 1), - 'login2' => array('view' => array(3,5), 'admin' => array(1,2,6)), - 'login3' => array('view' => array(), 'admin' => array()), // no access to any site - 'login4' => array('view' => array(6), 'admin' => array()), // only access to one with view - 'login5' => array('view' => array(), 'admin' => array(3)), // only access to one with admin - 'login6' => array('view' => array(), 'admin' => array(6,3)), // access to a couple of sites with admin - 'login7' => array('view' => array(2,1,6,3), 'admin' => array()), // access to a couple of sites with view - 'login8' => array('view' => array(4,7), 'admin' => array(2,5)), // access to a couple of sites with admin and view - 'login9' => array('view' => array(5,6), 'admin' => array(8,9)), - 'login10' => array('superuser' => 1) - ); - - public $pendingUser = array( - 'login'=>'000pendingUser1', - 'email'=>'pendinguser1light@example.com' - ); + public $users = []; + + public $baseUsers = [ + 'login1' => ['superuser' => 1], + 'login2' => ['view' => [3, 5], 'admin' => [1, 2, 6]], + 'login3' => ['view' => [], 'admin' => []], // no access to any site + 'login4' => ['view' => [6], 'admin' => []], // only access to one with view + 'login5' => ['view' => [], 'admin' => [3]], // only access to one with admin + 'login6' => ['view' => [], 'admin' => [6, 3]], // access to a couple of sites with admin + 'login7' => ['view' => [2, 1, 6, 3], 'admin' => []], // access to a couple of sites with view + 'login8' => ['view' => [4, 7], 'admin' => [2, 5]], // access to a couple of sites with admin and view + 'login9' => ['view' => [5, 6], 'admin' => [8, 9]], + 'login10' => ['superuser' => 1] + ]; + + public $pendingUser = [ + 'login' => '000pendingUser1', + 'email' => 'pendinguser1light@example.com' + ]; + + public $pendingUser2 = [ + 'login' => 'zzzpendingUser2', + 'email' => 'zpendinguser2light@example.com' + ]; public $baseSites = [ - 'sleep', - 'escapesequence', - 'hunter', - 'transistor', - 'wicket', - 'relentless', - 'scarecrow', - 'nova', - 'resilience', - 'tricks', + 'sleep', + 'escapesequence', + 'hunter', + 'transistor', + 'wicket', + 'relentless', + 'scarecrow', + 'nova', + 'resilience', + 'tricks', ]; public $textAdditions = [ - 'life', - 'light', - 'flight', - 'conchords', + 'life', + 'light', + 'flight', + 'conchords', ]; - public function __construct($userCopyCount = self::USER_COUNT, $siteCopyCount = self::SITE_COUNT, $addTextSuffixes = true) - { + public function __construct( + $userCopyCount = self::USER_COUNT, + $siteCopyCount = self::SITE_COUNT, + $addTextSuffixes = true + ) { $this->userCopyCount = $userCopyCount; $this->siteCopyCount = $siteCopyCount; $this->addTextSuffixes = $addTextSuffixes; @@ -105,7 +115,7 @@ class ManyUsers extends Fixture $api = API::getInstance(); // add a pending invite user - $api->inviteUser($this->pendingUser['login'], $this->pendingUser['email'],1); + $api->inviteUser($this->pendingUser['login'], $this->pendingUser['email'], 1); for ($i = 0; $i != $this->userCopyCount; ++$i) { $addToEmail = $i % 2 == 0; @@ -121,7 +131,7 @@ class ManyUsers extends Fixture } $email = $login . '@example.com'; - if ($this->addTextSuffixes &&$addToEmail) { + if ($this->addTextSuffixes && $addToEmail) { $email = $login . $textAddition . '@example.com'; } @@ -147,5 +157,9 @@ class ManyUsers extends Fixture $this->users[$login]['token'] = $tokenAuth; } } + + //add admin view pending user + $api->inviteUser($this->pendingUser2['login'], $this->pendingUser2['email'], 1); + $model->updateUserFields($this->pendingUser2['login'], ['invited_by' => 'login2']); } -} \ No newline at end of file +} diff --git a/plugins/UsersManager/tests/Integration/APITest.php b/plugins/UsersManager/tests/Integration/APITest.php index 20a0c3a046..a6c8454d4d 100644 --- a/plugins/UsersManager/tests/Integration/APITest.php +++ b/plugins/UsersManager/tests/Integration/APITest.php @@ -1,4 +1,5 @@ assertEquals($self->login, $login); - $self->assertEquals(array(1, 2), $idSites); + $self->assertEquals([1, 2], $idSites); }); - $this->api->setUserAccess($this->login, 'noaccess', array(1, 2)); + $this->api->setUserAccess($this->login, 'noaccess', [1, 2]); $this->assertTrue($eventTriggered, 'UsersManager.removeSiteAccess event was not triggered'); } @@ -189,20 +194,20 @@ class APITest extends IntegrationTestCase $eventTriggered = true; }); - $this->api->setUserAccess($this->login, 'admin', array(1, 2)); + $this->api->setUserAccess($this->login, 'admin', [1, 2]); $this->assertFalse($eventTriggered, 'UsersManager.removeSiteAccess event was triggered but should not'); } public function test_getAllUsersPreferences_isEmpty_whenNoPreference() { - $preferences = $this->api->getAllUsersPreferences(array('preferenceName')); + $preferences = $this->api->getAllUsersPreferences(['preferenceName']); $this->assertEmpty($preferences); } public function test_getAllUsersPreferences_isEmpty_whenNoPreferenceAndMultipleRequested() { - $preferences = $this->api->getAllUsersPreferences(array('preferenceName', 'randomDoesNotExist')); + $preferences = $this->api->getAllUsersPreferences(['preferenceName', 'randomDoesNotExist']); $this->assertEmpty($preferences); } @@ -261,16 +266,20 @@ class APITest extends IntegrationTestCase $this->api->setUserPreference($user3, API::PREFERENCE_DEFAULT_REPORT_DATE, 'otherPreferenceVALUE'); $this->api->setUserPreference($user3, 'RandomNOTREQUESTED', 'RandomNOTREQUESTED'); - $expected = array( - $user2 => array( - API::PREFERENCE_DEFAULT_REPORT => 'valueForUser2' - ), - $user3 => array( - API::PREFERENCE_DEFAULT_REPORT => 'valueForUser3', - API::PREFERENCE_DEFAULT_REPORT_DATE => 'otherPreferenceVALUE', - ), - ); - $result = $this->api->getAllUsersPreferences(array(API::PREFERENCE_DEFAULT_REPORT, API::PREFERENCE_DEFAULT_REPORT_DATE, 'randomDoesNotExist')); + $expected = [ + $user2 => [ + API::PREFERENCE_DEFAULT_REPORT => 'valueForUser2' + ], + $user3 => [ + API::PREFERENCE_DEFAULT_REPORT => 'valueForUser3', + API::PREFERENCE_DEFAULT_REPORT_DATE => 'otherPreferenceVALUE', + ], + ]; + $result = $this->api->getAllUsersPreferences([ + API::PREFERENCE_DEFAULT_REPORT, + API::PREFERENCE_DEFAULT_REPORT_DATE, + 'randomDoesNotExist' + ]); $this->assertSame($expected, $result); } @@ -282,12 +291,12 @@ class APITest extends IntegrationTestCase $this->api->setUserPreference($user2, API::PREFERENCE_DEFAULT_REPORT, 'valueForUser2'); $this->api->setUserPreference($user2, API::PREFERENCE_DEFAULT_REPORT_DATE, 'RandomNOTREQUESTED'); - $expected = array( - $user2 => array( - API::PREFERENCE_DEFAULT_REPORT => 'valueForUser2' - ), - ); - $result = $this->api->getAllUsersPreferences(array(API::PREFERENCE_DEFAULT_REPORT, 'randomDoesNotExist')); + $expected = [ + $user2 => [ + API::PREFERENCE_DEFAULT_REPORT => 'valueForUser2' + ], + ]; + $result = $this->api->getAllUsersPreferences([API::PREFERENCE_DEFAULT_REPORT, 'randomDoesNotExist']); $this->assertSame($expected, $result); } @@ -310,7 +319,7 @@ class APITest extends IntegrationTestCase $identity = FakeAccess::$identity; FakeAccess::$identity = $this->login; // ensure password will be checked against this user - $this->api->updateUser($this->login, 'newPassword', 'email@example.com', false, $this->password); + $this->api->updateUser($this->login, 'newPassword', 'email@example.com', false, $this->password); FakeAccess::$identity = $identity; $model = new Model(); @@ -322,11 +331,13 @@ class APITest extends IntegrationTestCase $this->assertTrue($passwordHelper->verify(UsersManager::getPasswordHash('newPassword'), $user['password'])); - $subjects = array_map(function (Mail $mail) { return $mail->getSubject(); }, $capturedMails); + $subjects = array_map(function (Mail $mail) { + return $mail->getSubject(); + }, $capturedMails); $this->assertEquals([ - 'UsersManager_EmailChangeNotificationSubject', // sent twice to old email and new - 'UsersManager_EmailChangeNotificationSubject', - 'UsersManager_PasswordChangeNotificationSubject', + 'UsersManager_EmailChangeNotificationSubject', // sent twice to old email and new + 'UsersManager_EmailChangeNotificationSubject', + 'UsersManager_PasswordChangeNotificationSubject', ], $subjects); } @@ -343,7 +354,9 @@ class APITest extends IntegrationTestCase $this->api->updateUser($this->login, 'newPassword2', 'email2@example.com', false, $this->password); FakeAccess::$identity = $identity; - $subjects = array_map(function (Mail $mail) { return $mail->getSubject(); }, $capturedMails); + $subjects = array_map(function (Mail $mail) { + return $mail->getSubject(); + }, $capturedMails); $this->assertEquals([], $subjects); } @@ -384,18 +397,24 @@ class APITest extends IntegrationTestCase $this->expectException(\Exception::class); $this->expectExceptionMessage('UsersManager_ExceptionInvalidPasswordTooLong'); - $this->api->updateUser($this->login, str_pad('foo', UsersManager::PASSWORD_MAX_LENGTH + 1), 'email@example.com', false, $this->password); + $this->api->updateUser( + $this->login, + str_pad('foo', UsersManager::PASSWORD_MAX_LENGTH + 1), + 'email@example.com', + false, + $this->password + ); } public function test_update_user_fails_if_email_exists_as_other_user_username() { $this->expectException(\Exception::class); - $this->expectExceptionMessage('UsersManager_CurrentPasswordNotCorrect'); + $this->expectExceptionMessage('UsersManager_ExceptionEmailExistsAsLogin'); $user2 = 'existed@example.com'; $this->api->addUser($user2, 'password', 'userlogin2@password.de'); - $this->api->updateUser($this->login, $this->password, $user2, false, $this->password); + $this->api->updateUser($this->login, $this->password, $user2, false, $this->password); } public function test_update_can_update_user_email_to_own_username() @@ -414,7 +433,7 @@ class APITest extends IntegrationTestCase public function test_cannot_create_user_if_email_exists_as_username() { $this->expectException(\Exception::class); - $this->expectExceptionMessage('UsersManager_ExceptionLoginExists'); + $this->expectExceptionMessage('UsersManager_ExceptionEmailExistsAsLogin'); $user2 = 'existed@example.com'; $this->api->addUser($user2, 'password', 'email@example.com'); @@ -444,20 +463,20 @@ class APITest extends IntegrationTestCase // super user has admin access for every site $access = $this->api->getSitesAccessFromUser($user2); - $expected = array( - array( - 'site' => 1, - 'access' => 'admin' - ), - array( - 'site' => 2, - 'access' => 'admin' - ), - array( - 'site' => 3, - 'access' => 'admin' - ), - ); + $expected = [ + [ + 'site' => 1, + 'access' => 'admin' + ], + [ + 'site' => 2, + 'access' => 'admin' + ], + [ + 'site' => 3, + 'access' => 'admin' + ], + ]; $this->assertEquals($expected, $access); } @@ -469,7 +488,13 @@ class APITest extends IntegrationTestCase $users = $this->api->getUsersPlusRole(1); $this->cleanUsers($users); $expected = [ - ['login' => 'userLogin2', 'role' => 'view', 'capabilities' => [], 'email' => 'userLogin2@password.de', 'superuser_access' => '0'], + [ + 'login' => 'userLogin2', + 'role' => 'view', + 'capabilities' => [], + 'email' => 'userLogin2@password.de', + 'superuser_access' => '0', + ], ]; $this->assertEquals($expected, $users); } @@ -482,7 +507,13 @@ class APITest extends IntegrationTestCase $users = $this->api->getUsersPlusRole(1, $limit = null, $offset = 1); $this->cleanUsers($users); $expected = [ - ['login' => 'userLogin2', 'role' => 'view', 'capabilities' => [], 'email' => 'userLogin2@password.de', 'superuser_access' => '0'], + [ + 'login' => 'userLogin2', + 'role' => 'view', + 'capabilities' => [], + 'email' => 'userLogin2@password.de', + 'superuser_access' => '0', + ], ]; $this->assertEquals($expected, $users); } @@ -496,7 +527,13 @@ class APITest extends IntegrationTestCase $users = $this->api->getUsersPlusRole(1, null, null, null, 'superuser'); $this->cleanUsers($users); $expected = [ - ['login' => 'userLogin2', 'role' => 'view', 'capabilities' => [], 'email' => 'userLogin2@password.de', 'superuser_access' => '0'], + [ + 'login' => 'userLogin2', + 'role' => 'view', + 'capabilities' => [], + 'email' => 'userLogin2@password.de', + 'superuser_access' => '0', + ], ]; $this->assertEquals($expected, $users); } @@ -512,9 +549,25 @@ class APITest extends IntegrationTestCase $users = $this->api->getUsersPlusRole(1); $this->cleanUsers($users); $expected = [ - ['login' => 'userLogin2', 'role' => 'admin', 'capabilities' => [], 'email' => 'userLogin2@password.de', 'superuser_access' => false], - ['login' => 'userLogin3', 'role' => 'view', 'capabilities' => [], 'superuser_access' => false], - ['login' => 'userLogin4', 'role' => 'admin', 'capabilities' => [], 'superuser_access' => false], + [ + 'login' => 'userLogin2', + 'role' => 'admin', + 'capabilities' => [], + 'email' => 'userLogin2@password.de', + 'superuser_access' => false, + ], + [ + 'login' => 'userLogin3', + 'role' => 'view', + 'capabilities' => [], + 'superuser_access' => false, + ], + [ + 'login' => 'userLogin4', + 'role' => 'admin', + 'capabilities' => [], + 'superuser_access' => false, + ], ]; $this->assertEquals($expected, $users); } @@ -531,10 +584,31 @@ class APITest extends IntegrationTestCase $users = $this->api->getUsersPlusRole(1); $this->cleanUsers($users); $expected = [ - ['login' => 'userLogin2', 'role' => 'admin', 'capabilities' => [], 'email' => 'userLogin2@password.de', 'superuser_access' => false], - ['login' => 'userLogin3', 'role' => 'view', 'capabilities' => [], 'superuser_access' => false], - ['login' => 'userLogin4', 'role' => 'admin', 'capabilities' => [], 'superuser_access' => false], - ['login' => 'userLogin5', 'role' => 'noaccess', 'capabilities' => [], 'superuser_access' => false], + [ + 'login' => 'userLogin2', + 'role' => 'admin', + 'capabilities' => [], + 'email' => 'userLogin2@password.de', + 'superuser_access' => false, + ], + [ + 'login' => 'userLogin3', + 'role' => 'view', + 'capabilities' => [], + 'superuser_access' => false, + ], + [ + 'login' => 'userLogin4', + 'role' => 'admin', + 'capabilities' => [], + 'superuser_access' => false, + ], + [ + 'login' => 'userLogin5', + 'role' => 'noaccess', + 'capabilities' => [], + 'superuser_access' => false, + ], ]; $this->assertEquals($expected, $users); } @@ -550,11 +624,46 @@ class APITest extends IntegrationTestCase $users = $this->api->getUsersPlusRole(1); $this->cleanUsers($users); $expected = [ - ['login' => 'userLogin', 'email' => 'userlogin@password.de', 'superuser_access' => false, 'role' => 'noaccess', 'capabilities' => [], 'uses_2fa' => false], - ['login' => 'userLogin2', 'email' => 'userLogin2@password.de', 'superuser_access' => true, 'role' => 'superuser', 'capabilities' => [], 'uses_2fa' => false], - ['login' => 'userLogin3', 'email' => 'userLogin3@password.de', 'superuser_access' => false, 'role' => 'view', 'capabilities' => [], 'uses_2fa' => false], - ['login' => 'userLogin4', 'email' => 'userLogin4@password.de', 'superuser_access' => true, 'role' => 'superuser', 'capabilities' => [], 'uses_2fa' => false], - ['login' => 'userLogin5', 'email' => 'userLogin5@password.de', 'superuser_access' => false, 'role' => 'noaccess', 'capabilities' => [], 'uses_2fa' => false], + [ + 'login' => 'userLogin', + 'email' => 'userlogin@password.de', + 'superuser_access' => false, + 'role' => 'noaccess', + 'capabilities' => [], + 'uses_2fa' => false, + ], + [ + 'login' => 'userLogin2', + 'email' => 'userLogin2@password.de', + 'superuser_access' => true, + 'role' => 'superuser', + 'capabilities' => [], + 'uses_2fa' => false, + ], + [ + 'login' => 'userLogin3', + 'email' => 'userLogin3@password.de', + 'superuser_access' => false, + 'role' => 'view', + 'capabilities' => [], + 'uses_2fa' => false, + ], + [ + 'login' => 'userLogin4', + 'email' => 'userLogin4@password.de', + 'superuser_access' => true, + 'role' => 'superuser', + 'capabilities' => [], + 'uses_2fa' => false, + ], + [ + 'login' => 'userLogin5', + 'email' => 'userLogin5@password.de', + 'superuser_access' => false, + 'role' => 'noaccess', + 'capabilities' => [], + 'uses_2fa' => false, + ], ]; $this->assertEquals($expected, $users); } @@ -571,8 +680,18 @@ class APITest extends IntegrationTestCase $users = $this->api->getUsersPlusRole(1, null, null, null, 'admin'); $this->cleanUsers($users); $expected = [ - ['login' => 'userLogin2', 'role' => 'admin', 'capabilities' => [], 'email' => 'userLogin2@password.de', 'superuser_access' => false], - ['login' => 'userLogin5', 'role' => 'admin', 'capabilities' => [], 'superuser_access' => false], + [ + 'login' => 'userLogin2', + 'role' => 'admin', + 'capabilities' => [], + 'email' => 'userLogin2@password.de', + 'superuser_access' => false, + ], + ['login' => 'userLogin5', + 'role' => 'admin', + 'capabilities' => [], + 'superuser_access' => false, + ], ]; $this->assertEquals($expected, $users); @@ -580,7 +699,7 @@ class APITest extends IntegrationTestCase $users = $this->api->getUsersPlusRole(1, null, null, null, 'write'); $this->cleanUsers($users); $expected = [ - ['login' => 'userLogin6', 'role' => 'write', 'capabilities' => [], 'superuser_access' => false], + ['login' => 'userLogin6', 'role' => 'write', 'capabilities' => [], 'superuser_access' => false], ]; $this->assertEquals($expected, $users); } @@ -595,9 +714,30 @@ class APITest extends IntegrationTestCase $users = $this->api->getUsersPlusRole(1, null, null, null, 'noaccess'); $this->cleanUsers($users); $expected = [ - ['login' => 'userLogin', 'role' => 'noaccess', 'superuser_access' => false, 'email' => 'userlogin@password.de', 'capabilities' => [], 'uses_2fa' => false], - ['login' => 'userLogin2', 'role' => 'noaccess', 'superuser_access' => false, 'email' => 'userLogin2@password.de', 'capabilities' => [], 'uses_2fa' => false], - ['login' => 'userLogin5', 'role' => 'noaccess', 'superuser_access' => false, 'email' => 'userLogin5@password.de', 'capabilities' => [], 'uses_2fa' => false], + [ + 'login' => 'userLogin', + 'role' => 'noaccess', + 'superuser_access' => false, + 'email' => 'userlogin@password.de', + 'capabilities' => [], + 'uses_2fa' => false, + ], + [ + 'login' => 'userLogin2', + 'role' => 'noaccess', + 'superuser_access' => false, + 'email' => 'userLogin2@password.de', + 'capabilities' => [], + 'uses_2fa' => false, + ], + [ + 'login' => 'userLogin5', + 'role' => 'noaccess', + 'superuser_access' => false, + 'email' => 'userLogin5@password.de', + 'capabilities' => [], + 'uses_2fa' => false, + ], ]; $this->assertEquals($expected, $users); } @@ -615,8 +755,22 @@ class APITest extends IntegrationTestCase $users = $this->api->getUsersPlusRole(1, null, null, null, 'superuser'); $this->cleanUsers($users); $expected = [ - ['login' => 'userLogin2', 'email' => 'userLogin2@password.de', 'superuser_access' => true, 'role' => 'superuser', 'capabilities' => [], 'uses_2fa' => false], - ['login' => 'userLogin4', 'email' => 'userLogin4@password.de', 'superuser_access' => true, 'role' => 'superuser', 'capabilities' => [], 'uses_2fa' => false], + [ + 'login' => 'userLogin2', + 'email' => 'userLogin2@password.de', + 'superuser_access' => true, + 'role' => 'superuser', + 'capabilities' => [], + 'uses_2fa' => false, + ], + [ + 'login' => 'userLogin4', + 'email' => 'userLogin4@password.de', + 'superuser_access' => true, + 'role' => 'superuser', + 'capabilities' => [], + 'uses_2fa' => false, + ], ]; $this->assertEquals($expected, $users); } @@ -632,8 +786,22 @@ class APITest extends IntegrationTestCase $users = $this->api->getUsersPlusRole(1, null, null, 'searchText'); $this->cleanUsers($users); $expected = [ - ['login' => 'searchTextLogin', 'email' => 'someemail@email.com', 'superuser_access' => true, 'role' => 'superuser', 'capabilities' => [], 'uses_2fa' => false], - ['login' => 'userLogin2', 'email' => 'searchTextdef@email.com', 'superuser_access' => false, 'role' => 'view', 'capabilities' => [], 'uses_2fa' => false], + [ + 'login' => 'searchTextLogin', + 'email' => 'someemail@email.com', + 'superuser_access' => true, + 'role' => 'superuser', + 'capabilities' => [], + 'uses_2fa' => false, + ], + [ + 'login' => 'userLogin2', + 'email' => 'searchTextdef@email.com', + 'superuser_access' => false, + 'role' => 'view', + 'capabilities' => [], + 'uses_2fa' => false, + ], ]; $this->assertEquals($expected, $users); } @@ -649,8 +817,22 @@ class APITest extends IntegrationTestCase $users = $this->api->getUsersPlusRole(1, $limit = 2, $offset = 1); $this->cleanUsers($users); $expected = [ - ['login' => 'userLogin', 'email' => 'userlogin@password.de', 'superuser_access' => false, 'role' => 'noaccess', 'capabilities' => [], 'uses_2fa' => false], - ['login' => 'userLogin2', 'email' => 'searchTextdef@email.com', 'superuser_access' => false, 'role' => 'view', 'capabilities' => [], 'uses_2fa' => false], + [ + 'login' => 'userLogin', + 'email' => 'userlogin@password.de', + 'superuser_access' => false, + 'role' => 'noaccess', + 'capabilities' => [], + 'uses_2fa' => false, + ], + [ + 'login' => 'userLogin2', + 'email' => 'searchTextdef@email.com', + 'superuser_access' => false, + 'role' => 'view', + 'capabilities' => [], + 'uses_2fa' => false, + ], ]; $this->assertEquals($expected, $users); } @@ -663,9 +845,9 @@ class APITest extends IntegrationTestCase $access = $this->api->getSitesAccessForUser('userLogin'); $expected = [ - ['idsite' => '1', 'site_name' => 'Piwik test', 'role' => 'admin', 'capabilities' => []], - ['idsite' => '2', 'site_name' => 'Piwik test', 'role' => 'view', 'capabilities' => []], - ['idsite' => '3', 'site_name' => 'Piwik test', 'role' => 'view', 'capabilities' => []], + ['idsite' => '1', 'site_name' => 'Piwik test', 'role' => 'admin', 'capabilities' => []], + ['idsite' => '2', 'site_name' => 'Piwik test', 'role' => 'view', 'capabilities' => []], + ['idsite' => '3', 'site_name' => 'Piwik test', 'role' => 'view', 'capabilities' => []], ]; $this->assertEquals($expected, $access); } @@ -678,8 +860,8 @@ class APITest extends IntegrationTestCase $access = $this->api->getSitesAccessForUser('userLogin', $limit = null, $offset = 1); $expected = [ - ['idsite' => '2', 'site_name' => 'Piwik test', 'role' => 'view', 'capabilities' => []], - ['idsite' => '3', 'site_name' => 'Piwik test', 'role' => 'view', 'capabilities' => []], + ['idsite' => '2', 'site_name' => 'Piwik test', 'role' => 'view', 'capabilities' => []], + ['idsite' => '3', 'site_name' => 'Piwik test', 'role' => 'view', 'capabilities' => []], ]; $this->assertEquals($expected, $access); } @@ -692,8 +874,8 @@ class APITest extends IntegrationTestCase $access = $this->api->getSitesAccessForUser('userLogin', $limit = 2, $offset = 1); $expected = [ - ['idsite' => '2', 'site_name' => 'Piwik test', 'role' => 'view', 'capabilities' => []], - ['idsite' => '3', 'site_name' => 'Piwik test', 'role' => 'view', 'capabilities' => []], + ['idsite' => '2', 'site_name' => 'Piwik test', 'role' => 'view', 'capabilities' => []], + ['idsite' => '3', 'site_name' => 'Piwik test', 'role' => 'view', 'capabilities' => []], ]; $this->assertEquals($expected, $access); } @@ -709,13 +891,26 @@ class APITest extends IntegrationTestCase SitesManagerAPI::getInstance()->updateSite(1, 'searchTerm site'); SitesManagerAPI::getInstance()->updateSite(2, null, ['http://searchTerm.com']); - SitesManagerAPI::getInstance()->updateSite(3, null, null, null, null, null, null, null, null, null, null, 'the searchTerm group'); + SitesManagerAPI::getInstance()->updateSite( + 3, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 'the searchTerm group' + ); $access = $this->api->getSitesAccessForUser('userLogin', null, null, 'searchTerm'); $expected = [ - ['idsite' => '2', 'site_name' => 'Piwik test', 'role' => 'view', 'capabilities' => []], - ['idsite' => '3', 'site_name' => 'Piwik test', 'role' => 'view', 'capabilities' => []], - ['idsite' => '1', 'site_name' => 'searchTerm site', 'role' => 'admin', 'capabilities' => []], + ['idsite' => '2', 'site_name' => 'Piwik test', 'role' => 'view', 'capabilities' => []], + ['idsite' => '3', 'site_name' => 'Piwik test', 'role' => 'view', 'capabilities' => []], + ['idsite' => '1', 'site_name' => 'searchTerm site', 'role' => 'admin', 'capabilities' => []], ]; $this->assertEquals($expected, $access); } @@ -728,8 +923,8 @@ class APITest extends IntegrationTestCase $access = $this->api->getSitesAccessForUser('userLogin', null, null, null, 'view'); $expected = [ - ['idsite' => '2', 'site_name' => 'Piwik test', 'role' => 'view', 'capabilities' => []], - ['idsite' => '3', 'site_name' => 'Piwik test', 'role' => 'view', 'capabilities' => []], + ['idsite' => '2', 'site_name' => 'Piwik test', 'role' => 'view', 'capabilities' => []], + ['idsite' => '3', 'site_name' => 'Piwik test', 'role' => 'view', 'capabilities' => []], ]; $this->assertEquals($expected, $access); } @@ -745,8 +940,8 @@ class APITest extends IntegrationTestCase $access = $this->api->getSitesAccessForUser('userLogin2', null, null, null, 'view'); $expected = [ - ['idsite' => '1', 'site_name' => 'Piwik test', 'role' => 'view', 'capabilities' => []], - ['idsite' => '2', 'site_name' => 'Piwik test', 'role' => 'view', 'capabilities' => []], + ['idsite' => '1', 'site_name' => 'Piwik test', 'role' => 'view', 'capabilities' => []], + ['idsite' => '2', 'site_name' => 'Piwik test', 'role' => 'view', 'capabilities' => []], ]; $this->assertEquals($expected, $access); } @@ -761,8 +956,8 @@ class APITest extends IntegrationTestCase $access = $this->api->getSitesAccessForUser('userLogin2', null, null, null, 'noaccess'); $expected = [ - ['idsite' => '2', 'site_name' => 'Piwik test', 'role' => 'noaccess', 'capabilities' => []], - ['idsite' => '3', 'site_name' => 'Piwik test', 'role' => 'noaccess', 'capabilities' => []], + ['idsite' => '2', 'site_name' => 'Piwik test', 'role' => 'noaccess', 'capabilities' => []], + ['idsite' => '3', 'site_name' => 'Piwik test', 'role' => 'noaccess', 'capabilities' => []], ]; $this->assertEquals($expected, $access); } @@ -774,8 +969,8 @@ class APITest extends IntegrationTestCase $access = $this->api->getSitesAccessForUser('userLogin2', null, null, null, 'some'); $expected = [ - ['idsite' => '1', 'site_name' => 'Piwik test', 'role' => 'view', 'capabilities' => []], - ['idsite' => '2', 'site_name' => 'Piwik test', 'role' => 'admin', 'capabilities' => []], + ['idsite' => '1', 'site_name' => 'Piwik test', 'role' => 'view', 'capabilities' => []], + ['idsite' => '2', 'site_name' => 'Piwik test', 'role' => 'admin', 'capabilities' => []], ]; $this->assertEquals($expected, $access); } @@ -784,9 +979,9 @@ class APITest extends IntegrationTestCase { $access = $this->api->getSitesAccessForUser('userLogin'); $expected = [ - ['idsite' => '1', 'site_name' => 'Piwik test', 'role' => 'noaccess', 'capabilities' => []], - ['idsite' => '2', 'site_name' => 'Piwik test', 'role' => 'noaccess', 'capabilities' => []], - ['idsite' => '3', 'site_name' => 'Piwik test', 'role' => 'noaccess', 'capabilities' => []], + ['idsite' => '1', 'site_name' => 'Piwik test', 'role' => 'noaccess', 'capabilities' => []], + ['idsite' => '2', 'site_name' => 'Piwik test', 'role' => 'noaccess', 'capabilities' => []], + ['idsite' => '3', 'site_name' => 'Piwik test', 'role' => 'noaccess', 'capabilities' => []], ]; $this->assertEquals($expected, $access); @@ -803,7 +998,7 @@ class APITest extends IntegrationTestCase $this->expectException(\Exception::class); $this->expectExceptionMessage('UsersManager_ExceptionMultipleRoleSet'); - $this->api->setUserAccess($this->login, array('view', 'admin'), array(1)); + $this->api->setUserAccess($this->login, ['view', 'admin'], [1]); } public function test_setUserAccess_NeedsAtLeastOneRole() @@ -811,7 +1006,7 @@ class APITest extends IntegrationTestCase $this->expectException(\Exception::class); $this->expectExceptionMessage('UsersManager_ExceptionNoRoleSet'); - $this->api->setUserAccess($this->login, array(TestCap2::ID), array(1)); + $this->api->setUserAccess($this->login, [TestCap2::ID], [1]); } public function test_setUserAccess_NeedsAtLeastOneRoleAsString() @@ -819,7 +1014,7 @@ class APITest extends IntegrationTestCase $this->expectException(\Exception::class); $this->expectExceptionMessage('UsersManager_ExceptionAccessValues'); - $this->api->setUserAccess($this->login, TestCap2::ID, array(1)); + $this->api->setUserAccess($this->login, TestCap2::ID, [1]); } public function test_setUserAccess_InvalidCapability() @@ -827,7 +1022,7 @@ class APITest extends IntegrationTestCase $this->expectException(\Exception::class); $this->expectExceptionMessage('UsersManager_ExceptionAccessValues'); - $this->api->setUserAccess($this->login, array('admin', 'foobar'), array(1)); + $this->api->setUserAccess($this->login, ['admin', 'foobar'], [1]); } public function test_setUserAccess_NeedsAtLeastOneRoleNoneGiven() @@ -835,7 +1030,7 @@ class APITest extends IntegrationTestCase $this->expectException(\Exception::class); $this->expectExceptionMessage('UsersManager_ExceptionNoRoleSet'); - $this->api->setUserAccess($this->login, array(), array(1)); + $this->api->setUserAccess($this->login, [], [1]); } public function test_setUserAccess_CannotSetAdminToAnonymous() @@ -843,7 +1038,7 @@ class APITest extends IntegrationTestCase $this->expectException(\Exception::class); $this->expectExceptionMessage('UsersManager_ExceptionAnonymousAccessNotPossible'); - $this->api->setUserAccess('anonymous', 'admin', array(1)); + $this->api->setUserAccess('anonymous', 'admin', [1]); } public function test_setUserAccess_CannotSetWriteToAnonymous() @@ -851,7 +1046,7 @@ class APITest extends IntegrationTestCase $this->expectException(\Exception::class); $this->expectExceptionMessage('UsersManager_ExceptionAnonymousAccessNotPossible'); - $this->api->setUserAccess('anonymous', 'write', array(1)); + $this->api->setUserAccess('anonymous', 'write', [1]); } public function test_setUserAccess_UserDoesNotExist() @@ -859,38 +1054,38 @@ class APITest extends IntegrationTestCase $this->expectException(\Exception::class); $this->expectExceptionMessage('UsersManager_ExceptionUserDoesNotExist'); - $this->api->setUserAccess('foobar', Admin::ID, array(1)); + $this->api->setUserAccess('foobar', Admin::ID, [1]); } public function test_setUserAccess_SetRoleAndCapabilities() { - $access = array(TestCap2::ID, View::ID, TestCap3::ID); - $this->api->setUserAccess($this->login, $access, array(1)); + $access = [TestCap2::ID, View::ID, TestCap3::ID]; + $this->api->setUserAccess($this->login, $access, [1]); $access = $this->model->getSitesAccessFromUser($this->login); - $expected = array( - array('site' => '1', 'access' => 'view'), - array('site' => '1', 'access' => TestCap2::ID), - array('site' => '1', 'access' => TestCap3::ID), - ); + $expected = [ + ['site' => '1', 'access' => 'view'], + ['site' => '1', 'access' => TestCap2::ID], + ['site' => '1', 'access' => TestCap3::ID], + ]; $this->assertEquals($expected, $access); } public function test_setUserAccess_SetRoleAsString() { - $this->api->setUserAccess($this->login, View::ID, array(1)); + $this->api->setUserAccess($this->login, View::ID, [1]); $access = $this->model->getSitesAccessFromUser($this->login); - $this->assertEquals(array(array('site' => '1', 'access' => 'view')), $access); + $this->assertEquals([['site' => '1', 'access' => 'view']], $access); } public function test_setUserAccess_SetRoleAsArray() { - $this->api->setUserAccess($this->login, array(View::ID), array(1)); + $this->api->setUserAccess($this->login, [View::ID], [1]); $access = $this->model->getSitesAccessFromUser($this->login); - $this->assertEquals(array(array('site' => '1', 'access' => 'view')), $access); + $this->assertEquals([['site' => '1', 'access' => 'view']], $access); } public function test_addCapabilities_failsWhenNotCapabilityIsGivenAsString() @@ -898,7 +1093,7 @@ class APITest extends IntegrationTestCase $this->expectException(\Exception::class); $this->expectExceptionMessage('UsersManager_ExceptionAccessValues'); - $this->api->addCapabilities($this->login, View::ID, array(1)); + $this->api->addCapabilities($this->login, View::ID, [1]); } public function test_addCapabilities_failsWhenNotCapabilityIsGivenAsArray() @@ -906,7 +1101,7 @@ class APITest extends IntegrationTestCase $this->expectException(\Exception::class); $this->expectExceptionMessage('UsersManager_ExceptionAccessValues'); - $this->api->addCapabilities($this->login, array(TestCap2::ID, View::ID), array(1)); + $this->api->addCapabilities($this->login, [TestCap2::ID, View::ID], [1]); } public function test_addCapabilities_failsWhenUserDoesNotExist() @@ -914,31 +1109,31 @@ class APITest extends IntegrationTestCase $this->expectException(\Exception::class); $this->expectExceptionMessage('UsersManager_ExceptionUserDoesNotExist'); - $this->api->addCapabilities('foobar', array(TestCap2::ID), array(1)); + $this->api->addCapabilities('foobar', [TestCap2::ID], [1]); } public function test_addCapabilities_DoesNotAddSameCapabilityTwice() { - $addAccess = array(TestCap2::ID, View::ID, TestCap3::ID); - $this->api->setUserAccess($this->login, $addAccess, array(1)); + $addAccess = [TestCap2::ID, View::ID, TestCap3::ID]; + $this->api->setUserAccess($this->login, $addAccess, [1]); $access = $this->model->getSitesAccessFromUser($this->login); - $expected = array( - array('site' => '1', 'access' => 'view'), - array('site' => '1', 'access' => TestCap2::ID), - array('site' => '1', 'access' => TestCap3::ID), - ); + $expected = [ + ['site' => '1', 'access' => 'view'], + ['site' => '1', 'access' => TestCap2::ID], + ['site' => '1', 'access' => TestCap3::ID], + ]; $this->assertEquals($expected, $access); - $this->api->addCapabilities($this->login, array(TestCap2::ID, TestCap3::ID), array(1)); + $this->api->addCapabilities($this->login, [TestCap2::ID, TestCap3::ID], [1]); $access = $this->model->getSitesAccessFromUser($this->login); $this->assertEquals($expected, $access); - $this->api->addCapabilities($this->login, array(TestCap2::ID, TestCap1::ID, TestCap3::ID), array(1)); + $this->api->addCapabilities($this->login, [TestCap2::ID, TestCap1::ID, TestCap3::ID], [1]); - $expected[] = array('site' => '1', 'access' => TestCap1::ID); + $expected[] = ['site' => '1', 'access' => TestCap1::ID]; $access = $this->model->getSitesAccessFromUser($this->login); $this->assertEquals($expected, $access); } @@ -947,27 +1142,27 @@ class APITest extends IntegrationTestCase { $access = $this->model->getSitesAccessFromUser($this->login); - $this->assertEquals(array(), $access); + $this->assertEquals([], $access); - $this->api->addCapabilities($this->login, array(TestCap2::ID, TestCap3::ID), array(1)); + $this->api->addCapabilities($this->login, [TestCap2::ID, TestCap3::ID], [1]); - $this->assertEquals(array(), $access); + $this->assertEquals([], $access); } public function test_addCapabilities_DoesNotAddCapabilitiesWhichAreIncludedInRoleAlready() { - $this->api->setUserAccess($this->login, Write::ID, array(1)); + $this->api->setUserAccess($this->login, Write::ID, [1]); $access = $this->model->getSitesAccessFromUser($this->login); - $expected = array( - array('site' => '1', 'access' => 'write'), - ); + $expected = [ + ['site' => '1', 'access' => 'write'], + ]; $this->assertEquals($expected, $access); - $this->api->addCapabilities($this->login, array(TestCap2::ID, TestCap3::ID), array(1)); + $this->api->addCapabilities($this->login, [TestCap2::ID, TestCap3::ID], [1]); - $expected[] = array('site' => '1', 'access' => TestCap3::ID); + $expected[] = ['site' => '1', 'access' => TestCap3::ID]; $access = $this->model->getSitesAccessFromUser($this->login); // did not add TestCap2 @@ -976,16 +1171,16 @@ class APITest extends IntegrationTestCase public function test_addCapabilities_DoesAddCapabilitiesWhichAreNotIncludedInRoleYetAlready() { - $this->api->setUserAccess($this->login, Admin::ID, array(1)); + $this->api->setUserAccess($this->login, Admin::ID, [1]); $access = $this->model->getSitesAccessFromUser($this->login); - $expected = array( - array('site' => '1', 'access' => 'admin'), - ); + $expected = [ + ['site' => '1', 'access' => 'admin'], + ]; $this->assertEquals($expected, $access); - $this->api->addCapabilities($this->login, array(TestCap2::ID, TestCap1::ID, TestCap3::ID), array(1)); + $this->api->addCapabilities($this->login, [TestCap2::ID, TestCap1::ID, TestCap3::ID], [1]); $access = $this->model->getSitesAccessFromUser($this->login); $this->assertEquals($expected, $access); @@ -996,7 +1191,7 @@ class APITest extends IntegrationTestCase $this->expectException(\Exception::class); $this->expectExceptionMessage('UsersManager_ExceptionAccessValues'); - $this->api->removeCapabilities($this->login, View::ID, array(1)); + $this->api->removeCapabilities($this->login, View::ID, [1]); } public function test_removeCapabilities_failsWhenNotCapabilityIsGivenAsArray() @@ -1004,7 +1199,7 @@ class APITest extends IntegrationTestCase $this->expectException(\Exception::class); $this->expectExceptionMessage('UsersManager_ExceptionAccessValues'); - $this->api->removeCapabilities($this->login, array(TestCap2::ID, View::ID), array(1)); + $this->api->removeCapabilities($this->login, [TestCap2::ID, View::ID], [1]); } public function test_removeCapabilities_failsWhenUserDoesNotExist() @@ -1012,21 +1207,21 @@ class APITest extends IntegrationTestCase $this->expectException(\Exception::class); $this->expectExceptionMessage('UsersManager_ExceptionUserDoesNotExist'); - $this->api->removeCapabilities('foobar', array(TestCap2::ID), array(1)); + $this->api->removeCapabilities('foobar', [TestCap2::ID], [1]); } public function test_removeCapabilities() { - $addAccess = array(View::ID, TestCap2::ID, TestCap3::ID, TestCap1::ID); - $this->api->setUserAccess($this->login, $addAccess, array(1)); + $addAccess = [View::ID, TestCap2::ID, TestCap3::ID, TestCap1::ID]; + $this->api->setUserAccess($this->login, $addAccess, [1]); $access = $this->getAccessInSite($this->login, 1); $this->assertEquals($addAccess, $access); - $this->api->removeCapabilities($this->login, array(TestCap3::ID, TestCap2::ID), 1); + $this->api->removeCapabilities($this->login, [TestCap3::ID, TestCap2::ID], 1); $access = $this->getAccessInSite($this->login, 1); - $this->assertEquals(array(View::ID, TestCap1::ID), $access); + $this->assertEquals([View::ID, TestCap1::ID], $access); } public function test_setSuperUserAccess_failsIfCurrentPasswordIsIncorrect() @@ -1037,10 +1232,211 @@ class APITest extends IntegrationTestCase $this->api->setSuperUserAccess($this->login, true, 'asldfkjds'); } + public function testInviteUserAsSuperUser() + { + $eventWasFired = false; + + EventDispatcher::getInstance()->addObserver('UsersManager.inviteUser.end', function ($userLogin, $email) use (&$eventWasFired) { + self::assertEquals('pendingLoginTest', $userLogin); + self::assertEquals('pendingLoginTest@matomo.org', $email); + $eventWasFired = true; + }); + + $this->api->inviteUser('pendingLoginTest', 'pendingLoginTest@matomo.org', 1); + $user = $this->model->isPendingUser('pendingLoginTest'); + $this->assertTrue($user); + $this->assertTrue($eventWasFired); + } + + public function testInviteUserAsAdmin() + { + $this->addUserWithAccess('adminUser', 'admin', 1); + $this->setCurrentUser('adminUser', 'admin', 1); + + $this->api->inviteUser('pendingLoginTest', 'pendingLoginTest@matomo.org', 1); + $user = $this->model->isPendingUser('pendingLoginTest'); + $this->assertTrue($user); + } + + public function testInviteUserAsAdminForAnotherSiteDoesntWork() + { + self::expectException(\Exception::class); + + $this->addUserWithAccess('adminUser', 'admin', 1); + $this->setCurrentUser('adminUser', 'admin', 1); + + $this->api->inviteUser('pendingLoginTest', 'pendingLoginTest@matomo.org', 2); + } + + public function testInviteUserAsWriteUserNotAllowed() + { + self::expectException(NoAccessException::class); + + $this->addUserWithAccess('anyUser', 'write', 1); + $this->setCurrentUser('anyUser', 'write', 1); + + $this->api->inviteUser('pendingLoginTest', 'pendingLoginTest@matomo.org', 1); + } + + public function testInviteUserAsUserNotAllowed() + { + self::expectException(NoAccessException::class); + + $this->addUserWithAccess('anyUser', 'view', 1); + $this->setCurrentUser('anyUser', 'view', 1); + + $this->api->inviteUser('pendingLoginTest', 'pendingLoginTest@matomo.org', 1); + } + + public function testInviteUserExpiredInGivenDays() + { + Date::$now = time(); // freeze time, so it doesn't change between inviting user and comparing the time + $expiredDays = 10; + $this->api->inviteUser('pendingLoginTest', 'pendingLoginTest@matomo.org', null, $expiredDays); + $user = $this->model->getUser('pendingLoginTest'); + $expired = Date::factory($user['invite_expired_at'])->getTimestamp(); + $now = Date::now()->getTimestamp(); + $diff = $expired - $now; + $this->assertEquals($expiredDays, $diff / 3600 / 24); + } + + public function testResendInviteAsSuperUser() + { + $this->api->inviteUser('pendingLoginTest', 'pendingLoginTest@matomo.org', 1); + $user = $this->model->isPendingUser('pendingLoginTest'); + $this->assertTrue($user); + + $eventWasFired = false; + + EventDispatcher::getInstance()->addObserver('UsersManager.inviteUser.resendInvite', function ($userLogin) use (&$eventWasFired) { + self::assertEquals('pendingLoginTest', $userLogin); + $eventWasFired = true; + }); + + $this->api->resendInvite('pendingLoginTest'); + self::assertTrue($eventWasFired); + } + + public function testResendInviteFailsIfUserNotPending() + { + self::expectException(\Exception::class); + self::expectExceptionMessage('UsersManager_ExceptionUserDoesNotExist'); + + $this->api->resendInvite('notExistingUser'); + } + + public function testResendInviteAsInviterWithAdminAccess() + { + $this->addUserWithAccess('adminUser', 'admin', 1); + $this->setCurrentUser('adminUser', 'admin', 1); + + $this->api->inviteUser('pendingLoginTest', 'pendingLoginTest@matomo.org', 1); + $user = $this->model->isPendingUser('pendingLoginTest'); + $this->assertTrue($user); + + $eventWasFired = false; + + EventDispatcher::getInstance()->addObserver('UsersManager.inviteUser.resendInvite', function ($userLogin) use (&$eventWasFired) { + self::assertEquals('pendingLoginTest', $userLogin); + $eventWasFired = true; + }); + + $this->api->resendInvite('pendingLoginTest'); + self::assertTrue($eventWasFired); + } + + public function testResendInviteFailsAsInviterWithoutAdminAccess() + { + self::expectException(NoAccessException::class); + + $this->addUserWithAccess('adminUser', 'write', 1); + + // fake admin access for inviting the user + $this->setCurrentUser('adminUser', 'admin', 1); + + $this->api->inviteUser('pendingLoginTest', 'pendingLoginTest@matomo.org', 1); + $user = $this->model->isPendingUser('pendingLoginTest'); + $this->assertTrue($user); + + // degraded to write access + $this->setCurrentUser('adminUser', 'admin', []); + $this->setCurrentUser('adminUser', 'write', 1); + + $this->api->resendInvite('pendingLoginTest'); + } + + public function testResendInviteFailsAsNotInvitingAdmin() + { + self::expectException(NoAccessException::class); + self::expectExceptionMessage('UsersManager_ExceptionResendInviteDenied'); + + $this->addUserWithAccess('adminUser', 'admin', 1); + $this->addUserWithAccess('anotherAdminUser', 'admin', 1); + + $this->setCurrentUser('adminUser', 'admin', 1); + + $this->api->inviteUser('pendingLoginTest', 'pendingLoginTest@matomo.org', 1); + $user = $this->model->isPendingUser('pendingLoginTest'); + $this->assertTrue($user); + + // another admin tries to resend invite + $this->setCurrentUser('anotherAdminUser', 'admin', 1); + + $this->api->resendInvite('pendingLoginTest'); + } + + public function testInvitedUserCanBeRemovedBySuperUser() + { + Fixture::createSuperUser(); + $this->addUserWithAccess('adminUser', 'admin', 1); + $this->setCurrentUser('adminUser', 'admin', 1); + + $this->api->inviteUser('pendingLoginTest', 'pendingLoginTest@matomo.org', 1); + $user = $this->model->isPendingUser('pendingLoginTest'); + $this->assertTrue($user); + + $this->setCurrentUser('superUserLogin', 'superuser', 1); + + $this->api->deleteUser('pendingLoginTest'); + self::assertEmpty($this->model->getUser('pendingLoginTest')); + } + + public function testInvitedUserCanBeRemovedByInviter() + { + Fixture::createSuperUser(); + $this->addUserWithAccess('adminUser', 'admin', 1); + $this->setCurrentUser('adminUser', 'admin', 1); + + $this->api->inviteUser('pendingLoginTest', 'pendingLoginTest@matomo.org', 1); + $user = $this->model->isPendingUser('pendingLoginTest'); + $this->assertTrue($user); + + $this->api->deleteUser('pendingLoginTest'); + self::assertEmpty($this->model->getUser('pendingLoginTest')); + } + + public function testInvitedUserCanNOTBeRemovedByOtherAdmin() + { + self::expectException(\Exception::class); + self::expectExceptionMessage('UsersManager_ExceptionUserDoesNotExist'); + + $this->addUserWithAccess('adminUser', 'admin', 1); + $this->addUserWithAccess('adminUser2', 'admin', 1); + $this->setCurrentUser('adminUser', 'admin', 1); + + $this->api->inviteUser('pendingLoginTest', 'pendingLoginTest@matomo.org', 1); + $user = $this->model->isPendingUser('pendingLoginTest'); + $this->assertTrue($user); + + $this->setCurrentUser('adminUser2', 'admin', 1); + + $this->api->deleteUser('pendingLoginTest'); + } + private function getAccessInSite($login, $idSite) { $access = $this->model->getSitesAccessFromUser($login); - $ids = array(); + $ids = []; foreach ($access as $entry) { if ($entry['site'] == $idSite) { $ids[] = $entry['access']; @@ -1056,17 +1452,24 @@ class APITest extends IntegrationTestCase public function provideContainerConfig() { - return array( - 'Piwik\Access' => new FakeAccess(), - 'usersmanager.user_preference_names' => \DI\add(['randomDoesNotExist', 'RandomNOTREQUESTED', 'preferenceName']), - 'observers.global' => \DI\add([ - ['Access.Capability.addCapabilities', \DI\value(function (&$capabilities) { - $capabilities[] = new TestCap1(); - $capabilities[] = new TestCap2(); - $capabilities[] = new TestCap3(); - })], - ]), - ); + return [ + 'Piwik\Access' => new FakeAccess(), + 'usersmanager.user_preference_names' => \DI\add([ + 'randomDoesNotExist', + 'RandomNOTREQUESTED', + 'preferenceName' + ]), + 'observers.global' => \DI\add([ + [ + 'Access.Capability.addCapabilities', + \DI\value(function (&$capabilities) { + $capabilities[] = new TestCap1(); + $capabilities[] = new TestCap2(); + $capabilities[] = new TestCap3(); + }) + ], + ]), + ]; } private function addUserWithAccess($username, $accessLevel, $idSite, $email = null) @@ -1075,7 +1478,7 @@ class APITest extends IntegrationTestCase if ($accessLevel == 'superuser') { $userUpdater = new UserUpdater(); $userUpdater->setSuperUserAccessWithoutCurrentPassword($username, true); - } else if ($accessLevel) { + } elseif ($accessLevel) { $this->api->setUserAccess($username, $accessLevel, $idSite); } } @@ -1086,8 +1489,10 @@ class APITest extends IntegrationTestCase FakeAccess::$superUser = $accessLevel == 'superuser'; if ($accessLevel == 'view') { FakeAccess::$idSitesView = is_array($idSite) ? $idSite : [$idSite]; - } else if ($accessLevel == 'admin') { + } elseif ($accessLevel == 'admin') { FakeAccess::$idSitesAdmin = is_array($idSite) ? $idSite : [$idSite]; + } elseif ($accessLevel == 'write') { + FakeAccess::$idSitesWrite = is_array($idSite) ? $idSite : [$idSite]; } } @@ -1095,7 +1500,11 @@ class APITest extends IntegrationTestCase { foreach ($users as &$user) { unset($user['date_registered']); + unset($user['invite_expired_at']); + unset($user['invite_accept_at']); + unset($user['invite_token']); unset($user['invite_status']); + unset($user['invited_by']); } } } diff --git a/plugins/UsersManager/tests/Integration/UserInviteTest.php b/plugins/UsersManager/tests/Integration/UserInviteTest.php index 098089d33e..3c70b7068a 100644 --- a/plugins/UsersManager/tests/Integration/UserInviteTest.php +++ b/plugins/UsersManager/tests/Integration/UserInviteTest.php @@ -1,4 +1,5 @@ '000pendingUser3', - 'email' => 'pendinguser3light@example.com' - ); + protected $pendingUser = [ + 'login' => '000pendingUser3', + 'email' => 'pendinguser3light@example.com' + ]; + protected $capturedToken = null; public function setUp(): void { parent::setUp(); + Fixture::createSuperUser(); + Fixture::createWebsite('2010-01-01 05:00:00'); $this->model = new Model(); - $this->model->addUser($this->pendingUser['login'], '', $this->pendingUser['email'], $this->dateTime, 1); } - public function test_getInviteUser() + public function testInviteUser() { + Request::processRequest( + 'UsersManager.inviteUser', + [ + 'userLogin' => $this->pendingUser['login'], + 'email' => $this->pendingUser['email'], + 'idSite' => 1, + 'expiryInDays' => 7 + ] + ); + $user = $this->model->getUser($this->pendingUser['login']); - $this->assertEquals('pending', $user['invite_status']); - } + // check token in database matches token in email + self::assertEquals($user['invite_token'], $this->model->hashTokenAuth($this->capturedToken)); + $response = Http::sendHttpRequest( + Fixture::getRootUrl() . 'tests/PHPUnit/proxy/index.php?module=Login&action=acceptInvitation&token=' . $this->capturedToken, + 10 + ); - public function test_addInviteUserToken() - { - $this->model->addTokenAuth($this->pendingUser['login'], $this->token, "Invite Token", - Date::now()->getDatetime(), - Date::now()->addDay(7)->getDatetime()); + $this->assertStringContainsString('Accept invitation', $response, 'error on accept invite page'); + + $response = Http::sendHttpRequest( + Fixture::getRootUrl() . 'tests/PHPUnit/proxy/index.php?module=Login&action=declineInvitation&token=' . $this->capturedToken, + 10 + ); + + $this->assertStringContainsString('decline this invitation', $response, 'error on decline invite page'); + + // move date after expire time, but before deletion time + Date::$now = Date::today()->addDay(8)->getTimestamp(); + + $eventWasFired = false; - $response = Http::sendHttpRequest(Fixture::getRootUrl() . 'tests/PHPUnit/proxy/index.php?module=Login&action=acceptInvitation&token=' . $this->token, - 10); + EventDispatcher::getInstance()->addObserver('UsersManager.deleteUser', function ($userLogin) use (&$eventWasFired) { + self::assertEquals($this->pendingUser['login'], $userLogin); + $eventWasFired = true; + }); - $this->assertStringContainsString('Accept Invitation', $response, 'error on accept invitation'); + $tasks = new Tasks(new Model(), API::getInstance()); + $tasks->cleanUpExpiredInvites(); + + // Task should not have removed the user yet, as expiry date time is not 3 days ago + self::assertIsArray($this->model->getUser($this->pendingUser['login'])); + + self::assertFalse($eventWasFired); + + // move date after expire and deletion time + Date::$now = Date::today()->addDay(3)->getTimestamp(); + + $tasks->cleanUpExpiredInvites(); + + // Task should have removed the user now + self::assertEmpty($this->model->getUser($this->pendingUser['login'])); + + self::assertTrue($eventWasFired); } + public function provideContainerConfig() + { + return [ + 'Piwik\Access' => new FakeAccess(), + 'observers.global' => \DI\add([ + ['Test.Mail.send', \DI\value(function (PHPMailer $mail) { + $body = $mail->createBody(); + $body = preg_replace("/=[\r\n]+/", '', $body); + preg_match('/&token=[\s]*3D([a-zA-Z0-9=\s]+)"/', $body, $matches); + if (!empty($matches[1])) { + $capturedToken = $matches[1]; + $capturedToken = preg_replace('/=\s*/', '', $capturedToken); + $this->capturedToken = $capturedToken; + } + })], + ]), + ]; + } } diff --git a/plugins/UsersManager/tests/Integration/UsersManagerTest.php b/plugins/UsersManager/tests/Integration/UsersManagerTest.php index 49059acc10..92188ea024 100644 --- a/plugins/UsersManager/tests/Integration/UsersManagerTest.php +++ b/plugins/UsersManager/tests/Integration/UsersManagerTest.php @@ -13,18 +13,15 @@ use Piwik\Access; use Piwik\Auth\Password; use Piwik\Date; use Piwik\Option; -use Piwik\Piwik; use Piwik\Plugins\SitesManager\API as APISitesManager; use Piwik\Plugins\UsersManager\API; use Piwik\Plugins\UsersManager\Model; use Piwik\Plugins\UsersManager\NewsletterSignup; use Piwik\Plugins\UsersManager\UsersManager; use Piwik\Plugins\UsersManager\UserUpdater; -use Piwik\SettingsPiwik; use Piwik\Tests\Framework\Fixture; use Piwik\Tests\Framework\Mock\FakeAccess; use Piwik\Tests\Framework\TestCase\IntegrationTestCase; -use Piwik\View; /** @@ -66,7 +63,7 @@ class UsersManagerTest extends IntegrationTestCase FakeAccess::$superUserLogin = 'superusertest'; $this->backupIdentity = FakeAccess::$identity; - $this->api = API::getInstance(); + $this->api = API::getInstance(); $this->model = new Model(); } @@ -109,10 +106,13 @@ class UsersManagerTest extends IntegrationTestCase unset($userAfter['idchange_last_viewed']); unset($userAfter['password']); unset($userAfter['invite_status']); - + unset($userAfter['invite_token']); + unset($userAfter['invite_expired_at']); + unset($userAfter['invite_accept_at']); + unset($userAfter['invited_by']); // implicitly checks password! - $user['email'] = $newEmail; + $user['email'] = $newEmail; $user['superuser_access'] = 0; $user['twofactor_secret'] = ''; @@ -130,9 +130,11 @@ class UsersManagerTest extends IntegrationTestCase $this->expectExceptionMessage('UsersManager_ExceptionInvalidPassword'); $login = "login"; - $user = array('login' => $login, - 'password' => "geqgeagae", - 'email' => "test@test.com"); + $user = array( + 'login' => $login, + 'password' => "geqgeagae", + 'email' => "test@test.com", + ); $this->api->addUser($user['login'], $user['password'], $user['email']); @@ -150,10 +152,10 @@ class UsersManagerTest extends IntegrationTestCase public function getAddUserInvalidLoginData() { return array( - array(9, "password", "email@email.com"), // wrong login / integer => exception - array("gegag'ggea'", "password", "email@email.com"), // wrong login / too short => exception - array("gegag11gge&", "password", "email@email.com"), // wrong login / too long => exception - array("geg'ag11gge@", "password", "email@email.com"), // wrong login / bad characters => exception + array(9, "password", "email@email.com"), // wrong login / integer => exception + array("gegag'ggea'", "password", "email@email.com"), // wrong login / too short => exception + array("gegag11gge&", "password", "email@email.com"), // wrong login / too long => exception + array("geg'ag11gge@", "password", "email@email.com"), // wrong login / bad characters => exception ); } @@ -177,6 +179,25 @@ class UsersManagerTest extends IntegrationTestCase $this->api->addUser("test", "password2", "em2ail@email.com"); } + public function testAddUserExistingEmail() + { + $this->expectException(\Exception::class); + $this->expectExceptionMessage('UsersManager_ExceptionEmailExists'); + + $this->api->addUser("test", "password", "email@email.com"); + $this->api->addUser("test2", "password2", "email@email.com"); + } + + + public function testAddUserExistingEmailAsUserName() + { + $this->expectException(\Exception::class); + $this->expectExceptionMessage('UsersManager_ExceptionEmailExistsAsLogin'); + + $this->api->addUser("email@email.com", "password", "email2@email.com"); + $this->api->addUser("test2", "password2", "email@email.com"); + } + /** * @see https://github.com/piwik/piwik/issues/8548 */ @@ -195,8 +216,8 @@ class UsersManagerTest extends IntegrationTestCase public function getWrongPasswordTestData() { return array( - array("geggeqgeqag", "pas", "email@email.com"), // too short -> exception - array("geggeqgeqag", "", "email@email.com"), // empty -> exception + array("geggeqgeqag", "pas", "email@email.com"), // too short -> exception + array("geggeqgeqag", "", "email@email.com"), // empty -> exception ); } @@ -225,7 +246,9 @@ class UsersManagerTest extends IntegrationTestCase public function testAddUserLongPassword() { $login = "geggeqgeqag"; - $this->api->addUser($login, "geqgeagaegeqgeagaegeqgeagaegeqgeagaegeqgeagaegeqgeagaegeqgeagaegeqgeagaegeqgeagaegeqgeagaegeqgeagaeg", "mgeagi@geq.com"); + $this->api->addUser($login, + "geqgeagaegeqgeagaegeqgeagaegeqgeagaegeqgeagaegeqgeagaegeqgeagaegeqgeagaegeqgeagaegeqgeagaegeqgeagaeg", + "mgeagi@geq.com"); $user = $this->api->getUser($login); $this->assertEquals($login, $user['login']); } @@ -245,7 +268,7 @@ class UsersManagerTest extends IntegrationTestCase // check that the date registered is correct $this->assertTrue($time <= strtotime($user['date_registered']) && strtotime($user['date_registered']) <= time(), - "the date_registered " . strtotime($user['date_registered']) . " is different from the time() " . time()); + "the date_registered " . strtotime($user['date_registered']) . " is different from the time() " . time()); // check that password and token are properly set $this->assertEquals(60, strlen($user['password'])); @@ -280,7 +303,7 @@ class UsersManagerTest extends IntegrationTestCase $access = $this->api->getSitesAccessFromUser($login); $this->assertEquals([ - ['site' => 1, 'access' => 'view'], + ['site' => 1, 'access' => 'view'], ], $access); } @@ -295,7 +318,8 @@ class UsersManagerTest extends IntegrationTestCase $this->api->addUser('userLogin2', 'password', 'userlogin2@email.com'); } - public function test_addUser_shouldNotAllowAdminUsersToCreateUsersWithAccessToSite_ThatAdminUserDoesNotHaveAccessTo() + public function test_addUser_shouldNotAllowAdminUsersToCreateUsersWithAccessToSite_ThatAdminUserDoesNotHaveAccessTo( + ) { $this->expectException(\Exception::class); $this->expectExceptionMessage('checkUserHasAdminAccess Fake exception'); @@ -440,17 +464,32 @@ class UsersManagerTest extends IntegrationTestCase $this->api->addUser("geggeqge632ge56a4qag", "geqgegeagae", "tesggt@tesgt.com"); $this->api->addUser("geggeqgeqagqegg", "geqgeaggggae", "tesgggt@tesgt.com"); - Option::set('UsersManager.lastSeen.gegg4564eqgeqag',$now = time()); + Option::set('UsersManager.lastSeen.gegg4564eqgeqag', $now = time()); $users = $this->api->getUsers(); $users = $this->_removeNonTestableFieldsFromUsers($users); - $user1 = array('login' => "gegg4564eqgeqag", 'email' => "tegst@tesgt.com", 'superuser_access' => 0, 'uses_2fa' => false, 'last_seen' => Date::getDatetimeFromTimestamp($now)); - $user2 = array('login' => "geggeqge632ge56a4qag", 'email' => "tesggt@tesgt.com", 'superuser_access' => 0, 'uses_2fa' => false); - $user3 = array('login' => "geggeqgeqagqegg", 'email' => "tesgggt@tesgt.com", 'superuser_access' => 0, 'uses_2fa' => false); + $user1 = array('login' => "gegg4564eqgeqag", + 'email' => "tegst@tesgt.com", + 'superuser_access' => 0, + 'uses_2fa' => false, + 'last_seen' => Date::getDatetimeFromTimestamp($now) + ); + $user2 = array('login' => "geggeqge632ge56a4qag", + 'email' => "tesggt@tesgt.com", + 'superuser_access' => 0, + 'uses_2fa' => false + ); + $user3 = array('login' => "geggeqgeqagqegg", + 'email' => "tesgggt@tesgt.com", + 'superuser_access' => 0, + 'uses_2fa' => false + ); $expectedUsers = array($user1, $user2, $user3); $this->assertEquals($expectedUsers, $users); - $this->assertEquals(array($user1), $this->_removeNonTestableFieldsFromUsers($this->api->getUsers('gegg4564eqgeqag'))); - $this->assertEquals(array($user1, $user2), $this->_removeNonTestableFieldsFromUsers($this->api->getUsers('gegg4564eqgeqag,geggeqge632ge56a4qag'))); + $this->assertEquals(array($user1), + $this->_removeNonTestableFieldsFromUsers($this->api->getUsers('gegg4564eqgeqag'))); + $this->assertEquals(array($user1, $user2), + $this->_removeNonTestableFieldsFromUsers($this->api->getUsers('gegg4564eqgeqag,geggeqge632ge56a4qag'))); } public function testGetUsers_withViewAccess_shouldThrowAnException() @@ -475,6 +514,10 @@ class UsersManagerTest extends IntegrationTestCase unset($user['date_registered']); unset($user['ts_password_modified']); unset($user['invite_status']); + unset($user['invite_expired_at']); + unset($user['invite_token']); + unset($user['invite_accept_at']); + unset($user['invited_by']); } return $users; } @@ -518,7 +561,7 @@ class UsersManagerTest extends IntegrationTestCase $this->expectException(\Exception::class); $this->expectExceptionMessage('checkUserHasSomeAdminAccess Fake exception'); - FakeAccess::clearAccess($superUser = false, $admin =array(), $view = array(1)); + FakeAccess::clearAccess($superUser = false, $admin = array(), $view = array(1)); $this->api->getUserLoginFromUserEmail('tegst@tesgt.com'); } @@ -527,7 +570,7 @@ class UsersManagerTest extends IntegrationTestCase $this->expectException(\Exception::class); $this->expectExceptionMessage('UsersManager_ExceptionUserDoesNotExist'); - FakeAccess::clearAccess($superUser = false, $admin =array(1), $view = array()); + FakeAccess::clearAccess($superUser = false, $admin = array(1), $view = array()); $this->api->setUserAccess("nologin", "view", 1); } @@ -537,7 +580,7 @@ class UsersManagerTest extends IntegrationTestCase $this->expectExceptionMessage('UsersManager_ExceptionAccessValues'); $this->api->addUser("gegg4564eqgeqag", "geqgegagae", "tegst@tesgt.com"); - FakeAccess::clearAccess($superUser = false, $admin =array(1), $view = array()); + FakeAccess::clearAccess($superUser = false, $admin = array(1), $view = array()); $this->api->setUserAccess("gegg4564eqgeqag", "viewnotknown", 1); } @@ -547,7 +590,7 @@ class UsersManagerTest extends IntegrationTestCase $this->expectExceptionMessage('UsersManager_ExceptionAccessValues'); $this->api->addUser("gegg4564eqgeqag", "geqgegagae", "tegst@tesgt.com"); - FakeAccess::clearAccess($superUser = false, $admin =array(1), $view = array()); + FakeAccess::clearAccess($superUser = false, $admin = array(1), $view = array()); $this->api->setUserAccess("gegg4564eqgeqag", "superuser", 1); } @@ -556,7 +599,7 @@ class UsersManagerTest extends IntegrationTestCase $this->expectException(\Exception::class); $this->expectExceptionMessage('UsersManager_ExceptionUserDoesNotExist'); - FakeAccess::clearAccess($superUser = false, $admin =array(1), $view = array()); + FakeAccess::clearAccess($superUser = false, $admin = array(1), $view = array()); $this->api->setUserAccess('superusertest', 'view', 1); } @@ -769,7 +812,7 @@ class UsersManagerTest extends IntegrationTestCase $pwd = $this->createCurrentUser(); - FakeAccess::$superUser= false; + FakeAccess::$superUser = false; $this->api->setSuperUserAccess('nologin', false, $pwd); } @@ -901,9 +944,11 @@ class UsersManagerTest extends IntegrationTestCase $this->expectExceptionMessage('UsersManager_ConfirmWithPassword'); $login = "login"; - $user = array('login' => $login, - 'password' => "geqgeagae", - 'email' => "test@test.com"); + $user = array( + 'login' => $login, + 'password' => "geqgeagae", + 'email' => "test@test.com" + ); $this->api->addUser($user['login'], $user['password'], $user['email']); @@ -917,9 +962,11 @@ class UsersManagerTest extends IntegrationTestCase $this->expectExceptionMessage('UsersManager_CurrentPasswordNotCorrect'); $login = "login"; - $user = array('login' => $login, - 'password' => "geqgeagae", - 'email' => "test@test.com"); + $user = array( + 'login' => $login, + 'password' => "geqgeagae", + 'email' => "test@test.com" + ); $this->api->addUser($user['login'], $user['password'], $user['email']); @@ -933,9 +980,11 @@ class UsersManagerTest extends IntegrationTestCase $this->expectExceptionMessage('UsersManager_CurrentPasswordNotCorrect'); $login = "login"; - $user = array('login' => $login, - 'password' => "geqgeagae", - 'email' => "test@test.com"); + $user = array( + 'login' => $login, + 'password' => "geqgeagae", + 'email' => "test@test.com" + ); $this->api->addUser($user['login'], $user['password'], $user['email']); // currently logged in is a super user and not "login". therefore the password of "login" won't work @@ -948,9 +997,11 @@ class UsersManagerTest extends IntegrationTestCase public function testUpdateUserNoEmail() { $login = "login"; - $user = array('login' => $login, - 'password' => "geqgeagae", - 'email' => "test@test.com"); + $user = array( + 'login' => $login, + 'password' => "geqgeagae", + 'email' => "test@test.com" + ); $this->api->addUser($user['login'], $user['password'], $user['email']); @@ -990,9 +1041,11 @@ class UsersManagerTest extends IntegrationTestCase public function testUpdateUser() { $login = "login"; - $user = array('login' => $login, - 'password' => "geqgeagae", - 'email' => "test@test.com"); + $user = array( + 'login' => $login, + 'password' => "geqgeagae", + 'email' => "test@test.com" + ); $this->api->addUser($user['login'], $user['password'], $user['email']); @@ -1011,9 +1064,11 @@ class UsersManagerTest extends IntegrationTestCase public function testGetUserByEmail() { - $user = array('login' => "login", - 'password' => "geqgeagae", - 'email' => "test@test.com"); + $user = array( + 'login' => "login", + 'password' => "geqgeagae", + 'email' => "test@test.com" + ); $this->api->addUser($user['login'], $user['password'], $user['email']); @@ -1038,23 +1093,24 @@ class UsersManagerTest extends IntegrationTestCase $this->addSites(1); $roles = $this->api->getAvailableRoles(); $expected = array( - array ( - 'id' => 'view', - 'name' => 'UsersManager_PrivView', - 'description' => 'UsersManager_PrivViewDescription', - 'helpUrl' => 'https://matomo.org/faq/general/faq_70/' - ), array ( - 'id' => 'write', - 'name' => 'UsersManager_PrivWrite', - 'description' => 'UsersManager_PrivWriteDescription', - 'helpUrl' => 'https://matomo.org/faq/general/faq_26910' - ), - array ( - 'id' => 'admin', - 'name' => 'UsersManager_PrivAdmin', - 'description' => 'UsersManager_PrivAdminDescription', - 'helpUrl' => 'https://matomo.org/faq/general/faq_69/', - ) + array( + 'id' => 'view', + 'name' => 'UsersManager_PrivView', + 'description' => 'UsersManager_PrivViewDescription', + 'helpUrl' => 'https://matomo.org/faq/general/faq_70/' + ), + array( + 'id' => 'write', + 'name' => 'UsersManager_PrivWrite', + 'description' => 'UsersManager_PrivWriteDescription', + 'helpUrl' => 'https://matomo.org/faq/general/faq_26910' + ), + array( + 'id' => 'admin', + 'name' => 'UsersManager_PrivAdmin', + 'description' => 'UsersManager_PrivAdminDescription', + 'helpUrl' => 'https://matomo.org/faq/general/faq_69/', + ) ); $this->assertEquals($expected, $roles); } @@ -1063,30 +1119,30 @@ class UsersManagerTest extends IntegrationTestCase { $this->addSites(1); $this->assertSame(array( - 0 => array( - 'id' => 'tagmanager_write', - 'name' => 'UsersManager_PrivWrite', - 'description' => 'TagManager_CapabilityWriteDescription', - 'helpUrl' => '', - 'includedInRoles' => array ('write', 'admin'), - 'category' => 'TagManager_TagManager', - ), - 1 => array ( - 'id' => 'tagmanager_publish_live_container', - 'name' => 'TagManager_CapabilityPublishLiveContainer', - 'description' => 'TagManager_CapabilityPublishLiveContainerDescription', - 'helpUrl' => '', - 'includedInRoles' => array ('admin'), - 'category' => 'TagManager_TagManager', - ), - 2 => array ( - 'id' => 'tagmanager_use_custom_templates', - 'name' => 'TagManager_CapabilityUseCustomTemplates', - 'description' => 'TagManager_CapabilityUseCustomTemplateDescription', - 'helpUrl' => '', - 'includedInRoles' => array ('admin'), - 'category' => 'TagManager_TagManager', - ) + 0 => array( + 'id' => 'tagmanager_write', + 'name' => 'UsersManager_PrivWrite', + 'description' => 'TagManager_CapabilityWriteDescription', + 'helpUrl' => '', + 'includedInRoles' => array('write', 'admin'), + 'category' => 'TagManager_TagManager', + ), + 1 => array( + 'id' => 'tagmanager_publish_live_container', + 'name' => 'TagManager_CapabilityPublishLiveContainer', + 'description' => 'TagManager_CapabilityPublishLiveContainerDescription', + 'helpUrl' => '', + 'includedInRoles' => array('admin'), + 'category' => 'TagManager_TagManager', + ), + 2 => array( + 'id' => 'tagmanager_use_custom_templates', + 'name' => 'TagManager_CapabilityUseCustomTemplates', + 'description' => 'TagManager_CapabilityUseCustomTemplateDescription', + 'helpUrl' => '', + 'includedInRoles' => array('admin'), + 'category' => 'TagManager_TagManager', + ) ), $this->api->getAvailableCapabilities()); } @@ -1104,43 +1160,14 @@ class UsersManagerTest extends IntegrationTestCase $this->assertNotEmpty($user['invite_status']); } - public function testInviteUserEmail() - { - $view = new View('@UsersManager/_userInviteEmail.twig'); - $view->login = "test"; - $view->emailAddress = "test@test.com";; - $view->idSite = 1; - $view->siteName = 'test'; - $view->token = "thisisatoken"; - - // content line for email body - $view->content =Piwik::translate('CoreAdminHome_UserInviteSubject', - ["test", "test"]); - - //notes for email footer - $view->notes = Piwik::translate('CoreAdminHome_UserInviteNotes', ['test','test']); - $host = SettingsPiwik::getPiwikUrl(); - $content = <<General_HelloUser

-

CoreAdminHome_UserInviteSubject

-CoreAdminHome_AcceptInvite | -CoreAdminHome_DeclineInvite -

Notes:CoreAdminHome_UserInviteNotes

-END; - $this->assertEquals($content, $view->render()); - - } - - private function addSites($numberOfSites) { $idSites = array(); for ($index = 0; $index < $numberOfSites; $index++) { - $name = "test" . ($index + 1); - $idSites[] = APISitesManager::getInstance()->addSite($name, array("http://piwik.net", "http://piwik.com/test/")); + $name = "test" . ($index + 1); + $idSites[] = APISitesManager::getInstance()->addSite($name, + array("http://piwik.net", "http://piwik.com/test/")); } return $idSites; @@ -1149,7 +1176,7 @@ END; public function provideContainerConfig() { return array( - 'Piwik\Access' => new FakeAccess() + 'Piwik\Access' => new FakeAccess() ); } diff --git a/plugins/UsersManager/tests/System/ApiTest.php b/plugins/UsersManager/tests/System/ApiTest.php index dd5f1d99d5..528163512b 100644 --- a/plugins/UsersManager/tests/System/ApiTest.php +++ b/plugins/UsersManager/tests/System/ApiTest.php @@ -61,7 +61,18 @@ class ApiTest extends SystemTestCase // login1 = super user, login2 = some admin access, login4 = only view access foreach ($logins as $login => $appendix) { $params['token_auth'] = self::$fixture->users[$login]['token']; - $xmlFieldsToRemove = array('date_registered', 'invite_status', 'last_seen', 'password', 'token_auth', 'ts_password_modified', 'idchange_last_viewed'); + $xmlFieldsToRemove = array( + 'date_registered', + 'invite_token', + 'invite_accept_at', + 'invite_expired_at', + 'last_seen', + 'password', + 'token_auth', + 'ts_password_modified', + 'idchange_last_viewed', + 'invite_status' + ); $this->runAnyApiTest($api, $apiId . '_' . $appendix, $params, array('xmlFieldsToRemove' => $xmlFieldsToRemove)); } diff --git a/plugins/UsersManager/tests/System/expected/test___UsersManager.getUser_login1_when_superuseraccess.xml b/plugins/UsersManager/tests/System/expected/test___UsersManager.getUser_login1_when_superuseraccess.xml index 8dab9ca5ce..f07ca1cf6c 100644 --- a/plugins/UsersManager/tests/System/expected/test___UsersManager.getUser_login1_when_superuseraccess.xml +++ b/plugins/UsersManager/tests/System/expected/test___UsersManager.getUser_login1_when_superuseraccess.xml @@ -5,6 +5,10 @@ login1@example.com 1 + + + + 0 diff --git a/plugins/UsersManager/tests/System/expected/test___UsersManager.getUser_login2_when_adminaccess.xml b/plugins/UsersManager/tests/System/expected/test___UsersManager.getUser_login2_when_adminaccess.xml index 98231bbff5..96019b8419 100644 --- a/plugins/UsersManager/tests/System/expected/test___UsersManager.getUser_login2_when_adminaccess.xml +++ b/plugins/UsersManager/tests/System/expected/test___UsersManager.getUser_login2_when_adminaccess.xml @@ -4,5 +4,6 @@ login2 login2@example.com 0 + \ No newline at end of file diff --git a/plugins/UsersManager/tests/System/expected/test___UsersManager.getUser_login2_when_superuseraccess.xml b/plugins/UsersManager/tests/System/expected/test___UsersManager.getUser_login2_when_superuseraccess.xml index fa3bd7ac68..79f9f74969 100644 --- a/plugins/UsersManager/tests/System/expected/test___UsersManager.getUser_login2_when_superuseraccess.xml +++ b/plugins/UsersManager/tests/System/expected/test___UsersManager.getUser_login2_when_superuseraccess.xml @@ -5,6 +5,10 @@ login2@example.com 0 + + + + 0 diff --git a/plugins/UsersManager/tests/System/expected/test___UsersManager.getUser_login4_when_superuseraccess.xml b/plugins/UsersManager/tests/System/expected/test___UsersManager.getUser_login4_when_superuseraccess.xml index 9cc5801c8d..71f8ce19be 100644 --- a/plugins/UsersManager/tests/System/expected/test___UsersManager.getUser_login4_when_superuseraccess.xml +++ b/plugins/UsersManager/tests/System/expected/test___UsersManager.getUser_login4_when_superuseraccess.xml @@ -5,6 +5,10 @@ login4@example.com 0 + + + + 0 diff --git a/plugins/UsersManager/tests/System/expected/test___UsersManager.getUser_login4_when_viewaccess.xml b/plugins/UsersManager/tests/System/expected/test___UsersManager.getUser_login4_when_viewaccess.xml index b6cf8cb4c4..bccb9256f9 100644 --- a/plugins/UsersManager/tests/System/expected/test___UsersManager.getUser_login4_when_viewaccess.xml +++ b/plugins/UsersManager/tests/System/expected/test___UsersManager.getUser_login4_when_viewaccess.xml @@ -4,5 +4,6 @@ login4 login4@example.com 0 + \ No newline at end of file diff --git a/plugins/UsersManager/tests/System/expected/test___UsersManager.getUser_login6_when_superuseraccess.xml b/plugins/UsersManager/tests/System/expected/test___UsersManager.getUser_login6_when_superuseraccess.xml index dcddc97dfd..0ddf3a7097 100644 --- a/plugins/UsersManager/tests/System/expected/test___UsersManager.getUser_login6_when_superuseraccess.xml +++ b/plugins/UsersManager/tests/System/expected/test___UsersManager.getUser_login6_when_superuseraccess.xml @@ -5,6 +5,10 @@ login6@example.com 0 + + + + 0 diff --git a/plugins/UsersManager/tests/System/expected/test___UsersManager.getUsersLogin__when_adminaccess.xml b/plugins/UsersManager/tests/System/expected/test___UsersManager.getUsersLogin__when_adminaccess.xml index 7658fdd5a6..60a460dd8c 100644 --- a/plugins/UsersManager/tests/System/expected/test___UsersManager.getUsersLogin__when_adminaccess.xml +++ b/plugins/UsersManager/tests/System/expected/test___UsersManager.getUsersLogin__when_adminaccess.xml @@ -7,4 +7,5 @@ login7 login8 login9 + zzzpendingUser2 \ No newline at end of file diff --git a/plugins/UsersManager/tests/System/expected/test___UsersManager.getUsersLogin__when_superuseraccess.xml b/plugins/UsersManager/tests/System/expected/test___UsersManager.getUsersLogin__when_superuseraccess.xml index b81834b5fb..0083838caf 100644 --- a/plugins/UsersManager/tests/System/expected/test___UsersManager.getUsersLogin__when_superuseraccess.xml +++ b/plugins/UsersManager/tests/System/expected/test___UsersManager.getUsersLogin__when_superuseraccess.xml @@ -12,4 +12,5 @@ login8 login9 superUserLogin + zzzpendingUser2 \ No newline at end of file diff --git a/plugins/UsersManager/tests/System/expected/test___UsersManager.getUsersWithSiteAccess_3_admin_when_superuseraccess.xml b/plugins/UsersManager/tests/System/expected/test___UsersManager.getUsersWithSiteAccess_3_admin_when_superuseraccess.xml index 02ec1e6d90..75c08d51bf 100644 --- a/plugins/UsersManager/tests/System/expected/test___UsersManager.getUsersWithSiteAccess_3_admin_when_superuseraccess.xml +++ b/plugins/UsersManager/tests/System/expected/test___UsersManager.getUsersWithSiteAccess_3_admin_when_superuseraccess.xml @@ -5,6 +5,10 @@ login5@example.com 0 + + + + 0 @@ -13,6 +17,10 @@ login6@example.com 0 + + + + 0 diff --git a/plugins/UsersManager/tests/System/expected/test___UsersManager.getUsers__when_adminaccess.xml b/plugins/UsersManager/tests/System/expected/test___UsersManager.getUsers__when_adminaccess.xml index 31a5fac273..5d3b34b562 100644 --- a/plugins/UsersManager/tests/System/expected/test___UsersManager.getUsers__when_adminaccess.xml +++ b/plugins/UsersManager/tests/System/expected/test___UsersManager.getUsers__when_adminaccess.xml @@ -1,32 +1,40 @@ - - 000pendingUser1 - 0 - login2 login2@example.com 0 + login4 0 + login6 0 + login7 0 + login8 0 + login9 0 + + + + zzzpendingUser2 + 0 + + login2 \ No newline at end of file diff --git a/plugins/UsersManager/tests/System/expected/test___UsersManager.getUsers__when_superuseraccess.xml b/plugins/UsersManager/tests/System/expected/test___UsersManager.getUsers__when_superuseraccess.xml index a2032128d8..25a13356b3 100644 --- a/plugins/UsersManager/tests/System/expected/test___UsersManager.getUsers__when_superuseraccess.xml +++ b/plugins/UsersManager/tests/System/expected/test___UsersManager.getUsers__when_superuseraccess.xml @@ -5,7 +5,11 @@ pendinguser1light@example.com 0 - today-date-removed-in-tests + superUserLogin + + + + 0 @@ -13,7 +17,11 @@ login1@example.com 1 - + + + + + 0 @@ -21,7 +29,11 @@ login10@example.com 1 - + + + + + 0 @@ -29,7 +41,11 @@ login2@example.com 0 - + + + + + 0 @@ -37,7 +53,11 @@ login3@example.com 0 - + + + + + 0 @@ -45,7 +65,11 @@ login4@example.com 0 - + + + + + 0 @@ -53,7 +77,11 @@ login5@example.com 0 - + + + + + 0 @@ -61,7 +89,11 @@ login6@example.com 0 - + + + + + 0 @@ -69,7 +101,11 @@ login7@example.com 0 - + + + + + 0 @@ -77,7 +113,11 @@ login8@example.com 0 - + + + + + 0 @@ -85,7 +125,11 @@ login9@example.com 0 - + + + + + 0 @@ -93,7 +137,23 @@ hello@example.org 1 - + + + + + + 0 + + + zzzpendingUser2 + zpendinguser2light@example.com + 0 + + login2 + + + + 0 \ No newline at end of file diff --git a/plugins/UsersManager/tests/UI/UsersManager_spec.js b/plugins/UsersManager/tests/UI/UsersManager_spec.js index 9feb4e0fb8..87f9777c1a 100644 --- a/plugins/UsersManager/tests/UI/UsersManager_spec.js +++ b/plugins/UsersManager/tests/UI/UsersManager_spec.js @@ -36,13 +36,8 @@ describe("UsersManager", function () { expect(await page.screenshotSelector('.usersManager')).to.matchImage('load'); }); - it('should show resend confirm when resend clicked', async function () { - await (await page.jQuery('.resend')).click(); - expect(await page.screenshotSelector('.usersManager')).to.matchImage('resend_popup'); - }); it('should change the results page when next is clicked', async function () { - await (await page.jQuery('.resend-invite-confirm-modal .modal-close:not(.modal-no):visible')).click(); await page.click('.usersListPagination .btn.next'); await page.mouse.move(-10, -10); await page.waitForNetworkIdle(); @@ -54,6 +49,8 @@ describe("UsersManager", function () { await page.evaluate(function () { $('select[name=access-level-filter]').val('string:view').change(); $('#user-text-filter').val('ight').change(); + $('select[name=status-level-filter]').val('string:pending').change(); + }); await page.waitForNetworkIdle(); await page.waitForTimeout(1000); // wait for rendering @@ -65,6 +62,7 @@ describe("UsersManager", function () { // remove access filter await page.evaluate(function () { $('select[name=access-level-filter]').val('string:').change(); + $('select[name=status-level-filter]').val('string:').change(); }); await page.evaluate(() => $('th.role_header .siteSelector a.title').click()); @@ -173,11 +171,6 @@ describe("UsersManager", function () { it('should delete a single user when the modal is confirmed is clicked', async function () { - await page.evaluate(function () { - $('select[name=access-level-filter]').val('string:view').change(); - $('#user-text-filter').val('ight').change(); - }); - await (await page.jQuery('.deleteuser:eq(0)')).click(); await (await page.jQuery('.delete-user-confirm-modal .modal-close:not(.modal-no):visible')).click(); await page.waitForNetworkIdle(); @@ -440,6 +433,7 @@ describe("UsersManager", function () { it('should display the superuser access tab when the superuser tab is clicked', async function () { await page.click('.userEditForm .menuSuperuser'); await page.mouse.move(0, 0); + await page.waitForTimeout(100); expect(await page.screenshotSelector('.usersManager')).to.matchImage('superuser_tab'); }); @@ -490,7 +484,7 @@ describe("UsersManager", function () { }); it('should show the edit user form when the edit icon in a row is clicked', async function () { - await (await page.jQuery('button.edituser:eq(1)', { waitFor: true })).click(); + await (await page.jQuery('button.edituser:eq(2)', { waitFor: true })).click(); await page.waitForTimeout(250); await page.waitForNetworkIdle(); @@ -524,9 +518,25 @@ describe("UsersManager", function () { await page.waitForNetworkIdle(); await page.waitForSelector('#notificationContainer .notification'); + expect(await page.screenshotSelector('.admin#content,#notificationContainer')).to.matchImage('edit_user_basic_confirmed_wrong_password'); }); + it('should show resend confirm when resend clicked', async function () { + await page.goto(url); + await (await page.jQuery('.resend')).click(); + await page.waitForTimeout(500); // animation + await page.waitForSelector('.resend-invite-confirm-modal', { visible: true }); + expect(await page.screenshotSelector('.usersManager')).to.matchImage('resend_popup'); + }); + + it('should show resend success message', async function() { + await (await page.jQuery('.resend-invite-confirm-modal .modal-close:not(.modal-no):visible')).click(); + await page.waitForSelector('#notificationContainer .notification'); + expect(await page.screenshotSelector('.usersManager')).to.matchImage('resend_success'); + }); + + // admin user tests describe('UsersManager_admin_view', function () { before(async function () { diff --git a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_add_new_user_form.png b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_add_new_user_form.png index 49beda2f91..20d1fa159a 100644 --- a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_add_new_user_form.png +++ b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_add_new_user_form.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:df465b8206b76a6057fb58a5d48aeffb444e80ead2d0a6ea7a924b6b232e3f6b -size 51512 +oid sha256:fb9640614a2c2ce098c4c0d5320206cdac71c0611d7bd9e9c0e9a4d1c03a2827 +size 51975 diff --git a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_admin_view_admin_add_user.png b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_admin_view_admin_add_user.png index 49beda2f91..20d1fa159a 100644 --- a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_admin_view_admin_add_user.png +++ b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_admin_view_admin_add_user.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:df465b8206b76a6057fb58a5d48aeffb444e80ead2d0a6ea7a924b6b232e3f6b -size 51512 +oid sha256:fb9640614a2c2ce098c4c0d5320206cdac71c0611d7bd9e9c0e9a4d1c03a2827 +size 51975 diff --git a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_admin_view_admin_add_user_by_email.png b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_admin_view_admin_add_user_by_email.png index f367d4283b..4a95db6ece 100644 --- a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_admin_view_admin_add_user_by_email.png +++ b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_admin_view_admin_add_user_by_email.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:99aa09442363e539084d440c5f72c586e170f5c08202e3c7717ed94d107ab000 -size 46067 +oid sha256:ae0a19a32d2fb0ba3df609914db1710754aaf0bb4f852027d6a9a2498e19b9eb +size 45809 diff --git a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_admin_view_admin_add_user_by_login.png b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_admin_view_admin_add_user_by_login.png index d1269abd39..13c37d4e8a 100644 --- a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_admin_view_admin_add_user_by_login.png +++ b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_admin_view_admin_add_user_by_login.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:44c6177345745953c3eb700166b3d9826de1a83eea8ef8a2e25a7348905df814 -size 44138 +oid sha256:33ef14962b6edc965b2b928fbacf586e73222606fc73c5852e0186fbbf4bfbb9 +size 43835 diff --git a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_admin_view_admin_add_user_not_exists.png b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_admin_view_admin_add_user_not_exists.png index afffee7f11..fb6f3d074c 100644 --- a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_admin_view_admin_add_user_not_exists.png +++ b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_admin_view_admin_add_user_not_exists.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2eaf09b2a278a4524a299fdabe08ec8f9127847af03b2380020f942135217f40 -size 40075 +oid sha256:8b0148b8066cee3d6b256d38a08753da4f3c3356075a719a44c7ce8ba25c4f14 +size 40840 diff --git a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_admin_view_admin_load.png b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_admin_view_admin_load.png index ed6d558535..6cf6aa4384 100644 --- a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_admin_view_admin_load.png +++ b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_admin_view_admin_load.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3f7a1c8ede3bb61b869dbab37be56d784879f3d7be5c4e80bb86e7f275487374 -size 136964 +oid sha256:8a2c8af6d0c208d6803094f9762157429155751ae77240e796d18b44a8fdc18d +size 125120 diff --git a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_all_rows_deselected.png b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_all_rows_deselected.png index eeb04639af..fbbf3f66d2 100644 --- a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_all_rows_deselected.png +++ b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_all_rows_deselected.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:90cbdd69c29d89d3b843c3b29f8d2f06c1f9ae12cd547a385415ab94af710e98 -size 189876 +oid sha256:7b47dc217801273f99419123512394169fc612f2617ce2901e2ac7e88a5c2614 +size 177823 diff --git a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_all_rows_in_search.png b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_all_rows_in_search.png index c4f3c28fda..f1617699f0 100644 --- a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_all_rows_in_search.png +++ b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_all_rows_in_search.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3c5af9e3e3b371d75765dfa99ac73239fa0bc6d5f28503aa9ddcde5cf8c36d67 -size 190238 +oid sha256:d572a26d1f78df50632821e9bd237e667bacf4c3bd18b9cbeb7d2a09821bfc7f +size 178182 diff --git a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_all_rows_selected.png b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_all_rows_selected.png index eeb04639af..fbbf3f66d2 100644 --- a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_all_rows_selected.png +++ b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_all_rows_selected.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:90cbdd69c29d89d3b843c3b29f8d2f06c1f9ae12cd547a385415ab94af710e98 -size 189876 +oid sha256:7b47dc217801273f99419123512394169fc612f2617ce2901e2ac7e88a5c2614 +size 177823 diff --git a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_bulk_remove_access.png b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_bulk_remove_access.png index a5e69931ad..0bf31bcb2d 100644 --- a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_bulk_remove_access.png +++ b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_bulk_remove_access.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9a6067784a28a84cf9994cdd648f37fa471f51e34efce5d5e84d09665e5f518a -size 180900 +oid sha256:2c5cfbb45de502c5c709a8b9e729d17d7c5207f3a52d2e5a80251e8f044ab8e0 +size 168877 diff --git a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_bulk_set_access.png b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_bulk_set_access.png index 7197789c4a..ffe716941e 100644 --- a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_bulk_set_access.png +++ b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_bulk_set_access.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:de69e012f88d200df0fb0fac97485a9949fa3af94c89c828513eaa5a25cb06e9 -size 171656 +oid sha256:49f5101fa39e83217cb385ad9b11d19c138cd8063f1bc730006876f8bd622968 +size 159347 diff --git a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_bulk_set_access_confirm.png b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_bulk_set_access_confirm.png index 3756acdcee..87346b5818 100644 --- a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_bulk_set_access_confirm.png +++ b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_bulk_set_access_confirm.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:18dc30ffd01c62b5f591b05cc85b76a25786eb935f0538e65656f8848f0c59c8 -size 9351 +oid sha256:7223123c832edc705080b0bfbcd92ea4fa00255cfb17bde06cf04dfefb5b97f1 +size 9526 diff --git a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_delete_bulk_access.png b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_delete_bulk_access.png index dca72af936..436da04ed1 100644 --- a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_delete_bulk_access.png +++ b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_delete_bulk_access.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:92168d09555061bed7c9744f3b5252fc5328a24c51f80df7cb56331b398c04be -size 26969 +oid sha256:142a425ca04ec7b5a1580ac02fc2e29545348e586342c7f03ab1ea6563127443 +size 170040 diff --git a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_delete_single.png b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_delete_single.png index fc91101f8b..0cff043a61 100644 --- a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_delete_single.png +++ b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_delete_single.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7f4cb4fcec0ec3eebad0063bddbfd1d7e0c8410a64ee8569d5ef78f8df3302a5 -size 170348 +oid sha256:27f1f1974ce5f805d81fe0ecade75d98a667d9c82e08b765cfd68be9a6e09a60 +size 171357 diff --git a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_edit_user_basic_asks_confirmation.png b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_edit_user_basic_asks_confirmation.png index 7854904373..e44dd90328 100644 --- a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_edit_user_basic_asks_confirmation.png +++ b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_edit_user_basic_asks_confirmation.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:86f5888587a18b98c0118ad5709d6d3d98486ac8f3f5f5f6c82a5936d72eafed -size 21978 +oid sha256:3b47b430f67f92811615b9b10dafc3137923b849580f50256598bc33e92d3bc5 +size 21831 diff --git a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_edit_user_basic_confirmed_wrong_password.png b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_edit_user_basic_confirmed_wrong_password.png index c5325fd782..c3a3455aaf 100644 --- a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_edit_user_basic_confirmed_wrong_password.png +++ b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_edit_user_basic_confirmed_wrong_password.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:052ed4ad65093f9967ddf7366847fc53fae99260bdbfced20f7bf11f9e33d3f2 -size 31099 +oid sha256:319f8ab21d7da64f61896b14966b3a290682a294b25e5372d22bd8ed8efb999d +size 30872 diff --git a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_edit_user_form.png b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_edit_user_form.png index 107d81d036..3e090100ff 100644 --- a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_edit_user_form.png +++ b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_edit_user_form.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:37d8b53b65dbe7e0b696f83e5ab4b8a2e4787ad5a524eb6dd619f1d3f5f56d82 -size 24864 +oid sha256:6808d97c5c13d69a0a622c925bd77000d8ec9807d5adc574f4961c88632863d1 +size 24258 diff --git a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_filters.png b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_filters.png index bd497115da..dc6d7c5cfd 100644 --- a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_filters.png +++ b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_filters.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:97938e80121da3aa373377e92066c1798341c91a53de14e516668e2467b3e5cb -size 172026 +oid sha256:5941c7d9be4d9648c7dd0a04ad0fbd71ec1a650b908526e28e541c87de60e86e +size 45243 diff --git a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_load.png b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_load.png index accf87147a..3896263dca 100644 --- a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_load.png +++ b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_load.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f9a2640f91c653940bd7f4f3f631f370122e6e7d81635fb18ada658e7f18fc01 -size 179096 +oid sha256:cc295812f1eddc30410ae5699b5c8b42b68c73da7dd046cde5ee40670c083f8f +size 180107 diff --git a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_manage_users_back.png b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_manage_users_back.png index 953c45f5cb..c1f185df9b 100644 --- a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_manage_users_back.png +++ b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_manage_users_back.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d15a7db15186c51b0103b34a6c842a10175a9993cc8c16a273c1f4bfb6bcafea -size 167125 +oid sha256:d399814e61b3b412ec24fd978138b935061a04f99d00abfd4c9e873704973f17 +size 181925 diff --git a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_next_click.png b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_next_click.png index accf87147a..0d9e82b574 100644 --- a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_next_click.png +++ b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_next_click.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f9a2640f91c653940bd7f4f3f631f370122e6e7d81635fb18ada658e7f18fc01 -size 179096 +oid sha256:563c7d96fe000357dbcd919bd7dd0c84ad9bd27985fb02a124f21b99abe2f5d6 +size 182540 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 5446e90a8f..793b53faa1 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:a828ac11b951dad41d2c9fde7ef4dba7fb3a0054a6f5642062fc5e2e90960ecb -size 92981 +oid sha256:79a3ac1d3b23ba1e7796be19ffd00441047d4b8a5bd012a922dbf93796601d6d +size 108004 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 ef51a6b1dd..3682b1348e 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:030cf64820bb2651df8089d886d22d734c8bf4db15003a1a03358808e6d22923 -size 81545 +oid sha256:0f73adc2c884b138c888a1edb0632ad192331cb4c8d8d17141a285a9a0f0e725 +size 96478 diff --git a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_previous.png b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_previous.png index 69eeda3864..b5b82113e2 100644 --- a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_previous.png +++ b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_previous.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3a1f5d5c5e0015870d94550a7a08cb4ea7833171648398308c917183790da3db -size 170518 +oid sha256:e11665e96a0656366b93e8bed7f6d74a41bbeb68e1edc91b9b3382b45f07cced +size 171421 diff --git a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_resend_popup.png b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_resend_popup.png index 25cd79c9cd..23e1465e86 100644 --- a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_resend_popup.png +++ b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_resend_popup.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:28f70514a1c2aac645aef53f388bbe9428249d836d75c9b0bed1868c06eafb99 -size 189374 +oid sha256:fb25420e0fd845fe553714b65a914d430614b957f4aa725d397fdca1bdcecb3a +size 178586 diff --git a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_resend_success.png b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_resend_success.png new file mode 100644 index 0000000000..d945863595 --- /dev/null +++ b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_resend_success.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:017e01af7e66509501c90f039bea70acf3a153e6745807dd0046e3849be13de8 +size 183036 diff --git a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_role_for.png b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_role_for.png index a388c9481a..58b34e9a60 100644 --- a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_role_for.png +++ b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_role_for.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1fadec033c757181ce95c7364517de678dd933400259177cef0d2f87cfa6caeb -size 175226 +oid sha256:8006f4ec6a1f7e33fb45be40c9fb91a6872e8e6f4b219844f3d9baf3f22217bc +size 163058 diff --git a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_rows_selected.png b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_rows_selected.png index 48a5b74dc8..acd1c4131e 100644 --- a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_rows_selected.png +++ b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_rows_selected.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5ae5ffd11859c0040e4203967390d76c3fac06b2626579bb0eb3928ef732a42d -size 176975 +oid sha256:06d07ec3dceaae33679ac0fe68b891627d45c859d38fe37f676316ffedcfec20 +size 164900 diff --git a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_user_created.png b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_user_created.png index 0d4934988b..9184f1a37d 100644 --- a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_user_created.png +++ b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_user_created.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:406437e042339b681e39ce9e745e8ee5e391fd758a3bee0b8a1651a9c80f5c96 -size 22488 +oid sha256:f97cfaa64c56e51a88d1f4727be80753f5e51956fd474d4d1ec89a5dfd0d5508 +size 22833 diff --git a/plugins/UsersManager/vue/dist/UsersManager.umd.js b/plugins/UsersManager/vue/dist/UsersManager.umd.js index 424ce5a8c1..065b5b3fe4 100644 --- a/plugins/UsersManager/vue/dist/UsersManager.umd.js +++ b/plugins/UsersManager/vue/dist/UsersManager.umd.js @@ -103,13 +103,6 @@ module.exports = __WEBPACK_EXTERNAL_MODULE__19dc__; /***/ }), -/***/ "8bba": -/***/ (function(module, exports, __webpack_require__) { - -// extracted by mini-css-extract-plugin - -/***/ }), - /***/ "8bbf": /***/ (function(module, exports) { @@ -122,17 +115,6 @@ module.exports = __WEBPACK_EXTERNAL_MODULE__8bbf__; module.exports = __WEBPACK_EXTERNAL_MODULE_a5a2__; -/***/ }), - -/***/ "f2d6": -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var _node_modules_vue_cli_service_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_vue_cli_service_node_modules_css_loader_dist_cjs_js_ref_6_oneOf_1_1_node_modules_vue_cli_service_node_modules_vue_loader_v16_dist_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_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_index_js_ref_0_1_PagedUsersList_vue_vue_type_style_index_0_id_2ff6c088_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("8bba"); -/* harmony import */ var _node_modules_vue_cli_service_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_vue_cli_service_node_modules_css_loader_dist_cjs_js_ref_6_oneOf_1_1_node_modules_vue_cli_service_node_modules_vue_loader_v16_dist_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_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_index_js_ref_0_1_PagedUsersList_vue_vue_type_style_index_0_id_2ff6c088_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_vue_cli_service_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_vue_cli_service_node_modules_css_loader_dist_cjs_js_ref_6_oneOf_1_1_node_modules_vue_cli_service_node_modules_vue_loader_v16_dist_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_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_index_js_ref_0_1_PagedUsersList_vue_vue_type_style_index_0_id_2ff6c088_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_0__); -/* unused harmony reexport * */ - - /***/ }), /***/ "fae3": @@ -1466,119 +1448,119 @@ UserPermissionsEditvue_type_script_lang_ts.render = UserPermissionsEditvue_type_ directiveName: 'piwikUserPermissionsEdit', restrict: 'E' })); -// 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/UserEditForm/UserEditForm.vue?vue&type=template&id=630fdb84 +// 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/UserEditForm/UserEditForm.vue?vue&type=template&id=71e0c307 -var UserEditFormvue_type_template_id_630fdb84_hoisted_1 = { +var UserEditFormvue_type_template_id_71e0c307_hoisted_1 = { class: "row" }; -var UserEditFormvue_type_template_id_630fdb84_hoisted_2 = { +var UserEditFormvue_type_template_id_71e0c307_hoisted_2 = { key: 0, class: "col m2 entityList" }; -var UserEditFormvue_type_template_id_630fdb84_hoisted_3 = { +var UserEditFormvue_type_template_id_71e0c307_hoisted_3 = { class: "listCircle" }; -var UserEditFormvue_type_template_id_630fdb84_hoisted_4 = { +var UserEditFormvue_type_template_id_71e0c307_hoisted_4 = { key: 0, class: "icon-warning" }; -var UserEditFormvue_type_template_id_630fdb84_hoisted_5 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", { +var UserEditFormvue_type_template_id_71e0c307_hoisted_5 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", { class: "save-button-spacer hide-on-small-only" }, null, -1); -var UserEditFormvue_type_template_id_630fdb84_hoisted_6 = { +var UserEditFormvue_type_template_id_71e0c307_hoisted_6 = { href: "", class: "entityCancelLink" }; -var UserEditFormvue_type_template_id_630fdb84_hoisted_7 = { +var UserEditFormvue_type_template_id_71e0c307_hoisted_7 = { class: "visibleTab col m10" }; -var UserEditFormvue_type_template_id_630fdb84_hoisted_8 = { +var UserEditFormvue_type_template_id_71e0c307_hoisted_8 = { key: 0, class: "basic-info-tab" }; -var UserEditFormvue_type_template_id_630fdb84_hoisted_9 = { +var UserEditFormvue_type_template_id_71e0c307_hoisted_9 = { class: "form-group row", style: { "position": "relative" } }; -var UserEditFormvue_type_template_id_630fdb84_hoisted_10 = { +var UserEditFormvue_type_template_id_71e0c307_hoisted_10 = { class: "col s12 m6" }; -var UserEditFormvue_type_template_id_630fdb84_hoisted_11 = { +var UserEditFormvue_type_template_id_71e0c307_hoisted_11 = { class: "col s12 m6" }; -var UserEditFormvue_type_template_id_630fdb84_hoisted_12 = { +var UserEditFormvue_type_template_id_71e0c307_hoisted_12 = { key: 0, class: "form-help" }; -var UserEditFormvue_type_template_id_630fdb84_hoisted_13 = ["innerHTML"]; -var UserEditFormvue_type_template_id_630fdb84_hoisted_14 = { +var UserEditFormvue_type_template_id_71e0c307_hoisted_13 = ["innerHTML"]; +var UserEditFormvue_type_template_id_71e0c307_hoisted_14 = { key: 0, class: "entityCancel" }; -var UserEditFormvue_type_template_id_630fdb84_hoisted_15 = { +var UserEditFormvue_type_template_id_71e0c307_hoisted_15 = { key: 1, class: "user-permissions" }; -var UserEditFormvue_type_template_id_630fdb84_hoisted_16 = { +var UserEditFormvue_type_template_id_71e0c307_hoisted_16 = { key: 0 }; -var UserEditFormvue_type_template_id_630fdb84_hoisted_17 = { +var UserEditFormvue_type_template_id_71e0c307_hoisted_17 = { key: 1, class: "alert alert-info" }; -var UserEditFormvue_type_template_id_630fdb84_hoisted_18 = { +var UserEditFormvue_type_template_id_71e0c307_hoisted_18 = { key: 2, class: "superuser-access" }; -var UserEditFormvue_type_template_id_630fdb84_hoisted_19 = { +var UserEditFormvue_type_template_id_71e0c307_hoisted_19 = { class: "superuser-confirm-modal modal", ref: "superUserConfirmModal" }; -var UserEditFormvue_type_template_id_630fdb84_hoisted_20 = { +var UserEditFormvue_type_template_id_71e0c307_hoisted_20 = { class: "modal-content" }; -var UserEditFormvue_type_template_id_630fdb84_hoisted_21 = { +var UserEditFormvue_type_template_id_71e0c307_hoisted_21 = { key: 0 }; -var UserEditFormvue_type_template_id_630fdb84_hoisted_22 = { +var UserEditFormvue_type_template_id_71e0c307_hoisted_22 = { key: 1 }; -var UserEditFormvue_type_template_id_630fdb84_hoisted_23 = { +var UserEditFormvue_type_template_id_71e0c307_hoisted_23 = { class: "modal-footer" }; -var UserEditFormvue_type_template_id_630fdb84_hoisted_24 = { +var UserEditFormvue_type_template_id_71e0c307_hoisted_24 = { key: 3, class: "twofa-reset" }; -var UserEditFormvue_type_template_id_630fdb84_hoisted_25 = { +var UserEditFormvue_type_template_id_71e0c307_hoisted_25 = { class: "resetTwoFa" }; -var UserEditFormvue_type_template_id_630fdb84_hoisted_26 = { +var UserEditFormvue_type_template_id_71e0c307_hoisted_26 = { class: "twofa-confirm-modal modal", ref: "twofaConfirmModal" }; -var UserEditFormvue_type_template_id_630fdb84_hoisted_27 = { +var UserEditFormvue_type_template_id_71e0c307_hoisted_27 = { class: "modal-content" }; -var UserEditFormvue_type_template_id_630fdb84_hoisted_28 = { +var UserEditFormvue_type_template_id_71e0c307_hoisted_28 = { class: "modal-footer" }; -var UserEditFormvue_type_template_id_630fdb84_hoisted_29 = { +var UserEditFormvue_type_template_id_71e0c307_hoisted_29 = { class: "change-password-modal modal", ref: "changePasswordModal" }; -var UserEditFormvue_type_template_id_630fdb84_hoisted_30 = { +var UserEditFormvue_type_template_id_71e0c307_hoisted_30 = { class: "modal-content" }; -var UserEditFormvue_type_template_id_630fdb84_hoisted_31 = ["innerHTML"]; -var UserEditFormvue_type_template_id_630fdb84_hoisted_32 = { +var UserEditFormvue_type_template_id_71e0c307_hoisted_31 = ["innerHTML"]; +var UserEditFormvue_type_template_id_71e0c307_hoisted_32 = { class: "modal-footer" }; -function UserEditFormvue_type_template_id_630fdb84_render(_ctx, _cache, $props, $setup, $data, $options) { +function UserEditFormvue_type_template_id_71e0c307_render(_ctx, _cache, $props, $setup, $data, $options) { var _component_Field = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["resolveComponent"])("Field"); var _component_SaveButton = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["resolveComponent"])("SaveButton"); @@ -1596,7 +1578,7 @@ function UserEditFormvue_type_template_id_630fdb84_render(_ctx, _cache, $props, "content-title": "".concat(_ctx.formTitle, " ").concat(!_ctx.isAdd ? "'".concat(_ctx.theUser.login, "'") : '') }, { default: Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withCtx"])(function () { - return [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UserEditFormvue_type_template_id_630fdb84_hoisted_1, [!_ctx.isAdd ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", UserEditFormvue_type_template_id_630fdb84_hoisted_2, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("ul", UserEditFormvue_type_template_id_630fdb84_hoisted_3, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("li", { + return [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UserEditFormvue_type_template_id_71e0c307_hoisted_1, [!_ctx.isAdd ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", UserEditFormvue_type_template_id_71e0c307_hoisted_2, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("ul", UserEditFormvue_type_template_id_71e0c307_hoisted_3, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("li", { class: Object(external_commonjs_vue_commonjs2_vue_root_Vue_["normalizeClass"])([{ active: _ctx.activeTab === 'basic' }, "menuBasicInfo"]) @@ -1617,7 +1599,7 @@ function UserEditFormvue_type_template_id_630fdb84_render(_ctx, _cache, $props, style: { "margin-right": "3.5px" } - }, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_Permissions')), 1), !_ctx.userHasAccess && !_ctx.theUser.superuser_access ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("span", UserEditFormvue_type_template_id_630fdb84_hoisted_4)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true)], 2), _ctx.currentUserRole === 'superuser' ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("li", { + }, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_Permissions')), 1), !_ctx.userHasAccess && !_ctx.theUser.superuser_access ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("span", UserEditFormvue_type_template_id_71e0c307_hoisted_4)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true)], 2), _ctx.currentUserRole === 'superuser' ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("li", { key: 0, class: Object(external_commonjs_vue_commonjs2_vue_root_Vue_["normalizeClass"])([{ active: _ctx.activeTab === 'superuser' @@ -1637,12 +1619,12 @@ function UserEditFormvue_type_template_id_630fdb84_render(_ctx, _cache, $props, onClick: _cache[3] || (_cache[3] = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withModifiers"])(function ($event) { return _ctx.activeTab = '2fa'; }, ["prevent"])) - }, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_TwoFactorAuthentication')), 1)], 2)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true)]), UserEditFormvue_type_template_id_630fdb84_hoisted_5, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", { + }, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_TwoFactorAuthentication')), 1)], 2)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true)]), UserEditFormvue_type_template_id_71e0c307_hoisted_5, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", { class: "entityCancel", onClick: _cache[4] || (_cache[4] = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withModifiers"])(function ($event) { return _ctx.onDoneEditing(); }, ["prevent"])) - }, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", UserEditFormvue_type_template_id_630fdb84_hoisted_6, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('Mobile_NavigationBack')), 1)])])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UserEditFormvue_type_template_id_630fdb84_hoisted_7, [_ctx.activeTab === 'basic' ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", UserEditFormvue_type_template_id_630fdb84_hoisted_8, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_Field, { + }, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", UserEditFormvue_type_template_id_71e0c307_hoisted_6, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('Mobile_NavigationBack')), 1)])])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UserEditFormvue_type_template_id_71e0c307_hoisted_7, [_ctx.activeTab === 'basic' ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", UserEditFormvue_type_template_id_71e0c307_hoisted_8, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_Field, { modelValue: _ctx.theUser.login, "onUpdate:modelValue": _cache[5] || (_cache[5] = function ($event) { return _ctx.theUser.login = $event; @@ -1652,7 +1634,7 @@ function UserEditFormvue_type_template_id_630fdb84_render(_ctx, _cache, $props, name: "user_login", maxlength: 100, title: _ctx.translate('General_Username') - }, null, 8, ["modelValue", "disabled", "title"])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [_ctx.isPendingUser ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createBlock"])(_component_Field, { + }, null, 8, ["modelValue", "disabled", "title"])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [!_ctx.isPending ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createBlock"])(_component_Field, { key: 0, "model-value": _ctx.theUser.password, disabled: _ctx.isSavingUserInfo || _ctx.currentUserRole !== 'superuser' && !_ctx.isAdd || _ctx.isShowingPasswordConfirm, @@ -1688,7 +1670,7 @@ function UserEditFormvue_type_template_id_630fdb84_render(_ctx, _cache, $props, }, title: _ctx.translate('UsersManager_FirstWebsitePermission'), "inline-help": _ctx.translate('UsersManager_FirstSiteInlineHelp') - }, null, 8, ["modelValue", "disabled", "title", "inline-help"])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true)]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UserEditFormvue_type_template_id_630fdb84_hoisted_9, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UserEditFormvue_type_template_id_630fdb84_hoisted_10, [_ctx.currentUserRole === 'superuser' || _ctx.isAdd ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createBlock"])(_component_SaveButton, { + }, null, 8, ["modelValue", "disabled", "title", "inline-help"])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true)]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UserEditFormvue_type_template_id_71e0c307_hoisted_9, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UserEditFormvue_type_template_id_71e0c307_hoisted_10, [_ctx.currentUserRole === 'superuser' || _ctx.isAdd ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createBlock"])(_component_SaveButton, { key: 0, style: { "position": "absolute", @@ -1700,16 +1682,16 @@ function UserEditFormvue_type_template_id_630fdb84_render(_ctx, _cache, $props, onConfirm: _cache[9] || (_cache[9] = function ($event) { return _ctx.saveUserInfo(); }) - }, null, 8, ["value", "disabled", "saving"])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true)]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UserEditFormvue_type_template_id_630fdb84_hoisted_11, [_ctx.isAdd ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", UserEditFormvue_type_template_id_630fdb84_hoisted_12, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", { + }, null, 8, ["value", "disabled", "saving"])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true)]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UserEditFormvue_type_template_id_71e0c307_hoisted_11, [_ctx.isAdd ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", UserEditFormvue_type_template_id_71e0c307_hoisted_12, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", { class: "inline-help", innerHTML: _ctx.$sanitize(_ctx.translate('UsersManager_InviteSuccessNotification', [7])) - }, null, 8, UserEditFormvue_type_template_id_630fdb84_hoisted_13)])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true)])])]), _ctx.isAdd ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", UserEditFormvue_type_template_id_630fdb84_hoisted_14, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", { + }, null, 8, UserEditFormvue_type_template_id_71e0c307_hoisted_13)])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true)])])]), _ctx.isAdd ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", UserEditFormvue_type_template_id_71e0c307_hoisted_14, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", { href: "", class: "entityCancelLink", onClick: _cache[10] || (_cache[10] = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withModifiers"])(function ($event) { return _ctx.onDoneEditing(); }, ["prevent"])) - }, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('General_Cancel')), 1)])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true)])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), !_ctx.isAdd ? Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])((Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", UserEditFormvue_type_template_id_630fdb84_hoisted_15, [!_ctx.theUser.superuser_access ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", UserEditFormvue_type_template_id_630fdb84_hoisted_16, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_UserPermissionsEdit, { + }, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('General_Cancel')), 1)])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true)])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), !_ctx.isAdd ? Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])((Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", UserEditFormvue_type_template_id_71e0c307_hoisted_15, [!_ctx.theUser.superuser_access ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", UserEditFormvue_type_template_id_71e0c307_hoisted_16, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_UserPermissionsEdit, { "user-login": _ctx.theUser.login, onUserHasAccessDetected: _cache[11] || (_cache[11] = function ($event) { return _ctx.userHasAccess = $event.hasAccess; @@ -1719,7 +1701,7 @@ function UserEditFormvue_type_template_id_630fdb84_render(_ctx, _cache, $props, }), "access-levels": _ctx.accessLevels, "filter-access-levels": _ctx.filterAccessLevels - }, null, 8, ["user-login", "access-levels", "filter-access-levels"])])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), _ctx.theUser.superuser_access ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", UserEditFormvue_type_template_id_630fdb84_hoisted_17, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_SuperUsersPermissionsNotice')), 1)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true)], 512)), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vShow"], _ctx.activeTab === 'permissions']]) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), _ctx.activeTab === 'superuser' && _ctx.currentUserRole === 'superuser' && !_ctx.isAdd ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", UserEditFormvue_type_template_id_630fdb84_hoisted_18, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("p", null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_SuperUserIntro1')), 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("p", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("strong", null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_SuperUserIntro2')), 1)]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_Field, { + }, null, 8, ["user-login", "access-levels", "filter-access-levels"])])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), _ctx.theUser.superuser_access ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", UserEditFormvue_type_template_id_71e0c307_hoisted_17, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_SuperUsersPermissionsNotice')), 1)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true)], 512)), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vShow"], _ctx.activeTab === 'permissions']]) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), _ctx.activeTab === 'superuser' && _ctx.currentUserRole === 'superuser' && !_ctx.isAdd ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", UserEditFormvue_type_template_id_71e0c307_hoisted_18, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("p", null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_SuperUserIntro1')), 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("p", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("strong", null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_SuperUserIntro2')), 1)]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_Field, { modelValue: _ctx.superUserAccessChecked, "onUpdate:modelValue": _cache[13] || (_cache[13] = function ($event) { return _ctx.superUserAccessChecked = $event; @@ -1731,7 +1713,7 @@ function UserEditFormvue_type_template_id_630fdb84_render(_ctx, _cache, $props, uicontrol: "checkbox", name: "superuser_access", title: _ctx.translate('UsersManager_HasSuperUserAccess') - }, null, 8, ["modelValue", "disabled", "title"])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UserEditFormvue_type_template_id_630fdb84_hoisted_19, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UserEditFormvue_type_template_id_630fdb84_hoisted_20, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("h2", null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_AreYouSure')), 1), _ctx.theUser.superuser_access ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("p", UserEditFormvue_type_template_id_630fdb84_hoisted_21, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_RemoveSuperuserAccessConfirm')), 1)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), !_ctx.theUser.superuser_access ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("p", UserEditFormvue_type_template_id_630fdb84_hoisted_22, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_AddSuperuserAccessConfirm')), 1)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_Field, { + }, null, 8, ["modelValue", "disabled", "title"])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UserEditFormvue_type_template_id_71e0c307_hoisted_19, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UserEditFormvue_type_template_id_71e0c307_hoisted_20, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("h2", null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_AreYouSure')), 1), _ctx.theUser.superuser_access ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("p", UserEditFormvue_type_template_id_71e0c307_hoisted_21, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_RemoveSuperuserAccessConfirm')), 1)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), !_ctx.theUser.superuser_access ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("p", UserEditFormvue_type_template_id_71e0c307_hoisted_22, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_AddSuperuserAccessConfirm')), 1)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_Field, { modelValue: _ctx.passwordConfirmationForSuperUser, "onUpdate:modelValue": _cache[15] || (_cache[15] = function ($event) { return _ctx.passwordConfirmationForSuperUser = $event; @@ -1741,7 +1723,7 @@ function UserEditFormvue_type_template_id_630fdb84_render(_ctx, _cache, $props, autocomplete: false, "full-width": true, title: _ctx.translate('UsersManager_YourCurrentPassword') - }, null, 8, ["modelValue", "title"])])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UserEditFormvue_type_template_id_630fdb84_hoisted_23, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", { + }, null, 8, ["modelValue", "title"])])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UserEditFormvue_type_template_id_71e0c307_hoisted_23, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", { href: "", class: "modal-action modal-close btn", onClick: _cache[16] || (_cache[16] = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withModifiers"])(function ($event) { @@ -1758,13 +1740,13 @@ function UserEditFormvue_type_template_id_630fdb84_render(_ctx, _cache, $props, _ctx.passwordConfirmationForSuperUser = ''; }, ["prevent"])) - }, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('General_No')), 1)])], 512)])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), _ctx.currentUserRole === 'superuser' && !_ctx.isAdd ? Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])((Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", UserEditFormvue_type_template_id_630fdb84_hoisted_24, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("p", null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_ResetTwoFactorAuthenticationInfo')), 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UserEditFormvue_type_template_id_630fdb84_hoisted_25, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_SaveButton, { + }, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('General_No')), 1)])], 512)])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), _ctx.currentUserRole === 'superuser' && !_ctx.isAdd ? Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])((Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", UserEditFormvue_type_template_id_71e0c307_hoisted_24, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("p", null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_ResetTwoFactorAuthenticationInfo')), 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UserEditFormvue_type_template_id_71e0c307_hoisted_25, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_SaveButton, { saving: _ctx.isResetting2FA, onConfirm: _cache[18] || (_cache[18] = function ($event) { return _ctx.confirmReset2FA(); }), value: _ctx.translate('UsersManager_ResetTwoFactorAuthentication') - }, null, 8, ["saving", "value"])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UserEditFormvue_type_template_id_630fdb84_hoisted_26, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UserEditFormvue_type_template_id_630fdb84_hoisted_27, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("h2", null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_AreYouSure')), 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("p", null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_ConfirmWithPassword')), 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_Field, { + }, null, 8, ["saving", "value"])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UserEditFormvue_type_template_id_71e0c307_hoisted_26, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UserEditFormvue_type_template_id_71e0c307_hoisted_27, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("h2", null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_AreYouSure')), 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("p", null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_ConfirmWithPassword')), 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_Field, { modelValue: _ctx.passwordConfirmation, "onUpdate:modelValue": _cache[19] || (_cache[19] = function ($event) { return _ctx.passwordConfirmation = $event; @@ -1774,7 +1756,7 @@ function UserEditFormvue_type_template_id_630fdb84_render(_ctx, _cache, $props, autocomplete: false, "full-width": true, title: _ctx.translate('UsersManager_YourCurrentPassword') - }, null, 8, ["modelValue", "title"])])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UserEditFormvue_type_template_id_630fdb84_hoisted_28, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", { + }, null, 8, ["modelValue", "title"])])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UserEditFormvue_type_template_id_71e0c307_hoisted_28, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", { href: "", class: "modal-action modal-close btn", onClick: _cache[20] || (_cache[20] = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withModifiers"])(function ($event) { @@ -1790,9 +1772,9 @@ function UserEditFormvue_type_template_id_630fdb84_render(_ctx, _cache, $props, $event.preventDefault(); _ctx.passwordConfirmation = ''; }) - }, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('General_No')), 1)])], 512)], 512)), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vShow"], _ctx.activeTab === '2fa']]) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true)])], 512), [[_directive_form]]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UserEditFormvue_type_template_id_630fdb84_hoisted_29, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UserEditFormvue_type_template_id_630fdb84_hoisted_30, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("h2", { + }, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('General_No')), 1)])], 512)], 512)), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vShow"], _ctx.activeTab === '2fa']]) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true)])], 512), [[_directive_form]]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UserEditFormvue_type_template_id_71e0c307_hoisted_29, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UserEditFormvue_type_template_id_71e0c307_hoisted_30, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("h2", { innerHTML: _ctx.$sanitize(_ctx.changePasswordTitle) - }, null, 8, UserEditFormvue_type_template_id_630fdb84_hoisted_31), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("p", null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_ConfirmWithPassword')), 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_Field, { + }, null, 8, UserEditFormvue_type_template_id_71e0c307_hoisted_31), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("p", null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_ConfirmWithPassword')), 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_Field, { modelValue: _ctx.passwordConfirmation, "onUpdate:modelValue": _cache[22] || (_cache[22] = function ($event) { return _ctx.passwordConfirmation = $event; @@ -1802,7 +1784,7 @@ function UserEditFormvue_type_template_id_630fdb84_render(_ctx, _cache, $props, autocomplete: false, "full-width": true, title: _ctx.translate('UsersManager_YourCurrentPassword') - }, null, 8, ["modelValue", "title"])])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UserEditFormvue_type_template_id_630fdb84_hoisted_32, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", { + }, null, 8, ["modelValue", "title"])])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UserEditFormvue_type_template_id_71e0c307_hoisted_32, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", { href: "", class: "modal-action modal-close btn", onClick: _cache[23] || (_cache[23] = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withModifiers"])(function ($event) { @@ -1820,7 +1802,7 @@ function UserEditFormvue_type_template_id_630fdb84_render(_ctx, _cache, $props, _: 1 }, 8, ["class", "content-title"]); } -// CONCATENATED MODULE: ./plugins/UsersManager/vue/src/UserEditForm/UserEditForm.vue?vue&type=template&id=630fdb84 +// CONCATENATED MODULE: ./plugins/UsersManager/vue/src/UserEditForm/UserEditForm.vue?vue&type=template&id=71e0c307 // 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/UserEditForm/UserEditForm.vue?vue&type=script&lang=ts @@ -1833,7 +1815,7 @@ var DEFAULT_USER = { uses_2fa: false, password: '', email: '', - invited_at: '' + invite_status: '' }; var UserEditFormvue_type_script_lang_ts_window = window, UserEditFormvue_type_script_lang_ts_$ = UserEditFormvue_type_script_lang_ts_window.$; @@ -1972,11 +1954,11 @@ var UserEditFormvue_type_script_lang_ts_window = window, _this3.firstSiteAccess = null; _this3.isSavingUserInfo = false; _this3.isUserModified = true; - _this3.theUser.invited_at = 'xx'; + _this3.theUser.invite_status = 'pending'; _this3.resetPasswordVar(); - _this3.showUserSavedNotification(); + _this3.showUserCreatedNotification(); }); }, resetPasswordVar: function resetPasswordVar() { @@ -2016,6 +1998,13 @@ var UserEditFormvue_type_script_lang_ts_window = window, type: 'toast' }); }, + showUserCreatedNotification: function showUserCreatedNotification() { + external_CoreHome_["NotificationsStore"].show({ + message: Object(external_CoreHome_["translate"])('UsersManager_InviteSuccess'), + context: 'success', + type: 'toast' + }); + }, reset2FA: function reset2FA() { var _this5 = this; @@ -2078,12 +2067,19 @@ var UserEditFormvue_type_script_lang_ts_window = window, saveButtonLabel: function saveButtonLabel() { return this.isAdd ? Object(external_CoreHome_["translate"])('UsersManager_InviteUser') : Object(external_CoreHome_["translate"])('UsersManager_SaveBasicInfo'); }, - isPendingUser: function isPendingUser() { - // eslint-disable-next-line eqeqeq - return this.user && (this.theUser.invited_at === '' || !this.theUser.invited_at); + isPending: function isPending() { + if (!this.user) { + return true; + } + + if (this.user.invite_status === 'pending' || Number.isInteger(this.user.invite_status)) { + return true; + } + + return false; }, isAdd: function isAdd() { - return !this.user; // purposefully checking input property not theUser state + return !this.user; }, changePasswordTitle: function changePasswordTitle() { return Object(external_CoreHome_["translate"])('UsersManager_AreYouSureChangeDetails', "".concat(this.theUser.login, "")); @@ -2096,7 +2092,7 @@ var UserEditFormvue_type_script_lang_ts_window = window, -UserEditFormvue_type_script_lang_ts.render = UserEditFormvue_type_template_id_630fdb84_render +UserEditFormvue_type_script_lang_ts.render = UserEditFormvue_type_template_id_71e0c307_render /* harmony default export */ var UserEditForm = (UserEditFormvue_type_script_lang_ts); // CONCATENATED MODULE: ./plugins/UsersManager/vue/src/UserEditForm/UserEditForm.adapter.ts @@ -2141,226 +2137,224 @@ UserEditFormvue_type_script_lang_ts.render = UserEditFormvue_type_template_id_63 directiveName: 'piwikUserEditForm', restrict: 'E' })); -// 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/PagedUsersList/PagedUsersList.vue?vue&type=template&id=2ff6c088&scoped=true - +// 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/PagedUsersList/PagedUsersList.vue?vue&type=template&id=4e2f5521 -Object(external_commonjs_vue_commonjs2_vue_root_Vue_["pushScopeId"])("data-v-2ff6c088"); - -var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_1 = { +var PagedUsersListvue_type_template_id_4e2f5521_hoisted_1 = { class: "userListFilters row" }; -var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_2 = { - class: "col s12 m12 l6" +var PagedUsersListvue_type_template_id_4e2f5521_hoisted_2 = { + class: "col s12 m12 l8" }; -var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_3 = { - class: "input-field col s12 m4 l4" +var PagedUsersListvue_type_template_id_4e2f5521_hoisted_3 = { + class: "input-field col s12 m3 l3" }; -var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_4 = { +var PagedUsersListvue_type_template_id_4e2f5521_hoisted_4 = { id: "user-list-bulk-actions", class: "dropdown-content" }; -var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_5 = { +var PagedUsersListvue_type_template_id_4e2f5521_hoisted_5 = { class: "dropdown-trigger", "data-target": "bulk-set-access" }; -var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_6 = { +var PagedUsersListvue_type_template_id_4e2f5521_hoisted_6 = { id: "bulk-set-access", class: "dropdown-content" }; -var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_7 = ["onClick"]; -var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_8 = { +var PagedUsersListvue_type_template_id_4e2f5521_hoisted_7 = ["onClick"]; +var PagedUsersListvue_type_template_id_4e2f5521_hoisted_8 = { key: 0 }; -var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_9 = { - class: "input-field col s12 m4 l4" +var PagedUsersListvue_type_template_id_4e2f5521_hoisted_9 = { + class: "input-field col s12 m3 l3" }; -var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_10 = { +var PagedUsersListvue_type_template_id_4e2f5521_hoisted_10 = { class: "permissions-for-selector" }; -var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_11 = { - class: "input-field col s12 m4 l4" +var PagedUsersListvue_type_template_id_4e2f5521_hoisted_11 = { + class: "input-field col s12 m3 l3" }; -var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_12 = { +var PagedUsersListvue_type_template_id_4e2f5521_hoisted_12 = { + class: "input-field col s12 m3 l3" +}; +var PagedUsersListvue_type_template_id_4e2f5521_hoisted_13 = { key: 0, - class: "input-field col s12 m12 l6 users-list-pagination-container" + class: "input-field col s12 m12 l4 users-list-pagination-container" }; -var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_13 = { +var PagedUsersListvue_type_template_id_4e2f5521_hoisted_14 = { class: "usersListPagination" }; -var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_14 = { +var PagedUsersListvue_type_template_id_4e2f5521_hoisted_15 = { class: "pointer" }; -var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_15 = { +var PagedUsersListvue_type_template_id_4e2f5521_hoisted_16 = { class: "counter" }; -var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_16 = { +var PagedUsersListvue_type_template_id_4e2f5521_hoisted_17 = { class: "pointer" }; -var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_17 = { +var PagedUsersListvue_type_template_id_4e2f5521_hoisted_18 = { key: 0, class: "roles-help-notification" }; -var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_18 = ["innerHTML"]; -var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_19 = { +var PagedUsersListvue_type_template_id_4e2f5521_hoisted_19 = ["innerHTML"]; +var PagedUsersListvue_type_template_id_4e2f5521_hoisted_20 = { class: "select-cell" }; -var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_20 = { +var PagedUsersListvue_type_template_id_4e2f5521_hoisted_21 = { class: "checkbox-container" }; -var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_21 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", null, null, -1); +var PagedUsersListvue_type_template_id_4e2f5521_hoisted_22 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", null, null, -1); -var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_22 = { +var PagedUsersListvue_type_template_id_4e2f5521_hoisted_23 = { class: "first" }; -var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_23 = { +var PagedUsersListvue_type_template_id_4e2f5521_hoisted_24 = { class: "role_header" }; -var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_24 = { +var PagedUsersListvue_type_template_id_4e2f5521_hoisted_25 = { style: { "margin-right": "3.5px" } }; -var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_25 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", { +var PagedUsersListvue_type_template_id_4e2f5521_hoisted_26 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", { class: "icon-help" }, null, -1); -var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_26 = [PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_25]; -var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_27 = { +var PagedUsersListvue_type_template_id_4e2f5521_hoisted_27 = [PagedUsersListvue_type_template_id_4e2f5521_hoisted_26]; +var PagedUsersListvue_type_template_id_4e2f5521_hoisted_28 = { key: 0 }; -var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_28 = ["title"]; -var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_29 = { +var PagedUsersListvue_type_template_id_4e2f5521_hoisted_29 = ["title"]; +var PagedUsersListvue_type_template_id_4e2f5521_hoisted_30 = { key: 2 }; -var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_30 = { +var PagedUsersListvue_type_template_id_4e2f5521_hoisted_31 = { class: "actions-cell-header" }; -var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_31 = { +var PagedUsersListvue_type_template_id_4e2f5521_hoisted_32 = { key: 0, class: "select-all-row" }; -var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_32 = { +var PagedUsersListvue_type_template_id_4e2f5521_hoisted_33 = { colspan: "8" }; -var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_33 = { +var PagedUsersListvue_type_template_id_4e2f5521_hoisted_34 = { key: 0 }; -var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_34 = ["innerHTML"]; -var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_35 = ["innerHTML"]; -var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_36 = { +var PagedUsersListvue_type_template_id_4e2f5521_hoisted_35 = ["innerHTML"]; +var PagedUsersListvue_type_template_id_4e2f5521_hoisted_36 = ["innerHTML"]; +var PagedUsersListvue_type_template_id_4e2f5521_hoisted_37 = { key: 1 }; -var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_37 = ["innerHTML"]; -var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_38 = ["innerHTML"]; -var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_39 = ["id"]; -var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_40 = { +var PagedUsersListvue_type_template_id_4e2f5521_hoisted_38 = ["innerHTML"]; +var PagedUsersListvue_type_template_id_4e2f5521_hoisted_39 = ["innerHTML"]; +var PagedUsersListvue_type_template_id_4e2f5521_hoisted_40 = ["id"]; +var PagedUsersListvue_type_template_id_4e2f5521_hoisted_41 = { class: "select-cell" }; -var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_41 = { +var PagedUsersListvue_type_template_id_4e2f5521_hoisted_42 = { class: "checkbox-container" }; -var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_42 = ["id", "onUpdate:modelValue"]; +var PagedUsersListvue_type_template_id_4e2f5521_hoisted_43 = ["id", "onUpdate:modelValue"]; -var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_43 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", null, null, -1); +var PagedUsersListvue_type_template_id_4e2f5521_hoisted_44 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", null, null, -1); -var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_44 = { +var PagedUsersListvue_type_template_id_4e2f5521_hoisted_45 = { id: "userLogin" }; -var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_45 = { +var PagedUsersListvue_type_template_id_4e2f5521_hoisted_46 = { class: "access-cell" }; -var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_46 = { +var PagedUsersListvue_type_template_id_4e2f5521_hoisted_47 = { key: 0, id: "email" }; -var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_47 = { +var PagedUsersListvue_type_template_id_4e2f5521_hoisted_48 = { key: 1, id: "twofa" }; -var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_48 = { +var PagedUsersListvue_type_template_id_4e2f5521_hoisted_49 = { key: 0, class: "icon-ok" }; -var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_49 = { +var PagedUsersListvue_type_template_id_4e2f5521_hoisted_50 = { key: 1, class: "icon-close" }; -var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_50 = { +var PagedUsersListvue_type_template_id_4e2f5521_hoisted_51 = { key: 2, id: "last_seen" }; -var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_51 = { +var PagedUsersListvue_type_template_id_4e2f5521_hoisted_52 = { id: "status" }; -var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_52 = { +var PagedUsersListvue_type_template_id_4e2f5521_hoisted_53 = ["title"]; +var PagedUsersListvue_type_template_id_4e2f5521_hoisted_54 = { class: "center actions-cell" }; -var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_53 = ["onClick"]; +var PagedUsersListvue_type_template_id_4e2f5521_hoisted_55 = ["onClick"]; -var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_54 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", { +var PagedUsersListvue_type_template_id_4e2f5521_hoisted_56 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", { class: "icon-email" }, null, -1); -var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_55 = [PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_54]; -var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_56 = ["onClick"]; +var PagedUsersListvue_type_template_id_4e2f5521_hoisted_57 = [PagedUsersListvue_type_template_id_4e2f5521_hoisted_56]; +var PagedUsersListvue_type_template_id_4e2f5521_hoisted_58 = ["onClick"]; -var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_57 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", { +var PagedUsersListvue_type_template_id_4e2f5521_hoisted_59 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", { class: "icon-edit" }, null, -1); -var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_58 = [PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_57]; -var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_59 = ["onClick"]; +var PagedUsersListvue_type_template_id_4e2f5521_hoisted_60 = [PagedUsersListvue_type_template_id_4e2f5521_hoisted_59]; +var PagedUsersListvue_type_template_id_4e2f5521_hoisted_61 = ["onClick"]; -var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_60 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", { +var PagedUsersListvue_type_template_id_4e2f5521_hoisted_62 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", { class: "icon-delete" }, null, -1); -var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_61 = [PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_60]; -var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_62 = { +var PagedUsersListvue_type_template_id_4e2f5521_hoisted_63 = [PagedUsersListvue_type_template_id_4e2f5521_hoisted_62]; +var _hoisted_64 = { class: "delete-user-confirm-modal modal", ref: "deleteUserConfirmModal" }; -var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_63 = { +var _hoisted_65 = { class: "modal-content" }; -var _hoisted_64 = ["innerHTML"]; -var _hoisted_65 = ["innerHTML"]; -var _hoisted_66 = { +var _hoisted_66 = ["innerHTML"]; +var _hoisted_67 = ["innerHTML"]; +var _hoisted_68 = { class: "modal-footer" }; -var _hoisted_67 = { +var _hoisted_69 = { class: "change-user-role-confirm-modal modal", ref: "changeUserRoleConfirmModal" }; -var _hoisted_68 = { +var _hoisted_70 = { class: "modal-content" }; -var _hoisted_69 = ["innerHTML"]; -var _hoisted_70 = { +var _hoisted_71 = ["innerHTML"]; +var _hoisted_72 = { key: 1 }; -var _hoisted_71 = ["innerHTML"]; -var _hoisted_72 = ["innerHTML"]; -var _hoisted_73 = { +var _hoisted_73 = ["innerHTML"]; +var _hoisted_74 = ["innerHTML"]; +var _hoisted_75 = { class: "modal-footer" }; -var _hoisted_74 = { +var _hoisted_76 = { class: "resend-invite-confirm-modal modal", ref: "resendInviteConfirmModal" }; -var _hoisted_75 = { +var _hoisted_77 = { class: "modal-content" }; -var _hoisted_76 = ["innerHTML"]; -var _hoisted_77 = { +var _hoisted_78 = ["innerHTML"]; +var _hoisted_79 = { class: "modal-footer" }; - -Object(external_commonjs_vue_commonjs2_vue_root_Vue_["popScopeId"])(); - -function PagedUsersListvue_type_template_id_2ff6c088_scoped_true_render(_ctx, _cache, $props, $setup, $data, $options) { +function PagedUsersListvue_type_template_id_4e2f5521_render(_ctx, _cache, $props, $setup, $data, $options) { var _component_Field = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["resolveComponent"])("Field"); var _component_ActivityIndicator = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["resolveComponent"])("ActivityIndicator"); @@ -2377,13 +2371,13 @@ function PagedUsersListvue_type_template_id_2ff6c088_scoped_true_render(_ctx, _c class: Object(external_commonjs_vue_commonjs2_vue_root_Vue_["normalizeClass"])(["pagedUsersList", { loading: _ctx.isLoadingUsers }]) - }, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_1, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_2, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_3, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", { + }, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", PagedUsersListvue_type_template_id_4e2f5521_hoisted_1, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", PagedUsersListvue_type_template_id_4e2f5521_hoisted_2, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", PagedUsersListvue_type_template_id_4e2f5521_hoisted_3, [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 bulk-actions", { disabled: _ctx.isBulkActionsDisabled }]), href: "", "data-target": "user-list-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]]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("ul", PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_4, [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", PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_5, [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]]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("ul", PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_6, [(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.bulkActionAccessLevels, function (access) { + }, [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]]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("ul", PagedUsersListvue_type_template_id_4e2f5521_hoisted_4, [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", PagedUsersListvue_type_template_id_4e2f5521_hoisted_5, [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]]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("ul", PagedUsersListvue_type_template_id_4e2f5521_hoisted_6, [(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.bulkActionAccessLevels, 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", { @@ -2394,7 +2388,7 @@ function PagedUsersListvue_type_template_id_2ff6c088_scoped_true_render(_ctx, _c _ctx.showAccessChangeConfirm(); }, ["prevent"]) - }, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(access.value), 9, PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_7)]); + }, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(access.value), 9, PagedUsersListvue_type_template_id_4e2f5521_hoisted_7)]); }), 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[0] || (_cache[0] = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withModifiers"])(function ($event) { @@ -2403,12 +2397,12 @@ function PagedUsersListvue_type_template_id_2ff6c088_scoped_true_render(_ctx, _c _ctx.showAccessChangeConfirm(); }, ["prevent"])) - }, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_RemovePermissions')), 1)]), _ctx.currentUserRole === 'superuser' ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("li", PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_8, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", { + }, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_RemovePermissions')), 1)]), _ctx.currentUserRole === 'superuser' ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("li", PagedUsersListvue_type_template_id_4e2f5521_hoisted_8, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", { href: "", onClick: _cache[1] || (_cache[1] = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withModifiers"])(function ($event) { return _ctx.showDeleteConfirm(); }, ["prevent"])) - }, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_DeleteUsers')), 1)])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true)])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_9, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_10, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_Field, { + }, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_DeleteUsers')), 1)])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true)])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", PagedUsersListvue_type_template_id_4e2f5521_hoisted_9, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", PagedUsersListvue_type_template_id_4e2f5521_hoisted_10, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_Field, { "model-value": _ctx.userTextFilter, "onUpdate:modelValue": _cache[2] || (_cache[2] = function ($event) { return _ctx.onUserTextFilterChange($event); @@ -2417,7 +2411,7 @@ function PagedUsersListvue_type_template_id_2ff6c088_scoped_true_render(_ctx, _c uicontrol: "text", "full-width": true, placeholder: _ctx.translate('UsersManager_UserSearch') - }, null, 8, ["model-value", "placeholder"])])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_11, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_Field, { + }, null, 8, ["model-value", "placeholder"])])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", PagedUsersListvue_type_template_id_4e2f5521_hoisted_11, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_Field, { "model-value": _ctx.accessLevelFilter, "onUpdate:modelValue": _cache[3] || (_cache[3] = function ($event) { _ctx.accessLevelFilter = $event; @@ -2432,14 +2426,29 @@ function PagedUsersListvue_type_template_id_2ff6c088_scoped_true_render(_ctx, _c options: _ctx.filterAccessLevels, "full-width": true, placeholder: _ctx.translate('UsersManager_FilterByAccess') - }, null, 8, ["model-value", "options", "placeholder"])])])]), _ctx.totalEntries > _ctx.searchParams.limit ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_12, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_13, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", { + }, null, 8, ["model-value", "options", "placeholder"])])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", PagedUsersListvue_type_template_id_4e2f5521_hoisted_12, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_Field, { + "model-value": _ctx.statusLevelFilter, + "onUpdate:modelValue": _cache[4] || (_cache[4] = function ($event) { + _ctx.statusLevelFilter = $event; + + _ctx.changeSearch({ + filter_status: _ctx.statusLevelFilter, + offset: 0 + }); + }), + name: "status-level-filter", + uicontrol: "select", + options: _ctx.filterStatusLevels, + "full-width": true, + placeholder: _ctx.translate('UsersManager_FilterByStatus') + }, null, 8, ["model-value", "options", "placeholder"])])])]), _ctx.totalEntries > _ctx.searchParams.limit ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", PagedUsersListvue_type_template_id_4e2f5521_hoisted_13, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", PagedUsersListvue_type_template_id_4e2f5521_hoisted_14, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", { class: Object(external_commonjs_vue_commonjs2_vue_root_Vue_["normalizeClass"])(["btn prev", { disabled: _ctx.searchParams.offset <= 0 }]), - onClick: _cache[4] || (_cache[4] = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withModifiers"])(function ($event) { + onClick: _cache[5] || (_cache[5] = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withModifiers"])(function ($event) { return _ctx.gotoPreviousPage(); }, ["prevent"])) - }, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_14, "« " + Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('General_Previous')), 1)], 2), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_15, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", { + }, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", PagedUsersListvue_type_template_id_4e2f5521_hoisted_15, "« " + Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('General_Previous')), 1)], 2), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", PagedUsersListvue_type_template_id_4e2f5521_hoisted_16, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", { class: Object(external_commonjs_vue_commonjs2_vue_root_Vue_["normalizeClass"])({ visibility: _ctx.isLoadingUsers ? 'hidden' : 'visible' }) @@ -2449,10 +2458,10 @@ function PagedUsersListvue_type_template_id_2ff6c088_scoped_true_render(_ctx, _c class: Object(external_commonjs_vue_commonjs2_vue_root_Vue_["normalizeClass"])(["btn next", { disabled: _ctx.searchParams.offset + _ctx.searchParams.limit >= _ctx.totalEntries }]), - onClick: _cache[5] || (_cache[5] = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withModifiers"])(function ($event) { + onClick: _cache[6] || (_cache[6] = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withModifiers"])(function ($event) { return _ctx.gotoNextPage(); }, ["prevent"])) - }, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_16, 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)]), _ctx.isRoleHelpToggled ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_17, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_Notification, { + }, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", PagedUsersListvue_type_template_id_4e2f5521_hoisted_17, 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)]), _ctx.isRoleHelpToggled ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", PagedUsersListvue_type_template_id_4e2f5521_hoisted_18, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_Notification, { context: "info", type: "persistent", noclear: true @@ -2460,7 +2469,7 @@ function PagedUsersListvue_type_template_id_2ff6c088_scoped_true_render(_ctx, _c 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, PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_18)]; + }, null, 8, PagedUsersListvue_type_template_id_4e2f5521_hoisted_19)]; }), _: 1 })])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_ContentBlock, null, { @@ -2470,75 +2479,75 @@ function PagedUsersListvue_type_template_id_2ff6c088_scoped_true_render(_ctx, _c class: Object(external_commonjs_vue_commonjs2_vue_root_Vue_["normalizeClass"])({ loading: _ctx.isLoadingUsers }) - }, [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", PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_19, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_20, [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", { + }, [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", PagedUsersListvue_type_template_id_4e2f5521_hoisted_20, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", PagedUsersListvue_type_template_id_4e2f5521_hoisted_21, [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: "paged_users_select_all", checked: "checked", - "onUpdate:modelValue": _cache[6] || (_cache[6] = function ($event) { + "onUpdate:modelValue": _cache[7] || (_cache[7] = function ($event) { return _ctx.isAllCheckboxSelected = $event; }), - onChange: _cache[7] || (_cache[7] = function ($event) { + onChange: _cache[8] || (_cache[8] = function ($event) { return _ctx.onAllCheckboxChange(); }) - }, null, 544), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vModelCheckbox"], _ctx.isAllCheckboxSelected]]), PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_21])])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("th", PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_22, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_Username')), 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("th", PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_23, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_24, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_RoleFor')), 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", { + }, null, 544), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vModelCheckbox"], _ctx.isAllCheckboxSelected]]), PagedUsersListvue_type_template_id_4e2f5521_hoisted_22])])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("th", PagedUsersListvue_type_template_id_4e2f5521_hoisted_23, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_Username')), 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("th", PagedUsersListvue_type_template_id_4e2f5521_hoisted_24, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", PagedUsersListvue_type_template_id_4e2f5521_hoisted_25, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_RoleFor')), 1), 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[8] || (_cache[8] = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withModifiers"])(function ($event) { + onClick: _cache[9] || (_cache[9] = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withModifiers"])(function ($event) { return _ctx.isRoleHelpToggled = !_ctx.isRoleHelpToggled; }, ["prevent"])) - }, PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_26, 2), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_Field, { + }, PagedUsersListvue_type_template_id_4e2f5521_hoisted_27, 2), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_Field, { class: "permissions-for-selector", "model-value": _ctx.permissionsForSite, - "onUpdate:modelValue": _cache[9] || (_cache[9] = function ($event) { + "onUpdate:modelValue": _cache[10] || (_cache[10] = function ($event) { _ctx.onPermissionsForUpdate($event); }), uicontrol: "site", "ui-control-attributes": { onlySitesWithAdminAccess: _ctx.currentUserRole !== 'superuser' } - }, null, 8, ["model-value", "ui-control-attributes"])])]), _ctx.currentUserRole === 'superuser' ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("th", PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_27, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_Email')), 1)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), _ctx.currentUserRole === 'superuser' ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("th", { + }, null, 8, ["model-value", "ui-control-attributes"])])]), _ctx.currentUserRole === 'superuser' ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("th", PagedUsersListvue_type_template_id_4e2f5521_hoisted_28, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_Email')), 1)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), _ctx.currentUserRole === 'superuser' ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("th", { key: 1, title: _ctx.translate('UsersManager_UsesTwoFactorAuthentication') - }, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_2FA')), 9, PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_28)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), _ctx.currentUserRole === 'superuser' ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("th", PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_29, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_LastSeen')), 1)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("th", null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_Status')), 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("th", PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_30, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('General_Actions')), 1)])])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("tbody", null, [_ctx.isAllCheckboxSelected && _ctx.users.length && _ctx.users.length < _ctx.totalEntries ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("tr", PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_31, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("td", PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_32, [!_ctx.areAllResultsSelected ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_33, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", { + }, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_2FA')), 9, PagedUsersListvue_type_template_id_4e2f5521_hoisted_29)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), _ctx.currentUserRole === 'superuser' ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("th", PagedUsersListvue_type_template_id_4e2f5521_hoisted_30, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_LastSeen')), 1)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("th", null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_Status')), 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("th", PagedUsersListvue_type_template_id_4e2f5521_hoisted_31, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('General_Actions')), 1)])])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("tbody", null, [_ctx.isAllCheckboxSelected && _ctx.users.length && _ctx.users.length < _ctx.totalEntries ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("tr", PagedUsersListvue_type_template_id_4e2f5521_hoisted_32, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("td", PagedUsersListvue_type_template_id_4e2f5521_hoisted_33, [!_ctx.areAllResultsSelected ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", PagedUsersListvue_type_template_id_4e2f5521_hoisted_34, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", { innerHTML: _ctx.$sanitize(_ctx.translate('UsersManager_TheDisplayedUsersAreSelected', "".concat(_ctx.users.length, ""))), style: { "margin-right": "3.5px" } - }, null, 8, PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_34), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", { + }, null, 8, PagedUsersListvue_type_template_id_4e2f5521_hoisted_35), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", { class: "toggle-select-all-in-search", href: "#", - onClick: _cache[10] || (_cache[10] = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withModifiers"])(function ($event) { + 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.translate('UsersManager_ClickToSelectAll', "".concat(_ctx.totalEntries, ""))) - }, null, 8, PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_35)])) : 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", PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_36, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", { + }, null, 8, PagedUsersListvue_type_template_id_4e2f5521_hoisted_36)])) : 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", PagedUsersListvue_type_template_id_4e2f5521_hoisted_37, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", { innerHTML: _ctx.$sanitize(_ctx.translate('UsersManager_AllUsersAreSelected', "".concat(_ctx.totalEntries, ""))), style: { "margin-right": "3.5px" } - }, null, 8, PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_37), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", { + }, null, 8, PagedUsersListvue_type_template_id_4e2f5521_hoisted_38), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", { class: "toggle-select-all-in-search", href: "#", - onClick: _cache[11] || (_cache[11] = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withModifiers"])(function ($event) { + 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.translate('UsersManager_ClickToSelectDisplayedUsers', "".concat(_ctx.users.length, ""))) - }, null, 8, PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_38)])) : 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.users, function (user, index) { + }, null, 8, PagedUsersListvue_type_template_id_4e2f5521_hoisted_39)])) : 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.users, function (user, index) { return Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("tr", { id: "row".concat(index), key: user.login - }, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("td", PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_40, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_41, [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", { + }, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("td", PagedUsersListvue_type_template_id_4e2f5521_hoisted_41, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", PagedUsersListvue_type_template_id_4e2f5521_hoisted_42, [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: "paged_users_select_row".concat(index), "onUpdate:modelValue": function onUpdateModelValue($event) { return _ctx.selectedRows[index] = $event; }, - onClick: _cache[12] || (_cache[12] = function ($event) { + onClick: _cache[13] || (_cache[13] = function ($event) { return _ctx.onRowSelected(); }) - }, null, 8, PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_42), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vModelCheckbox"], _ctx.selectedRows[index]]]), PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_43])])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("td", PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_44, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(user.login), 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("td", PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_45, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_Field, { + }, null, 8, PagedUsersListvue_type_template_id_4e2f5521_hoisted_43), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vModelCheckbox"], _ctx.selectedRows[index]]]), PagedUsersListvue_type_template_id_4e2f5521_hoisted_44])])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("td", PagedUsersListvue_type_template_id_4e2f5521_hoisted_45, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(user.login), 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("td", PagedUsersListvue_type_template_id_4e2f5521_hoisted_46, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_Field, { "model-value": user.role, "onUpdate:modelValue": function onUpdateModelValue($event) { _ctx.userToChange = user; @@ -2549,9 +2558,10 @@ function PagedUsersListvue_type_template_id_2ff6c088_scoped_true_render(_ctx, _c disabled: user.role === 'superuser', uicontrol: "select", options: user.login !== 'anonymous' ? _ctx.accessLevels : _ctx.anonymousAccessLevels - }, null, 8, ["model-value", "onUpdate:modelValue", "disabled", "options"])])]), _ctx.currentUserRole === 'superuser' ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("td", PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_46, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(user.email), 1)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), _ctx.currentUserRole === 'superuser' ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("td", PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_47, [user.uses_2fa ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("span", PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_48)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), !user.uses_2fa ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("span", PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_49)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true)])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), _ctx.currentUserRole === 'superuser' ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("td", PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_50, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(user.last_seen ? "".concat(user.last_seen, " ago") : '-'), 1)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("td", PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_51, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", { - class: Object(external_commonjs_vue_commonjs2_vue_root_Vue_["normalizeClass"])(user.invite_status) - }, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.getInviteStatus(user.invite_status)), 3)]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("td", PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_52, [user.invite_status !== 'accept' ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("button", { + }, null, 8, ["model-value", "onUpdate:modelValue", "disabled", "options"])])]), _ctx.currentUserRole === 'superuser' ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("td", PagedUsersListvue_type_template_id_4e2f5521_hoisted_47, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(user.email), 1)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), _ctx.currentUserRole === 'superuser' ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("td", PagedUsersListvue_type_template_id_4e2f5521_hoisted_48, [user.uses_2fa ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("span", PagedUsersListvue_type_template_id_4e2f5521_hoisted_49)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), !user.uses_2fa ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("span", PagedUsersListvue_type_template_id_4e2f5521_hoisted_50)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true)])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), _ctx.currentUserRole === 'superuser' ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("td", PagedUsersListvue_type_template_id_4e2f5521_hoisted_51, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(user.last_seen ? "".concat(user.last_seen, " ago") : '-'), 1)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("td", PagedUsersListvue_type_template_id_4e2f5521_hoisted_52, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", { + class: Object(external_commonjs_vue_commonjs2_vue_root_Vue_["normalizeClass"])(Number.isInteger(user.invite_status) ? 'pending' : user.invite_status), + title: user.invite_status === 'expired' ? _ctx.translate('UsersManager_ExpiredInviteAutomaticallyRemoved', '3') : '' + }, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.getInviteStatus(user.invite_status)), 11, PagedUsersListvue_type_template_id_4e2f5521_hoisted_53)]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("td", PagedUsersListvue_type_template_id_4e2f5521_hoisted_54, [(_ctx.currentUserRole === 'superuser' || _ctx.currentUserRole === 'admin' && user.invited_by === _ctx.currentUserLogin) && user.invite_status !== 'active' ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("button", { key: 0, class: "resend table-action", title: "Resend Invite", @@ -2560,7 +2570,7 @@ function PagedUsersListvue_type_template_id_2ff6c088_scoped_true_render(_ctx, _c _ctx.showResendConfirm(); } - }, PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_55, 8, PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_53)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), user.login !== 'anonymous' ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("button", { + }, PagedUsersListvue_type_template_id_4e2f5521_hoisted_57, 8, PagedUsersListvue_type_template_id_4e2f5521_hoisted_55)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), user.login !== 'anonymous' ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("button", { key: 1, class: "edituser table-action", title: "Edit", @@ -2569,7 +2579,7 @@ function PagedUsersListvue_type_template_id_2ff6c088_scoped_true_render(_ctx, _c user: user }); } - }, PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_58, 8, PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_56)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), _ctx.currentUserRole === 'superuser' && user.login !== 'anonymous' ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("button", { + }, PagedUsersListvue_type_template_id_4e2f5521_hoisted_60, 8, PagedUsersListvue_type_template_id_4e2f5521_hoisted_58)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), (_ctx.currentUserRole === 'superuser' || _ctx.currentUserRole === 'admin' && user.invited_by === _ctx.currentUserLogin) && user.login !== 'anonymous' ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("button", { key: 2, class: "deleteuser table-action", title: "Delete", @@ -2578,20 +2588,20 @@ function PagedUsersListvue_type_template_id_2ff6c088_scoped_true_render(_ctx, _c _ctx.showDeleteConfirm(); } - }, PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_61, 8, PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_59)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true)])], 8, PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_39); + }, PagedUsersListvue_type_template_id_4e2f5521_hoisted_63, 8, PagedUsersListvue_type_template_id_4e2f5521_hoisted_61)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true)])], 8, PagedUsersListvue_type_template_id_4e2f5521_hoisted_40); }), 128))])], 2), [[_directive_content_table]])]; }), _: 1 - }), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_62, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_63, [_ctx.userToChange ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("h3", { + }), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_64, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_65, [_ctx.userToChange ? (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.translate('UsersManager_DeleteUserConfirmSingle', "".concat(_ctx.userToChange.login, ""))) - }, null, 8, _hoisted_64)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), !_ctx.userToChange ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("p", { + }, null, 8, _hoisted_66)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), !_ctx.userToChange ? (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.translate('UsersManager_DeleteUserConfirmMultiple', "".concat(_ctx.affectedUsersCount, ""))) - }, null, 8, _hoisted_65)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true)]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_66, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", { + }, null, 8, _hoisted_67)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true)]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_68, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", { href: "", class: "modal-action modal-close btn", - onClick: _cache[13] || (_cache[13] = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withModifiers"])(function ($event) { + onClick: _cache[14] || (_cache[14] = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withModifiers"])(function ($event) { return _ctx.deleteRequestedUsers(); }, ["prevent"])), style: { @@ -2600,22 +2610,22 @@ function PagedUsersListvue_type_template_id_2ff6c088_scoped_true_render(_ctx, _c }, 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[14] || (_cache[14] = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withModifiers"])(function ($event) { + onClick: _cache[15] || (_cache[15] = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withModifiers"])(function ($event) { _ctx.userToChange = 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_67, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_68, [_ctx.userToChange ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("h3", { + }, 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_69, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_70, [_ctx.userToChange ? (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.deleteUserPermConfirmSingleText) - }, null, 8, _hoisted_69)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), _ctx.userToChange && _ctx.userToChange.login === 'anonymous' && _ctx.roleToChangeTo === 'view' ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("h3", _hoisted_70, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("em", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createTextVNode"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('General_Note')) + ": ", 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", { + }, null, 8, _hoisted_71)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), _ctx.userToChange && _ctx.userToChange.login === 'anonymous' && _ctx.roleToChangeTo === 'view' ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("h3", _hoisted_72, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("em", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createTextVNode"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('General_Note')) + ": ", 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", { innerHTML: _ctx.$sanitize(_ctx.translate('UsersManager_AnonymousUserRoleChangeWarning', 'anonymous', _ctx.getRoleDisplay(_ctx.roleToChangeTo))) - }, null, 8, _hoisted_71)])])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), !_ctx.userToChange ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("p", { + }, null, 8, _hoisted_73)])])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), !_ctx.userToChange ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("p", { key: 2, innerHTML: _ctx.$sanitize(_ctx.deleteUserPermConfirmMultipleText) - }, null, 8, _hoisted_72)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true)]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_73, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", { + }, null, 8, _hoisted_74)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true)]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_75, [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) { + onClick: _cache[16] || (_cache[16] = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withModifiers"])(function ($event) { return _ctx.changeUserRole(); }, ["prevent"])), style: { @@ -2624,17 +2634,17 @@ function PagedUsersListvue_type_template_id_2ff6c088_scoped_true_render(_ctx, _c }, 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) { + onClick: _cache[17] || (_cache[17] = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withModifiers"])(function ($event) { _ctx.userToChange = 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_74, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_75, [_ctx.userToChange ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("h3", { + }, 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_76, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_77, [_ctx.userToChange ? (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.translate('UsersManager_ResendInviteConfirmSingle', "".concat(_ctx.userToChange.login, ""))) - }, null, 8, _hoisted_76)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true)]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_77, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", { + }, null, 8, _hoisted_78)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true)]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_79, [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) { + onClick: _cache[18] || (_cache[18] = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withModifiers"])(function ($event) { return _ctx.resendRequestedUser(); }, ["prevent"])), style: { @@ -2643,13 +2653,13 @@ function PagedUsersListvue_type_template_id_2ff6c088_scoped_true_render(_ctx, _c }, 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) { + onClick: _cache[19] || (_cache[19] = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withModifiers"])(function ($event) { _ctx.userToChange = null; _ctx.roleToChangeTo = null; }, ["prevent"])) }, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('General_No')), 1)])], 512)], 2); } -// CONCATENATED MODULE: ./plugins/UsersManager/vue/src/PagedUsersList/PagedUsersList.vue?vue&type=template&id=2ff6c088&scoped=true +// CONCATENATED MODULE: ./plugins/UsersManager/vue/src/PagedUsersList/PagedUsersList.vue?vue&type=template&id=4e2f5521 // 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/PagedUsersList/PagedUsersList.vue?vue&type=script&lang=ts @@ -2677,6 +2687,10 @@ var PagedUsersListvue_type_script_lang_ts_window = window, type: Array, required: true }, + filterStatusLevels: { + type: Array, + required: true + }, totalEntries: Number, users: { type: Array, @@ -2706,6 +2720,7 @@ var PagedUsersListvue_type_script_lang_ts_window = window, userToChange: null, roleToChangeTo: null, accessLevelFilter: null, + statusLevelFilter: null, isRoleHelpToggled: false, userTextFilter: '', permissionsForSite: { @@ -2725,19 +2740,15 @@ var PagedUsersListvue_type_script_lang_ts_window = window, }, methods: { getInviteStatus: function getInviteStatus(inviteStatus) { - if (inviteStatus === 'accept') { - return Object(external_CoreHome_["translate"])('UsersManager_Active'); - } - - if (inviteStatus === 'pending') { - return Object(external_CoreHome_["translate"])('UsersManager_Pending'); + if (Number.isInteger(inviteStatus)) { + return Object(external_CoreHome_["translate"])('UsersManager_InviteDayLeft', inviteStatus); } if (inviteStatus === 'expired') { return Object(external_CoreHome_["translate"])('UsersManager_Expired'); } - return Object(external_CoreHome_["translate"])('UsersManager_Decline'); + return Object(external_CoreHome_["translate"])('UsersManager_Active'); }, onPermissionsForUpdate: function onPermissionsForUpdate(site) { this.permissionsForSite = site; @@ -2844,6 +2855,9 @@ var PagedUsersListvue_type_script_lang_ts_window = window, } }, computed: { + currentUserLogin: function currentUserLogin() { + return external_CoreHome_["Matomo"].userLogin; + }, paginationLowerBound: function paginationLowerBound() { return this.searchParams.offset + 1; }, @@ -2928,17 +2942,11 @@ var PagedUsersListvue_type_script_lang_ts_window = window, })); // CONCATENATED MODULE: ./plugins/UsersManager/vue/src/PagedUsersList/PagedUsersList.vue?vue&type=script&lang=ts -// EXTERNAL MODULE: ./plugins/UsersManager/vue/src/PagedUsersList/PagedUsersList.vue?vue&type=style&index=0&id=2ff6c088&scoped=true&lang=css -var PagedUsersListvue_type_style_index_0_id_2ff6c088_scoped_true_lang_css = __webpack_require__("f2d6"); - // CONCATENATED MODULE: ./plugins/UsersManager/vue/src/PagedUsersList/PagedUsersList.vue - - -PagedUsersListvue_type_script_lang_ts.render = PagedUsersListvue_type_template_id_2ff6c088_scoped_true_render -PagedUsersListvue_type_script_lang_ts.__scopeId = "data-v-2ff6c088" +PagedUsersListvue_type_script_lang_ts.render = PagedUsersListvue_type_template_id_4e2f5521_render /* harmony default export */ var PagedUsersList = (PagedUsersListvue_type_script_lang_ts); // CONCATENATED MODULE: ./plugins/UsersManager/vue/src/PagedUsersList/PagedUsersList.adapter.ts @@ -3004,47 +3012,47 @@ PagedUsersListvue_type_script_lang_ts.__scopeId = "data-v-2ff6c088" directiveName: 'piwikPagedUsersList', restrict: 'E' })); -// 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/UsersManager/UsersManager.vue?vue&type=template&id=621f5797 +// 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/UsersManager/UsersManager.vue?vue&type=template&id=4688a5a2 -var UsersManagervue_type_template_id_621f5797_hoisted_1 = { +var UsersManagervue_type_template_id_4688a5a2_hoisted_1 = { class: "usersManager" }; -var UsersManagervue_type_template_id_621f5797_hoisted_2 = { +var UsersManagervue_type_template_id_4688a5a2_hoisted_2 = { key: 0 }; -var UsersManagervue_type_template_id_621f5797_hoisted_3 = { +var UsersManagervue_type_template_id_4688a5a2_hoisted_3 = { key: 1 }; -var UsersManagervue_type_template_id_621f5797_hoisted_4 = { +var UsersManagervue_type_template_id_4688a5a2_hoisted_4 = { class: "row add-user-container" }; -var UsersManagervue_type_template_id_621f5797_hoisted_5 = { +var UsersManagervue_type_template_id_4688a5a2_hoisted_5 = { class: "col s12" }; -var UsersManagervue_type_template_id_621f5797_hoisted_6 = { +var UsersManagervue_type_template_id_4688a5a2_hoisted_6 = { class: "input-field", style: { "margin-right": "3.5px" } }; -var UsersManagervue_type_template_id_621f5797_hoisted_7 = { +var UsersManagervue_type_template_id_4688a5a2_hoisted_7 = { key: 0, class: "input-field" }; -var UsersManagervue_type_template_id_621f5797_hoisted_8 = { +var UsersManagervue_type_template_id_4688a5a2_hoisted_8 = { key: 0 }; -var UsersManagervue_type_template_id_621f5797_hoisted_9 = { +var UsersManagervue_type_template_id_4688a5a2_hoisted_9 = { class: "add-existing-user-modal modal", ref: "addExistingUserModal" }; -var UsersManagervue_type_template_id_621f5797_hoisted_10 = { +var UsersManagervue_type_template_id_4688a5a2_hoisted_10 = { class: "modal-content" }; -var UsersManagervue_type_template_id_621f5797_hoisted_11 = { +var UsersManagervue_type_template_id_4688a5a2_hoisted_11 = { class: "modal-footer" }; -function UsersManagervue_type_template_id_621f5797_render(_ctx, _cache, $props, $setup, $data, $options) { +function UsersManagervue_type_template_id_4688a5a2_render(_ctx, _cache, $props, $setup, $data, $options) { var _component_EnrichedHeadline = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["resolveComponent"])("EnrichedHeadline"); var _component_PagedUsersList = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["resolveComponent"])("PagedUsersList"); @@ -3057,7 +3065,7 @@ function UsersManagervue_type_template_id_621f5797_render(_ctx, _cache, $props, var _directive_tooltips = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["resolveDirective"])("tooltips"); - return Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])((Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", UsersManagervue_type_template_id_621f5797_hoisted_1, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("h2", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_EnrichedHeadline, { + return Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])((Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", UsersManagervue_type_template_id_4688a5a2_hoisted_1, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("h2", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_EnrichedHeadline, { "help-url": "https://matomo.org/docs/manage-users/", "feature-name": "Users Management" }, { @@ -3065,12 +3073,12 @@ function UsersManagervue_type_template_id_621f5797_render(_ctx, _cache, $props, return [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createTextVNode"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_ManageUsers')), 1)]; }), _: 1 - })]), _ctx.currentUserRole === 'superuser' ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("p", UsersManagervue_type_template_id_621f5797_hoisted_2, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_ManageUsersDesc')), 1)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), _ctx.currentUserRole === 'admin' ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("p", UsersManagervue_type_template_id_621f5797_hoisted_3, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_ManageUsersAdminDesc')), 1)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UsersManagervue_type_template_id_621f5797_hoisted_4, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UsersManagervue_type_template_id_621f5797_hoisted_5, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UsersManagervue_type_template_id_621f5797_hoisted_6, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", { + })]), _ctx.currentUserRole === 'superuser' ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("p", UsersManagervue_type_template_id_4688a5a2_hoisted_2, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_ManageUsersDesc')), 1)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), _ctx.currentUserRole === 'admin' ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("p", UsersManagervue_type_template_id_4688a5a2_hoisted_3, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_ManageUsersAdminDesc')), 1)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UsersManagervue_type_template_id_4688a5a2_hoisted_4, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UsersManagervue_type_template_id_4688a5a2_hoisted_5, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UsersManagervue_type_template_id_4688a5a2_hoisted_6, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", { class: "btn add-new-user", onClick: _cache[0] || (_cache[0] = function ($event) { return _ctx.onAddNewUser(); }) - }, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_InviteNewUser')), 1)]), _ctx.currentUserRole !== 'superuser' ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", UsersManagervue_type_template_id_621f5797_hoisted_7, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", { + }, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_InviteNewUser')), 1)]), _ctx.currentUserRole !== 'superuser' ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", UsersManagervue_type_template_id_4688a5a2_hoisted_7, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", { class: "btn add-existing-user", onClick: _cache[1] || (_cache[1] = function ($event) { return _ctx.showAddExistingUserModal(); @@ -3099,10 +3107,11 @@ function UsersManagervue_type_template_id_621f5797_render(_ctx, _cache, $props, "current-user-role": _ctx.currentUserRole, "access-levels": _ctx.accessLevels, "filter-access-levels": _ctx.actualFilterAccessLevels, + "filter-status-levels": _ctx.filterStatusLevels, "search-params": _ctx.searchParams, users: _ctx.users, "total-entries": _ctx.totalEntries - }, null, 8, ["initial-site-id", "initial-site-name", "is-loading-users", "current-user-role", "access-levels", "filter-access-levels", "search-params", "users", "total-entries"])], 512), [[_directive_content_intro]])], 512), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vShow"], !_ctx.isEditing]]), _ctx.isEditing ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", UsersManagervue_type_template_id_621f5797_hoisted_8, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_UserEditForm, { + }, null, 8, ["initial-site-id", "initial-site-name", "is-loading-users", "current-user-role", "access-levels", "filter-access-levels", "filter-status-levels", "search-params", "users", "total-entries"])], 512), [[_directive_content_intro]])], 512), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vShow"], !_ctx.isEditing]]), _ctx.isEditing ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", UsersManagervue_type_template_id_4688a5a2_hoisted_8, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_UserEditForm, { onDone: _cache[7] || (_cache[7] = function ($event) { return _ctx.onDoneEditing($event.isUserModified); }), @@ -3115,14 +3124,14 @@ function UsersManagervue_type_template_id_621f5797_render(_ctx, _cache, $props, onUpdated: _cache[8] || (_cache[8] = function ($event) { return _ctx.userBeingEdited = $event.user; }) - }, null, 8, ["user", "current-user-role", "access-levels", "filter-access-levels", "initial-site-id", "initial-site-name"])])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UsersManagervue_type_template_id_621f5797_hoisted_9, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UsersManagervue_type_template_id_621f5797_hoisted_10, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("h3", null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_AddExistingUser')), 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("p", null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_EnterUsernameOrEmail')) + ":", 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_Field, { + }, null, 8, ["user", "current-user-role", "access-levels", "filter-access-levels", "initial-site-id", "initial-site-name"])])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UsersManagervue_type_template_id_4688a5a2_hoisted_9, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UsersManagervue_type_template_id_4688a5a2_hoisted_10, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("h3", null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_AddExistingUser')), 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("p", null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_EnterUsernameOrEmail')) + ":", 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_Field, { modelValue: _ctx.addNewUserLoginEmail, "onUpdate:modelValue": _cache[9] || (_cache[9] = function ($event) { return _ctx.addNewUserLoginEmail = $event; }), name: "add-existing-user-email", uicontrol: "text" - }, null, 8, ["modelValue"])])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UsersManagervue_type_template_id_621f5797_hoisted_11, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", { + }, null, 8, ["modelValue"])])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UsersManagervue_type_template_id_4688a5a2_hoisted_11, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", { href: "", class: "modal-action modal-close btn", onClick: _cache[10] || (_cache[10] = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withModifiers"])(function ($event) { @@ -3139,7 +3148,7 @@ function UsersManagervue_type_template_id_621f5797_render(_ctx, _cache, $props, }, ["prevent"])) }, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('General_Cancel')), 1)])], 512)], 512)), [[_directive_tooltips]]); } -// CONCATENATED MODULE: ./plugins/UsersManager/vue/src/UsersManager/UsersManager.vue?vue&type=template&id=621f5797 +// CONCATENATED MODULE: ./plugins/UsersManager/vue/src/UsersManager/UsersManager.vue?vue&type=template&id=4688a5a2 // 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/UsersManager/UsersManager.vue?vue&type=script&lang=ts function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } @@ -3184,6 +3193,10 @@ var UsersManagervue_type_script_lang_ts_window = window, filterAccessLevels: { type: Array, required: true + }, + filterStatusLevels: { + type: Array, + required: true } }, components: { @@ -3207,6 +3220,7 @@ var UsersManagervue_type_script_lang_ts_window = window, limit: NUM_USERS_PER_PAGE, filter_search: '', filter_access: '', + filter_status: '', idSite: this.initialSiteId }, isLoadingUsers: false, @@ -3280,6 +3294,7 @@ var UsersManagervue_type_script_lang_ts_window = window, method: 'UsersManager.getUsersPlusRole', filter_search: this.searchParams.filter_search, filter_access: this.searchParams.filter_access, + filter_status: this.searchParams.filter_status, idSite: this.searchParams.idSite, filter_limit: '-1' }); @@ -3314,16 +3329,25 @@ var UsersManagervue_type_script_lang_ts_window = window, }); }, onResendInvite: function onResendInvite(user) { - console.log(user); + var _this3 = this; + external_CoreHome_["AjaxHelper"].fetch({ method: 'UsersManager.resendInvite', userLogin: user.login - }).then(function (res) { - console.log(res); + }).then(function () { + _this3.fetchUsers(); + + var id = external_CoreHome_["NotificationsStore"].show({ + message: Object(external_CoreHome_["translate"])('UsersManager_ResendInviteSuccess', user.login), + id: 'resendinvite', + context: 'success', + type: 'transient' + }); + external_CoreHome_["NotificationsStore"].scrollToNotification(id); }); }, fetchUsers: function fetchUsers() { - var _this3 = this; + var _this4 = this; this.isLoadingUsers = true; return external_CoreHome_["AjaxHelper"].fetch(Object.assign(Object.assign({}, this.searchParams), {}, { @@ -3332,15 +3356,15 @@ var UsersManagervue_type_script_lang_ts_window = window, returnResponseObject: true }).then(function (helper) { var result = helper.getRequestHandle(); - _this3.totalEntries = parseInt(result.getResponseHeader('x-matomo-total-results') || '0', 10); - _this3.users = result.responseJSON; - _this3.isLoadingUsers = false; + _this4.totalEntries = parseInt(result.getResponseHeader('x-matomo-total-results') || '0', 10); + _this4.users = result.responseJSON; + _this4.isLoadingUsers = false; }).catch(function () { - _this3.isLoadingUsers = false; + _this4.isLoadingUsers = false; }); }, addExistingUser: function addExistingUser() { - var _this4 = this; + var _this5 = this; this.isLoadingUsers = true; return external_CoreHome_["AjaxHelper"].fetch({ @@ -3348,12 +3372,12 @@ var UsersManagervue_type_script_lang_ts_window = window, userLogin: this.addNewUserLoginEmail }).then(function (response) { if (response && response.value) { - return _this4.addNewUserLoginEmail; + return _this5.addNewUserLoginEmail; } return external_CoreHome_["AjaxHelper"].fetch({ method: 'UsersManager.getUserLoginFromUserEmail', - userEmail: _this4.addNewUserLoginEmail + userEmail: _this5.addNewUserLoginEmail }).then(function (r) { return r.value; }); @@ -3363,12 +3387,12 @@ var UsersManagervue_type_script_lang_ts_window = window, }, { userLogin: login, access: 'view', - idSites: _this4.searchParams.idSite + idSites: _this5.searchParams.idSite }); }).then(function () { - return _this4.fetchUsers(); + return _this5.fetchUsers(); }).catch(function () { - _this4.isLoadingUsers = false; + _this5.isLoadingUsers = false; }); }, onAddNewUser: function onAddNewUser() { @@ -3404,7 +3428,7 @@ var UsersManagervue_type_script_lang_ts_window = window, -UsersManagervue_type_script_lang_ts.render = UsersManagervue_type_template_id_621f5797_render +UsersManagervue_type_script_lang_ts.render = UsersManagervue_type_template_id_4688a5a2_render /* harmony default export */ var UsersManager = (UsersManagervue_type_script_lang_ts); // CONCATENATED MODULE: ./plugins/UsersManager/vue/src/UsersManager/UsersManager.adapter.ts @@ -3433,6 +3457,9 @@ UsersManagervue_type_script_lang_ts.render = UsersManagervue_type_template_id_62 }, filterAccessLevels: { angularJsBind: '<' + }, + filterStatusLevels: { + angularJsBind: '<' } }, directiveName: 'piwikUsersManager', diff --git a/plugins/UsersManager/vue/dist/UsersManager.umd.min.js b/plugins/UsersManager/vue/dist/UsersManager.umd.min.js index c3c14a30d0..980b483417 100644 --- a/plugins/UsersManager/vue/dist/UsersManager.umd.min.js +++ b/plugins/UsersManager/vue/dist/UsersManager.umd.min.js @@ -1,56 +1,56 @@ -(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,n){return function(e){var t={};function n(s){if(t[s])return t[s].exports;var r=t[s]={i:s,l:!1,exports:{}};return e[s].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=e,n.c=t,n.d=function(e,t,s){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:s})},n.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var s=Object.create(null);if(n.r(s),Object.defineProperty(s,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(s,r,function(t){return e[t]}.bind(null,r));return s},n.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="plugins/UsersManager/vue/dist/",n(n.s="fae3")}({"19dc":function(t,n){t.exports=e},"8bba":function(e,t,n){},"8bbf":function(e,n){e.exports=t},a5a2:function(e,t){e.exports=n},f2d6:function(e,t,n){"use strict";n("8bba")},fae3:function(e,t,n){"use strict";if(n.r(t),n.d(t,"CapabilitiesEdit",(function(){return E})),n.d(t,"UserPermissionsEdit",(function(){return Fe})),n.d(t,"UserEditForm",(function(){return yt})),n.d(t,"PagedUsersList",(function(){return es})),n.d(t,"UsersManager",(function(){return Ss})),n.d(t,"NewsletterSettings",(function(){return ks})),n.d(t,"AnonymousSettings",(function(){return Ms})),n.d(t,"PersonalSettings",(function(){return $s})),"undefined"!==typeof window){var s=window.document.currentScript,r=s&&s.src.match(/(.+\/)[^/]+\.js(\?.*)?$/);r&&(n.p=r[1])}var i=n("19dc"),a=n("8bbf"),o=["title"],l=["onClick"],c={key:0,class:"addCapability"},d={class:"ui-confirm confirmCapabilityToggle modal",ref:"confirmCapabilityToggleModal"},u={class:"modal-content"},m=["innerHTML"],b=["innerHTML"],p={class:"modal-footer"};function g(e,t,n,s,r,i){var g=Object(a["resolveComponent"])("Field");return Object(a["openBlock"])(),Object(a["createElementBlock"])("div",{class:Object(a["normalizeClass"])(["capabilitiesEdit",{busy:e.isBusy}])},[(Object(a["openBlock"])(!0),Object(a["createElementBlock"])(a["Fragment"],null,Object(a["renderList"])(e.actualCapabilities,(function(t){return Object(a["openBlock"])(),Object(a["createElementBlock"])("div",{key:t.id,class:"chip"},[Object(a["createElementVNode"])("span",{class:"capability-name",title:"".concat(t.description," ").concat(e.isIncludedInRole(t)?"

".concat(e.translate("UsersManager_IncludedInUsersRole")):"")},Object(a["toDisplayString"])(t.category)+": "+Object(a["toDisplayString"])(t.name),9,o),e.isIncludedInRole(t)?Object(a["createCommentVNode"])("",!0):(Object(a["openBlock"])(),Object(a["createElementBlock"])("span",{key:0,class:"icon-close",onClick:function(n){e.capabilityToRemoveId=t.id,e.onToggleCapability(!1)}},null,8,l))])})),128)),e.availableCapabilitiesGrouped.length?(Object(a["openBlock"])(),Object(a["createElementBlock"])("div",c,[Object(a["createVNode"])(g,{"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(a["createCommentVNode"])("",!0),Object(a["createElementVNode"])("div",d,[Object(a["createElementVNode"])("div",u,[e.isAddingCapability?(Object(a["openBlock"])(),Object(a["createElementBlock"])("h2",{key:0,innerHTML:e.$sanitize(e.confirmAddCapabilityToggleContent)},null,8,m)):Object(a["createCommentVNode"])("",!0),e.isAddingCapability?Object(a["createCommentVNode"])("",!0):(Object(a["openBlock"])(),Object(a["createElementBlock"])("h2",{key:1,innerHTML:e.$sanitize(e.confirmCapabilityToggleContent)},null,8,b))]),Object(a["createElementVNode"])("div",p,[Object(a["createElementVNode"])("a",{href:"",class:"modal-action modal-close btn",onClick:t[1]||(t[1]=Object(a["withModifiers"])((function(t){return e.toggleCapability()}),["prevent"]))},Object(a["toDisplayString"])(e.translate("General_Yes")),1),Object(a["createElementVNode"])("a",{href:"",class:"modal-action modal-close modal-no",onClick:t[2]||(t[2]=Object(a["withModifiers"])((function(t){e.capabilityToAddOrRemove=null,e.capabilityToAddId=null,e.capabilityToRemoveId=null}),["prevent"]))},Object(a["toDisplayString"])(e.translate("General_No")),1)])],512)],2)}var h=n("a5a2");function f(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function j(e,t){for(var n=0;n
".concat(e.translate("UsersManager_IncludedInUsersRole")):"")},Object(a["toDisplayString"])(t.category)+": "+Object(a["toDisplayString"])(t.name),9,o),e.isIncludedInRole(t)?Object(a["createCommentVNode"])("",!0):(Object(a["openBlock"])(),Object(a["createElementBlock"])("span",{key:0,class:"icon-close",onClick:function(n){e.capabilityToRemoveId=t.id,e.onToggleCapability(!1)}},null,8,l))])})),128)),e.availableCapabilitiesGrouped.length?(Object(a["openBlock"])(),Object(a["createElementBlock"])("div",c,[Object(a["createVNode"])(g,{"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(a["createCommentVNode"])("",!0),Object(a["createElementVNode"])("div",d,[Object(a["createElementVNode"])("div",u,[e.isAddingCapability?(Object(a["openBlock"])(),Object(a["createElementBlock"])("h2",{key:0,innerHTML:e.$sanitize(e.confirmAddCapabilityToggleContent)},null,8,m)):Object(a["createCommentVNode"])("",!0),e.isAddingCapability?Object(a["createCommentVNode"])("",!0):(Object(a["openBlock"])(),Object(a["createElementBlock"])("h2",{key:1,innerHTML:e.$sanitize(e.confirmCapabilityToggleContent)},null,8,b))]),Object(a["createElementVNode"])("div",p,[Object(a["createElementVNode"])("a",{href:"",class:"modal-action modal-close btn",onClick:t[1]||(t[1]=Object(a["withModifiers"])((function(t){return e.toggleCapability()}),["prevent"]))},Object(a["toDisplayString"])(e.translate("General_Yes")),1),Object(a["createElementVNode"])("a",{href:"",class:"modal-action modal-close modal-no",onClick:t[2]||(t[2]=Object(a["withModifiers"])((function(t){e.capabilityToAddOrRemove=null,e.capabilityToAddId=null,e.capabilityToRemoveId=null}),["prevent"]))},Object(a["toDisplayString"])(e.translate("General_No")),1)])],512)],2)}var f=n("a5a2");function h(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function j(e,t){for(var n=0;n".concat(this.userLogin,""),"".concat(this.capabilityToAddOrRemove?this.capabilityToAddOrRemove.name:"",""),"".concat(this.siteNameText,""))},confirmCapabilityToggleContent:function(){return Object(i["translate"])("UsersManager_AreYouSureRemoveCapability","".concat(this.capabilityToAddOrRemove?this.capabilityToAddOrRemove.name:"",""),"".concat(this.userLogin,""),"".concat(this.siteNameText,""))},siteNameText:function(){return i["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".concat(this.userLogin,""),"".concat(this.capabilityToAddOrRemove?this.capabilityToAddOrRemove.name:"",""),"".concat(this.siteNameText,""))},confirmCapabilityToggleContent:function(){return Object(i["translate"])("UsersManager_AreYouSureRemoveCapability","".concat(this.capabilityToAddOrRemove?this.capabilityToAddOrRemove.name:"",""),"".concat(this.userLogin,""),"".concat(this.siteNameText,""))},siteNameText:function(){return i["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.valuee.limit?(Object(a["openBlock"])(),Object(a["createElementBlock"])("div",q,[Object(a["createElementVNode"])("div",$,[Object(a["createElementVNode"])("a",{class:Object(a["normalizeClass"])(["prev",{disabled:e.offset<=0}])},[Object(a["createElementVNode"])("span",{class:"pointer",onClick:t[6]||(t[6]=function(t){return e.gotoPreviousPage()})},"« "+Object(a["toDisplayString"])(e.translate("General_Previous")),1)],2),Object(a["createElementVNode"])("span",G,[Object(a["createElementVNode"])("span",{textContent:Object(a["toDisplayString"])(e.paginationText)},null,8,z)]),Object(a["createElementVNode"])("a",{class:Object(a["normalizeClass"])(["next",{disabled:e.offset+e.limit>=e.totalEntries}])},[Object(a["createElementVNode"])("span",{class:"pointer",onClick:t[7]||(t[7]=function(t){return e.gotoNextPage()})},Object(a["toDisplayString"])(e.translate("General_Next"))+" »",1)],2)])])):Object(a["createCommentVNode"])("",!0)]),Object(a["createElementVNode"])("div",W,[e.isRoleHelpToggled?(Object(a["openBlock"])(),Object(a["createBlock"])(o,{key:0,context:"info",type:"persistent",noclear:!0},{default:Object(a["withCtx"])((function(){return[Object(a["createElementVNode"])("span",{innerHTML:e.$sanitize(e.rolesHelpText)},null,8,Y)]})),_:1})):Object(a["createCommentVNode"])("",!0)]),Object(a["createElementVNode"])("div",X,[e.isCapabilitiesHelpToggled?(Object(a["openBlock"])(),Object(a["createBlock"])(o,{key:0,context:"info",type:"persistent",noclear:!0},{default:Object(a["withCtx"])((function(){return[Object(a["createElementVNode"])("span",null,Object(a["toDisplayString"])(e.translate("UsersManager_CapabilitiesHelp")),1)]})),_:1})):Object(a["createCommentVNode"])("",!0)]),Object(a["withDirectives"])(Object(a["createElementVNode"])("table",K,[Object(a["createElementVNode"])("thead",null,[Object(a["createElementVNode"])("tr",null,[Object(a["createElementVNode"])("th",Q,[Object(a["createElementVNode"])("span",Z,[Object(a["createElementVNode"])("label",null,[Object(a["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,ee),te])])]),Object(a["createElementVNode"])("th",null,Object(a["toDisplayString"])(e.translate("General_Name")),1),Object(a["createElementVNode"])("th",ne,[Object(a["createElementVNode"])("span",{innerHTML:e.$sanitize("".concat(e.translate("UsersManager_Role")," "))},null,8,se),Object(a["createElementVNode"])("a",{href:"",class:Object(a["normalizeClass"])(["helpIcon",{sticky:e.isRoleHelpToggled}]),onClick:t[9]||(t[9]=Object(a["withModifiers"])((function(t){return e.isRoleHelpToggled=!e.isRoleHelpToggled}),["prevent"]))},ie,2)]),Object(a["createElementVNode"])("th",ae,[Object(a["createElementVNode"])("span",{innerHTML:e.$sanitize("".concat(e.translate("UsersManager_Capabilities")," "))},null,8,oe),Object(a["createElementVNode"])("a",{href:"",class:Object(a["normalizeClass"])(["helpIcon",{sticky:e.isCapabilitiesHelpToggled}]),onClick:t[10]||(t[10]=Object(a["withModifiers"])((function(t){return e.isCapabilitiesHelpToggled=!e.isCapabilitiesHelpToggled}),["prevent"]))},ce,2)])])]),Object(a["createElementVNode"])("tbody",null,[e.isAllCheckboxSelected&&e.siteAccess.length=(this.totalEntries||0)||(this.offset=e,this.fetchAccess())},showRemoveAccessConfirm:function(){Pe(this.$refs.deleteAccessConfirmModal).modal({dismissible:!1}).modal("open")},changeUserRole:function(){var e=this,t=function(){var t=[];return Object.keys(e.selectedRows).forEach((function(n){e.selectedRows[n]&&e.siteAccess[n]&&t.push(e.siteAccess[n].idsite)})),t},n=function(){return i["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?n():t()})).then((function(t){return i["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(){Pe(this.$refs.changeAccessConfirmModal).modal({dismissible:!1}).modal("open")},getRoleDisplay:function(e){var t=null;return this.filteredAccessLevels.forEach((function(n){n.key===e&&(t=n.value)})),t},giveAccessToAllSites:function(){var e=this;this.isGivingAccessToAllSites=!0,i["AjaxHelper"].fetch({method:"SitesManager.getSitesWithAdminAccess",filter_limit:-1}).then((function(t){var n=t.map((function(e){return e.idsite}));return i["AjaxHelper"].post({method:"UsersManager.setUserAccess"},{userLogin:e.userLogin,access:e.allWebsitesAccssLevelSet,idSites:n})})).then((function(){return e.fetchAccess()})).finally((function(){e.isGivingAccessToAllSites=!1}))},showChangeAccessAllSitesModal:function(){Pe(this.$refs.confirmGiveAccessAllSitesModal).modal({dismissible:!1}).modal("open")},onChangeSiteFilter:function(e){var t=this;setTimeout((function(){var n=e.target.value;t.siteNameFilter!==n&&(t.siteNameFilter=n,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(i["translate"])("UsersManager_RolesHelp",'',"",'',"")},theDisplayedWebsitesAreSelectedText:function(){var e=Object(i["translate"])("UsersManager_TheDisplayedWebsitesAreSelected","".concat(this.siteAccess.length,""));return"".concat(e," ")},clickToSelectAllText:function(){return Object(i["translate"])("UsersManager_ClickToSelectAll","".concat(this.totalEntries,""))},allWebsitesAreSelectedText:function(){return Object(i["translate"])("UsersManager_AllWebsitesAreSelected","".concat(this.totalEntries,""))},clickToSelectDisplayedWebsitesText:function(){return Object(i["translate"])("UsersManager_ClickToSelectDisplayedWebsites","".concat(this.siteAccess.length,""))},deletePermConfirmSingleText:function(){return Object(i["translate"])("UsersManager_DeletePermConfirmSingle","".concat(this.userLogin,""),"".concat(this.siteAccessToChangeName,""))},deletePermConfirmMultipleText:function(){return Object(i["translate"])("UsersManager_DeletePermConfirmMultiple","".concat(this.userLogin,""),"".concat(this.affectedSitesCount,""))},changePermToSiteConfirmSingleText:function(){return Object(i["translate"])("UsersManager_ChangePermToSiteConfirmSingle","".concat(this.userLogin,""),"".concat(this.siteAccessToChangeName,""),"".concat(this.getRoleDisplay(this.roleToChangeTo),""))},changePermToSiteConfirmMultipleText:function(){return Object(i["translate"])("UsersManager_ChangePermToSiteConfirmMultiple","".concat(this.userLogin,""),"".concat(this.affectedSitesCount,""),"".concat(this.getRoleDisplay(this.roleToChangeTo),""))},changePermToAllSitesConfirmText:function(){return Object(i["translate"])("UsersManager_ChangePermToAllSitesConfirm","".concat(this.userLogin,""),"".concat(this.getRoleDisplay(this.allWebsitesAccssLevelSet),""))},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?i["Matomo"].helper.htmlEntities(this.siteAccessToChange.site_name):""},paginationText:function(){var e=Object(i["translate"])("General_Pagination","".concat(this.paginationLowerBound),"".concat(this.paginationUpperBound),"".concat(this.totalEntries));return" ".concat(e," ")}}});He.render=Re;var Fe=He,Ie=(Object(i["createAngularJsAdapter"])({component:Fe,scope:{userLogin:{angularJsBind:"<"},limit:{angularJsBind:"<"},onUserHasAccessDetected:{angularJsBind:"&",vue:"userHasAccessDetected"},onAccessChange:{angularJsBind:"&",vue:"accessChanged"},accessLevels:{angularJsBind:"<"},filterAccessLevels:{angularJsBind:"<"}},directiveName:"piwikUserPermissionsEdit",restrict:"E"}),{class:"row"}),Je={key:0,class:"col m2 entityList"},qe={class:"listCircle"},$e={key:0,class:"icon-warning"},Ge=Object(a["createElementVNode"])("div",{class:"save-button-spacer hide-on-small-only"},null,-1),ze={href:"",class:"entityCancelLink"},We={class:"visibleTab col m10"},Ye={key:0,class:"basic-info-tab"},Xe={class:"form-group row",style:{position:"relative"}},Ke={class:"col s12 m6"},Qe={class:"col s12 m6"},Ze={key:0,class:"form-help"},et=["innerHTML"],tt={key:0,class:"entityCancel"},nt={key:1,class:"user-permissions"},st={key:0},rt={key:1,class:"alert alert-info"},it={key:2,class:"superuser-access"},at={class:"superuser-confirm-modal modal",ref:"superUserConfirmModal"},ot={class:"modal-content"},lt={key:0},ct={key:1},dt={class:"modal-footer"},ut={key:3,class:"twofa-reset"},mt={class:"resetTwoFa"},bt={class:"twofa-confirm-modal modal",ref:"twofaConfirmModal"},pt={class:"modal-content"},gt={class:"modal-footer"},ht={class:"change-password-modal modal",ref:"changePasswordModal"},ft={class:"modal-content"},jt=["innerHTML"],Ot={class:"modal-footer"}; + */function Re(e,t,n,s,r,i){var o=Object(a["resolveComponent"])("Notification"),l=Object(a["resolveComponent"])("Field"),c=Object(a["resolveComponent"])("CapabilitiesEdit"),d=Object(a["resolveDirective"])("dropdown-menu"),u=Object(a["resolveDirective"])("content-table");return Object(a["openBlock"])(),Object(a["createElementBlock"])("div",{class:Object(a["normalizeClass"])(["userPermissionsEdit",{loading:e.isLoadingAccess}])},[e.hasAccessToAtLeastOneSite?Object(a["createCommentVNode"])("",!0):(Object(a["openBlock"])(),Object(a["createElementBlock"])("div",V,[Object(a["createElementVNode"])("div",null,[Object(a["createVNode"])(o,{context:"warning",type:"transient",noclear:!0},{default:Object(a["withCtx"])((function(){return[Object(a["createElementVNode"])("strong",null,Object(a["toDisplayString"])(e.translate("General_Warning"))+":",1),Object(a["createTextVNode"])(" "+Object(a["toDisplayString"])(e.translate("UsersManager_NoAccessWarning")),1)]})),_:1})])])),Object(a["createElementVNode"])("div",k,[Object(a["createElementVNode"])("div",A,[Object(a["createElementVNode"])("div",null,[Object(a["createElementVNode"])("span",w,Object(a["toDisplayString"])(e.translate("UsersManager_GiveAccessToAll"))+":",1),Object(a["createElementVNode"])("div",T,[Object(a["createVNode"])(l,{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(a["createElementVNode"])("a",{href:"",class:Object(a["normalizeClass"])(["btn",{disabled:e.isGivingAccessToAllSites}]),onClick:t[1]||(t[1]=Object(a["withModifiers"])((function(t){return e.showChangeAccessAllSitesModal()}),["prevent"]))},Object(a["toDisplayString"])(e.translate("General_Apply")),3)]),Object(a["createElementVNode"])("p",B,Object(a["toDisplayString"])(e.translate("UsersManager_OrManageIndividually"))+":",1)])]),Object(a["createElementVNode"])("div",_,[Object(a["createElementVNode"])("div",D,[Object(a["createElementVNode"])("div",L,[Object(a["withDirectives"])(Object(a["createElementVNode"])("a",{class:Object(a["normalizeClass"])(["dropdown-trigger btn",{disabled:e.isBulkActionsDisabled}]),href:"","data-target":"user-permissions-edit-bulk-actions"},[Object(a["createTextVNode"])(Object(a["toDisplayString"])(e.translate("UsersManager_BulkActions")),1)],2),[[d,{activates:"#user-permissions-edit-bulk-actions"}]]),Object(a["createElementVNode"])("ul",R,[Object(a["createElementVNode"])("li",null,[Object(a["withDirectives"])(Object(a["createElementVNode"])("a",x,[Object(a["createTextVNode"])(Object(a["toDisplayString"])(e.translate("UsersManager_SetPermission")),1)],512),[[d,{activates:"#user-permissions-bulk-set-access"}]]),Object(a["createElementVNode"])("ul",P,[(Object(a["openBlock"])(!0),Object(a["createElementBlock"])(a["Fragment"],null,Object(a["renderList"])(e.filteredAccessLevels,(function(t){return Object(a["openBlock"])(),Object(a["createElementBlock"])("li",{key:t.key},[Object(a["createElementVNode"])("a",{href:"",onClick:Object(a["withModifiers"])((function(n){e.siteAccessToChange=null,e.roleToChangeTo=t.key,e.showChangeAccessConfirm()}),["prevent"])},Object(a["toDisplayString"])(t.value),9,F)])})),128))])]),Object(a["createElementVNode"])("li",null,[Object(a["createElementVNode"])("a",{href:"",onClick:t[2]||(t[2]=Object(a["withModifiers"])((function(t){e.siteAccessToChange=null,e.roleToChangeTo="noaccess",e.showRemoveAccessConfirm()}),["prevent"]))},Object(a["toDisplayString"])(e.translate("UsersManager_RemovePermissions")),1)])])]),Object(a["createElementVNode"])("div",H,[Object(a["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,I)]),Object(a["createElementVNode"])("div",J,[Object(a["createElementVNode"])("div",null,[Object(a["createVNode"])(l,{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(a["openBlock"])(),Object(a["createElementBlock"])("div",q,[Object(a["createElementVNode"])("div",$,[Object(a["createElementVNode"])("a",{class:Object(a["normalizeClass"])(["prev",{disabled:e.offset<=0}])},[Object(a["createElementVNode"])("span",{class:"pointer",onClick:t[6]||(t[6]=function(t){return e.gotoPreviousPage()})},"« "+Object(a["toDisplayString"])(e.translate("General_Previous")),1)],2),Object(a["createElementVNode"])("span",G,[Object(a["createElementVNode"])("span",{textContent:Object(a["toDisplayString"])(e.paginationText)},null,8,z)]),Object(a["createElementVNode"])("a",{class:Object(a["normalizeClass"])(["next",{disabled:e.offset+e.limit>=e.totalEntries}])},[Object(a["createElementVNode"])("span",{class:"pointer",onClick:t[7]||(t[7]=function(t){return e.gotoNextPage()})},Object(a["toDisplayString"])(e.translate("General_Next"))+" »",1)],2)])])):Object(a["createCommentVNode"])("",!0)]),Object(a["createElementVNode"])("div",W,[e.isRoleHelpToggled?(Object(a["openBlock"])(),Object(a["createBlock"])(o,{key:0,context:"info",type:"persistent",noclear:!0},{default:Object(a["withCtx"])((function(){return[Object(a["createElementVNode"])("span",{innerHTML:e.$sanitize(e.rolesHelpText)},null,8,Y)]})),_:1})):Object(a["createCommentVNode"])("",!0)]),Object(a["createElementVNode"])("div",X,[e.isCapabilitiesHelpToggled?(Object(a["openBlock"])(),Object(a["createBlock"])(o,{key:0,context:"info",type:"persistent",noclear:!0},{default:Object(a["withCtx"])((function(){return[Object(a["createElementVNode"])("span",null,Object(a["toDisplayString"])(e.translate("UsersManager_CapabilitiesHelp")),1)]})),_:1})):Object(a["createCommentVNode"])("",!0)]),Object(a["withDirectives"])(Object(a["createElementVNode"])("table",K,[Object(a["createElementVNode"])("thead",null,[Object(a["createElementVNode"])("tr",null,[Object(a["createElementVNode"])("th",Q,[Object(a["createElementVNode"])("span",Z,[Object(a["createElementVNode"])("label",null,[Object(a["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,ee),te])])]),Object(a["createElementVNode"])("th",null,Object(a["toDisplayString"])(e.translate("General_Name")),1),Object(a["createElementVNode"])("th",ne,[Object(a["createElementVNode"])("span",{innerHTML:e.$sanitize("".concat(e.translate("UsersManager_Role")," "))},null,8,se),Object(a["createElementVNode"])("a",{href:"",class:Object(a["normalizeClass"])(["helpIcon",{sticky:e.isRoleHelpToggled}]),onClick:t[9]||(t[9]=Object(a["withModifiers"])((function(t){return e.isRoleHelpToggled=!e.isRoleHelpToggled}),["prevent"]))},ie,2)]),Object(a["createElementVNode"])("th",ae,[Object(a["createElementVNode"])("span",{innerHTML:e.$sanitize("".concat(e.translate("UsersManager_Capabilities")," "))},null,8,oe),Object(a["createElementVNode"])("a",{href:"",class:Object(a["normalizeClass"])(["helpIcon",{sticky:e.isCapabilitiesHelpToggled}]),onClick:t[10]||(t[10]=Object(a["withModifiers"])((function(t){return e.isCapabilitiesHelpToggled=!e.isCapabilitiesHelpToggled}),["prevent"]))},ce,2)])])]),Object(a["createElementVNode"])("tbody",null,[e.isAllCheckboxSelected&&e.siteAccess.length=(this.totalEntries||0)||(this.offset=e,this.fetchAccess())},showRemoveAccessConfirm:function(){Pe(this.$refs.deleteAccessConfirmModal).modal({dismissible:!1}).modal("open")},changeUserRole:function(){var e=this,t=function(){var t=[];return Object.keys(e.selectedRows).forEach((function(n){e.selectedRows[n]&&e.siteAccess[n]&&t.push(e.siteAccess[n].idsite)})),t},n=function(){return i["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?n():t()})).then((function(t){return i["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(){Pe(this.$refs.changeAccessConfirmModal).modal({dismissible:!1}).modal("open")},getRoleDisplay:function(e){var t=null;return this.filteredAccessLevels.forEach((function(n){n.key===e&&(t=n.value)})),t},giveAccessToAllSites:function(){var e=this;this.isGivingAccessToAllSites=!0,i["AjaxHelper"].fetch({method:"SitesManager.getSitesWithAdminAccess",filter_limit:-1}).then((function(t){var n=t.map((function(e){return e.idsite}));return i["AjaxHelper"].post({method:"UsersManager.setUserAccess"},{userLogin:e.userLogin,access:e.allWebsitesAccssLevelSet,idSites:n})})).then((function(){return e.fetchAccess()})).finally((function(){e.isGivingAccessToAllSites=!1}))},showChangeAccessAllSitesModal:function(){Pe(this.$refs.confirmGiveAccessAllSitesModal).modal({dismissible:!1}).modal("open")},onChangeSiteFilter:function(e){var t=this;setTimeout((function(){var n=e.target.value;t.siteNameFilter!==n&&(t.siteNameFilter=n,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(i["translate"])("UsersManager_RolesHelp",'',"",'',"")},theDisplayedWebsitesAreSelectedText:function(){var e=Object(i["translate"])("UsersManager_TheDisplayedWebsitesAreSelected","".concat(this.siteAccess.length,""));return"".concat(e," ")},clickToSelectAllText:function(){return Object(i["translate"])("UsersManager_ClickToSelectAll","".concat(this.totalEntries,""))},allWebsitesAreSelectedText:function(){return Object(i["translate"])("UsersManager_AllWebsitesAreSelected","".concat(this.totalEntries,""))},clickToSelectDisplayedWebsitesText:function(){return Object(i["translate"])("UsersManager_ClickToSelectDisplayedWebsites","".concat(this.siteAccess.length,""))},deletePermConfirmSingleText:function(){return Object(i["translate"])("UsersManager_DeletePermConfirmSingle","".concat(this.userLogin,""),"".concat(this.siteAccessToChangeName,""))},deletePermConfirmMultipleText:function(){return Object(i["translate"])("UsersManager_DeletePermConfirmMultiple","".concat(this.userLogin,""),"".concat(this.affectedSitesCount,""))},changePermToSiteConfirmSingleText:function(){return Object(i["translate"])("UsersManager_ChangePermToSiteConfirmSingle","".concat(this.userLogin,""),"".concat(this.siteAccessToChangeName,""),"".concat(this.getRoleDisplay(this.roleToChangeTo),""))},changePermToSiteConfirmMultipleText:function(){return Object(i["translate"])("UsersManager_ChangePermToSiteConfirmMultiple","".concat(this.userLogin,""),"".concat(this.affectedSitesCount,""),"".concat(this.getRoleDisplay(this.roleToChangeTo),""))},changePermToAllSitesConfirmText:function(){return Object(i["translate"])("UsersManager_ChangePermToAllSitesConfirm","".concat(this.userLogin,""),"".concat(this.getRoleDisplay(this.allWebsitesAccssLevelSet),""))},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?i["Matomo"].helper.htmlEntities(this.siteAccessToChange.site_name):""},paginationText:function(){var e=Object(i["translate"])("General_Pagination","".concat(this.paginationLowerBound),"".concat(this.paginationUpperBound),"".concat(this.totalEntries));return" ".concat(e," ")}}});Fe.render=Re;var He=Fe,Ie=(Object(i["createAngularJsAdapter"])({component:He,scope:{userLogin:{angularJsBind:"<"},limit:{angularJsBind:"<"},onUserHasAccessDetected:{angularJsBind:"&",vue:"userHasAccessDetected"},onAccessChange:{angularJsBind:"&",vue:"accessChanged"},accessLevels:{angularJsBind:"<"},filterAccessLevels:{angularJsBind:"<"}},directiveName:"piwikUserPermissionsEdit",restrict:"E"}),{class:"row"}),Je={key:0,class:"col m2 entityList"},qe={class:"listCircle"},$e={key:0,class:"icon-warning"},Ge=Object(a["createElementVNode"])("div",{class:"save-button-spacer hide-on-small-only"},null,-1),ze={href:"",class:"entityCancelLink"},We={class:"visibleTab col m10"},Ye={key:0,class:"basic-info-tab"},Xe={class:"form-group row",style:{position:"relative"}},Ke={class:"col s12 m6"},Qe={class:"col s12 m6"},Ze={key:0,class:"form-help"},et=["innerHTML"],tt={key:0,class:"entityCancel"},nt={key:1,class:"user-permissions"},st={key:0},rt={key:1,class:"alert alert-info"},it={key:2,class:"superuser-access"},at={class:"superuser-confirm-modal modal",ref:"superUserConfirmModal"},ot={class:"modal-content"},lt={key:0},ct={key:1},dt={class:"modal-footer"},ut={key:3,class:"twofa-reset"},mt={class:"resetTwoFa"},bt={class:"twofa-confirm-modal modal",ref:"twofaConfirmModal"},pt={class:"modal-content"},gt={class:"modal-footer"},ft={class:"change-password-modal modal",ref:"changePasswordModal"},ht={class:"modal-content"},jt=["innerHTML"],Ot={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 - */function vt(e,t,n,s,r,i){var o=Object(a["resolveComponent"])("Field"),l=Object(a["resolveComponent"])("SaveButton"),c=Object(a["resolveComponent"])("UserPermissionsEdit"),d=Object(a["resolveComponent"])("ContentBlock"),u=Object(a["resolveDirective"])("form");return Object(a["openBlock"])(),Object(a["createBlock"])(d,{class:Object(a["normalizeClass"])(["userEditForm",{loading:e.isSavingUserInfo}]),"content-title":"".concat(e.formTitle," ").concat(e.isAdd?"":"'".concat(e.theUser.login,"'"))},{default:Object(a["withCtx"])((function(){return[Object(a["withDirectives"])(Object(a["createElementVNode"])("div",Ie,[e.isAdd?Object(a["createCommentVNode"])("",!0):(Object(a["openBlock"])(),Object(a["createElementBlock"])("div",Je,[Object(a["createElementVNode"])("ul",qe,[Object(a["createElementVNode"])("li",{class:Object(a["normalizeClass"])([{active:"basic"===e.activeTab},"menuBasicInfo"])},[Object(a["createElementVNode"])("a",{href:"",onClick:t[0]||(t[0]=Object(a["withModifiers"])((function(t){return e.activeTab="basic"}),["prevent"]))},Object(a["toDisplayString"])(e.translate("UsersManager_BasicInformation")),1)],2),Object(a["createElementVNode"])("li",{class:Object(a["normalizeClass"])([{active:"permissions"===e.activeTab},"menuPermissions"])},[Object(a["createElementVNode"])("a",{href:"",onClick:t[1]||(t[1]=Object(a["withModifiers"])((function(t){return e.activeTab="permissions"}),["prevent"])),style:{"margin-right":"3.5px"}},Object(a["toDisplayString"])(e.translate("UsersManager_Permissions")),1),e.userHasAccess||e.theUser.superuser_access?Object(a["createCommentVNode"])("",!0):(Object(a["openBlock"])(),Object(a["createElementBlock"])("span",$e))],2),"superuser"===e.currentUserRole?(Object(a["openBlock"])(),Object(a["createElementBlock"])("li",{key:0,class:Object(a["normalizeClass"])([{active:"superuser"===e.activeTab},"menuSuperuser"])},[Object(a["createElementVNode"])("a",{href:"",onClick:t[2]||(t[2]=Object(a["withModifiers"])((function(t){return e.activeTab="superuser"}),["prevent"]))},Object(a["toDisplayString"])(e.translate("UsersManager_SuperUserAccess")),1)],2)):Object(a["createCommentVNode"])("",!0),"superuser"===e.currentUserRole&&e.theUser.uses_2fa&&!e.isAdd?(Object(a["openBlock"])(),Object(a["createElementBlock"])("li",{key:1,class:Object(a["normalizeClass"])([{active:"2fa"===e.activeTab},"menuUserTwoFa"])},[Object(a["createElementVNode"])("a",{href:"",onClick:t[3]||(t[3]=Object(a["withModifiers"])((function(t){return e.activeTab="2fa"}),["prevent"]))},Object(a["toDisplayString"])(e.translate("UsersManager_TwoFactorAuthentication")),1)],2)):Object(a["createCommentVNode"])("",!0)]),Ge,Object(a["createElementVNode"])("div",{class:"entityCancel",onClick:t[4]||(t[4]=Object(a["withModifiers"])((function(t){return e.onDoneEditing()}),["prevent"]))},[Object(a["createElementVNode"])("a",ze,Object(a["toDisplayString"])(e.translate("Mobile_NavigationBack")),1)])])),Object(a["createElementVNode"])("div",We,["basic"===e.activeTab?(Object(a["openBlock"])(),Object(a["createElementBlock"])("div",Ye,[Object(a["createElementVNode"])("div",null,[Object(a["createVNode"])(o,{modelValue:e.theUser.login,"onUpdate:modelValue":t[5]||(t[5]=function(t){return e.theUser.login=t}),disabled:e.isSavingUserInfo||!e.isAdd||e.isShowingPasswordConfirm,uicontrol:"text",name:"user_login",maxlength:100,title:e.translate("General_Username")},null,8,["modelValue","disabled","title"])]),Object(a["createElementVNode"])("div",null,[e.isPendingUser?(Object(a["openBlock"])(),Object(a["createBlock"])(o,{key:0,"model-value":e.theUser.password,disabled:e.isSavingUserInfo||"superuser"!==e.currentUserRole&&!e.isAdd||e.isShowingPasswordConfirm,"onUpdate:modelValue":t[6]||(t[6]=function(t){e.theUser.password=t,e.isPasswordModified=!0}),uicontrol:"password",name:"user_password",title:e.translate("General_Password")},null,8,["model-value","disabled","title"])):Object(a["createCommentVNode"])("",!0)]),Object(a["createElementVNode"])("div",null,["superuser"===e.currentUserRole||e.isAdd?(Object(a["openBlock"])(),Object(a["createBlock"])(o,{key:0,modelValue:e.theUser.email,"onUpdate:modelValue":t[7]||(t[7]=function(t){return e.theUser.email=t}),disabled:e.isSavingUserInfo||"superuser"!==e.currentUserRole&&!e.isAdd||e.isShowingPasswordConfirm,uicontrol:"text",name:"user_email",maxlength:100,title:e.translate("UsersManager_Email")},null,8,["modelValue","disabled","title"])):Object(a["createCommentVNode"])("",!0)]),Object(a["createElementVNode"])("div",null,[e.isAdd?(Object(a["openBlock"])(),Object(a["createBlock"])(o,{key:0,modelValue:e.firstSiteAccess,"onUpdate:modelValue":t[8]||(t[8]=function(t){return e.firstSiteAccess=t}),disabled:e.isSavingUserInfo,uicontrol:"site",name:"user_site","ui-control-attributes":{onlySitesWithAdminAccess:!0},title:e.translate("UsersManager_FirstWebsitePermission"),"inline-help":e.translate("UsersManager_FirstSiteInlineHelp")},null,8,["modelValue","disabled","title","inline-help"])):Object(a["createCommentVNode"])("",!0)]),Object(a["createElementVNode"])("div",null,[Object(a["createElementVNode"])("div",Xe,[Object(a["createElementVNode"])("div",Ke,["superuser"===e.currentUserRole||e.isAdd?(Object(a["openBlock"])(),Object(a["createBlock"])(l,{key:0,style:{position:"absolute",bottom:"0"},value:e.saveButtonLabel,disabled:e.isAdd&&(!e.firstSiteAccess||!e.firstSiteAccess.id),saving:e.isSavingUserInfo,onConfirm:t[9]||(t[9]=function(t){return e.saveUserInfo()})},null,8,["value","disabled","saving"])):Object(a["createCommentVNode"])("",!0)]),Object(a["createElementVNode"])("div",Qe,[e.isAdd?(Object(a["openBlock"])(),Object(a["createElementBlock"])("div",Ze,[Object(a["createElementVNode"])("span",{class:"inline-help",innerHTML:e.$sanitize(e.translate("UsersManager_InviteSuccessNotification",[7]))},null,8,et)])):Object(a["createCommentVNode"])("",!0)])])]),e.isAdd?(Object(a["openBlock"])(),Object(a["createElementBlock"])("div",tt,[Object(a["createElementVNode"])("a",{href:"",class:"entityCancelLink",onClick:t[10]||(t[10]=Object(a["withModifiers"])((function(t){return e.onDoneEditing()}),["prevent"]))},Object(a["toDisplayString"])(e.translate("General_Cancel")),1)])):Object(a["createCommentVNode"])("",!0)])):Object(a["createCommentVNode"])("",!0),e.isAdd?Object(a["createCommentVNode"])("",!0):Object(a["withDirectives"])((Object(a["openBlock"])(),Object(a["createElementBlock"])("div",nt,[e.theUser.superuser_access?Object(a["createCommentVNode"])("",!0):(Object(a["openBlock"])(),Object(a["createElementBlock"])("div",st,[Object(a["createVNode"])(c,{"user-login":e.theUser.login,onUserHasAccessDetected:t[11]||(t[11]=function(t){return e.userHasAccess=t.hasAccess}),onAccessChanged:t[12]||(t[12]=function(t){return e.isUserModified=!0}),"access-levels":e.accessLevels,"filter-access-levels":e.filterAccessLevels},null,8,["user-login","access-levels","filter-access-levels"])])),e.theUser.superuser_access?(Object(a["openBlock"])(),Object(a["createElementBlock"])("div",rt,Object(a["toDisplayString"])(e.translate("UsersManager_SuperUsersPermissionsNotice")),1)):Object(a["createCommentVNode"])("",!0)],512)),[[a["vShow"],"permissions"===e.activeTab]]),"superuser"!==e.activeTab||"superuser"!==e.currentUserRole||e.isAdd?Object(a["createCommentVNode"])("",!0):(Object(a["openBlock"])(),Object(a["createElementBlock"])("div",it,[Object(a["createElementVNode"])("p",null,Object(a["toDisplayString"])(e.translate("UsersManager_SuperUserIntro1")),1),Object(a["createElementVNode"])("p",null,[Object(a["createElementVNode"])("strong",null,Object(a["toDisplayString"])(e.translate("UsersManager_SuperUserIntro2")),1)]),Object(a["createElementVNode"])("div",null,[Object(a["createVNode"])(o,{modelValue:e.superUserAccessChecked,"onUpdate:modelValue":t[13]||(t[13]=function(t){return e.superUserAccessChecked=t}),onClick:t[14]||(t[14]=function(t){return e.confirmSuperUserChange()}),disabled:e.isSavingUserInfo,uicontrol:"checkbox",name:"superuser_access",title:e.translate("UsersManager_HasSuperUserAccess")},null,8,["modelValue","disabled","title"])]),Object(a["createElementVNode"])("div",at,[Object(a["createElementVNode"])("div",ot,[Object(a["createElementVNode"])("h2",null,Object(a["toDisplayString"])(e.translate("UsersManager_AreYouSure")),1),e.theUser.superuser_access?(Object(a["openBlock"])(),Object(a["createElementBlock"])("p",lt,Object(a["toDisplayString"])(e.translate("UsersManager_RemoveSuperuserAccessConfirm")),1)):Object(a["createCommentVNode"])("",!0),e.theUser.superuser_access?Object(a["createCommentVNode"])("",!0):(Object(a["openBlock"])(),Object(a["createElementBlock"])("p",ct,Object(a["toDisplayString"])(e.translate("UsersManager_AddSuperuserAccessConfirm")),1)),Object(a["createElementVNode"])("div",null,[Object(a["createVNode"])(o,{modelValue:e.passwordConfirmationForSuperUser,"onUpdate:modelValue":t[15]||(t[15]=function(t){return e.passwordConfirmationForSuperUser=t}),uicontrol:"password",name:"currentUserPasswordForSuperUser",autocomplete:!1,"full-width":!0,title:e.translate("UsersManager_YourCurrentPassword")},null,8,["modelValue","title"])])]),Object(a["createElementVNode"])("div",dt,[Object(a["createElementVNode"])("a",{href:"",class:"modal-action modal-close btn",onClick:t[16]||(t[16]=Object(a["withModifiers"])((function(t){return e.toggleSuperuserAccess()}),["prevent"])),style:{"margin-right":"3.5px"}},Object(a["toDisplayString"])(e.translate("General_Yes")),1),Object(a["createElementVNode"])("a",{href:"",class:"modal-action modal-close modal-no",onClick:t[17]||(t[17]=Object(a["withModifiers"])((function(t){e.setSuperUserAccessChecked(),e.passwordConfirmationForSuperUser=""}),["prevent"]))},Object(a["toDisplayString"])(e.translate("General_No")),1)])],512)])),"superuser"!==e.currentUserRole||e.isAdd?Object(a["createCommentVNode"])("",!0):Object(a["withDirectives"])((Object(a["openBlock"])(),Object(a["createElementBlock"])("div",ut,[Object(a["createElementVNode"])("p",null,Object(a["toDisplayString"])(e.translate("UsersManager_ResetTwoFactorAuthenticationInfo")),1),Object(a["createElementVNode"])("div",mt,[Object(a["createVNode"])(l,{saving:e.isResetting2FA,onConfirm:t[18]||(t[18]=function(t){return e.confirmReset2FA()}),value:e.translate("UsersManager_ResetTwoFactorAuthentication")},null,8,["saving","value"])]),Object(a["createElementVNode"])("div",bt,[Object(a["createElementVNode"])("div",pt,[Object(a["createElementVNode"])("h2",null,Object(a["toDisplayString"])(e.translate("UsersManager_AreYouSure")),1),Object(a["createElementVNode"])("p",null,Object(a["toDisplayString"])(e.translate("UsersManager_ConfirmWithPassword")),1),Object(a["createElementVNode"])("div",null,[Object(a["createVNode"])(o,{modelValue:e.passwordConfirmation,"onUpdate:modelValue":t[19]||(t[19]=function(t){return e.passwordConfirmation=t}),uicontrol:"password",name:"currentUserPasswordTwoFa",autocomplete:!1,"full-width":!0,title:e.translate("UsersManager_YourCurrentPassword")},null,8,["modelValue","title"])])]),Object(a["createElementVNode"])("div",gt,[Object(a["createElementVNode"])("a",{href:"",class:"modal-action modal-close btn",onClick:t[20]||(t[20]=Object(a["withModifiers"])((function(t){return e.reset2FA()}),["prevent"])),style:{"margin-right":"3.5px"}},Object(a["toDisplayString"])(e.translate("General_Yes")),1),Object(a["createElementVNode"])("a",{href:"",class:"modal-action modal-close modal-no",onClick:t[21]||(t[21]=function(t){t.preventDefault(),e.passwordConfirmation=""})},Object(a["toDisplayString"])(e.translate("General_No")),1)])],512)],512)),[[a["vShow"],"2fa"===e.activeTab]])])],512),[[u]]),Object(a["createElementVNode"])("div",ht,[Object(a["createElementVNode"])("div",ft,[Object(a["createElementVNode"])("h2",{innerHTML:e.$sanitize(e.changePasswordTitle)},null,8,jt),Object(a["createElementVNode"])("p",null,Object(a["toDisplayString"])(e.translate("UsersManager_ConfirmWithPassword")),1),Object(a["createElementVNode"])("div",null,[Object(a["createVNode"])(o,{modelValue:e.passwordConfirmation,"onUpdate:modelValue":t[22]||(t[22]=function(t){return e.passwordConfirmation=t}),uicontrol:"password",name:"currentUserPasswordChangePwd",autocomplete:!1,"full-width":!0,title:e.translate("UsersManager_YourCurrentPassword")},null,8,["modelValue","title"])])]),Object(a["createElementVNode"])("div",Ot,[Object(a["createElementVNode"])("a",{href:"",class:"modal-action modal-close btn",onClick:t[23]||(t[23]=Object(a["withModifiers"])((function(t){return e.updateUser()}),["prevent"]))},Object(a["toDisplayString"])(e.translate("General_Yes")),1),Object(a["createElementVNode"])("a",{href:"",class:"modal-action modal-close modal-no",onClick:t[24]||(t[24]=function(t){t.preventDefault(),e.passwordConfirmation=""})},Object(a["toDisplayString"])(e.translate("General_No")),1)])],512)]})),_:1},8,["class","content-title"])}var Ct={login:"",superuser_access:!1,uses_2fa:!1,password:"",email:"",invited_at:""},Nt=window,St=Nt.$,Ut=Object(a["defineComponent"])({props:{user:Object,currentUserRole:{type:String,required:!0},accessLevels:{type:Array,required:!0},filterAccessLevels:{type:Array,required:!0},initialSiteId:{type:[String,Number],required:!0},initialSiteName:{type:String,required:!0}},components:{ContentBlock:i["ContentBlock"],Field:h["Field"],SaveButton:h["SaveButton"],UserPermissionsEdit:Fe},directives:{Form:h["Form"]},data:function(){return{theUser:this.user||Object.assign({},Ct),activeTab:"basic",permissionsForIdSite:1,isSavingUserInfo:!1,userHasAccess:!0,firstSiteAccess:{id:this.initialSiteId,name:this.initialSiteName},isUserModified:!1,passwordConfirmation:"",isPasswordModified:!1,superUserAccessChecked:null,passwordConfirmationForSuperUser:"",isResetting2FA:!1,isShowingPasswordConfirm:!1}},emits:["done","updated"],watch:{user:function(e){this.onUserChange(e)}},created:function(){this.onUserChange(this.user)},methods:{onUserChange:function(e){this.theUser=e||Object.assign({},Ct),this.theUser.password||this.resetPasswordVar(),this.setSuperUserAccessChecked()},confirmSuperUserChange:function(){St(this.$refs.superUserConfirmModal).modal({dismissible:!1}).modal("open")},confirmReset2FA:function(){St(this.$refs.twofaConfirmModal).modal({dismissible:!1}).modal("open")},toggleSuperuserAccess:function(){var e=this;this.isSavingUserInfo=!0,i["AjaxHelper"].post({method:"UsersManager.setSuperUserAccess"},{userLogin:this.theUser.login,hasSuperUserAccess:this.theUser.superuser_access?"0":"1",passwordConfirmation:this.passwordConfirmationForSuperUser}).then((function(){e.theUser.superuser_access=!e.theUser.superuser_access})).catch((function(){})).then((function(){e.isSavingUserInfo=!1,e.isUserModified=!0,e.passwordConfirmationForSuperUser="",e.setSuperUserAccessChecked()}))},saveUserInfo:function(){var e=this;return Promise.resolve().then((function(){return e.isAdd?e.createUser():e.confirmUserChange()})).then((function(){e.$emit("updated",{user:Object(a["readonly"])(e.theUser)})}))},createUser:function(){var e=this;return this.isSavingUserInfo=!0,i["AjaxHelper"].post({method:"UsersManager.inviteUser"},{userLogin:this.theUser.login,email:this.theUser.email,initialIdSite:this.firstSiteAccess?this.firstSiteAccess.id:void 0}).catch((function(t){throw e.isSavingUserInfo=!1,t})).then((function(){e.firstSiteAccess=null,e.isSavingUserInfo=!1,e.isUserModified=!0,e.theUser.invited_at="xx",e.resetPasswordVar(),e.showUserSavedNotification()}))},resetPasswordVar:function(){this.isAdd||(this.theUser.password="XXXXXXXX")},confirmUserChange:function(){var e=this;this.passwordConfirmation="",this.isShowingPasswordConfirm=!0;var t=function(t){var n=t.keyCode?t.keyCode:t.which;13===n&&(St(e.$refs.changePasswordModal).modal("close"),e.updateUser())};St(this.$refs.changePasswordModal).modal({dismissible:!1,onOpenEnd:function(){e.isShowingPasswordConfirm=!1,St(".modal.open #currentUserPasswordChangePwd").focus().off("keypress").keypress(t)}}).modal("open")},showUserSavedNotification:function(){i["NotificationsStore"].show({message:Object(i["translate"])("General_YourChangesHaveBeenSaved"),context:"success",type:"toast"})},reset2FA:function(){var e=this;return this.isResetting2FA=!0,i["AjaxHelper"].post({method:"TwoFactorAuth.resetTwoFactorAuth",userLogin:this.theUser.login,passwordConfirmation:this.passwordConfirmation}).catch((function(t){throw e.isResetting2FA=!1,t})).then((function(){e.isResetting2FA=!1,e.theUser.uses_2fa=!1,e.activeTab="basic",e.showUserSavedNotification()})).finally((function(){e.passwordConfirmation=""}))},updateUser:function(){var e=this;return this.isSavingUserInfo=!0,i["AjaxHelper"].post({method:"UsersManager.updateUser"},{userLogin:this.theUser.login,password:this.isPasswordModified&&this.theUser.password?this.theUser.password:void 0,passwordConfirmation:this.passwordConfirmation?this.passwordConfirmation:void 0,email:this.theUser.email}).then((function(){e.isSavingUserInfo=!1,e.passwordConfirmation="",e.isUserModified=!0,e.isPasswordModified=!1,e.resetPasswordVar(),e.showUserSavedNotification()})).catch((function(){e.isSavingUserInfo=!1,e.passwordConfirmation=""}))},setSuperUserAccessChecked:function(){this.superUserAccessChecked=!!this.theUser.superuser_access},onDoneEditing:function(){this.$emit("done",{isUserModified:this.isUserModified})}},computed:{formTitle:function(){return this.isAdd?Object(i["translate"])("UsersManager_InviteNewUser"):Object(i["translate"])("UsersManager_EditUser")},saveButtonLabel:function(){return this.isAdd?Object(i["translate"])("UsersManager_InviteUser"):Object(i["translate"])("UsersManager_SaveBasicInfo")},isPendingUser:function(){return this.user&&(""===this.theUser.invited_at||!this.theUser.invited_at)},isAdd:function(){return!this.user},changePasswordTitle:function(){return Object(i["translate"])("UsersManager_AreYouSureChangeDetails","".concat(this.theUser.login,""))}}});Ut.render=vt;var yt=Ut; + */function vt(e,t,n,s,r,i){var o=Object(a["resolveComponent"])("Field"),l=Object(a["resolveComponent"])("SaveButton"),c=Object(a["resolveComponent"])("UserPermissionsEdit"),d=Object(a["resolveComponent"])("ContentBlock"),u=Object(a["resolveDirective"])("form");return Object(a["openBlock"])(),Object(a["createBlock"])(d,{class:Object(a["normalizeClass"])(["userEditForm",{loading:e.isSavingUserInfo}]),"content-title":"".concat(e.formTitle," ").concat(e.isAdd?"":"'".concat(e.theUser.login,"'"))},{default:Object(a["withCtx"])((function(){return[Object(a["withDirectives"])(Object(a["createElementVNode"])("div",Ie,[e.isAdd?Object(a["createCommentVNode"])("",!0):(Object(a["openBlock"])(),Object(a["createElementBlock"])("div",Je,[Object(a["createElementVNode"])("ul",qe,[Object(a["createElementVNode"])("li",{class:Object(a["normalizeClass"])([{active:"basic"===e.activeTab},"menuBasicInfo"])},[Object(a["createElementVNode"])("a",{href:"",onClick:t[0]||(t[0]=Object(a["withModifiers"])((function(t){return e.activeTab="basic"}),["prevent"]))},Object(a["toDisplayString"])(e.translate("UsersManager_BasicInformation")),1)],2),Object(a["createElementVNode"])("li",{class:Object(a["normalizeClass"])([{active:"permissions"===e.activeTab},"menuPermissions"])},[Object(a["createElementVNode"])("a",{href:"",onClick:t[1]||(t[1]=Object(a["withModifiers"])((function(t){return e.activeTab="permissions"}),["prevent"])),style:{"margin-right":"3.5px"}},Object(a["toDisplayString"])(e.translate("UsersManager_Permissions")),1),e.userHasAccess||e.theUser.superuser_access?Object(a["createCommentVNode"])("",!0):(Object(a["openBlock"])(),Object(a["createElementBlock"])("span",$e))],2),"superuser"===e.currentUserRole?(Object(a["openBlock"])(),Object(a["createElementBlock"])("li",{key:0,class:Object(a["normalizeClass"])([{active:"superuser"===e.activeTab},"menuSuperuser"])},[Object(a["createElementVNode"])("a",{href:"",onClick:t[2]||(t[2]=Object(a["withModifiers"])((function(t){return e.activeTab="superuser"}),["prevent"]))},Object(a["toDisplayString"])(e.translate("UsersManager_SuperUserAccess")),1)],2)):Object(a["createCommentVNode"])("",!0),"superuser"===e.currentUserRole&&e.theUser.uses_2fa&&!e.isAdd?(Object(a["openBlock"])(),Object(a["createElementBlock"])("li",{key:1,class:Object(a["normalizeClass"])([{active:"2fa"===e.activeTab},"menuUserTwoFa"])},[Object(a["createElementVNode"])("a",{href:"",onClick:t[3]||(t[3]=Object(a["withModifiers"])((function(t){return e.activeTab="2fa"}),["prevent"]))},Object(a["toDisplayString"])(e.translate("UsersManager_TwoFactorAuthentication")),1)],2)):Object(a["createCommentVNode"])("",!0)]),Ge,Object(a["createElementVNode"])("div",{class:"entityCancel",onClick:t[4]||(t[4]=Object(a["withModifiers"])((function(t){return e.onDoneEditing()}),["prevent"]))},[Object(a["createElementVNode"])("a",ze,Object(a["toDisplayString"])(e.translate("Mobile_NavigationBack")),1)])])),Object(a["createElementVNode"])("div",We,["basic"===e.activeTab?(Object(a["openBlock"])(),Object(a["createElementBlock"])("div",Ye,[Object(a["createElementVNode"])("div",null,[Object(a["createVNode"])(o,{modelValue:e.theUser.login,"onUpdate:modelValue":t[5]||(t[5]=function(t){return e.theUser.login=t}),disabled:e.isSavingUserInfo||!e.isAdd||e.isShowingPasswordConfirm,uicontrol:"text",name:"user_login",maxlength:100,title:e.translate("General_Username")},null,8,["modelValue","disabled","title"])]),Object(a["createElementVNode"])("div",null,[e.isPending?Object(a["createCommentVNode"])("",!0):(Object(a["openBlock"])(),Object(a["createBlock"])(o,{key:0,"model-value":e.theUser.password,disabled:e.isSavingUserInfo||"superuser"!==e.currentUserRole&&!e.isAdd||e.isShowingPasswordConfirm,"onUpdate:modelValue":t[6]||(t[6]=function(t){e.theUser.password=t,e.isPasswordModified=!0}),uicontrol:"password",name:"user_password",title:e.translate("General_Password")},null,8,["model-value","disabled","title"]))]),Object(a["createElementVNode"])("div",null,["superuser"===e.currentUserRole||e.isAdd?(Object(a["openBlock"])(),Object(a["createBlock"])(o,{key:0,modelValue:e.theUser.email,"onUpdate:modelValue":t[7]||(t[7]=function(t){return e.theUser.email=t}),disabled:e.isSavingUserInfo||"superuser"!==e.currentUserRole&&!e.isAdd||e.isShowingPasswordConfirm,uicontrol:"text",name:"user_email",maxlength:100,title:e.translate("UsersManager_Email")},null,8,["modelValue","disabled","title"])):Object(a["createCommentVNode"])("",!0)]),Object(a["createElementVNode"])("div",null,[e.isAdd?(Object(a["openBlock"])(),Object(a["createBlock"])(o,{key:0,modelValue:e.firstSiteAccess,"onUpdate:modelValue":t[8]||(t[8]=function(t){return e.firstSiteAccess=t}),disabled:e.isSavingUserInfo,uicontrol:"site",name:"user_site","ui-control-attributes":{onlySitesWithAdminAccess:!0},title:e.translate("UsersManager_FirstWebsitePermission"),"inline-help":e.translate("UsersManager_FirstSiteInlineHelp")},null,8,["modelValue","disabled","title","inline-help"])):Object(a["createCommentVNode"])("",!0)]),Object(a["createElementVNode"])("div",null,[Object(a["createElementVNode"])("div",Xe,[Object(a["createElementVNode"])("div",Ke,["superuser"===e.currentUserRole||e.isAdd?(Object(a["openBlock"])(),Object(a["createBlock"])(l,{key:0,style:{position:"absolute",bottom:"0"},value:e.saveButtonLabel,disabled:e.isAdd&&(!e.firstSiteAccess||!e.firstSiteAccess.id),saving:e.isSavingUserInfo,onConfirm:t[9]||(t[9]=function(t){return e.saveUserInfo()})},null,8,["value","disabled","saving"])):Object(a["createCommentVNode"])("",!0)]),Object(a["createElementVNode"])("div",Qe,[e.isAdd?(Object(a["openBlock"])(),Object(a["createElementBlock"])("div",Ze,[Object(a["createElementVNode"])("span",{class:"inline-help",innerHTML:e.$sanitize(e.translate("UsersManager_InviteSuccessNotification",[7]))},null,8,et)])):Object(a["createCommentVNode"])("",!0)])])]),e.isAdd?(Object(a["openBlock"])(),Object(a["createElementBlock"])("div",tt,[Object(a["createElementVNode"])("a",{href:"",class:"entityCancelLink",onClick:t[10]||(t[10]=Object(a["withModifiers"])((function(t){return e.onDoneEditing()}),["prevent"]))},Object(a["toDisplayString"])(e.translate("General_Cancel")),1)])):Object(a["createCommentVNode"])("",!0)])):Object(a["createCommentVNode"])("",!0),e.isAdd?Object(a["createCommentVNode"])("",!0):Object(a["withDirectives"])((Object(a["openBlock"])(),Object(a["createElementBlock"])("div",nt,[e.theUser.superuser_access?Object(a["createCommentVNode"])("",!0):(Object(a["openBlock"])(),Object(a["createElementBlock"])("div",st,[Object(a["createVNode"])(c,{"user-login":e.theUser.login,onUserHasAccessDetected:t[11]||(t[11]=function(t){return e.userHasAccess=t.hasAccess}),onAccessChanged:t[12]||(t[12]=function(t){return e.isUserModified=!0}),"access-levels":e.accessLevels,"filter-access-levels":e.filterAccessLevels},null,8,["user-login","access-levels","filter-access-levels"])])),e.theUser.superuser_access?(Object(a["openBlock"])(),Object(a["createElementBlock"])("div",rt,Object(a["toDisplayString"])(e.translate("UsersManager_SuperUsersPermissionsNotice")),1)):Object(a["createCommentVNode"])("",!0)],512)),[[a["vShow"],"permissions"===e.activeTab]]),"superuser"!==e.activeTab||"superuser"!==e.currentUserRole||e.isAdd?Object(a["createCommentVNode"])("",!0):(Object(a["openBlock"])(),Object(a["createElementBlock"])("div",it,[Object(a["createElementVNode"])("p",null,Object(a["toDisplayString"])(e.translate("UsersManager_SuperUserIntro1")),1),Object(a["createElementVNode"])("p",null,[Object(a["createElementVNode"])("strong",null,Object(a["toDisplayString"])(e.translate("UsersManager_SuperUserIntro2")),1)]),Object(a["createElementVNode"])("div",null,[Object(a["createVNode"])(o,{modelValue:e.superUserAccessChecked,"onUpdate:modelValue":t[13]||(t[13]=function(t){return e.superUserAccessChecked=t}),onClick:t[14]||(t[14]=function(t){return e.confirmSuperUserChange()}),disabled:e.isSavingUserInfo,uicontrol:"checkbox",name:"superuser_access",title:e.translate("UsersManager_HasSuperUserAccess")},null,8,["modelValue","disabled","title"])]),Object(a["createElementVNode"])("div",at,[Object(a["createElementVNode"])("div",ot,[Object(a["createElementVNode"])("h2",null,Object(a["toDisplayString"])(e.translate("UsersManager_AreYouSure")),1),e.theUser.superuser_access?(Object(a["openBlock"])(),Object(a["createElementBlock"])("p",lt,Object(a["toDisplayString"])(e.translate("UsersManager_RemoveSuperuserAccessConfirm")),1)):Object(a["createCommentVNode"])("",!0),e.theUser.superuser_access?Object(a["createCommentVNode"])("",!0):(Object(a["openBlock"])(),Object(a["createElementBlock"])("p",ct,Object(a["toDisplayString"])(e.translate("UsersManager_AddSuperuserAccessConfirm")),1)),Object(a["createElementVNode"])("div",null,[Object(a["createVNode"])(o,{modelValue:e.passwordConfirmationForSuperUser,"onUpdate:modelValue":t[15]||(t[15]=function(t){return e.passwordConfirmationForSuperUser=t}),uicontrol:"password",name:"currentUserPasswordForSuperUser",autocomplete:!1,"full-width":!0,title:e.translate("UsersManager_YourCurrentPassword")},null,8,["modelValue","title"])])]),Object(a["createElementVNode"])("div",dt,[Object(a["createElementVNode"])("a",{href:"",class:"modal-action modal-close btn",onClick:t[16]||(t[16]=Object(a["withModifiers"])((function(t){return e.toggleSuperuserAccess()}),["prevent"])),style:{"margin-right":"3.5px"}},Object(a["toDisplayString"])(e.translate("General_Yes")),1),Object(a["createElementVNode"])("a",{href:"",class:"modal-action modal-close modal-no",onClick:t[17]||(t[17]=Object(a["withModifiers"])((function(t){e.setSuperUserAccessChecked(),e.passwordConfirmationForSuperUser=""}),["prevent"]))},Object(a["toDisplayString"])(e.translate("General_No")),1)])],512)])),"superuser"!==e.currentUserRole||e.isAdd?Object(a["createCommentVNode"])("",!0):Object(a["withDirectives"])((Object(a["openBlock"])(),Object(a["createElementBlock"])("div",ut,[Object(a["createElementVNode"])("p",null,Object(a["toDisplayString"])(e.translate("UsersManager_ResetTwoFactorAuthenticationInfo")),1),Object(a["createElementVNode"])("div",mt,[Object(a["createVNode"])(l,{saving:e.isResetting2FA,onConfirm:t[18]||(t[18]=function(t){return e.confirmReset2FA()}),value:e.translate("UsersManager_ResetTwoFactorAuthentication")},null,8,["saving","value"])]),Object(a["createElementVNode"])("div",bt,[Object(a["createElementVNode"])("div",pt,[Object(a["createElementVNode"])("h2",null,Object(a["toDisplayString"])(e.translate("UsersManager_AreYouSure")),1),Object(a["createElementVNode"])("p",null,Object(a["toDisplayString"])(e.translate("UsersManager_ConfirmWithPassword")),1),Object(a["createElementVNode"])("div",null,[Object(a["createVNode"])(o,{modelValue:e.passwordConfirmation,"onUpdate:modelValue":t[19]||(t[19]=function(t){return e.passwordConfirmation=t}),uicontrol:"password",name:"currentUserPasswordTwoFa",autocomplete:!1,"full-width":!0,title:e.translate("UsersManager_YourCurrentPassword")},null,8,["modelValue","title"])])]),Object(a["createElementVNode"])("div",gt,[Object(a["createElementVNode"])("a",{href:"",class:"modal-action modal-close btn",onClick:t[20]||(t[20]=Object(a["withModifiers"])((function(t){return e.reset2FA()}),["prevent"])),style:{"margin-right":"3.5px"}},Object(a["toDisplayString"])(e.translate("General_Yes")),1),Object(a["createElementVNode"])("a",{href:"",class:"modal-action modal-close modal-no",onClick:t[21]||(t[21]=function(t){t.preventDefault(),e.passwordConfirmation=""})},Object(a["toDisplayString"])(e.translate("General_No")),1)])],512)],512)),[[a["vShow"],"2fa"===e.activeTab]])])],512),[[u]]),Object(a["createElementVNode"])("div",ft,[Object(a["createElementVNode"])("div",ht,[Object(a["createElementVNode"])("h2",{innerHTML:e.$sanitize(e.changePasswordTitle)},null,8,jt),Object(a["createElementVNode"])("p",null,Object(a["toDisplayString"])(e.translate("UsersManager_ConfirmWithPassword")),1),Object(a["createElementVNode"])("div",null,[Object(a["createVNode"])(o,{modelValue:e.passwordConfirmation,"onUpdate:modelValue":t[22]||(t[22]=function(t){return e.passwordConfirmation=t}),uicontrol:"password",name:"currentUserPasswordChangePwd",autocomplete:!1,"full-width":!0,title:e.translate("UsersManager_YourCurrentPassword")},null,8,["modelValue","title"])])]),Object(a["createElementVNode"])("div",Ot,[Object(a["createElementVNode"])("a",{href:"",class:"modal-action modal-close btn",onClick:t[23]||(t[23]=Object(a["withModifiers"])((function(t){return e.updateUser()}),["prevent"]))},Object(a["toDisplayString"])(e.translate("General_Yes")),1),Object(a["createElementVNode"])("a",{href:"",class:"modal-action modal-close modal-no",onClick:t[24]||(t[24]=function(t){t.preventDefault(),e.passwordConfirmation=""})},Object(a["toDisplayString"])(e.translate("General_No")),1)])],512)]})),_:1},8,["class","content-title"])}var Ct={login:"",superuser_access:!1,uses_2fa:!1,password:"",email:"",invite_status:""},Nt=window,St=Nt.$,Ut=Object(a["defineComponent"])({props:{user:Object,currentUserRole:{type:String,required:!0},accessLevels:{type:Array,required:!0},filterAccessLevels:{type:Array,required:!0},initialSiteId:{type:[String,Number],required:!0},initialSiteName:{type:String,required:!0}},components:{ContentBlock:i["ContentBlock"],Field:f["Field"],SaveButton:f["SaveButton"],UserPermissionsEdit:He},directives:{Form:f["Form"]},data:function(){return{theUser:this.user||Object.assign({},Ct),activeTab:"basic",permissionsForIdSite:1,isSavingUserInfo:!1,userHasAccess:!0,firstSiteAccess:{id:this.initialSiteId,name:this.initialSiteName},isUserModified:!1,passwordConfirmation:"",isPasswordModified:!1,superUserAccessChecked:null,passwordConfirmationForSuperUser:"",isResetting2FA:!1,isShowingPasswordConfirm:!1}},emits:["done","updated"],watch:{user:function(e){this.onUserChange(e)}},created:function(){this.onUserChange(this.user)},methods:{onUserChange:function(e){this.theUser=e||Object.assign({},Ct),this.theUser.password||this.resetPasswordVar(),this.setSuperUserAccessChecked()},confirmSuperUserChange:function(){St(this.$refs.superUserConfirmModal).modal({dismissible:!1}).modal("open")},confirmReset2FA:function(){St(this.$refs.twofaConfirmModal).modal({dismissible:!1}).modal("open")},toggleSuperuserAccess:function(){var e=this;this.isSavingUserInfo=!0,i["AjaxHelper"].post({method:"UsersManager.setSuperUserAccess"},{userLogin:this.theUser.login,hasSuperUserAccess:this.theUser.superuser_access?"0":"1",passwordConfirmation:this.passwordConfirmationForSuperUser}).then((function(){e.theUser.superuser_access=!e.theUser.superuser_access})).catch((function(){})).then((function(){e.isSavingUserInfo=!1,e.isUserModified=!0,e.passwordConfirmationForSuperUser="",e.setSuperUserAccessChecked()}))},saveUserInfo:function(){var e=this;return Promise.resolve().then((function(){return e.isAdd?e.createUser():e.confirmUserChange()})).then((function(){e.$emit("updated",{user:Object(a["readonly"])(e.theUser)})}))},createUser:function(){var e=this;return this.isSavingUserInfo=!0,i["AjaxHelper"].post({method:"UsersManager.inviteUser"},{userLogin:this.theUser.login,email:this.theUser.email,initialIdSite:this.firstSiteAccess?this.firstSiteAccess.id:void 0}).catch((function(t){throw e.isSavingUserInfo=!1,t})).then((function(){e.firstSiteAccess=null,e.isSavingUserInfo=!1,e.isUserModified=!0,e.theUser.invite_status="pending",e.resetPasswordVar(),e.showUserCreatedNotification()}))},resetPasswordVar:function(){this.isAdd||(this.theUser.password="XXXXXXXX")},confirmUserChange:function(){var e=this;this.passwordConfirmation="",this.isShowingPasswordConfirm=!0;var t=function(t){var n=t.keyCode?t.keyCode:t.which;13===n&&(St(e.$refs.changePasswordModal).modal("close"),e.updateUser())};St(this.$refs.changePasswordModal).modal({dismissible:!1,onOpenEnd:function(){e.isShowingPasswordConfirm=!1,St(".modal.open #currentUserPasswordChangePwd").focus().off("keypress").keypress(t)}}).modal("open")},showUserSavedNotification:function(){i["NotificationsStore"].show({message:Object(i["translate"])("General_YourChangesHaveBeenSaved"),context:"success",type:"toast"})},showUserCreatedNotification:function(){i["NotificationsStore"].show({message:Object(i["translate"])("UsersManager_InviteSuccess"),context:"success",type:"toast"})},reset2FA:function(){var e=this;return this.isResetting2FA=!0,i["AjaxHelper"].post({method:"TwoFactorAuth.resetTwoFactorAuth",userLogin:this.theUser.login,passwordConfirmation:this.passwordConfirmation}).catch((function(t){throw e.isResetting2FA=!1,t})).then((function(){e.isResetting2FA=!1,e.theUser.uses_2fa=!1,e.activeTab="basic",e.showUserSavedNotification()})).finally((function(){e.passwordConfirmation=""}))},updateUser:function(){var e=this;return this.isSavingUserInfo=!0,i["AjaxHelper"].post({method:"UsersManager.updateUser"},{userLogin:this.theUser.login,password:this.isPasswordModified&&this.theUser.password?this.theUser.password:void 0,passwordConfirmation:this.passwordConfirmation?this.passwordConfirmation:void 0,email:this.theUser.email}).then((function(){e.isSavingUserInfo=!1,e.passwordConfirmation="",e.isUserModified=!0,e.isPasswordModified=!1,e.resetPasswordVar(),e.showUserSavedNotification()})).catch((function(){e.isSavingUserInfo=!1,e.passwordConfirmation=""}))},setSuperUserAccessChecked:function(){this.superUserAccessChecked=!!this.theUser.superuser_access},onDoneEditing:function(){this.$emit("done",{isUserModified:this.isUserModified})}},computed:{formTitle:function(){return this.isAdd?Object(i["translate"])("UsersManager_InviteNewUser"):Object(i["translate"])("UsersManager_EditUser")},saveButtonLabel:function(){return this.isAdd?Object(i["translate"])("UsersManager_InviteUser"):Object(i["translate"])("UsersManager_SaveBasicInfo")},isPending:function(){return!this.user||!("pending"!==this.user.invite_status&&!Number.isInteger(this.user.invite_status))},isAdd:function(){return!this.user},changePasswordTitle:function(){return Object(i["translate"])("UsersManager_AreYouSureChangeDetails","".concat(this.theUser.login,""))}}});Ut.render=vt;var yt=Ut,Et=(Object(i["createAngularJsAdapter"])({component:yt,scope:{user:{angularJsBind:"<"},onDoneEditing:{angularJsBind:"&",vue:"done"},currentUserRole:{angularJsBind:"<"},accessLevels:{angularJsBind:"<"},filterAccessLevels:{angularJsBind:"<"},initialSiteId:{angularJsBind:"<"},initialSiteName:{angularJsBind:"<"},onUpdated:{angularJsBind:"&",vue:"updated"}},directiveName:"piwikUserEditForm",restrict:"E"}),{class:"userListFilters row"}),Vt={class:"col s12 m12 l8"},kt={class:"input-field col s12 m3 l3"},At={id:"user-list-bulk-actions",class:"dropdown-content"},wt={class:"dropdown-trigger","data-target":"bulk-set-access"},Tt={id:"bulk-set-access",class:"dropdown-content"},Mt=["onClick"],Bt={key:0},_t={class:"input-field col s12 m3 l3"},Dt={class:"permissions-for-selector"},Lt={class:"input-field col s12 m3 l3"},Rt={class:"input-field col s12 m3 l3"},xt={key:0,class:"input-field col s12 m12 l4 users-list-pagination-container"},Pt={class:"usersListPagination"},Ft={class:"pointer"},Ht={class:"counter"},It={class:"pointer"},Jt={key:0,class:"roles-help-notification"},qt=["innerHTML"],$t={class:"select-cell"},Gt={class:"checkbox-container"},zt=Object(a["createElementVNode"])("span",null,null,-1),Wt={class:"first"},Yt={class:"role_header"},Xt={style:{"margin-right":"3.5px"}},Kt=Object(a["createElementVNode"])("span",{class:"icon-help"},null,-1),Qt=[Kt],Zt={key:0},en=["title"],tn={key:2},nn={class:"actions-cell-header"},sn={key:0,class:"select-all-row"},rn={colspan:"8"},an={key:0},on=["innerHTML"],ln=["innerHTML"],cn={key:1},dn=["innerHTML"],un=["innerHTML"],mn=["id"],bn={class:"select-cell"},pn={class:"checkbox-container"},gn=["id","onUpdate:modelValue"],fn=Object(a["createElementVNode"])("span",null,null,-1),hn={id:"userLogin"},jn={class:"access-cell"},On={key:0,id:"email"},vn={key:1,id:"twofa"},Cn={key:0,class:"icon-ok"},Nn={key:1,class:"icon-close"},Sn={key:2,id:"last_seen"},Un={id:"status"},yn=["title"],En={class:"center actions-cell"},Vn=["onClick"],kn=Object(a["createElementVNode"])("span",{class:"icon-email"},null,-1),An=[kn],wn=["onClick"],Tn=Object(a["createElementVNode"])("span",{class:"icon-edit"},null,-1),Mn=[Tn],Bn=["onClick"],_n=Object(a["createElementVNode"])("span",{class:"icon-delete"},null,-1),Dn=[_n],Ln={class:"delete-user-confirm-modal modal",ref:"deleteUserConfirmModal"},Rn={class:"modal-content"},xn=["innerHTML"],Pn=["innerHTML"],Fn={class:"modal-footer"},Hn={class:"change-user-role-confirm-modal modal",ref:"changeUserRoleConfirmModal"},In={class:"modal-content"},Jn=["innerHTML"],qn={key:1},$n=["innerHTML"],Gn=["innerHTML"],zn={class:"modal-footer"},Wn={class:"resend-invite-confirm-modal modal",ref:"resendInviteConfirmModal"},Yn={class:"modal-content"},Xn=["innerHTML"],Kn={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(i["createAngularJsAdapter"])({component:yt,scope:{user:{angularJsBind:"<"},onDoneEditing:{angularJsBind:"&",vue:"done"},currentUserRole:{angularJsBind:"<"},accessLevels:{angularJsBind:"<"},filterAccessLevels:{angularJsBind:"<"},initialSiteId:{angularJsBind:"<"},initialSiteName:{angularJsBind:"<"},onUpdated:{angularJsBind:"&",vue:"updated"}},directiveName:"piwikUserEditForm",restrict:"E"});Object(a["pushScopeId"])("data-v-2ff6c088");var Et={class:"userListFilters row"},Vt={class:"col s12 m12 l6"},kt={class:"input-field col s12 m4 l4"},At={id:"user-list-bulk-actions",class:"dropdown-content"},wt={class:"dropdown-trigger","data-target":"bulk-set-access"},Tt={id:"bulk-set-access",class:"dropdown-content"},Mt=["onClick"],Bt={key:0},_t={class:"input-field col s12 m4 l4"},Dt={class:"permissions-for-selector"},Lt={class:"input-field col s12 m4 l4"},Rt={key:0,class:"input-field col s12 m12 l6 users-list-pagination-container"},xt={class:"usersListPagination"},Pt={class:"pointer"},Ht={class:"counter"},Ft={class:"pointer"},It={key:0,class:"roles-help-notification"},Jt=["innerHTML"],qt={class:"select-cell"},$t={class:"checkbox-container"},Gt=Object(a["createElementVNode"])("span",null,null,-1),zt={class:"first"},Wt={class:"role_header"},Yt={style:{"margin-right":"3.5px"}},Xt=Object(a["createElementVNode"])("span",{class:"icon-help"},null,-1),Kt=[Xt],Qt={key:0},Zt=["title"],en={key:2},tn={class:"actions-cell-header"},nn={key:0,class:"select-all-row"},sn={colspan:"8"},rn={key:0},an=["innerHTML"],on=["innerHTML"],ln={key:1},cn=["innerHTML"],dn=["innerHTML"],un=["id"],mn={class:"select-cell"},bn={class:"checkbox-container"},pn=["id","onUpdate:modelValue"],gn=Object(a["createElementVNode"])("span",null,null,-1),hn={id:"userLogin"},fn={class:"access-cell"},jn={key:0,id:"email"},On={key:1,id:"twofa"},vn={key:0,class:"icon-ok"},Cn={key:1,class:"icon-close"},Nn={key:2,id:"last_seen"},Sn={id:"status"},Un={class:"center actions-cell"},yn=["onClick"],En=Object(a["createElementVNode"])("span",{class:"icon-email"},null,-1),Vn=[En],kn=["onClick"],An=Object(a["createElementVNode"])("span",{class:"icon-edit"},null,-1),wn=[An],Tn=["onClick"],Mn=Object(a["createElementVNode"])("span",{class:"icon-delete"},null,-1),Bn=[Mn],_n={class:"delete-user-confirm-modal modal",ref:"deleteUserConfirmModal"},Dn={class:"modal-content"},Ln=["innerHTML"],Rn=["innerHTML"],xn={class:"modal-footer"},Pn={class:"change-user-role-confirm-modal modal",ref:"changeUserRoleConfirmModal"},Hn={class:"modal-content"},Fn=["innerHTML"],In={key:1},Jn=["innerHTML"],qn=["innerHTML"],$n={class:"modal-footer"},Gn={class:"resend-invite-confirm-modal modal",ref:"resendInviteConfirmModal"},zn={class:"modal-content"},Wn=["innerHTML"],Yn={class:"modal-footer"};function Xn(e,t,n,s,r,i){var o=Object(a["resolveComponent"])("Field"),l=Object(a["resolveComponent"])("ActivityIndicator"),c=Object(a["resolveComponent"])("Notification"),d=Object(a["resolveComponent"])("ContentBlock"),u=Object(a["resolveDirective"])("dropdown-menu"),m=Object(a["resolveDirective"])("content-table");return Object(a["openBlock"])(),Object(a["createElementBlock"])("div",{class:Object(a["normalizeClass"])(["pagedUsersList",{loading:e.isLoadingUsers}])},[Object(a["createElementVNode"])("div",Et,[Object(a["createElementVNode"])("div",Vt,[Object(a["createElementVNode"])("div",kt,[Object(a["withDirectives"])(Object(a["createElementVNode"])("a",{class:Object(a["normalizeClass"])(["dropdown-trigger btn bulk-actions",{disabled:e.isBulkActionsDisabled}]),href:"","data-target":"user-list-bulk-actions"},[Object(a["createTextVNode"])(Object(a["toDisplayString"])(e.translate("UsersManager_BulkActions")),1)],2),[[u]]),Object(a["createElementVNode"])("ul",At,[Object(a["createElementVNode"])("li",null,[Object(a["withDirectives"])(Object(a["createElementVNode"])("a",wt,[Object(a["createTextVNode"])(Object(a["toDisplayString"])(e.translate("UsersManager_SetPermission")),1)],512),[[u]]),Object(a["createElementVNode"])("ul",Tt,[(Object(a["openBlock"])(!0),Object(a["createElementBlock"])(a["Fragment"],null,Object(a["renderList"])(e.bulkActionAccessLevels,(function(t){return Object(a["openBlock"])(),Object(a["createElementBlock"])("li",{key:t.key},[Object(a["createElementVNode"])("a",{href:"",onClick:Object(a["withModifiers"])((function(n){e.userToChange=null,e.roleToChangeTo=t.key,e.showAccessChangeConfirm()}),["prevent"])},Object(a["toDisplayString"])(t.value),9,Mt)])})),128))])]),Object(a["createElementVNode"])("li",null,[Object(a["createElementVNode"])("a",{href:"",onClick:t[0]||(t[0]=Object(a["withModifiers"])((function(t){e.userToChange=null,e.roleToChangeTo="noaccess",e.showAccessChangeConfirm()}),["prevent"]))},Object(a["toDisplayString"])(e.translate("UsersManager_RemovePermissions")),1)]),"superuser"===e.currentUserRole?(Object(a["openBlock"])(),Object(a["createElementBlock"])("li",Bt,[Object(a["createElementVNode"])("a",{href:"",onClick:t[1]||(t[1]=Object(a["withModifiers"])((function(t){return e.showDeleteConfirm()}),["prevent"]))},Object(a["toDisplayString"])(e.translate("UsersManager_DeleteUsers")),1)])):Object(a["createCommentVNode"])("",!0)])]),Object(a["createElementVNode"])("div",_t,[Object(a["createElementVNode"])("div",Dt,[Object(a["createVNode"])(o,{"model-value":e.userTextFilter,"onUpdate:modelValue":t[2]||(t[2]=function(t){return e.onUserTextFilterChange(t)}),name:"user-text-filter",uicontrol:"text","full-width":!0,placeholder:e.translate("UsersManager_UserSearch")},null,8,["model-value","placeholder"])])]),Object(a["createElementVNode"])("div",Lt,[Object(a["createElementVNode"])("div",null,[Object(a["createVNode"])(o,{"model-value":e.accessLevelFilter,"onUpdate:modelValue":t[3]||(t[3]=function(t){e.accessLevelFilter=t,e.changeSearch({filter_access:e.accessLevelFilter,offset:0})}),name:"access-level-filter",uicontrol:"select",options:e.filterAccessLevels,"full-width":!0,placeholder:e.translate("UsersManager_FilterByAccess")},null,8,["model-value","options","placeholder"])])])]),e.totalEntries>e.searchParams.limit?(Object(a["openBlock"])(),Object(a["createElementBlock"])("div",Rt,[Object(a["createElementVNode"])("div",xt,[Object(a["createElementVNode"])("a",{class:Object(a["normalizeClass"])(["btn prev",{disabled:e.searchParams.offset<=0}]),onClick:t[4]||(t[4]=Object(a["withModifiers"])((function(t){return e.gotoPreviousPage()}),["prevent"]))},[Object(a["createElementVNode"])("span",Pt,"« "+Object(a["toDisplayString"])(e.translate("General_Previous")),1)],2),Object(a["createElementVNode"])("div",Ht,[Object(a["createElementVNode"])("span",{class:Object(a["normalizeClass"])({visibility:e.isLoadingUsers?"hidden":"visible"})},Object(a["toDisplayString"])(e.translate("General_Pagination",e.paginationLowerBound,e.paginationUpperBound,e.totalEntries)),3),Object(a["createVNode"])(l,{loading:e.isLoadingUsers},null,8,["loading"])]),Object(a["createElementVNode"])("a",{class:Object(a["normalizeClass"])(["btn next",{disabled:e.searchParams.offset+e.searchParams.limit>=e.totalEntries}]),onClick:t[5]||(t[5]=Object(a["withModifiers"])((function(t){return e.gotoNextPage()}),["prevent"]))},[Object(a["createElementVNode"])("span",Ft,Object(a["toDisplayString"])(e.translate("General_Next"))+" »",1)],2)])])):Object(a["createCommentVNode"])("",!0)]),e.isRoleHelpToggled?(Object(a["openBlock"])(),Object(a["createElementBlock"])("div",It,[Object(a["createVNode"])(c,{context:"info",type:"persistent",noclear:!0},{default:Object(a["withCtx"])((function(){return[Object(a["createElementVNode"])("span",{innerHTML:e.$sanitize(e.rolesHelpText)},null,8,Jt)]})),_:1})])):Object(a["createCommentVNode"])("",!0),Object(a["createVNode"])(d,null,{default:Object(a["withCtx"])((function(){return[Object(a["withDirectives"])(Object(a["createElementVNode"])("table",{id:"manageUsersTable",class:Object(a["normalizeClass"])({loading:e.isLoadingUsers})},[Object(a["createElementVNode"])("thead",null,[Object(a["createElementVNode"])("tr",null,[Object(a["createElementVNode"])("th",qt,[Object(a["createElementVNode"])("span",$t,[Object(a["createElementVNode"])("label",null,[Object(a["withDirectives"])(Object(a["createElementVNode"])("input",{type:"checkbox",id:"paged_users_select_all",checked:"checked","onUpdate:modelValue":t[6]||(t[6]=function(t){return e.isAllCheckboxSelected=t}),onChange:t[7]||(t[7]=function(t){return e.onAllCheckboxChange()})},null,544),[[a["vModelCheckbox"],e.isAllCheckboxSelected]]),Gt])])]),Object(a["createElementVNode"])("th",zt,Object(a["toDisplayString"])(e.translate("UsersManager_Username")),1),Object(a["createElementVNode"])("th",Wt,[Object(a["createElementVNode"])("span",Yt,Object(a["toDisplayString"])(e.translate("UsersManager_RoleFor")),1),Object(a["createElementVNode"])("a",{href:"",class:Object(a["normalizeClass"])(["helpIcon",{sticky:e.isRoleHelpToggled}]),onClick:t[8]||(t[8]=Object(a["withModifiers"])((function(t){return e.isRoleHelpToggled=!e.isRoleHelpToggled}),["prevent"]))},Kt,2),Object(a["createElementVNode"])("div",null,[Object(a["createVNode"])(o,{class:"permissions-for-selector","model-value":e.permissionsForSite,"onUpdate:modelValue":t[9]||(t[9]=function(t){e.onPermissionsForUpdate(t)}),uicontrol:"site","ui-control-attributes":{onlySitesWithAdminAccess:"superuser"!==e.currentUserRole}},null,8,["model-value","ui-control-attributes"])])]),"superuser"===e.currentUserRole?(Object(a["openBlock"])(),Object(a["createElementBlock"])("th",Qt,Object(a["toDisplayString"])(e.translate("UsersManager_Email")),1)):Object(a["createCommentVNode"])("",!0),"superuser"===e.currentUserRole?(Object(a["openBlock"])(),Object(a["createElementBlock"])("th",{key:1,title:e.translate("UsersManager_UsesTwoFactorAuthentication")},Object(a["toDisplayString"])(e.translate("UsersManager_2FA")),9,Zt)):Object(a["createCommentVNode"])("",!0),"superuser"===e.currentUserRole?(Object(a["openBlock"])(),Object(a["createElementBlock"])("th",en,Object(a["toDisplayString"])(e.translate("UsersManager_LastSeen")),1)):Object(a["createCommentVNode"])("",!0),Object(a["createElementVNode"])("th",null,Object(a["toDisplayString"])(e.translate("UsersManager_Status")),1),Object(a["createElementVNode"])("th",tn,[Object(a["createElementVNode"])("div",null,Object(a["toDisplayString"])(e.translate("General_Actions")),1)])])]),Object(a["createElementVNode"])("tbody",null,[e.isAllCheckboxSelected&&e.users.length&&e.users.length".concat(e.users.length,""))),style:{"margin-right":"3.5px"}},null,8,an),Object(a["createElementVNode"])("a",{class:"toggle-select-all-in-search",href:"#",onClick:t[10]||(t[10]=Object(a["withModifiers"])((function(t){return e.areAllResultsSelected=!e.areAllResultsSelected}),["prevent"])),innerHTML:e.$sanitize(e.translate("UsersManager_ClickToSelectAll","".concat(e.totalEntries,"")))},null,8,on)])),e.areAllResultsSelected?(Object(a["openBlock"])(),Object(a["createElementBlock"])("div",ln,[Object(a["createElementVNode"])("span",{innerHTML:e.$sanitize(e.translate("UsersManager_AllUsersAreSelected","".concat(e.totalEntries,""))),style:{"margin-right":"3.5px"}},null,8,cn),Object(a["createElementVNode"])("a",{class:"toggle-select-all-in-search",href:"#",onClick:t[11]||(t[11]=Object(a["withModifiers"])((function(t){return e.areAllResultsSelected=!e.areAllResultsSelected}),["prevent"])),innerHTML:e.$sanitize(e.translate("UsersManager_ClickToSelectDisplayedUsers","".concat(e.users.length,"")))},null,8,dn)])):Object(a["createCommentVNode"])("",!0)])])):Object(a["createCommentVNode"])("",!0),(Object(a["openBlock"])(!0),Object(a["createElementBlock"])(a["Fragment"],null,Object(a["renderList"])(e.users,(function(n,s){return Object(a["openBlock"])(),Object(a["createElementBlock"])("tr",{id:"row".concat(s),key:n.login},[Object(a["createElementVNode"])("td",mn,[Object(a["createElementVNode"])("span",bn,[Object(a["createElementVNode"])("label",null,[Object(a["withDirectives"])(Object(a["createElementVNode"])("input",{type:"checkbox",id:"paged_users_select_row".concat(s),"onUpdate:modelValue":function(t){return e.selectedRows[s]=t},onClick:t[12]||(t[12]=function(t){return e.onRowSelected()})},null,8,pn),[[a["vModelCheckbox"],e.selectedRows[s]]]),gn])])]),Object(a["createElementVNode"])("td",hn,Object(a["toDisplayString"])(n.login),1),Object(a["createElementVNode"])("td",fn,[Object(a["createElementVNode"])("div",null,[Object(a["createVNode"])(o,{"model-value":n.role,"onUpdate:modelValue":function(t){e.userToChange=n,e.roleToChangeTo=t,e.showAccessChangeConfirm()},disabled:"superuser"===n.role,uicontrol:"select",options:"anonymous"!==n.login?e.accessLevels:e.anonymousAccessLevels},null,8,["model-value","onUpdate:modelValue","disabled","options"])])]),"superuser"===e.currentUserRole?(Object(a["openBlock"])(),Object(a["createElementBlock"])("td",jn,Object(a["toDisplayString"])(n.email),1)):Object(a["createCommentVNode"])("",!0),"superuser"===e.currentUserRole?(Object(a["openBlock"])(),Object(a["createElementBlock"])("td",On,[n.uses_2fa?(Object(a["openBlock"])(),Object(a["createElementBlock"])("span",vn)):Object(a["createCommentVNode"])("",!0),n.uses_2fa?Object(a["createCommentVNode"])("",!0):(Object(a["openBlock"])(),Object(a["createElementBlock"])("span",Cn))])):Object(a["createCommentVNode"])("",!0),"superuser"===e.currentUserRole?(Object(a["openBlock"])(),Object(a["createElementBlock"])("td",Nn,Object(a["toDisplayString"])(n.last_seen?"".concat(n.last_seen," ago"):"-"),1)):Object(a["createCommentVNode"])("",!0),Object(a["createElementVNode"])("td",Sn,[Object(a["createElementVNode"])("span",{class:Object(a["normalizeClass"])(n.invite_status)},Object(a["toDisplayString"])(e.getInviteStatus(n.invite_status)),3)]),Object(a["createElementVNode"])("td",Un,["accept"!==n.invite_status?(Object(a["openBlock"])(),Object(a["createElementBlock"])("button",{key:0,class:"resend table-action",title:"Resend Invite",onClick:function(t){e.userToChange=n,e.showResendConfirm()}},Vn,8,yn)):Object(a["createCommentVNode"])("",!0),"anonymous"!==n.login?(Object(a["openBlock"])(),Object(a["createElementBlock"])("button",{key:1,class:"edituser table-action",title:"Edit",onClick:function(t){return e.$emit("editUser",{user:n})}},wn,8,kn)):Object(a["createCommentVNode"])("",!0),"superuser"===e.currentUserRole&&"anonymous"!==n.login?(Object(a["openBlock"])(),Object(a["createElementBlock"])("button",{key:2,class:"deleteuser table-action",title:"Delete",onClick:function(t){e.userToChange=n,e.showDeleteConfirm()}},Bn,8,Tn)):Object(a["createCommentVNode"])("",!0)])],8,un)})),128))])],2),[[m]])]})),_:1}),Object(a["createElementVNode"])("div",_n,[Object(a["createElementVNode"])("div",Dn,[e.userToChange?(Object(a["openBlock"])(),Object(a["createElementBlock"])("h3",{key:0,innerHTML:e.$sanitize(e.translate("UsersManager_DeleteUserConfirmSingle","".concat(e.userToChange.login,"")))},null,8,Ln)):Object(a["createCommentVNode"])("",!0),e.userToChange?Object(a["createCommentVNode"])("",!0):(Object(a["openBlock"])(),Object(a["createElementBlock"])("p",{key:1,innerHTML:e.$sanitize(e.translate("UsersManager_DeleteUserConfirmMultiple","".concat(e.affectedUsersCount,"")))},null,8,Rn))]),Object(a["createElementVNode"])("div",xn,[Object(a["createElementVNode"])("a",{href:"",class:"modal-action modal-close btn",onClick:t[13]||(t[13]=Object(a["withModifiers"])((function(t){return e.deleteRequestedUsers()}),["prevent"])),style:{"margin-right":"3.5px"}},Object(a["toDisplayString"])(e.translate("General_Yes")),1),Object(a["createElementVNode"])("a",{href:"",class:"modal-action modal-close modal-no",onClick:t[14]||(t[14]=Object(a["withModifiers"])((function(t){e.userToChange=null,e.roleToChangeTo=null}),["prevent"]))},Object(a["toDisplayString"])(e.translate("General_No")),1)])],512),Object(a["createElementVNode"])("div",Pn,[Object(a["createElementVNode"])("div",Hn,[e.userToChange?(Object(a["openBlock"])(),Object(a["createElementBlock"])("h3",{key:0,innerHTML:e.$sanitize(e.deleteUserPermConfirmSingleText)},null,8,Fn)):Object(a["createCommentVNode"])("",!0),e.userToChange&&"anonymous"===e.userToChange.login&&"view"===e.roleToChangeTo?(Object(a["openBlock"])(),Object(a["createElementBlock"])("h3",In,[Object(a["createElementVNode"])("em",null,[Object(a["createTextVNode"])(Object(a["toDisplayString"])(e.translate("General_Note"))+": ",1),Object(a["createElementVNode"])("span",{innerHTML:e.$sanitize(e.translate("UsersManager_AnonymousUserRoleChangeWarning","anonymous",e.getRoleDisplay(e.roleToChangeTo)))},null,8,Jn)])])):Object(a["createCommentVNode"])("",!0),e.userToChange?Object(a["createCommentVNode"])("",!0):(Object(a["openBlock"])(),Object(a["createElementBlock"])("p",{key:2,innerHTML:e.$sanitize(e.deleteUserPermConfirmMultipleText)},null,8,qn))]),Object(a["createElementVNode"])("div",$n,[Object(a["createElementVNode"])("a",{href:"",class:"modal-action modal-close btn",onClick:t[15]||(t[15]=Object(a["withModifiers"])((function(t){return e.changeUserRole()}),["prevent"])),style:{"margin-right":"3.5px"}},Object(a["toDisplayString"])(e.translate("General_Yes")),1),Object(a["createElementVNode"])("a",{href:"",class:"modal-action modal-close modal-no",onClick:t[16]||(t[16]=Object(a["withModifiers"])((function(t){e.userToChange=null,e.roleToChangeTo=null}),["prevent"]))},Object(a["toDisplayString"])(e.translate("General_No")),1)])],512),Object(a["createElementVNode"])("div",Gn,[Object(a["createElementVNode"])("div",zn,[e.userToChange?(Object(a["openBlock"])(),Object(a["createElementBlock"])("h3",{key:0,innerHTML:e.$sanitize(e.translate("UsersManager_ResendInviteConfirmSingle","".concat(e.userToChange.login,"")))},null,8,Wn)):Object(a["createCommentVNode"])("",!0)]),Object(a["createElementVNode"])("div",Yn,[Object(a["createElementVNode"])("a",{href:"",class:"modal-action modal-close btn",onClick:t[17]||(t[17]=Object(a["withModifiers"])((function(t){return e.resendRequestedUser()}),["prevent"])),style:{"margin-right":"3.5px"}},Object(a["toDisplayString"])(e.translate("General_Yes")),1),Object(a["createElementVNode"])("a",{href:"",class:"modal-action modal-close modal-no",onClick:t[18]||(t[18]=Object(a["withModifiers"])((function(t){e.userToChange=null,e.roleToChangeTo=null}),["prevent"]))},Object(a["toDisplayString"])(e.translate("General_No")),1)])],512)],2)}Object(a["popScopeId"])();var Kn=window,Qn=Kn.$,Zn=Object(a["defineComponent"])({props:{initialSiteId:{type:[String,Number],required:!0},initialSiteName:{type:String,required:!0},currentUserRole:String,isLoadingUsers:Boolean,accessLevels:{type:Array,required:!0},filterAccessLevels:{type:Array,required:!0},totalEntries:Number,users:{type:Array,required:!0},searchParams:{type:Object,required:!0}},components:{Field:h["Field"],ActivityIndicator:i["ActivityIndicator"],Notification:i["Notification"],ContentBlock:i["ContentBlock"]},directives:{DropdownMenu:i["DropdownMenu"],ContentTable:i["ContentTable"]},data:function(){return{areAllResultsSelected:!1,selectedRows:{},isAllCheckboxSelected:!1,isBulkActionsDisabled:!0,userToChange:null,roleToChangeTo:null,accessLevelFilter:null,isRoleHelpToggled:!1,userTextFilter:"",permissionsForSite:{id:this.initialSiteId,name:this.initialSiteName}}},emits:["editUser","changeUserRole","deleteUser","searchChange","resendInvite"],created:function(){this.onUserTextFilterChange=Object(i["debounce"])(this.onUserTextFilterChange,300)},watch:{users:function(){this.clearSelection()}},methods:{getInviteStatus:function(e){return"accept"===e?Object(i["translate"])("UsersManager_Active"):"pending"===e?Object(i["translate"])("UsersManager_Pending"):"expired"===e?Object(i["translate"])("UsersManager_Expired"):Object(i["translate"])("UsersManager_Decline")},onPermissionsForUpdate:function(e){this.permissionsForSite=e,this.changeSearch({idSite:this.permissionsForSite.id})},clearSelection:function(){this.selectedRows={},this.areAllResultsSelected=!1,this.isBulkActionsDisabled=!0,this.isAllCheckboxSelected=!1,this.userToChange=null},onAllCheckboxChange:function(){if(this.isAllCheckboxSelected){for(var e=0;e!==this.users.length;e+=1)this.selectedRows[e]=!0;this.isBulkActionsDisabled=!1}else this.clearSelection()},changeUserRole:function(){this.$emit("changeUserRole",{users:this.userOperationSubject,role:this.roleToChangeTo})},onRowSelected:function(){var e=this;setTimeout((function(){var t=e.selectedCount;e.isBulkActionsDisabled=0===t,e.isAllCheckboxSelected=t===e.users.length}))},deleteRequestedUsers:function(){this.$emit("deleteUser",{users:this.userOperationSubject})},resendRequestedUser:function(){this.$emit("resendInvite",{user:this.userToChange})},showDeleteConfirm:function(){Qn(this.$refs.deleteUserConfirmModal).modal({dismissible:!1}).modal("open")},showResendConfirm:function(){Qn(this.$refs.resendInviteConfirmModal).modal({dismissible:!1}).modal("open")},showAccessChangeConfirm:function(){Qn(this.$refs.changeUserRoleConfirmModal).modal({dismissible:!1}).modal("open")},getRoleDisplay:function(e){var t=null;return this.accessLevels.forEach((function(n){n.key===e&&(t=n.value)})),t},changeSearch:function(e){var t=Object.assign(Object.assign({},this.searchParams),e);this.$emit("searchChange",{params:t})},gotoPreviousPage:function(){this.changeSearch({offset:Math.max(0,this.searchParams.offset-this.searchParams.limit)})},gotoNextPage:function(){var e=this.searchParams.offset+this.searchParams.limit;e>=this.totalEntries||this.changeSearch({offset:e})},onUserTextFilterChange:function(e){this.userTextFilter=e,this.changeSearch({filter_search:e,offset:0})}},computed:{paginationLowerBound:function(){return this.searchParams.offset+1},paginationUpperBound:function(){if(null===this.totalEntries)return"?";var e=this.searchParams;return Math.min(e.offset+e.limit,this.totalEntries)},userOperationSubject:function(){return this.userToChange?[this.userToChange]:this.areAllResultsSelected?"all":this.selectedUsers},selectedUsers:function(){var e=this,t=this.users,n=[];return Object.keys(this.selectedRows).forEach((function(s){var r=parseInt(s,10);e.selectedRows[s]&&t[r]&&n.push(t[r])})),n},rolesHelpText:function(){var e="https://matomo.org/faq/general/faq_70/",t="https://matomo.org/faq/general/faq_69/";return Object(i["translate"])("UsersManager_RolesHelp",''),"",''),"")},affectedUsersCount:function(){return this.areAllResultsSelected?this.totalEntries||0:this.selectedCount},selectedCount:function(){var e=this,t=0;return Object.keys(this.selectedRows).forEach((function(n){e.selectedRows[n]&&(t+=1)})),t},deleteUserPermConfirmSingleText:function(){var e,t;return Object(i["translate"])("UsersManager_DeleteUserPermConfirmSingle","".concat((null===(e=this.userToChange)||void 0===e?void 0:e.login)||"",""),"".concat(this.getRoleDisplay(this.roleToChangeTo),""),"".concat(i["Matomo"].helper.htmlEntities((null===(t=this.permissionsForSite)||void 0===t?void 0:t.name)||""),""))},deleteUserPermConfirmMultipleText:function(){var e;return Object(i["translate"])("UsersManager_DeleteUserPermConfirmMultiple","".concat(this.affectedUsersCount,""),"".concat(this.getRoleDisplay(this.roleToChangeTo),""),"".concat(i["Matomo"].helper.htmlEntities((null===(e=this.permissionsForSite)||void 0===e?void 0:e.name)||""),""))},bulkActionAccessLevels:function(){return this.accessLevels.filter((function(e){return"noaccess"!==e.key&&"superuser"!==e.key}))},anonymousAccessLevels:function(){return this.accessLevels.filter((function(e){return"noaccess"===e.key||"view"===e.key}))}}});n("f2d6");Zn.render=Xn,Zn.__scopeId="data-v-2ff6c088";var es=Zn,ts=(Object(i["createAngularJsAdapter"])({component:es,scope:{onEditUser:{angularJsBind:"&",vue:"editUser"},onChangeUserRole:{angularJsBind:"&",vue:"changeUserRole"},onDeleteUser:{angularJsBind:"&",vue:"deleteUser"},onSearchChange:{angularJsBind:"&",vue:"searchChange"},onResendInvite:{angularJsBind:"&",vue:"resendInvite"},initialSiteId:{angularJsBind:"<"},initialSiteName:{angularJsBind:"<"},currentUserRole:{angularJsBind:"<"},isLoadingUsers:{angularJsBind:"<"},accessLevels:{angularJsBind:"<"},filterAccessLevels:{angularJsBind:"<"},totalEntries:{angularJsBind:"<"},users:{angularJsBind:"<"},searchParams:{angularJsBind:"<"}},directiveName:"piwikPagedUsersList",restrict:"E"}),{class:"usersManager"}),ns={key:0},ss={key:1},rs={class:"row add-user-container"},is={class:"col s12"},as={class:"input-field",style:{"margin-right":"3.5px"}},os={key:0,class:"input-field"},ls={key:0},cs={class:"add-existing-user-modal modal",ref:"addExistingUserModal"},ds={class:"modal-content"},us={class:"modal-footer"}; + */function Qn(e,t,n,s,r,i){var o=Object(a["resolveComponent"])("Field"),l=Object(a["resolveComponent"])("ActivityIndicator"),c=Object(a["resolveComponent"])("Notification"),d=Object(a["resolveComponent"])("ContentBlock"),u=Object(a["resolveDirective"])("dropdown-menu"),m=Object(a["resolveDirective"])("content-table");return Object(a["openBlock"])(),Object(a["createElementBlock"])("div",{class:Object(a["normalizeClass"])(["pagedUsersList",{loading:e.isLoadingUsers}])},[Object(a["createElementVNode"])("div",Et,[Object(a["createElementVNode"])("div",Vt,[Object(a["createElementVNode"])("div",kt,[Object(a["withDirectives"])(Object(a["createElementVNode"])("a",{class:Object(a["normalizeClass"])(["dropdown-trigger btn bulk-actions",{disabled:e.isBulkActionsDisabled}]),href:"","data-target":"user-list-bulk-actions"},[Object(a["createTextVNode"])(Object(a["toDisplayString"])(e.translate("UsersManager_BulkActions")),1)],2),[[u]]),Object(a["createElementVNode"])("ul",At,[Object(a["createElementVNode"])("li",null,[Object(a["withDirectives"])(Object(a["createElementVNode"])("a",wt,[Object(a["createTextVNode"])(Object(a["toDisplayString"])(e.translate("UsersManager_SetPermission")),1)],512),[[u]]),Object(a["createElementVNode"])("ul",Tt,[(Object(a["openBlock"])(!0),Object(a["createElementBlock"])(a["Fragment"],null,Object(a["renderList"])(e.bulkActionAccessLevels,(function(t){return Object(a["openBlock"])(),Object(a["createElementBlock"])("li",{key:t.key},[Object(a["createElementVNode"])("a",{href:"",onClick:Object(a["withModifiers"])((function(n){e.userToChange=null,e.roleToChangeTo=t.key,e.showAccessChangeConfirm()}),["prevent"])},Object(a["toDisplayString"])(t.value),9,Mt)])})),128))])]),Object(a["createElementVNode"])("li",null,[Object(a["createElementVNode"])("a",{href:"",onClick:t[0]||(t[0]=Object(a["withModifiers"])((function(t){e.userToChange=null,e.roleToChangeTo="noaccess",e.showAccessChangeConfirm()}),["prevent"]))},Object(a["toDisplayString"])(e.translate("UsersManager_RemovePermissions")),1)]),"superuser"===e.currentUserRole?(Object(a["openBlock"])(),Object(a["createElementBlock"])("li",Bt,[Object(a["createElementVNode"])("a",{href:"",onClick:t[1]||(t[1]=Object(a["withModifiers"])((function(t){return e.showDeleteConfirm()}),["prevent"]))},Object(a["toDisplayString"])(e.translate("UsersManager_DeleteUsers")),1)])):Object(a["createCommentVNode"])("",!0)])]),Object(a["createElementVNode"])("div",_t,[Object(a["createElementVNode"])("div",Dt,[Object(a["createVNode"])(o,{"model-value":e.userTextFilter,"onUpdate:modelValue":t[2]||(t[2]=function(t){return e.onUserTextFilterChange(t)}),name:"user-text-filter",uicontrol:"text","full-width":!0,placeholder:e.translate("UsersManager_UserSearch")},null,8,["model-value","placeholder"])])]),Object(a["createElementVNode"])("div",Lt,[Object(a["createElementVNode"])("div",null,[Object(a["createVNode"])(o,{"model-value":e.accessLevelFilter,"onUpdate:modelValue":t[3]||(t[3]=function(t){e.accessLevelFilter=t,e.changeSearch({filter_access:e.accessLevelFilter,offset:0})}),name:"access-level-filter",uicontrol:"select",options:e.filterAccessLevels,"full-width":!0,placeholder:e.translate("UsersManager_FilterByAccess")},null,8,["model-value","options","placeholder"])])]),Object(a["createElementVNode"])("div",Rt,[Object(a["createElementVNode"])("div",null,[Object(a["createVNode"])(o,{"model-value":e.statusLevelFilter,"onUpdate:modelValue":t[4]||(t[4]=function(t){e.statusLevelFilter=t,e.changeSearch({filter_status:e.statusLevelFilter,offset:0})}),name:"status-level-filter",uicontrol:"select",options:e.filterStatusLevels,"full-width":!0,placeholder:e.translate("UsersManager_FilterByStatus")},null,8,["model-value","options","placeholder"])])])]),e.totalEntries>e.searchParams.limit?(Object(a["openBlock"])(),Object(a["createElementBlock"])("div",xt,[Object(a["createElementVNode"])("div",Pt,[Object(a["createElementVNode"])("a",{class:Object(a["normalizeClass"])(["btn prev",{disabled:e.searchParams.offset<=0}]),onClick:t[5]||(t[5]=Object(a["withModifiers"])((function(t){return e.gotoPreviousPage()}),["prevent"]))},[Object(a["createElementVNode"])("span",Ft,"« "+Object(a["toDisplayString"])(e.translate("General_Previous")),1)],2),Object(a["createElementVNode"])("div",Ht,[Object(a["createElementVNode"])("span",{class:Object(a["normalizeClass"])({visibility:e.isLoadingUsers?"hidden":"visible"})},Object(a["toDisplayString"])(e.translate("General_Pagination",e.paginationLowerBound,e.paginationUpperBound,e.totalEntries)),3),Object(a["createVNode"])(l,{loading:e.isLoadingUsers},null,8,["loading"])]),Object(a["createElementVNode"])("a",{class:Object(a["normalizeClass"])(["btn next",{disabled:e.searchParams.offset+e.searchParams.limit>=e.totalEntries}]),onClick:t[6]||(t[6]=Object(a["withModifiers"])((function(t){return e.gotoNextPage()}),["prevent"]))},[Object(a["createElementVNode"])("span",It,Object(a["toDisplayString"])(e.translate("General_Next"))+" »",1)],2)])])):Object(a["createCommentVNode"])("",!0)]),e.isRoleHelpToggled?(Object(a["openBlock"])(),Object(a["createElementBlock"])("div",Jt,[Object(a["createVNode"])(c,{context:"info",type:"persistent",noclear:!0},{default:Object(a["withCtx"])((function(){return[Object(a["createElementVNode"])("span",{innerHTML:e.$sanitize(e.rolesHelpText)},null,8,qt)]})),_:1})])):Object(a["createCommentVNode"])("",!0),Object(a["createVNode"])(d,null,{default:Object(a["withCtx"])((function(){return[Object(a["withDirectives"])(Object(a["createElementVNode"])("table",{id:"manageUsersTable",class:Object(a["normalizeClass"])({loading:e.isLoadingUsers})},[Object(a["createElementVNode"])("thead",null,[Object(a["createElementVNode"])("tr",null,[Object(a["createElementVNode"])("th",$t,[Object(a["createElementVNode"])("span",Gt,[Object(a["createElementVNode"])("label",null,[Object(a["withDirectives"])(Object(a["createElementVNode"])("input",{type:"checkbox",id:"paged_users_select_all",checked:"checked","onUpdate:modelValue":t[7]||(t[7]=function(t){return e.isAllCheckboxSelected=t}),onChange:t[8]||(t[8]=function(t){return e.onAllCheckboxChange()})},null,544),[[a["vModelCheckbox"],e.isAllCheckboxSelected]]),zt])])]),Object(a["createElementVNode"])("th",Wt,Object(a["toDisplayString"])(e.translate("UsersManager_Username")),1),Object(a["createElementVNode"])("th",Yt,[Object(a["createElementVNode"])("span",Xt,Object(a["toDisplayString"])(e.translate("UsersManager_RoleFor")),1),Object(a["createElementVNode"])("a",{href:"",class:Object(a["normalizeClass"])(["helpIcon",{sticky:e.isRoleHelpToggled}]),onClick:t[9]||(t[9]=Object(a["withModifiers"])((function(t){return e.isRoleHelpToggled=!e.isRoleHelpToggled}),["prevent"]))},Qt,2),Object(a["createElementVNode"])("div",null,[Object(a["createVNode"])(o,{class:"permissions-for-selector","model-value":e.permissionsForSite,"onUpdate:modelValue":t[10]||(t[10]=function(t){e.onPermissionsForUpdate(t)}),uicontrol:"site","ui-control-attributes":{onlySitesWithAdminAccess:"superuser"!==e.currentUserRole}},null,8,["model-value","ui-control-attributes"])])]),"superuser"===e.currentUserRole?(Object(a["openBlock"])(),Object(a["createElementBlock"])("th",Zt,Object(a["toDisplayString"])(e.translate("UsersManager_Email")),1)):Object(a["createCommentVNode"])("",!0),"superuser"===e.currentUserRole?(Object(a["openBlock"])(),Object(a["createElementBlock"])("th",{key:1,title:e.translate("UsersManager_UsesTwoFactorAuthentication")},Object(a["toDisplayString"])(e.translate("UsersManager_2FA")),9,en)):Object(a["createCommentVNode"])("",!0),"superuser"===e.currentUserRole?(Object(a["openBlock"])(),Object(a["createElementBlock"])("th",tn,Object(a["toDisplayString"])(e.translate("UsersManager_LastSeen")),1)):Object(a["createCommentVNode"])("",!0),Object(a["createElementVNode"])("th",null,Object(a["toDisplayString"])(e.translate("UsersManager_Status")),1),Object(a["createElementVNode"])("th",nn,[Object(a["createElementVNode"])("div",null,Object(a["toDisplayString"])(e.translate("General_Actions")),1)])])]),Object(a["createElementVNode"])("tbody",null,[e.isAllCheckboxSelected&&e.users.length&&e.users.length".concat(e.users.length,""))),style:{"margin-right":"3.5px"}},null,8,on),Object(a["createElementVNode"])("a",{class:"toggle-select-all-in-search",href:"#",onClick:t[11]||(t[11]=Object(a["withModifiers"])((function(t){return e.areAllResultsSelected=!e.areAllResultsSelected}),["prevent"])),innerHTML:e.$sanitize(e.translate("UsersManager_ClickToSelectAll","".concat(e.totalEntries,"")))},null,8,ln)])),e.areAllResultsSelected?(Object(a["openBlock"])(),Object(a["createElementBlock"])("div",cn,[Object(a["createElementVNode"])("span",{innerHTML:e.$sanitize(e.translate("UsersManager_AllUsersAreSelected","".concat(e.totalEntries,""))),style:{"margin-right":"3.5px"}},null,8,dn),Object(a["createElementVNode"])("a",{class:"toggle-select-all-in-search",href:"#",onClick:t[12]||(t[12]=Object(a["withModifiers"])((function(t){return e.areAllResultsSelected=!e.areAllResultsSelected}),["prevent"])),innerHTML:e.$sanitize(e.translate("UsersManager_ClickToSelectDisplayedUsers","".concat(e.users.length,"")))},null,8,un)])):Object(a["createCommentVNode"])("",!0)])])):Object(a["createCommentVNode"])("",!0),(Object(a["openBlock"])(!0),Object(a["createElementBlock"])(a["Fragment"],null,Object(a["renderList"])(e.users,(function(n,s){return Object(a["openBlock"])(),Object(a["createElementBlock"])("tr",{id:"row".concat(s),key:n.login},[Object(a["createElementVNode"])("td",bn,[Object(a["createElementVNode"])("span",pn,[Object(a["createElementVNode"])("label",null,[Object(a["withDirectives"])(Object(a["createElementVNode"])("input",{type:"checkbox",id:"paged_users_select_row".concat(s),"onUpdate:modelValue":function(t){return e.selectedRows[s]=t},onClick:t[13]||(t[13]=function(t){return e.onRowSelected()})},null,8,gn),[[a["vModelCheckbox"],e.selectedRows[s]]]),fn])])]),Object(a["createElementVNode"])("td",hn,Object(a["toDisplayString"])(n.login),1),Object(a["createElementVNode"])("td",jn,[Object(a["createElementVNode"])("div",null,[Object(a["createVNode"])(o,{"model-value":n.role,"onUpdate:modelValue":function(t){e.userToChange=n,e.roleToChangeTo=t,e.showAccessChangeConfirm()},disabled:"superuser"===n.role,uicontrol:"select",options:"anonymous"!==n.login?e.accessLevels:e.anonymousAccessLevels},null,8,["model-value","onUpdate:modelValue","disabled","options"])])]),"superuser"===e.currentUserRole?(Object(a["openBlock"])(),Object(a["createElementBlock"])("td",On,Object(a["toDisplayString"])(n.email),1)):Object(a["createCommentVNode"])("",!0),"superuser"===e.currentUserRole?(Object(a["openBlock"])(),Object(a["createElementBlock"])("td",vn,[n.uses_2fa?(Object(a["openBlock"])(),Object(a["createElementBlock"])("span",Cn)):Object(a["createCommentVNode"])("",!0),n.uses_2fa?Object(a["createCommentVNode"])("",!0):(Object(a["openBlock"])(),Object(a["createElementBlock"])("span",Nn))])):Object(a["createCommentVNode"])("",!0),"superuser"===e.currentUserRole?(Object(a["openBlock"])(),Object(a["createElementBlock"])("td",Sn,Object(a["toDisplayString"])(n.last_seen?"".concat(n.last_seen," ago"):"-"),1)):Object(a["createCommentVNode"])("",!0),Object(a["createElementVNode"])("td",Un,[Object(a["createElementVNode"])("span",{class:Object(a["normalizeClass"])(Number.isInteger(n.invite_status)?"pending":n.invite_status),title:"expired"===n.invite_status?e.translate("UsersManager_ExpiredInviteAutomaticallyRemoved","3"):""},Object(a["toDisplayString"])(e.getInviteStatus(n.invite_status)),11,yn)]),Object(a["createElementVNode"])("td",En,[("superuser"===e.currentUserRole||"admin"===e.currentUserRole&&n.invited_by===e.currentUserLogin)&&"active"!==n.invite_status?(Object(a["openBlock"])(),Object(a["createElementBlock"])("button",{key:0,class:"resend table-action",title:"Resend Invite",onClick:function(t){e.userToChange=n,e.showResendConfirm()}},An,8,Vn)):Object(a["createCommentVNode"])("",!0),"anonymous"!==n.login?(Object(a["openBlock"])(),Object(a["createElementBlock"])("button",{key:1,class:"edituser table-action",title:"Edit",onClick:function(t){return e.$emit("editUser",{user:n})}},Mn,8,wn)):Object(a["createCommentVNode"])("",!0),("superuser"===e.currentUserRole||"admin"===e.currentUserRole&&n.invited_by===e.currentUserLogin)&&"anonymous"!==n.login?(Object(a["openBlock"])(),Object(a["createElementBlock"])("button",{key:2,class:"deleteuser table-action",title:"Delete",onClick:function(t){e.userToChange=n,e.showDeleteConfirm()}},Dn,8,Bn)):Object(a["createCommentVNode"])("",!0)])],8,mn)})),128))])],2),[[m]])]})),_:1}),Object(a["createElementVNode"])("div",Ln,[Object(a["createElementVNode"])("div",Rn,[e.userToChange?(Object(a["openBlock"])(),Object(a["createElementBlock"])("h3",{key:0,innerHTML:e.$sanitize(e.translate("UsersManager_DeleteUserConfirmSingle","".concat(e.userToChange.login,"")))},null,8,xn)):Object(a["createCommentVNode"])("",!0),e.userToChange?Object(a["createCommentVNode"])("",!0):(Object(a["openBlock"])(),Object(a["createElementBlock"])("p",{key:1,innerHTML:e.$sanitize(e.translate("UsersManager_DeleteUserConfirmMultiple","".concat(e.affectedUsersCount,"")))},null,8,Pn))]),Object(a["createElementVNode"])("div",Fn,[Object(a["createElementVNode"])("a",{href:"",class:"modal-action modal-close btn",onClick:t[14]||(t[14]=Object(a["withModifiers"])((function(t){return e.deleteRequestedUsers()}),["prevent"])),style:{"margin-right":"3.5px"}},Object(a["toDisplayString"])(e.translate("General_Yes")),1),Object(a["createElementVNode"])("a",{href:"",class:"modal-action modal-close modal-no",onClick:t[15]||(t[15]=Object(a["withModifiers"])((function(t){e.userToChange=null,e.roleToChangeTo=null}),["prevent"]))},Object(a["toDisplayString"])(e.translate("General_No")),1)])],512),Object(a["createElementVNode"])("div",Hn,[Object(a["createElementVNode"])("div",In,[e.userToChange?(Object(a["openBlock"])(),Object(a["createElementBlock"])("h3",{key:0,innerHTML:e.$sanitize(e.deleteUserPermConfirmSingleText)},null,8,Jn)):Object(a["createCommentVNode"])("",!0),e.userToChange&&"anonymous"===e.userToChange.login&&"view"===e.roleToChangeTo?(Object(a["openBlock"])(),Object(a["createElementBlock"])("h3",qn,[Object(a["createElementVNode"])("em",null,[Object(a["createTextVNode"])(Object(a["toDisplayString"])(e.translate("General_Note"))+": ",1),Object(a["createElementVNode"])("span",{innerHTML:e.$sanitize(e.translate("UsersManager_AnonymousUserRoleChangeWarning","anonymous",e.getRoleDisplay(e.roleToChangeTo)))},null,8,$n)])])):Object(a["createCommentVNode"])("",!0),e.userToChange?Object(a["createCommentVNode"])("",!0):(Object(a["openBlock"])(),Object(a["createElementBlock"])("p",{key:2,innerHTML:e.$sanitize(e.deleteUserPermConfirmMultipleText)},null,8,Gn))]),Object(a["createElementVNode"])("div",zn,[Object(a["createElementVNode"])("a",{href:"",class:"modal-action modal-close btn",onClick:t[16]||(t[16]=Object(a["withModifiers"])((function(t){return e.changeUserRole()}),["prevent"])),style:{"margin-right":"3.5px"}},Object(a["toDisplayString"])(e.translate("General_Yes")),1),Object(a["createElementVNode"])("a",{href:"",class:"modal-action modal-close modal-no",onClick:t[17]||(t[17]=Object(a["withModifiers"])((function(t){e.userToChange=null,e.roleToChangeTo=null}),["prevent"]))},Object(a["toDisplayString"])(e.translate("General_No")),1)])],512),Object(a["createElementVNode"])("div",Wn,[Object(a["createElementVNode"])("div",Yn,[e.userToChange?(Object(a["openBlock"])(),Object(a["createElementBlock"])("h3",{key:0,innerHTML:e.$sanitize(e.translate("UsersManager_ResendInviteConfirmSingle","".concat(e.userToChange.login,"")))},null,8,Xn)):Object(a["createCommentVNode"])("",!0)]),Object(a["createElementVNode"])("div",Kn,[Object(a["createElementVNode"])("a",{href:"",class:"modal-action modal-close btn",onClick:t[18]||(t[18]=Object(a["withModifiers"])((function(t){return e.resendRequestedUser()}),["prevent"])),style:{"margin-right":"3.5px"}},Object(a["toDisplayString"])(e.translate("General_Yes")),1),Object(a["createElementVNode"])("a",{href:"",class:"modal-action modal-close modal-no",onClick:t[19]||(t[19]=Object(a["withModifiers"])((function(t){e.userToChange=null,e.roleToChangeTo=null}),["prevent"]))},Object(a["toDisplayString"])(e.translate("General_No")),1)])],512)],2)}var Zn=window,es=Zn.$,ts=Object(a["defineComponent"])({props:{initialSiteId:{type:[String,Number],required:!0},initialSiteName:{type:String,required:!0},currentUserRole:String,isLoadingUsers:Boolean,accessLevels:{type:Array,required:!0},filterAccessLevels:{type:Array,required:!0},filterStatusLevels:{type:Array,required:!0},totalEntries:Number,users:{type:Array,required:!0},searchParams:{type:Object,required:!0}},components:{Field:f["Field"],ActivityIndicator:i["ActivityIndicator"],Notification:i["Notification"],ContentBlock:i["ContentBlock"]},directives:{DropdownMenu:i["DropdownMenu"],ContentTable:i["ContentTable"]},data:function(){return{areAllResultsSelected:!1,selectedRows:{},isAllCheckboxSelected:!1,isBulkActionsDisabled:!0,userToChange:null,roleToChangeTo:null,accessLevelFilter:null,statusLevelFilter:null,isRoleHelpToggled:!1,userTextFilter:"",permissionsForSite:{id:this.initialSiteId,name:this.initialSiteName}}},emits:["editUser","changeUserRole","deleteUser","searchChange","resendInvite"],created:function(){this.onUserTextFilterChange=Object(i["debounce"])(this.onUserTextFilterChange,300)},watch:{users:function(){this.clearSelection()}},methods:{getInviteStatus:function(e){return Number.isInteger(e)?Object(i["translate"])("UsersManager_InviteDayLeft",e):"expired"===e?Object(i["translate"])("UsersManager_Expired"):Object(i["translate"])("UsersManager_Active")},onPermissionsForUpdate:function(e){this.permissionsForSite=e,this.changeSearch({idSite:this.permissionsForSite.id})},clearSelection:function(){this.selectedRows={},this.areAllResultsSelected=!1,this.isBulkActionsDisabled=!0,this.isAllCheckboxSelected=!1,this.userToChange=null},onAllCheckboxChange:function(){if(this.isAllCheckboxSelected){for(var e=0;e!==this.users.length;e+=1)this.selectedRows[e]=!0;this.isBulkActionsDisabled=!1}else this.clearSelection()},changeUserRole:function(){this.$emit("changeUserRole",{users:this.userOperationSubject,role:this.roleToChangeTo})},onRowSelected:function(){var e=this;setTimeout((function(){var t=e.selectedCount;e.isBulkActionsDisabled=0===t,e.isAllCheckboxSelected=t===e.users.length}))},deleteRequestedUsers:function(){this.$emit("deleteUser",{users:this.userOperationSubject})},resendRequestedUser:function(){this.$emit("resendInvite",{user:this.userToChange})},showDeleteConfirm:function(){es(this.$refs.deleteUserConfirmModal).modal({dismissible:!1}).modal("open")},showResendConfirm:function(){es(this.$refs.resendInviteConfirmModal).modal({dismissible:!1}).modal("open")},showAccessChangeConfirm:function(){es(this.$refs.changeUserRoleConfirmModal).modal({dismissible:!1}).modal("open")},getRoleDisplay:function(e){var t=null;return this.accessLevels.forEach((function(n){n.key===e&&(t=n.value)})),t},changeSearch:function(e){var t=Object.assign(Object.assign({},this.searchParams),e);this.$emit("searchChange",{params:t})},gotoPreviousPage:function(){this.changeSearch({offset:Math.max(0,this.searchParams.offset-this.searchParams.limit)})},gotoNextPage:function(){var e=this.searchParams.offset+this.searchParams.limit;e>=this.totalEntries||this.changeSearch({offset:e})},onUserTextFilterChange:function(e){this.userTextFilter=e,this.changeSearch({filter_search:e,offset:0})}},computed:{currentUserLogin:function(){return i["Matomo"].userLogin},paginationLowerBound:function(){return this.searchParams.offset+1},paginationUpperBound:function(){if(null===this.totalEntries)return"?";var e=this.searchParams;return Math.min(e.offset+e.limit,this.totalEntries)},userOperationSubject:function(){return this.userToChange?[this.userToChange]:this.areAllResultsSelected?"all":this.selectedUsers},selectedUsers:function(){var e=this,t=this.users,n=[];return Object.keys(this.selectedRows).forEach((function(s){var r=parseInt(s,10);e.selectedRows[s]&&t[r]&&n.push(t[r])})),n},rolesHelpText:function(){var e="https://matomo.org/faq/general/faq_70/",t="https://matomo.org/faq/general/faq_69/";return Object(i["translate"])("UsersManager_RolesHelp",''),"",''),"")},affectedUsersCount:function(){return this.areAllResultsSelected?this.totalEntries||0:this.selectedCount},selectedCount:function(){var e=this,t=0;return Object.keys(this.selectedRows).forEach((function(n){e.selectedRows[n]&&(t+=1)})),t},deleteUserPermConfirmSingleText:function(){var e,t;return Object(i["translate"])("UsersManager_DeleteUserPermConfirmSingle","".concat((null===(e=this.userToChange)||void 0===e?void 0:e.login)||"",""),"".concat(this.getRoleDisplay(this.roleToChangeTo),""),"".concat(i["Matomo"].helper.htmlEntities((null===(t=this.permissionsForSite)||void 0===t?void 0:t.name)||""),""))},deleteUserPermConfirmMultipleText:function(){var e;return Object(i["translate"])("UsersManager_DeleteUserPermConfirmMultiple","".concat(this.affectedUsersCount,""),"".concat(this.getRoleDisplay(this.roleToChangeTo),""),"".concat(i["Matomo"].helper.htmlEntities((null===(e=this.permissionsForSite)||void 0===e?void 0:e.name)||""),""))},bulkActionAccessLevels:function(){return this.accessLevels.filter((function(e){return"noaccess"!==e.key&&"superuser"!==e.key}))},anonymousAccessLevels:function(){return this.accessLevels.filter((function(e){return"noaccess"===e.key||"view"===e.key}))}}});ts.render=Qn;var ns=ts,ss=(Object(i["createAngularJsAdapter"])({component:ns,scope:{onEditUser:{angularJsBind:"&",vue:"editUser"},onChangeUserRole:{angularJsBind:"&",vue:"changeUserRole"},onDeleteUser:{angularJsBind:"&",vue:"deleteUser"},onSearchChange:{angularJsBind:"&",vue:"searchChange"},onResendInvite:{angularJsBind:"&",vue:"resendInvite"},initialSiteId:{angularJsBind:"<"},initialSiteName:{angularJsBind:"<"},currentUserRole:{angularJsBind:"<"},isLoadingUsers:{angularJsBind:"<"},accessLevels:{angularJsBind:"<"},filterAccessLevels:{angularJsBind:"<"},totalEntries:{angularJsBind:"<"},users:{angularJsBind:"<"},searchParams:{angularJsBind:"<"}},directiveName:"piwikPagedUsersList",restrict:"E"}),{class:"usersManager"}),rs={key:0},is={key:1},as={class:"row add-user-container"},os={class:"col s12"},ls={class:"input-field",style:{"margin-right":"3.5px"}},cs={key:0,class:"input-field"},ds={key:0},us={class:"add-existing-user-modal modal",ref:"addExistingUserModal"},ms={class:"modal-content"},bs={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 - */function ms(e,t,n,s,r,i){var o=Object(a["resolveComponent"])("EnrichedHeadline"),l=Object(a["resolveComponent"])("PagedUsersList"),c=Object(a["resolveComponent"])("UserEditForm"),d=Object(a["resolveComponent"])("Field"),u=Object(a["resolveDirective"])("content-intro"),m=Object(a["resolveDirective"])("tooltips");return Object(a["withDirectives"])((Object(a["openBlock"])(),Object(a["createElementBlock"])("div",ts,[Object(a["withDirectives"])(Object(a["createElementVNode"])("div",null,[Object(a["withDirectives"])(Object(a["createElementVNode"])("div",null,[Object(a["createElementVNode"])("h2",null,[Object(a["createVNode"])(o,{"help-url":"https://matomo.org/docs/manage-users/","feature-name":"Users Management"},{default:Object(a["withCtx"])((function(){return[Object(a["createTextVNode"])(Object(a["toDisplayString"])(e.translate("UsersManager_ManageUsers")),1)]})),_:1})]),"superuser"===e.currentUserRole?(Object(a["openBlock"])(),Object(a["createElementBlock"])("p",ns,Object(a["toDisplayString"])(e.translate("UsersManager_ManageUsersDesc")),1)):Object(a["createCommentVNode"])("",!0),"admin"===e.currentUserRole?(Object(a["openBlock"])(),Object(a["createElementBlock"])("p",ss,Object(a["toDisplayString"])(e.translate("UsersManager_ManageUsersAdminDesc")),1)):Object(a["createCommentVNode"])("",!0),Object(a["createElementVNode"])("div",rs,[Object(a["createElementVNode"])("div",is,[Object(a["createElementVNode"])("div",as,[Object(a["createElementVNode"])("a",{class:"btn add-new-user",onClick:t[0]||(t[0]=function(t){return e.onAddNewUser()})},Object(a["toDisplayString"])(e.translate("UsersManager_InviteNewUser")),1)]),"superuser"!==e.currentUserRole?(Object(a["openBlock"])(),Object(a["createElementBlock"])("div",os,[Object(a["createElementVNode"])("a",{class:"btn add-existing-user",onClick:t[1]||(t[1]=function(t){return e.showAddExistingUserModal()})},Object(a["toDisplayString"])(e.translate("UsersManager_AddExistingUser")),1)])):Object(a["createCommentVNode"])("",!0)])]),Object(a["createVNode"])(l,{onEditUser:t[2]||(t[2]=function(t){return e.onEditUser(t.user)}),onChangeUserRole:t[3]||(t[3]=function(t){return e.onChangeUserRole(t.users,t.role)}),onDeleteUser:t[4]||(t[4]=function(t){return e.onDeleteUser(t.users)}),onSearchChange:t[5]||(t[5]=function(t){e.searchParams=t.params,e.fetchUsers()}),onResendInvite:t[6]||(t[6]=function(t){return e.onResendInvite(t.user)}),"initial-site-id":e.initialSiteId,"initial-site-name":e.initialSiteName,"is-loading-users":e.isLoadingUsers,"current-user-role":e.currentUserRole,"access-levels":e.accessLevels,"filter-access-levels":e.actualFilterAccessLevels,"search-params":e.searchParams,users:e.users,"total-entries":e.totalEntries},null,8,["initial-site-id","initial-site-name","is-loading-users","current-user-role","access-levels","filter-access-levels","search-params","users","total-entries"])],512),[[u]])],512),[[a["vShow"],!e.isEditing]]),e.isEditing?(Object(a["openBlock"])(),Object(a["createElementBlock"])("div",ls,[Object(a["createVNode"])(c,{onDone:t[7]||(t[7]=function(t){return e.onDoneEditing(t.isUserModified)}),user:e.userBeingEdited,"current-user-role":e.currentUserRole,"access-levels":e.accessLevels,"filter-access-levels":e.actualFilterAccessLevels,"initial-site-id":e.initialSiteId,"initial-site-name":e.initialSiteName,onUpdated:t[8]||(t[8]=function(t){return e.userBeingEdited=t.user})},null,8,["user","current-user-role","access-levels","filter-access-levels","initial-site-id","initial-site-name"])])):Object(a["createCommentVNode"])("",!0),Object(a["createElementVNode"])("div",cs,[Object(a["createElementVNode"])("div",ds,[Object(a["createElementVNode"])("h3",null,Object(a["toDisplayString"])(e.translate("UsersManager_AddExistingUser")),1),Object(a["createElementVNode"])("p",null,Object(a["toDisplayString"])(e.translate("UsersManager_EnterUsernameOrEmail"))+":",1),Object(a["createElementVNode"])("div",null,[Object(a["createVNode"])(d,{modelValue:e.addNewUserLoginEmail,"onUpdate:modelValue":t[9]||(t[9]=function(t){return e.addNewUserLoginEmail=t}),name:"add-existing-user-email",uicontrol:"text"},null,8,["modelValue"])])]),Object(a["createElementVNode"])("div",us,[Object(a["createElementVNode"])("a",{href:"",class:"modal-action modal-close btn",onClick:t[10]||(t[10]=Object(a["withModifiers"])((function(t){return e.addExistingUser()}),["prevent"])),style:{"margin-right":"3.5px"}},Object(a["toDisplayString"])(e.translate("General_Add")),1),Object(a["createElementVNode"])("a",{href:"",class:"modal-action modal-close modal-no",onClick:t[11]||(t[11]=Object(a["withModifiers"])((function(t){return e.addNewUserLoginEmail=null}),["prevent"]))},Object(a["toDisplayString"])(e.translate("General_Cancel")),1)])],512)],512)),[[m]])}function bs(e){return fs(e)||hs(e)||gs(e)||ps()}function ps(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function gs(e,t){if(e){if("string"===typeof e)return js(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?js(e,t):void 0}}function hs(e){if("undefined"!==typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}function fs(e){if(Array.isArray(e))return js(e)}function js(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,s=new Array(t);ne.length)&&(t=e.length);for(var n=0,s=new Array(t);n0?Object(a["withDirectives"])((Object(a["openBlock"])(),Object(a["createElementBlock"])("div",ys,[Object(a["createElementVNode"])("div",null,[Object(a["createVNode"])(o,{uicontrol:"radio",name:"anonymousDefaultReport",modelValue:e.defaultReport,"onUpdate:modelValue":t[0]||(t[0]=function(t){return e.defaultReport=t}),introduction:e.translate("UsersManager_WhenUsersAreNotLoggedInAndVisitPiwikTheyShouldAccess"),options:e.defaultReportOptions},null,8,["modelValue","introduction","options"])]),Object(a["createElementVNode"])("div",null,[Object(a["createVNode"])(o,{uicontrol:"select",name:"anonymousDefaultReportWebsite",modelValue:e.defaultReportWebsite,"onUpdate:modelValue":t[1]||(t[1]=function(t){return e.defaultReportWebsite=t}),options:e.anonymousSites},null,8,["modelValue","options"])]),Object(a["createElementVNode"])("div",null,[Object(a["createVNode"])(o,{uicontrol:"radio",name:"anonymousDefaultDate",modelValue:e.defaultDate,"onUpdate:modelValue":t[2]||(t[2]=function(t){return e.defaultDate=t}),introduction:e.translate("UsersManager_ForAnonymousUsersReportDateToLoadByDefault"),options:e.availableDefaultDates},null,8,["modelValue","introduction","options"])]),Object(a["createVNode"])(l,{saving:e.loading,onConfirm:t[3]||(t[3]=function(t){return e.save()})},null,8,["saving"])],512)),[[d]]):Object(a["createCommentVNode"])("",!0)]})),_:1},8,["content-title"])}var Vs=Object(a["defineComponent"])({props:{title:{type:String,required:!0},anonymousSites:{type:Array,required:!0},anonymousDefaultReport:{type:[String,Number],required:!0},anonymousDefaultSite:{type:String,required:!0},anonymousDefaultDate:{type:String,required:!0},availableDefaultDates:{type:Object,required:!0},defaultReportOptions:{type:Object,required:!0}},components:{ContentBlock:i["ContentBlock"],SaveButton:h["SaveButton"],Field:h["Field"]},directives:{Form:h["Form"]},data:function(){return{loading:!1,defaultReport:"".concat(this.anonymousDefaultReport),defaultReportWebsite:this.anonymousDefaultSite,defaultDate:this.anonymousDefaultDate}},methods:{save:function(){var e=this,t={anonymousDefaultReport:"1"===this.defaultReport?this.defaultReportWebsite:this.defaultReport,anonymousDefaultDate:this.defaultDate};this.loading=!0,i["AjaxHelper"].post({module:"UsersManager",action:"recordAnonymousUserSettings",format:"json"},t,{withTokenInUrl:!0}).then((function(){var e=i["NotificationsStore"].show({message:Object(i["translate"])("CoreAdminHome_SettingsSaveSuccess"),id:"anonymousUserSettings",context:"success",type:"transient"});i["NotificationsStore"].scrollToNotification(e)})).finally((function(){e.loading=!1}))}}});Vs.render=Es;var ks=Vs,As=(Object(i["createAngularJsAdapter"])({component:ks,scope:{title:{angularJsBind:"<"},anonymousSites:{angularJsBind:"<"},anonymousDefaultReport:{angularJsBind:"<"},anonymousDefaultSite:{angularJsBind:"<"},anonymousDefaultDate:{angularJsBind:"<"},availableDefaultDates:{angularJsBind:"<"},defaultReportOptions:{angularJsBind:"<"}},directiveName:"matomoAnonymousSettings"}),{id:"newsletterSignup"}); + */function ks(e,t,n,s,r,i){var o=Object(a["resolveComponent"])("Field"),l=Object(a["resolveComponent"])("SaveButton"),c=Object(a["resolveComponent"])("ContentBlock"),d=Object(a["resolveDirective"])("form");return Object(a["openBlock"])(),Object(a["createBlock"])(c,{"content-title":e.title},{default:Object(a["withCtx"])((function(){return[0===e.anonymousSites.length?(Object(a["openBlock"])(),Object(a["createElementBlock"])("div",Es,Object(a["toDisplayString"])(e.translate("UsersManager_NoteNoAnonymousUserAccessSettingsWontBeUsed2")),1)):Object(a["createCommentVNode"])("",!0),e.anonymousSites.length>0?Object(a["withDirectives"])((Object(a["openBlock"])(),Object(a["createElementBlock"])("div",Vs,[Object(a["createElementVNode"])("div",null,[Object(a["createVNode"])(o,{uicontrol:"radio",name:"anonymousDefaultReport",modelValue:e.defaultReport,"onUpdate:modelValue":t[0]||(t[0]=function(t){return e.defaultReport=t}),introduction:e.translate("UsersManager_WhenUsersAreNotLoggedInAndVisitPiwikTheyShouldAccess"),options:e.defaultReportOptions},null,8,["modelValue","introduction","options"])]),Object(a["createElementVNode"])("div",null,[Object(a["createVNode"])(o,{uicontrol:"select",name:"anonymousDefaultReportWebsite",modelValue:e.defaultReportWebsite,"onUpdate:modelValue":t[1]||(t[1]=function(t){return e.defaultReportWebsite=t}),options:e.anonymousSites},null,8,["modelValue","options"])]),Object(a["createElementVNode"])("div",null,[Object(a["createVNode"])(o,{uicontrol:"radio",name:"anonymousDefaultDate",modelValue:e.defaultDate,"onUpdate:modelValue":t[2]||(t[2]=function(t){return e.defaultDate=t}),introduction:e.translate("UsersManager_ForAnonymousUsersReportDateToLoadByDefault"),options:e.availableDefaultDates},null,8,["modelValue","introduction","options"])]),Object(a["createVNode"])(l,{saving:e.loading,onConfirm:t[3]||(t[3]=function(t){return e.save()})},null,8,["saving"])],512)),[[d]]):Object(a["createCommentVNode"])("",!0)]})),_:1},8,["content-title"])}var As=Object(a["defineComponent"])({props:{title:{type:String,required:!0},anonymousSites:{type:Array,required:!0},anonymousDefaultReport:{type:[String,Number],required:!0},anonymousDefaultSite:{type:String,required:!0},anonymousDefaultDate:{type:String,required:!0},availableDefaultDates:{type:Object,required:!0},defaultReportOptions:{type:Object,required:!0}},components:{ContentBlock:i["ContentBlock"],SaveButton:f["SaveButton"],Field:f["Field"]},directives:{Form:f["Form"]},data:function(){return{loading:!1,defaultReport:"".concat(this.anonymousDefaultReport),defaultReportWebsite:this.anonymousDefaultSite,defaultDate:this.anonymousDefaultDate}},methods:{save:function(){var e=this,t={anonymousDefaultReport:"1"===this.defaultReport?this.defaultReportWebsite:this.defaultReport,anonymousDefaultDate:this.defaultDate};this.loading=!0,i["AjaxHelper"].post({module:"UsersManager",action:"recordAnonymousUserSettings",format:"json"},t,{withTokenInUrl:!0}).then((function(){var e=i["NotificationsStore"].show({message:Object(i["translate"])("CoreAdminHome_SettingsSaveSuccess"),id:"anonymousUserSettings",context:"success",type:"transient"});i["NotificationsStore"].scrollToNotification(e)})).finally((function(){e.loading=!1}))}}});As.render=ks;var ws=As,Ts=(Object(i["createAngularJsAdapter"])({component:ws,scope:{title:{angularJsBind:"<"},anonymousSites:{angularJsBind:"<"},anonymousDefaultReport:{angularJsBind:"<"},anonymousDefaultSite:{angularJsBind:"<"},anonymousDefaultDate:{angularJsBind:"<"},availableDefaultDates:{angularJsBind:"<"},defaultReportOptions:{angularJsBind:"<"}},directiveName:"matomoAnonymousSettings"}),{id:"newsletterSignup"}); /*! * Matomo - free/libre analytics platform * * @link https://matomo.org * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later - */function ws(e,t,n,s,r,i){var o=Object(a["resolveComponent"])("Field"),l=Object(a["resolveComponent"])("SaveButton"),c=Object(a["resolveComponent"])("ContentBlock");return Object(a["withDirectives"])((Object(a["openBlock"])(),Object(a["createElementBlock"])("div",As,[Object(a["createVNode"])(c,{"content-title":e.translate("UsersManager_NewsletterSignupTitle")},{default:Object(a["withCtx"])((function(){return[Object(a["createElementVNode"])("div",null,[Object(a["createVNode"])(o,{uicontrol:"checkbox",name:"newsletterSignupCheckbox",id:"newsletterSignupCheckbox",modelValue:e.newsletterSignupCheckbox,"onUpdate:modelValue":t[0]||(t[0]=function(t){return e.newsletterSignupCheckbox=t}),"full-width":!0,title:e.signupTitleText},null,8,["modelValue","title"])]),Object(a["createVNode"])(l,{id:"newsletterSignupBtn",onConfirm:t[1]||(t[1]=function(t){return e.signupForNewsletter()}),disabled:!e.newsletterSignupCheckbox,value:e.newsletterSignupButtonTitle,saving:e.isProcessingNewsletterSignup},null,8,["disabled","value","saving"])]})),_:1},8,["content-title"])],512)),[[a["vShow"],e.showNewsletterSignup]])}var Ts=Object(a["defineComponent"])({data:function(){return{showNewsletterSignup:!0,newsletterSignupCheckbox:!1,isProcessingNewsletterSignup:!1,newsletterSignupButtonTitle:Object(i["translate"])("General_Save")}},components:{ContentBlock:i["ContentBlock"],SaveButton:h["SaveButton"],Field:h["Field"]},computed:{signupTitleText:function(){return Object(i["translate"])("UsersManager_NewsletterSignupMessage",'',"")}},methods:{signupForNewsletter:function(){var e=this;this.newsletterSignupButtonTitle=Object(i["translate"])("General_Loading"),this.isProcessingNewsletterSignup=!0,i["AjaxHelper"].fetch({module:"API",method:"UsersManager.newsletterSignup"},{withTokenInUrl:!0}).then((function(){e.isProcessingNewsletterSignup=!1,e.showNewsletterSignup=!1;var t=i["NotificationsStore"].show({message:Object(i["translate"])("UsersManager_NewsletterSignupSuccessMessage"),id:"newslettersignup",context:"success",type:"transient"});i["NotificationsStore"].scrollToNotification(t)})).catch((function(){e.isProcessingNewsletterSignup=!1;var t=i["NotificationsStore"].show({message:Object(i["translate"])("UsersManager_NewsletterSignupFailureMessage"),id:"newslettersignup",context:"error",type:"transient"});i["NotificationsStore"].scrollToNotification(t),e.newsletterSignupButtonTitle=Object(i["translate"])("General_PleaseTryAgain")}))}}});Ts.render=ws;var Ms=Ts,Bs=(Object(i["createAngularJsAdapter"])({component:Ms,scope:{},directiveName:"matomoNewsletterSettings"}),{id:"userSettingsTable"}),_s={key:0},Ds={id:"languageHelp",class:"inline-help-node"},Ls={target:"_blank",rel:"noreferrer noopener",href:"https://matomo.org/translations/"},Rs={class:"sites_autocomplete"},xs={class:"modal",id:"confirmChangesWithPassword",ref:"confirmChangesWithPasswordModal"},Ps={class:"modal-content"},Hs={class:"modal-footer"}; + */function Ms(e,t,n,s,r,i){var o=Object(a["resolveComponent"])("Field"),l=Object(a["resolveComponent"])("SaveButton"),c=Object(a["resolveComponent"])("ContentBlock");return Object(a["withDirectives"])((Object(a["openBlock"])(),Object(a["createElementBlock"])("div",Ts,[Object(a["createVNode"])(c,{"content-title":e.translate("UsersManager_NewsletterSignupTitle")},{default:Object(a["withCtx"])((function(){return[Object(a["createElementVNode"])("div",null,[Object(a["createVNode"])(o,{uicontrol:"checkbox",name:"newsletterSignupCheckbox",id:"newsletterSignupCheckbox",modelValue:e.newsletterSignupCheckbox,"onUpdate:modelValue":t[0]||(t[0]=function(t){return e.newsletterSignupCheckbox=t}),"full-width":!0,title:e.signupTitleText},null,8,["modelValue","title"])]),Object(a["createVNode"])(l,{id:"newsletterSignupBtn",onConfirm:t[1]||(t[1]=function(t){return e.signupForNewsletter()}),disabled:!e.newsletterSignupCheckbox,value:e.newsletterSignupButtonTitle,saving:e.isProcessingNewsletterSignup},null,8,["disabled","value","saving"])]})),_:1},8,["content-title"])],512)),[[a["vShow"],e.showNewsletterSignup]])}var Bs=Object(a["defineComponent"])({data:function(){return{showNewsletterSignup:!0,newsletterSignupCheckbox:!1,isProcessingNewsletterSignup:!1,newsletterSignupButtonTitle:Object(i["translate"])("General_Save")}},components:{ContentBlock:i["ContentBlock"],SaveButton:f["SaveButton"],Field:f["Field"]},computed:{signupTitleText:function(){return Object(i["translate"])("UsersManager_NewsletterSignupMessage",'',"")}},methods:{signupForNewsletter:function(){var e=this;this.newsletterSignupButtonTitle=Object(i["translate"])("General_Loading"),this.isProcessingNewsletterSignup=!0,i["AjaxHelper"].fetch({module:"API",method:"UsersManager.newsletterSignup"},{withTokenInUrl:!0}).then((function(){e.isProcessingNewsletterSignup=!1,e.showNewsletterSignup=!1;var t=i["NotificationsStore"].show({message:Object(i["translate"])("UsersManager_NewsletterSignupSuccessMessage"),id:"newslettersignup",context:"success",type:"transient"});i["NotificationsStore"].scrollToNotification(t)})).catch((function(){e.isProcessingNewsletterSignup=!1;var t=i["NotificationsStore"].show({message:Object(i["translate"])("UsersManager_NewsletterSignupFailureMessage"),id:"newslettersignup",context:"error",type:"transient"});i["NotificationsStore"].scrollToNotification(t),e.newsletterSignupButtonTitle=Object(i["translate"])("General_PleaseTryAgain")}))}}});Bs.render=Ms;var _s=Bs,Ds=(Object(i["createAngularJsAdapter"])({component:_s,scope:{},directiveName:"matomoNewsletterSettings"}),{id:"userSettingsTable"}),Ls={key:0},Rs={id:"languageHelp",class:"inline-help-node"},xs={target:"_blank",rel:"noreferrer noopener",href:"https://matomo.org/translations/"},Ps={class:"sites_autocomplete"},Fs={class:"modal",id:"confirmChangesWithPassword",ref:"confirmChangesWithPasswordModal"},Hs={class:"modal-content"},Is={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 - */function Fs(e,t,n,s,r,i){var o=Object(a["resolveComponent"])("Field"),l=Object(a["resolveComponent"])("SiteSelector"),c=Object(a["resolveComponent"])("SaveButton"),d=Object(a["resolveComponent"])("ContentBlock"),u=Object(a["resolveDirective"])("form");return Object(a["openBlock"])(),Object(a["createBlock"])(d,{"content-title":e.title,feature:"true"},{default:Object(a["withCtx"])((function(){return[Object(a["withDirectives"])(Object(a["createElementVNode"])("form",Bs,[Object(a["createElementVNode"])("div",null,[Object(a["createVNode"])(o,{uicontrol:"text",name:"username",title:e.translate("General_Username"),disabled:!0,modelValue:e.username,"onUpdate:modelValue":t[0]||(t[0]=function(t){return e.username=t}),"inline-help":e.translate("UsersManager_YourUsernameCannotBeChanged")},null,8,["title","modelValue","inline-help"])]),e.isUsersAdminEnabled?(Object(a["openBlock"])(),Object(a["createElementBlock"])("div",_s,[Object(a["createVNode"])(o,{uicontrol:"text",name:"email","model-value":e.email,"onUpdate:modelValue":t[1]||(t[1]=function(t){e.email=t,e.doesRequirePasswordConfirmation=!0}),maxlength:100,title:e.translate("UsersManager_Email")},null,8,["model-value","title"])])):Object(a["createCommentVNode"])("",!0),Object(a["createElementVNode"])("div",Ds,[Object(a["createElementVNode"])("a",Ls,Object(a["toDisplayString"])(e.translate("LanguagesManager_AboutPiwikTranslations")),1)]),Object(a["createElementVNode"])("div",null,[Object(a["createVNode"])(o,{uicontrol:"select",name:"language",modelValue:e.language,"onUpdate:modelValue":t[2]||(t[2]=function(t){return e.language=t}),title:e.translate("General_Language"),options:e.languageOptions,"inline-help":"#languageHelp"},null,8,["modelValue","title","options"])]),Object(a["createElementVNode"])("div",null,[Object(a["createVNode"])(o,{uicontrol:"select",name:"timeformat",modelValue:e.timeformat,"onUpdate:modelValue":t[3]||(t[3]=function(t){return e.timeformat=t}),title:e.translate("General_TimeFormat"),options:e.timeFormats},null,8,["modelValue","title","options"])]),Object(a["createElementVNode"])("div",null,[Object(a["createVNode"])(o,{uicontrol:"radio",name:"defaultReport",modelValue:e.theDefaultReport,"onUpdate:modelValue":t[4]||(t[4]=function(t){return e.theDefaultReport=t}),introduction:e.translate("UsersManager_ReportToLoadByDefault"),title:e.translate("General_AllWebsitesDashboard"),options:e.defaultReportOptions},null,8,["modelValue","introduction","title","options"])]),Object(a["createElementVNode"])("div",Rs,[Object(a["createVNode"])(l,{modelValue:e.site,"onUpdate:modelValue":t[5]||(t[5]=function(t){return e.site=t}),"show-selected-site":!0,"switch-site-on-select":!1,"show-all-sites-item":!1,showselectedsite:!0,id:"defaultReportSiteSelector"},null,8,["modelValue"])]),Object(a["createElementVNode"])("div",null,[Object(a["createVNode"])(o,{uicontrol:"radio",name:"defaultDate",modelValue:e.theDefaultDate,"onUpdate:modelValue":t[6]||(t[6]=function(t){return e.theDefaultDate=t}),introduction:e.translate("UsersManager_ReportDateToLoadByDefault"),options:e.availableDefaultDates},null,8,["modelValue","introduction","options"])]),Object(a["createVNode"])(c,{onConfirm:t[7]||(t[7]=function(t){return e.save()}),saving:e.loading},null,8,["saving"]),Object(a["createElementVNode"])("div",xs,[Object(a["createElementVNode"])("div",Ps,[Object(a["createElementVNode"])("h2",null,Object(a["toDisplayString"])(e.translate("UsersManager_ConfirmWithPassword")),1),Object(a["createElementVNode"])("div",null,[Object(a["createVNode"])(o,{uicontrol:"password",name:"currentPassword",autocomplete:!1,modelValue:e.passwordCurrent,"onUpdate:modelValue":t[8]||(t[8]=function(t){return e.passwordCurrent=t}),"full-width":!0,title:e.translate("UsersManager_YourCurrentPassword")},null,8,["modelValue","title"])])]),Object(a["createElementVNode"])("div",Hs,[Object(a["createElementVNode"])("a",{href:"",class:"modal-action btn",onClick:t[9]||(t[9]=Object(a["withModifiers"])((function(t){return e.save()}),["prevent"])),style:{"margin-right":"3.5px"}},Object(a["toDisplayString"])(e.translate("General_Ok")),1),Object(a["createElementVNode"])("a",{href:"",class:"modal-action modal-close modal-no",onClick:t[10]||(t[10]=Object(a["withModifiers"])((function(t){return e.passwordCurrent=""}),["prevent"]))},Object(a["toDisplayString"])(e.translate("General_Cancel")),1)])],512)],512),[[u]])]})),_:1},8,["content-title"])}var Is=window,Js=Is.$,qs=Object(a["defineComponent"])({props:{isUsersAdminEnabled:{type:Boolean,required:!0},title:{type:String,required:!0},userLogin:{type:String,required:!0},userEmail:{type:String,required:!0},currentLanguageCode:{type:String,required:!0},languageOptions:{type:Object,required:!0},currentTimeformat:{type:Number,required:!0},timeFormats:{type:Object,required:!0},defaultReport:{type:[String,Number],required:!0},defaultReportOptions:{type:Object,required:!0},defaultReportIdSite:{type:[String,Number],required:!0},defaultReportSiteName:{type:String,required:!0},defaultDate:{type:String,required:!0},availableDefaultDates:{type:Object,required:!0}},components:{ContentBlock:i["ContentBlock"],SaveButton:h["SaveButton"],Field:h["Field"],SiteSelector:i["SiteSelector"]},directives:{Form:h["Form"]},data:function(){return{doesRequirePasswordConfirmation:!1,username:this.userLogin,email:this.userEmail,language:this.currentLanguageCode,timeformat:this.currentTimeformat,theDefaultReport:this.defaultReport,site:{id:this.defaultReportIdSite,name:i["Matomo"].helper.htmlDecode(this.defaultReportSiteName)},theDefaultDate:this.defaultDate,loading:!1,passwordCurrent:""}},methods:{save:function(){var e=this;if(!this.doesRequirePasswordConfirmation||this.passwordCurrent){var t=M.Modal.getInstance(this.$refs.confirmChangesWithPasswordModal);t&&t.close();var n={email:this.email,defaultReport:"MultiSites"===this.theDefaultReport?this.theDefaultReport:this.site.id,defaultDate:this.theDefaultDate,language:this.language,timeformat:this.timeformat};this.passwordCurrent&&(n.passwordConfirmation=this.passwordCurrent),this.loading=!0,i["AjaxHelper"].post({module:"UsersManager",action:"recordUserSettings",format:"json"},n,{withTokenInUrl:!0}).then((function(){var t=i["NotificationsStore"].show({message:Object(i["translate"])("CoreAdminHome_SettingsSaveSuccess"),id:"PersonalSettingsSuccess",context:"success",type:"transient"});i["NotificationsStore"].scrollToNotification(t),e.doesRequirePasswordConfirmation=!1,e.passwordCurrent="",e.loading=!1})).catch((function(){e.loading=!1,e.passwordCurrent=""}))}else Js(this.$refs.confirmChangesWithPasswordModal).modal({dismissible:!1,ready:function(){Js(".modal.open #currentPassword").focus()}}).modal("open")}}});qs.render=Fs;var $s=qs; + */function Js(e,t,n,s,r,i){var o=Object(a["resolveComponent"])("Field"),l=Object(a["resolveComponent"])("SiteSelector"),c=Object(a["resolveComponent"])("SaveButton"),d=Object(a["resolveComponent"])("ContentBlock"),u=Object(a["resolveDirective"])("form");return Object(a["openBlock"])(),Object(a["createBlock"])(d,{"content-title":e.title,feature:"true"},{default:Object(a["withCtx"])((function(){return[Object(a["withDirectives"])(Object(a["createElementVNode"])("form",Ds,[Object(a["createElementVNode"])("div",null,[Object(a["createVNode"])(o,{uicontrol:"text",name:"username",title:e.translate("General_Username"),disabled:!0,modelValue:e.username,"onUpdate:modelValue":t[0]||(t[0]=function(t){return e.username=t}),"inline-help":e.translate("UsersManager_YourUsernameCannotBeChanged")},null,8,["title","modelValue","inline-help"])]),e.isUsersAdminEnabled?(Object(a["openBlock"])(),Object(a["createElementBlock"])("div",Ls,[Object(a["createVNode"])(o,{uicontrol:"text",name:"email","model-value":e.email,"onUpdate:modelValue":t[1]||(t[1]=function(t){e.email=t,e.doesRequirePasswordConfirmation=!0}),maxlength:100,title:e.translate("UsersManager_Email")},null,8,["model-value","title"])])):Object(a["createCommentVNode"])("",!0),Object(a["createElementVNode"])("div",Rs,[Object(a["createElementVNode"])("a",xs,Object(a["toDisplayString"])(e.translate("LanguagesManager_AboutPiwikTranslations")),1)]),Object(a["createElementVNode"])("div",null,[Object(a["createVNode"])(o,{uicontrol:"select",name:"language",modelValue:e.language,"onUpdate:modelValue":t[2]||(t[2]=function(t){return e.language=t}),title:e.translate("General_Language"),options:e.languageOptions,"inline-help":"#languageHelp"},null,8,["modelValue","title","options"])]),Object(a["createElementVNode"])("div",null,[Object(a["createVNode"])(o,{uicontrol:"select",name:"timeformat",modelValue:e.timeformat,"onUpdate:modelValue":t[3]||(t[3]=function(t){return e.timeformat=t}),title:e.translate("General_TimeFormat"),options:e.timeFormats},null,8,["modelValue","title","options"])]),Object(a["createElementVNode"])("div",null,[Object(a["createVNode"])(o,{uicontrol:"radio",name:"defaultReport",modelValue:e.theDefaultReport,"onUpdate:modelValue":t[4]||(t[4]=function(t){return e.theDefaultReport=t}),introduction:e.translate("UsersManager_ReportToLoadByDefault"),title:e.translate("General_AllWebsitesDashboard"),options:e.defaultReportOptions},null,8,["modelValue","introduction","title","options"])]),Object(a["createElementVNode"])("div",Ps,[Object(a["createVNode"])(l,{modelValue:e.site,"onUpdate:modelValue":t[5]||(t[5]=function(t){return e.site=t}),"show-selected-site":!0,"switch-site-on-select":!1,"show-all-sites-item":!1,showselectedsite:!0,id:"defaultReportSiteSelector"},null,8,["modelValue"])]),Object(a["createElementVNode"])("div",null,[Object(a["createVNode"])(o,{uicontrol:"radio",name:"defaultDate",modelValue:e.theDefaultDate,"onUpdate:modelValue":t[6]||(t[6]=function(t){return e.theDefaultDate=t}),introduction:e.translate("UsersManager_ReportDateToLoadByDefault"),options:e.availableDefaultDates},null,8,["modelValue","introduction","options"])]),Object(a["createVNode"])(c,{onConfirm:t[7]||(t[7]=function(t){return e.save()}),saving:e.loading},null,8,["saving"]),Object(a["createElementVNode"])("div",Fs,[Object(a["createElementVNode"])("div",Hs,[Object(a["createElementVNode"])("h2",null,Object(a["toDisplayString"])(e.translate("UsersManager_ConfirmWithPassword")),1),Object(a["createElementVNode"])("div",null,[Object(a["createVNode"])(o,{uicontrol:"password",name:"currentPassword",autocomplete:!1,modelValue:e.passwordCurrent,"onUpdate:modelValue":t[8]||(t[8]=function(t){return e.passwordCurrent=t}),"full-width":!0,title:e.translate("UsersManager_YourCurrentPassword")},null,8,["modelValue","title"])])]),Object(a["createElementVNode"])("div",Is,[Object(a["createElementVNode"])("a",{href:"",class:"modal-action btn",onClick:t[9]||(t[9]=Object(a["withModifiers"])((function(t){return e.save()}),["prevent"])),style:{"margin-right":"3.5px"}},Object(a["toDisplayString"])(e.translate("General_Ok")),1),Object(a["createElementVNode"])("a",{href:"",class:"modal-action modal-close modal-no",onClick:t[10]||(t[10]=Object(a["withModifiers"])((function(t){return e.passwordCurrent=""}),["prevent"]))},Object(a["toDisplayString"])(e.translate("General_Cancel")),1)])],512)],512),[[u]])]})),_:1},8,["content-title"])}var qs=window,$s=qs.$,Gs=Object(a["defineComponent"])({props:{isUsersAdminEnabled:{type:Boolean,required:!0},title:{type:String,required:!0},userLogin:{type:String,required:!0},userEmail:{type:String,required:!0},currentLanguageCode:{type:String,required:!0},languageOptions:{type:Object,required:!0},currentTimeformat:{type:Number,required:!0},timeFormats:{type:Object,required:!0},defaultReport:{type:[String,Number],required:!0},defaultReportOptions:{type:Object,required:!0},defaultReportIdSite:{type:[String,Number],required:!0},defaultReportSiteName:{type:String,required:!0},defaultDate:{type:String,required:!0},availableDefaultDates:{type:Object,required:!0}},components:{ContentBlock:i["ContentBlock"],SaveButton:f["SaveButton"],Field:f["Field"],SiteSelector:i["SiteSelector"]},directives:{Form:f["Form"]},data:function(){return{doesRequirePasswordConfirmation:!1,username:this.userLogin,email:this.userEmail,language:this.currentLanguageCode,timeformat:this.currentTimeformat,theDefaultReport:this.defaultReport,site:{id:this.defaultReportIdSite,name:i["Matomo"].helper.htmlDecode(this.defaultReportSiteName)},theDefaultDate:this.defaultDate,loading:!1,passwordCurrent:""}},methods:{save:function(){var e=this;if(!this.doesRequirePasswordConfirmation||this.passwordCurrent){var t=M.Modal.getInstance(this.$refs.confirmChangesWithPasswordModal);t&&t.close();var n={email:this.email,defaultReport:"MultiSites"===this.theDefaultReport?this.theDefaultReport:this.site.id,defaultDate:this.theDefaultDate,language:this.language,timeformat:this.timeformat};this.passwordCurrent&&(n.passwordConfirmation=this.passwordCurrent),this.loading=!0,i["AjaxHelper"].post({module:"UsersManager",action:"recordUserSettings",format:"json"},n,{withTokenInUrl:!0}).then((function(){var t=i["NotificationsStore"].show({message:Object(i["translate"])("CoreAdminHome_SettingsSaveSuccess"),id:"PersonalSettingsSuccess",context:"success",type:"transient"});i["NotificationsStore"].scrollToNotification(t),e.doesRequirePasswordConfirmation=!1,e.passwordCurrent="",e.loading=!1})).catch((function(){e.loading=!1,e.passwordCurrent=""}))}else $s(this.$refs.confirmChangesWithPasswordModal).modal({dismissible:!1,ready:function(){$s(".modal.open #currentPassword").focus()}}).modal("open")}}});Gs.render=Js;var zs=Gs; /*! * Matomo - free/libre analytics platform * * @link https://matomo.org * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later - */Object(i["createAngularJsAdapter"])({component:$s,scope:{isUsersAdminEnabled:{angularJsBind:"<"},title:{angularJsBind:"<"},userLogin:{angularJsBind:"<"},userEmail:{angularJsBind:"<"},currentLanguageCode:{angularJsBind:"<"},languageOptions:{angularJsBind:"<"},currentTimeformat:{angularJsBind:"<"},timeFormats:{angularJsBind:"<"},defaultReport:{angularJsBind:"<"},defaultReportOptions:{angularJsBind:"<"},defaultReportIdSite:{angularJsBind:"<"},defaultReportSiteName:{angularJsBind:"<"},defaultDate:{angularJsBind:"<"},availableDefaultDates:{angularJsBind:"<"}},directiveName:"matomoPersonalSettings"})}})})); + */Object(i["createAngularJsAdapter"])({component:zs,scope:{isUsersAdminEnabled:{angularJsBind:"<"},title:{angularJsBind:"<"},userLogin:{angularJsBind:"<"},userEmail:{angularJsBind:"<"},currentLanguageCode:{angularJsBind:"<"},languageOptions:{angularJsBind:"<"},currentTimeformat:{angularJsBind:"<"},timeFormats:{angularJsBind:"<"},defaultReport:{angularJsBind:"<"},defaultReportOptions:{angularJsBind:"<"},defaultReportIdSite:{angularJsBind:"<"},defaultReportSiteName:{angularJsBind:"<"},defaultDate:{angularJsBind:"<"},availableDefaultDates:{angularJsBind:"<"}},directiveName:"matomoPersonalSettings"})}})})); //# sourceMappingURL=UsersManager.umd.min.js.map \ No newline at end of file diff --git a/plugins/UsersManager/vue/src/PagedUsersList/PagedUsersList.less b/plugins/UsersManager/vue/src/PagedUsersList/PagedUsersList.less index bc52e87ce3..f1a7d66783 100644 --- a/plugins/UsersManager/vue/src/PagedUsersList/PagedUsersList.less +++ b/plugins/UsersManager/vue/src/PagedUsersList/PagedUsersList.less @@ -37,7 +37,7 @@ table.entityTable tbody tr td.actions-cell { width: 140px; padding: 0; - text-align: center; + text-align: left; } table.entityTable th.actions-cell-header > div { @@ -124,6 +124,7 @@ .input-field > .btn { margin-top: .7rem; + white-space: nowrap; } &.row { @@ -133,6 +134,11 @@ } } + .users-list-pagination-container { + float: right; + min-width: 350px; + } + .usersListPagination { display: flex; flex-direction: row; @@ -140,6 +146,7 @@ justify-content: space-between; margin-top: .7rem; float: right; + white-space: nowrap; .pointer { cursor: pointer; @@ -165,11 +172,11 @@ } #status { - .accept { + .active { color: green; } - .expired, .decline { + .expired { color: red; } diff --git a/plugins/UsersManager/vue/src/PagedUsersList/PagedUsersList.vue b/plugins/UsersManager/vue/src/PagedUsersList/PagedUsersList.vue index 6af4687037..f0e5121354 100644 --- a/plugins/UsersManager/vue/src/PagedUsersList/PagedUsersList.vue +++ b/plugins/UsersManager/vue/src/PagedUsersList/PagedUsersList.vue @@ -6,41 +6,41 @@