From d036954668dcd4cf8cb4a5235cbed7519503d0f6 Mon Sep 17 00:00:00 2001 From: Peter Zhang Date: Tue, 7 Jun 2022 11:47:10 +1200 Subject: invite user replace add user (#18868) * draft vue version draft vue version * built vue files * update some functions update some functions * Update API.php update wording * move some validation move some validation * built vue files * update some structure update some structure * update validators update validators * update some changes update some changes * update invite update invite * add status add status * built vue files * add invite page add invite page * add invite page add invite page * add some api back add some api back * Update UserRepository.php update tests * update all xml in the tests update all xml in the tests * update tests update tests * update tests update tests * Update LoginLdap update tests * Update UsersManagerTest.php update tests * update tests update tests * Update APITest.php update tests * Update UserInviteEmail.php fix cs * update cs update cs * Update SessionAuthTest.php update tests * update tests error update tests error * Update UserRepository.php remove unused * update tests update tests * update user tests update user tests * update tests update tests * Update API.php update tests * built vue files * Update OmniFixture-dump.sql update tests * update validator update validator * built vue files * update tests and screenshots update tests and screenshots * update test xml update test xml * update user total size update user total size * update tests update tests * built vue files * update tests and test user email update tests and test user email * update tests update tests * built vue files * update tests update tests * update ranking in screenshots update ranking in screenshots * update test update test * update tests change the table list order * Update UsersManager_spec.js update tests * update tests update tests * built vue files * update tests update tests * update tests update tests * update tests update tests * adding login tests adding login tests * update tests update tests * Update UsersManager_resend_popup.png add screenshots * Update PendingUsers.php update error of model * update tests update tests * Update UserInviteTest.php update tests error * update set up for pending user should be pending user * update screenshots update screenshots * update wrong password check update wrong password check * Update Invite_wrong_password.png update password * update to 4.10 update to 4.10 * Update ReportParameters.vue remove un used element * update vue file update vue file * hide password on invite user hide password on invite user * built vue files * built vue files * Update UserEditForm.vue update password condition * built vue files * update condition on pending user update condition on pending user * built vue files * update screenshots update screenshots * update bugs update bugs * built vue files * add expired status add expired status * fix php cs fix php cs * update vue error update vue error * built vue files * add decline interface add decline interface * update all the user status update all the user status * built vue files * update tests xml for invite status update tests * fix phpcs fix phpcs * update migration number update migration number * update tests email update tests email * update screenshot tests update screenshot tests * update tests update tests * update screenshots * update screenshots update screenshots * Update Invite_wrong_password.png update screenshots * update status update status * update tests update tests * update tests update tests * Update TwoFactorAuthUsersManager_spec.js update tests * Update TwoFactorAuthUsersManager_spec.js update tests * update tests update tests * update lang update lang * update some errors update some errors * update screenshots update screenshots * update ui tests and resend invitation update ui tests and resend invitation * fix resend fix resend * built vue files * update screenshots update screenshots Co-authored-by: peterhashair --- core/Db/Schema/Mysql.php | 5 +- core/Piwik.php | 3 + core/Updates/4.10.0-b1.php | 2 +- core/Updates/4.11.0-b1.php | 52 ++ core/Validators/Login.php | 59 +++ plugins/CoreAdminHome/CoreAdminHome.php | 4 +- .../Emails/UserAcceptInvitationEmail.php | 33 ++ .../Emails/UserDeclinedInvitationEmail.php | 33 ++ plugins/CoreAdminHome/lang/en.json | 10 +- plugins/CoreHome/templates/quickLinks.twig | 2 +- plugins/Login/Controller.php | 200 +++++++- plugins/Login/lang/en.json | 11 +- plugins/Login/stylesheets/login.less | 5 + plugins/Login/templates/invitation.twig | 83 ++++ plugins/Login/templates/inviteLayout.twig | 46 ++ plugins/Login/tests/Fixtures/PendingUsers.php | 54 +++ plugins/Login/tests/UI/Decline_spec.js | 25 + plugins/Login/tests/UI/Invite_spec.js | 38 ++ .../UI/expected-screenshots/Decline_default.png | 3 + .../tests/UI/expected-screenshots/Invite_error.png | 3 + .../expected-screenshots/Invite_set_password.png | 3 + .../expected-screenshots/Invite_wrong_password.png | 3 + ...hUsersManager_edit_with_2fa_reset_confirmed.png | 4 +- .../TwoFactorAuthUsersManager_list.png | 4 +- plugins/UsersManager/API.php | 382 ++++++--------- plugins/UsersManager/Emails/UserInviteEmail.php | 84 ++++ plugins/UsersManager/Model.php | 143 ++++-- plugins/UsersManager/Repository/UserRepository.php | 225 +++++++++ plugins/UsersManager/UsersManager.php | 13 +- plugins/UsersManager/Validators/Email.php | 58 +++ plugins/UsersManager/Validators/Login.php | 68 +++ plugins/UsersManager/lang/en.json | 14 +- .../UsersManager/templates/_userInviteEmail.twig | 8 + plugins/UsersManager/tests/Fixtures/ManyUsers.php | 9 + plugins/UsersManager/tests/Integration/APITest.php | 5 +- .../UsersManager/tests/Integration/ModelTest.php | 9 +- .../tests/Integration/UserInviteTest.php | 66 +++ .../tests/Integration/UsersManagerTest.php | 54 ++- plugins/UsersManager/tests/System/ApiTest.php | 2 +- ...Manager.getUser_login1_when_superuseraccess.xml | 1 + ...Manager.getUser_login2_when_superuseraccess.xml | 1 + ...Manager.getUser_login4_when_superuseraccess.xml | 1 + ...Manager.getUser_login6_when_superuseraccess.xml | 1 + ...sersManager.getUsersLogin__when_adminaccess.xml | 1 + ...Manager.getUsersLogin__when_superuseraccess.xml | 1 + ...WithSiteAccess_3_admin_when_superuseraccess.xml | 2 + ...t___UsersManager.getUsers__when_adminaccess.xml | 4 + ...UsersManager.getUsers__when_superuseraccess.xml | 19 + plugins/UsersManager/tests/UI/UsersManager_spec.js | 15 +- .../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 +- ...sersManager_admin_view_edit_user_basic_info.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 +- .../expected-screenshots/UsersManager_previous.png | 4 +- .../UsersManager_resend_popup.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 | 524 +++++++++++++-------- .../UsersManager/vue/dist/UsersManager.umd.min.js | 20 +- .../src/PagedUsersList/PagedUsersList.adapter.ts | 4 + .../vue/src/PagedUsersList/PagedUsersList.less | 17 +- .../vue/src/PagedUsersList/PagedUsersList.vue | 68 ++- plugins/UsersManager/vue/src/User.ts | 1 + .../vue/src/UserEditForm/UserEditForm.vue | 44 +- .../vue/src/UsersManager/UsersManager.vue | 14 +- .../Integration/Session/SessionAuthTest.php | 2 +- ...ry__CustomDimensions.getCustomDimension_day.xml | 4 - .../UIIntegrationTest_admin_home.png | 4 +- .../UIIntegrationTest_api_error.png | 4 +- .../UIIntegrationTest_api_listing.png | 4 +- tests/resources/OmniFixture-dump.sql | 3 +- 90 files changed, 2083 insertions(+), 608 deletions(-) create mode 100644 core/Updates/4.11.0-b1.php create mode 100644 core/Validators/Login.php create mode 100644 plugins/CoreAdminHome/Emails/UserAcceptInvitationEmail.php create mode 100644 plugins/CoreAdminHome/Emails/UserDeclinedInvitationEmail.php create mode 100644 plugins/Login/templates/invitation.twig create mode 100644 plugins/Login/templates/inviteLayout.twig create mode 100644 plugins/Login/tests/Fixtures/PendingUsers.php create mode 100644 plugins/Login/tests/UI/Decline_spec.js create mode 100644 plugins/Login/tests/UI/Invite_spec.js create mode 100644 plugins/Login/tests/UI/expected-screenshots/Decline_default.png create mode 100644 plugins/Login/tests/UI/expected-screenshots/Invite_error.png create mode 100644 plugins/Login/tests/UI/expected-screenshots/Invite_set_password.png create mode 100644 plugins/Login/tests/UI/expected-screenshots/Invite_wrong_password.png create mode 100644 plugins/UsersManager/Emails/UserInviteEmail.php create mode 100644 plugins/UsersManager/Repository/UserRepository.php create mode 100644 plugins/UsersManager/Validators/Email.php create mode 100644 plugins/UsersManager/Validators/Login.php create mode 100644 plugins/UsersManager/templates/_userInviteEmail.twig create mode 100644 plugins/UsersManager/tests/Integration/UserInviteTest.php create mode 100644 plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_resend_popup.png diff --git a/core/Db/Schema/Mysql.php b/core/Db/Schema/Mysql.php index fcf943bbdd..00fb8c31e9 100644 --- a/core/Db/Schema/Mysql.php +++ b/core/Db/Schema/Mysql.php @@ -53,6 +53,7 @@ class Mysql implements SchemaInterface date_registered TIMESTAMP NULL, ts_password_modified TIMESTAMP NULL, idchange_last_viewed TIMESTAMP NULL, + invite_status enum('accept','pending','decline','expired') DEFAULT 'accept', PRIMARY KEY(login) ) ENGINE=$engine DEFAULT CHARSET=$charset ", @@ -589,8 +590,8 @@ class Mysql implements SchemaInterface $db = $this->getDb(); $db->query("INSERT IGNORE INTO " . Common::prefixTable("user") . " (`login`, `password`, `email`, `twofactor_secret`, `superuser_access`, `date_registered`, `ts_password_modified`, - `idchange_last_viewed`) - VALUES ( 'anonymous', '', 'anonymous@example.org', '', 0, '$now', '$now' , NULL);"); + `idchange_last_viewed`, `invite_status`) + VALUES ( 'anonymous', '', 'anonymous@example.org', '', 0, '$now', '$now' , NULL, 'accept');"); $model = new Model(); $model->addTokenAuth('anonymous', 'anonymous', 'anonymous default token', $now); diff --git a/core/Piwik.php b/core/Piwik.php index 0c9c1ff66a..b970efa1db 100644 --- a/core/Piwik.php +++ b/core/Piwik.php @@ -708,6 +708,7 @@ class Piwik */ /** + * TODO: consider deprecated it, move to validator * Returns `true` if supplied the email address is a valid. * * @param string $emailAddress @@ -720,6 +721,7 @@ class Piwik } /** + * TODO: consider deprecated it, move to validator * Returns `true` if the login is valid. * * _Warning: does not check if the login already exists! You must use UsersManager_API->userExists as well._ @@ -917,4 +919,5 @@ class Piwik { return Common::getRequestVar('date', $default, 'string'); } + } diff --git a/core/Updates/4.10.0-b1.php b/core/Updates/4.10.0-b1.php index df8d408041..c4e81584bf 100644 --- a/core/Updates/4.10.0-b1.php +++ b/core/Updates/4.10.0-b1.php @@ -50,7 +50,7 @@ class Updates_4_10_0_b1 extends PiwikUpdates } return [ - $this->migration->db->sql("DELETE FROM " . $table . " WHERE reports = 'Array' OR parameters = 'Array'") + $this->migration->db->sql("DELETE FROM " . $table . " WHERE reports = 'Array' OR parameters = 'Array'"), ]; } diff --git a/core/Updates/4.11.0-b1.php b/core/Updates/4.11.0-b1.php new file mode 100644 index 0000000000..d9bf37bc99 --- /dev/null +++ b/core/Updates/4.11.0-b1.php @@ -0,0 +1,52 @@ +migration = $factory; + } + + /** + * @param Updater $updater + * + * @return Migration[] + */ + public function getMigrations(Updater $updater) + { + + return [ + $this->migration->db->addColumns('user', [ + 'invite_status' => "ENUM('accept','pending','decline','expired') DEFAULT 'accept'" + ]) + ]; + } + + public function doUpdate(Updater $updater) + { + $updater->executeMigrations(__FILE__, $this->getMigrations($updater)); + } +} diff --git a/core/Validators/Login.php b/core/Validators/Login.php new file mode 100644 index 0000000000..f377f79bec --- /dev/null +++ b/core/Validators/Login.php @@ -0,0 +1,59 @@ += 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))); + } + + $this->login = $value; + return $this; + } + + public function isUnique() + { + if (empty($this->login)) { + throw new Exception(Piwik::translate('UsersManager_ExceptionInvalidLoginFormat', + array(self::loginMinimumLength, self::loginMaximumLength))); + } + + if (APIUsersManager::getInstance()->userExists($this->login)) { + throw new Exception(Piwik::translate('UsersManager_ExceptionLoginExists', $this->login)); + } + + if (APIUsersManager::getInstance()->userEmailExists($this->login)) { + throw new Exception(Piwik::translate('UsersManager_ExceptionLoginExistsAsEmail', $this->login)); + } + } +} \ No newline at end of file diff --git a/plugins/CoreAdminHome/CoreAdminHome.php b/plugins/CoreAdminHome/CoreAdminHome.php index 4b312ba876..a80ca1f6a9 100644 --- a/plugins/CoreAdminHome/CoreAdminHome.php +++ b/plugins/CoreAdminHome/CoreAdminHome.php @@ -206,7 +206,7 @@ class CoreAdminHome extends \Piwik\Plugin $translationKeys[] = 'CoreAdminHome_JSTracking_MergeSubdomainsDesc'; $translationKeys[] = 'CoreAdminHome_JSTracking_CustomCampaignQueryParamDesc'; $translationKeys[] = 'CoreAdminHome_SinglePageApplicationDescription'; - - + $translationKeys[] = 'CoreAdminHome_SecurityNotificationUserAcceptInviteBody'; + $translationKeys[] = 'CoreAdminHome_SecurityNotificationUserDeclinedInviteBody'; } } diff --git a/plugins/CoreAdminHome/Emails/UserAcceptInvitationEmail.php b/plugins/CoreAdminHome/Emails/UserAcceptInvitationEmail.php new file mode 100644 index 0000000000..a7c8f58f7b --- /dev/null +++ b/plugins/CoreAdminHome/Emails/UserAcceptInvitationEmail.php @@ -0,0 +1,33 @@ +userLogin = $userLogin; + + parent::__construct($login, $emailAddress); + } + + protected function getBody() + { + return Piwik::translate('CoreAdminHome_SecurityNotificationUserAcceptInviteBody', [$this->userLogin]); + } +} diff --git a/plugins/CoreAdminHome/Emails/UserDeclinedInvitationEmail.php b/plugins/CoreAdminHome/Emails/UserDeclinedInvitationEmail.php new file mode 100644 index 0000000000..241cf7827e --- /dev/null +++ b/plugins/CoreAdminHome/Emails/UserDeclinedInvitationEmail.php @@ -0,0 +1,33 @@ +userLogin = $userLogin; + + parent::__construct($login, $emailAddress); + } + + protected function getBody() + { + return Piwik::translate('CoreAdminHome_SecurityNotificationUserDeclinedInviteBody', [$this->userLogin]) ; + } +} diff --git a/plugins/CoreAdminHome/lang/en.json b/plugins/CoreAdminHome/lang/en.json index f5c03a78f6..4103987beb 100644 --- a/plugins/CoreAdminHome/lang/en.json +++ b/plugins/CoreAdminHome/lang/en.json @@ -162,6 +162,14 @@ "YouMayOptOut": "You may choose not to have a unique web analytics cookie identification number assigned to your computer to avoid the aggregation and analysis of data collected on this website.", "YouMayOptOut2": "You may choose to prevent this website from aggregating and analyzing the actions you take here.", "YouMayOptOut3": "Doing so will protect your privacy, but will also prevent the owner from learning from your actions and creating a better experience for you and other users.", - "YouMayOptOutBis": "To make that choice, please click below to receive an opt-out cookie." + "YouMayOptOutBis": "To make that choice, please click below to receive an opt-out cookie.", + "UserInviteSubject": "%1$s sent you an invite to join Matomo Analytics for %2$s.", + "AcceptInvite": "Accept Invite", + "DeclineInvite": "Decline Invite", + "UserInviteContent": "You can accept this invitation by clicking the accept button below.", + "UserInviteNotes": "This invitation was intended for %1$s access. If you were not expecting this invitation, you can ignore this email. If %2$s is sending you too many emails, you can block them or report abuse. The invitation automatically expires in 7 days.", + "SecurityNotificationUserAcceptInviteBody": "User (login: %s) accepted the invitation.", + "SecurityNotificationUserDeclinedInviteBody": "User (login: %s) declined the invitation." + } } diff --git a/plugins/CoreHome/templates/quickLinks.twig b/plugins/CoreHome/templates/quickLinks.twig index a44bda7230..1656582fc0 100644 --- a/plugins/CoreHome/templates/quickLinks.twig +++ b/plugins/CoreHome/templates/quickLinks.twig @@ -11,7 +11,7 @@ {% endif %} diff --git a/plugins/Login/Controller.php b/plugins/Login/Controller.php index fff60e74d7..98b0dd23e9 100644 --- a/plugins/Login/Controller.php +++ b/plugins/Login/Controller.php @@ -9,16 +9,21 @@ namespace Piwik\Plugins\Login; use Exception; +use Piwik\Auth\Password; use Piwik\Common; use Piwik\Config; use Piwik\Container\StaticContainer; use Piwik\Log; use Piwik\Nonce; use Piwik\Piwik; +use Piwik\Plugins\CoreAdminHome\Emails\UserAcceptInvitationEmail; +use Piwik\Plugins\CoreAdminHome\Emails\UserDeclinedInvitationEmail; use Piwik\Plugins\Login\Security\BruteForceDetection; -use Piwik\Plugins\UsersManager\Model AS UsersModel; +use Piwik\Plugins\UsersManager\Model as UsersModel; +use Piwik\Plugins\UsersManager\UsersManager; use Piwik\QuickForm2; use Piwik\Session; +use Piwik\Session\SessionInitializer; use Piwik\Url; use Piwik\UrlHelper; use Piwik\View; @@ -71,8 +76,14 @@ class Controller extends \Piwik\Plugin\ControllerAdmin * @param BruteForceDetection $bruteForceDetection * @param SystemSettings $systemSettings */ - public function __construct($passwordResetter = null, $auth = null, $sessionInitializer = null, $passwordVerify = null, $bruteForceDetection = null, $systemSettings = null) - { + public function __construct( + $passwordResetter = null, + $auth = null, + $sessionInitializer = null, + $passwordVerify = null, + $bruteForceDetection = null, + $systemSettings = null + ) { parent::__construct(); if (empty($passwordResetter)) { @@ -121,8 +132,8 @@ class Controller extends \Piwik\Plugin\ControllerAdmin * * @param string $messageNoAccess Access error message * @param bool $infoMessage - * @internal param string $currentUrl Current URL * @return string + * @internal param string $currentUrl Current URL */ function login($messageNoAccess = null, $infoMessage = false) { @@ -221,9 +232,9 @@ class Controller extends \Piwik\Plugin\ControllerAdmin } return $this->renderTemplate('@Login/confirmPassword', array( - 'nonce' => Nonce::getNonce($nonceKey), - 'AccessErrorString' => $messageNoAccess, - 'loginPlugin' => Piwik::getLoginPluginName(), + 'nonce' => Nonce::getNonce($nonceKey), + 'AccessErrorString' => $messageNoAccess, + 'loginPlugin' => Piwik::getLoginPluginName(), )); } @@ -243,7 +254,8 @@ class Controller extends \Piwik\Plugin\ControllerAdmin $login = Common::getRequestVar('login', null, 'string'); if (Piwik::hasTheUserSuperUserAccess($login)) { - throw new Exception(Piwik::translate('Login_ExceptionInvalidSuperUserAccessAuthenticationMethod', array("logme"))); + throw new Exception(Piwik::translate('Login_ExceptionInvalidSuperUserAccessAuthenticationMethod', + array("logme"))); } $currentUrl = 'index.php'; @@ -263,8 +275,8 @@ class Controller extends \Piwik\Plugin\ControllerAdmin Piwik::checkUserHasSuperUserAccess(); return $this->renderTemplate('bruteForceLog', array( - 'blockedIps' => $this->bruteForceDetection->getCurrentlyBlockedIps(), - 'blacklistedIps' => $this->systemSettings->blacklistedBruteForceIps->getValue() + 'blockedIps' => $this->bruteForceDetection->getCurrentlyBlockedIps(), + 'blacklistedIps' => $this->systemSettings->blacklistedBruteForceIps->getValue() )); } @@ -277,14 +289,14 @@ class Controller extends \Piwik\Plugin\ControllerAdmin public function ajaxNoAccess($errorMessage) { return sprintf( - '
+ '

%s: %s

%s

', - Piwik::translate('General_Error'), - htmlentities($errorMessage, Common::HTML_ENCODING_QUOTE_STYLE, 'UTF-8', $doubleEncode = false), - 'index.php?module=' . Piwik::getLoginPluginName(), - Piwik::translate('Login_LogIn') + Piwik::translate('General_Error'), + htmlentities($errorMessage, Common::HTML_ENCODING_QUOTE_STYLE, 'UTF-8', $doubleEncode = false), + 'index.php?module=' . Piwik::getLoginPluginName(), + Piwik::translate('Login_LogIn') ); } @@ -317,7 +329,7 @@ class Controller extends \Piwik\Plugin\ControllerAdmin // only use redirect url if host is trusted if (!empty($parsedUrl['host']) && !Url::isValidHost($parsedUrl['host'])) { - $e = new \Piwik\Exception\Exception('The redirect URL host is not valid, it is not a trusted host. If this URL is trusted, you can allow this in your config.ini.php file by adding the line trusted_hosts[] = "'.Common::sanitizeInputValue($parsedUrl['host']).'" under [General]'); + $e = new \Piwik\Exception\Exception('The redirect URL host is not valid, it is not a trusted host. If this URL is trusted, you can allow this in your config.ini.php file by adding the line trusted_hosts[] = "' . Common::sanitizeInputValue($parsedUrl['host']) . '" under [General]'); $e->setIsHtmlMessage(); throw $e; } @@ -391,7 +403,7 @@ class Controller extends \Piwik\Plugin\ControllerAdmin protected function resetPasswordFirstStep($form) { $loginMail = $form->getSubmitValue('form_login'); - $password = $form->getSubmitValue('form_password'); + $password = $form->getSubmitValue('form_password'); try { $this->passwordResetter->initiatePasswordResetProcess($loginMail, $password); @@ -433,13 +445,14 @@ class Controller extends \Piwik\Plugin\ControllerAdmin } if (!empty($_POST['nonce']) - && !empty($_POST['mtmpasswordconfirm']) - && !empty($resetToken) - && !empty($login) - && !empty($passwordHash) - && empty($errorMessage)) { + && !empty($_POST['mtmpasswordconfirm']) + && !empty($resetToken) + && !empty($login) + && !empty($passwordHash) + && empty($errorMessage)) { Nonce::checkNonce(self::NONCE_CONFIRMRESETPASSWORD, $_POST['nonce']); - if ($this->passwordResetter->doesResetPasswordHashMatchesPassword($_POST['mtmpasswordconfirm'], $passwordHash)) { + if ($this->passwordResetter->doesResetPasswordHashMatchesPassword($_POST['mtmpasswordconfirm'], + $passwordHash)) { $this->passwordResetter->setHashedPasswordForLogin($login, $passwordHash); return $this->resetPasswordSuccess(); } else { @@ -450,8 +463,8 @@ class Controller extends \Piwik\Plugin\ControllerAdmin $nonce = Nonce::getNonce(self::NONCE_CONFIRMRESETPASSWORD); return $this->renderTemplateAs('confirmResetPassword', array( - 'nonce' => $nonce, - 'errorMessage' => $errorMessage + 'nonce' => $nonce, + 'errorMessage' => $errorMessage ), 'basic'); } @@ -497,4 +510,141 @@ class Controller extends \Piwik\Plugin\ControllerAdmin Url::redirectToUrl($logoutUrl); } } + + /** + * Init page for invite user + * @return string|void + */ + public function acceptInvitation() + { + $model = new UsersModel(); + $passwordHelper = new Password(); + $view = new View('@Login/invitation'); + + $token = Common::getRequestVar('token', null, 'string'); + $form = Common::getRequestVar('invitation_form', false, 'string'); + + //check token is valid + $user = $model->getUserByTokenAuth($token); + if ($user['invite_status'] !== 'pending') { + throw new Exception(Piwik::translate('Login_InvalidOrExpiredToken')); + } + + //if user not match the invite user + if (!$user) { + throw new Exception(Piwik::translate('Login_InvalidUsernameEmail')); + } + + //if form is blank + if (!empty($form)) { + $error = null; + $password = Common::getRequestVar('password', false, 'string'); + $passwordConfirmation = Common::getRequestVar('passwordConfirmation', false, 'string'); + $terms = Common::getRequestVar('terms', false, 'string'); + if (!$password) { + $error = Piwik::translate('Login_PasswordRequired'); + } + + //not accept terms + if (!$terms) { + $error = Piwik::translate('Login_TermsRequired'); + } + + //valid password + if (!UsersManager::isValidPasswordString($password)) { + $error = Piwik::translate('UsersManager_ExceptionInvalidPassword', + array(UsersManager::PASSWORD_MIN_LENGTH)); + } + //confirm matching password + if ($password !== $passwordConfirmation) { + $error = Piwik::translate('Login_PasswordsDoNotMatch'); + } + + if (!$error) { + $password = UsersManager::getPasswordHash($password); + $passwordInfo = $passwordHelper->info($password); + + if (!isset($passwordInfo['algo']) || 0 >= $passwordInfo['algo']) { + // password may have already been fully hashed + $password = $passwordHelper->hash($password); + } + + //update pending user to active user + $model->updateUserFields($user['login'], ['password' => $password, 'invite_status' => 'accept']); + $sessionInitializer = new SessionInitializer(); + $auth = StaticContainer::get('Piwik\Auth'); + $auth->setTokenAuth(null); // ensure authenticated through password + $auth->setLogin($user['login']); + $auth->setPassword($passwordConfirmation); + $sessionInitializer->initSession($auth); + + //send Admin Email + try { + $mail = StaticContainer::getContainer()->make(UserAcceptInvitationEmail::class, array( + 'login' => $user['login'], + 'emailAddress' => $user['email'], + 'userLogin' => $user['login'], + )); + $mail->safeSend(); + } catch (\Exception $e) { + + } + + $this->redirectToIndex('CoreHome', 'index'); + } + $view->AccessErrorString = $error; + } + $view->user = $user; + $view->token = $token; + $view->declined = false; + $this->configureView($view); + self::setHostValidationVariablesView($view); + return $view->render(); + } + + public function declineInvitation() + { + $model = new UsersModel(); + + $token = Common::getRequestVar('token', null, 'string'); + $form = Common::getRequestVar('invitation_form', false, 'string'); + + $user = $model->getUserByTokenAuth($token); + if ($user['invite_status'] !== 'pending') { + throw new Exception(Piwik::translate('Login_InvalidOrExpiredToken')); + } + //if user not match the invite user + if (!$user) { + throw new Exception(Piwik::translate('Login_InvalidUsernameEmail')); + } + + if ($form) { + $model->deleteAllTokensForUser($user['login']); + $model->updateUserFields($user['login'], ['invite_status' => 'decline']); + $this->redirectToIndex('Login', 'index'); + + } + + $view = new View('@Login/invitation'); + $view->declined = true; + $view->token = $token; + + //send Admin Email + try { + $mail = StaticContainer::getContainer()->make(UserDeclinedInvitationEmail::class, array( + 'login' => $user['login'], + 'emailAddress' => $user['email'], + 'userLogin' => $user['login'], + )); + $mail->safeSend(); + } catch (\Exception $e) { + + } + $this->configureView($view); + self::setHostValidationVariablesView($view); + return $view->render(); + + + } + } diff --git a/plugins/Login/lang/en.json b/plugins/Login/lang/en.json index 361c2c1b77..9f97cad22b 100644 --- a/plugins/Login/lang/en.json +++ b/plugins/Login/lang/en.json @@ -54,6 +54,15 @@ "SuspiciousLoginAttemptsInLastHourEmail3": "Ensure your password is a secure, random password of an appropriate length (for example, at least 30 characters).", "SuspiciousLoginAttemptsInLastHourEmail4": "Setup two-factor auth so attackers will need more information than just your password in order to login.", "SuspiciousLoginAttemptsInLastHourEmail5": "Additionally, if your Matomo has a limited set of users or IPs through which users will access it, it may be beneficial to setup a IP address allowlist. %1$sRead our docs for more information.%2$s", - "LoginNotAllowedBecauseUserLoginBlocked": "Login functionality is temporarily disabled since we've a suspicious amount of failed login attempts in the last hour." + "LoginNotAllowedBecauseUserLoginBlocked": "Login functionality is temporarily disabled since we've a suspicious amount of failed login attempts in the last hour.", + "InvitationTitle": "Accept Invitation", + "InvitationDeclineTitle": "Decline Invitation", + "InvitationDeclineBody": "Are you sure you want to decline this Invitation?", + "InvitationHints": "(to cancel this action, just leave the page)", + "Accept": "Accept", + "Yes": "Yes", + "TermsRequired": "Please Accept the terms and conditions", + "PasswordRequired": "Please enter password to continue", + "declineInvitationInfo": "Your invitation has been decline." } } diff --git a/plugins/Login/stylesheets/login.less b/plugins/Login/stylesheets/login.less index c9ed140a82..810a4b7264 100644 --- a/plugins/Login/stylesheets/login.less +++ b/plugins/Login/stylesheets/login.less @@ -106,4 +106,9 @@ #piwik a { color: #CDCDCD; } + + .hints{ + font-size: 14px; + color: gray; + } } diff --git a/plugins/Login/templates/invitation.twig b/plugins/Login/templates/invitation.twig new file mode 100644 index 0000000000..adcba7d505 --- /dev/null +++ b/plugins/Login/templates/invitation.twig @@ -0,0 +1,83 @@ +{% extends '@Login/inviteLayout.twig' %} + +{% block loginContent %} + {% if not declined %} +
+
+
+
+ {{ "Login_InvitationTitle"|translate }} +
+ + {% if AccessErrorString is defined %} +
+ {{ 'General_Error'|translate }}: {{ AccessErrorString|raw }}
+
+ {% endif %} + {% block content %} +
+ +
+
+ + +
+
+ + +
+
+ + +
+
+
+
+ + +
+
+
+ {% if isCustomLogo %} +

+ {{ linkTitle }} +

+ {% endif %} + {% endblock %} +
+
+
+ {% else %} +
+
+
+
+ {{ "Login_InvitationDeclineTitle"|translate }} +
+

{{ "Login_InvitationDeclineBody"|translate }}

+

{{ "Login_InvitationHints"|translate }}

+
+ +
+
+ +
+
+
+
+
+
+ {% endif %} +{% endblock %} \ No newline at end of file diff --git a/plugins/Login/templates/inviteLayout.twig b/plugins/Login/templates/inviteLayout.twig new file mode 100644 index 0000000000..3db4ed5be6 --- /dev/null +++ b/plugins/Login/templates/inviteLayout.twig @@ -0,0 +1,46 @@ +{% extends '@Morpheus/layout.twig' %} + +{% block meta %} + +{% endblock %} + +{% block head %} + {{ parent() }} +{% endblock %} + +{% set title %}{{ 'Login_InvitationTitle'|translate }}{% endset %} + +{% block pageDescription %}{{ 'General_OpenSourceWebAnalytics'|translate }}{% endblock %} + +{% set bodyId = 'loginPage' %} + +{% block body %} + + {{ postEvent("Template.beforeTopBar", "login") }} + {{ postEvent("Template.beforeContent", "login") }} + + {% include "_iframeBuster.twig" %} + +
+
+ + +
+
+ + {# untrusted host warning #} + {% if (isValidHost is defined and invalidHostMessage is defined and isValidHost == false) %} + {% include '@CoreHome/_warningInvalidHost.twig' %} + {% else %} + {% block loginContent %} + {% endblock %} + {% endif %} + +
+
+ +{% endblock %} diff --git a/plugins/Login/tests/Fixtures/PendingUsers.php b/plugins/Login/tests/Fixtures/PendingUsers.php new file mode 100644 index 0000000000..4be64378ac --- /dev/null +++ b/plugins/Login/tests/Fixtures/PendingUsers.php @@ -0,0 +1,54 @@ + '000pendingUser', + 'email' => 'pendinguser2light@example.com' + ); + + public $token = "13cb9dcef6cc70b02a640cee30dc8ce9"; + + public function setUp(): void + { + $this->setUpUser(); + } + + public function tearDown(): void + { + // empty + } + + protected function setUpUser() + { + $model = new Model(); + $model->addUser($this->pendingUser['login'], '', $this->pendingUser['email'], $this->dateTime, 1); + + $model->addTokenAuth($this->pendingUser['login'], $this->token, "Invite Token", + Date::now()->getDatetime(), + Date::now()->addDay(7)->getDatetime()); + + } +} \ No newline at end of file diff --git a/plugins/Login/tests/UI/Decline_spec.js b/plugins/Login/tests/UI/Decline_spec.js new file mode 100644 index 0000000000..b2b6893784 --- /dev/null +++ b/plugins/Login/tests/UI/Decline_spec.js @@ -0,0 +1,25 @@ +/*! + * Matomo - free/libre analytics platform + * + * login & password reset screenshot tests. + * + * @link https://matomo.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ + +describe('Decline', function () { + this.timeout(0); + this.fixture = 'Piwik\\Plugins\\Login\\tests\\Fixtures\\PendingUsers'; + + var pendingUserUrl = '?module=Login&action=declineInvitation&token=13cb9dcef6cc70b02a640cee30dc8ce9'; + + + + it('should display decline invite page', async function () { + await page.goto(pendingUserUrl); + expect(await page.screenshot({ fullPage: true })).to.matchImage('default'); + }); + + + +}); \ No newline at end of file diff --git a/plugins/Login/tests/UI/Invite_spec.js b/plugins/Login/tests/UI/Invite_spec.js new file mode 100644 index 0000000000..d937f2c891 --- /dev/null +++ b/plugins/Login/tests/UI/Invite_spec.js @@ -0,0 +1,38 @@ +/*! + * Matomo - free/libre analytics platform + * + * login & password reset screenshot tests. + * + * @link https://matomo.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ + +describe('Invite', function () { + this.timeout(0); + this.fixture = 'Piwik\\Plugins\\Login\\tests\\Fixtures\\PendingUsers'; + + var pendingUserUrl = '?module=Login&action=acceptInvitation&token=13cb9dcef6cc70b02a640cee30dc8ce9'; + var wrongUserUrl = '?module=Login&action=acceptInvitation&token=123'; + + + it('should display error page', async function (){ + await page.goto(wrongUserUrl); + expect(await page.screenshot({ fullPage: true })).to.matchImage('error'); + }); + + it('should display set password page', async function () { + await page.goto(pendingUserUrl); + expect(await page.screenshot({ fullPage: true })).to.matchImage('set_password'); + }); + + it('password confirmation error', async function () { + await page.type('#password', 'abcd1234'); + await page.type('#password_confirm', 'abcd123'); + await page.evaluate(function(){ + $('#login_form_submit').click(); + }); + expect(await page.screenshot({ fullPage: true })).to.matchImage('wrong_password'); + + }); + +}); \ No newline at end of file diff --git a/plugins/Login/tests/UI/expected-screenshots/Decline_default.png b/plugins/Login/tests/UI/expected-screenshots/Decline_default.png new file mode 100644 index 0000000000..fa9acf274f --- /dev/null +++ b/plugins/Login/tests/UI/expected-screenshots/Decline_default.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b4f71261c0c6e74cae66aba9d6749eb2e0852acb802349e573d35f38ad6a7861 +size 24210 diff --git a/plugins/Login/tests/UI/expected-screenshots/Invite_error.png b/plugins/Login/tests/UI/expected-screenshots/Invite_error.png new file mode 100644 index 0000000000..5d5cc8fcd4 --- /dev/null +++ b/plugins/Login/tests/UI/expected-screenshots/Invite_error.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c273f68c05b5c8398aa2248a92633bc83b5209188b859d173d76be5a3d96f630 +size 40102 diff --git a/plugins/Login/tests/UI/expected-screenshots/Invite_set_password.png b/plugins/Login/tests/UI/expected-screenshots/Invite_set_password.png new file mode 100644 index 0000000000..4979ed5066 --- /dev/null +++ b/plugins/Login/tests/UI/expected-screenshots/Invite_set_password.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d59911d79ef8cf203efa7a7d64024fe66c9c655dcf6ec32900954be7d9e7b494 +size 27166 diff --git a/plugins/Login/tests/UI/expected-screenshots/Invite_wrong_password.png b/plugins/Login/tests/UI/expected-screenshots/Invite_wrong_password.png new file mode 100644 index 0000000000..ac1265c02a --- /dev/null +++ b/plugins/Login/tests/UI/expected-screenshots/Invite_wrong_password.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9a8c371e544e1964269b1d6200e933a719a47a6b3dcba01549588dc67bb2f3ea +size 32681 diff --git a/plugins/TwoFactorAuth/tests/UI/expected-screenshots/TwoFactorAuthUsersManager_edit_with_2fa_reset_confirmed.png b/plugins/TwoFactorAuth/tests/UI/expected-screenshots/TwoFactorAuthUsersManager_edit_with_2fa_reset_confirmed.png index ce0f28d108..72d12a9ac2 100644 --- a/plugins/TwoFactorAuth/tests/UI/expected-screenshots/TwoFactorAuthUsersManager_edit_with_2fa_reset_confirmed.png +++ b/plugins/TwoFactorAuth/tests/UI/expected-screenshots/TwoFactorAuthUsersManager_edit_with_2fa_reset_confirmed.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cb7e81d0f1a1e4e227d81839ae30c46d8c52907ab18b1bf413f34958ee479617 -size 33937 +oid sha256:69c786766f588cd289abed5b2bbb76447eacf417af09ab4aca315d018a836713 +size 33822 diff --git a/plugins/TwoFactorAuth/tests/UI/expected-screenshots/TwoFactorAuthUsersManager_list.png b/plugins/TwoFactorAuth/tests/UI/expected-screenshots/TwoFactorAuthUsersManager_list.png index dd91c0fc6b..025e7e1437 100644 --- a/plugins/TwoFactorAuth/tests/UI/expected-screenshots/TwoFactorAuthUsersManager_list.png +++ b/plugins/TwoFactorAuth/tests/UI/expected-screenshots/TwoFactorAuthUsersManager_list.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f1f777120c6c8a529bb4c814e695a0c198df36803e1e392d349a77ed9038e748 -size 59097 +oid sha256:0b07a1448c7586d161c9ccd437aadeaae0e66278352bac861021f17aba1ec6f1 +size 68073 diff --git a/plugins/UsersManager/API.php b/plugins/UsersManager/API.php index b3efa63712..6eb5e6b9b7 100644 --- a/plugins/UsersManager/API.php +++ b/plugins/UsersManager/API.php @@ -18,17 +18,17 @@ use Piwik\Common; use Piwik\Config; use Piwik\Container\StaticContainer; use Piwik\Date; -use Piwik\Metrics\Formatter; use Piwik\NoAccessException; use Piwik\Option; use Piwik\Piwik; -use Piwik\Plugin; -use Piwik\Plugins\CoreAdminHome\Emails\UserCreatedEmail; +use Piwik\Plugins\CoreAdminHome\Emails\UserDeletedEmail; use Piwik\Plugins\Login\PasswordVerifier; use Piwik\Plugins\UsersManager\Emails\UserInfoChangedEmail; +use Piwik\Plugins\UsersManager\Repository\UserRepository; use Piwik\Site; use Piwik\Tracker\Cache; -use Piwik\Plugins\CoreAdminHome\Emails\UserDeletedEmail; +use Piwik\Validators\BaseValidator; +use Piwik\Validators\Email; /** * The UsersManager API lets you Manage Users and their permissions to access specific websites. @@ -86,16 +86,26 @@ class API extends \Piwik\Plugin\API private $twoFaPluginActivated; + private $userRepository; + const PREFERENCE_DEFAULT_REPORT = 'defaultReport'; const PREFERENCE_DEFAULT_REPORT_DATE = 'defaultReportDate'; private static $instance = null; - public function __construct(Model $model, UserAccessFilter $filter, Password $password, Access $access = null, Access\RolesProvider $roleProvider = null, Access\CapabilitiesProvider $capabilityProvider = null, PasswordVerifier $passwordVerifier = null) - { + public function __construct( + Model $model, + UserAccessFilter $filter, + Password $password, + Access $access = null, + Access\RolesProvider $roleProvider = null, + Access\CapabilitiesProvider $capabilityProvider = null, + PasswordVerifier $passwordVerifier = null + ) { $this->model = $model; $this->userFilter = $filter; $this->password = $password; + $this->userRepository = new UserRepository($model, $filter, $password); $this->access = $access ?: StaticContainer::get(Access::class); $this->roleProvider = $roleProvider ?: StaticContainer::get(RolesProvider::class); $this->capabilityProvider = $capabilityProvider ?: StaticContainer::get(CapabilitiesProvider::class); @@ -109,8 +119,8 @@ class API extends \Piwik\Plugin\API * * StaticContainer::getContainer()->set('UsersManager_API', \Piwik\Plugins\MyCustomUsersManager\API::getInstance()); * - * @throws Exception * @return \Piwik\Plugins\UsersManager\API + * @throws Exception */ public static function getInstance() { @@ -143,10 +153,10 @@ class API extends \Piwik\Plugin\API foreach ($this->roleProvider->getAllRoles() as $role) { $response[] = array( - 'id' => $role->getId(), - 'name' => $role->getName(), - 'description' => $role->getDescription(), - 'helpUrl' => $role->getHelpUrl(), + 'id' => $role->getId(), + 'name' => $role->getName(), + 'description' => $role->getDescription(), + 'helpUrl' => $role->getHelpUrl(), ); } @@ -165,12 +175,12 @@ class API extends \Piwik\Plugin\API foreach ($this->capabilityProvider->getAllCapabilities() as $capability) { $response[] = array( - 'id' => $capability->getId(), - 'name' => $capability->getName(), - 'description' => $capability->getDescription(), - 'helpUrl' => $capability->getHelpUrl(), - 'includedInRoles' => $capability->getIncludedInRoles(), - 'category' => $capability->getCategory(), + 'id' => $capability->getId(), + 'name' => $capability->getName(), + 'description' => $capability->getDescription(), + 'helpUrl' => $capability->getHelpUrl(), + 'includedInRoles' => $capability->getIncludedInRoles(), + 'category' => $capability->getCategory(), ); } @@ -263,11 +273,11 @@ class API extends \Piwik\Plugin\API Piwik::checkUserHasSuperUserAccess(); $userPreferences = array(); - foreach($preferenceNames as $preferenceName) { + foreach ($preferenceNames as $preferenceName) { $optionNameMatchAllUsers = $this->getPreferenceId('%', $preferenceName); $preferences = Option::getLike($optionNameMatchAllUsers); - foreach($preferences as $optionName => $optionValue) { + foreach ($preferences as $optionName => $optionValue) { $lastUnderscore = strrpos($optionName, self::OPTION_NAME_PREFERENCE_SEPARATOR); $userName = substr($optionName, 0, $lastUnderscore); $preference = substr($optionName, $lastUnderscore + 1); @@ -279,19 +289,19 @@ class API extends \Piwik\Plugin\API private function getPreferenceId($login, $preference) { - if(false !== strpos($preference, self::OPTION_NAME_PREFERENCE_SEPARATOR)) { + if (false !== strpos($preference, self::OPTION_NAME_PREFERENCE_SEPARATOR)) { throw new Exception("Preference name cannot contain underscores."); } $names = array( - self::PREFERENCE_DEFAULT_REPORT, - self::PREFERENCE_DEFAULT_REPORT_DATE, - 'isLDAPUser', // used in loginldap - 'hideSegmentDefinitionChangeMessage',// used in JS + 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)) { + && !in_array($preference, $customPreferences, true)) { throw new Exception('Not supported preference name: ' . $preference); } return $login . self::OPTION_NAME_PREFERENCE_SEPARATOR . $preference; @@ -363,7 +373,8 @@ class API extends \Piwik\Plugin\API 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, $loginsToLimit); foreach ($users as &$user) { $user['superuser_access'] = $user['superuser_access'] == 1; @@ -371,7 +382,10 @@ class API extends \Piwik\Plugin\API $user['role'] = 'superuser'; $user['capabilities'] = []; } else { - [$user['role'], $user['capabilities']] = $this->getRoleAndCapabilitiesFromAccess($user['access']); + [ + $user['role'], + $user['capabilities'] + ] = $this->getRoleAndCapabilitiesFromAccess($user['access']); $user['role'] = empty($user['role']) ? 'noaccess' : reset($user['role']); } @@ -380,8 +394,8 @@ class API extends \Piwik\Plugin\API } } - $users = $this->enrichUsers($users); - $users = $this->enrichUsersWithLastSeen($users); + $users = $this->userRepository->enrichUsers($users); + $users = $this->userRepository->enrichUsersWithLastSeen($users); foreach ($users as &$user) { unset($user['password']); @@ -413,9 +427,8 @@ class API extends \Piwik\Plugin\API $users = $this->model->getUsers($logins); $users = $this->userFilter->filterUsers($users); - $users = $this->enrichUsers($users); + return $this->userRepository->enrichUsers($users); - return $users; } /** @@ -467,11 +480,12 @@ class API extends \Piwik\Plugin\API */ private function checkAccessType($access) { - $access = (array) $access; + $access = (array)$access; 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])); } } } @@ -563,8 +577,8 @@ class API extends \Piwik\Plugin\API $sites = $siteManagerModel->getAllSites(); foreach ($sites as $site) { $return[] = array( - 'site' => $site['idsite'], - 'access' => 'admin' + 'site' => $site['idsite'], + 'access' => 'admin' ); } return $return; @@ -592,8 +606,13 @@ class API extends \Piwik\Plugin\API * ) * @throws Exception */ - public function getSitesAccessForUser($userLogin, $limit = null, $offset = 0, $filter_search = null, $filter_access = null) - { + public function getSitesAccessForUser( + $userLogin, + $limit = null, + $offset = 0, + $filter_search = null, + $filter_access = null + ) { Piwik::checkUserHasSomeAdminAccess(); $this->checkUserExists($userLogin); @@ -609,9 +628,13 @@ 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'], $siteAccess['capabilities']] = $this->getRoleAndCapabilitiesFromAccess($siteAccess['access']); + [ + $siteAccess['role'], + $siteAccess['capabilities'] + ] = $this->getRoleAndCapabilitiesFromAccess($siteAccess['access']); $siteAccess['role'] = empty($siteAccess['role']) ? 'noaccess' : reset($siteAccess['role']); unset($siteAccess['access']); } @@ -640,9 +663,8 @@ class API extends \Piwik\Plugin\API $user = $this->model->getUser($userLogin); $user = $this->userFilter->filterUser($user); - $user = $this->enrichUser($user); + return $this->userRepository->enrichUser($user); - return $user; } /** @@ -660,41 +682,7 @@ class API extends \Piwik\Plugin\API $user = $this->model->getUserByEmail($userEmail); $user = $this->userFilter->filterUser($user); - $user = $this->enrichUser($user); - - return $user; - } - - private function checkLogin($userLogin) - { - if ($this->userExists($userLogin)) { - throw new Exception(Piwik::translate('UsersManager_ExceptionLoginExists', $userLogin)); - } - - if ($this->userEmailExists($userLogin)) { - throw new Exception(Piwik::translate('UsersManager_ExceptionLoginExistsAsEmail', $userLogin)); - } - - Piwik::checkValidLoginString($userLogin); - } - - private function checkEmail($email, $userLogin = null) - { - if ($this->userEmailExists($email)) { - throw new Exception(Piwik::translate('UsersManager_ExceptionEmailExists', $email)); - } - - if ($userLogin && mb_strtolower($userLogin) !== mb_strtolower($email) && $this->userExists($email)) { - throw new Exception(Piwik::translate('UsersManager_ExceptionEmailExistsAsLogin', $email)); - } - - if (!$userLogin && $this->userExists($email)) { - throw new Exception(Piwik::translate('UsersManager_ExceptionEmailExistsAsLogin', $email)); - } - - if (!Piwik::isValidEmailString($email)) { - throw new Exception(Piwik::translate('UsersManager_ExceptionInvalidEmail')); - } + return $this->userRepository->enrichUser($user); } /** @@ -704,72 +692,40 @@ class API extends \Piwik\Plugin\API * - a password that has to be valid * - an email that has to be in a correct format * - * @see userExists() + * @throws Exception in case of an invalid parameter * @see isValidLoginString() * @see isValidPasswordString() * @see isValidEmailString() * - * @throws Exception in case of an invalid parameter + * @see userExists() */ public function addUser($userLogin, $password, $email, $_isPasswordHashed = false, $initialIdSite = null) { - Piwik::checkUserHasSomeAdminAccess(); - UsersManager::dieIfUsersAdminIsDisabled(); - - if (!Piwik::hasUserSuperUserAccess()) { - if (empty($initialIdSite)) { - throw new \Exception(Piwik::translate("UsersManager_AddUserNoInitialAccessError")); - } - - Piwik::checkUserHasAdminAccess($initialIdSite); - } - - $this->checkLogin($userLogin); - $this->checkEmail($email); - $password = Common::unsanitizeInputValue($password); + UsersManager::checkPassword($password); + //create User + $this->userRepository->create($userLogin, $email, $initialIdSite, $password, $_isPasswordHashed); - if (!$_isPasswordHashed) { - UsersManager::checkPassword($password); - - $passwordTransformed = UsersManager::getPasswordHash($password); - } else { - $passwordTransformed = $password; - } - - $passwordTransformed = $this->password->hash($passwordTransformed); - - $this->model->addUser($userLogin, $passwordTransformed, $email, Date::now()->getDatetime()); + // send admin Email + $this->userRepository->sendNewUserEmails($userLogin, null); + } - $container = StaticContainer::getContainer(); - $mail = $container->make(UserCreatedEmail::class, array( - 'login' => Piwik::getCurrentUserLogin(), - 'emailAddress' => Piwik::getCurrentUserEmail(), - 'userLogin' => $userLogin - )); - $mail->safeSend(); - // we reload the access list which doesn't yet take in consideration this new user - Access::getInstance()->reloadAccess(); - Cache::deleteTrackerCache(); + public function inviteUser($userLogin, $email, $initialIdSite = null, $expired = 7) + { + //create User + $this->userRepository->create($userLogin, $email, $initialIdSite); - /** - * Triggered after a new user is created. - * - * @param string $userLogin The new user's login handle. - */ - Piwik::postEvent('UsersManager.addUser.end', array($userLogin, $email, $password)); + // send invited user an email + $this->userRepository->sendNewUserEmails($userLogin, $expired); - if ($initialIdSite) { - $this->setUserAccess($userLogin, 'view', $initialIdSite); - } } /** * Enable or disable Super user access to the given user login. Note: When granting Super User access all previous * permissions of the user will be removed as the user gains access to everything. * - * @param string $userLogin the user login. + * @param string $userLogin the user login. * @param bool|int $hasSuperUserAccess true or '1' to grant Super User access, false or '0' to remove Super User * access. * @param string $passwordConfirmation the current user's password. For security purposes, this value should be @@ -787,7 +743,7 @@ class API extends \Piwik\Plugin\API $isCliMode = Common::isPhpCliMode() && !(defined('PIWIK_TEST_MODE') && PIWIK_TEST_MODE); if (!$isCliMode - && $requirePasswordConfirmation + && $requirePasswordConfirmation ) { $this->confirmCurrentUserPassword($passwordConfirmation); } @@ -795,8 +751,8 @@ class API extends \Piwik\Plugin\API if (!$hasSuperUserAccess && $this->isUserTheOnlyUserHavingSuperUserAccess($userLogin)) { $message = Piwik::translate("UsersManager_ExceptionRemoveSuperUserAccessOnlySuperUser", $userLogin) - . " " - . Piwik::translate("UsersManager_ExceptionYouMustGrantSuperUserAccessFirst"); + . " " + . Piwik::translate("UsersManager_ExceptionYouMustGrantSuperUserAccessFirst"); throw new Exception($message); } @@ -826,90 +782,12 @@ class API extends \Piwik\Plugin\API Piwik::checkUserIsNotAnonymous(); $users = $this->model->getUsersHavingSuperUserAccess(); - $users = $this->enrichUsers($users); // we do not filter these users by access and return them all since we need to print this information in the // UI and they are allowed to see this. - - return $users; + return $this->userRepository->enrichUsers($users); } - private function enrichUsersWithLastSeen($users) - { - $formatter = new Formatter(); - - $lastSeenTimes = LastSeenTimeLogger::getLastSeenTimesForAllUsers(); - foreach ($users as &$user) { - $login = $user['login']; - if (isset($lastSeenTimes[$login])) { - $user['last_seen'] = $formatter->getPrettyTimeFromSeconds(time() - $lastSeenTimes[$login]); - } - } - return $users; - } - - private function enrichUsers($users) - { - if (!empty($users)) { - foreach ($users as $index => $user) { - $users[$index] = $this->enrichUser($user); - } - } - return $users; - } - - private function isTwoFactorAuthPluginEnabled() - { - if (!isset($this->twoFaPluginActivated)) { - $this->twoFaPluginActivated = Plugin\Manager::getInstance()->isPluginActivated('TwoFactorAuth'); - } - return $this->twoFaPluginActivated; - } - - private function enrichUser($user) - { - if (empty($user)) { - return $user; - } - - unset($user['token_auth']); - unset($user['password']); - unset($user['ts_password_modified']); - unset($user['idchange_last_viewed']); - - if ($lastSeen = LastSeenTimeLogger::getLastSeenTimeForUser($user['login'])) { - $user['last_seen'] = Date::getDatetimeFromTimestamp($lastSeen); - } - - if (Piwik::hasUserSuperUserAccess()) { - $user['uses_2fa'] = !empty($user['twofactor_secret']) && $this->isTwoFactorAuthPluginEnabled(); - unset($user['twofactor_secret']); - return $user; - } - - $newUser = array('login' => $user['login']); - - if ($user['login'] === Piwik::getCurrentUserLogin() || !empty($user['superuser_access'])) { - $newUser['email'] = $user['email']; - } - - if (isset($user['role'])) { - $newUser['role'] = $user['role'] == 'superuser' ? 'admin' : $user['role']; - } - if (isset($user['capabilities'])) { - $newUser['capabilities'] = $user['capabilities']; - } - - if (isset($user['superuser_access'])) { - $newUser['superuser_access'] = $user['superuser_access']; - } - - if (isset($user['last_seen'])) { - $newUser['last_seen'] = $user['last_seen']; - } - - return $newUser; - } /** * Updates a user in the database. @@ -920,9 +798,13 @@ class API extends \Piwik\Plugin\API * * @see addUser() for all the parameters */ - public function updateUser($userLogin, $password = false, $email = false, - $_isPasswordHashed = false, $passwordConfirmation = false) - { + public function updateUser( + $userLogin, + $password = false, + $email = false, + $_isPasswordHashed = false, + $passwordConfirmation = false + ) { $requirePasswordConfirmation = self::$UPDATE_USER_REQUIRE_PASSWORD_CONFIRMATION; self::$UPDATE_USER_REQUIRE_PASSWORD_CONFIRMATION = true; @@ -933,7 +815,7 @@ class API extends \Piwik\Plugin\API $this->checkUserIsNotAnonymous($userLogin); $this->checkUserExists($userLogin); - $userInfo = $this->model->getUser($userLogin); + $userInfo = $this->model->getUser($userLogin); $changeShouldRequirePasswordConfirmation = false; $passwordHasBeenUpdated = false; @@ -966,7 +848,7 @@ class API extends \Piwik\Plugin\API $hasEmailChanged = mb_strtolower($email) !== mb_strtolower($userInfo['email']); if ($hasEmailChanged) { - $this->checkEmail($email, $userLogin); + BaseValidator::check('email', $email, [new Email(true)]); $changeShouldRequirePasswordConfirmation = true; } @@ -1001,9 +883,9 @@ class API extends \Piwik\Plugin\API * * @param string $userLogin the user login(s). * + * @return bool true on success * @throws Exception if the user doesn't exist or if deleting the users would leave no superusers. * - * @return bool true on success */ public function deleteUser($userLogin) { @@ -1015,8 +897,8 @@ class API extends \Piwik\Plugin\API if ($this->isUserTheOnlyUserHavingSuperUserAccess($userLogin)) { $message = Piwik::translate("UsersManager_ExceptionDeleteOnlyUserWithSuperUserAccess", $userLogin) - . " " - . Piwik::translate("UsersManager_ExceptionYouMustGrantSuperUserAccessFirst"); + . " " + . Piwik::translate("UsersManager_ExceptionYouMustGrantSuperUserAccessFirst"); throw new Exception($message); } @@ -1026,9 +908,9 @@ class API extends \Piwik\Plugin\API $container = StaticContainer::getContainer(); $email = $container->make(UserDeletedEmail::class, array( - 'login' => Piwik::getCurrentUserLogin(), - 'emailAddress' => Piwik::getCurrentUserEmail(), - 'userLogin' => $userLogin + 'login' => Piwik::getCurrentUserLogin(), + 'emailAddress' => Piwik::getCurrentUserEmail(), + 'userLogin' => $userLogin )); $email->safeSend(); @@ -1118,9 +1000,10 @@ class API extends \Piwik\Plugin\API $idSites = $this->getIdSitesCheckAdminAccess($idSites); if ($userLogin === 'anonymous' && - (is_array($access) || !in_array($access, array('view', 'noaccess'), true)) + (is_array($access) || !in_array($access, array('view', 'noaccess'), true)) ) { - throw new Exception(Piwik::translate("UsersManager_ExceptionAnonymousAccessNotPossible", array('noaccess', 'view'))); + throw new Exception(Piwik::translate("UsersManager_ExceptionAnonymousAccessNotPossible", + array('noaccess', 'view'))); } $roles = array(); @@ -1178,7 +1061,7 @@ class API extends \Piwik\Plugin\API * the backend. * * @param string $userLogin The user login - * @param string|string[] $capabilities To fetch a list of available capabilities call "UsersManager.getAvailableCapabilities". + * @param string|string[] $capabilities To fetch a list of available capabilities call "UsersManager.getAvailableCapabilities". * @param int|int[] $idSites * @throws Exception */ @@ -1193,7 +1076,7 @@ class API extends \Piwik\Plugin\API $this->checkUserExists($userLogin); $this->checkUsersHasNotSuperUserAccess([$userLogin]); - if (!is_array($capabilities)){ + if (!is_array($capabilities)) { $capabilities = array($capabilities); } @@ -1208,7 +1091,8 @@ 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 @@ -1240,12 +1124,12 @@ class API extends \Piwik\Plugin\API $sitesIdWithCapability = array(); foreach ($sites as $site) { if (in_array($site['access'], $roleIds, true)) { - $sitesIdWithRole[(int) $site['site']] = $site['access']; + $sitesIdWithRole[(int)$site['site']] = $site['access']; } else { - if (!isset($sitesIdWithCapability[(int) $site['site']])) { - $sitesIdWithCapability[(int) $site['site']] = array(); + if (!isset($sitesIdWithCapability[(int)$site['site']])) { + $sitesIdWithCapability[(int)$site['site']] = array(); } - $sitesIdWithCapability[(int) $site['site']][] = $site['access']; + $sitesIdWithCapability[(int)$site['site']][] = $site['access']; } } return [$sitesIdWithRole, $sitesIdWithCapability]; @@ -1258,7 +1142,7 @@ class API extends \Piwik\Plugin\API * assigned role will always include this capability. * * @param string $userLogin The user login - * @param string|string[] $capabilities To fetch a list of available capabilities call "UsersManager.getAvailableCapabilities". + * @param string|string[] $capabilities To fetch a list of available capabilities call "UsersManager.getAvailableCapabilities". * @param int|int[] $idSites * @throws Exception */ @@ -1268,7 +1152,7 @@ class API extends \Piwik\Plugin\API $this->checkUserExists($userLogin); - if (!is_array($capabilities)){ + if (!is_array($capabilities)) { $capabilities = array($capabilities); } @@ -1350,7 +1234,7 @@ class API extends \Piwik\Plugin\API private function checkUsersHasNotSuperUserAccess($userLogins) { - $userLogins = (array) $userLogins; + $userLogins = (array)$userLogins; $superusers = $this->getUsersHavingSuperUserAccess(); $superusers = array_column($superusers, null, 'login'); @@ -1397,8 +1281,13 @@ class API extends \Piwik\Plugin\API * If expireDate is set and expireHours, then expireDate will be used. * @return string */ - public function createAppSpecificTokenAuth($userLogin, $passwordConfirmation, $description, $expireDate = null, $expireHours = 0) - { + public function createAppSpecificTokenAuth( + $userLogin, + $passwordConfirmation, + $description, + $expireDate = null, + $expireHours = 0 + ) { $user = $this->model->getUser($userLogin); if (empty($user) && Piwik::isValidEmailString($userLogin)) { $user = $this->model->getUserByEmail($userLogin); @@ -1501,7 +1390,8 @@ 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'); } } @@ -1519,7 +1409,8 @@ 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() @@ -1539,7 +1430,7 @@ class API extends \Piwik\Plugin\API $deviceBrand = $uaParser->getBrandName(); $deviceModel = $uaParser->getModel(); if (!empty($deviceBrand) - || !empty($deviceModel) + || !empty($deviceModel) ) { $parts = array_filter([$deviceBrand, $deviceModel]); $description .= ' (' . implode(' ', $parts) . ')'; @@ -1547,4 +1438,29 @@ class API extends \Piwik\Plugin\API return $description; } + + /** + * resend the invite email to user + * @param $userLogin + * @throws NoAccessException + * @throws \DI\DependencyException + * @throws \DI\NotFoundException + */ + public function resendInvite($userLogin, $expired = 7) + { + Piwik::checkUserIsNotAnonymous(); + Piwik::checkUserHasSuperUserAccess(); + + $this->checkUserIsNotAnonymous($userLogin); + + if (!$this->model->getPendingUser($userLogin)) { + throw new Exception(Piwik::translate("UsersManager_ExceptionUserDoesNotExist", $userLogin)); + } + + $this->model->updateUserFields($userLogin, ['invite_status' => 'pending']); + $this->userRepository->sendNewUserEmails($userLogin, $expired, false); + Cache::deleteTrackerCache(); + } + + } diff --git a/plugins/UsersManager/Emails/UserInviteEmail.php b/plugins/UsersManager/Emails/UserInviteEmail.php new file mode 100644 index 0000000000..bfe43771bc --- /dev/null +++ b/plugins/UsersManager/Emails/UserInviteEmail.php @@ -0,0 +1,84 @@ +currentUser = $currentUser; + $this->user = $user; + $this->token = $token; + $this->setUpEmail(); + } + + + private function setUpEmail() + { + $this->setDefaultFromPiwik(); + $this->addTo($this->user['email']); + $this->setSubject($this->getDefaultSubject()); + $this->addReplyTo($this->getFrom(), $this->getFromName()); + $this->setWrappedHtmlBody($this->getDefaultBodyView()); + } + + protected function getDefaultSubject() + { + return Piwik::translate('CoreAdminHome_UserInviteSubject', + [$this->currentUser, $this->user['login']]); + } + + private function getDefaultSubjectWithStyle() + { + return Piwik::translate('CoreAdminHome_UserInviteSubject', + ["" . $this->currentUser . "", "" . $this->user['login'] . ""]); + } + + protected function getDefaultBodyView() + { + $view = new View('@UsersManager/_userInviteEmail.twig'); + $view->login = $this->user['login']; + $view->emailAddress = $this->user['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]); + return $view; + } +} \ No newline at end of file diff --git a/plugins/UsersManager/Model.php b/plugins/UsersManager/Model.php index 00fed4f5a5..362491760e 100644 --- a/plugins/UsersManager/Model.php +++ b/plugins/UsersManager/Model.php @@ -63,11 +63,11 @@ class Model public function getUsers(array $userLogins) { $where = ''; - $bind = array(); + $bind = array(); if (!empty($userLogins)) { $where = 'WHERE login IN (' . Common::getSqlStringFieldsArray($userLogins) . ')'; - $bind = $userLogins; + $bind = $userLogins; } $db = $this->getDb(); @@ -100,7 +100,7 @@ class Model { $db = $this->getDb(); $users = $db->fetchAll("SELECT login,idsite FROM " . Common::prefixTable("access") - . " WHERE access = ? + . " WHERE access = ? ORDER BY login, idsite", $access); $return = array(); @@ -115,7 +115,7 @@ class Model { $db = $this->getDb(); $users = $db->fetchAll("SELECT login,access FROM " . Common::prefixTable("access") - . " WHERE idsite = ?", $idSite); + . " WHERE idsite = ?", $idSite); $return = array(); foreach ($users as $user) { @@ -129,7 +129,7 @@ class Model { $db = $this->getDb(); $users = $db->fetchAll("SELECT login FROM " . Common::prefixTable("access") - . " WHERE idsite = ? AND access = ?", array($idSite, $access)); + . " WHERE idsite = ? AND access = ?", array($idSite, $access)); $logins = array(); foreach ($users as $user) { @@ -170,15 +170,21 @@ class Model $return = array(); foreach ($users as $user) { $return[] = array( - 'site' => $user['idsite'], - 'access' => $user['access'], + 'site' => $user['idsite'], + 'access' => $user['access'], ); } return $return; } - public function getSitesAccessFromUserWithFilters($userLogin, $limit = null, $offset = 0, $pattern = null, $access = null, $idSites = null) - { + public function getSitesAccessFromUserWithFilters( + $userLogin, + $limit = null, + $offset = 0, + $pattern = null, + $access = null, + $idSites = null + ) { $siteAccessFilter = new SiteAccessFilter($userLogin, $pattern, $access, $idSites); list($joins, $bind) = $siteAccessFilter->getJoins('a'); @@ -237,6 +243,7 @@ class Model { $db = $this->getDb(); + $matchedUsers = $db->fetchAll("SELECT * FROM {$this->userTable} WHERE login = ?", $userLogin); // for BC in 2.15 LTS, if there is a user w/ an exact match to the requested login, return that user. @@ -278,29 +285,38 @@ class Model private function generateTokenAuth() { - return md5(Common::getRandomString(32, 'abcdef1234567890') . microtime(true) . Common::generateUniqId() . SettingsPiwik::getSalt()); + return md5(Common::getRandomString(32, + 'abcdef1234567890') . microtime(true) . Common::generateUniqId() . SettingsPiwik::getSalt()); } - public function addTokenAuth($login, $tokenAuth, $description, $dateCreated, $dateExpired = null, $isSystemToken = false) - { + public function addTokenAuth( + $login, + $tokenAuth, + $description, + $dateCreated, + $dateExpired = null, + $isSystemToken = false + ) { if (!$this->getUser($login)) { throw new \Exception('User ' . $login . ' does not exist'); } - BaseValidator::check('Description', $description, [new NotEmpty(), new CharacterLength(1, self::MAX_LENGTH_TOKEN_DESCRIPTION)]); + BaseValidator::check('Description', $description, + [new NotEmpty(), new CharacterLength(1, self::MAX_LENGTH_TOKEN_DESCRIPTION)]); if (empty($dateExpired)) { $dateExpired = null; } - $isSystemToken = (int) $isSystemToken; + $isSystemToken = (int)$isSystemToken; $insertSql = "INSERT INTO " . $this->tokenTable . ' (login, description, password, date_created, date_expired, system_token, hash_algo) VALUES (?, ?, ?, ?, ?, ?, ?)'; $tokenAuth = $this->hashTokenAuth($tokenAuth); $db = $this->getDb(); - $db->query($insertSql, [$login, $description, $tokenAuth, $dateCreated, $dateExpired, $isSystemToken, self::TOKEN_HASH_ALGO]); + $db->query($insertSql, + [$login, $description, $tokenAuth, $dateCreated, $dateExpired, $isSystemToken, self::TOKEN_HASH_ALGO]); return $db->lastInsertId(); } @@ -317,7 +333,8 @@ class Model { $db = $this->getDb(); - $token = $db->fetchRow("SELECT description FROM " . $this->tokenTable . " WHERE `idusertokenauth` = ? and login = ? LIMIT 1", array($idTokenAuth, $login)); + $token = $db->fetchRow("SELECT description FROM " . $this->tokenTable . " WHERE `idusertokenauth` = ? and login = ? LIMIT 1", + array($idTokenAuth, $login)); return $token ? $token['description'] : ''; } @@ -325,8 +342,8 @@ class Model private function getQueryNotExpiredToken() { return array( - 'sql' => ' (date_expired is null or date_expired > ?)', - 'bind' => array(Date::now()->getDatetime()) + 'sql' => ' (date_expired is null or date_expired > ?)', + 'bind' => array(Date::now()->getDatetime()) ); } @@ -338,7 +355,8 @@ class Model $expired = $this->getQueryNotExpiredToken(); $bind = array_merge(array($tokenAuth), $expired['bind']); - $token = $db->fetchRow("SELECT * FROM " . $this->tokenTable . " WHERE `password` = ? and " . $expired['sql'], $bind); + $token = $db->fetchRow("SELECT * FROM " . $this->tokenTable . " WHERE `password` = ? and " . $expired['sql'], + $bind); return $token; } @@ -347,9 +365,20 @@ class Model { $db = $this->getDb(); - return $db->query("DELETE FROM " . $this->tokenTable . " WHERE `date_expired` is not null and date_expired < ?", $expiredSince); + return $db->query("DELETE FROM " . $this->tokenTable . " WHERE `date_expired` is not null and date_expired < ?", + $expiredSince); } + public function checkUserHasUnexpiredToken($login) + { + $db = $this->getDb(); + $expired = $this->getQueryNotExpiredToken(); + $bind = array_merge(array($login), $expired['bind']); + return $db->fetchOne("SELECT idusertokenauth FROM " . $this->tokenTable . " WHERE `login` = ? and " . $expired['sql'], + $bind); + } + + public function deleteAllTokensForUser($login) { $db = $this->getDb(); @@ -365,7 +394,8 @@ class Model $expired = $this->getQueryNotExpiredToken(); $bind = array_merge(array($login), $expired['bind']); - return $db->fetchAll("SELECT * FROM " . $this->tokenTable . " WHERE `login` = ? and system_token = 0 and " . $expired['sql'] . ' order by idusertokenauth ASC', $bind); + return $db->fetchAll("SELECT * FROM " . $this->tokenTable . " WHERE `login` = ? and system_token = 0 and " . $expired['sql'] . ' order by idusertokenauth ASC', + $bind); } public function getAllHashedTokensForLogins($logins) @@ -380,7 +410,8 @@ class Model $expired = $this->getQueryNotExpiredToken(); $bind = array_merge($logins, $expired['bind']); - $tokens = $db->fetchAll("SELECT password FROM " . $this->tokenTable . " WHERE `login` IN (".$placeholder.") and " . $expired['sql'], $bind); + $tokens = $db->fetchAll("SELECT password FROM " . $this->tokenTable . " WHERE `login` IN (" . $placeholder . ") and " . $expired['sql'], + $bind); return array_column($tokens, 'password'); } @@ -388,7 +419,8 @@ class Model { $db = $this->getDb(); - return $db->query("DELETE FROM " . $this->tokenTable . " WHERE `idusertokenauth` = ? and login = ?", array($idTokenAuth, $login)); + return $db->query("DELETE FROM " . $this->tokenTable . " WHERE `idusertokenauth` = ? and login = ?", + array($idTokenAuth, $login)); } public function setTokenAuthWasUsed($tokenAuth, $dateLastUsed) @@ -406,23 +438,25 @@ class Model } $this->updateTokenAuthTable($token['idusertokenauth'], array( - 'last_used' => $dateLastUsed + 'last_used' => $dateLastUsed )); } } - private function updateTokenAuthTable($idTokenAuth, $fields) { - $set = array(); + private function updateTokenAuthTable($idTokenAuth, $fields) + { + $set = array(); $bind = array(); foreach ($fields as $key => $val) { - $set[] = "`$key` = ?"; + $set[] = "`$key` = ?"; $bind[] = $val; } $bind[] = $idTokenAuth; $db = $this->getDb(); - $db->query(sprintf('UPDATE `%s` SET %s WHERE `idusertokenauth` = ?', $this->tokenTable, implode(', ', $set)), $bind); + $db->query(sprintf('UPDATE `%s` SET %s WHERE `idusertokenauth` = ?', $this->tokenTable, implode(', ', $set)), + $bind); } public function getUserByEmail($userEmail) @@ -444,36 +478,42 @@ class Model } } - public function addUser($userLogin, $hashedPassword, $email, $dateRegistered) + public function addUser($userLogin, $hashedPassword, $email, $dateRegistered, $inviteStatus = null) { $user = array( - 'login' => $userLogin, - 'password' => $hashedPassword, - 'email' => $email, - 'date_registered' => $dateRegistered, - 'superuser_access' => 0, - 'ts_password_modified' => Date::now()->getDatetime(), - 'idchange_last_viewed' => null + 'login' => $userLogin, + 'password' => $hashedPassword, + 'email' => $email, + 'date_registered' => $dateRegistered, + 'superuser_access' => 0, + 'ts_password_modified' => Date::now()->getDatetime(), + 'idchange_last_viewed' => null ); + + if ($inviteStatus) { + $user['invite_status'] = 'pending'; + } + $db = $this->getDb(); $db->insert($this->userTable, $user); + return $user; } public function setSuperUserAccess($userLogin, $hasSuperUserAccess) { $this->updateUserFields($userLogin, array( - 'superuser_access' => $hasSuperUserAccess ? 1 : 0 + 'superuser_access' => $hasSuperUserAccess ? 1 : 0 )); } public function updateUserFields($userLogin, $fields) { - $set = array(); + $set = array(); $bind = array(); foreach ($fields as $key => $val) { - $set[] = "`$key` = ?"; + $set[] = "`$key` = ?"; $bind[] = $val; } @@ -507,7 +547,7 @@ class Model public function updateUser($userLogin, $hashedPassword, $email) { $fields = array( - 'email' => $email, + 'email' => $email, ); if (!empty($hashedPassword)) { $fields['password'] = $hashedPassword; @@ -589,7 +629,8 @@ class Model $db->query("DELETE FROM " . Common::prefixTable("access") . " WHERE login = ?", $userLogin); } else { foreach ($idSites as $idsite) { - $db->query("DELETE FROM " . Common::prefixTable("access") . " WHERE idsite = ? AND login = ?", [$idsite, $userLogin]); + $db->query("DELETE FROM " . Common::prefixTable("access") . " WHERE idsite = ? AND login = ?", + [$idsite, $userLogin]); } } } @@ -628,8 +669,14 @@ class Model * @param string[]|null $logins the logins to limit the search to (if any) * @return array */ - public function getUsersWithRole($idSite, $limit = null, $offset = null, $pattern = null, $access = null, $logins = null) - { + public function getUsersWithRole( + $idSite, + $limit = null, + $offset = null, + $pattern = null, + $access = null, + $logins = null + ) { $filter = new UserTableFilter($access, $idSite, $pattern, $logins); list($joins, $bind) = $filter->getJoins('u'); @@ -681,11 +728,19 @@ class Model $idSites = array_map('intval', $idSites); $loginSql = 'SELECT DISTINCT ia.login FROM ' . Common::prefixTable('access') . ' ia WHERE ia.idsite IN (' - . implode(',', $idSites) . ')'; + . implode(',', $idSites) . ')'; $logins = \Piwik\Db::fetchAll($loginSql); $logins = array_column($logins, 'login'); return $logins; } + public function getPendingUser($userLogin) + { + $db = $this->getDb(); + $sql = "SELECT count(*) FROM " . $this->userTable . " WHERE login = ? and invite_status not like ?"; + $bind = [$userLogin, 'accept']; + return $db->fetchOne($sql, $bind); + } + } diff --git a/plugins/UsersManager/Repository/UserRepository.php b/plugins/UsersManager/Repository/UserRepository.php new file mode 100644 index 0000000000..51dd49636b --- /dev/null +++ b/plugins/UsersManager/Repository/UserRepository.php @@ -0,0 +1,225 @@ +model = $model; + $this->filter = $filter; + $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(); + if (!Piwik::hasUserSuperUserAccess()) { + if (empty($initialIdSite)) { + throw new \Exception(Piwik::translate("UsersManager_AddUserNoInitialAccessError")); + } + // check if the site exist + 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)]); + + if (!empty($password)) { + if (!$_isPasswordHashed) { + $passwordTransformed = UsersManager::getPasswordHash($password); + } else { + $passwordTransformed = $password; + } + $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)); + + if ($initialIdSite) { + API::getInstance()->setUserAccess($userLogin, 'view', $initialIdSite); + } + } + + public function sendNewUserEmails($userLogin, $expired = 7, $newUser = true) + { + + //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()); + + + // send email + $email = StaticContainer::getContainer()->make(UserInviteEmail::class, array( + 'currentUser' => Piwik::getCurrentUserLogin(), + 'user' => $user, + 'token' => $generatedToken + )); + $email->safeSend(); + } + } + + private function validateAccess() + { + Piwik::checkUserHasSomeAdminAccess(); + UsersManager::dieIfUsersAdminIsDisabled(); + } + + public function enrichUser($user) + { + if (empty($user)) { + return $user; + } + + unset($user['token_auth']); + unset($user['password']); + unset($user['ts_password_modified']); + unset($user['idchange_last_viewed']); + + if ($lastSeen = LastSeenTimeLogger::getLastSeenTimeForUser($user['login'])) { + $user['last_seen'] = Date::getDatetimeFromTimestamp($lastSeen); + } + + 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']); + + if ($user['login'] === Piwik::getCurrentUserLogin() || !empty($user['superuser_access'])) { + $newUser['email'] = $user['email']; + } + + if (isset($user['role'])) { + $newUser['role'] = $user['role'] == 'superuser' ? 'admin' : $user['role']; + } + if (isset($user['capabilities'])) { + $newUser['capabilities'] = $user['capabilities']; + } + + if (isset($user['superuser_access'])) { + $newUser['superuser_access'] = $user['superuser_access']; + } + + if (isset($user['last_seen'])) { + $newUser['last_seen'] = $user['last_seen']; + } + + return $newUser; + } + + public function enrichUsers($users) + { + if (!empty($users)) { + foreach ($users as $index => $user) { + $users[$index] = $this->enrichUser($user); + } + } + return $users; + } + + public function enrichUsersWithLastSeen($users) + { + $formatter = new Formatter(); + + $lastSeenTimes = LastSeenTimeLogger::getLastSeenTimesForAllUsers(); + foreach ($users as &$user) { + $login = $user['login']; + if (isset($lastSeenTimes[$login])) { + $user['last_seen'] = $formatter->getPrettyTimeFromSeconds(time() - $lastSeenTimes[$login]); + } + } + return $users; + } + + + private function isTwoFactorAuthPluginEnabled() + { + 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/UsersManager.php b/plugins/UsersManager/UsersManager.php index 13c65cb315..5403dd6645 100644 --- a/plugins/UsersManager/UsersManager.php +++ b/plugins/UsersManager/UsersManager.php @@ -245,7 +245,6 @@ class UsersManager extends \Piwik\Plugin $translationKeys[] = "UsersManager_ManageUsersAdminDesc"; $translationKeys[] = 'Mobile_NavigationBack'; $translationKeys[] = 'UsersManager_AddExistingUser'; - $translationKeys[] = 'UsersManager_AddUser'; $translationKeys[] = 'UsersManager_EnterUsernameOrEmail'; $translationKeys[] = 'UsersManager_NoAccessWarning'; $translationKeys[] = 'UsersManager_BulkActions'; @@ -289,9 +288,9 @@ class UsersManager extends \Piwik\Plugin $translationKeys[] = 'UsersManager_ResetTwoFactorAuthentication'; $translationKeys[] = 'UsersManager_ResetTwoFactorAuthenticationInfo'; $translationKeys[] = 'UsersManager_TwoFactorAuthentication'; - $translationKeys[] = 'UsersManager_AddNewUser'; + $translationKeys[] = 'UsersManager_InviteNewUser'; $translationKeys[] = 'UsersManager_EditUser'; - $translationKeys[] = 'UsersManager_CreateUser'; + $translationKeys[] = 'UsersManager_InviteUser'; $translationKeys[] = 'UsersManager_SaveBasicInfo'; $translationKeys[] = 'UsersManager_Email'; $translationKeys[] = 'UsersManager_LastSeen'; @@ -325,5 +324,13 @@ class UsersManager extends \Piwik\Plugin $translationKeys[] = 'UsersManager_NewsletterSignupMessage'; $translationKeys[] = 'UsersManager_WhenUsersAreNotLoggedInAndVisitPiwikTheyShouldAccess'; $translationKeys[] = 'UsersManager_ForAnonymousUsersReportDateToLoadByDefault'; + $translationKeys[] = 'UsersManager_InviteSuccessNotification'; + $translationKeys[] = 'UsersManager_ResendInviteConfirmSingle'; + $translationKeys[] = 'UsersManager_Status'; + $translationKeys[] = 'UsersManager_Active'; + $translationKeys[] = 'UsersManager_Pending'; + $translationKeys[] = 'UsersManager_Expired'; + $translationKeys[] = 'UsersManager_Decline'; + } } diff --git a/plugins/UsersManager/Validators/Email.php b/plugins/UsersManager/Validators/Email.php new file mode 100644 index 0000000000..98ed633747 --- /dev/null +++ b/plugins/UsersManager/Validators/Email.php @@ -0,0 +1,58 @@ +checkUnique = $checkUnique; + } + + public function validate($value) + { + if ($this->isValueBare($value)) { + return; + } + + if (!Piwik::isValidEmailString($value)) { + throw new Exception(Piwik::translate('General_ValidatorErrorNotEmailLike', array($value))); + } + + if ($this->checkUnique) { + $this->isUnique($value); + } + + } + + /** + * check if email already exist in database + * @param $email + * @throws \Exception + */ + 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_ExceptionLoginExistsAsEmail', $email)); + } + } + +} diff --git a/plugins/UsersManager/Validators/Login.php b/plugins/UsersManager/Validators/Login.php new file mode 100644 index 0000000000..7e3e19cda5 --- /dev/null +++ b/plugins/UsersManager/Validators/Login.php @@ -0,0 +1,68 @@ +checkUnique = $checkUnique; + } + + public function validate($value) + { + if (!SettingsPiwik::isUserCredentialsSanityCheckEnabled() + && !empty($value) + ) { + return; + } + + $l = strlen($value); + 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))); + } + + if ($this->checkUnique) { + $this->isUnique($value); + } + } + + /** + * check if login already exist in database + * @param $login + * @throws \Exception + */ + private function isUnique($login) + { + if (APIUsersManager::getInstance()->userExists($login)) { + throw new Exception(Piwik::translate('UsersManager_ExceptionLoginExists', $login)); + } + + if (APIUsersManager::getInstance()->userEmailExists($login)) { + 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 2b2e81bbaa..a4fa908773 100644 --- a/plugins/UsersManager/lang/en.json +++ b/plugins/UsersManager/lang/en.json @@ -5,11 +5,10 @@ "TwoFactorAuthentication": "Two-factor authentication", "ResetTwoFactorAuthentication": "Reset two-factor authentication", "ResetTwoFactorAuthenticationInfo": "If the user can no longer log in due to lost recovery codes or a lost authentication device, you can reset two-factor authentication for the user, so they can log in again.", - "AddUser": "Add a new user", "AddExistingUser": "Add an existing user", - "AddNewUser": "Add new user", + "InviteNewUser": "Invite a new user", "EditUser": "Edit user", - "CreateUser": "Create user", + "InviteUser": "Invite user", "SaveBasicInfo": "Save Basic Info", "AllWebsites": "All websites", "LastUsed": "Last used", @@ -187,6 +186,13 @@ "NewsletterSignupMessage": "Subscribe to our newsletter to receive regular information about Matomo. You can unsubscribe from it any time. This service uses MadMimi. Learn more about it on %1$sMatomo's Privacy Policy page%2$s.", "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" + "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.", + "ResendInviteConfirmSingle": "Are you sure you want to resend invitation to %1$s?", + "Status": "Status", + "Pending": "Pending", + "Active": "Active", + "Expired": "Invite Expired", + "Decline": "Invite Declined" } } diff --git a/plugins/UsersManager/templates/_userInviteEmail.twig b/plugins/UsersManager/templates/_userInviteEmail.twig new file mode 100644 index 0000000000..59a7a0086f --- /dev/null +++ b/plugins/UsersManager/templates/_userInviteEmail.twig @@ -0,0 +1,8 @@ +{% set closingHeadTag %}{{ ''|e('html') }}{% endset %} +

{{ 'General_HelloUser'|translate(login) }}

+

{{ content|raw }}

+{{ 'CoreAdminHome_AcceptInvite'|translate }} | +{{ 'CoreAdminHome_DeclineInvite'|translate }} +

Notes:{{ notes }}

\ No newline at end of file diff --git a/plugins/UsersManager/tests/Fixtures/ManyUsers.php b/plugins/UsersManager/tests/Fixtures/ManyUsers.php index f73827ec8f..2fa2607f4a 100644 --- a/plugins/UsersManager/tests/Fixtures/ManyUsers.php +++ b/plugins/UsersManager/tests/Fixtures/ManyUsers.php @@ -43,6 +43,11 @@ class ManyUsers extends Fixture 'login10' => array('superuser' => 1) ); + public $pendingUser = array( + 'login'=>'000pendingUser1', + 'email'=>'pendinguser1light@example.com' + ); + public $baseSites = [ 'sleep', 'escapesequence', @@ -98,6 +103,10 @@ class ManyUsers extends Fixture $model = new Model(); $api = API::getInstance(); + + // add a pending invite user + $api->inviteUser($this->pendingUser['login'], $this->pendingUser['email'],1); + for ($i = 0; $i != $this->userCopyCount; ++$i) { $addToEmail = $i % 2 == 0; diff --git a/plugins/UsersManager/tests/Integration/APITest.php b/plugins/UsersManager/tests/Integration/APITest.php index 6aec636762..20a0c3a046 100644 --- a/plugins/UsersManager/tests/Integration/APITest.php +++ b/plugins/UsersManager/tests/Integration/APITest.php @@ -390,7 +390,7 @@ class APITest extends IntegrationTestCase public function test_update_user_fails_if_email_exists_as_other_user_username() { $this->expectException(\Exception::class); - $this->expectExceptionMessage('UsersManager_ExceptionEmailExistsAsLogin'); + $this->expectExceptionMessage('UsersManager_CurrentPasswordNotCorrect'); $user2 = 'existed@example.com'; $this->api->addUser($user2, 'password', 'userlogin2@password.de'); @@ -414,7 +414,7 @@ class APITest extends IntegrationTestCase public function test_cannot_create_user_if_email_exists_as_username() { $this->expectException(\Exception::class); - $this->expectExceptionMessage('UsersManager_ExceptionEmailExistsAsLogin'); + $this->expectExceptionMessage('UsersManager_ExceptionLoginExists'); $user2 = 'existed@example.com'; $this->api->addUser($user2, 'password', 'email@example.com'); @@ -1095,6 +1095,7 @@ class APITest extends IntegrationTestCase { foreach ($users as &$user) { unset($user['date_registered']); + unset($user['invite_status']); } } } diff --git a/plugins/UsersManager/tests/Integration/ModelTest.php b/plugins/UsersManager/tests/Integration/ModelTest.php index 6dd9f6b881..d32932255e 100644 --- a/plugins/UsersManager/tests/Integration/ModelTest.php +++ b/plugins/UsersManager/tests/Integration/ModelTest.php @@ -40,6 +40,7 @@ class ModelTest extends IntegrationTestCase private $login = 'userLogin'; private $login2 = 'userLogin2'; + private $login3 ='pendingLogin3'; public function setUp(): void { @@ -56,6 +57,7 @@ class ModelTest extends IntegrationTestCase Fixture::createWebsite('2014-01-01 00:00:00'); $this->api->addUser($this->login, 'password', 'userlogin@password.de'); $this->api->addUser($this->login2, 'password2', 'userlogin2@password.de'); + } public function test_getSitesAccessFromUser_noAccess() @@ -77,9 +79,9 @@ class ModelTest extends IntegrationTestCase $this->model->addUserAccess($this->login, Write::ID, array(2)); $this->model->addUserAccess($this->login, View::ID, array(1)); $this->assertEquals(array( - array('site' => '3', 'access' => Write::ID), - array('site' => '2', 'access' => Write::ID), - array('site' => '1', 'access' => View::ID), + array('site' => '3', 'access' => Write::ID), + array('site' => '2', 'access' => Write::ID), + array('site' => '1', 'access' => View::ID), ), $this->model->getSitesAccessFromUser($this->login)); } @@ -376,4 +378,5 @@ class ModelTest extends IntegrationTestCase $this->assertCount(2, $tokens); } + } diff --git a/plugins/UsersManager/tests/Integration/UserInviteTest.php b/plugins/UsersManager/tests/Integration/UserInviteTest.php new file mode 100644 index 0000000000..098089d33e --- /dev/null +++ b/plugins/UsersManager/tests/Integration/UserInviteTest.php @@ -0,0 +1,66 @@ + '000pendingUser3', + 'email' => 'pendinguser3light@example.com' + ); + + + public function setUp(): void + { + parent::setUp(); + $this->model = new Model(); + $this->model->addUser($this->pendingUser['login'], '', $this->pendingUser['email'], $this->dateTime, 1); + } + + public function test_getInviteUser() + { + $user = $this->model->getUser($this->pendingUser['login']); + $this->assertEquals('pending', $user['invite_status']); + + } + + + public function test_addInviteUserToken() + { + $this->model->addTokenAuth($this->pendingUser['login'], $this->token, "Invite Token", + Date::now()->getDatetime(), + Date::now()->addDay(7)->getDatetime()); + + $response = Http::sendHttpRequest(Fixture::getRootUrl() . 'tests/PHPUnit/proxy/index.php?module=Login&action=acceptInvitation&token=' . $this->token, + 10); + + $this->assertStringContainsString('Accept Invitation', $response, 'error on accept invitation'); + } + +} diff --git a/plugins/UsersManager/tests/Integration/UsersManagerTest.php b/plugins/UsersManager/tests/Integration/UsersManagerTest.php index 6a8bc89220..49059acc10 100644 --- a/plugins/UsersManager/tests/Integration/UsersManagerTest.php +++ b/plugins/UsersManager/tests/Integration/UsersManagerTest.php @@ -8,20 +8,23 @@ namespace Piwik\Plugins\UsersManager\tests\Integration; +use Exception; 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 Exception; +use Piwik\View; /** @@ -105,6 +108,8 @@ class UsersManagerTest extends IntegrationTestCase unset($userAfter['ts_password_modified']); unset($userAfter['idchange_last_viewed']); unset($userAfter['password']); + unset($userAfter['invite_status']); + // implicitly checks password! $user['email'] = $newEmail; @@ -112,7 +117,7 @@ class UsersManagerTest extends IntegrationTestCase $user['twofactor_secret'] = ''; unset($user['password']); - + unset($user['invite_status']); $this->assertEquals($user, $userAfter); } @@ -469,6 +474,7 @@ class UsersManagerTest extends IntegrationTestCase unset($user['token_auth']); unset($user['date_registered']); unset($user['ts_password_modified']); + unset($user['invite_status']); } return $users; } @@ -1084,6 +1090,50 @@ class UsersManagerTest extends IntegrationTestCase ), $this->api->getAvailableCapabilities()); } + public function testInviteUser() + { + $this->addSites(1); + $user = array( + 'login' => "login", + 'email' => "test@test.com" + ); + + $this->api->inviteUser($user['login'], $user['email'], 1); + $user = $this->api->getUser($user['login']); + + $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(); diff --git a/plugins/UsersManager/tests/System/ApiTest.php b/plugins/UsersManager/tests/System/ApiTest.php index 17ea5104e6..dd5f1d99d5 100644 --- a/plugins/UsersManager/tests/System/ApiTest.php +++ b/plugins/UsersManager/tests/System/ApiTest.php @@ -61,7 +61,7 @@ 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', 'last_seen', 'password', 'token_auth', 'ts_password_modified', 'idchange_last_viewed'); + $xmlFieldsToRemove = array('date_registered', 'invite_status', 'last_seen', 'password', 'token_auth', 'ts_password_modified', 'idchange_last_viewed'); $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 7d5e9f04d5..8dab9ca5ce 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,7 @@ login1@example.com 1 + 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 54911c0683..fa3bd7ac68 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,7 @@ login2@example.com 0 + 0 \ No newline at end of file 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 34ce84a53a..9cc5801c8d 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,7 @@ login4@example.com 0 + 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 22e1ebfb9a..dcddc97dfd 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,7 @@ login6@example.com 0 + 0 \ No newline at end of file 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 7195342606..7658fdd5a6 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 @@ -1,5 +1,6 @@ + 000pendingUser1 login2 login4 login6 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 95b0905574..b81834b5fb 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 @@ -1,5 +1,6 @@ + 000pendingUser1 login1 login10 login2 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 76bc3e287e..02ec1e6d90 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,7 @@ login5@example.com 0 + 0 @@ -12,6 +13,7 @@ login6@example.com 0 + 0 \ No newline at end of file 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 5d44c5ddb4..31a5fac273 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,5 +1,9 @@ + + 000pendingUser1 + 0 + login2 login2@example.com 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 ea79a48238..a2032128d8 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 @@ -1,10 +1,19 @@ + + 000pendingUser1 + pendinguser1light@example.com + 0 + + today-date-removed-in-tests + 0 + login1 login1@example.com 1 + 0 @@ -12,6 +21,7 @@ login10@example.com 1 + 0 @@ -19,6 +29,7 @@ login2@example.com 0 + 0 @@ -26,6 +37,7 @@ login3@example.com 0 + 0 @@ -33,6 +45,7 @@ login4@example.com 0 + 0 @@ -40,6 +53,7 @@ login5@example.com 0 + 0 @@ -47,6 +61,7 @@ login6@example.com 0 + 0 @@ -54,6 +69,7 @@ login7@example.com 0 + 0 @@ -61,6 +77,7 @@ login8@example.com 0 + 0 @@ -68,6 +85,7 @@ login9@example.com 0 + 0 @@ -75,6 +93,7 @@ hello@example.org 1 + 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 03b620e0c5..9feb4e0fb8 100644 --- a/plugins/UsersManager/tests/UI/UsersManager_spec.js +++ b/plugins/UsersManager/tests/UI/UsersManager_spec.js @@ -36,7 +36,13 @@ 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(); @@ -166,6 +172,12 @@ 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(); @@ -199,7 +211,6 @@ describe("UsersManager", function () { it('should create a user and show the edit user form when the create user button is clicked', async function () { await page.type('#user_login', '000newuser'); - await page.type('#user_password', 'thepassword'); await page.type('#user_email', 'theuser@email.com'); await page.click('.userEditForm .siteSelector a.title'); @@ -553,7 +564,7 @@ describe("UsersManager", function () { it('should not allow editing basic info for admin users', async function () { await page.click('.userEditForm .entityCancelLink'); - await (await page.jQuery('button.edituser:eq(0)')).click(); + await (await page.jQuery('button.edituser:eq(1)')).click(); await page.waitForNetworkIdle(); expect(await page.screenshotSelector('.usersManager')).to.matchImage('edit_user_basic_info'); 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 b35bd860f5..49beda2f91 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:1bc81bd99c081c6061fea162189726cef978377958ebb702050f0cbf0ff2a1b6 -size 39738 +oid sha256:df465b8206b76a6057fb58a5d48aeffb444e80ead2d0a6ea7a924b6b232e3f6b +size 51512 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 b35bd860f5..49beda2f91 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:1bc81bd99c081c6061fea162189726cef978377958ebb702050f0cbf0ff2a1b6 -size 39738 +oid sha256:df465b8206b76a6057fb58a5d48aeffb444e80ead2d0a6ea7a924b6b232e3f6b +size 51512 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 b4ddae6abf..f367d4283b 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:664a67f71e227435655611321244984e8fd45c50307e6a78a01088626f39adec -size 43505 +oid sha256:99aa09442363e539084d440c5f72c586e170f5c08202e3c7717ed94d107ab000 +size 46067 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 68148fe8be..d1269abd39 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:d93ccc782e8833251fff45b5e27c4f7b75d69fca7de6f4df17424fe82d24a00d -size 41616 +oid sha256:44c6177345745953c3eb700166b3d9826de1a83eea8ef8a2e25a7348905df814 +size 44138 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 f858369b34..afffee7f11 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:1ae16a952b6d81218e48df3b9f4f5fb32fa48ee8bb7c9260d0c0821563bdd0da -size 39356 +oid sha256:2eaf09b2a278a4524a299fdabe08ec8f9127847af03b2380020f942135217f40 +size 40075 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 45ae1ea2ef..ed6d558535 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:953227e3282c4b1fba3ec4702181a243e5d18b8fc70f17acee7da982997d784c -size 106870 +oid sha256:3f7a1c8ede3bb61b869dbab37be56d784879f3d7be5c4e80bb86e7f275487374 +size 136964 diff --git a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_admin_view_edit_user_basic_info.png b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_admin_view_edit_user_basic_info.png index eceb4bb2fc..aca671d5ef 100644 --- a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_admin_view_edit_user_basic_info.png +++ b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_admin_view_edit_user_basic_info.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:556b8e5feedeb5c84d0d1125f7576ca7490d526c7909d58f73a1d523e1481f0d -size 14881 +oid sha256:a0b9ba9450e5ad93a10b3b36552cd0b7819ac1e92106449ae98f0b84db920125 +size 15017 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 c3ac577883..eeb04639af 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:2278d11603b945156171671c08900107017b18110e75dba9d860ffc0b402b097 -size 172592 +oid sha256:90cbdd69c29d89d3b843c3b29f8d2f06c1f9ae12cd547a385415ab94af710e98 +size 189876 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 03cf79dd74..c4f3c28fda 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:dc9eba3d52c65e5174b5c5e7424a8fa638122eb4b81febdfe95686ea27bfa461 -size 172927 +oid sha256:3c5af9e3e3b371d75765dfa99ac73239fa0bc6d5f28503aa9ddcde5cf8c36d67 +size 190238 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 c3ac577883..eeb04639af 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:2278d11603b945156171671c08900107017b18110e75dba9d860ffc0b402b097 -size 172592 +oid sha256:90cbdd69c29d89d3b843c3b29f8d2f06c1f9ae12cd547a385415ab94af710e98 +size 189876 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 d78af25f10..a5e69931ad 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:5393553727b39968dd056d0e6ba7715cbc6513ffe5dbd8632a94e8aa3d6c3590 -size 163620 +oid sha256:9a6067784a28a84cf9994cdd648f37fa471f51e34efce5d5e84d09665e5f518a +size 180900 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 37bc9b966e..7197789c4a 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:dac3868e8f8df0d3d0cb5b0f7d76b66e2e4f28a9acae7eabaa301bda15744152 -size 154089 +oid sha256:de69e012f88d200df0fb0fac97485a9949fa3af94c89c828513eaa5a25cb06e9 +size 171656 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 3f1b3f2a6e..3756acdcee 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:8dee931a2d45ba3c327b93c438b1fcaf67f57d74bc3f0f6681bd8a600cbb78c5 -size 9506 +oid sha256:18dc30ffd01c62b5f591b05cc85b76a25786eb935f0538e65656f8848f0c59c8 +size 9351 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 939bce6f5a..dca72af936 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:e9398789987b0fb2accb8729c901618c82e1cff64bbccf946f13f252f7dd3203 -size 148014 +oid sha256:92168d09555061bed7c9744f3b5252fc5328a24c51f80df7cb56331b398c04be +size 26969 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 775bae0e69..fc91101f8b 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:0a2119e9646b88e13f41b479e8341c61c12ae4bd64331f0068a8d4dd4e06c718 -size 148903 +oid sha256:7f4cb4fcec0ec3eebad0063bddbfd1d7e0c8410a64ee8569d5ef78f8df3302a5 +size 170348 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 e44dd90328..7854904373 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:3b47b430f67f92811615b9b10dafc3137923b849580f50256598bc33e92d3bc5 -size 21831 +oid sha256:86f5888587a18b98c0118ad5709d6d3d98486ac8f3f5f5f6c82a5936d72eafed +size 21978 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 06dca069c8..c5325fd782 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:c566d17dbe717f31a674a5f620f0cdbc2a7fb3d00e5c3743054b527029dbbd30 -size 31042 +oid sha256:052ed4ad65093f9967ddf7366847fc53fae99260bdbfced20f7bf11f9e33d3f2 +size 31099 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 274303b9bc..107d81d036 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:5c188edc2479b3a59eed6ae8e74acfeda5926933a4730216566d004e07e127da -size 24379 +oid sha256:37d8b53b65dbe7e0b696f83e5ab4b8a2e4787ad5a524eb6dd619f1d3f5f56d82 +size 24864 diff --git a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_filters.png b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_filters.png index db83466332..bd497115da 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:5d1cfb48ff28b9bb08963399c912d242d0eea4fc830c43e73fac795cbe580100 -size 138285 +oid sha256:97938e80121da3aa373377e92066c1798341c91a53de14e516668e2467b3e5cb +size 172026 diff --git a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_load.png b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_load.png index 4e080ebde2..accf87147a 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:cf3bb0ed718e1fa2d96bb303f20109e00926fc0efd3abde6ae92a8c9900d3568 -size 147506 +oid sha256:f9a2640f91c653940bd7f4f3f631f370122e6e7d81635fb18ada658e7f18fc01 +size 179096 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 dbf02462ec..953c45f5cb 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:eac304f75f10c95f33e0d2cbb13d69dd4a47950cc934138a1dc8aed0b52fc65d -size 157331 +oid sha256:d15a7db15186c51b0103b34a6c842a10175a9993cc8c16a273c1f4bfb6bcafea +size 167125 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 cb50c918be..accf87147a 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:8088974fcade2bb0d45aadaef82b4b5ab798dd43cdfa68b9014e995135987387 -size 150930 +oid sha256:f9a2640f91c653940bd7f4f3f631f370122e6e7d81635fb18ada658e7f18fc01 +size 179096 diff --git a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_previous.png b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_previous.png index d052501336..69eeda3864 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:608dab4fe7aaed22c53a04d1cd8ea820c93467c6f20c9ee02fb7431d9cebdb16 -size 149252 +oid sha256:3a1f5d5c5e0015870d94550a7a08cb4ea7833171648398308c917183790da3db +size 170518 diff --git a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_resend_popup.png b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_resend_popup.png new file mode 100644 index 0000000000..25cd79c9cd --- /dev/null +++ b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_resend_popup.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:28f70514a1c2aac645aef53f388bbe9428249d836d75c9b0bed1868c06eafb99 +size 189374 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 a08275b343..a388c9481a 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:b060d494bba4aa6347d0982dca9b59ecc5f3dabadd1ed938353df2c20c783bfb -size 157880 +oid sha256:1fadec033c757181ce95c7364517de678dd933400259177cef0d2f87cfa6caeb +size 175226 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 4bad5ff0fd..48a5b74dc8 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:800b9a557adbb50ef3450c65ff1d8ecce0491ed262403088a9c4bc87b2868af7 -size 159630 +oid sha256:5ae5ffd11859c0040e4203967390d76c3fac06b2626579bb0eb3928ef732a42d +size 176975 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 2d655f47e1..0d4934988b 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:1048f0f98eff9613ff7ac7fb07b8459abcb683777b2c54949da204cab461f892 -size 25100 +oid sha256:406437e042339b681e39ce9e745e8ee5e391fd758a3bee0b8a1651a9c80f5c96 +size 22488 diff --git a/plugins/UsersManager/vue/dist/UsersManager.umd.js b/plugins/UsersManager/vue/dist/UsersManager.umd.js index 4ca1f4e092..424ce5a8c1 100644 --- a/plugins/UsersManager/vue/dist/UsersManager.umd.js +++ b/plugins/UsersManager/vue/dist/UsersManager.umd.js @@ -103,6 +103,13 @@ module.exports = __WEBPACK_EXTERNAL_MODULE__19dc__; /***/ }), +/***/ "8bba": +/***/ (function(module, exports, __webpack_require__) { + +// extracted by mini-css-extract-plugin + +/***/ }), + /***/ "8bbf": /***/ (function(module, exports) { @@ -115,6 +122,17 @@ 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": @@ -1448,102 +1466,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=851b548a +// 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 -var UserEditFormvue_type_template_id_851b548a_hoisted_1 = { +var UserEditFormvue_type_template_id_630fdb84_hoisted_1 = { class: "row" }; -var UserEditFormvue_type_template_id_851b548a_hoisted_2 = { +var UserEditFormvue_type_template_id_630fdb84_hoisted_2 = { key: 0, class: "col m2 entityList" }; -var UserEditFormvue_type_template_id_851b548a_hoisted_3 = { +var UserEditFormvue_type_template_id_630fdb84_hoisted_3 = { class: "listCircle" }; -var UserEditFormvue_type_template_id_851b548a_hoisted_4 = { +var UserEditFormvue_type_template_id_630fdb84_hoisted_4 = { key: 0, class: "icon-warning" }; -var UserEditFormvue_type_template_id_851b548a_hoisted_5 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", { +var UserEditFormvue_type_template_id_630fdb84_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_851b548a_hoisted_6 = { +var UserEditFormvue_type_template_id_630fdb84_hoisted_6 = { href: "", class: "entityCancelLink" }; -var UserEditFormvue_type_template_id_851b548a_hoisted_7 = { +var UserEditFormvue_type_template_id_630fdb84_hoisted_7 = { class: "visibleTab col m10" }; -var UserEditFormvue_type_template_id_851b548a_hoisted_8 = { +var UserEditFormvue_type_template_id_630fdb84_hoisted_8 = { key: 0, class: "basic-info-tab" }; -var UserEditFormvue_type_template_id_851b548a_hoisted_9 = { +var UserEditFormvue_type_template_id_630fdb84_hoisted_9 = { + class: "form-group row", + style: { + "position": "relative" + } +}; +var UserEditFormvue_type_template_id_630fdb84_hoisted_10 = { + class: "col s12 m6" +}; +var UserEditFormvue_type_template_id_630fdb84_hoisted_11 = { + class: "col s12 m6" +}; +var UserEditFormvue_type_template_id_630fdb84_hoisted_12 = { + key: 0, + class: "form-help" +}; +var UserEditFormvue_type_template_id_630fdb84_hoisted_13 = ["innerHTML"]; +var UserEditFormvue_type_template_id_630fdb84_hoisted_14 = { key: 0, class: "entityCancel" }; -var UserEditFormvue_type_template_id_851b548a_hoisted_10 = { +var UserEditFormvue_type_template_id_630fdb84_hoisted_15 = { key: 1, class: "user-permissions" }; -var UserEditFormvue_type_template_id_851b548a_hoisted_11 = { +var UserEditFormvue_type_template_id_630fdb84_hoisted_16 = { key: 0 }; -var UserEditFormvue_type_template_id_851b548a_hoisted_12 = { +var UserEditFormvue_type_template_id_630fdb84_hoisted_17 = { key: 1, class: "alert alert-info" }; -var UserEditFormvue_type_template_id_851b548a_hoisted_13 = { +var UserEditFormvue_type_template_id_630fdb84_hoisted_18 = { key: 2, class: "superuser-access" }; -var UserEditFormvue_type_template_id_851b548a_hoisted_14 = { +var UserEditFormvue_type_template_id_630fdb84_hoisted_19 = { class: "superuser-confirm-modal modal", ref: "superUserConfirmModal" }; -var UserEditFormvue_type_template_id_851b548a_hoisted_15 = { +var UserEditFormvue_type_template_id_630fdb84_hoisted_20 = { class: "modal-content" }; -var UserEditFormvue_type_template_id_851b548a_hoisted_16 = { +var UserEditFormvue_type_template_id_630fdb84_hoisted_21 = { key: 0 }; -var UserEditFormvue_type_template_id_851b548a_hoisted_17 = { +var UserEditFormvue_type_template_id_630fdb84_hoisted_22 = { key: 1 }; -var UserEditFormvue_type_template_id_851b548a_hoisted_18 = { +var UserEditFormvue_type_template_id_630fdb84_hoisted_23 = { class: "modal-footer" }; -var UserEditFormvue_type_template_id_851b548a_hoisted_19 = { +var UserEditFormvue_type_template_id_630fdb84_hoisted_24 = { key: 3, class: "twofa-reset" }; -var UserEditFormvue_type_template_id_851b548a_hoisted_20 = { +var UserEditFormvue_type_template_id_630fdb84_hoisted_25 = { class: "resetTwoFa" }; -var UserEditFormvue_type_template_id_851b548a_hoisted_21 = { +var UserEditFormvue_type_template_id_630fdb84_hoisted_26 = { class: "twofa-confirm-modal modal", ref: "twofaConfirmModal" }; -var UserEditFormvue_type_template_id_851b548a_hoisted_22 = { +var UserEditFormvue_type_template_id_630fdb84_hoisted_27 = { class: "modal-content" }; -var UserEditFormvue_type_template_id_851b548a_hoisted_23 = { +var UserEditFormvue_type_template_id_630fdb84_hoisted_28 = { class: "modal-footer" }; -var UserEditFormvue_type_template_id_851b548a_hoisted_24 = { +var UserEditFormvue_type_template_id_630fdb84_hoisted_29 = { class: "change-password-modal modal", ref: "changePasswordModal" }; -var UserEditFormvue_type_template_id_851b548a_hoisted_25 = { +var UserEditFormvue_type_template_id_630fdb84_hoisted_30 = { class: "modal-content" }; -var UserEditFormvue_type_template_id_851b548a_hoisted_26 = ["innerHTML"]; -var UserEditFormvue_type_template_id_851b548a_hoisted_27 = { +var UserEditFormvue_type_template_id_630fdb84_hoisted_31 = ["innerHTML"]; +var UserEditFormvue_type_template_id_630fdb84_hoisted_32 = { class: "modal-footer" }; -function UserEditFormvue_type_template_id_851b548a_render(_ctx, _cache, $props, $setup, $data, $options) { +function UserEditFormvue_type_template_id_630fdb84_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"); @@ -1561,7 +1596,7 @@ function UserEditFormvue_type_template_id_851b548a_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_851b548a_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_851b548a_hoisted_2, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("ul", UserEditFormvue_type_template_id_851b548a_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_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", { class: Object(external_commonjs_vue_commonjs2_vue_root_Vue_["normalizeClass"])([{ active: _ctx.activeTab === 'basic' }, "menuBasicInfo"]) @@ -1582,7 +1617,7 @@ function UserEditFormvue_type_template_id_851b548a_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_851b548a_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_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", { key: 0, class: Object(external_commonjs_vue_commonjs2_vue_root_Vue_["normalizeClass"])([{ active: _ctx.activeTab === 'superuser' @@ -1602,12 +1637,12 @@ function UserEditFormvue_type_template_id_851b548a_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_851b548a_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_630fdb84_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_851b548a_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_851b548a_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_851b548a_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_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, { modelValue: _ctx.theUser.login, "onUpdate:modelValue": _cache[5] || (_cache[5] = function ($event) { return _ctx.theUser.login = $event; @@ -1617,7 +1652,8 @@ function UserEditFormvue_type_template_id_851b548a_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, [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", null, [_ctx.isPendingUser ? (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, "onUpdate:modelValue": _cache[6] || (_cache[6] = function ($event) { @@ -1627,7 +1663,7 @@ function UserEditFormvue_type_template_id_851b548a_render(_ctx, _cache, $props, uicontrol: "password", name: "user_password", title: _ctx.translate('General_Password') - }, null, 8, ["model-value", "disabled", "title"])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [_ctx.currentUserRole === 'superuser' || _ctx.isAdd ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createBlock"])(_component_Field, { + }, null, 8, ["model-value", "disabled", "title"])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true)]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [_ctx.currentUserRole === 'superuser' || _ctx.isAdd ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createBlock"])(_component_Field, { key: 0, modelValue: _ctx.theUser.email, "onUpdate:modelValue": _cache[7] || (_cache[7] = function ($event) { @@ -1652,21 +1688,28 @@ function UserEditFormvue_type_template_id_851b548a_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, [_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_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, { key: 0, + style: { + "position": "absolute", + "bottom": "0" + }, value: _ctx.saveButtonLabel, disabled: _ctx.isAdd && (!_ctx.firstSiteAccess || !_ctx.firstSiteAccess.id), saving: _ctx.isSavingUserInfo, 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)]), _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_851b548a_hoisted_9, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", { + }, 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", { + 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", { 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_851b548a_hoisted_10, [!_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_851b548a_hoisted_11, [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_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, { "user-login": _ctx.theUser.login, onUserHasAccessDetected: _cache[11] || (_cache[11] = function ($event) { return _ctx.userHasAccess = $event.hasAccess; @@ -1676,7 +1719,7 @@ function UserEditFormvue_type_template_id_851b548a_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_851b548a_hoisted_12, 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_851b548a_hoisted_13, [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_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, { modelValue: _ctx.superUserAccessChecked, "onUpdate:modelValue": _cache[13] || (_cache[13] = function ($event) { return _ctx.superUserAccessChecked = $event; @@ -1688,7 +1731,7 @@ function UserEditFormvue_type_template_id_851b548a_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_851b548a_hoisted_14, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UserEditFormvue_type_template_id_851b548a_hoisted_15, [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_851b548a_hoisted_16, 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_851b548a_hoisted_17, 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_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, { modelValue: _ctx.passwordConfirmationForSuperUser, "onUpdate:modelValue": _cache[15] || (_cache[15] = function ($event) { return _ctx.passwordConfirmationForSuperUser = $event; @@ -1698,7 +1741,7 @@ function UserEditFormvue_type_template_id_851b548a_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_851b548a_hoisted_18, [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_630fdb84_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) { @@ -1715,13 +1758,13 @@ function UserEditFormvue_type_template_id_851b548a_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_851b548a_hoisted_19, [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_851b548a_hoisted_20, [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_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, { 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_851b548a_hoisted_21, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UserEditFormvue_type_template_id_851b548a_hoisted_22, [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_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, { modelValue: _ctx.passwordConfirmation, "onUpdate:modelValue": _cache[19] || (_cache[19] = function ($event) { return _ctx.passwordConfirmation = $event; @@ -1731,7 +1774,7 @@ function UserEditFormvue_type_template_id_851b548a_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_851b548a_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_630fdb84_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) { @@ -1747,9 +1790,9 @@ function UserEditFormvue_type_template_id_851b548a_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_851b548a_hoisted_24, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UserEditFormvue_type_template_id_851b548a_hoisted_25, [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_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", { innerHTML: _ctx.$sanitize(_ctx.changePasswordTitle) - }, null, 8, UserEditFormvue_type_template_id_851b548a_hoisted_26), 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_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, { modelValue: _ctx.passwordConfirmation, "onUpdate:modelValue": _cache[22] || (_cache[22] = function ($event) { return _ctx.passwordConfirmation = $event; @@ -1759,7 +1802,7 @@ function UserEditFormvue_type_template_id_851b548a_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_851b548a_hoisted_27, [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_630fdb84_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) { @@ -1777,7 +1820,7 @@ function UserEditFormvue_type_template_id_851b548a_render(_ctx, _cache, $props, _: 1 }, 8, ["class", "content-title"]); } -// CONCATENATED MODULE: ./plugins/UsersManager/vue/src/UserEditForm/UserEditForm.vue?vue&type=template&id=851b548a +// CONCATENATED MODULE: ./plugins/UsersManager/vue/src/UserEditForm/UserEditForm.vue?vue&type=template&id=630fdb84 // 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 @@ -1789,7 +1832,8 @@ var DEFAULT_USER = { superuser_access: false, uses_2fa: false, password: '', - email: '' + email: '', + invited_at: '' }; var UserEditFormvue_type_script_lang_ts_window = window, UserEditFormvue_type_script_lang_ts_$ = UserEditFormvue_type_script_lang_ts_window.$; @@ -1916,10 +1960,9 @@ var UserEditFormvue_type_script_lang_ts_window = window, this.isSavingUserInfo = true; return external_CoreHome_["AjaxHelper"].post({ - method: 'UsersManager.addUser' + method: 'UsersManager.inviteUser' }, { userLogin: this.theUser.login, - password: this.theUser.password, email: this.theUser.email, initialIdSite: this.firstSiteAccess ? this.firstSiteAccess.id : undefined }).catch(function (e) { @@ -1929,6 +1972,7 @@ var UserEditFormvue_type_script_lang_ts_window = window, _this3.firstSiteAccess = null; _this3.isSavingUserInfo = false; _this3.isUserModified = true; + _this3.theUser.invited_at = 'xx'; _this3.resetPasswordVar(); @@ -2029,10 +2073,14 @@ var UserEditFormvue_type_script_lang_ts_window = window, }, computed: { formTitle: function formTitle() { - return this.isAdd ? Object(external_CoreHome_["translate"])('UsersManager_AddNewUser') : Object(external_CoreHome_["translate"])('UsersManager_EditUser'); + return this.isAdd ? Object(external_CoreHome_["translate"])('UsersManager_InviteNewUser') : Object(external_CoreHome_["translate"])('UsersManager_EditUser'); }, saveButtonLabel: function saveButtonLabel() { - return this.isAdd ? Object(external_CoreHome_["translate"])('UsersManager_CreateUser') : Object(external_CoreHome_["translate"])('UsersManager_SaveBasicInfo'); + 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); }, isAdd: function isAdd() { return !this.user; // purposefully checking input property not theUser state @@ -2048,7 +2096,7 @@ var UserEditFormvue_type_script_lang_ts_window = window, -UserEditFormvue_type_script_lang_ts.render = UserEditFormvue_type_template_id_851b548a_render +UserEditFormvue_type_script_lang_ts.render = UserEditFormvue_type_template_id_630fdb84_render /* harmony default export */ var UserEditForm = (UserEditFormvue_type_script_lang_ts); // CONCATENATED MODULE: ./plugins/UsersManager/vue/src/UserEditForm/UserEditForm.adapter.ts @@ -2093,199 +2141,226 @@ UserEditFormvue_type_script_lang_ts.render = UserEditFormvue_type_template_id_85 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=6767e472 +// 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 -var PagedUsersListvue_type_template_id_6767e472_hoisted_1 = { + +Object(external_commonjs_vue_commonjs2_vue_root_Vue_["pushScopeId"])("data-v-2ff6c088"); + +var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_1 = { class: "userListFilters row" }; -var PagedUsersListvue_type_template_id_6767e472_hoisted_2 = { +var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_2 = { class: "col s12 m12 l6" }; -var PagedUsersListvue_type_template_id_6767e472_hoisted_3 = { +var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_3 = { class: "input-field col s12 m4 l4" }; -var PagedUsersListvue_type_template_id_6767e472_hoisted_4 = { +var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_4 = { id: "user-list-bulk-actions", class: "dropdown-content" }; -var PagedUsersListvue_type_template_id_6767e472_hoisted_5 = { +var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_5 = { class: "dropdown-trigger", "data-target": "bulk-set-access" }; -var PagedUsersListvue_type_template_id_6767e472_hoisted_6 = { +var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_6 = { id: "bulk-set-access", class: "dropdown-content" }; -var PagedUsersListvue_type_template_id_6767e472_hoisted_7 = ["onClick"]; -var PagedUsersListvue_type_template_id_6767e472_hoisted_8 = { +var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_7 = ["onClick"]; +var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_8 = { key: 0 }; -var PagedUsersListvue_type_template_id_6767e472_hoisted_9 = { +var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_9 = { class: "input-field col s12 m4 l4" }; -var PagedUsersListvue_type_template_id_6767e472_hoisted_10 = { +var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_10 = { class: "permissions-for-selector" }; -var PagedUsersListvue_type_template_id_6767e472_hoisted_11 = { +var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_11 = { class: "input-field col s12 m4 l4" }; -var PagedUsersListvue_type_template_id_6767e472_hoisted_12 = { +var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_12 = { key: 0, class: "input-field col s12 m12 l6 users-list-pagination-container" }; -var PagedUsersListvue_type_template_id_6767e472_hoisted_13 = { +var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_13 = { class: "usersListPagination" }; -var PagedUsersListvue_type_template_id_6767e472_hoisted_14 = { +var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_14 = { class: "pointer" }; -var PagedUsersListvue_type_template_id_6767e472_hoisted_15 = { +var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_15 = { class: "counter" }; -var PagedUsersListvue_type_template_id_6767e472_hoisted_16 = { +var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_16 = { class: "pointer" }; -var PagedUsersListvue_type_template_id_6767e472_hoisted_17 = { +var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_17 = { key: 0, class: "roles-help-notification" }; -var PagedUsersListvue_type_template_id_6767e472_hoisted_18 = ["innerHTML"]; -var PagedUsersListvue_type_template_id_6767e472_hoisted_19 = { +var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_18 = ["innerHTML"]; +var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_19 = { class: "select-cell" }; -var PagedUsersListvue_type_template_id_6767e472_hoisted_20 = { +var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_20 = { class: "checkbox-container" }; -var PagedUsersListvue_type_template_id_6767e472_hoisted_21 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", null, null, -1); +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_6767e472_hoisted_22 = { +var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_22 = { class: "first" }; -var PagedUsersListvue_type_template_id_6767e472_hoisted_23 = { +var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_23 = { class: "role_header" }; -var PagedUsersListvue_type_template_id_6767e472_hoisted_24 = { +var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_24 = { style: { "margin-right": "3.5px" } }; -var PagedUsersListvue_type_template_id_6767e472_hoisted_25 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", { +var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_25 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", { class: "icon-help" }, null, -1); -var PagedUsersListvue_type_template_id_6767e472_hoisted_26 = [PagedUsersListvue_type_template_id_6767e472_hoisted_25]; -var PagedUsersListvue_type_template_id_6767e472_hoisted_27 = { +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 = { key: 0 }; -var PagedUsersListvue_type_template_id_6767e472_hoisted_28 = ["title"]; -var PagedUsersListvue_type_template_id_6767e472_hoisted_29 = { +var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_28 = ["title"]; +var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_29 = { key: 2 }; -var PagedUsersListvue_type_template_id_6767e472_hoisted_30 = { +var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_30 = { class: "actions-cell-header" }; -var PagedUsersListvue_type_template_id_6767e472_hoisted_31 = { +var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_31 = { key: 0, class: "select-all-row" }; -var PagedUsersListvue_type_template_id_6767e472_hoisted_32 = { +var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_32 = { colspan: "8" }; -var PagedUsersListvue_type_template_id_6767e472_hoisted_33 = { +var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_33 = { key: 0 }; -var PagedUsersListvue_type_template_id_6767e472_hoisted_34 = ["innerHTML"]; -var PagedUsersListvue_type_template_id_6767e472_hoisted_35 = ["innerHTML"]; -var PagedUsersListvue_type_template_id_6767e472_hoisted_36 = { +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 = { key: 1 }; -var PagedUsersListvue_type_template_id_6767e472_hoisted_37 = ["innerHTML"]; -var PagedUsersListvue_type_template_id_6767e472_hoisted_38 = ["innerHTML"]; -var PagedUsersListvue_type_template_id_6767e472_hoisted_39 = ["id"]; -var PagedUsersListvue_type_template_id_6767e472_hoisted_40 = { +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 = { class: "select-cell" }; -var PagedUsersListvue_type_template_id_6767e472_hoisted_41 = { +var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_41 = { class: "checkbox-container" }; -var PagedUsersListvue_type_template_id_6767e472_hoisted_42 = ["id", "onUpdate:modelValue"]; +var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_42 = ["id", "onUpdate:modelValue"]; -var PagedUsersListvue_type_template_id_6767e472_hoisted_43 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", null, null, -1); +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_6767e472_hoisted_44 = { +var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_44 = { id: "userLogin" }; -var PagedUsersListvue_type_template_id_6767e472_hoisted_45 = { +var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_45 = { class: "access-cell" }; -var PagedUsersListvue_type_template_id_6767e472_hoisted_46 = { +var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_46 = { key: 0, id: "email" }; -var PagedUsersListvue_type_template_id_6767e472_hoisted_47 = { +var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_47 = { key: 1, id: "twofa" }; -var PagedUsersListvue_type_template_id_6767e472_hoisted_48 = { +var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_48 = { key: 0, class: "icon-ok" }; -var PagedUsersListvue_type_template_id_6767e472_hoisted_49 = { +var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_49 = { key: 1, class: "icon-close" }; -var PagedUsersListvue_type_template_id_6767e472_hoisted_50 = { +var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_50 = { key: 2, id: "last_seen" }; -var PagedUsersListvue_type_template_id_6767e472_hoisted_51 = { +var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_51 = { + id: "status" +}; +var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_52 = { class: "center actions-cell" }; -var PagedUsersListvue_type_template_id_6767e472_hoisted_52 = ["onClick"]; +var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_53 = ["onClick"]; + +var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_54 = /*#__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_6767e472_hoisted_53 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", { +var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_57 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", { class: "icon-edit" }, null, -1); -var PagedUsersListvue_type_template_id_6767e472_hoisted_54 = [PagedUsersListvue_type_template_id_6767e472_hoisted_53]; -var PagedUsersListvue_type_template_id_6767e472_hoisted_55 = ["onClick"]; +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_6767e472_hoisted_56 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", { +var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_60 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", { class: "icon-delete" }, null, -1); -var PagedUsersListvue_type_template_id_6767e472_hoisted_57 = [PagedUsersListvue_type_template_id_6767e472_hoisted_56]; -var PagedUsersListvue_type_template_id_6767e472_hoisted_58 = { +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 = { class: "delete-user-confirm-modal modal", ref: "deleteUserConfirmModal" }; -var PagedUsersListvue_type_template_id_6767e472_hoisted_59 = { +var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_63 = { class: "modal-content" }; -var PagedUsersListvue_type_template_id_6767e472_hoisted_60 = ["innerHTML"]; -var PagedUsersListvue_type_template_id_6767e472_hoisted_61 = ["innerHTML"]; -var PagedUsersListvue_type_template_id_6767e472_hoisted_62 = { +var _hoisted_64 = ["innerHTML"]; +var _hoisted_65 = ["innerHTML"]; +var _hoisted_66 = { class: "modal-footer" }; -var PagedUsersListvue_type_template_id_6767e472_hoisted_63 = { +var _hoisted_67 = { class: "change-user-role-confirm-modal modal", ref: "changeUserRoleConfirmModal" }; -var _hoisted_64 = { +var _hoisted_68 = { class: "modal-content" }; -var _hoisted_65 = ["innerHTML"]; -var _hoisted_66 = { +var _hoisted_69 = ["innerHTML"]; +var _hoisted_70 = { key: 1 }; -var _hoisted_67 = ["innerHTML"]; -var _hoisted_68 = ["innerHTML"]; -var _hoisted_69 = { +var _hoisted_71 = ["innerHTML"]; +var _hoisted_72 = ["innerHTML"]; +var _hoisted_73 = { class: "modal-footer" }; -function PagedUsersListvue_type_template_id_6767e472_render(_ctx, _cache, $props, $setup, $data, $options) { +var _hoisted_74 = { + class: "resend-invite-confirm-modal modal", + ref: "resendInviteConfirmModal" +}; +var _hoisted_75 = { + class: "modal-content" +}; +var _hoisted_76 = ["innerHTML"]; +var _hoisted_77 = { + 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) { 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"); @@ -2302,13 +2377,13 @@ function PagedUsersListvue_type_template_id_6767e472_render(_ctx, _cache, $props 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_6767e472_hoisted_1, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", PagedUsersListvue_type_template_id_6767e472_hoisted_2, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", PagedUsersListvue_type_template_id_6767e472_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_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", { 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_6767e472_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_6767e472_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_6767e472_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_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) { 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", { @@ -2319,7 +2394,7 @@ function PagedUsersListvue_type_template_id_6767e472_render(_ctx, _cache, $props _ctx.showAccessChangeConfirm(); }, ["prevent"]) - }, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(access.value), 9, PagedUsersListvue_type_template_id_6767e472_hoisted_7)]); + }, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(access.value), 9, PagedUsersListvue_type_template_id_2ff6c088_scoped_true_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) { @@ -2328,12 +2403,12 @@ function PagedUsersListvue_type_template_id_6767e472_render(_ctx, _cache, $props _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_6767e472_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_2ff6c088_scoped_true_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_6767e472_hoisted_9, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", PagedUsersListvue_type_template_id_6767e472_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_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, { "model-value": _ctx.userTextFilter, "onUpdate:modelValue": _cache[2] || (_cache[2] = function ($event) { return _ctx.onUserTextFilterChange($event); @@ -2342,7 +2417,7 @@ function PagedUsersListvue_type_template_id_6767e472_render(_ctx, _cache, $props 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_6767e472_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_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, { "model-value": _ctx.accessLevelFilter, "onUpdate:modelValue": _cache[3] || (_cache[3] = function ($event) { _ctx.accessLevelFilter = $event; @@ -2357,14 +2432,14 @@ function PagedUsersListvue_type_template_id_6767e472_render(_ctx, _cache, $props 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_6767e472_hoisted_12, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", PagedUsersListvue_type_template_id_6767e472_hoisted_13, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", { + }, 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", { 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) { return _ctx.gotoPreviousPage(); }, ["prevent"])) - }, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", PagedUsersListvue_type_template_id_6767e472_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_6767e472_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_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", { class: Object(external_commonjs_vue_commonjs2_vue_root_Vue_["normalizeClass"])({ visibility: _ctx.isLoadingUsers ? 'hidden' : 'visible' }) @@ -2377,7 +2452,7 @@ function PagedUsersListvue_type_template_id_6767e472_render(_ctx, _cache, $props onClick: _cache[5] || (_cache[5] = 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_6767e472_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_6767e472_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_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, { context: "info", type: "persistent", noclear: true @@ -2385,7 +2460,7 @@ function PagedUsersListvue_type_template_id_6767e472_render(_ctx, _cache, $props 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_6767e472_hoisted_18)]; + }, null, 8, PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_18)]; }), _: 1 })])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_ContentBlock, null, { @@ -2395,7 +2470,7 @@ function PagedUsersListvue_type_template_id_6767e472_render(_ctx, _cache, $props 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_6767e472_hoisted_19, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", PagedUsersListvue_type_template_id_6767e472_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_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", { type: "checkbox", id: "paged_users_select_all", checked: "checked", @@ -2405,7 +2480,7 @@ function PagedUsersListvue_type_template_id_6767e472_render(_ctx, _cache, $props onChange: _cache[7] || (_cache[7] = function ($event) { return _ctx.onAllCheckboxChange(); }) - }, null, 544), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vModelCheckbox"], _ctx.isAllCheckboxSelected]]), PagedUsersListvue_type_template_id_6767e472_hoisted_21])])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("th", PagedUsersListvue_type_template_id_6767e472_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_6767e472_hoisted_23, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", PagedUsersListvue_type_template_id_6767e472_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_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", { href: "", class: Object(external_commonjs_vue_commonjs2_vue_root_Vue_["normalizeClass"])(["helpIcon", { sticky: _ctx.isRoleHelpToggled @@ -2413,7 +2488,7 @@ function PagedUsersListvue_type_template_id_6767e472_render(_ctx, _cache, $props onClick: _cache[8] || (_cache[8] = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withModifiers"])(function ($event) { return _ctx.isRoleHelpToggled = !_ctx.isRoleHelpToggled; }, ["prevent"])) - }, PagedUsersListvue_type_template_id_6767e472_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_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, { class: "permissions-for-selector", "model-value": _ctx.permissionsForSite, "onUpdate:modelValue": _cache[9] || (_cache[9] = function ($event) { @@ -2423,38 +2498,38 @@ function PagedUsersListvue_type_template_id_6767e472_render(_ctx, _cache, $props "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_6767e472_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_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", { 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_6767e472_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_6767e472_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", PagedUsersListvue_type_template_id_6767e472_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_6767e472_hoisted_31, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("td", PagedUsersListvue_type_template_id_6767e472_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_6767e472_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_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", { innerHTML: _ctx.$sanitize(_ctx.translate('UsersManager_TheDisplayedUsersAreSelected', "".concat(_ctx.users.length, ""))), style: { "margin-right": "3.5px" } - }, null, 8, PagedUsersListvue_type_template_id_6767e472_hoisted_34), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", { + }, null, 8, PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_34), 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) { return _ctx.areAllResultsSelected = !_ctx.areAllResultsSelected; }, ["prevent"])), innerHTML: _ctx.$sanitize(_ctx.translate('UsersManager_ClickToSelectAll', "".concat(_ctx.totalEntries, ""))) - }, null, 8, PagedUsersListvue_type_template_id_6767e472_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_6767e472_hoisted_36, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", { + }, 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", { innerHTML: _ctx.$sanitize(_ctx.translate('UsersManager_AllUsersAreSelected', "".concat(_ctx.totalEntries, ""))), style: { "margin-right": "3.5px" } - }, null, 8, PagedUsersListvue_type_template_id_6767e472_hoisted_37), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", { + }, null, 8, PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_37), 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) { return _ctx.areAllResultsSelected = !_ctx.areAllResultsSelected; }, ["prevent"])), innerHTML: _ctx.$sanitize(_ctx.translate('UsersManager_ClickToSelectDisplayedUsers', "".concat(_ctx.users.length, ""))) - }, null, 8, PagedUsersListvue_type_template_id_6767e472_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_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) { 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_6767e472_hoisted_40, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", PagedUsersListvue_type_template_id_6767e472_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_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", { type: "checkbox", id: "paged_users_select_row".concat(index), "onUpdate:modelValue": function onUpdateModelValue($event) { @@ -2463,7 +2538,7 @@ function PagedUsersListvue_type_template_id_6767e472_render(_ctx, _cache, $props onClick: _cache[12] || (_cache[12] = function ($event) { return _ctx.onRowSelected(); }) - }, null, 8, PagedUsersListvue_type_template_id_6767e472_hoisted_42), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vModelCheckbox"], _ctx.selectedRows[index]]]), PagedUsersListvue_type_template_id_6767e472_hoisted_43])])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("td", PagedUsersListvue_type_template_id_6767e472_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_6767e472_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_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, { "model-value": user.role, "onUpdate:modelValue": function onUpdateModelValue($event) { _ctx.userToChange = user; @@ -2474,8 +2549,19 @@ function PagedUsersListvue_type_template_id_6767e472_render(_ctx, _cache, $props 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_6767e472_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_6767e472_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_6767e472_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_6767e472_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_6767e472_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_6767e472_hoisted_51, [user.login !== 'anonymous' ? (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_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", { key: 0, + class: "resend table-action", + title: "Resend Invite", + onClick: function onClick($event) { + _ctx.userToChange = user; + + _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", { + key: 1, class: "edituser table-action", title: "Edit", onClick: function onClick($event) { @@ -2483,8 +2569,8 @@ function PagedUsersListvue_type_template_id_6767e472_render(_ctx, _cache, $props user: user }); } - }, PagedUsersListvue_type_template_id_6767e472_hoisted_54, 8, PagedUsersListvue_type_template_id_6767e472_hoisted_52)) : 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", { - key: 1, + }, 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", { + key: 2, class: "deleteuser table-action", title: "Delete", onClick: function onClick($event) { @@ -2492,17 +2578,17 @@ function PagedUsersListvue_type_template_id_6767e472_render(_ctx, _cache, $props _ctx.showDeleteConfirm(); } - }, PagedUsersListvue_type_template_id_6767e472_hoisted_57, 8, PagedUsersListvue_type_template_id_6767e472_hoisted_55)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true)])], 8, PagedUsersListvue_type_template_id_6767e472_hoisted_39); + }, 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); }), 128))])], 2), [[_directive_content_table]])]; }), _: 1 - }), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", PagedUsersListvue_type_template_id_6767e472_hoisted_58, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", PagedUsersListvue_type_template_id_6767e472_hoisted_59, [_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", 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", { key: 0, innerHTML: _ctx.$sanitize(_ctx.translate('UsersManager_DeleteUserConfirmSingle', "".concat(_ctx.userToChange.login, ""))) - }, null, 8, PagedUsersListvue_type_template_id_6767e472_hoisted_60)) : 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_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", { key: 1, innerHTML: _ctx.$sanitize(_ctx.translate('UsersManager_DeleteUserConfirmMultiple', "".concat(_ctx.affectedUsersCount, ""))) - }, null, 8, PagedUsersListvue_type_template_id_6767e472_hoisted_61)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true)]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", PagedUsersListvue_type_template_id_6767e472_hoisted_62, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", { + }, 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", { href: "", class: "modal-action modal-close btn", onClick: _cache[13] || (_cache[13] = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withModifiers"])(function ($event) { @@ -2518,15 +2604,15 @@ function PagedUsersListvue_type_template_id_6767e472_render(_ctx, _cache, $props _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", PagedUsersListvue_type_template_id_6767e472_hoisted_63, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_64, [_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_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", { key: 0, innerHTML: _ctx.$sanitize(_ctx.deleteUserPermConfirmSingleText) - }, null, 8, _hoisted_65)) : 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_66, [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_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", { innerHTML: _ctx.$sanitize(_ctx.translate('UsersManager_AnonymousUserRoleChangeWarning', 'anonymous', _ctx.getRoleDisplay(_ctx.roleToChangeTo))) - }, null, 8, _hoisted_67)])])) : 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_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", { key: 2, innerHTML: _ctx.$sanitize(_ctx.deleteUserPermConfirmMultipleText) - }, null, 8, _hoisted_68)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true)]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_69, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", { + }, 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", { href: "", class: "modal-action modal-close btn", onClick: _cache[15] || (_cache[15] = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withModifiers"])(function ($event) { @@ -2542,9 +2628,28 @@ function PagedUsersListvue_type_template_id_6767e472_render(_ctx, _cache, $props _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", { + 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", { + href: "", + class: "modal-action modal-close btn", + onClick: _cache[17] || (_cache[17] = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withModifiers"])(function ($event) { + return _ctx.resendRequestedUser(); + }, ["prevent"])), + style: { + "margin-right": "3.5px" + } + }, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('General_Yes')), 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", { + href: "", + class: "modal-action modal-close modal-no", + onClick: _cache[18] || (_cache[18] = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withModifiers"])(function ($event) { + _ctx.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=6767e472 +// CONCATENATED MODULE: ./plugins/UsersManager/vue/src/PagedUsersList/PagedUsersList.vue?vue&type=template&id=2ff6c088&scoped=true // 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 @@ -2609,7 +2714,7 @@ var PagedUsersListvue_type_script_lang_ts_window = window, } }; }, - emits: ['editUser', 'changeUserRole', 'deleteUser', 'searchChange'], + emits: ['editUser', 'changeUserRole', 'deleteUser', 'searchChange', 'resendInvite'], created: function created() { this.onUserTextFilterChange = Object(external_CoreHome_["debounce"])(this.onUserTextFilterChange, 300); }, @@ -2619,6 +2724,21 @@ 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 (inviteStatus === 'expired') { + return Object(external_CoreHome_["translate"])('UsersManager_Expired'); + } + + return Object(external_CoreHome_["translate"])('UsersManager_Decline'); + }, onPermissionsForUpdate: function onPermissionsForUpdate(site) { this.permissionsForSite = site; this.changeSearch({ @@ -2664,11 +2784,21 @@ var PagedUsersListvue_type_script_lang_ts_window = window, users: this.userOperationSubject }); }, + resendRequestedUser: function resendRequestedUser() { + this.$emit('resendInvite', { + user: this.userToChange + }); + }, showDeleteConfirm: function showDeleteConfirm() { PagedUsersListvue_type_script_lang_ts_$(this.$refs.deleteUserConfirmModal).modal({ dismissible: false }).modal('open'); }, + showResendConfirm: function showResendConfirm() { + PagedUsersListvue_type_script_lang_ts_$(this.$refs.resendInviteConfirmModal).modal({ + dismissible: false + }).modal('open'); + }, showAccessChangeConfirm: function showAccessChangeConfirm() { PagedUsersListvue_type_script_lang_ts_$(this.$refs.changeUserRoleConfirmModal).modal({ dismissible: false @@ -2798,11 +2928,17 @@ 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_6767e472_render + + +PagedUsersListvue_type_script_lang_ts.render = PagedUsersListvue_type_template_id_2ff6c088_scoped_true_render +PagedUsersListvue_type_script_lang_ts.__scopeId = "data-v-2ff6c088" /* harmony default export */ var PagedUsersList = (PagedUsersListvue_type_script_lang_ts); // CONCATENATED MODULE: ./plugins/UsersManager/vue/src/PagedUsersList/PagedUsersList.adapter.ts @@ -2833,6 +2969,10 @@ PagedUsersListvue_type_script_lang_ts.render = PagedUsersListvue_type_template_i angularJsBind: '&', vue: 'searchChange' }, + onResendInvite: { + angularJsBind: '&', + vue: 'resendInvite' + }, initialSiteId: { angularJsBind: '<' }, @@ -2864,47 +3004,47 @@ PagedUsersListvue_type_script_lang_ts.render = PagedUsersListvue_type_template_i 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=db26d00e +// 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 -var UsersManagervue_type_template_id_db26d00e_hoisted_1 = { +var UsersManagervue_type_template_id_621f5797_hoisted_1 = { class: "usersManager" }; -var UsersManagervue_type_template_id_db26d00e_hoisted_2 = { +var UsersManagervue_type_template_id_621f5797_hoisted_2 = { key: 0 }; -var UsersManagervue_type_template_id_db26d00e_hoisted_3 = { +var UsersManagervue_type_template_id_621f5797_hoisted_3 = { key: 1 }; -var UsersManagervue_type_template_id_db26d00e_hoisted_4 = { +var UsersManagervue_type_template_id_621f5797_hoisted_4 = { class: "row add-user-container" }; -var UsersManagervue_type_template_id_db26d00e_hoisted_5 = { +var UsersManagervue_type_template_id_621f5797_hoisted_5 = { class: "col s12" }; -var UsersManagervue_type_template_id_db26d00e_hoisted_6 = { +var UsersManagervue_type_template_id_621f5797_hoisted_6 = { class: "input-field", style: { "margin-right": "3.5px" } }; -var UsersManagervue_type_template_id_db26d00e_hoisted_7 = { +var UsersManagervue_type_template_id_621f5797_hoisted_7 = { key: 0, class: "input-field" }; -var UsersManagervue_type_template_id_db26d00e_hoisted_8 = { +var UsersManagervue_type_template_id_621f5797_hoisted_8 = { key: 0 }; -var UsersManagervue_type_template_id_db26d00e_hoisted_9 = { +var UsersManagervue_type_template_id_621f5797_hoisted_9 = { class: "add-existing-user-modal modal", ref: "addExistingUserModal" }; -var UsersManagervue_type_template_id_db26d00e_hoisted_10 = { +var UsersManagervue_type_template_id_621f5797_hoisted_10 = { class: "modal-content" }; -var UsersManagervue_type_template_id_db26d00e_hoisted_11 = { +var UsersManagervue_type_template_id_621f5797_hoisted_11 = { class: "modal-footer" }; -function UsersManagervue_type_template_id_db26d00e_render(_ctx, _cache, $props, $setup, $data, $options) { +function UsersManagervue_type_template_id_621f5797_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"); @@ -2917,7 +3057,7 @@ function UsersManagervue_type_template_id_db26d00e_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_db26d00e_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_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, { "help-url": "https://matomo.org/docs/manage-users/", "feature-name": "Users Management" }, { @@ -2925,12 +3065,12 @@ function UsersManagervue_type_template_id_db26d00e_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_db26d00e_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_db26d00e_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_db26d00e_hoisted_4, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UsersManagervue_type_template_id_db26d00e_hoisted_5, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UsersManagervue_type_template_id_db26d00e_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_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", { 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_AddUser')), 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_db26d00e_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_621f5797_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(); @@ -2950,6 +3090,9 @@ function UsersManagervue_type_template_id_db26d00e_render(_ctx, _cache, $props, _ctx.fetchUsers(); }), + onResendInvite: _cache[6] || (_cache[6] = function ($event) { + return _ctx.onResendInvite($event.user); + }), "initial-site-id": _ctx.initialSiteId, "initial-site-name": _ctx.initialSiteName, "is-loading-users": _ctx.isLoadingUsers, @@ -2959,8 +3102,8 @@ function UsersManagervue_type_template_id_db26d00e_render(_ctx, _cache, $props, "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_db26d00e_hoisted_8, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_UserEditForm, { - onDone: _cache[6] || (_cache[6] = function ($event) { + }, 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, { + onDone: _cache[7] || (_cache[7] = function ($event) { return _ctx.onDoneEditing($event.isUserModified); }), user: _ctx.userBeingEdited, @@ -2969,20 +3112,20 @@ function UsersManagervue_type_template_id_db26d00e_render(_ctx, _cache, $props, "filter-access-levels": _ctx.actualFilterAccessLevels, "initial-site-id": _ctx.initialSiteId, "initial-site-name": _ctx.initialSiteName, - onUpdated: _cache[7] || (_cache[7] = function ($event) { + 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_db26d00e_hoisted_9, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UsersManagervue_type_template_id_db26d00e_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_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, { modelValue: _ctx.addNewUserLoginEmail, - "onUpdate:modelValue": _cache[8] || (_cache[8] = function ($event) { + "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_db26d00e_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_621f5797_hoisted_11, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", { href: "", class: "modal-action modal-close btn", - onClick: _cache[9] || (_cache[9] = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withModifiers"])(function ($event) { + onClick: _cache[10] || (_cache[10] = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withModifiers"])(function ($event) { return _ctx.addExistingUser(); }, ["prevent"])), style: { @@ -2991,12 +3134,12 @@ function UsersManagervue_type_template_id_db26d00e_render(_ctx, _cache, $props, }, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('General_Add')), 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", { href: "", class: "modal-action modal-close modal-no", - 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.addNewUserLoginEmail = null; }, ["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=db26d00e +// CONCATENATED MODULE: ./plugins/UsersManager/vue/src/UsersManager/UsersManager.vue?vue&type=template&id=621f5797 // 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(); } @@ -3170,6 +3313,15 @@ var UsersManagervue_type_script_lang_ts_window = window, return _this2.fetchUsers(); }); }, + onResendInvite: function onResendInvite(user) { + console.log(user); + external_CoreHome_["AjaxHelper"].fetch({ + method: 'UsersManager.resendInvite', + userLogin: user.login + }).then(function (res) { + console.log(res); + }); + }, fetchUsers: function fetchUsers() { var _this3 = this; @@ -3252,7 +3404,7 @@ var UsersManagervue_type_script_lang_ts_window = window, -UsersManagervue_type_script_lang_ts.render = UsersManagervue_type_template_id_db26d00e_render +UsersManagervue_type_script_lang_ts.render = UsersManagervue_type_template_id_621f5797_render /* harmony default export */ var UsersManager = (UsersManagervue_type_script_lang_ts); // CONCATENATED MODULE: ./plugins/UsersManager/vue/src/UsersManager/UsersManager.adapter.ts diff --git a/plugins/UsersManager/vue/dist/UsersManager.umd.min.js b/plugins/UsersManager/vue/dist/UsersManager.umd.min.js index d9c41d1571..c3c14a30d0 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},"8bbf":function(e,n){e.exports=t},a5a2:function(e,t){e.exports=n},fae3:function(e,t,n){"use strict";if(n.r(t),n.d(t,"CapabilitiesEdit",(function(){return E})),n.d(t,"UserPermissionsEdit",(function(){return He})),n.d(t,"UserEditForm",(function(){return vt})),n.d(t,"PagedUsersList",(function(){return Hn})),n.d(t,"UsersManager",(function(){return ds})),n.d(t,"NewsletterSettings",(function(){return hs})),n.d(t,"AnonymousSettings",(function(){return js})),n.d(t,"PersonalSettings",(function(){return Ms})),"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 h(e,t,n,s,r,i){var h=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"])(h,{"model-value":e.capabilityToAddId,"onUpdate:modelValue":t[0]||(t[0]=function(t){e.capabilityToAddId=t,e.onToggleCapability(!0)}),disabled:e.isBusy,uicontrol:"expandable-select",name:"add_capability","full-width":!0,options:e.availableCapabilitiesGrouped},null,8,["model-value","disabled","options"])])):Object(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 g=n("a5a2");function f(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function O(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 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(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," ")}}});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={key:0,class:"entityCancel"},Ke={key:1,class:"user-permissions"},Qe={key:0},Ze={key:1,class:"alert alert-info"},et={key:2,class:"superuser-access"},tt={class:"superuser-confirm-modal modal",ref:"superUserConfirmModal"},nt={class:"modal-content"},st={key:0},rt={key:1},it={class:"modal-footer"},at={key:3,class:"twofa-reset"},ot={class:"resetTwoFa"},lt={class:"twofa-confirm-modal modal",ref:"twofaConfirmModal"},ct={class:"modal-content"},dt={class:"modal-footer"},ut={class:"change-password-modal modal",ref:"changePasswordModal"},mt={class:"modal-content"},bt=["innerHTML"],pt={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,H)])})),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",F,[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," ")}}});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"}; /*! * Matomo - free/libre analytics platform * * @link https://matomo.org * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later - */function ht(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,[Object(a["createVNode"])(o,{"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,["superuser"===e.currentUserRole||e.isAdd?(Object(a["openBlock"])(),Object(a["createBlock"])(l,{key: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)]),e.isAdd?(Object(a["openBlock"])(),Object(a["createElementBlock"])("div",Xe,[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",Ke,[e.theUser.superuser_access?Object(a["createCommentVNode"])("",!0):(Object(a["openBlock"])(),Object(a["createElementBlock"])("div",Qe,[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",Ze,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",et,[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",tt,[Object(a["createElementVNode"])("div",nt,[Object(a["createElementVNode"])("h2",null,Object(a["toDisplayString"])(e.translate("UsersManager_AreYouSure")),1),e.theUser.superuser_access?(Object(a["openBlock"])(),Object(a["createElementBlock"])("p",st,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",rt,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",it,[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",at,[Object(a["createElementVNode"])("p",null,Object(a["toDisplayString"])(e.translate("UsersManager_ResetTwoFactorAuthenticationInfo")),1),Object(a["createElementVNode"])("div",ot,[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",lt,[Object(a["createElementVNode"])("div",ct,[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",dt,[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",ut,[Object(a["createElementVNode"])("div",mt,[Object(a["createElementVNode"])("h2",{innerHTML:e.$sanitize(e.changePasswordTitle)},null,8,bt),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",pt,[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 gt={login:"",superuser_access:!1,uses_2fa:!1,password:"",email:""},ft=window,Ot=ft.$,jt=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:g["Field"],SaveButton:g["SaveButton"],UserPermissionsEdit:He},directives:{Form:g["Form"]},data:function(){return{theUser:this.user||Object.assign({},gt),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({},gt),this.theUser.password||this.resetPasswordVar(),this.setSuperUserAccessChecked()},confirmSuperUserChange:function(){Ot(this.$refs.superUserConfirmModal).modal({dismissible:!1}).modal("open")},confirmReset2FA:function(){Ot(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.addUser"},{userLogin:this.theUser.login,password:this.theUser.password,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.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&&(Ot(e.$refs.changePasswordModal).modal("close"),e.updateUser())};Ot(this.$refs.changePasswordModal).modal({dismissible:!1,onOpenEnd:function(){e.isShowingPasswordConfirm=!1,Ot(".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_AddNewUser"):Object(i["translate"])("UsersManager_EditUser")},saveButtonLabel:function(){return this.isAdd?Object(i["translate"])("UsersManager_CreateUser"):Object(i["translate"])("UsersManager_SaveBasicInfo")},isAdd:function(){return!this.user},changePasswordTitle:function(){return Object(i["translate"])("UsersManager_AreYouSureChangeDetails","".concat(this.theUser.login,""))}}});jt.render=ht;var vt=jt,Ct=(Object(i["createAngularJsAdapter"])({component:vt,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"}),St={class:"col s12 m12 l6"},Nt={class:"input-field col s12 m4 l4"},Ut={id:"user-list-bulk-actions",class:"dropdown-content"},yt={class:"dropdown-trigger","data-target":"bulk-set-access"},Et={id:"bulk-set-access",class:"dropdown-content"},Vt=["onClick"],kt={key:0},At={class:"input-field col s12 m4 l4"},wt={class:"permissions-for-selector"},Tt={class:"input-field col s12 m4 l4"},Mt={key:0,class:"input-field col s12 m12 l6 users-list-pagination-container"},Bt={class:"usersListPagination"},Dt={class:"pointer"},_t={class:"counter"},Lt={class:"pointer"},Rt={key:0,class:"roles-help-notification"},xt=["innerHTML"],Pt={class:"select-cell"},Ft={class:"checkbox-container"},Ht=Object(a["createElementVNode"])("span",null,null,-1),It={class:"first"},Jt={class:"role_header"},qt={style:{"margin-right":"3.5px"}},$t=Object(a["createElementVNode"])("span",{class:"icon-help"},null,-1),Gt=[$t],zt={key:0},Wt=["title"],Yt={key:2},Xt={class:"actions-cell-header"},Kt={key:0,class:"select-all-row"},Qt={colspan:"8"},Zt={key:0},en=["innerHTML"],tn=["innerHTML"],nn={key:1},sn=["innerHTML"],rn=["innerHTML"],an=["id"],on={class:"select-cell"},ln={class:"checkbox-container"},cn=["id","onUpdate:modelValue"],dn=Object(a["createElementVNode"])("span",null,null,-1),un={id:"userLogin"},mn={class:"access-cell"},bn={key:0,id:"email"},pn={key:1,id:"twofa"},hn={key:0,class:"icon-ok"},gn={key:1,class:"icon-close"},fn={key:2,id:"last_seen"},On={class:"center actions-cell"},jn=["onClick"],vn=Object(a["createElementVNode"])("span",{class:"icon-edit"},null,-1),Cn=[vn],Sn=["onClick"],Nn=Object(a["createElementVNode"])("span",{class:"icon-delete"},null,-1),Un=[Nn],yn={class:"delete-user-confirm-modal modal",ref:"deleteUserConfirmModal"},En={class:"modal-content"},Vn=["innerHTML"],kn=["innerHTML"],An={class:"modal-footer"},wn={class:"change-user-role-confirm-modal modal",ref:"changeUserRoleConfirmModal"},Tn={class:"modal-content"},Mn=["innerHTML"],Bn={key:1},Dn=["innerHTML"],_n=["innerHTML"],Ln={class:"modal-footer"}; + */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; /*! * Matomo - free/libre analytics platform * * @link https://matomo.org * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later - */function Rn(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",Ct,[Object(a["createElementVNode"])("div",St,[Object(a["createElementVNode"])("div",Nt,[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",Ut,[Object(a["createElementVNode"])("li",null,[Object(a["withDirectives"])(Object(a["createElementVNode"])("a",yt,[Object(a["createTextVNode"])(Object(a["toDisplayString"])(e.translate("UsersManager_SetPermission")),1)],512),[[u]]),Object(a["createElementVNode"])("ul",Et,[(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,Vt)])})),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",kt,[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",At,[Object(a["createElementVNode"])("div",wt,[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",Tt,[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",Mt,[Object(a["createElementVNode"])("div",Bt,[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",Dt,"« "+Object(a["toDisplayString"])(e.translate("General_Previous")),1)],2),Object(a["createElementVNode"])("div",_t,[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",Lt,Object(a["toDisplayString"])(e.translate("General_Next"))+" »",1)],2)])])):Object(a["createCommentVNode"])("",!0)]),e.isRoleHelpToggled?(Object(a["openBlock"])(),Object(a["createElementBlock"])("div",Rt,[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,xt)]})),_: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",Pt,[Object(a["createElementVNode"])("span",Ft,[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]]),Ht])])]),Object(a["createElementVNode"])("th",It,Object(a["toDisplayString"])(e.translate("UsersManager_Username")),1),Object(a["createElementVNode"])("th",Jt,[Object(a["createElementVNode"])("span",qt,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"]))},Gt,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",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,Wt)):Object(a["createCommentVNode"])("",!0),"superuser"===e.currentUserRole?(Object(a["openBlock"])(),Object(a["createElementBlock"])("th",Yt,Object(a["toDisplayString"])(e.translate("UsersManager_LastSeen")),1)):Object(a["createCommentVNode"])("",!0),Object(a["createElementVNode"])("th",Xt,[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,en),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,tn)])),e.areAllResultsSelected?(Object(a["openBlock"])(),Object(a["createElementBlock"])("div",nn,[Object(a["createElementVNode"])("span",{innerHTML:e.$sanitize(e.translate("UsersManager_AllUsersAreSelected","".concat(e.totalEntries,""))),style:{"margin-right":"3.5px"}},null,8,sn),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,rn)])):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",on,[Object(a["createElementVNode"])("span",ln,[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,cn),[[a["vModelCheckbox"],e.selectedRows[s]]]),dn])])]),Object(a["createElementVNode"])("td",un,Object(a["toDisplayString"])(n.login),1),Object(a["createElementVNode"])("td",mn,[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",bn,Object(a["toDisplayString"])(n.email),1)):Object(a["createCommentVNode"])("",!0),"superuser"===e.currentUserRole?(Object(a["openBlock"])(),Object(a["createElementBlock"])("td",pn,[n.uses_2fa?(Object(a["openBlock"])(),Object(a["createElementBlock"])("span",hn)):Object(a["createCommentVNode"])("",!0),n.uses_2fa?Object(a["createCommentVNode"])("",!0):(Object(a["openBlock"])(),Object(a["createElementBlock"])("span",gn))])):Object(a["createCommentVNode"])("",!0),"superuser"===e.currentUserRole?(Object(a["openBlock"])(),Object(a["createElementBlock"])("td",fn,Object(a["toDisplayString"])(n.last_seen?"".concat(n.last_seen," ago"):"-"),1)):Object(a["createCommentVNode"])("",!0),Object(a["createElementVNode"])("td",On,["anonymous"!==n.login?(Object(a["openBlock"])(),Object(a["createElementBlock"])("button",{key:0,class:"edituser table-action",title:"Edit",onClick:function(t){return e.$emit("editUser",{user:n})}},Cn,8,jn)):Object(a["createCommentVNode"])("",!0),"superuser"===e.currentUserRole&&"anonymous"!==n.login?(Object(a["openBlock"])(),Object(a["createElementBlock"])("button",{key:1,class:"deleteuser table-action",title:"Delete",onClick:function(t){e.userToChange=n,e.showDeleteConfirm()}},Un,8,Sn)):Object(a["createCommentVNode"])("",!0)])],8,an)})),128))])],2),[[m]])]})),_:1}),Object(a["createElementVNode"])("div",yn,[Object(a["createElementVNode"])("div",En,[e.userToChange?(Object(a["openBlock"])(),Object(a["createElementBlock"])("h3",{key:0,innerHTML:e.$sanitize(e.translate("UsersManager_DeleteUserConfirmSingle","".concat(e.userToChange.login,"")))},null,8,Vn)):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,kn))]),Object(a["createElementVNode"])("div",An,[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",wn,[Object(a["createElementVNode"])("div",Tn,[e.userToChange?(Object(a["openBlock"])(),Object(a["createElementBlock"])("h3",{key:0,innerHTML:e.$sanitize(e.deleteUserPermConfirmSingleText)},null,8,Mn)):Object(a["createCommentVNode"])("",!0),e.userToChange&&"anonymous"===e.userToChange.login&&"view"===e.roleToChangeTo?(Object(a["openBlock"])(),Object(a["createElementBlock"])("h3",Bn,[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,Dn)])])):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,_n))]),Object(a["createElementVNode"])("div",Ln,[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)],2)}var xn=window,Pn=xn.$,Fn=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:g["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"],created:function(){this.onUserTextFilterChange=Object(i["debounce"])(this.onUserTextFilterChange,300)},watch:{users:function(){this.clearSelection()}},methods:{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})},showDeleteConfirm:function(){Pn(this.$refs.deleteUserConfirmModal).modal({dismissible:!1}).modal("open")},showAccessChangeConfirm:function(){Pn(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}))}}});Fn.render=Rn;var Hn=Fn,In=(Object(i["createAngularJsAdapter"])({component:Hn,scope:{onEditUser:{angularJsBind:"&",vue:"editUser"},onChangeUserRole:{angularJsBind:"&",vue:"changeUserRole"},onDeleteUser:{angularJsBind:"&",vue:"deleteUser"},onSearchChange:{angularJsBind:"&",vue:"searchChange"},initialSiteId:{angularJsBind:"<"},initialSiteName:{angularJsBind:"<"},currentUserRole:{angularJsBind:"<"},isLoadingUsers:{angularJsBind:"<"},accessLevels:{angularJsBind:"<"},filterAccessLevels:{angularJsBind:"<"},totalEntries:{angularJsBind:"<"},users:{angularJsBind:"<"},searchParams:{angularJsBind:"<"}},directiveName:"piwikPagedUsersList",restrict:"E"}),{class:"usersManager"}),Jn={key:0},qn={key:1},$n={class:"row add-user-container"},Gn={class:"col s12"},zn={class:"input-field",style:{"margin-right":"3.5px"}},Wn={key:0,class:"input-field"},Yn={key:0},Xn={class:"add-existing-user-modal modal",ref:"addExistingUserModal"},Kn={class:"modal-content"},Qn={class:"modal-footer"}; + */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"}; /*! * Matomo - free/libre analytics platform * * @link https://matomo.org * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later - */function Zn(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",In,[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",Jn,Object(a["toDisplayString"])(e.translate("UsersManager_ManageUsersDesc")),1)):Object(a["createCommentVNode"])("",!0),"admin"===e.currentUserRole?(Object(a["openBlock"])(),Object(a["createElementBlock"])("p",qn,Object(a["toDisplayString"])(e.translate("UsersManager_ManageUsersAdminDesc")),1)):Object(a["createCommentVNode"])("",!0),Object(a["createElementVNode"])("div",$n,[Object(a["createElementVNode"])("div",Gn,[Object(a["createElementVNode"])("div",zn,[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_AddUser")),1)]),"superuser"!==e.currentUserRole?(Object(a["openBlock"])(),Object(a["createElementBlock"])("div",Wn,[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()}),"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",Yn,[Object(a["createVNode"])(c,{onDone:t[6]||(t[6]=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[7]||(t[7]=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",Xn,[Object(a["createElementVNode"])("div",Kn,[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[8]||(t[8]=function(t){return e.addNewUserLoginEmail=t}),name:"add-existing-user-email",uicontrol:"text"},null,8,["modelValue"])])]),Object(a["createElementVNode"])("div",Qn,[Object(a["createElementVNode"])("a",{href:"",class:"modal-action modal-close btn",onClick:t[9]||(t[9]=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[10]||(t[10]=Object(a["withModifiers"])((function(t){return e.addNewUserLoginEmail=null}),["prevent"]))},Object(a["toDisplayString"])(e.translate("General_Cancel")),1)])],512)],512)),[[m]])}function es(e){return rs(e)||ss(e)||ns(e)||ts()}function ts(){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 ns(e,t){if(e){if("string"===typeof e)return is(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)?is(e,t):void 0}}function ss(e){if("undefined"!==typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}function rs(e){if(Array.isArray(e))return is(e)}function is(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",ms,[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 ps=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:g["SaveButton"],Field:g["Field"]},directives:{Form:g["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}))}}});ps.render=bs;var hs=ps,gs=(Object(i["createAngularJsAdapter"])({component:hs,scope:{title:{angularJsBind:"<"},anonymousSites:{angularJsBind:"<"},anonymousDefaultReport:{angularJsBind:"<"},anonymousDefaultSite:{angularJsBind:"<"},anonymousDefaultDate:{angularJsBind:"<"},availableDefaultDates:{angularJsBind:"<"},defaultReportOptions:{angularJsBind:"<"}},directiveName:"matomoAnonymousSettings"}),{id:"newsletterSignup"}); + */function Es(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",Us,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",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"}); /*! * 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"])("SaveButton"),c=Object(a["resolveComponent"])("ContentBlock");return Object(a["withDirectives"])((Object(a["openBlock"])(),Object(a["createElementBlock"])("div",gs,[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 Os=Object(a["defineComponent"])({data:function(){return{showNewsletterSignup:!0,newsletterSignupCheckbox:!1,isProcessingNewsletterSignup:!1,newsletterSignupButtonTitle:Object(i["translate"])("General_Save")}},components:{ContentBlock:i["ContentBlock"],SaveButton:g["SaveButton"],Field:g["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")}))}}});Os.render=fs;var js=Os,vs=(Object(i["createAngularJsAdapter"])({component:js,scope:{},directiveName:"matomoNewsletterSettings"}),{id:"userSettingsTable"}),Cs={key:0},Ss={id:"languageHelp",class:"inline-help-node"},Ns={target:"_blank",rel:"noreferrer noopener",href:"https://matomo.org/translations/"},Us={class:"sites_autocomplete"},ys={class:"modal",id:"confirmChangesWithPassword",ref:"confirmChangesWithPasswordModal"},Es={class:"modal-content"},Vs={class:"modal-footer"}; + */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"}; /*! * Matomo - free/libre analytics platform * * @link https://matomo.org * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later - */function ks(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",vs,[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",Cs,[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",Ss,[Object(a["createElementVNode"])("a",Ns,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",Us,[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",ys,[Object(a["createElementVNode"])("div",Es,[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",Vs,[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 As=window,ws=As.$,Ts=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:g["SaveButton"],Field:g["Field"],SiteSelector:i["SiteSelector"]},directives:{Form:g["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 ws(this.$refs.confirmChangesWithPasswordModal).modal({dismissible:!1,ready:function(){ws(".modal.open #currentPassword").focus()}}).modal("open")}}});Ts.render=ks;var Ms=Ts; + */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; /*! * 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:Ms,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:$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"})}})})); //# sourceMappingURL=UsersManager.umd.min.js.map \ No newline at end of file diff --git a/plugins/UsersManager/vue/src/PagedUsersList/PagedUsersList.adapter.ts b/plugins/UsersManager/vue/src/PagedUsersList/PagedUsersList.adapter.ts index c67b71698c..ab6d30d0ed 100644 --- a/plugins/UsersManager/vue/src/PagedUsersList/PagedUsersList.adapter.ts +++ b/plugins/UsersManager/vue/src/PagedUsersList/PagedUsersList.adapter.ts @@ -27,6 +27,10 @@ export default createAngularJsAdapter({ angularJsBind: '&', vue: 'searchChange', }, + onResendInvite: { + angularJsBind: '&', + vue: 'resendInvite', + }, initialSiteId: { angularJsBind: '<', }, diff --git a/plugins/UsersManager/vue/src/PagedUsersList/PagedUsersList.less b/plugins/UsersManager/vue/src/PagedUsersList/PagedUsersList.less index dc151fe183..bc52e87ce3 100644 --- a/plugins/UsersManager/vue/src/PagedUsersList/PagedUsersList.less +++ b/plugins/UsersManager/vue/src/PagedUsersList/PagedUsersList.less @@ -35,7 +35,7 @@ } table.entityTable tbody tr td.actions-cell { - width: 130px; + width: 140px; padding: 0; text-align: center; } @@ -156,7 +156,7 @@ } } - .delete-user-confirm-modal,.change-user-role-confirm-modal { + .delete-user-confirm-modal,.change-user-role-confirm-modal,.resend-invite-confirm-modal { .modal-no { margin-left: 1em; margin-right: 1em; @@ -164,6 +164,19 @@ } } + #status { + .accept { + color: green; + } + + .expired, .decline { + color: red; + } + + .pending{ + color: orange; + } + } &.loading { table { diff --git a/plugins/UsersManager/vue/src/PagedUsersList/PagedUsersList.vue b/plugins/UsersManager/vue/src/PagedUsersList/PagedUsersList.vue index 8ac9e8e4fa..6af4687037 100644 --- a/plugins/UsersManager/vue/src/PagedUsersList/PagedUsersList.vue +++ b/plugins/UsersManager/vue/src/PagedUsersList/PagedUsersList.vue @@ -198,6 +198,7 @@ :title="translate('UsersManager_UsesTwoFactorAuthentication')" >{{ translate('UsersManager_2FA') }} {{ translate('UsersManager_LastSeen') }} + {{ translate('UsersManager_Status') }}
{{ translate('General_Actions') }}
@@ -302,7 +303,21 @@ > {{ user.last_seen ? `${user.last_seen} ago` : '-' }} + + + {{ getInviteStatus(user.invite_status) }} + + + +
+ @@ -489,7 +528,7 @@ export default defineComponent({ }, }; }, - emits: ['editUser', 'changeUserRole', 'deleteUser', 'searchChange'], + emits: ['editUser', 'changeUserRole', 'deleteUser', 'searchChange', 'resendInvite'], created() { this.onUserTextFilterChange = debounce(this.onUserTextFilterChange, 300); }, @@ -499,6 +538,18 @@ export default defineComponent({ }, }, methods: { + getInviteStatus(inviteStatus: string|null) { + if (inviteStatus === 'accept') { + return translate('UsersManager_Active'); + } + if (inviteStatus === 'pending') { + return translate('UsersManager_Pending'); + } + if (inviteStatus === 'expired') { + return translate('UsersManager_Expired'); + } + return translate('UsersManager_Decline'); + }, onPermissionsForUpdate(site: SiteRef) { this.permissionsForSite = site; this.changeSearch({ idSite: this.permissionsForSite.id }); @@ -539,11 +590,21 @@ export default defineComponent({ users: this.userOperationSubject, }); }, + resendRequestedUser() { + this.$emit('resendInvite', { + user: this.userToChange, + }); + }, showDeleteConfirm() { $(this.$refs.deleteUserConfirmModal as HTMLElement).modal({ dismissible: false, }).modal('open'); }, + showResendConfirm() { + $(this.$refs.resendInviteConfirmModal as HTMLElement).modal({ + dismissible: false, + }).modal('open'); + }, showAccessChangeConfirm() { $(this.$refs.changeUserRoleConfirmModal as HTMLElement).modal({ dismissible: false, @@ -676,3 +737,8 @@ export default defineComponent({ }, }); + diff --git a/plugins/UsersManager/vue/src/User.ts b/plugins/UsersManager/vue/src/User.ts index aca7bf9cf8..88fc0be970 100644 --- a/plugins/UsersManager/vue/src/User.ts +++ b/plugins/UsersManager/vue/src/User.ts @@ -12,6 +12,7 @@ interface User { password?: string; email: string; role?: string; + invited_at?: string; } export default User; diff --git a/plugins/UsersManager/vue/src/UserEditForm/UserEditForm.vue b/plugins/UsersManager/vue/src/UserEditForm/UserEditForm.vue index 406f8ced69..6df10c52fd 100644 --- a/plugins/UsersManager/vue/src/UserEditForm/UserEditForm.vue +++ b/plugins/UsersManager/vue/src/UserEditForm/UserEditForm.vue @@ -94,8 +94,9 @@
- +
+
+ +
+
+
+ +
+
+
- {{ translate('UsersManager_AddUser') }} + {{ translate('UsersManager_InviteNewUser') }}
this.fetchUsers()); }, + onResendInvite(user: User) { + console.log(user); + AjaxHelper.fetch( + { + method: 'UsersManager.resendInvite', + userLogin: user.login, + }, + ).then((res) => { + console.log(res); + }); + }, fetchUsers() { this.isLoadingUsers = true; return AjaxHelper.fetch( diff --git a/tests/PHPUnit/Integration/Session/SessionAuthTest.php b/tests/PHPUnit/Integration/Session/SessionAuthTest.php index 3f0c2142d1..e8dcf1eedd 100644 --- a/tests/PHPUnit/Integration/Session/SessionAuthTest.php +++ b/tests/PHPUnit/Integration/Session/SessionAuthTest.php @@ -173,7 +173,7 @@ class MockUsersModel extends UsersModel $this->userData = $userData; } - public function getUser($userLogin) + public function getUser($userLogin, $pending = false) { return $this->userData; } diff --git a/tests/PHPUnit/System/expected/test_reportLimitingdimension_2_rankingQuery__CustomDimensions.getCustomDimension_day.xml b/tests/PHPUnit/System/expected/test_reportLimitingdimension_2_rankingQuery__CustomDimensions.getCustomDimension_day.xml index eccf657358..ecd14db85a 100644 --- a/tests/PHPUnit/System/expected/test_reportLimitingdimension_2_rankingQuery__CustomDimensions.getCustomDimension_day.xml +++ b/tests/PHPUnit/System/expected/test_reportLimitingdimension_2_rankingQuery__CustomDimensions.getCustomDimension_day.xml @@ -81,8 +81,6 @@ 0 - - @@ -123,8 +121,6 @@ 0 - - diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_admin_home.png b/tests/UI/expected-screenshots/UIIntegrationTest_admin_home.png index e39bcfe2e6..6c1b764a70 100644 --- a/tests/UI/expected-screenshots/UIIntegrationTest_admin_home.png +++ b/tests/UI/expected-screenshots/UIIntegrationTest_admin_home.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2e3d9a6693a0624df4d59220f823d3dc0d22a16e9c8c84051e7f885af6395b1e -size 161301 +oid sha256:84cf86a54e2ac049de3d37b3df85e12eba5a5abea74eda2bf708176134bb77bd +size 161223 diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_api_error.png b/tests/UI/expected-screenshots/UIIntegrationTest_api_error.png index e39bcfe2e6..6c1b764a70 100644 --- a/tests/UI/expected-screenshots/UIIntegrationTest_api_error.png +++ b/tests/UI/expected-screenshots/UIIntegrationTest_api_error.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2e3d9a6693a0624df4d59220f823d3dc0d22a16e9c8c84051e7f885af6395b1e -size 161301 +oid sha256:84cf86a54e2ac049de3d37b3df85e12eba5a5abea74eda2bf708176134bb77bd +size 161223 diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_api_listing.png b/tests/UI/expected-screenshots/UIIntegrationTest_api_listing.png index faaed3b33f..59e8f53d21 100644 --- a/tests/UI/expected-screenshots/UIIntegrationTest_api_listing.png +++ b/tests/UI/expected-screenshots/UIIntegrationTest_api_listing.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:43da6112ff8af49a08be6924df7d4f600febdbff940f605459f82e0e97c1a00b -size 5030169 +oid sha256:e6291f3e7475eef0fe07443cd97cb383bf1275316cd8fccc03060cb695f71be0 +size 5047076 diff --git a/tests/resources/OmniFixture-dump.sql b/tests/resources/OmniFixture-dump.sql index c49ddce62c..840d99ca7e 100644 --- a/tests/resources/OmniFixture-dump.sql +++ b/tests/resources/OmniFixture-dump.sql @@ -1256,6 +1256,7 @@ CREATE TABLE `user` ( `superuser_access` tinyint(2) unsigned NOT NULL DEFAULT '0', `date_registered` timestamp NULL DEFAULT NULL, `ts_password_modified` timestamp NULL DEFAULT NULL, + `invite_status` enum('accept','pending','decline','expired'), PRIMARY KEY (`login`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; /*!40101 SET character_set_client = @saved_cs_client */; @@ -1266,7 +1267,7 @@ CREATE TABLE `user` ( LOCK TABLES `user` WRITE; /*!40000 ALTER TABLE `user` DISABLE KEYS */; -INSERT INTO `user` VALUES ('superUserLogin','$2y$10$mbMrIm8ZN82gFoNsV76Z3.avOWosOlT.D/6Pz4EZzhmxbedUeOyzm','hello@example.org','',1,'2020-04-15 14:02:31','2020-04-15 14:02:31'); +INSERT INTO `user` VALUES ('superUserLogin','$2y$10$mbMrIm8ZN82gFoNsV76Z3.avOWosOlT.D/6Pz4EZzhmxbedUeOyzm','hello@example.org','',1,'2020-04-15 14:02:31','2020-04-15 14:02:31',null); /*!40000 ALTER TABLE `user` ENABLE KEYS */; UNLOCK TABLES; -- cgit v1.2.3