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

github.com/matomo-org/matomo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG.md15
-rw-r--r--config/global.ini.php3
-rw-r--r--core/Db/Schema/Mysql.php9
-rw-r--r--core/Updates/4.11.0-rc2.php104
-rw-r--r--core/Validators/Login.php59
-rw-r--r--plugins/CoreAdminHome/lang/en.json2
-rw-r--r--plugins/Login/Controller.php257
-rw-r--r--plugins/Login/PasswordResetter.php9
-rw-r--r--plugins/Login/lang/en.json10
-rw-r--r--plugins/Login/templates/invitation.twig136
-rw-r--r--plugins/Login/templates/invitationDecline.twig23
-rw-r--r--plugins/Login/templates/invitationDeclineSuccess.twig11
-rw-r--r--plugins/Login/templates/inviteLayout.twig46
-rw-r--r--plugins/Login/tests/Fixtures/PendingUsers.php38
-rw-r--r--plugins/Login/tests/Integration/LoginTest.php14
-rw-r--r--plugins/Login/tests/Integration/PasswordResetterTest.php23
-rw-r--r--plugins/Login/tests/UI/Decline_spec.js18
-rw-r--r--plugins/Login/tests/UI/Invite_spec.js18
-rw-r--r--plugins/Login/tests/UI/expected-screenshots/Decline_success.png3
-rw-r--r--plugins/Login/tests/UI/expected-screenshots/Invite_error.png4
-rw-r--r--plugins/Login/tests/UI/expected-screenshots/Invite_set_password.png4
-rw-r--r--plugins/Login/tests/UI/expected-screenshots/Invite_wrong_password.png4
-rw-r--r--plugins/SegmentEditor/SegmentEditor.php50
-rw-r--r--plugins/TwoFactorAuth/tests/UI/expected-screenshots/TwoFactorAuthUsersManager_list.png4
-rw-r--r--plugins/UsersManager/API.php316
-rw-r--r--plugins/UsersManager/Controller.php7
-rw-r--r--plugins/UsersManager/Emails/UserInviteEmail.php44
-rw-r--r--plugins/UsersManager/Model.php100
-rw-r--r--plugins/UsersManager/Repository/UserRepository.php197
-rw-r--r--plugins/UsersManager/Sql/UserTableFilter.php32
-rw-r--r--plugins/UsersManager/Tasks.php23
-rw-r--r--plugins/UsersManager/UserAccessFilter.php3
-rw-r--r--plugins/UsersManager/UsersManager.php34
-rw-r--r--plugins/UsersManager/Validators/Email.php26
-rw-r--r--plugins/UsersManager/Validators/Login.php22
-rw-r--r--plugins/UsersManager/lang/en.json12
-rw-r--r--plugins/UsersManager/templates/index.twig1
-rw-r--r--plugins/UsersManager/tests/Fixtures/ManyUsers.php90
-rw-r--r--plugins/UsersManager/tests/Integration/APITest.php747
-rw-r--r--plugins/UsersManager/tests/Integration/UserInviteTest.php102
-rw-r--r--plugins/UsersManager/tests/Integration/UsersManagerTest.php273
-rw-r--r--plugins/UsersManager/tests/System/ApiTest.php13
-rw-r--r--plugins/UsersManager/tests/System/expected/test___UsersManager.getUser_login1_when_superuseraccess.xml4
-rw-r--r--plugins/UsersManager/tests/System/expected/test___UsersManager.getUser_login2_when_adminaccess.xml1
-rw-r--r--plugins/UsersManager/tests/System/expected/test___UsersManager.getUser_login2_when_superuseraccess.xml4
-rw-r--r--plugins/UsersManager/tests/System/expected/test___UsersManager.getUser_login4_when_superuseraccess.xml4
-rw-r--r--plugins/UsersManager/tests/System/expected/test___UsersManager.getUser_login4_when_viewaccess.xml1
-rw-r--r--plugins/UsersManager/tests/System/expected/test___UsersManager.getUser_login6_when_superuseraccess.xml4
-rw-r--r--plugins/UsersManager/tests/System/expected/test___UsersManager.getUsersLogin__when_adminaccess.xml1
-rw-r--r--plugins/UsersManager/tests/System/expected/test___UsersManager.getUsersLogin__when_superuseraccess.xml1
-rw-r--r--plugins/UsersManager/tests/System/expected/test___UsersManager.getUsersWithSiteAccess_3_admin_when_superuseraccess.xml8
-rw-r--r--plugins/UsersManager/tests/System/expected/test___UsersManager.getUsers__when_adminaccess.xml16
-rw-r--r--plugins/UsersManager/tests/System/expected/test___UsersManager.getUsers__when_superuseraccess.xml84
-rw-r--r--plugins/UsersManager/tests/UI/UsersManager_spec.js24
-rw-r--r--plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_add_new_user_form.png4
-rw-r--r--plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_admin_view_admin_add_user.png4
-rw-r--r--plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_admin_view_admin_add_user_by_email.png4
-rw-r--r--plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_admin_view_admin_add_user_by_login.png4
-rw-r--r--plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_admin_view_admin_add_user_not_exists.png4
-rw-r--r--plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_admin_view_admin_load.png4
-rw-r--r--plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_all_rows_deselected.png4
-rw-r--r--plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_all_rows_in_search.png4
-rw-r--r--plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_all_rows_selected.png4
-rw-r--r--plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_bulk_remove_access.png4
-rw-r--r--plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_bulk_set_access.png4
-rw-r--r--plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_bulk_set_access_confirm.png4
-rw-r--r--plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_delete_bulk_access.png4
-rw-r--r--plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_delete_single.png4
-rw-r--r--plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_filters.png4
-rw-r--r--plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_load.png4
-rw-r--r--plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_manage_users_back.png4
-rw-r--r--plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_next_click.png4
-rw-r--r--plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_permissions_all_rows_in_search.png4
-rw-r--r--plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_permissions_edit.png4
-rw-r--r--plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_permissions_select_multiple.png4
-rw-r--r--plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_previous.png4
-rw-r--r--plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_resend_popup.png4
-rw-r--r--plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_resend_success.png3
-rw-r--r--plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_role_for.png4
-rw-r--r--plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_rows_selected.png4
-rw-r--r--plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_superuser_confirm.png4
-rw-r--r--plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_user_created.png4
-rw-r--r--plugins/UsersManager/vue/dist/UsersManager.umd.js567
-rw-r--r--plugins/UsersManager/vue/dist/UsersManager.umd.min.js20
-rw-r--r--plugins/UsersManager/vue/src/PagedUsersList/PagedUsersList.less13
-rw-r--r--plugins/UsersManager/vue/src/PagedUsersList/PagedUsersList.vue480
-rw-r--r--plugins/UsersManager/vue/src/PagedUsersList/SearchParams.ts1
-rw-r--r--plugins/UsersManager/vue/src/User.ts2
-rw-r--r--plugins/UsersManager/vue/src/UserEditForm/UserEditForm.vue28
-rw-r--r--plugins/UsersManager/vue/src/UsersManager/UsersManager.adapter.ts3
-rw-r--r--plugins/UsersManager/vue/src/UsersManager/UsersManager.vue273
-rw-r--r--tests/UI/expected-screenshots/UIIntegrationTest_admin_diagnostics_configfile.png4
-rw-r--r--tests/UI/expected-screenshots/UIIntegrationTest_api_listing.png4
-rw-r--r--tests/resources/OmniFixture-dump.sql3
94 files changed, 2871 insertions, 1696 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 23d5aac869..d0d1177833 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -12,6 +12,21 @@ The Product Changelog at **[matomo.org/changelog](https://matomo.org/changelog)*
* The methods `setExcludedReferrers` and `getExcludedReferrers` have been added to the JavaScript tracker. They allow setting and receiving the referrers the JavaScript tracker should ignore. If a referrer matches an entry on that list, it will not be passed with the tracking requests and the attribution cookie will stay unchanged. This can for example be used if you need to forward your users to an external service like SSO or payment and don't want any visits or conversions being attributed to those services.
+## Matomo 4.11.0
+
+### Breaking Changes
+
+* The user management UI no longer allows direct creation of a new user (with a password). Instead an invitation can be sent via email. Directly creating a new user is still possible using the API.
+
+#### New PHP events
+
+* Added new event `UsersManager.inviteUser.end`, which is triggered after a new user has been invited
+* Added new event `UsersManager.inviteUser.resendInvite`, which is triggered after the invitation to a user has been resent
+* Added new event `UsersManager.inviteUser.accepted`, which is triggered after an invitation has been accepted
+* Added new event `UsersManager.inviteUser.declined`, which is triggered after an invitation has been declined
+
+* The existing event `UsersManager.addUser.end` will only be triggered when a user is added using the API.
+
## Matomo 4.10.0
### Breaking Changes
diff --git a/config/global.ini.php b/config/global.ini.php
index ffe327416e..b4c9954ffb 100644
--- a/config/global.ini.php
+++ b/config/global.ini.php
@@ -277,6 +277,9 @@ browser_archiving_disabled_enforce = 0
; Add custom currencies to Sites Manager.
currencies[BTC] = Bitcoin
+; default expiry time in days for invite user tokens
+default_invite_user_token_expiry_days = 7
+
; By default, users can create Segments which are to be processed in Real-time.
; Setting this to 0 will force all newly created Custom Segments to be "Pre-processed (faster, requires archive.php cron)"
; This can be useful if you want to prevent users from adding much load on the server.
diff --git a/core/Db/Schema/Mysql.php b/core/Db/Schema/Mysql.php
index 71bd54f39e..1f8bc7d5f9 100644
--- a/core/Db/Schema/Mysql.php
+++ b/core/Db/Schema/Mysql.php
@@ -53,7 +53,10 @@ 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',
+ invited_by VARCHAR(100) NULL,
+ invite_token VARCHAR(191) NULL,
+ invite_expired_at TIMESTAMP NULL,
+ invite_accept_at TIMESTAMP NULL,
PRIMARY KEY(login)
) ENGINE=$engine DEFAULT CHARSET=$charset
",
@@ -591,8 +594,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`, `invite_status`)
- VALUES ( 'anonymous', '', 'anonymous@example.org', '', 0, '$now', '$now' , NULL, 'accept');");
+ `idchange_last_viewed`)
+ VALUES ( 'anonymous', '', 'anonymous@example.org', '', 0, '$now', '$now' , NULL);");
$model = new Model();
$model->addTokenAuth('anonymous', 'anonymous', 'anonymous default token', $now);
diff --git a/core/Updates/4.11.0-rc2.php b/core/Updates/4.11.0-rc2.php
new file mode 100644
index 0000000000..745abe583a
--- /dev/null
+++ b/core/Updates/4.11.0-rc2.php
@@ -0,0 +1,104 @@
+<?php
+
+/**
+ * Matomo - free/libre analytics platform
+ *
+ * @link https://matomo.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ *
+ */
+
+namespace Piwik\Updates;
+
+use Piwik\Common;
+use Piwik\Container\StaticContainer;
+use Piwik\Db;
+use Piwik\Piwik;
+use Piwik\Plugins\UsersManager\Emails\UserInviteEmail;
+use Piwik\Plugins\UsersManager\Model;
+use Piwik\Site;
+use Piwik\Updater;
+use Piwik\Updater\Migration;
+use Piwik\Updater\Migration\Factory as MigrationFactory;
+use Piwik\Updates as PiwikUpdates;
+
+/**
+ * Update for version 4.11.0-rc2
+ */
+class Updates_4_11_0_rc2 extends PiwikUpdates
+{
+ /**
+ * @var MigrationFactory
+ */
+ private $migration;
+
+ private $pendingUsers;
+
+ private $userTable;
+
+ public function __construct(MigrationFactory $factory)
+ {
+ $this->migration = $factory;
+ $this->userTable = Common::prefixTable('user');
+ }
+
+ /**
+ * @param Updater $updater
+ *
+ * @return Migration[]
+ */
+ public function getMigrations(Updater $updater)
+ {
+ try {
+ $this->pendingUsers = Db::fetchAll(
+ "SELECT * FROM $this->userTable WHERE invite_status = ? ",
+ ['pending']
+ );
+ } catch (\Exception $e) {
+ // ignore any errors. The column might not exist when updating from an older version,
+ // so there wouldn't be anything to update anyway
+ }
+ return [
+ $this->migration->db->dropColumn('user', 'invite_status'),
+ $this->migration->db->addColumns('user', ['invite_token' => 'VARCHAR(191) DEFAULT null']),
+ $this->migration->db->addColumns('user', ['invited_by' => 'VARCHAR(100) DEFAULT null']),
+ $this->migration->db->addColumns('user', ['invite_expired_at' => 'TIMESTAMP null DEFAULT null']),
+ $this->migration->db->addColumns('user', ['invite_accept_at' => 'TIMESTAMP null DEFAULT null']),
+ ];
+ }
+
+ public function doUpdate(Updater $updater)
+ {
+ $updater->executeMigrations(__FILE__, $this->getMigrations($updater));
+
+ $model = new Model();
+ if (!empty($this->pendingUsers)) {
+ foreach ($this->pendingUsers as $user) {
+ $model->deleteAllTokensForUser($user['login']);
+
+ $site = $model->getSitesAccessFromUser($user['login']);
+ if (isset($site[0])) {
+ $site = new Site($site[0]['site']);
+ $siteName = $site->getName();
+ } else {
+ $siteName = "Default Site";
+ }
+ //generate Token
+ $generatedToken = $model->generateRandomTokenAuth();
+
+ //attach token to user
+ $model->attachInviteToken($user['login'], $generatedToken, 7);
+
+ // send email
+ $email = StaticContainer::getContainer()->make(UserInviteEmail::class, [
+ 'currentUser' => Piwik::getCurrentUserLogin(),
+ 'invitedUser' => $user,
+ 'siteName' => $siteName,
+ 'token' => $generatedToken,
+ 'expiryInDays' => 7
+ ]);
+ $email->safeSend();
+ }
+ }
+ }
+}
diff --git a/core/Validators/Login.php b/core/Validators/Login.php
deleted file mode 100644
index f377f79bec..0000000000
--- a/core/Validators/Login.php
+++ /dev/null
@@ -1,59 +0,0 @@
-<?php
-/**
- * Matomo - free/libre analytics platform
- *
- * @link https://matomo.org
- * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
- *
- */
-
-namespace Piwik\Validators;
-
-use Piwik\Piwik;
-use Piwik\SettingsPiwik;
-use Piwik\Plugins\UsersManager\API as APIUsersManager;
-
-class Login extends BaseValidator
-{
- protected $login;
- const loginMinimumLength = 2;
- const loginMaximumLength = 100;
-
-
- 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)));
- }
-
- $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/lang/en.json b/plugins/CoreAdminHome/lang/en.json
index 4c7c891f35..92e6d1aaa8 100644
--- a/plugins/CoreAdminHome/lang/en.json
+++ b/plugins/CoreAdminHome/lang/en.json
@@ -167,7 +167,7 @@
"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.",
+ "UserInviteNotes": "If you were not expecting this invitation, you can ignore this email. If %1$s is sending you too many emails, you can block them or report abuse. The invitation automatically expires in %2$s days.",
"SecurityNotificationUserAcceptInviteBody": "User (login: %s) accepted the invitation.",
"SecurityNotificationUserDeclinedInviteBody": "User (login: %s) declined the invitation.",
"NeedHelp": "Need help?",
diff --git a/plugins/Login/Controller.php b/plugins/Login/Controller.php
index 06cf702fab..08c657827a 100644
--- a/plugins/Login/Controller.php
+++ b/plugins/Login/Controller.php
@@ -1,4 +1,5 @@
<?php
+
/**
* Matomo - free/libre analytics platform
*
@@ -6,6 +7,7 @@
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*
*/
+
namespace Piwik\Plugins\Login;
use Exception;
@@ -13,12 +15,14 @@ use Piwik\Auth\Password;
use Piwik\Common;
use Piwik\Config;
use Piwik\Container\StaticContainer;
+use Piwik\Date;
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\PrivacyManager\SystemSettings;
use Piwik\Plugins\UsersManager\Model as UsersModel;
use Piwik\Plugins\UsersManager\UsersManager;
use Piwik\QuickForm2;
@@ -70,19 +74,19 @@ class Controller extends \Piwik\Plugin\ControllerAdmin
* Constructor.
*
* @param PasswordResetter $passwordResetter
- * @param AuthInterface $auth
+ * @param \Piwik\Auth $auth
* @param SessionInitializer $sessionInitializer
* @param PasswordVerifier $passwordVerify
* @param BruteForceDetection $bruteForceDetection
* @param SystemSettings $systemSettings
*/
public function __construct(
- $passwordResetter = null,
- $auth = null,
- $sessionInitializer = null,
- $passwordVerify = null,
- $bruteForceDetection = null,
- $systemSettings = null
+ $passwordResetter = null,
+ $auth = null,
+ $sessionInitializer = null,
+ $passwordVerify = null,
+ $bruteForceDetection = null,
+ $systemSettings = null
) {
parent::__construct();
@@ -122,7 +126,7 @@ class Controller extends \Piwik\Plugin\ControllerAdmin
*
* @return string
*/
- function index()
+ public function index()
{
return $this->login();
}
@@ -135,7 +139,7 @@ class Controller extends \Piwik\Plugin\ControllerAdmin
* @return string
* @internal param string $currentUrl Current URL
*/
- function login($messageNoAccess = null, $infoMessage = false)
+ public function login($messageNoAccess = null, $infoMessage = false)
{
$form = new FormLogin();
if ($form->validate()) {
@@ -231,20 +235,20 @@ class Controller extends \Piwik\Plugin\ControllerAdmin
}
}
- return $this->renderTemplate('@Login/confirmPassword', array(
+ return $this->renderTemplate('@Login/confirmPassword', [
'nonce' => Nonce::getNonce($nonceKey),
'AccessErrorString' => $messageNoAccess,
'loginPlugin' => Piwik::getLoginPluginName(),
- ));
+ ]);
}
/**
* Form-less login
- * @see how to use it on http://piwik.org/faq/how-to/faq_30
+ * @see how to use it on https://matomo.org/faq/how-to/faq_30
* @throws Exception
* @return void
*/
- function logme()
+ public function logme()
{
if (Config::getInstance()->General['login_allow_logme'] == 0) {
throw new Exception('This functionality has been disabled in config');
@@ -254,8 +258,9 @@ 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', ["logme"])
+ );
}
$currentUrl = 'index.php';
@@ -274,10 +279,10 @@ class Controller extends \Piwik\Plugin\ControllerAdmin
{
Piwik::checkUserHasSuperUserAccess();
- return $this->renderTemplate('bruteForceLog', array(
+ return $this->renderTemplate('bruteForceLog', [
'blockedIps' => $this->bruteForceDetection->getCurrentlyBlockedIps(),
'blacklistedIps' => $this->systemSettings->blacklistedBruteForceIps->getValue()
- ));
+ ]);
}
/**
@@ -289,14 +294,14 @@ class Controller extends \Piwik\Plugin\ControllerAdmin
public function ajaxNoAccess($errorMessage)
{
return sprintf(
- '<div class="alert alert-danger">
+ '<div class="alert alert-danger">
<p><strong>%s:</strong> %s</p>
<p><a href="%s">%s</a></p>
</div>',
- 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')
);
}
@@ -345,7 +350,8 @@ class Controller extends \Piwik\Plugin\ControllerAdmin
$currentHost = explode(':', $currentHost, 2)[0];
// we only redirect to a trusted host
- if (!empty($host) && !empty($currentHost) && $host == $currentHost && Url::isValidHost($host)
+ if (
+ !empty($host) && !empty($currentHost) && $host == $currentHost && Url::isValidHost($host)
) {
$urlToRedirect = $redirect;
}
@@ -362,9 +368,8 @@ class Controller extends \Piwik\Plugin\ControllerAdmin
/**
* Reset password action. Stores new password as hash and sends email
* to confirm use.
- *
*/
- function resetPassword()
+ public function resetPassword()
{
$infoMessage = null;
$formErrors = null;
@@ -379,7 +384,7 @@ class Controller extends \Piwik\Plugin\ControllerAdmin
$infoMessage = Piwik::translate('Login_ConfirmationLinkSent');
}
} else {
- $formErrors = array($errorMessage);
+ $formErrors = [$errorMessage];
}
} else {
// if invalid, display error
@@ -410,7 +415,7 @@ class Controller extends \Piwik\Plugin\ControllerAdmin
} catch (Exception $ex) {
Log::debug($ex);
- return array($ex->getMessage());
+ return [$ex->getMessage()];
}
return null;
@@ -444,15 +449,21 @@ class Controller extends \Piwik\Plugin\ControllerAdmin
return $this->login($errorMessage);
}
- if (!empty($_POST['nonce'])
- && !empty($_POST['mtmpasswordconfirm'])
- && !empty($resetToken)
- && !empty($login)
- && !empty($passwordHash)
- && empty($errorMessage)) {
+ if (
+ !empty($_POST['nonce'])
+ && !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 {
@@ -462,10 +473,10 @@ class Controller extends \Piwik\Plugin\ControllerAdmin
$nonce = Nonce::getNonce(self::NONCE_CONFIRMRESETPASSWORD);
- return $this->renderTemplateAs('confirmResetPassword', array(
+ return $this->renderTemplateAs('confirmResetPassword', [
'nonce' => $nonce,
'errorMessage' => $errorMessage
- ), 'basic');
+ ], 'basic');
}
/**
@@ -475,7 +486,7 @@ class Controller extends \Piwik\Plugin\ControllerAdmin
*/
public function resetPasswordSuccess()
{
- $_POST = array(); // prevent showing error message username and password is missing
+ $_POST = []; // prevent showing error message username and password is missing
return $this->login($errorMessage = null, $infoMessage = Piwik::translate('Login_PasswordChanged'));
}
@@ -499,7 +510,7 @@ class Controller extends \Piwik\Plugin\ControllerAdmin
*/
public function logout()
{
- Piwik::postEvent('Login.logout', array(Piwik::getCurrentUserLogin()));
+ Piwik::postEvent('Login.logout', [Piwik::getCurrentUserLogin()]);
self::clearSession();
@@ -524,79 +535,99 @@ class Controller extends \Piwik\Plugin\ControllerAdmin
$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'));
- }
+ $settings = new SystemSettings();
+ $termsAndConditionUrl = $settings->termsAndConditionUrl->getValue();
+ $privacyPolicyUrl = $settings->privacyPolicyUrl->getValue();
+ $user = $model->getUserByInviteToken($token);
- //if user not match the invite user
+ // if no user matches the invite token
if (!$user) {
throw new Exception(Piwik::translate('Login_InvalidUsernameEmail'));
}
- //if form is blank
+ if (!empty($user['invite_expired_at']) && Date::factory($user['invite_expired_at'])->isEarlier(Date::now())) {
+ throw new Exception(Piwik::translate('Login_InvalidOrExpiredToken'));
+ }
+
+ // if form was sent
if (!empty($form)) {
$error = null;
$password = Common::getRequestVar('password', false, 'string');
$passwordConfirmation = Common::getRequestVar('passwordConfirmation', false, 'string');
- $terms = Common::getRequestVar('terms', false, 'string');
+ $conditionCheck = Common::getRequestVar('conditionCheck', false, 'string');
+
if (!$password) {
$error = Piwik::translate('Login_PasswordRequired');
}
- //not accept terms
- if (!$terms) {
- $error = Piwik::translate('Login_TermsRequired');
+ // check if terms accepted and privacy
+ if (!$conditionCheck && ($privacyPolicyUrl || $termsAndConditionUrl)) {
+ if ($privacyPolicyUrl && $termsAndConditionUrl) {
+ $error = Piwik::translate('Login_AcceptPrivacyPolicyAndTermsAndCondition');
+ } elseif ($privacyPolicyUrl) {
+ $error = Piwik::translate('Login_AcceptPrivacyPolicy');
+ } elseif ($termsAndConditionUrl) {
+ $error = Piwik::translate('Login_AcceptTermsAndCondition');
+ }
}
- //valid password
+ // validate password
if (!UsersManager::isValidPasswordString($password)) {
- $error = Piwik::translate('UsersManager_ExceptionInvalidPassword',
- array(UsersManager::PASSWORD_MIN_LENGTH));
+ $error = Piwik::translate('UsersManager_ExceptionInvalidPassword', [UsersManager::PASSWORD_MIN_LENGTH]);
}
- //confirm matching password
+
+ // confirm matching passwords
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);
+ $password = $passwordHelper->hash($password);
+
+ // update pending user to active user
+ $model->updateUserFields(
+ $user['login'],
+ [
+ 'password' => $password,
+ 'invite_token' => null,
+ 'invite_accept_at' => Date::now()->getDatetime(),
+ 'invite_expired_at' => null,
+ ]
+ );
+
+ // send e-mail to inviter
+ if (!empty($user['invited_by'])) {
+ $invitedBy = $model->getUser($user['invited_by']);
+ if ($invitedBy) {
+ $mail = StaticContainer::getContainer()->make(UserAcceptInvitationEmail::class, [
+ 'login' => $user['invited_by'],
+ 'emailAddress' => $invitedBy['email'],
+ 'userLogin' => $user['login'],
+ ]);
+ $mail->safeSend();
+ }
}
- //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) {
-
- }
+ /**
+ * Triggered after a user accepted an invite
+ *
+ * @param string $userLogin The invited user's login.
+ * @param string $email The invited user's e-mail.
+ * @param string $inviterLogin The login of the user, who invited this user
+ */
+ Piwik::postEvent('UsersManager.inviteUser.accepted', [$user['login'], $user['email'], $user['invited_by']]);
- $this->redirectToIndex('CoreHome', 'index');
+ $this->authenticateAndRedirect($user['login'], $passwordConfirmation);
}
+
$view->AccessErrorString = $error;
}
+
$view->user = $user;
+ $view->termsAndCondition = $termsAndConditionUrl;
+ $view->privacyPolicyUrl = $privacyPolicyUrl;
$view->token = $token;
- $view->declined = false;
$this->configureView($view);
self::setHostValidationVariablesView($view);
return $view->render();
@@ -609,42 +640,56 @@ class Controller extends \Piwik\Plugin\ControllerAdmin
$token = Common::getRequestVar('token', null, 'string');
$form = Common::getRequestVar('invitation_form', false, 'string');
- $user = $model->getUserByTokenAuth($token);
- if ($user['invite_status'] !== 'pending') {
+ $user = $model->getUserByInviteToken($token);
+
+ // if no user matches the invite token
+ if (!$user) {
throw new Exception(Piwik::translate('Login_InvalidOrExpiredToken'));
}
- //if user not match the invite user
- if (!$user) {
- throw new Exception(Piwik::translate('Login_InvalidUsernameEmail'));
+
+ if (!empty($user['invite_expired_at']) && Date::factory($user['invite_expired_at'])->isEarlier(Date::now())) {
+ throw new Exception(Piwik::translate('Login_InvalidOrExpiredToken'));
}
- if ($form) {
- $model->deleteAllTokensForUser($user['login']);
- $model->updateUserFields($user['login'], ['invite_status' => 'decline']);
- $this->redirectToIndex('Login', 'index');
+ $view = new View('@Login/invitationDecline');
- }
+ if ($form) {
+ // remove user
+ try {
+ $model->deleteUser($user['login']);
+ } catch (\Exception $e) {
+ // deleting the user triggers an event, which might call methods that require a user to be logged in
+ // as those operations might not be needed for a pending user, we simply ignore any errors here
+ }
- $view = new View('@Login/invitation');
- $view->declined = true;
- $view->token = $token;
+ // send e-mail to inviter
+ if (!empty($user['invited_by'])) {
+ $invitedBy = $model->getUser($user['invited_by']);
+ if ($invitedBy) {
+ $mail = StaticContainer::getContainer()->make(UserDeclinedInvitationEmail::class, [
+ 'login' => $user['invited_by'],
+ 'emailAddress' => $invitedBy['email'],
+ 'userLogin' => $user['login'],
+ ]);
+ $mail->safeSend();
+ }
+ }
- //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) {
+ $view = new View('@Login/invitationDeclineSuccess');
+ /**
+ * Triggered after a user accepted an invite
+ *
+ * @param string $userLogin The invited user's login.
+ * @param string $email The invited user's e-mail.
+ * @param string $inviterLogin The login of the user, who invited this user
+ */
+ Piwik::postEvent('UsersManager.inviteUser.declined', [$user['login'], $user['email'], $user['invited_by']]);
}
+
+ $view->token = $token;
$this->configureView($view);
self::setHostValidationVariablesView($view);
return $view->render();
-
-
}
-
}
diff --git a/plugins/Login/PasswordResetter.php b/plugins/Login/PasswordResetter.php
index 45854f4601..3d0039554c 100644
--- a/plugins/Login/PasswordResetter.php
+++ b/plugins/Login/PasswordResetter.php
@@ -15,9 +15,9 @@ use Piwik\IP;
use Piwik\Option;
use Piwik\Piwik;
use Piwik\Plugins\Login\Emails\PasswordResetEmail;
+use Piwik\Plugins\UsersManager\API as UsersManagerAPI;
use Piwik\Plugins\UsersManager\Model;
use Piwik\Plugins\UsersManager\UsersManager;
-use Piwik\Plugins\UsersManager\API as UsersManagerAPI;
use Piwik\Plugins\UsersManager\UserUpdater;
use Piwik\SettingsPiwik;
use Piwik\Url;
@@ -379,6 +379,8 @@ class PasswordResetter
/**
* Returns user information based on a login or email.
*
+ * If user is pending, return null
+ *
* Derived classes can override this method to provide custom user querying logic.
*
* @param string $loginMail user login or email address
@@ -388,7 +390,12 @@ class PasswordResetter
{
$userModel = new Model();
+ if ($userModel->isPendingUser($loginOrMail)) {
+ return null;
+ }
+
$user = null;
+
if ($userModel->userExists($loginOrMail)) {
$user = $userModel->getUser($loginOrMail);
} else if ($userModel->userEmailExists($loginOrMail)) {
diff --git a/plugins/Login/lang/en.json b/plugins/Login/lang/en.json
index 4e4a846295..db9c64250b 100644
--- a/plugins/Login/lang/en.json
+++ b/plugins/Login/lang/en.json
@@ -60,9 +60,13 @@
"InvitationDeclineBody": "Decline this invitation?",
"InvitationHints": "(you can leave the page to cancel this action)",
"Accept": "Accept",
- "Yes": "Yes",
- "TermsRequired": "Please accept the terms and conditions",
"PasswordRequired": "Please enter your password to continue",
- "declineInvitationInfo": "Your invitation was declined."
+ "DeclineInvitationInfo": "Your invitation was declined.",
+ "BySigningUpPrivacyPolicy": "By signing up, I accept the %1$sprivacy policy%2$s",
+ "BySigningUpTermsAndCondition": "By signing up, I accept the %1$sterms &amp; conditions%2$s",
+ "BySigningUpPrivacyPolicyAndTermsAndCondition": "By signing up, I accept the %1$sprivacy policy%2$s and the %3$sterms &amp; conditions%4$s",
+ "AcceptPrivacyPolicy": "You need to accept the privacy policy.",
+ "AcceptTermsAndCondition": "You need to accept the terms &amp; conditions.",
+ "AcceptPrivacyPolicyAndTermsAndCondition": "You need to accept the privacy policy and the terms &amp; conditions."
}
}
diff --git a/plugins/Login/templates/invitation.twig b/plugins/Login/templates/invitation.twig
index adcba7d505..a559a9aab4 100644
--- a/plugins/Login/templates/invitation.twig
+++ b/plugins/Login/templates/invitation.twig
@@ -1,83 +1,83 @@
-{% extends '@Login/inviteLayout.twig' %}
+{% extends '@Login/loginLayout.twig' %}
{% block loginContent %}
- {% if not declined %}
- <div class="contentForm invitationForm">
- <div class="card">
- <div class="card-content">
- <div class="card-title">
- {{ "Login_InvitationTitle"|translate }}
- </div>
+ <div class="contentForm invitationForm">
+ <div class="card">
+ <div class="card-content">
+ <div class="card-title">
+ {{ "Login_InvitationTitle"|translate }}
+ </div>
- {% if AccessErrorString is defined %}
- <div piwik-notification
- noclear="true"
- context="error">
- <strong>{{ 'General_Error'|translate }}</strong>: {{ AccessErrorString|raw }}<br/>
- </div>
- {% endif %}
- {% block content %}
- <form method="post" action="?module=Login&action=acceptInvitation">
- <input type="hidden" name="token" value="{{ token }}"/>
- <div class="row">
- <div class="col s12 input-field">
- <input type="text" name="login" value="{{ user.login }}" size="20" readonly
- tabindex="0"/>
- <label><i class="icon-user icon"></i> {{ 'Login_LoginOrEmail'|translate }}</label>
- </div>
- <div class="col s12 input-field">
- <input type="password" placeholder="" name="password" id="password" class="input" value="" size="20"
- autocorrect="off" autocapitalize="none"
- tabindex="1" required/>
- <label for="password"><i class="icon-locked icon"></i> {{ 'Login_NewPassword'|translate }}</label>
- </div>
- <div class="col s12 input-field">
- <input type="password" placeholder="" name="passwordConfirmation" id="password_confirm" class="input" value="" size="20"
- autocorrect="off" autocapitalize="none"
- tabindex="2"/>
- <label for="password_confirm"><i class="icon-locked icon"></i> {{ 'Login_NewPasswordRepeat'|translate }}</label>
- </div>
+ {% if AccessErrorString is defined %}
+ <div piwik-notification
+ noclear="true"
+ context="error">
+ <strong>{{ 'General_Error'|translate }}</strong>: {{ AccessErrorString|raw }}<br/>
+ </div>
+ {% endif %}
+ {% block content %}
+ <form method="post" action="?module=Login&action=acceptInvitation">
+ <input type="hidden" name="token" value="{{ token }}"/>
+ <div class="row">
+ <div class="col s12 input-field">
+ <input type="text" name="login" value="{{ user.login }}" size="20" readonly
+ tabindex="0"/>
+ <label><i class="icon-user icon"></i> {{ 'Login_LoginOrEmail'|translate }}</label>
+ </div>
+ <div class="col s12 input-field">
+ <input type="password" placeholder="" name="password" id="password" class="input" value="" size="20"
+ autocorrect="off" autocapitalize="none"
+ tabindex="1" required/>
+ <label for="password"><i class="icon-locked icon"></i> {{ 'Login_NewPassword'|translate }}</label>
+ </div>
+ <div class="col s12 input-field">
+ <input type="password" placeholder="" name="passwordConfirmation" id="password_confirm" class="input" value="" size="20"
+ autocorrect="off" autocapitalize="none"
+ tabindex="2" required/>
+ <label for="password_confirm"><i class="icon-locked icon"></i> {{ 'Login_NewPasswordRepeat'|translate }}</label>
</div>
- <div class="row actions">
+ </div>
+ <div class="row actions">
+ {% if privacyPolicyUrl|default('') is not empty or termsAndCondition|default('') is not empty %}
<div class="col s12">
<label>
- <input name="terms" type="checkbox" id="terms" value="1" tabindex="90"/>
- <span>{{ 'PrivacyManager_TermsAndConditions'|translate }}</span>
+ <input name="conditionCheck" type="checkbox" id="conditionCheck" value="1" tabindex="89"/>
+ <span>
+ {% if privacyPolicyUrl|default('') is not empty and termsAndCondition|default('') is empty %}
+ {{ 'Login_BySigningUpPrivacyPolicy'|translate(
+ '<a target="_blank" rel="noreferrer noopener" href="' ~ privacyPolicyUrl|safelink|e('html_attr') ~ '">',
+ '</a>'
+ )|raw }}
+ {% elseif privacyPolicyUrl|default('') is empty and termsAndCondition|default('') is not empty %}
+ {{ 'Login_BySigningUpTermsAndCondition'|translate(
+ '<a target="_blank" rel="noreferrer noopener" href="' ~ termsAndCondition|safelink|e('html_attr') ~ '">',
+ '</a>'
+ )|raw }}
+ {% elseif privacyPolicyUrl|default('') is not empty and termsAndCondition|default('') is not empty %}
+ {{ 'Login_BySigningUpPrivacyPolicyAndTermsAndCondition'|translate(
+ '<a target="_blank" rel="noreferrer noopener" href="' ~ privacyPolicyUrl|safelink|e('html_attr') ~ '">',
+ '</a>',
+ '<a target="_blank" rel="noreferrer noopener" href="' ~ termsAndCondition|safelink|e('html_attr') ~ '">',
+ '</a>'
+ )|raw }}
+ {% endif %}
+ </span>
</label>
- <input class="submit btn" name="invitation_form" id="login_form_submit" type="submit" value="{{ 'Login_Accept'|translate }}"
- tabindex="100"/>
</div>
- </div>
- </form>
- {% if isCustomLogo %}
- <p id="piwik">
- <i><a href="https://matomo.org/" rel="noreferrer noopener" target="_blank">{{ linkTitle }}</a></i>
- </p>
- {% endif %}
- {% endblock %}
- </div>
- </div>
- </div>
- {% else %}
- <div class="contentForm invitationForm">
- <div class="card">
- <div class="card-content">
- <div class="card-title">
- {{ "Login_InvitationDeclineTitle"|translate }}
- </div>
- <p> {{ "Login_InvitationDeclineBody"|translate }}</p>
- <p class="hints"> {{ "Login_InvitationHints"|translate }}</p>
- <form method="post" action="?module=Login&action=declineInvitation">
- <input type="hidden" name="token" value="{{ token }}"/>
- <div class="row actions">
- <div class="col s12">
- <input class="submit btn" name="invitation_form" id="login_form_submit" type="submit" value="{{ 'Login_Yes'|translate }}"
+ {% endif %}
+ <div style="margin-top:10px" class="col s12">
+ <input class="submit btn" name="invitation_form" id="login_form_submit" type="submit" value="{{ 'Login_Accept'|translate }}"
tabindex="100"/>
</div>
</div>
</form>
- </div>
+ {% if isCustomLogo %}
+ <p id="piwik">
+ <i><a href="https://matomo.org/" rel="noreferrer noopener" target="_blank">{{ linkTitle }}</a></i>
+ </p>
+ {% endif %}
+ {% endblock %}
</div>
</div>
- {% endif %}
+ </div>
{% endblock %} \ No newline at end of file
diff --git a/plugins/Login/templates/invitationDecline.twig b/plugins/Login/templates/invitationDecline.twig
new file mode 100644
index 0000000000..0e72c6d874
--- /dev/null
+++ b/plugins/Login/templates/invitationDecline.twig
@@ -0,0 +1,23 @@
+{% extends '@Login/loginLayout.twig' %}
+
+{% block loginContent %}
+ <div class="contentForm invitationForm">
+ <div class="card">
+ <div class="card-content">
+ <div class="card-title">
+ {{ "Login_InvitationDeclineTitle"|translate }}
+ </div>
+ <p> {{ "Login_InvitationDeclineBody"|translate }}</p>
+ <p class="hints"> {{ "Login_InvitationHints"|translate }}</p>
+ <form method="post" action="?module=Login&action=declineInvitation">
+ <input type="hidden" name="token" value="{{ token }}"/>
+ <div class="row actions">
+ <div class="col s12">
+ <input class="submit btn" name="invitation_form" id="login_form_submit" type="submit" value="{{ 'General_Yes'|translate }}"
+ </div>
+ </div>
+ </form>
+ </div>
+ </div>
+ </div>
+{% endblock %} \ No newline at end of file
diff --git a/plugins/Login/templates/invitationDeclineSuccess.twig b/plugins/Login/templates/invitationDeclineSuccess.twig
new file mode 100644
index 0000000000..cf4f94dbce
--- /dev/null
+++ b/plugins/Login/templates/invitationDeclineSuccess.twig
@@ -0,0 +1,11 @@
+{% extends '@Login/loginLayout.twig' %}
+
+{% block loginContent %}
+ <div class="contentForm invitationForm">
+ <div class="card">
+ <div class="notification system notification-success">
+ <p> {{ "Login_DeclineInvitationInfo"|translate }}</p>
+ </div>
+ </div>
+ </div>
+{% endblock %} \ No newline at end of file
diff --git a/plugins/Login/templates/inviteLayout.twig b/plugins/Login/templates/inviteLayout.twig
deleted file mode 100644
index 3db4ed5be6..0000000000
--- a/plugins/Login/templates/inviteLayout.twig
+++ /dev/null
@@ -1,46 +0,0 @@
-{% extends '@Morpheus/layout.twig' %}
-
-{% block meta %}
- <meta name="robots" content="noindex,nofollow">
-{% 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" %}
-
- <div id="notificationContainer">
- </div>
- <nav>
- <div class="nav-wrapper">
- {% include "@CoreHome/_logo.twig" with { 'logoLink': 'https://matomo.org', 'centeredLogo': true, 'useLargeLogo': false } %}
- </div>
- </nav>
-
- <section class="loginSection row">
- <div class="col s12 m6 push-m3 l4 push-l4">
-
- {# untrusted host warning #}
- {% if (isValidHost is defined and invalidHostMessage is defined and isValidHost == false) %}
- {% include '@CoreHome/_warningInvalidHost.twig' %}
- {% else %}
- {% block loginContent %}
- {% endblock %}
- {% endif %}
-
- </div>
- </section>
-
-{% endblock %}
diff --git a/plugins/Login/tests/Fixtures/PendingUsers.php b/plugins/Login/tests/Fixtures/PendingUsers.php
index 4be64378ac..fea4f24000 100644
--- a/plugins/Login/tests/Fixtures/PendingUsers.php
+++ b/plugins/Login/tests/Fixtures/PendingUsers.php
@@ -1,39 +1,40 @@
<?php
+
/**
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
+
namespace Piwik\Plugins\Login\tests\Fixtures;
-use Piwik\Date;
+use Piwik\Plugins\PrivacyManager\SystemSettings;
use Piwik\Plugins\UsersManager\Model;
use Piwik\Tests\Framework\Fixture;
/**
- * Generates tracker testing data for our APITest
- *
- * This Simple fixture adds one website and tracks one visit with couple pageviews and an ecommerce conversion
+ * Simple fixture that creates a user with pending invitation
*/
class PendingUsers extends Fixture
{
-
public $dateTime = '2013-01-23 01:23:45';
public $idSite = 1;
- public $users = array();
+ public $users = [];
- public $pendingUser = array(
+ public $pendingUser = [
'login' => '000pendingUser',
'email' => 'pendinguser2light@example.com'
- );
+ ];
public $token = "13cb9dcef6cc70b02a640cee30dc8ce9";
public function setUp(): void
{
+ $this->setUpWebsite();
$this->setUpUser();
+ $this->setUpTermsAndPrivacy();
}
public function tearDown(): void
@@ -45,10 +46,23 @@ class PendingUsers extends Fixture
{
$model = new Model();
$model->addUser($this->pendingUser['login'], '', $this->pendingUser['email'], $this->dateTime, 1);
+ $model->attachInviteToken($this->pendingUser['login'], $this->token, 7);
+ }
- $model->addTokenAuth($this->pendingUser['login'], $this->token, "Invite Token",
- Date::now()->getDatetime(),
- Date::now()->addDay(7)->getDatetime());
+ private function setUpWebsite()
+ {
+ if (!self::siteCreated($this->idSite)) {
+ $idSite = self::createWebsite($this->dateTime, $ecommerce = 1);
+ $this->assertSame($this->idSite, $idSite);
+ }
+ }
+
+ private function setUpTermsAndPrivacy()
+ {
+ $settings = new SystemSettings();
+ $settings->termsAndConditionUrl->setValue('matomo.org');
+ $settings->privacyPolicyUrl->setValue('matomo.org');
+ $settings->save();
}
-} \ No newline at end of file
+}
diff --git a/plugins/Login/tests/Integration/LoginTest.php b/plugins/Login/tests/Integration/LoginTest.php
index 39f2cc3e76..533a5747d4 100644
--- a/plugins/Login/tests/Integration/LoginTest.php
+++ b/plugins/Login/tests/Integration/LoginTest.php
@@ -341,14 +341,16 @@ class LoginTest extends IntegrationTestCase
protected function _setUpUser()
{
- $user = array('login' => 'user',
- 'password' => 'geqgeagae',
- 'email' => 'test@test.com',
- 'superuser_access' => 0);
+ $user = array(
+ 'login' => 'user',
+ 'password' => 'geqgeagae',
+ 'email' => 'test@test.com',
+ 'superuser_access' => 0
+ );
API::getInstance()->addUser($user['login'], $user['password'], $user['email']);
- $model = new \Piwik\Plugins\UsersManager\Model();
+ $model = new \Piwik\Plugins\UsersManager\Model();
$tokenAuth = $model->generateRandomTokenAuth();
$model->addTokenAuth($user['login'], $tokenAuth, 'many users test', Date::now()->getDatetime());
@@ -393,7 +395,7 @@ class LoginTest extends IntegrationTestCase
public function provideContainerConfig()
{
return array(
- 'Piwik\Access' => new FakeAccess()
+ 'Piwik\Access' => new FakeAccess()
);
}
}
diff --git a/plugins/Login/tests/Integration/PasswordResetterTest.php b/plugins/Login/tests/Integration/PasswordResetterTest.php
index 250676eb49..2dbb4f24c8 100644
--- a/plugins/Login/tests/Integration/PasswordResetterTest.php
+++ b/plugins/Login/tests/Integration/PasswordResetterTest.php
@@ -11,10 +11,12 @@ namespace Piwik\Plugins\Login\tests\Integration;
use PHPMailer\PHPMailer\PHPMailer;
use Piwik\Access;
+use Piwik\API\Request;
use Piwik\Auth;
use Piwik\Container\StaticContainer;
use Piwik\Option;
use Piwik\Plugin\Manager;
+use Piwik\Plugins\UsersManager\Model;
use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
use Piwik\Plugins\Login\PasswordResetter;
use Piwik\Tests\Framework\Fixture;
@@ -159,6 +161,27 @@ class PasswordResetterTest extends IntegrationTestCase
$this->passwordResetter->checkValidConfirmPasswordToken('superUserLogin', $oldCapturedToken);
}
+ public function testPasswordResetShouldNotWorkForPendingUser()
+ {
+ self::expectException(\Exception::class);
+ self::expectExceptionMessage('Invalid username or e-mail address.');
+
+ Request::processRequest(
+ 'UsersManager.inviteUser',
+ [
+ 'userLogin' => 'pendingUser',
+ 'email' => 'pending@user.io',
+ 'idSite' => 1,
+ 'expiryInDays' => 7
+ ]
+ );
+
+ $model = new Model();
+ self::assertTrue($model->isPendingUser('pendingUser'));
+
+ $this->passwordResetter->initiatePasswordResetProcess('pendingUser', self::NEWPASSWORD);
+ }
+
/**
* @param Fixture $fixture
*/
diff --git a/plugins/Login/tests/UI/Decline_spec.js b/plugins/Login/tests/UI/Decline_spec.js
index b2b6893784..515a44a6a3 100644
--- a/plugins/Login/tests/UI/Decline_spec.js
+++ b/plugins/Login/tests/UI/Decline_spec.js
@@ -1,7 +1,7 @@
/*!
* Matomo - free/libre analytics platform
*
- * login & password reset screenshot tests.
+ * Decline invitation UI tests
*
* @link https://matomo.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
@@ -10,16 +10,22 @@
describe('Decline', function () {
this.timeout(0);
this.fixture = 'Piwik\\Plugins\\Login\\tests\\Fixtures\\PendingUsers';
+ this.optionsOverride = {
+ 'persist-fixture-data': false
+ };
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
+ it('should display decline success page', async function () {
+ await page.evaluate(function(){
+ $('#login_form_submit').click();
+ });
+ await page.waitForNetworkIdle();
+ expect(await page.screenshot({ fullPage: true })).to.matchImage('success');
+ });
+});
diff --git a/plugins/Login/tests/UI/Invite_spec.js b/plugins/Login/tests/UI/Invite_spec.js
index 7eb791b337..decb080ff0 100644
--- a/plugins/Login/tests/UI/Invite_spec.js
+++ b/plugins/Login/tests/UI/Invite_spec.js
@@ -1,7 +1,7 @@
/*!
* Matomo - free/libre analytics platform
*
- * login & password reset screenshot tests.
+ * Accept invitation UI tests
*
* @link https://matomo.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
@@ -10,11 +10,13 @@
describe('Invite', function () {
this.timeout(0);
this.fixture = 'Piwik\\Plugins\\Login\\tests\\Fixtures\\PendingUsers';
+ this.optionsOverride = {
+ 'persist-fixture-data': false
+ };
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');
@@ -33,7 +35,17 @@ describe('Invite', function () {
});
await page.waitForNetworkIdle();
expect(await page.screenshot({ fullPage: true })).to.matchImage('wrong_password');
-
});
+ it('it should login success', async function () {
+ await page.type('#password', 'abcd1234');
+ await page.type('#password_confirm', 'abcd1234');
+ await page.evaluate(function(){
+ $('#conditionCheck').prop('checked', true);
+ $('#login_form_submit').click();
+ });
+ // should show site without data page
+ await page.waitForNetworkIdle();
+ await page.waitForSelector('.site-without-data');
+ });
});
diff --git a/plugins/Login/tests/UI/expected-screenshots/Decline_success.png b/plugins/Login/tests/UI/expected-screenshots/Decline_success.png
new file mode 100644
index 0000000000..d91634486d
--- /dev/null
+++ b/plugins/Login/tests/UI/expected-screenshots/Decline_success.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:12597739bc9b44792561300233911a50fd49714fa5b1eab5a0a31bd8c796aa75
+size 14949
diff --git a/plugins/Login/tests/UI/expected-screenshots/Invite_error.png b/plugins/Login/tests/UI/expected-screenshots/Invite_error.png
index 311289f3c7..e9775cca1e 100644
--- a/plugins/Login/tests/UI/expected-screenshots/Invite_error.png
+++ b/plugins/Login/tests/UI/expected-screenshots/Invite_error.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:35af886df3b8305375a45659de2f14af79fec9903a81642e18e193853ed52f28
-size 40378
+oid sha256:6510477474c2b1bd247bb61dedb0b5d381306e1f647772628a712b1ef5361dd3
+size 40268
diff --git a/plugins/Login/tests/UI/expected-screenshots/Invite_set_password.png b/plugins/Login/tests/UI/expected-screenshots/Invite_set_password.png
index fe50344e56..176fca17e5 100644
--- a/plugins/Login/tests/UI/expected-screenshots/Invite_set_password.png
+++ b/plugins/Login/tests/UI/expected-screenshots/Invite_set_password.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:fab1147e5e81c984bb699b6ba3e50800c868c24498d0a6e5e2a5e21a643e534b
-size 27319
+oid sha256:d122b81316ea1fa05ab961018d6b54c9ff2f9a7cf95e84c6b61f3678e9a19269
+size 33451
diff --git a/plugins/Login/tests/UI/expected-screenshots/Invite_wrong_password.png b/plugins/Login/tests/UI/expected-screenshots/Invite_wrong_password.png
index 84f56b0b3c..28e39320c9 100644
--- a/plugins/Login/tests/UI/expected-screenshots/Invite_wrong_password.png
+++ b/plugins/Login/tests/UI/expected-screenshots/Invite_wrong_password.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:e52c0b45c5834cab0cb921a6d07cda995f0cfce71c2540832a977e7d01b84e75
-size 32893
+oid sha256:d403a09c50ed20fb25140481c0b0552309df36ab6a00e19681c4c948a1aa539d
+size 39564
diff --git a/plugins/SegmentEditor/SegmentEditor.php b/plugins/SegmentEditor/SegmentEditor.php
index bd4e542a1e..9f2943f880 100644
--- a/plugins/SegmentEditor/SegmentEditor.php
+++ b/plugins/SegmentEditor/SegmentEditor.php
@@ -8,6 +8,7 @@
*/
namespace Piwik\Plugins\SegmentEditor;
+use Piwik\Access;
use Piwik\API\Request;
use Piwik\ArchiveProcessor\PluginsArchiver;
use Piwik\ArchiveProcessor\Rules;
@@ -177,7 +178,7 @@ class SegmentEditor extends \Piwik\Plugin
return;
}
- list($segment, $storedSegment, $isSegmentToPreprocess) = $segmentInfo;
+ [$segment, $storedSegment, $isSegmentToPreprocess] = $segmentInfo;
throw new UnprocessedSegmentException($segment, $isSegmentToPreprocess, $storedSegment);
}
@@ -194,7 +195,7 @@ class SegmentEditor extends \Piwik\Plugin
return;
}
- list($segment, $storedSegment, $isSegmentToPreprocess, $canBeArchived) = $segmentInfo;
+ [$segment, $storedSegment, $isSegmentToPreprocess, $canBeArchived] = $segmentInfo;
if (!$isSegmentToPreprocess) {
return; // do not display the notification for custom segments
@@ -389,30 +390,33 @@ class SegmentEditor extends \Piwik\Plugin
public function transferAllUserSegmentsToSuperUser($userLogin)
{
- $model = new Model();
- $updatedAt = Date::factory('now')->toString('Y-m-d H:i:s');
-
- $superUsers = UsersManagerApi::getInstance()->getUsersHavingSuperUserAccess();
- $superUserLogin = false;
-
- foreach ($superUsers as $superUser) {
- if ($superUser['login'] !== $userLogin) {
- $superUserLogin = $superUser['login'];
- break;
+ // We need to do that as super user, as the event triggering this method might be initiated without a session
+ Access::doAsSuperUser(function () use ($userLogin) {
+ $model = new Model();
+ $updatedAt = Date::factory('now')->toString('Y-m-d H:i:s');
+
+ $superUsers = UsersManagerApi::getInstance()->getUsersHavingSuperUserAccess();
+ $superUserLogin = false;
+
+ foreach ($superUsers as $superUser) {
+ if ($superUser['login'] !== $userLogin) {
+ $superUserLogin = $superUser['login'];
+ break;
+ }
}
- }
- if (!$superUserLogin) {
- return;
- }
+ if (!$superUserLogin) {
+ return;
+ }
- foreach ($model->getAllSegments($userLogin) as $segment) {
- if ($segment['login'] === $userLogin) {
- $model->updateSegment($segment['idsegment'], array(
- 'login' => $superUserLogin,
- 'ts_last_edit' => $updatedAt
- ));
+ foreach ($model->getAllSegments($userLogin) as $segment) {
+ if ($segment['login'] === $userLogin) {
+ $model->updateSegment($segment['idsegment'], array(
+ 'login' => $superUserLogin,
+ 'ts_last_edit' => $updatedAt
+ ));
+ }
}
- }
+ });
}
}
diff --git a/plugins/TwoFactorAuth/tests/UI/expected-screenshots/TwoFactorAuthUsersManager_list.png b/plugins/TwoFactorAuth/tests/UI/expected-screenshots/TwoFactorAuthUsersManager_list.png
index 025e7e1437..7128f385c5 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:0b07a1448c7586d161c9ccd437aadeaae0e66278352bac861021f17aba1ec6f1
-size 68073
+oid sha256:7fe4087329a42c48ddf155880189062878b14923e3bd2540d0adc71c4945c42c
+size 68829
diff --git a/plugins/UsersManager/API.php b/plugins/UsersManager/API.php
index 6eb5e6b9b7..9accb8f35c 100644
--- a/plugins/UsersManager/API.php
+++ b/plugins/UsersManager/API.php
@@ -1,4 +1,5 @@
<?php
+
/**
* Matomo - free/libre analytics platform
*
@@ -6,6 +7,7 @@
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*
*/
+
namespace Piwik\Plugins\UsersManager;
use DeviceDetector\DeviceDetector;
@@ -25,10 +27,10 @@ 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\Plugins\UsersManager\Validators\Email;
use Piwik\Site;
use Piwik\Tracker\Cache;
use Piwik\Validators\BaseValidator;
-use Piwik\Validators\Email;
/**
* The UsersManager API lets you Manage Users and their permissions to access specific websites.
@@ -94,13 +96,13 @@ class API extends \Piwik\Plugin\API
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
+ 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;
@@ -131,7 +133,6 @@ class API extends \Piwik\Plugin\API
throw new Exception('UsersManager_API must inherit API');
}
self::$instance = $instance;
-
} catch (Exception $e) {
self::$instance = StaticContainer::get('Piwik\Plugins\UsersManager\API');
StaticContainer::getContainer()->set('UsersManager_API', self::$instance);
@@ -149,15 +150,15 @@ class API extends \Piwik\Plugin\API
{
Piwik::checkUserHasSomeAdminAccess();
- $response = array();
+ $response = [];
foreach ($this->roleProvider->getAllRoles() as $role) {
- $response[] = array(
+ $response[] = [
'id' => $role->getId(),
'name' => $role->getName(),
'description' => $role->getDescription(),
'helpUrl' => $role->getHelpUrl(),
- );
+ ];
}
return $response;
@@ -171,17 +172,17 @@ class API extends \Piwik\Plugin\API
{
Piwik::checkUserHasSomeAdminAccess();
- $response = array();
+ $response = [];
foreach ($this->capabilityProvider->getAllCapabilities() as $capability) {
- $response[] = array(
+ $response[] = [
'id' => $capability->getId(),
'name' => $capability->getName(),
'description' => $capability->getDescription(),
'helpUrl' => $capability->getHelpUrl(),
'includedInRoles' => $capability->getIncludedInRoles(),
'category' => $capability->getCategory(),
- );
+ ];
}
return $response;
@@ -272,7 +273,7 @@ class API extends \Piwik\Plugin\API
{
Piwik::checkUserHasSuperUserAccess();
- $userPreferences = array();
+ $userPreferences = [];
foreach ($preferenceNames as $preferenceName) {
$optionNameMatchAllUsers = $this->getPreferenceId('%', $preferenceName);
$preferences = Option::getLike($optionNameMatchAllUsers);
@@ -292,16 +293,18 @@ class API extends \Piwik\Plugin\API
if (false !== strpos($preference, self::OPTION_NAME_PREFERENCE_SEPARATOR)) {
throw new Exception("Preference name cannot contain underscores.");
}
- $names = array(
+ $names = [
self::PREFERENCE_DEFAULT_REPORT,
self::PREFERENCE_DEFAULT_REPORT_DATE,
'isLDAPUser', // used in loginldap
'hideSegmentDefinitionChangeMessage',// used in JS
- );
+ ];
$customPreferences = StaticContainer::get('usersmanager.user_preference_names');
- if (!in_array($preference, $names, true)
- && !in_array($preference, $customPreferences, true)) {
+ if (
+ !in_array($preference, $names, true)
+ && !in_array($preference, $customPreferences, true)
+ ) {
throw new Exception('Not supported preference name: ' . $preference);
}
return $login . self::OPTION_NAME_PREFERENCE_SEPARATOR . $preference;
@@ -339,7 +342,7 @@ class API extends \Piwik\Plugin\API
* Filtering by 'superuser' is only allowed for other superusers.
* @return array
*/
- public function getUsersPlusRole($idSite, $limit = null, $offset = 0, $filter_search = null, $filter_access = null)
+ public function getUsersPlusRole($idSite, $limit = null, $offset = 0, $filter_search = null, $filter_access = null, $filter_status = null)
{
if (!$this->isUserHasAdminAccessTo($idSite)) {
// if the user is not an admin to $idSite, they can only see their own user
@@ -371,10 +374,16 @@ class API extends \Piwik\Plugin\API
// access is managed by another plugin, and the current user cannot manage any user with UsersManager
Common::sendHeader('X-Matomo-Total-Results: 0');
return [];
-
} else {
- [$users, $totalResults] = $this->model->getUsersWithRole($idSite, $limit, $offset, $filter_search,
- $filter_access, $loginsToLimit);
+ [$users, $totalResults] = $this->model->getUsersWithRole(
+ $idSite,
+ $limit,
+ $offset,
+ $filter_search,
+ $filter_access,
+ $filter_status,
+ $loginsToLimit
+ );
foreach ($users as &$user) {
$user['superuser_access'] = $user['superuser_access'] == 1;
@@ -419,7 +428,7 @@ class API extends \Piwik\Plugin\API
throw new \Exception('Parameter userLogins needs to be a string containing a comma separated list of users');
}
- $logins = array();
+ $logins = [];
if (!empty($userLogins)) {
$logins = explode(',', $userLogins);
@@ -428,7 +437,6 @@ class API extends \Piwik\Plugin\API
$users = $this->model->getUsers($logins);
$users = $this->userFilter->filterUsers($users);
return $this->userRepository->enrichUsers($users);
-
}
/**
@@ -484,8 +492,10 @@ class API extends \Piwik\Plugin\API
foreach ($access as $entry) {
if (!$this->isValidAccessType($entry)) {
- throw new Exception(Piwik::translate("UsersManager_ExceptionAccessValues",
- [implode(", ", $this->getAllRolesAndCapabilities()), $entry]));
+ throw new Exception(Piwik::translate(
+ "UsersManager_ExceptionAccessValues",
+ [implode(", ", $this->getAllRolesAndCapabilities()), $entry]
+ ));
}
}
}
@@ -541,7 +551,7 @@ class API extends \Piwik\Plugin\API
$logins = $this->model->getUsersLoginWithSiteAccess($idSite, $access);
if (empty($logins)) {
- return array();
+ return [];
}
$logins = $this->userFilter->filterLogins($logins);
@@ -572,14 +582,14 @@ class API extends \Piwik\Plugin\API
$this->checkUserExists($userLogin);
// Super users have 'admin' access for every site
if (Piwik::hasTheUserSuperUserAccess($userLogin)) {
- $return = array();
+ $return = [];
$siteManagerModel = new \Piwik\Plugins\SitesManager\Model();
$sites = $siteManagerModel->getAllSites();
foreach ($sites as $site) {
- $return[] = array(
+ $return[] = [
'site' => $site['idsite'],
'access' => 'admin'
- );
+ ];
}
return $return;
}
@@ -607,11 +617,11 @@ class API extends \Piwik\Plugin\API
* @throws Exception
*/
public function getSitesAccessForUser(
- $userLogin,
- $limit = null,
- $offset = 0,
- $filter_search = null,
- $filter_access = null
+ $userLogin,
+ $limit = null,
+ $offset = 0,
+ $filter_search = null,
+ $filter_access = null
) {
Piwik::checkUserHasSomeAdminAccess();
$this->checkUserExists($userLogin);
@@ -628,8 +638,14 @@ class API extends \Piwik\Plugin\API
}
}
- [$sites, $totalResults] = $this->model->getSitesAccessFromUserWithFilters($userLogin, $limit, $offset,
- $filter_search, $filter_access, $idSites);
+ [$sites, $totalResults] = $this->model->getSitesAccessFromUserWithFilters(
+ $userLogin,
+ $limit,
+ $offset,
+ $filter_search,
+ $filter_access,
+ $idSites
+ );
foreach ($sites as &$siteAccess) {
[
$siteAccess['role'],
@@ -662,9 +678,12 @@ class API extends \Piwik\Plugin\API
$user = $this->model->getUser($userLogin);
+ if (empty($user) || !is_array($user)) {
+ return [];
+ }
+
$user = $this->userFilter->filterUser($user);
return $this->userRepository->enrichUser($user);
-
}
/**
@@ -681,6 +700,10 @@ class API extends \Piwik\Plugin\API
$user = $this->model->getUserByEmail($userEmail);
+ if (empty($user) || !is_array($user)) {
+ return [];
+ }
+
$user = $this->userFilter->filterUser($user);
return $this->userRepository->enrichUser($user);
}
@@ -701,24 +724,54 @@ class API extends \Piwik\Plugin\API
*/
public function addUser($userLogin, $password, $email, $_isPasswordHashed = false, $initialIdSite = null)
{
+ Piwik::checkUserHasSomeAdminAccess();
+ UsersManager::dieIfUsersAdminIsDisabled();
+
$password = Common::unsanitizeInputValue($password);
UsersManager::checkPassword($password);
- //create User
- $this->userRepository->create($userLogin, $email, $initialIdSite, $password, $_isPasswordHashed);
+ $initialIdSite = $initialIdSite === null ? null : intval($initialIdSite);
+
+ $this->userRepository->create(
+ (string) $userLogin,
+ (string) $email,
+ $initialIdSite,
+ (string) $password,
+ (bool) $_isPasswordHashed
+ );
- // send admin Email
- $this->userRepository->sendNewUserEmails($userLogin, null);
+ /**
+ * Triggered after a new user is created.
+ *
+ * @param string $userLogin The new user's login.
+ * @param string $email The new user's e-mail.
+ * @param string $inviterLogin The login of the user who created the new user
+ */
+ Piwik::postEvent('UsersManager.addUser.end', [$userLogin, $email, Piwik::getCurrentUserLogin()]);
}
-
- public function inviteUser($userLogin, $email, $initialIdSite = null, $expired = 7)
+ /**
+ * @throws Exception
+ */
+ public function inviteUser($userLogin, $email, $idSite = null, $expiryInDays = null)
{
- //create User
- $this->userRepository->create($userLogin, $email, $initialIdSite);
+ Piwik::checkUserHasSomeAdminAccess();
+ UsersManager::dieIfUsersAdminIsDisabled();
+
+ if (empty($expiryInDays)) {
+ $expiryInDays = Config\GeneralConfig::getConfigValue('default_invite_user_token_expiry_days');
+ }
- // send invited user an email
- $this->userRepository->sendNewUserEmails($userLogin, $expired);
+ $idSite = $idSite === null ? null : intval($idSite);
+ $this->userRepository->inviteUser((string) $userLogin, (string) $email, $idSite, (int) $expiryInDays);
+
+ /**
+ * Triggered after a new user was invited.
+ *
+ * @param string $userLogin The new user's login.
+ * @param string $email The new user's e-mail.
+ */
+ Piwik::postEvent('UsersManager.inviteUser.end', [$userLogin, $email]);
}
/**
@@ -742,8 +795,9 @@ class API extends \Piwik\Plugin\API
self::$SET_SUPERUSER_ACCESS_REQUIRE_PASSWORD_CONFIRMATION = true;
$isCliMode = Common::isPhpCliMode() && !(defined('PIWIK_TEST_MODE') && PIWIK_TEST_MODE);
- if (!$isCliMode
- && $requirePasswordConfirmation
+ if (
+ !$isCliMode
+ && $requirePasswordConfirmation
) {
$this->confirmCurrentUserPassword($passwordConfirmation);
}
@@ -799,11 +853,11 @@ class API extends \Piwik\Plugin\API
* @see addUser() for all the parameters
*/
public function updateUser(
- $userLogin,
- $password = false,
- $email = false,
- $_isPasswordHashed = false,
- $passwordConfirmation = false
+ $userLogin,
+ $password = false,
+ $email = false,
+ $_isPasswordHashed = false,
+ $passwordConfirmation = false
) {
$requirePasswordConfirmation = self::$UPDATE_USER_REQUIRE_PASSWORD_CONFIRMATION;
self::$UPDATE_USER_REQUIRE_PASSWORD_CONFIRMATION = true;
@@ -848,7 +902,7 @@ class API extends \Piwik\Plugin\API
$hasEmailChanged = mb_strtolower($email) !== mb_strtolower($userInfo['email']);
if ($hasEmailChanged) {
- BaseValidator::check('email', $email, [new Email(true)]);
+ BaseValidator::check('email', $email, [new Email(true, $userLogin)]);
$changeShouldRequirePasswordConfirmation = true;
}
@@ -875,7 +929,7 @@ class API extends \Piwik\Plugin\API
* @param string $userLogin The user's login handle.
* @param boolean $passwordHasBeenUpdated Flag containing information about password change.
*/
- Piwik::postEvent('UsersManager.updateUser.end', array($userLogin, $passwordHasBeenUpdated, $email, $password));
+ Piwik::postEvent('UsersManager.updateUser.end', [$userLogin, $passwordHasBeenUpdated, $email, $password]);
}
/**
@@ -889,10 +943,19 @@ class API extends \Piwik\Plugin\API
*/
public function deleteUser($userLogin)
{
- Piwik::checkUserHasSuperUserAccess();
+ Piwik::checkUserHasSomeAdminAccess();
UsersManager::dieIfUsersAdminIsDisabled();
$this->checkUserIsNotAnonymous($userLogin);
+ $user = $this->model->getUser($userLogin);
+
+ // If user is not a super user check if the user was invited by the current user
+ if (!Piwik::hasUserSuperUserAccess()) {
+ if ($user['invited_by'] !== Piwik::getCurrentUserLogin() || !$this->model->isPendingUser($userLogin)) {
+ throw new NoAccessException(Piwik::translate('UsersManager_ExceptionUserDoesNotExist', $userLogin));
+ }
+ }
+
$this->checkUserExist($userLogin);
if ($this->isUserTheOnlyUserHavingSuperUserAccess($userLogin)) {
@@ -902,16 +965,14 @@ class API extends \Piwik\Plugin\API
throw new Exception($message);
}
- $this->model->deleteUserOnly($userLogin);
- $this->model->deleteUserOptions($userLogin);
- $this->model->deleteUserAccess($userLogin);
+ $this->model->deleteUser($userLogin);
$container = StaticContainer::getContainer();
- $email = $container->make(UserDeletedEmail::class, array(
+ $email = $container->make(UserDeletedEmail::class, [
'login' => Piwik::getCurrentUserLogin(),
'emailAddress' => Piwik::getCurrentUserEmail(),
'userLogin' => $userLogin
- ));
+ ]);
$email->safeSend();
Cache::deleteTrackerCache();
@@ -999,15 +1060,18 @@ class API extends \Piwik\Plugin\API
$idSites = $this->getIdSitesCheckAdminAccess($idSites);
- if ($userLogin === 'anonymous' &&
- (is_array($access) || !in_array($access, array('view', 'noaccess'), true))
+ if (
+ $userLogin === 'anonymous' &&
+ (is_array($access) || !in_array($access, ['view', 'noaccess'], true))
) {
- throw new Exception(Piwik::translate("UsersManager_ExceptionAnonymousAccessNotPossible",
- array('noaccess', 'view')));
+ throw new Exception(Piwik::translate(
+ "UsersManager_ExceptionAnonymousAccessNotPossible",
+ ['noaccess', 'view']
+ ));
}
- $roles = array();
- $capabilities = array();
+ $roles = [];
+ $capabilities = [];
if (is_array($access)) {
// we require one role, and optionally multiple capabilities
@@ -1022,7 +1086,6 @@ class API extends \Piwik\Plugin\API
$ids = implode(', ', $this->roleProvider->getAllRoleIds());
throw new Exception(Piwik::translate('UsersManager_ExceptionMultipleRoleSet', $ids));
}
-
} else {
// as only one access is set, we require it to be a role or "noaccess"...
if ($access !== 'noaccess') {
@@ -1039,7 +1102,7 @@ class API extends \Piwik\Plugin\API
if ($access === 'noaccess') {
// if the access is noaccess then we don't save it as this is the default value
// when no access are specified
- Piwik::postEvent('UsersManager.removeSiteAccess', array($userLogin, $idSites));
+ Piwik::postEvent('UsersManager.removeSiteAccess', [$userLogin, $idSites]);
} else {
$role = array_shift($roles);
$this->model->addUserAccess($userLogin, $role, $idSites);
@@ -1077,7 +1140,7 @@ class API extends \Piwik\Plugin\API
$this->checkUsersHasNotSuperUserAccess([$userLogin]);
if (!is_array($capabilities)) {
- $capabilities = array($capabilities);
+ $capabilities = [$capabilities];
}
foreach ($capabilities as $entry) {
@@ -1091,8 +1154,11 @@ class API extends \Piwik\Plugin\API
foreach ($idSites as $idSite) {
$hasRole = array_key_exists($idSite, $sitesIdWithRole);
- $hasCapabilityAlready = array_key_exists($idSite, $sitesIdWithCapability) && in_array($entry,
- $sitesIdWithCapability[$idSite], true);
+ $hasCapabilityAlready = array_key_exists($idSite, $sitesIdWithCapability) && in_array(
+ $entry,
+ $sitesIdWithCapability[$idSite],
+ true
+ );
// so far we are adding the capability only to people that also have a role...
// to be defined how to handle this... eg we are not throwing an exception currently
@@ -1105,10 +1171,9 @@ class API extends \Piwik\Plugin\API
continue;
}
- $this->model->addUserAccess($userLogin, $entry, array($idSite));
+ $this->model->addUserAccess($userLogin, $entry, [$idSite]);
}
}
-
}
// we reload the access list which doesn't yet take in consideration this new user access
@@ -1120,14 +1185,14 @@ class API extends \Piwik\Plugin\API
$sites = $this->model->getSitesAccessFromUser($userLogin);
$roleIds = $this->roleProvider->getAllRoleIds();
- $sitesIdWithRole = array();
- $sitesIdWithCapability = array();
+ $sitesIdWithRole = [];
+ $sitesIdWithCapability = [];
foreach ($sites as $site) {
if (in_array($site['access'], $roleIds, true)) {
$sitesIdWithRole[(int)$site['site']] = $site['access'];
} else {
if (!isset($sitesIdWithCapability[(int)$site['site']])) {
- $sitesIdWithCapability[(int)$site['site']] = array();
+ $sitesIdWithCapability[(int)$site['site']] = [];
}
$sitesIdWithCapability[(int)$site['site']][] = $site['access'];
}
@@ -1153,7 +1218,7 @@ class API extends \Piwik\Plugin\API
$this->checkUserExists($userLogin);
if (!is_array($capabilities)) {
- $capabilities = array($capabilities);
+ $capabilities = [$capabilities];
}
foreach ($capabilities as $capability) {
@@ -1176,11 +1241,11 @@ class API extends \Piwik\Plugin\API
private function getIdSitesCheckAdminAccess($idSites)
{
- // in case idSites is all we grant access to all the websites on which the current connected user has an 'admin' access
if ($idSites === 'all') {
+ // in case idSites is all we grant access to all the websites on which the current connected user has an 'admin' access
$idSites = \Piwik\Plugins\SitesManager\API::getInstance()->getSitesIdWithAdminAccess();
- } // in case the idSites is an integer we build an array
- else {
+ } else {
+ // in case the idSites is an integer we build an array
$idSites = Site::getIdSitesFromIdSitesString($idSites);
}
@@ -1193,7 +1258,7 @@ class API extends \Piwik\Plugin\API
Piwik::checkUserHasAdminAccess($idSites);
if (!is_array($idSites)) {
- $idSites = array($idSites);
+ $idSites = [$idSites];
}
return $idSites;
@@ -1282,11 +1347,11 @@ class API extends \Piwik\Plugin\API
* @return string
*/
public function createAppSpecificTokenAuth(
- $userLogin,
- $passwordConfirmation,
- $description,
- $expireDate = null,
- $expireHours = 0
+ $userLogin,
+ $passwordConfirmation,
+ $description,
+ $expireDate = null,
+ $expireHours = 0
) {
$user = $this->model->getUser($userLogin);
if (empty($user) && Piwik::isValidEmailString($userLogin)) {
@@ -1303,7 +1368,7 @@ class API extends \Piwik\Plugin\API
* @ignore
* @internal
*/
- Piwik::postEvent('Login.authenticate.failed', array($userLogin));
+ Piwik::postEvent('Login.authenticate.failed', [$userLogin]);
}
throw new \Exception(Piwik::translate('UsersManager_CurrentPasswordNotCorrect'));
@@ -1329,7 +1394,7 @@ class API extends \Piwik\Plugin\API
$email = Piwik::getCurrentUserEmail();
$success = NewsletterSignup::signupForNewsletter($userLogin, $email, true);
- $result = $success ? array('success' => true) : array('error' => true);
+ $result = $success ? ['success' => true] : ['error' => true];
return $result;
}
@@ -1363,10 +1428,8 @@ class API extends \Piwik\Plugin\API
if ($this->roleProvider->isValidRole($entry)) {
$roles[] = $entry;
- } else {
- if ($this->isValidAccessType($entry)) {
- $capabilities[] = $entry;
- }
+ } elseif ($this->isValidAccessType($entry)) {
+ $capabilities[] = $entry;
}
}
return [$roles, $capabilities];
@@ -1390,8 +1453,13 @@ class API extends \Piwik\Plugin\API
{
// send the mail to both the old email and the new email
foreach ([$newEmail, $user['email']] as $emailTo) {
- $this->sendUserInfoChangedEmail('email', $user, $newEmail, $emailTo,
- 'UsersManager_EmailChangeNotificationSubject');
+ $this->sendUserInfoChangedEmail(
+ 'email',
+ $user,
+ $newEmail,
+ $emailTo,
+ 'UsersManager_EmailChangeNotificationSubject'
+ );
}
}
@@ -1409,8 +1477,13 @@ class API extends \Piwik\Plugin\API
private function sendPasswordChangedEmail($user)
{
- $this->sendUserInfoChangedEmail('password', $user, null, $user['email'],
- 'UsersManager_PasswordChangeNotificationSubject');
+ $this->sendUserInfoChangedEmail(
+ 'password',
+ $user,
+ null,
+ $user['email'],
+ 'UsersManager_PasswordChangeNotificationSubject'
+ );
}
private function getDeviceDescription()
@@ -1429,9 +1502,7 @@ class API extends \Piwik\Plugin\API
$deviceBrand = $uaParser->getBrandName();
$deviceModel = $uaParser->getModel();
- if (!empty($deviceBrand)
- || !empty($deviceModel)
- ) {
+ if (!empty($deviceBrand) || !empty($deviceModel)) {
$parts = array_filter([$deviceBrand, $deviceModel]);
$description .= ' (' . implode(' ', $parts) . ')';
}
@@ -1441,26 +1512,35 @@ class API extends \Piwik\Plugin\API
/**
* resend the invite email to user
- * @param $userLogin
+ *
+ * @param string $userLogin
+ * @param int $expiryInDays
* @throws NoAccessException
- * @throws \DI\DependencyException
- * @throws \DI\NotFoundException
*/
- public function resendInvite($userLogin, $expired = 7)
+ public function resendInvite($userLogin, $expiryInDays = 7)
{
- Piwik::checkUserIsNotAnonymous();
- Piwik::checkUserHasSuperUserAccess();
-
- $this->checkUserIsNotAnonymous($userLogin);
+ Piwik::checkUserHasSomeAdminAccess();
- if (!$this->model->getPendingUser($userLogin)) {
- throw new Exception(Piwik::translate("UsersManager_ExceptionUserDoesNotExist", $userLogin));
+ if (!$this->model->isPendingUser($userLogin)) {
+ throw new Exception(Piwik::translate('UsersManager_ExceptionUserDoesNotExist', $userLogin));
}
- $this->model->updateUserFields($userLogin, ['invite_status' => 'pending']);
- $this->userRepository->sendNewUserEmails($userLogin, $expired, false);
- Cache::deleteTrackerCache();
- }
+ $user = $this->model->getUser($userLogin);
+
+ // If user is not a super user check if the user was invited by the current user
+ if (!Piwik::hasUserSuperUserAccess()) {
+ if ($user['invited_by'] !== Piwik::getCurrentUserLogin()) {
+ throw new NoAccessException(Piwik::translate('UsersManager_ExceptionResendInviteDenied', $userLogin));
+ }
+ }
+ $this->userRepository->reInviteUser($userLogin, (int)$expiryInDays);
+ /**
+ * Triggered after a new user was invited.
+ *
+ * @param string $userLogin The new user's login.
+ */
+ Piwik::postEvent('UsersManager.inviteUser.resendInvite', [$userLogin, $user['email']]);
+ }
}
diff --git a/plugins/UsersManager/Controller.php b/plugins/UsersManager/Controller.php
index 559ffd4324..b5bad81dcd 100644
--- a/plugins/UsersManager/Controller.php
+++ b/plugins/UsersManager/Controller.php
@@ -110,6 +110,13 @@ class Controller extends ControllerAdmin
['key' => 'superuser', 'value' => Piwik::translate('Installation_SuperUser')],
];
+ $view->statusAccessLevels = [
+ ['key' => '', 'value' => ''], // show all
+ ['key' => 'pending', 'value' => Piwik::translate('UsersManager_Pending')],
+ ['key' => 'active', 'value' => Piwik::translate('UsersManager_Active')],
+ ['key' => 'expired', 'value' => Piwik::translate('UsersManager_Expired')],
+ ];
+
$capabilities = Request::processRequest('UsersManager.getAvailableCapabilities', [], []);
foreach ($capabilities as $capability) {
$capabilityEntry = [
diff --git a/plugins/UsersManager/Emails/UserInviteEmail.php b/plugins/UsersManager/Emails/UserInviteEmail.php
index bfe43771bc..62d6daca72 100644
--- a/plugins/UsersManager/Emails/UserInviteEmail.php
+++ b/plugins/UsersManager/Emails/UserInviteEmail.php
@@ -1,4 +1,5 @@
<?php
+
/**
* Matomo - free/libre analytics platform
*
@@ -23,25 +24,34 @@ class UserInviteEmail extends Mail
/**
* @var object
*/
- private $user;
+ private $invitedUser;
/**
* @var string
*/
private $token;
+ /**
+ * @var int
+ */
+ private $expiryInDays;
+
+ private $siteName;
/**
* @param string $currentUser
- * @param array $user
- * @param string $idSite
+ * @param array $invitedUser
+ * @param string $siteName
* @param string $token
+ * @param int $expiryInDays
*/
- public function __construct($currentUser, $user, $token)
+ public function __construct($currentUser, $invitedUser, $siteName, $token, $expiryInDays)
{
parent::__construct();
- $this->currentUser = $currentUser;
- $this->user = $user;
- $this->token = $token;
+ $this->currentUser = $currentUser;
+ $this->invitedUser = $invitedUser;
+ $this->token = $token;
+ $this->expiryInDays = $expiryInDays;
+ $this->siteName = $siteName;
$this->setUpEmail();
}
@@ -49,7 +59,7 @@ class UserInviteEmail extends Mail
private function setUpEmail()
{
$this->setDefaultFromPiwik();
- $this->addTo($this->user['email']);
+ $this->addTo($this->invitedUser['email']);
$this->setSubject($this->getDefaultSubject());
$this->addReplyTo($this->getFrom(), $this->getFromName());
$this->setWrappedHtmlBody($this->getDefaultBodyView());
@@ -57,28 +67,32 @@ class UserInviteEmail extends Mail
protected function getDefaultSubject()
{
- return Piwik::translate('CoreAdminHome_UserInviteSubject',
- [$this->currentUser, $this->user['login']]);
+ return Piwik::translate(
+ 'CoreAdminHome_UserInviteSubject',
+ [$this->currentUser, $this->siteName]
+ );
}
private function getDefaultSubjectWithStyle()
{
- return Piwik::translate('CoreAdminHome_UserInviteSubject',
- ["<strong>" . $this->currentUser . "</strong>", "<strong>" . $this->user['login'] . "</strong>"]);
+ return Piwik::translate(
+ 'CoreAdminHome_UserInviteSubject',
+ ['<strong>' . $this->currentUser . '</strong>', '<strong>' . $this->siteName . '</strong>']
+ );
}
protected function getDefaultBodyView()
{
$view = new View('@UsersManager/_userInviteEmail.twig');
- $view->login = $this->user['login'];
- $view->emailAddress = $this->user['email'];
+ $view->login = $this->invitedUser['login'];
+ $view->emailAddress = $this->invitedUser['email'];
$view->token = $this->token;
// content line for email body
$view->content = $this->getDefaultSubjectWithStyle();
//notes for email footer
- $view->notes = Piwik::translate('CoreAdminHome_UserInviteNotes', [$this->user['login'], $this->currentUser]);
+ $view->notes = Piwik::translate('CoreAdminHome_UserInviteNotes', [$this->currentUser, $this->expiryInDays]);
return $view;
}
} \ No newline at end of file
diff --git a/plugins/UsersManager/Model.php b/plugins/UsersManager/Model.php
index 362491760e..873dbb12fa 100644
--- a/plugins/UsersManager/Model.php
+++ b/plugins/UsersManager/Model.php
@@ -264,6 +264,25 @@ class Model
return hash(self::TOKEN_HASH_ALGO, $tokenAuth . $salt);
}
+ public function generateRandomInviteToken()
+ {
+ $count = 0;
+
+ do {
+ $token = $this->generateTokenAuth();
+
+ $count++;
+ if ($count > 20) {
+ // something seems wrong as the odds of that happening is basically 0. Only catching it to prevent
+ // endless loop in case there is some bug somewhere
+ throw new \Exception('Failed to generate token');
+ }
+
+ } while ($this->getUserByInviteToken($token));
+
+ return $token;
+ }
+
public function generateRandomTokenAuth()
{
$count = 0;
@@ -369,6 +388,14 @@ class Model
$expiredSince);
}
+ public function getExpiredInvites($expiredSince)
+ {
+ $db = $this->getDb();
+
+ return $db->fetchAll("SELECT * FROM " . $this->userTable . " WHERE `invite_expired_at` is not null and invite_expired_at < ?",
+ $expiredSince);
+ }
+
public function checkUserHasUnexpiredToken($login)
{
$db = $this->getDb();
@@ -378,7 +405,6 @@ class Model
$bind);
}
-
public function deleteAllTokensForUser($login)
{
$db = $this->getDb();
@@ -465,6 +491,16 @@ class Model
return $db->fetchRow("SELECT * FROM " . $this->userTable . " WHERE email = ?", $userEmail);
}
+
+ public function getUserByInviteToken($tokenAuth)
+ {
+ $token = $this->hashTokenAuth($tokenAuth);
+ if (!empty($token)) {
+ $db = $this->getDb();
+ return $db->fetchRow("SELECT * FROM " . $this->userTable . " WHERE `invite_token` = ?", $token);
+ }
+ }
+
public function getUserByTokenAuth($tokenAuth)
{
if ($tokenAuth === 'anonymous') {
@@ -478,7 +514,13 @@ class Model
}
}
- public function addUser($userLogin, $hashedPassword, $email, $dateRegistered, $inviteStatus = null)
+ /**
+ * @param $userLogin
+ * @param $hashedPassword
+ * @param $email
+ * @param $dateRegistered
+ */
+ public function addUser($userLogin, $hashedPassword, $email, $dateRegistered)
{
$user = array(
'login' => $userLogin,
@@ -487,17 +529,20 @@ class Model
'date_registered' => $dateRegistered,
'superuser_access' => 0,
'ts_password_modified' => Date::now()->getDatetime(),
- 'idchange_last_viewed' => null
+ 'idchange_last_viewed' => null,
+ 'invited_by' => null,
);
-
- if ($inviteStatus) {
- $user['invite_status'] = 'pending';
- }
-
$db = $this->getDb();
$db->insert($this->userTable, $user);
- return $user;
+ }
+
+ public function attachInviteToken($userLogin, $token, $expiryInDays = 7)
+ {
+ $this->updateUserFields($userLogin, [
+ 'invite_token' => $this->hashTokenAuth($token),
+ 'invite_expired_at' => Date::now()->addDay($expiryInDays)->getDatetime()
+ ]);
}
public function setSuperUserAccess($userLogin, $hasSuperUserAccess)
@@ -593,6 +638,13 @@ class Model
}
}
+ public function deleteUser($userLogin): void
+ {
+ $this->deleteUserOnly($userLogin);
+ $this->deleteUserOptions($userLogin);
+ $this->deleteUserAccess($userLogin);
+ }
+
/**
* @param string $userLogin
*/
@@ -640,23 +692,6 @@ class Model
return Db::get();
}
- public function getUserLoginsMatching($idSite = null, $pattern = null, $access = null, $logins = null)
- {
- $filter = new UserTableFilter($access, $idSite, $pattern, $logins);
-
- list($joins, $bind) = $filter->getJoins('u');
- list($where, $whereBind) = $filter->getWhere();
-
- $bind = array_merge($bind, $whereBind);
-
- $sql = 'SELECT u.login FROM ' . $this->userTable . " u $joins $where";
-
- $db = $this->getDb();
-
- $result = $db->fetchAll($sql, $bind);
- $result = array_column($result, 'login');
- return $result;
- }
/**
* Returns all users and their access to `$idSite`.
@@ -675,9 +710,10 @@ class Model
$offset = null,
$pattern = null,
$access = null,
+ $status = null,
$logins = null
) {
- $filter = new UserTableFilter($access, $idSite, $pattern, $logins);
+ $filter = new UserTableFilter($access, $idSite, $pattern, $status, $logins);
list($joins, $bind) = $filter->getJoins('u');
list($where, $whereBind) = $filter->getWhere();
@@ -735,12 +771,12 @@ class Model
return $logins;
}
- public function getPendingUser($userLogin)
+ public function isPendingUser(string $userLogin): bool
{
$db = $this->getDb();
- $sql = "SELECT count(*) FROM " . $this->userTable . " WHERE login = ? and invite_status not like ?";
- $bind = [$userLogin, 'accept'];
- return $db->fetchOne($sql, $bind);
+ $sql = "SELECT count(*) FROM " . $this->userTable . " WHERE (login = ? or email = ?) and invite_token is not null";
+ $bind = [$userLogin, $userLogin];
+ $count = (int) $db->fetchOne($sql, $bind);
+ return $count > 0;
}
-
}
diff --git a/plugins/UsersManager/Repository/UserRepository.php b/plugins/UsersManager/Repository/UserRepository.php
index 51dd49636b..e806211abc 100644
--- a/plugins/UsersManager/Repository/UserRepository.php
+++ b/plugins/UsersManager/Repository/UserRepository.php
@@ -16,18 +16,26 @@ use Piwik\Plugins\UsersManager\UserAccessFilter;
use Piwik\Plugins\UsersManager\UsersManager;
use Piwik\Plugins\UsersManager\Validators\Email;
use Piwik\Plugins\UsersManager\Validators\Login;
+use Piwik\Site;
use Piwik\Validators\BaseValidator;
use Piwik\Validators\IdSite;
use Piwik\Plugin;
-
class UserRepository
{
-
+ /**
+ * @var Model
+ */
protected $model;
+ /**
+ * @var UserAccessFilter
+ */
protected $filter;
+ /**
+ * @var Password
+ */
protected $password;
public function __construct(Model $model, UserAccessFilter $filter, Password $password)
@@ -37,36 +45,35 @@ class UserRepository
$this->password = $password;
}
-
- public function index($userLogin, $pending)
- {
- Piwik::checkUserHasSuperUserAccessOrIsTheUser($userLogin);
- $this->checkUserExists($userLogin);
-
- $user = $this->model->getUser($userLogin, $pending);
-
- $user = $this->filter->filterUser($user);
- return $this->enrichUser($user);
- }
-
- public function create($userLogin, $email, $initialIdSite, $password = '', $_isPasswordHashed = false)
- {
- $this->validateAccess();
+ /**
+ * @param string $userLogin
+ * @param string $email
+ * @param int $initialIdSite
+ * @param string $password
+ * @param bool $isPasswordHashed
+ * @throws \Exception
+ */
+ public function create(
+ string $userLogin,
+ string $email,
+ ?int $initialIdSite = null,
+ string $password = '',
+ bool $isPasswordHashed = false
+ ): void {
if (!Piwik::hasUserSuperUserAccess()) {
if (empty($initialIdSite)) {
throw new \Exception(Piwik::translate("UsersManager_AddUserNoInitialAccessError"));
}
- // check if the site exist
+ // check if the site exists
BaseValidator::check('siteId', $initialIdSite, [new IdSite()]);
Piwik::checkUserHasAdminAccess($initialIdSite);
}
- //validate info
- BaseValidator::check('userLogin', $userLogin, [new Login(true)]);
- BaseValidator::check('email', $email, [new Email(true)]);
+ BaseValidator::check(Piwik::translate('General_Username'), $userLogin, [new Login(true)]);
+ BaseValidator::check(Piwik::translate('Installation_Email'), $email, [new Email(true)]);
if (!empty($password)) {
- if (!$_isPasswordHashed) {
+ if (!$isPasswordHashed) {
$passwordTransformed = UsersManager::getPasswordHash($password);
} else {
$passwordTransformed = $password;
@@ -74,67 +81,69 @@ class UserRepository
$password = $this->password->hash($passwordTransformed);
}
- //insert user into database.
- $this->model->addUser($userLogin, $password, $email, Date::now()->getDatetime(), empty($password));
-
- /**
- * Triggered after a new user is invited.
- *
- * @param string $userLogin The new user's details handle.
- */
- Piwik::postEvent('UsersManager.inviteUser.end', array($userLogin, $email));
+ $this->model->addUser($userLogin, $password, $email, Date::now()->getDatetime());
if ($initialIdSite) {
API::getInstance()->setUserAccess($userLogin, 'view', $initialIdSite);
}
+
+ $this->sendUserCreationNotification($userLogin);
}
- public function sendNewUserEmails($userLogin, $expired = 7, $newUser = true)
+ public function inviteUser(string $userLogin, string $email, ?int $initialIdSite = null, $expiryInDays = null): void
{
+ $this->create($userLogin, $email, $initialIdSite);
+ $this->model->updateUserFields($userLogin, ['invited_by' => Piwik::getCurrentUserLogin()]);
+ $user = $this->model->getUser($userLogin);
+ $generatedToken = $this->model->generateRandomInviteToken();
+ $this->model->attachInviteToken($userLogin, $generatedToken, $expiryInDays);
+ $this->sendInvitationEmail($user, $generatedToken, $expiryInDays);
+ }
- //send Admin Email
- if ($newUser) {
- $mail = StaticContainer::getContainer()->make(UserCreatedEmail::class, array(
- 'login' => Piwik::getCurrentUserLogin(),
- 'emailAddress' => Piwik::getCurrentUserEmail(),
- 'userLogin' => $userLogin,
- ));
- $mail->safeSend();
- }
-
-
- if (!empty($expired)) {
- //retrieve user details
- $user = API::getInstance()->getUser($userLogin);
-
- //remove all previous token
- $this->model->deleteAllTokensForUser($userLogin);
-
- //generate Token
- $generatedToken = $this->model->generateRandomTokenAuth();
-
- //attach token to user
- $this->model->addTokenAuth($userLogin, $generatedToken, "Invite Token", Date::now()->getDatetime(),
- Date::now()->addDay($expired)->getDatetime());
-
+ public function reInviteUser(string $userLogin, $expiryInDays = null): void
+ {
+ $user = $this->model->getUser($userLogin);
+ $generatedToken = $this->model->generateRandomInviteToken();
+ $this->model->attachInviteToken($userLogin, $generatedToken, $expiryInDays);
+ $this->sendInvitationEmail($user, $generatedToken, $expiryInDays);
+ }
- // send email
- $email = StaticContainer::getContainer()->make(UserInviteEmail::class, array(
- 'currentUser' => Piwik::getCurrentUserLogin(),
- 'user' => $user,
- 'token' => $generatedToken
- ));
- $email->safeSend();
- }
+ protected function sendUserCreationNotification(string $createdUserLogin): void
+ {
+ $mail = StaticContainer::getContainer()->make(UserCreatedEmail::class, [
+ 'login' => Piwik::getCurrentUserLogin(),
+ 'emailAddress' => Piwik::getCurrentUserEmail(),
+ 'userLogin' => $createdUserLogin,
+ ]);
+ $mail->safeSend();
}
- private function validateAccess()
+ protected function sendInvitationEmail(array $user, string $inviteToken, int $expiryInDays): void
{
- Piwik::checkUserHasSomeAdminAccess();
- UsersManager::dieIfUsersAdminIsDisabled();
+ $site = $this->model->getSitesAccessFromUser($user['login']);
+
+ if (isset($site[0])) {
+ $siteName = Site::getNameFor($site[0]['site']);
+ } else {
+ $siteName = "Default Site";
+ }
+
+ $email = StaticContainer::getContainer()->make(UserInviteEmail::class, [
+ 'currentUser' => Piwik::getCurrentUserLogin(),
+ 'invitedUser' => $user,
+ 'siteName' => $siteName,
+ 'token' => $inviteToken,
+ 'expiryInDays' => $expiryInDays
+ ]);
+ $email->safeSend();
}
- public function enrichUser($user)
+ /**
+ * @param array $user
+ * @return array
+ * @throws \Exception
+ */
+ public function enrichUser(array $user): array
{
if (empty($user)) {
return $user;
@@ -149,22 +158,28 @@ class UserRepository
$user['last_seen'] = Date::getDatetimeFromTimestamp($lastSeen);
}
+ $user['invite_status'] = 'active';
+
+ if (!empty($user['invite_expired_at'])) {
+ $inviteExpireAt = Date::factory($user['invite_expired_at']);
+ // if token expired
+ if (Date::now()->isLater($inviteExpireAt)) {
+ $user['invite_status'] = 'expired';
+ }
+ // if token not expired
+ if (Date::now()->isEarlier($inviteExpireAt)) {
+ $dayLeft = floor(Date::secondsToDays($inviteExpireAt->getTimestamp() - Date::now()->getTimestamp()));
+ $user['invite_status'] = $dayLeft;
+ }
+ }
+
if (Piwik::hasUserSuperUserAccess()) {
$user['uses_2fa'] = !empty($user['twofactor_secret']) && $this->isTwoFactorAuthPluginEnabled();
unset($user['twofactor_secret']);
- if (!empty($user['invite_status']) && $user['invite_status'] === 'pending') {
- $validToken = $this->model->checkUserHasUnexpiredToken($user['login']);
- if (!$validToken) {
- $user['invite_status'] = 'expired';
- }
- }
- if (empty($user['invite_status'])) {
- $user['invite_status'] = 'accept';
- }
return $user;
}
- $newUser = array('login' => $user['login']);
+ $newUser = ['login' => $user['login']];
if ($user['login'] === Piwik::getCurrentUserLogin() || !empty($user['superuser_access'])) {
$newUser['email'] = $user['email'];
@@ -184,11 +199,20 @@ class UserRepository
if (isset($user['last_seen'])) {
$newUser['last_seen'] = $user['last_seen'];
}
+ $newUser['invite_status'] = $user['invite_status'];
+ if (isset($user['invited_by'])) {
+ $newUser['invited_by'] = $user['invited_by'];
+ }
return $newUser;
}
- public function enrichUsers($users)
+ /**
+ * @param array $users
+ * @return mixed
+ * @throws \Exception
+ */
+ public function enrichUsers(array $users): array
{
if (!empty($users)) {
foreach ($users as $index => $user) {
@@ -198,7 +222,11 @@ class UserRepository
return $users;
}
- public function enrichUsersWithLastSeen($users)
+ /**
+ * @param array $users
+ * @return mixed
+ */
+ public function enrichUsersWithLastSeen(array $users): array
{
$formatter = new Formatter();
@@ -212,14 +240,11 @@ class UserRepository
return $users;
}
-
- private function isTwoFactorAuthPluginEnabled()
+ private function isTwoFactorAuthPluginEnabled(): bool
{
if (!isset($this->twoFaPluginActivated)) {
$this->twoFaPluginActivated = Plugin\Manager::getInstance()->isPluginActivated('TwoFactorAuth');
}
return $this->twoFaPluginActivated;
}
-
-
-} \ No newline at end of file
+}
diff --git a/plugins/UsersManager/Sql/UserTableFilter.php b/plugins/UsersManager/Sql/UserTableFilter.php
index 4743d17755..84d259639d 100644
--- a/plugins/UsersManager/Sql/UserTableFilter.php
+++ b/plugins/UsersManager/Sql/UserTableFilter.php
@@ -30,15 +30,21 @@ class UserTableFilter
private $filterSearch;
/**
+ * @var string
+ */
+ private $filterStatus;
+
+ /**
* @var string[]
*/
private $logins;
- public function __construct($filterByRole, $filterByRoleSite, $filterSearch, $logins = null)
+ public function __construct($filterByRole, $filterByRoleSite, $filterSearch, $filterStatus, $logins = null)
{
$this->filterByRole = $filterByRole;
$this->filterByRoleSite = $filterByRoleSite;
$this->filterSearch = $filterSearch;
+ $this->filterStatus = $filterStatus;
$this->logins = $logins;
if (isset($this->filterByRole) && !isset($this->filterByRoleSite)) {
@@ -47,7 +53,7 @@ class UserTableFilter
// can only filter by superuser if current user is a superuser
if ($this->filterByRole == 'superuser'
- && !Piwik::hasUserSuperUserAccess()
+ && !Piwik::hasUserSuperUserAccess()
) {
$this->filterByRole = null;
}
@@ -78,6 +84,28 @@ class UserTableFilter
$bind = array_merge($bind, ['%' . $this->filterSearch . '%', '%' . $this->filterSearch . '%']);
}
+ if ($this->filterStatus) {
+ if ($this->filterStatus === 'active') {
+ $conditions[] = '(u.invite_token is NULL and u.invite_expired_at is NULL)';
+ }
+ if ($this->filterStatus === 'pending') {
+ $conditions[] = '(u.invite_token is not NULL and u.invite_expired_at > DATE(Now()))';
+ // Pending users are only visible for super user or the user, who invited the user
+ if (!Piwik::hasUserSuperUserAccess()) {
+ $conditions[] = 'u.invited_by = ?';
+ $bind[] = Piwik::getCurrentUserLogin();
+ }
+ }
+ if ($this->filterStatus === 'expired') {
+ $conditions[] = '(u.invite_token is not NULL and u.invite_expired_at < DATE(Now()))';
+ // Expired users are only visible for super user or the user, who invited the user
+ if (!Piwik::hasUserSuperUserAccess()) {
+ $conditions[] = 'u.invited_by = ?';
+ $bind[] = Piwik::getCurrentUserLogin();
+ }
+ }
+ }
+
if ($this->logins !== null) {
$logins = array_map('json_encode', $this->logins);
$conditions[] = 'u.login IN (' . implode(',', $logins) . ')';
diff --git a/plugins/UsersManager/Tasks.php b/plugins/UsersManager/Tasks.php
index 41484fe0c9..d8842d9c4d 100644
--- a/plugins/UsersManager/Tasks.php
+++ b/plugins/UsersManager/Tasks.php
@@ -1,10 +1,12 @@
<?php
+
/**
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
+
namespace Piwik\Plugins\UsersManager;
use Piwik\Access;
@@ -32,12 +34,29 @@ class Tasks extends \Piwik\Plugin\Tasks
{
$this->daily("cleanupExpiredTokens");
$this->daily("setUserDefaultReportPreference");
+ $this->daily("cleanUpExpiredInvites");
}
- public function cleanupExpiredTokens() {
+ public function cleanupExpiredTokens()
+ {
$this->usersModel->deleteExpiredTokens(Date::now()->getDatetime());
}
+ public function cleanUpExpiredInvites()
+ {
+ // Expired invites will be removed after 3 days, so there's a chance to resend an invite before it's removed.
+
+ $expiredInvites = $this->usersModel->getExpiredInvites(Date::now()->subDay(3)->getDatetime());
+
+ foreach ($expiredInvites as $expiredInvite) {
+ try {
+ $this->usersModel->deleteUser($expiredInvite['login']);
+ } catch (\Exception $e) {
+ // ignore possible errors thrown during delete user event
+ }
+ }
+ }
+
public function setUserDefaultReportPreference()
{
// We initialize the default report user preference for each user (if it hasn't been inited before) for performance,
@@ -46,7 +65,7 @@ class Tasks extends \Piwik\Plugin\Tasks
$usersModel = $this->usersModel;
$usersManagerApi = $this->usersManagerApi;
Access::getInstance()->doAsSuperUser(function () use ($usersModel, $usersManagerApi) {
- $allUsers = $usersModel->getUsers(array());
+ $allUsers = $usersModel->getUsers([]);
foreach ($allUsers as $user) {
$usersManagerApi->initUserPreferenceWithDefault($user['login'], API::PREFERENCE_DEFAULT_REPORT);
}
diff --git a/plugins/UsersManager/UserAccessFilter.php b/plugins/UsersManager/UserAccessFilter.php
index 9378b8a3d1..f0391138ce 100644
--- a/plugins/UsersManager/UserAccessFilter.php
+++ b/plugins/UsersManager/UserAccessFilter.php
@@ -108,7 +108,8 @@ class UserAccessFilter
}
return array_values(array_filter($users, function ($user) {
- return $this->isNonSuperUserAllowedToSeeThisLogin($user['login']);
+ $isPendingVisible = empty($user['invite_token']) || $this->isOwnLogin($user['invited_by']);
+ return $isPendingVisible && $this->isNonSuperUserAllowedToSeeThisLogin($user['login']);
}));
}
diff --git a/plugins/UsersManager/UsersManager.php b/plugins/UsersManager/UsersManager.php
index 5403dd6645..16fc1aedf9 100644
--- a/plugins/UsersManager/UsersManager.php
+++ b/plugins/UsersManager/UsersManager.php
@@ -1,4 +1,5 @@
<?php
+
/**
* Matomo - free/libre analytics platform
*
@@ -6,6 +7,7 @@
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*
*/
+
namespace Piwik\Plugins\UsersManager;
use Exception;
@@ -32,19 +34,19 @@ class UsersManager extends \Piwik\Plugin
*/
public function registerEvents()
{
- return array(
- 'AssetManager.getStylesheetFiles' => 'getStylesheetFiles',
- 'SitesManager.deleteSite.end' => 'deleteSite',
- 'Tracker.Cache.getSiteAttributes' => 'recordAdminUsersInCache',
- 'Translate.getClientSideTranslationKeys' => 'getClientSideTranslationKeys',
- 'Platform.initialized' => 'onPlatformInitialized',
- 'System.addSystemSummaryItems' => 'addSystemSummaryItems',
- );
+ return [
+ 'AssetManager.getStylesheetFiles' => 'getStylesheetFiles',
+ 'SitesManager.deleteSite.end' => 'deleteSite',
+ 'Tracker.Cache.getSiteAttributes' => 'recordAdminUsersInCache',
+ 'Translate.getClientSideTranslationKeys' => 'getClientSideTranslationKeys',
+ 'Platform.initialized' => 'onPlatformInitialized',
+ 'System.addSystemSummaryItems' => 'addSystemSummaryItems',
+ ];
}
public static function isUsersAdminEnabled()
{
- return (bool) Config::getInstance()->General['enable_users_admin'];
+ return (bool)Config::getInstance()->General['enable_users_admin'];
}
public static function dieIfUsersAdminIsDisabled()
@@ -140,7 +142,7 @@ class UsersManager extends \Piwik\Plugin
public static function isValidPasswordString($input)
{
if (!SettingsPiwik::isUserCredentialsSanityCheckEnabled()
- && !empty($input)
+ && !empty($input)
) {
return true;
}
@@ -171,10 +173,12 @@ class UsersManager extends \Piwik\Plugin
Piwik::postEvent('UsersManager.checkPassword', array($password));
if (!self::isValidPasswordString($password)) {
- throw new Exception(Piwik::translate('UsersManager_ExceptionInvalidPassword', array(self::PASSWORD_MIN_LENGTH)));
+ throw new Exception(Piwik::translate('UsersManager_ExceptionInvalidPassword',
+ array(self::PASSWORD_MIN_LENGTH)));
}
if (mb_strlen($password) > self::PASSWORD_MAX_LENGTH) {
- throw new Exception(Piwik::translate('UsersManager_ExceptionInvalidPasswordTooLong', array(self::PASSWORD_MAX_LENGTH)));
+ throw new Exception(Piwik::translate('UsersManager_ExceptionInvalidPasswordTooLong',
+ array(self::PASSWORD_MAX_LENGTH)));
}
}
@@ -331,6 +335,10 @@ class UsersManager extends \Piwik\Plugin
$translationKeys[] = 'UsersManager_Pending';
$translationKeys[] = 'UsersManager_Expired';
$translationKeys[] = 'UsersManager_Decline';
-
+ $translationKeys[] = 'UsersManager_ResendInviteSuccess';
+ $translationKeys[] = 'UsersManager_InviteSuccess';
+ $translationKeys[] = 'UsersManager_InviteDayLeft';
+ $translationKeys[] = 'UsersManager_FilterByStatus';
+ $translationKeys[] = 'UsersManager_ExpiredInviteAutomaticallyRemoved';
}
}
diff --git a/plugins/UsersManager/Validators/Email.php b/plugins/UsersManager/Validators/Email.php
index 98ed633747..4539c777bb 100644
--- a/plugins/UsersManager/Validators/Email.php
+++ b/plugins/UsersManager/Validators/Email.php
@@ -1,4 +1,5 @@
<?php
+
/**
* Matomo - free/libre analytics platform
*
@@ -15,12 +16,13 @@ use Piwik\Validators\Exception;
class Email extends BaseValidator
{
-
private $checkUnique;
+ private $userLogin;
- public function __construct($checkUnique = false)
+ public function __construct($checkUnique = false, $userLogin = null)
{
$this->checkUnique = $checkUnique;
+ $this->userLogin = $userLogin;
}
public function validate($value)
@@ -30,13 +32,12 @@ class Email extends BaseValidator
}
if (!Piwik::isValidEmailString($value)) {
- throw new Exception(Piwik::translate('General_ValidatorErrorNotEmailLike', array($value)));
+ throw new Exception(Piwik::translate('General_ValidatorErrorNotEmailLike', [$value]));
}
if ($this->checkUnique) {
$this->isUnique($value);
}
-
}
/**
@@ -46,13 +47,20 @@ class Email extends BaseValidator
*/
private function isUnique($email)
{
- if (APIUsersManager::getInstance()->userExists($email)) {
- throw new Exception(Piwik::translate('UsersManager_ExceptionLoginExists', $email));
+ if (APIUsersManager::getInstance()->userEmailExists($email)) {
+ throw new Exception(Piwik::translate('UsersManager_ExceptionEmailExists', $email));
}
- if (APIUsersManager::getInstance()->userEmailExists($email)) {
- throw new Exception(Piwik::translate('UsersManager_ExceptionLoginExistsAsEmail', $email));
+ if ($this->userLogin && mb_strtolower($this->userLogin) !== mb_strtolower($email) && APIUsersManager::getInstance()->userExists($email)) {
+ throw new Exception(Piwik::translate('UsersManager_ExceptionEmailExistsAsLogin', $email));
+ }
+
+ if (!$this->userLogin && APIUsersManager::getInstance()->userExists($email)) {
+ throw new Exception(Piwik::translate('UsersManager_ExceptionEmailExistsAsLogin', $email));
}
- }
+ if (!Piwik::isValidEmailString($email)) {
+ throw new Exception(Piwik::translate('UsersManager_ExceptionInvalidEmail'));
+ }
+ }
}
diff --git a/plugins/UsersManager/Validators/Login.php b/plugins/UsersManager/Validators/Login.php
index 7e3e19cda5..ad97537c0d 100644
--- a/plugins/UsersManager/Validators/Login.php
+++ b/plugins/UsersManager/Validators/Login.php
@@ -1,4 +1,5 @@
<?php
+
/**
* Matomo - free/libre analytics platform
*
@@ -15,7 +16,6 @@ use Piwik\Plugins\UsersManager\API as APIUsersManager;
use Piwik\Validators\BaseValidator;
use Piwik\Validators\Exception;
-
class Login extends BaseValidator
{
const loginMinimumLength = 2;
@@ -30,19 +30,23 @@ class Login extends BaseValidator
public function validate($value)
{
- if (!SettingsPiwik::isUserCredentialsSanityCheckEnabled()
- && !empty($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))
+ if (
+ !($l >= self::loginMinimumLength
+ && $l <= self::loginMaximumLength
+ && (preg_match('/^[A-Za-zÄäÖöÜüß0-9_.@+-]*$/D', $value) > 0))
) {
- throw new Exception(Piwik::translate('UsersManager_ExceptionInvalidLoginFormat',
- array(self::loginMinimumLength, self::loginMaximumLength)));
+ throw new Exception(Piwik::translate(
+ 'UsersManager_ExceptionInvalidLoginFormat',
+ [self::loginMinimumLength, self::loginMaximumLength]
+ ));
}
if ($this->checkUnique) {
@@ -65,4 +69,4 @@ class Login extends BaseValidator
throw new Exception(Piwik::translate('UsersManager_ExceptionLoginExistsAsEmail', $login));
}
}
-} \ No newline at end of file
+}
diff --git a/plugins/UsersManager/lang/en.json b/plugins/UsersManager/lang/en.json
index a4fa908773..1e23b14686 100644
--- a/plugins/UsersManager/lang/en.json
+++ b/plugins/UsersManager/lang/en.json
@@ -187,12 +187,18 @@
"NewsletterSignupFailureMessage": "Whoops, something went wrong. We weren't able to sign you up for the newsletter.",
"NewsletterSignupSuccessMessage": "Super, you're all signed up! We'll be in touch soon.",
"FirstWebsitePermission": "First website permission",
- "InviteSuccessNotification": "The invited User will receive an email to accept the invite, the invite valid for %1$s days, you can also resend and delete the invite in the user management page.",
+ "InviteSuccessNotification": "The invited user will receive an email to accept the invite. This invite is valid for %1$s days. You can also resend and delete the invite on the user management page.",
"ResendInviteConfirmSingle": "Are you sure you want to resend invitation to %1$s?",
"Status": "Status",
"Pending": "Pending",
"Active": "Active",
- "Expired": "Invite Expired",
- "Decline": "Invite Declined"
+ "Expired": "Invite expired",
+ "Decline": "Invite declined",
+ "ResendInviteSuccess": "Success! The invite has been resent to user %s",
+ "InviteSuccess": "Success! The invite has been sent.",
+ "InviteDayLeft": "Expires in %s days",
+ "FilterByStatus": "Filter by status",
+ "ExceptionResendInviteDenied": "Resending an invite is only allowed to the user who invited %s or any super user.",
+ "ExpiredInviteAutomaticallyRemoved": "Expired invites will be automatically deleted after %1$s days."
}
}
diff --git a/plugins/UsersManager/templates/index.twig b/plugins/UsersManager/templates/index.twig
index 82237074a1..fc6c0057f5 100644
--- a/plugins/UsersManager/templates/index.twig
+++ b/plugins/UsersManager/templates/index.twig
@@ -10,6 +10,7 @@
current-user-role="'{{ currentUserRole }}'"
access-levels="{{ accessLevels|json_encode|e('html_attr') }}"
filter-access-levels="{{ filterAccessLevels|json_encode|e('html_attr') }}"
+ filter-status-levels="{{ statusAccessLevels|json_encode|e('html_attr') }}"
>
</piwik-users-manager>
diff --git a/plugins/UsersManager/tests/Fixtures/ManyUsers.php b/plugins/UsersManager/tests/Fixtures/ManyUsers.php
index 2fa2607f4a..66da0384a4 100644
--- a/plugins/UsersManager/tests/Fixtures/ManyUsers.php
+++ b/plugins/UsersManager/tests/Fixtures/ManyUsers.php
@@ -1,10 +1,12 @@
<?php
+
/**
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
+
namespace Piwik\Plugins\UsersManager\tests\Fixtures;
use Piwik\Date;
@@ -28,48 +30,56 @@ class ManyUsers extends Fixture
public $siteCopyCount;
public $userCopyCount;
public $addTextSuffixes;
- public $users = array();
-
- public $baseUsers = array(
- 'login1' => array('superuser' => 1),
- 'login2' => array('view' => array(3,5), 'admin' => array(1,2,6)),
- 'login3' => array('view' => array(), 'admin' => array()), // no access to any site
- 'login4' => array('view' => array(6), 'admin' => array()), // only access to one with view
- 'login5' => array('view' => array(), 'admin' => array(3)), // only access to one with admin
- 'login6' => array('view' => array(), 'admin' => array(6,3)), // access to a couple of sites with admin
- 'login7' => array('view' => array(2,1,6,3), 'admin' => array()), // access to a couple of sites with view
- 'login8' => array('view' => array(4,7), 'admin' => array(2,5)), // access to a couple of sites with admin and view
- 'login9' => array('view' => array(5,6), 'admin' => array(8,9)),
- 'login10' => array('superuser' => 1)
- );
-
- public $pendingUser = array(
- 'login'=>'000pendingUser1',
- 'email'=>'pendinguser1light@example.com'
- );
+ public $users = [];
+
+ public $baseUsers = [
+ 'login1' => ['superuser' => 1],
+ 'login2' => ['view' => [3, 5], 'admin' => [1, 2, 6]],
+ 'login3' => ['view' => [], 'admin' => []], // no access to any site
+ 'login4' => ['view' => [6], 'admin' => []], // only access to one with view
+ 'login5' => ['view' => [], 'admin' => [3]], // only access to one with admin
+ 'login6' => ['view' => [], 'admin' => [6, 3]], // access to a couple of sites with admin
+ 'login7' => ['view' => [2, 1, 6, 3], 'admin' => []], // access to a couple of sites with view
+ 'login8' => ['view' => [4, 7], 'admin' => [2, 5]], // access to a couple of sites with admin and view
+ 'login9' => ['view' => [5, 6], 'admin' => [8, 9]],
+ 'login10' => ['superuser' => 1]
+ ];
+
+ public $pendingUser = [
+ 'login' => '000pendingUser1',
+ 'email' => 'pendinguser1light@example.com'
+ ];
+
+ public $pendingUser2 = [
+ 'login' => 'zzzpendingUser2',
+ 'email' => 'zpendinguser2light@example.com'
+ ];
public $baseSites = [
- 'sleep',
- 'escapesequence',
- 'hunter',
- 'transistor',
- 'wicket',
- 'relentless',
- 'scarecrow',
- 'nova',
- 'resilience',
- 'tricks',
+ 'sleep',
+ 'escapesequence',
+ 'hunter',
+ 'transistor',
+ 'wicket',
+ 'relentless',
+ 'scarecrow',
+ 'nova',
+ 'resilience',
+ 'tricks',
];
public $textAdditions = [
- 'life',
- 'light',
- 'flight',
- 'conchords',
+ 'life',
+ 'light',
+ 'flight',
+ 'conchords',
];
- public function __construct($userCopyCount = self::USER_COUNT, $siteCopyCount = self::SITE_COUNT, $addTextSuffixes = true)
- {
+ public function __construct(
+ $userCopyCount = self::USER_COUNT,
+ $siteCopyCount = self::SITE_COUNT,
+ $addTextSuffixes = true
+ ) {
$this->userCopyCount = $userCopyCount;
$this->siteCopyCount = $siteCopyCount;
$this->addTextSuffixes = $addTextSuffixes;
@@ -105,7 +115,7 @@ class ManyUsers extends Fixture
$api = API::getInstance();
// add a pending invite user
- $api->inviteUser($this->pendingUser['login'], $this->pendingUser['email'],1);
+ $api->inviteUser($this->pendingUser['login'], $this->pendingUser['email'], 1);
for ($i = 0; $i != $this->userCopyCount; ++$i) {
$addToEmail = $i % 2 == 0;
@@ -121,7 +131,7 @@ class ManyUsers extends Fixture
}
$email = $login . '@example.com';
- if ($this->addTextSuffixes &&$addToEmail) {
+ if ($this->addTextSuffixes && $addToEmail) {
$email = $login . $textAddition . '@example.com';
}
@@ -147,5 +157,9 @@ class ManyUsers extends Fixture
$this->users[$login]['token'] = $tokenAuth;
}
}
+
+ //add admin view pending user
+ $api->inviteUser($this->pendingUser2['login'], $this->pendingUser2['email'], 1);
+ $model->updateUserFields($this->pendingUser2['login'], ['invited_by' => 'login2']);
}
-} \ No newline at end of file
+}
diff --git a/plugins/UsersManager/tests/Integration/APITest.php b/plugins/UsersManager/tests/Integration/APITest.php
index 20a0c3a046..a6c8454d4d 100644
--- a/plugins/UsersManager/tests/Integration/APITest.php
+++ b/plugins/UsersManager/tests/Integration/APITest.php
@@ -1,4 +1,5 @@
<?php
+
/**
* Matomo - free/libre analytics platform
*
@@ -6,13 +7,16 @@
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
-namespace Piwik\Plugins\UsersManager\tests;
+namespace Piwik\Plugins\UsersManager\tests\Integration;
use Piwik\Access\Role\View;
use Piwik\Access\Role\Write;
use Piwik\Auth\Password;
use Piwik\Config;
+use Piwik\Date;
+use Piwik\EventDispatcher;
use Piwik\Mail;
+use Piwik\NoAccessException;
use Piwik\Option;
use Piwik\Piwik;
use Piwik\Plugins\SitesManager\API as SitesManagerAPI;
@@ -52,9 +56,9 @@ class TestCap1 extends Capability
public function getIncludedInRoles(): array
{
- return array(
- Admin::ID
- );
+ return [
+ Admin::ID
+ ];
}
}
@@ -84,9 +88,10 @@ class TestCap2 extends Capability
public function getIncludedInRoles(): array
{
- return array(
- Write::ID, Admin::ID
- );
+ return [
+ Write::ID,
+ Admin::ID
+ ];
}
}
@@ -116,7 +121,7 @@ class TestCap3 extends Capability
public function getIncludedInRoles(): array
{
- return array(Admin::ID);
+ return [Admin::ID];
}
}
@@ -174,10 +179,10 @@ class APITest extends IntegrationTestCase
Piwik::addAction('UsersManager.removeSiteAccess', function ($login, $idSites) use (&$eventTriggered, $self) {
$eventTriggered = true;
$self->assertEquals($self->login, $login);
- $self->assertEquals(array(1, 2), $idSites);
+ $self->assertEquals([1, 2], $idSites);
});
- $this->api->setUserAccess($this->login, 'noaccess', array(1, 2));
+ $this->api->setUserAccess($this->login, 'noaccess', [1, 2]);
$this->assertTrue($eventTriggered, 'UsersManager.removeSiteAccess event was not triggered');
}
@@ -189,20 +194,20 @@ class APITest extends IntegrationTestCase
$eventTriggered = true;
});
- $this->api->setUserAccess($this->login, 'admin', array(1, 2));
+ $this->api->setUserAccess($this->login, 'admin', [1, 2]);
$this->assertFalse($eventTriggered, 'UsersManager.removeSiteAccess event was triggered but should not');
}
public function test_getAllUsersPreferences_isEmpty_whenNoPreference()
{
- $preferences = $this->api->getAllUsersPreferences(array('preferenceName'));
+ $preferences = $this->api->getAllUsersPreferences(['preferenceName']);
$this->assertEmpty($preferences);
}
public function test_getAllUsersPreferences_isEmpty_whenNoPreferenceAndMultipleRequested()
{
- $preferences = $this->api->getAllUsersPreferences(array('preferenceName', 'randomDoesNotExist'));
+ $preferences = $this->api->getAllUsersPreferences(['preferenceName', 'randomDoesNotExist']);
$this->assertEmpty($preferences);
}
@@ -261,16 +266,20 @@ class APITest extends IntegrationTestCase
$this->api->setUserPreference($user3, API::PREFERENCE_DEFAULT_REPORT_DATE, 'otherPreferenceVALUE');
$this->api->setUserPreference($user3, 'RandomNOTREQUESTED', 'RandomNOTREQUESTED');
- $expected = array(
- $user2 => array(
- API::PREFERENCE_DEFAULT_REPORT => 'valueForUser2'
- ),
- $user3 => array(
- API::PREFERENCE_DEFAULT_REPORT => 'valueForUser3',
- API::PREFERENCE_DEFAULT_REPORT_DATE => 'otherPreferenceVALUE',
- ),
- );
- $result = $this->api->getAllUsersPreferences(array(API::PREFERENCE_DEFAULT_REPORT, API::PREFERENCE_DEFAULT_REPORT_DATE, 'randomDoesNotExist'));
+ $expected = [
+ $user2 => [
+ API::PREFERENCE_DEFAULT_REPORT => 'valueForUser2'
+ ],
+ $user3 => [
+ API::PREFERENCE_DEFAULT_REPORT => 'valueForUser3',
+ API::PREFERENCE_DEFAULT_REPORT_DATE => 'otherPreferenceVALUE',
+ ],
+ ];
+ $result = $this->api->getAllUsersPreferences([
+ API::PREFERENCE_DEFAULT_REPORT,
+ API::PREFERENCE_DEFAULT_REPORT_DATE,
+ 'randomDoesNotExist'
+ ]);
$this->assertSame($expected, $result);
}
@@ -282,12 +291,12 @@ class APITest extends IntegrationTestCase
$this->api->setUserPreference($user2, API::PREFERENCE_DEFAULT_REPORT, 'valueForUser2');
$this->api->setUserPreference($user2, API::PREFERENCE_DEFAULT_REPORT_DATE, 'RandomNOTREQUESTED');
- $expected = array(
- $user2 => array(
- API::PREFERENCE_DEFAULT_REPORT => 'valueForUser2'
- ),
- );
- $result = $this->api->getAllUsersPreferences(array(API::PREFERENCE_DEFAULT_REPORT, 'randomDoesNotExist'));
+ $expected = [
+ $user2 => [
+ API::PREFERENCE_DEFAULT_REPORT => 'valueForUser2'
+ ],
+ ];
+ $result = $this->api->getAllUsersPreferences([API::PREFERENCE_DEFAULT_REPORT, 'randomDoesNotExist']);
$this->assertSame($expected, $result);
}
@@ -310,7 +319,7 @@ class APITest extends IntegrationTestCase
$identity = FakeAccess::$identity;
FakeAccess::$identity = $this->login; // ensure password will be checked against this user
- $this->api->updateUser($this->login, 'newPassword', 'email@example.com', false, $this->password);
+ $this->api->updateUser($this->login, 'newPassword', 'email@example.com', false, $this->password);
FakeAccess::$identity = $identity;
$model = new Model();
@@ -322,11 +331,13 @@ class APITest extends IntegrationTestCase
$this->assertTrue($passwordHelper->verify(UsersManager::getPasswordHash('newPassword'), $user['password']));
- $subjects = array_map(function (Mail $mail) { return $mail->getSubject(); }, $capturedMails);
+ $subjects = array_map(function (Mail $mail) {
+ return $mail->getSubject();
+ }, $capturedMails);
$this->assertEquals([
- 'UsersManager_EmailChangeNotificationSubject', // sent twice to old email and new
- 'UsersManager_EmailChangeNotificationSubject',
- 'UsersManager_PasswordChangeNotificationSubject',
+ 'UsersManager_EmailChangeNotificationSubject', // sent twice to old email and new
+ 'UsersManager_EmailChangeNotificationSubject',
+ 'UsersManager_PasswordChangeNotificationSubject',
], $subjects);
}
@@ -343,7 +354,9 @@ class APITest extends IntegrationTestCase
$this->api->updateUser($this->login, 'newPassword2', 'email2@example.com', false, $this->password);
FakeAccess::$identity = $identity;
- $subjects = array_map(function (Mail $mail) { return $mail->getSubject(); }, $capturedMails);
+ $subjects = array_map(function (Mail $mail) {
+ return $mail->getSubject();
+ }, $capturedMails);
$this->assertEquals([], $subjects);
}
@@ -384,18 +397,24 @@ class APITest extends IntegrationTestCase
$this->expectException(\Exception::class);
$this->expectExceptionMessage('UsersManager_ExceptionInvalidPasswordTooLong');
- $this->api->updateUser($this->login, str_pad('foo', UsersManager::PASSWORD_MAX_LENGTH + 1), 'email@example.com', false, $this->password);
+ $this->api->updateUser(
+ $this->login,
+ str_pad('foo', UsersManager::PASSWORD_MAX_LENGTH + 1),
+ 'email@example.com',
+ false,
+ $this->password
+ );
}
public function test_update_user_fails_if_email_exists_as_other_user_username()
{
$this->expectException(\Exception::class);
- $this->expectExceptionMessage('UsersManager_CurrentPasswordNotCorrect');
+ $this->expectExceptionMessage('UsersManager_ExceptionEmailExistsAsLogin');
$user2 = 'existed@example.com';
$this->api->addUser($user2, 'password', 'userlogin2@password.de');
- $this->api->updateUser($this->login, $this->password, $user2, false, $this->password);
+ $this->api->updateUser($this->login, $this->password, $user2, false, $this->password);
}
public function test_update_can_update_user_email_to_own_username()
@@ -414,7 +433,7 @@ class APITest extends IntegrationTestCase
public function test_cannot_create_user_if_email_exists_as_username()
{
$this->expectException(\Exception::class);
- $this->expectExceptionMessage('UsersManager_ExceptionLoginExists');
+ $this->expectExceptionMessage('UsersManager_ExceptionEmailExistsAsLogin');
$user2 = 'existed@example.com';
$this->api->addUser($user2, 'password', 'email@example.com');
@@ -444,20 +463,20 @@ class APITest extends IntegrationTestCase
// super user has admin access for every site
$access = $this->api->getSitesAccessFromUser($user2);
- $expected = array(
- array(
- 'site' => 1,
- 'access' => 'admin'
- ),
- array(
- 'site' => 2,
- 'access' => 'admin'
- ),
- array(
- 'site' => 3,
- 'access' => 'admin'
- ),
- );
+ $expected = [
+ [
+ 'site' => 1,
+ 'access' => 'admin'
+ ],
+ [
+ 'site' => 2,
+ 'access' => 'admin'
+ ],
+ [
+ 'site' => 3,
+ 'access' => 'admin'
+ ],
+ ];
$this->assertEquals($expected, $access);
}
@@ -469,7 +488,13 @@ class APITest extends IntegrationTestCase
$users = $this->api->getUsersPlusRole(1);
$this->cleanUsers($users);
$expected = [
- ['login' => 'userLogin2', 'role' => 'view', 'capabilities' => [], 'email' => 'userLogin2@password.de', 'superuser_access' => '0'],
+ [
+ 'login' => 'userLogin2',
+ 'role' => 'view',
+ 'capabilities' => [],
+ 'email' => 'userLogin2@password.de',
+ 'superuser_access' => '0',
+ ],
];
$this->assertEquals($expected, $users);
}
@@ -482,7 +507,13 @@ class APITest extends IntegrationTestCase
$users = $this->api->getUsersPlusRole(1, $limit = null, $offset = 1);
$this->cleanUsers($users);
$expected = [
- ['login' => 'userLogin2', 'role' => 'view', 'capabilities' => [], 'email' => 'userLogin2@password.de', 'superuser_access' => '0'],
+ [
+ 'login' => 'userLogin2',
+ 'role' => 'view',
+ 'capabilities' => [],
+ 'email' => 'userLogin2@password.de',
+ 'superuser_access' => '0',
+ ],
];
$this->assertEquals($expected, $users);
}
@@ -496,7 +527,13 @@ class APITest extends IntegrationTestCase
$users = $this->api->getUsersPlusRole(1, null, null, null, 'superuser');
$this->cleanUsers($users);
$expected = [
- ['login' => 'userLogin2', 'role' => 'view', 'capabilities' => [], 'email' => 'userLogin2@password.de', 'superuser_access' => '0'],
+ [
+ 'login' => 'userLogin2',
+ 'role' => 'view',
+ 'capabilities' => [],
+ 'email' => 'userLogin2@password.de',
+ 'superuser_access' => '0',
+ ],
];
$this->assertEquals($expected, $users);
}
@@ -512,9 +549,25 @@ class APITest extends IntegrationTestCase
$users = $this->api->getUsersPlusRole(1);
$this->cleanUsers($users);
$expected = [
- ['login' => 'userLogin2', 'role' => 'admin', 'capabilities' => [], 'email' => 'userLogin2@password.de', 'superuser_access' => false],
- ['login' => 'userLogin3', 'role' => 'view', 'capabilities' => [], 'superuser_access' => false],
- ['login' => 'userLogin4', 'role' => 'admin', 'capabilities' => [], 'superuser_access' => false],
+ [
+ 'login' => 'userLogin2',
+ 'role' => 'admin',
+ 'capabilities' => [],
+ 'email' => 'userLogin2@password.de',
+ 'superuser_access' => false,
+ ],
+ [
+ 'login' => 'userLogin3',
+ 'role' => 'view',
+ 'capabilities' => [],
+ 'superuser_access' => false,
+ ],
+ [
+ 'login' => 'userLogin4',
+ 'role' => 'admin',
+ 'capabilities' => [],
+ 'superuser_access' => false,
+ ],
];
$this->assertEquals($expected, $users);
}
@@ -531,10 +584,31 @@ class APITest extends IntegrationTestCase
$users = $this->api->getUsersPlusRole(1);
$this->cleanUsers($users);
$expected = [
- ['login' => 'userLogin2', 'role' => 'admin', 'capabilities' => [], 'email' => 'userLogin2@password.de', 'superuser_access' => false],
- ['login' => 'userLogin3', 'role' => 'view', 'capabilities' => [], 'superuser_access' => false],
- ['login' => 'userLogin4', 'role' => 'admin', 'capabilities' => [], 'superuser_access' => false],
- ['login' => 'userLogin5', 'role' => 'noaccess', 'capabilities' => [], 'superuser_access' => false],
+ [
+ 'login' => 'userLogin2',
+ 'role' => 'admin',
+ 'capabilities' => [],
+ 'email' => 'userLogin2@password.de',
+ 'superuser_access' => false,
+ ],
+ [
+ 'login' => 'userLogin3',
+ 'role' => 'view',
+ 'capabilities' => [],
+ 'superuser_access' => false,
+ ],
+ [
+ 'login' => 'userLogin4',
+ 'role' => 'admin',
+ 'capabilities' => [],
+ 'superuser_access' => false,
+ ],
+ [
+ 'login' => 'userLogin5',
+ 'role' => 'noaccess',
+ 'capabilities' => [],
+ 'superuser_access' => false,
+ ],
];
$this->assertEquals($expected, $users);
}
@@ -550,11 +624,46 @@ class APITest extends IntegrationTestCase
$users = $this->api->getUsersPlusRole(1);
$this->cleanUsers($users);
$expected = [
- ['login' => 'userLogin', 'email' => 'userlogin@password.de', 'superuser_access' => false, 'role' => 'noaccess', 'capabilities' => [], 'uses_2fa' => false],
- ['login' => 'userLogin2', 'email' => 'userLogin2@password.de', 'superuser_access' => true, 'role' => 'superuser', 'capabilities' => [], 'uses_2fa' => false],
- ['login' => 'userLogin3', 'email' => 'userLogin3@password.de', 'superuser_access' => false, 'role' => 'view', 'capabilities' => [], 'uses_2fa' => false],
- ['login' => 'userLogin4', 'email' => 'userLogin4@password.de', 'superuser_access' => true, 'role' => 'superuser', 'capabilities' => [], 'uses_2fa' => false],
- ['login' => 'userLogin5', 'email' => 'userLogin5@password.de', 'superuser_access' => false, 'role' => 'noaccess', 'capabilities' => [], 'uses_2fa' => false],
+ [
+ 'login' => 'userLogin',
+ 'email' => 'userlogin@password.de',
+ 'superuser_access' => false,
+ 'role' => 'noaccess',
+ 'capabilities' => [],
+ 'uses_2fa' => false,
+ ],
+ [
+ 'login' => 'userLogin2',
+ 'email' => 'userLogin2@password.de',
+ 'superuser_access' => true,
+ 'role' => 'superuser',
+ 'capabilities' => [],
+ 'uses_2fa' => false,
+ ],
+ [
+ 'login' => 'userLogin3',
+ 'email' => 'userLogin3@password.de',
+ 'superuser_access' => false,
+ 'role' => 'view',
+ 'capabilities' => [],
+ 'uses_2fa' => false,
+ ],
+ [
+ 'login' => 'userLogin4',
+ 'email' => 'userLogin4@password.de',
+ 'superuser_access' => true,
+ 'role' => 'superuser',
+ 'capabilities' => [],
+ 'uses_2fa' => false,
+ ],
+ [
+ 'login' => 'userLogin5',
+ 'email' => 'userLogin5@password.de',
+ 'superuser_access' => false,
+ 'role' => 'noaccess',
+ 'capabilities' => [],
+ 'uses_2fa' => false,
+ ],
];
$this->assertEquals($expected, $users);
}
@@ -571,8 +680,18 @@ class APITest extends IntegrationTestCase
$users = $this->api->getUsersPlusRole(1, null, null, null, 'admin');
$this->cleanUsers($users);
$expected = [
- ['login' => 'userLogin2', 'role' => 'admin', 'capabilities' => [], 'email' => 'userLogin2@password.de', 'superuser_access' => false],
- ['login' => 'userLogin5', 'role' => 'admin', 'capabilities' => [], 'superuser_access' => false],
+ [
+ 'login' => 'userLogin2',
+ 'role' => 'admin',
+ 'capabilities' => [],
+ 'email' => 'userLogin2@password.de',
+ 'superuser_access' => false,
+ ],
+ ['login' => 'userLogin5',
+ 'role' => 'admin',
+ 'capabilities' => [],
+ 'superuser_access' => false,
+ ],
];
$this->assertEquals($expected, $users);
@@ -580,7 +699,7 @@ class APITest extends IntegrationTestCase
$users = $this->api->getUsersPlusRole(1, null, null, null, 'write');
$this->cleanUsers($users);
$expected = [
- ['login' => 'userLogin6', 'role' => 'write', 'capabilities' => [], 'superuser_access' => false],
+ ['login' => 'userLogin6', 'role' => 'write', 'capabilities' => [], 'superuser_access' => false],
];
$this->assertEquals($expected, $users);
}
@@ -595,9 +714,30 @@ class APITest extends IntegrationTestCase
$users = $this->api->getUsersPlusRole(1, null, null, null, 'noaccess');
$this->cleanUsers($users);
$expected = [
- ['login' => 'userLogin', 'role' => 'noaccess', 'superuser_access' => false, 'email' => 'userlogin@password.de', 'capabilities' => [], 'uses_2fa' => false],
- ['login' => 'userLogin2', 'role' => 'noaccess', 'superuser_access' => false, 'email' => 'userLogin2@password.de', 'capabilities' => [], 'uses_2fa' => false],
- ['login' => 'userLogin5', 'role' => 'noaccess', 'superuser_access' => false, 'email' => 'userLogin5@password.de', 'capabilities' => [], 'uses_2fa' => false],
+ [
+ 'login' => 'userLogin',
+ 'role' => 'noaccess',
+ 'superuser_access' => false,
+ 'email' => 'userlogin@password.de',
+ 'capabilities' => [],
+ 'uses_2fa' => false,
+ ],
+ [
+ 'login' => 'userLogin2',
+ 'role' => 'noaccess',
+ 'superuser_access' => false,
+ 'email' => 'userLogin2@password.de',
+ 'capabilities' => [],
+ 'uses_2fa' => false,
+ ],
+ [
+ 'login' => 'userLogin5',
+ 'role' => 'noaccess',
+ 'superuser_access' => false,
+ 'email' => 'userLogin5@password.de',
+ 'capabilities' => [],
+ 'uses_2fa' => false,
+ ],
];
$this->assertEquals($expected, $users);
}
@@ -615,8 +755,22 @@ class APITest extends IntegrationTestCase
$users = $this->api->getUsersPlusRole(1, null, null, null, 'superuser');
$this->cleanUsers($users);
$expected = [
- ['login' => 'userLogin2', 'email' => 'userLogin2@password.de', 'superuser_access' => true, 'role' => 'superuser', 'capabilities' => [], 'uses_2fa' => false],
- ['login' => 'userLogin4', 'email' => 'userLogin4@password.de', 'superuser_access' => true, 'role' => 'superuser', 'capabilities' => [], 'uses_2fa' => false],
+ [
+ 'login' => 'userLogin2',
+ 'email' => 'userLogin2@password.de',
+ 'superuser_access' => true,
+ 'role' => 'superuser',
+ 'capabilities' => [],
+ 'uses_2fa' => false,
+ ],
+ [
+ 'login' => 'userLogin4',
+ 'email' => 'userLogin4@password.de',
+ 'superuser_access' => true,
+ 'role' => 'superuser',
+ 'capabilities' => [],
+ 'uses_2fa' => false,
+ ],
];
$this->assertEquals($expected, $users);
}
@@ -632,8 +786,22 @@ class APITest extends IntegrationTestCase
$users = $this->api->getUsersPlusRole(1, null, null, 'searchText');
$this->cleanUsers($users);
$expected = [
- ['login' => 'searchTextLogin', 'email' => 'someemail@email.com', 'superuser_access' => true, 'role' => 'superuser', 'capabilities' => [], 'uses_2fa' => false],
- ['login' => 'userLogin2', 'email' => 'searchTextdef@email.com', 'superuser_access' => false, 'role' => 'view', 'capabilities' => [], 'uses_2fa' => false],
+ [
+ 'login' => 'searchTextLogin',
+ 'email' => 'someemail@email.com',
+ 'superuser_access' => true,
+ 'role' => 'superuser',
+ 'capabilities' => [],
+ 'uses_2fa' => false,
+ ],
+ [
+ 'login' => 'userLogin2',
+ 'email' => 'searchTextdef@email.com',
+ 'superuser_access' => false,
+ 'role' => 'view',
+ 'capabilities' => [],
+ 'uses_2fa' => false,
+ ],
];
$this->assertEquals($expected, $users);
}
@@ -649,8 +817,22 @@ class APITest extends IntegrationTestCase
$users = $this->api->getUsersPlusRole(1, $limit = 2, $offset = 1);
$this->cleanUsers($users);
$expected = [
- ['login' => 'userLogin', 'email' => 'userlogin@password.de', 'superuser_access' => false, 'role' => 'noaccess', 'capabilities' => [], 'uses_2fa' => false],
- ['login' => 'userLogin2', 'email' => 'searchTextdef@email.com', 'superuser_access' => false, 'role' => 'view', 'capabilities' => [], 'uses_2fa' => false],
+ [
+ 'login' => 'userLogin',
+ 'email' => 'userlogin@password.de',
+ 'superuser_access' => false,
+ 'role' => 'noaccess',
+ 'capabilities' => [],
+ 'uses_2fa' => false,
+ ],
+ [
+ 'login' => 'userLogin2',
+ 'email' => 'searchTextdef@email.com',
+ 'superuser_access' => false,
+ 'role' => 'view',
+ 'capabilities' => [],
+ 'uses_2fa' => false,
+ ],
];
$this->assertEquals($expected, $users);
}
@@ -663,9 +845,9 @@ class APITest extends IntegrationTestCase
$access = $this->api->getSitesAccessForUser('userLogin');
$expected = [
- ['idsite' => '1', 'site_name' => 'Piwik test', 'role' => 'admin', 'capabilities' => []],
- ['idsite' => '2', 'site_name' => 'Piwik test', 'role' => 'view', 'capabilities' => []],
- ['idsite' => '3', 'site_name' => 'Piwik test', 'role' => 'view', 'capabilities' => []],
+ ['idsite' => '1', 'site_name' => 'Piwik test', 'role' => 'admin', 'capabilities' => []],
+ ['idsite' => '2', 'site_name' => 'Piwik test', 'role' => 'view', 'capabilities' => []],
+ ['idsite' => '3', 'site_name' => 'Piwik test', 'role' => 'view', 'capabilities' => []],
];
$this->assertEquals($expected, $access);
}
@@ -678,8 +860,8 @@ class APITest extends IntegrationTestCase
$access = $this->api->getSitesAccessForUser('userLogin', $limit = null, $offset = 1);
$expected = [
- ['idsite' => '2', 'site_name' => 'Piwik test', 'role' => 'view', 'capabilities' => []],
- ['idsite' => '3', 'site_name' => 'Piwik test', 'role' => 'view', 'capabilities' => []],
+ ['idsite' => '2', 'site_name' => 'Piwik test', 'role' => 'view', 'capabilities' => []],
+ ['idsite' => '3', 'site_name' => 'Piwik test', 'role' => 'view', 'capabilities' => []],
];
$this->assertEquals($expected, $access);
}
@@ -692,8 +874,8 @@ class APITest extends IntegrationTestCase
$access = $this->api->getSitesAccessForUser('userLogin', $limit = 2, $offset = 1);
$expected = [
- ['idsite' => '2', 'site_name' => 'Piwik test', 'role' => 'view', 'capabilities' => []],
- ['idsite' => '3', 'site_name' => 'Piwik test', 'role' => 'view', 'capabilities' => []],
+ ['idsite' => '2', 'site_name' => 'Piwik test', 'role' => 'view', 'capabilities' => []],
+ ['idsite' => '3', 'site_name' => 'Piwik test', 'role' => 'view', 'capabilities' => []],
];
$this->assertEquals($expected, $access);
}
@@ -709,13 +891,26 @@ class APITest extends IntegrationTestCase
SitesManagerAPI::getInstance()->updateSite(1, 'searchTerm site');
SitesManagerAPI::getInstance()->updateSite(2, null, ['http://searchTerm.com']);
- SitesManagerAPI::getInstance()->updateSite(3, null, null, null, null, null, null, null, null, null, null, 'the searchTerm group');
+ SitesManagerAPI::getInstance()->updateSite(
+ 3,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 'the searchTerm group'
+ );
$access = $this->api->getSitesAccessForUser('userLogin', null, null, 'searchTerm');
$expected = [
- ['idsite' => '2', 'site_name' => 'Piwik test', 'role' => 'view', 'capabilities' => []],
- ['idsite' => '3', 'site_name' => 'Piwik test', 'role' => 'view', 'capabilities' => []],
- ['idsite' => '1', 'site_name' => 'searchTerm site', 'role' => 'admin', 'capabilities' => []],
+ ['idsite' => '2', 'site_name' => 'Piwik test', 'role' => 'view', 'capabilities' => []],
+ ['idsite' => '3', 'site_name' => 'Piwik test', 'role' => 'view', 'capabilities' => []],
+ ['idsite' => '1', 'site_name' => 'searchTerm site', 'role' => 'admin', 'capabilities' => []],
];
$this->assertEquals($expected, $access);
}
@@ -728,8 +923,8 @@ class APITest extends IntegrationTestCase
$access = $this->api->getSitesAccessForUser('userLogin', null, null, null, 'view');
$expected = [
- ['idsite' => '2', 'site_name' => 'Piwik test', 'role' => 'view', 'capabilities' => []],
- ['idsite' => '3', 'site_name' => 'Piwik test', 'role' => 'view', 'capabilities' => []],
+ ['idsite' => '2', 'site_name' => 'Piwik test', 'role' => 'view', 'capabilities' => []],
+ ['idsite' => '3', 'site_name' => 'Piwik test', 'role' => 'view', 'capabilities' => []],
];
$this->assertEquals($expected, $access);
}
@@ -745,8 +940,8 @@ class APITest extends IntegrationTestCase
$access = $this->api->getSitesAccessForUser('userLogin2', null, null, null, 'view');
$expected = [
- ['idsite' => '1', 'site_name' => 'Piwik test', 'role' => 'view', 'capabilities' => []],
- ['idsite' => '2', 'site_name' => 'Piwik test', 'role' => 'view', 'capabilities' => []],
+ ['idsite' => '1', 'site_name' => 'Piwik test', 'role' => 'view', 'capabilities' => []],
+ ['idsite' => '2', 'site_name' => 'Piwik test', 'role' => 'view', 'capabilities' => []],
];
$this->assertEquals($expected, $access);
}
@@ -761,8 +956,8 @@ class APITest extends IntegrationTestCase
$access = $this->api->getSitesAccessForUser('userLogin2', null, null, null, 'noaccess');
$expected = [
- ['idsite' => '2', 'site_name' => 'Piwik test', 'role' => 'noaccess', 'capabilities' => []],
- ['idsite' => '3', 'site_name' => 'Piwik test', 'role' => 'noaccess', 'capabilities' => []],
+ ['idsite' => '2', 'site_name' => 'Piwik test', 'role' => 'noaccess', 'capabilities' => []],
+ ['idsite' => '3', 'site_name' => 'Piwik test', 'role' => 'noaccess', 'capabilities' => []],
];
$this->assertEquals($expected, $access);
}
@@ -774,8 +969,8 @@ class APITest extends IntegrationTestCase
$access = $this->api->getSitesAccessForUser('userLogin2', null, null, null, 'some');
$expected = [
- ['idsite' => '1', 'site_name' => 'Piwik test', 'role' => 'view', 'capabilities' => []],
- ['idsite' => '2', 'site_name' => 'Piwik test', 'role' => 'admin', 'capabilities' => []],
+ ['idsite' => '1', 'site_name' => 'Piwik test', 'role' => 'view', 'capabilities' => []],
+ ['idsite' => '2', 'site_name' => 'Piwik test', 'role' => 'admin', 'capabilities' => []],
];
$this->assertEquals($expected, $access);
}
@@ -784,9 +979,9 @@ class APITest extends IntegrationTestCase
{
$access = $this->api->getSitesAccessForUser('userLogin');
$expected = [
- ['idsite' => '1', 'site_name' => 'Piwik test', 'role' => 'noaccess', 'capabilities' => []],
- ['idsite' => '2', 'site_name' => 'Piwik test', 'role' => 'noaccess', 'capabilities' => []],
- ['idsite' => '3', 'site_name' => 'Piwik test', 'role' => 'noaccess', 'capabilities' => []],
+ ['idsite' => '1', 'site_name' => 'Piwik test', 'role' => 'noaccess', 'capabilities' => []],
+ ['idsite' => '2', 'site_name' => 'Piwik test', 'role' => 'noaccess', 'capabilities' => []],
+ ['idsite' => '3', 'site_name' => 'Piwik test', 'role' => 'noaccess', 'capabilities' => []],
];
$this->assertEquals($expected, $access);
@@ -803,7 +998,7 @@ class APITest extends IntegrationTestCase
$this->expectException(\Exception::class);
$this->expectExceptionMessage('UsersManager_ExceptionMultipleRoleSet');
- $this->api->setUserAccess($this->login, array('view', 'admin'), array(1));
+ $this->api->setUserAccess($this->login, ['view', 'admin'], [1]);
}
public function test_setUserAccess_NeedsAtLeastOneRole()
@@ -811,7 +1006,7 @@ class APITest extends IntegrationTestCase
$this->expectException(\Exception::class);
$this->expectExceptionMessage('UsersManager_ExceptionNoRoleSet');
- $this->api->setUserAccess($this->login, array(TestCap2::ID), array(1));
+ $this->api->setUserAccess($this->login, [TestCap2::ID], [1]);
}
public function test_setUserAccess_NeedsAtLeastOneRoleAsString()
@@ -819,7 +1014,7 @@ class APITest extends IntegrationTestCase
$this->expectException(\Exception::class);
$this->expectExceptionMessage('UsersManager_ExceptionAccessValues');
- $this->api->setUserAccess($this->login, TestCap2::ID, array(1));
+ $this->api->setUserAccess($this->login, TestCap2::ID, [1]);
}
public function test_setUserAccess_InvalidCapability()
@@ -827,7 +1022,7 @@ class APITest extends IntegrationTestCase
$this->expectException(\Exception::class);
$this->expectExceptionMessage('UsersManager_ExceptionAccessValues');
- $this->api->setUserAccess($this->login, array('admin', 'foobar'), array(1));
+ $this->api->setUserAccess($this->login, ['admin', 'foobar'], [1]);
}
public function test_setUserAccess_NeedsAtLeastOneRoleNoneGiven()
@@ -835,7 +1030,7 @@ class APITest extends IntegrationTestCase
$this->expectException(\Exception::class);
$this->expectExceptionMessage('UsersManager_ExceptionNoRoleSet');
- $this->api->setUserAccess($this->login, array(), array(1));
+ $this->api->setUserAccess($this->login, [], [1]);
}
public function test_setUserAccess_CannotSetAdminToAnonymous()
@@ -843,7 +1038,7 @@ class APITest extends IntegrationTestCase
$this->expectException(\Exception::class);
$this->expectExceptionMessage('UsersManager_ExceptionAnonymousAccessNotPossible');
- $this->api->setUserAccess('anonymous', 'admin', array(1));
+ $this->api->setUserAccess('anonymous', 'admin', [1]);
}
public function test_setUserAccess_CannotSetWriteToAnonymous()
@@ -851,7 +1046,7 @@ class APITest extends IntegrationTestCase
$this->expectException(\Exception::class);
$this->expectExceptionMessage('UsersManager_ExceptionAnonymousAccessNotPossible');
- $this->api->setUserAccess('anonymous', 'write', array(1));
+ $this->api->setUserAccess('anonymous', 'write', [1]);
}
public function test_setUserAccess_UserDoesNotExist()
@@ -859,38 +1054,38 @@ class APITest extends IntegrationTestCase
$this->expectException(\Exception::class);
$this->expectExceptionMessage('UsersManager_ExceptionUserDoesNotExist');
- $this->api->setUserAccess('foobar', Admin::ID, array(1));
+ $this->api->setUserAccess('foobar', Admin::ID, [1]);
}
public function test_setUserAccess_SetRoleAndCapabilities()
{
- $access = array(TestCap2::ID, View::ID, TestCap3::ID);
- $this->api->setUserAccess($this->login, $access, array(1));
+ $access = [TestCap2::ID, View::ID, TestCap3::ID];
+ $this->api->setUserAccess($this->login, $access, [1]);
$access = $this->model->getSitesAccessFromUser($this->login);
- $expected = array(
- array('site' => '1', 'access' => 'view'),
- array('site' => '1', 'access' => TestCap2::ID),
- array('site' => '1', 'access' => TestCap3::ID),
- );
+ $expected = [
+ ['site' => '1', 'access' => 'view'],
+ ['site' => '1', 'access' => TestCap2::ID],
+ ['site' => '1', 'access' => TestCap3::ID],
+ ];
$this->assertEquals($expected, $access);
}
public function test_setUserAccess_SetRoleAsString()
{
- $this->api->setUserAccess($this->login, View::ID, array(1));
+ $this->api->setUserAccess($this->login, View::ID, [1]);
$access = $this->model->getSitesAccessFromUser($this->login);
- $this->assertEquals(array(array('site' => '1', 'access' => 'view')), $access);
+ $this->assertEquals([['site' => '1', 'access' => 'view']], $access);
}
public function test_setUserAccess_SetRoleAsArray()
{
- $this->api->setUserAccess($this->login, array(View::ID), array(1));
+ $this->api->setUserAccess($this->login, [View::ID], [1]);
$access = $this->model->getSitesAccessFromUser($this->login);
- $this->assertEquals(array(array('site' => '1', 'access' => 'view')), $access);
+ $this->assertEquals([['site' => '1', 'access' => 'view']], $access);
}
public function test_addCapabilities_failsWhenNotCapabilityIsGivenAsString()
@@ -898,7 +1093,7 @@ class APITest extends IntegrationTestCase
$this->expectException(\Exception::class);
$this->expectExceptionMessage('UsersManager_ExceptionAccessValues');
- $this->api->addCapabilities($this->login, View::ID, array(1));
+ $this->api->addCapabilities($this->login, View::ID, [1]);
}
public function test_addCapabilities_failsWhenNotCapabilityIsGivenAsArray()
@@ -906,7 +1101,7 @@ class APITest extends IntegrationTestCase
$this->expectException(\Exception::class);
$this->expectExceptionMessage('UsersManager_ExceptionAccessValues');
- $this->api->addCapabilities($this->login, array(TestCap2::ID, View::ID), array(1));
+ $this->api->addCapabilities($this->login, [TestCap2::ID, View::ID], [1]);
}
public function test_addCapabilities_failsWhenUserDoesNotExist()
@@ -914,31 +1109,31 @@ class APITest extends IntegrationTestCase
$this->expectException(\Exception::class);
$this->expectExceptionMessage('UsersManager_ExceptionUserDoesNotExist');
- $this->api->addCapabilities('foobar', array(TestCap2::ID), array(1));
+ $this->api->addCapabilities('foobar', [TestCap2::ID], [1]);
}
public function test_addCapabilities_DoesNotAddSameCapabilityTwice()
{
- $addAccess = array(TestCap2::ID, View::ID, TestCap3::ID);
- $this->api->setUserAccess($this->login, $addAccess, array(1));
+ $addAccess = [TestCap2::ID, View::ID, TestCap3::ID];
+ $this->api->setUserAccess($this->login, $addAccess, [1]);
$access = $this->model->getSitesAccessFromUser($this->login);
- $expected = array(
- array('site' => '1', 'access' => 'view'),
- array('site' => '1', 'access' => TestCap2::ID),
- array('site' => '1', 'access' => TestCap3::ID),
- );
+ $expected = [
+ ['site' => '1', 'access' => 'view'],
+ ['site' => '1', 'access' => TestCap2::ID],
+ ['site' => '1', 'access' => TestCap3::ID],
+ ];
$this->assertEquals($expected, $access);
- $this->api->addCapabilities($this->login, array(TestCap2::ID, TestCap3::ID), array(1));
+ $this->api->addCapabilities($this->login, [TestCap2::ID, TestCap3::ID], [1]);
$access = $this->model->getSitesAccessFromUser($this->login);
$this->assertEquals($expected, $access);
- $this->api->addCapabilities($this->login, array(TestCap2::ID, TestCap1::ID, TestCap3::ID), array(1));
+ $this->api->addCapabilities($this->login, [TestCap2::ID, TestCap1::ID, TestCap3::ID], [1]);
- $expected[] = array('site' => '1', 'access' => TestCap1::ID);
+ $expected[] = ['site' => '1', 'access' => TestCap1::ID];
$access = $this->model->getSitesAccessFromUser($this->login);
$this->assertEquals($expected, $access);
}
@@ -947,27 +1142,27 @@ class APITest extends IntegrationTestCase
{
$access = $this->model->getSitesAccessFromUser($this->login);
- $this->assertEquals(array(), $access);
+ $this->assertEquals([], $access);
- $this->api->addCapabilities($this->login, array(TestCap2::ID, TestCap3::ID), array(1));
+ $this->api->addCapabilities($this->login, [TestCap2::ID, TestCap3::ID], [1]);
- $this->assertEquals(array(), $access);
+ $this->assertEquals([], $access);
}
public function test_addCapabilities_DoesNotAddCapabilitiesWhichAreIncludedInRoleAlready()
{
- $this->api->setUserAccess($this->login, Write::ID, array(1));
+ $this->api->setUserAccess($this->login, Write::ID, [1]);
$access = $this->model->getSitesAccessFromUser($this->login);
- $expected = array(
- array('site' => '1', 'access' => 'write'),
- );
+ $expected = [
+ ['site' => '1', 'access' => 'write'],
+ ];
$this->assertEquals($expected, $access);
- $this->api->addCapabilities($this->login, array(TestCap2::ID, TestCap3::ID), array(1));
+ $this->api->addCapabilities($this->login, [TestCap2::ID, TestCap3::ID], [1]);
- $expected[] = array('site' => '1', 'access' => TestCap3::ID);
+ $expected[] = ['site' => '1', 'access' => TestCap3::ID];
$access = $this->model->getSitesAccessFromUser($this->login);
// did not add TestCap2
@@ -976,16 +1171,16 @@ class APITest extends IntegrationTestCase
public function test_addCapabilities_DoesAddCapabilitiesWhichAreNotIncludedInRoleYetAlready()
{
- $this->api->setUserAccess($this->login, Admin::ID, array(1));
+ $this->api->setUserAccess($this->login, Admin::ID, [1]);
$access = $this->model->getSitesAccessFromUser($this->login);
- $expected = array(
- array('site' => '1', 'access' => 'admin'),
- );
+ $expected = [
+ ['site' => '1', 'access' => 'admin'],
+ ];
$this->assertEquals($expected, $access);
- $this->api->addCapabilities($this->login, array(TestCap2::ID, TestCap1::ID, TestCap3::ID), array(1));
+ $this->api->addCapabilities($this->login, [TestCap2::ID, TestCap1::ID, TestCap3::ID], [1]);
$access = $this->model->getSitesAccessFromUser($this->login);
$this->assertEquals($expected, $access);
@@ -996,7 +1191,7 @@ class APITest extends IntegrationTestCase
$this->expectException(\Exception::class);
$this->expectExceptionMessage('UsersManager_ExceptionAccessValues');
- $this->api->removeCapabilities($this->login, View::ID, array(1));
+ $this->api->removeCapabilities($this->login, View::ID, [1]);
}
public function test_removeCapabilities_failsWhenNotCapabilityIsGivenAsArray()
@@ -1004,7 +1199,7 @@ class APITest extends IntegrationTestCase
$this->expectException(\Exception::class);
$this->expectExceptionMessage('UsersManager_ExceptionAccessValues');
- $this->api->removeCapabilities($this->login, array(TestCap2::ID, View::ID), array(1));
+ $this->api->removeCapabilities($this->login, [TestCap2::ID, View::ID], [1]);
}
public function test_removeCapabilities_failsWhenUserDoesNotExist()
@@ -1012,21 +1207,21 @@ class APITest extends IntegrationTestCase
$this->expectException(\Exception::class);
$this->expectExceptionMessage('UsersManager_ExceptionUserDoesNotExist');
- $this->api->removeCapabilities('foobar', array(TestCap2::ID), array(1));
+ $this->api->removeCapabilities('foobar', [TestCap2::ID], [1]);
}
public function test_removeCapabilities()
{
- $addAccess = array(View::ID, TestCap2::ID, TestCap3::ID, TestCap1::ID);
- $this->api->setUserAccess($this->login, $addAccess, array(1));
+ $addAccess = [View::ID, TestCap2::ID, TestCap3::ID, TestCap1::ID];
+ $this->api->setUserAccess($this->login, $addAccess, [1]);
$access = $this->getAccessInSite($this->login, 1);
$this->assertEquals($addAccess, $access);
- $this->api->removeCapabilities($this->login, array(TestCap3::ID, TestCap2::ID), 1);
+ $this->api->removeCapabilities($this->login, [TestCap3::ID, TestCap2::ID], 1);
$access = $this->getAccessInSite($this->login, 1);
- $this->assertEquals(array(View::ID, TestCap1::ID), $access);
+ $this->assertEquals([View::ID, TestCap1::ID], $access);
}
public function test_setSuperUserAccess_failsIfCurrentPasswordIsIncorrect()
@@ -1037,10 +1232,211 @@ class APITest extends IntegrationTestCase
$this->api->setSuperUserAccess($this->login, true, 'asldfkjds');
}
+ public function testInviteUserAsSuperUser()
+ {
+ $eventWasFired = false;
+
+ EventDispatcher::getInstance()->addObserver('UsersManager.inviteUser.end', function ($userLogin, $email) use (&$eventWasFired) {
+ self::assertEquals('pendingLoginTest', $userLogin);
+ self::assertEquals('pendingLoginTest@matomo.org', $email);
+ $eventWasFired = true;
+ });
+
+ $this->api->inviteUser('pendingLoginTest', 'pendingLoginTest@matomo.org', 1);
+ $user = $this->model->isPendingUser('pendingLoginTest');
+ $this->assertTrue($user);
+ $this->assertTrue($eventWasFired);
+ }
+
+ public function testInviteUserAsAdmin()
+ {
+ $this->addUserWithAccess('adminUser', 'admin', 1);
+ $this->setCurrentUser('adminUser', 'admin', 1);
+
+ $this->api->inviteUser('pendingLoginTest', 'pendingLoginTest@matomo.org', 1);
+ $user = $this->model->isPendingUser('pendingLoginTest');
+ $this->assertTrue($user);
+ }
+
+ public function testInviteUserAsAdminForAnotherSiteDoesntWork()
+ {
+ self::expectException(\Exception::class);
+
+ $this->addUserWithAccess('adminUser', 'admin', 1);
+ $this->setCurrentUser('adminUser', 'admin', 1);
+
+ $this->api->inviteUser('pendingLoginTest', 'pendingLoginTest@matomo.org', 2);
+ }
+
+ public function testInviteUserAsWriteUserNotAllowed()
+ {
+ self::expectException(NoAccessException::class);
+
+ $this->addUserWithAccess('anyUser', 'write', 1);
+ $this->setCurrentUser('anyUser', 'write', 1);
+
+ $this->api->inviteUser('pendingLoginTest', 'pendingLoginTest@matomo.org', 1);
+ }
+
+ public function testInviteUserAsUserNotAllowed()
+ {
+ self::expectException(NoAccessException::class);
+
+ $this->addUserWithAccess('anyUser', 'view', 1);
+ $this->setCurrentUser('anyUser', 'view', 1);
+
+ $this->api->inviteUser('pendingLoginTest', 'pendingLoginTest@matomo.org', 1);
+ }
+
+ public function testInviteUserExpiredInGivenDays()
+ {
+ Date::$now = time(); // freeze time, so it doesn't change between inviting user and comparing the time
+ $expiredDays = 10;
+ $this->api->inviteUser('pendingLoginTest', 'pendingLoginTest@matomo.org', null, $expiredDays);
+ $user = $this->model->getUser('pendingLoginTest');
+ $expired = Date::factory($user['invite_expired_at'])->getTimestamp();
+ $now = Date::now()->getTimestamp();
+ $diff = $expired - $now;
+ $this->assertEquals($expiredDays, $diff / 3600 / 24);
+ }
+
+ public function testResendInviteAsSuperUser()
+ {
+ $this->api->inviteUser('pendingLoginTest', 'pendingLoginTest@matomo.org', 1);
+ $user = $this->model->isPendingUser('pendingLoginTest');
+ $this->assertTrue($user);
+
+ $eventWasFired = false;
+
+ EventDispatcher::getInstance()->addObserver('UsersManager.inviteUser.resendInvite', function ($userLogin) use (&$eventWasFired) {
+ self::assertEquals('pendingLoginTest', $userLogin);
+ $eventWasFired = true;
+ });
+
+ $this->api->resendInvite('pendingLoginTest');
+ self::assertTrue($eventWasFired);
+ }
+
+ public function testResendInviteFailsIfUserNotPending()
+ {
+ self::expectException(\Exception::class);
+ self::expectExceptionMessage('UsersManager_ExceptionUserDoesNotExist');
+
+ $this->api->resendInvite('notExistingUser');
+ }
+
+ public function testResendInviteAsInviterWithAdminAccess()
+ {
+ $this->addUserWithAccess('adminUser', 'admin', 1);
+ $this->setCurrentUser('adminUser', 'admin', 1);
+
+ $this->api->inviteUser('pendingLoginTest', 'pendingLoginTest@matomo.org', 1);
+ $user = $this->model->isPendingUser('pendingLoginTest');
+ $this->assertTrue($user);
+
+ $eventWasFired = false;
+
+ EventDispatcher::getInstance()->addObserver('UsersManager.inviteUser.resendInvite', function ($userLogin) use (&$eventWasFired) {
+ self::assertEquals('pendingLoginTest', $userLogin);
+ $eventWasFired = true;
+ });
+
+ $this->api->resendInvite('pendingLoginTest');
+ self::assertTrue($eventWasFired);
+ }
+
+ public function testResendInviteFailsAsInviterWithoutAdminAccess()
+ {
+ self::expectException(NoAccessException::class);
+
+ $this->addUserWithAccess('adminUser', 'write', 1);
+
+ // fake admin access for inviting the user
+ $this->setCurrentUser('adminUser', 'admin', 1);
+
+ $this->api->inviteUser('pendingLoginTest', 'pendingLoginTest@matomo.org', 1);
+ $user = $this->model->isPendingUser('pendingLoginTest');
+ $this->assertTrue($user);
+
+ // degraded to write access
+ $this->setCurrentUser('adminUser', 'admin', []);
+ $this->setCurrentUser('adminUser', 'write', 1);
+
+ $this->api->resendInvite('pendingLoginTest');
+ }
+
+ public function testResendInviteFailsAsNotInvitingAdmin()
+ {
+ self::expectException(NoAccessException::class);
+ self::expectExceptionMessage('UsersManager_ExceptionResendInviteDenied');
+
+ $this->addUserWithAccess('adminUser', 'admin', 1);
+ $this->addUserWithAccess('anotherAdminUser', 'admin', 1);
+
+ $this->setCurrentUser('adminUser', 'admin', 1);
+
+ $this->api->inviteUser('pendingLoginTest', 'pendingLoginTest@matomo.org', 1);
+ $user = $this->model->isPendingUser('pendingLoginTest');
+ $this->assertTrue($user);
+
+ // another admin tries to resend invite
+ $this->setCurrentUser('anotherAdminUser', 'admin', 1);
+
+ $this->api->resendInvite('pendingLoginTest');
+ }
+
+ public function testInvitedUserCanBeRemovedBySuperUser()
+ {
+ Fixture::createSuperUser();
+ $this->addUserWithAccess('adminUser', 'admin', 1);
+ $this->setCurrentUser('adminUser', 'admin', 1);
+
+ $this->api->inviteUser('pendingLoginTest', 'pendingLoginTest@matomo.org', 1);
+ $user = $this->model->isPendingUser('pendingLoginTest');
+ $this->assertTrue($user);
+
+ $this->setCurrentUser('superUserLogin', 'superuser', 1);
+
+ $this->api->deleteUser('pendingLoginTest');
+ self::assertEmpty($this->model->getUser('pendingLoginTest'));
+ }
+
+ public function testInvitedUserCanBeRemovedByInviter()
+ {
+ Fixture::createSuperUser();
+ $this->addUserWithAccess('adminUser', 'admin', 1);
+ $this->setCurrentUser('adminUser', 'admin', 1);
+
+ $this->api->inviteUser('pendingLoginTest', 'pendingLoginTest@matomo.org', 1);
+ $user = $this->model->isPendingUser('pendingLoginTest');
+ $this->assertTrue($user);
+
+ $this->api->deleteUser('pendingLoginTest');
+ self::assertEmpty($this->model->getUser('pendingLoginTest'));
+ }
+
+ public function testInvitedUserCanNOTBeRemovedByOtherAdmin()
+ {
+ self::expectException(\Exception::class);
+ self::expectExceptionMessage('UsersManager_ExceptionUserDoesNotExist');
+
+ $this->addUserWithAccess('adminUser', 'admin', 1);
+ $this->addUserWithAccess('adminUser2', 'admin', 1);
+ $this->setCurrentUser('adminUser', 'admin', 1);
+
+ $this->api->inviteUser('pendingLoginTest', 'pendingLoginTest@matomo.org', 1);
+ $user = $this->model->isPendingUser('pendingLoginTest');
+ $this->assertTrue($user);
+
+ $this->setCurrentUser('adminUser2', 'admin', 1);
+
+ $this->api->deleteUser('pendingLoginTest');
+ }
+
private function getAccessInSite($login, $idSite)
{
$access = $this->model->getSitesAccessFromUser($login);
- $ids = array();
+ $ids = [];
foreach ($access as $entry) {
if ($entry['site'] == $idSite) {
$ids[] = $entry['access'];
@@ -1056,17 +1452,24 @@ class APITest extends IntegrationTestCase
public function provideContainerConfig()
{
- return array(
- 'Piwik\Access' => new FakeAccess(),
- 'usersmanager.user_preference_names' => \DI\add(['randomDoesNotExist', 'RandomNOTREQUESTED', 'preferenceName']),
- 'observers.global' => \DI\add([
- ['Access.Capability.addCapabilities', \DI\value(function (&$capabilities) {
- $capabilities[] = new TestCap1();
- $capabilities[] = new TestCap2();
- $capabilities[] = new TestCap3();
- })],
- ]),
- );
+ return [
+ 'Piwik\Access' => new FakeAccess(),
+ 'usersmanager.user_preference_names' => \DI\add([
+ 'randomDoesNotExist',
+ 'RandomNOTREQUESTED',
+ 'preferenceName'
+ ]),
+ 'observers.global' => \DI\add([
+ [
+ 'Access.Capability.addCapabilities',
+ \DI\value(function (&$capabilities) {
+ $capabilities[] = new TestCap1();
+ $capabilities[] = new TestCap2();
+ $capabilities[] = new TestCap3();
+ })
+ ],
+ ]),
+ ];
}
private function addUserWithAccess($username, $accessLevel, $idSite, $email = null)
@@ -1075,7 +1478,7 @@ class APITest extends IntegrationTestCase
if ($accessLevel == 'superuser') {
$userUpdater = new UserUpdater();
$userUpdater->setSuperUserAccessWithoutCurrentPassword($username, true);
- } else if ($accessLevel) {
+ } elseif ($accessLevel) {
$this->api->setUserAccess($username, $accessLevel, $idSite);
}
}
@@ -1086,8 +1489,10 @@ class APITest extends IntegrationTestCase
FakeAccess::$superUser = $accessLevel == 'superuser';
if ($accessLevel == 'view') {
FakeAccess::$idSitesView = is_array($idSite) ? $idSite : [$idSite];
- } else if ($accessLevel == 'admin') {
+ } elseif ($accessLevel == 'admin') {
FakeAccess::$idSitesAdmin = is_array($idSite) ? $idSite : [$idSite];
+ } elseif ($accessLevel == 'write') {
+ FakeAccess::$idSitesWrite = is_array($idSite) ? $idSite : [$idSite];
}
}
@@ -1095,7 +1500,11 @@ class APITest extends IntegrationTestCase
{
foreach ($users as &$user) {
unset($user['date_registered']);
+ unset($user['invite_expired_at']);
+ unset($user['invite_accept_at']);
+ unset($user['invite_token']);
unset($user['invite_status']);
+ unset($user['invited_by']);
}
}
}
diff --git a/plugins/UsersManager/tests/Integration/UserInviteTest.php b/plugins/UsersManager/tests/Integration/UserInviteTest.php
index 321f037d3c..2c61bb90f4 100644
--- a/plugins/UsersManager/tests/Integration/UserInviteTest.php
+++ b/plugins/UsersManager/tests/Integration/UserInviteTest.php
@@ -1,4 +1,5 @@
<?php
+
/**
* Matomo - free/libre analytics platform
*
@@ -8,10 +9,16 @@
namespace Piwik\Plugins\UsersManager\tests\Integration;
+use PHPMailer\PHPMailer\PHPMailer;
+use Piwik\API\Request;
use Piwik\Date;
+use Piwik\EventDispatcher;
use Piwik\Http;
+use Piwik\Plugins\UsersManager\API;
use Piwik\Plugins\UsersManager\Model;
+use Piwik\Plugins\UsersManager\Tasks;
use Piwik\Tests\Framework\Fixture;
+use Piwik\Tests\Framework\Mock\FakeAccess;
use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
/**
@@ -22,45 +29,102 @@ use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
*/
class UserInviteTest extends IntegrationTestCase
{
-
/**
* @var Model
*/
private $model;
- protected $dateTime = '2013-01-23 01:23:45';
- protected $token = "13cb9dcef6cc70b02a640cee30dc8ce9";
- protected $pendingUser = array(
- 'login' => '000pendingUser3',
- 'email' => 'pendinguser3light@example.com'
- );
+ protected $pendingUser = [
+ 'login' => '000pendingUser3',
+ 'email' => 'pendinguser3light@example.com'
+ ];
+ protected $capturedToken = null;
public function setUp(): void
{
parent::setUp();
+ Fixture::createSuperUser();
+ Fixture::createWebsite('2010-01-01 05:00:00');
$this->model = new Model();
- $this->model->addUser($this->pendingUser['login'], '', $this->pendingUser['email'], $this->dateTime, 1);
}
- public function test_getInviteUser()
+ public function testInviteUser()
{
+ Request::processRequest(
+ 'UsersManager.inviteUser',
+ [
+ 'userLogin' => $this->pendingUser['login'],
+ 'email' => $this->pendingUser['email'],
+ 'idSite' => 1,
+ 'expiryInDays' => 7
+ ]
+ );
+
$user = $this->model->getUser($this->pendingUser['login']);
- $this->assertEquals('pending', $user['invite_status']);
- }
+ // check token in database matches token in email
+ self::assertEquals($user['invite_token'], $this->model->hashTokenAuth($this->capturedToken));
+ $response = Http::sendHttpRequest(
+ Fixture::getRootUrl() . 'tests/PHPUnit/proxy/index.php?module=Login&action=acceptInvitation&token=' . $this->capturedToken,
+ 10
+ );
- public function test_addInviteUserToken()
- {
- $this->model->addTokenAuth($this->pendingUser['login'], $this->token, "Invite Token",
- Date::now()->getDatetime(),
- Date::now()->addDay(7)->getDatetime());
+ $this->assertStringContainsString('Accept invitation', $response, 'error on accept invite page');
+
+ $response = Http::sendHttpRequest(
+ Fixture::getRootUrl() . 'tests/PHPUnit/proxy/index.php?module=Login&action=declineInvitation&token=' . $this->capturedToken,
+ 10
+ );
+
+ $this->assertStringContainsString('Decline this invitation', $response, 'error on decline invite page');
+
+ // move date after expire time, but before deletion time
+ Date::$now = Date::today()->addDay(8)->getTimestamp();
+
+ $eventWasFired = false;
- $response = Http::sendHttpRequest(Fixture::getRootUrl() . 'tests/PHPUnit/proxy/index.php?module=Login&action=acceptInvitation&token=' . $this->token,
- 10);
+ EventDispatcher::getInstance()->addObserver('UsersManager.deleteUser', function ($userLogin) use (&$eventWasFired) {
+ self::assertEquals($this->pendingUser['login'], $userLogin);
+ $eventWasFired = true;
+ });
- $this->assertStringContainsString('Accept invitation', $response, 'error on accept invitation');
+ $tasks = new Tasks(new Model(), API::getInstance());
+ $tasks->cleanUpExpiredInvites();
+
+ // Task should not have removed the user yet, as expiry date time is not 3 days ago
+ self::assertIsArray($this->model->getUser($this->pendingUser['login']));
+
+ self::assertFalse($eventWasFired);
+
+ // move date after expire and deletion time
+ Date::$now = Date::today()->addDay(3)->getTimestamp();
+
+ $tasks->cleanUpExpiredInvites();
+
+ // Task should have removed the user now
+ self::assertEmpty($this->model->getUser($this->pendingUser['login']));
+
+ self::assertTrue($eventWasFired);
}
+ public function provideContainerConfig()
+ {
+ return [
+ 'Piwik\Access' => new FakeAccess(),
+ 'observers.global' => \DI\add([
+ ['Test.Mail.send', \DI\value(function (PHPMailer $mail) {
+ $body = $mail->createBody();
+ $body = preg_replace("/=[\r\n]+/", '', $body);
+ preg_match('/&token=[\s]*3D([a-zA-Z0-9=\s]+)"/', $body, $matches);
+ if (!empty($matches[1])) {
+ $capturedToken = $matches[1];
+ $capturedToken = preg_replace('/=\s*/', '', $capturedToken);
+ $this->capturedToken = $capturedToken;
+ }
+ })],
+ ]),
+ ];
+ }
}
diff --git a/plugins/UsersManager/tests/Integration/UsersManagerTest.php b/plugins/UsersManager/tests/Integration/UsersManagerTest.php
index 49059acc10..92188ea024 100644
--- a/plugins/UsersManager/tests/Integration/UsersManagerTest.php
+++ b/plugins/UsersManager/tests/Integration/UsersManagerTest.php
@@ -13,18 +13,15 @@ use Piwik\Access;
use Piwik\Auth\Password;
use Piwik\Date;
use Piwik\Option;
-use Piwik\Piwik;
use Piwik\Plugins\SitesManager\API as APISitesManager;
use Piwik\Plugins\UsersManager\API;
use Piwik\Plugins\UsersManager\Model;
use Piwik\Plugins\UsersManager\NewsletterSignup;
use Piwik\Plugins\UsersManager\UsersManager;
use Piwik\Plugins\UsersManager\UserUpdater;
-use Piwik\SettingsPiwik;
use Piwik\Tests\Framework\Fixture;
use Piwik\Tests\Framework\Mock\FakeAccess;
use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
-use Piwik\View;
/**
@@ -66,7 +63,7 @@ class UsersManagerTest extends IntegrationTestCase
FakeAccess::$superUserLogin = 'superusertest';
$this->backupIdentity = FakeAccess::$identity;
- $this->api = API::getInstance();
+ $this->api = API::getInstance();
$this->model = new Model();
}
@@ -109,10 +106,13 @@ class UsersManagerTest extends IntegrationTestCase
unset($userAfter['idchange_last_viewed']);
unset($userAfter['password']);
unset($userAfter['invite_status']);
-
+ unset($userAfter['invite_token']);
+ unset($userAfter['invite_expired_at']);
+ unset($userAfter['invite_accept_at']);
+ unset($userAfter['invited_by']);
// implicitly checks password!
- $user['email'] = $newEmail;
+ $user['email'] = $newEmail;
$user['superuser_access'] = 0;
$user['twofactor_secret'] = '';
@@ -130,9 +130,11 @@ class UsersManagerTest extends IntegrationTestCase
$this->expectExceptionMessage('UsersManager_ExceptionInvalidPassword');
$login = "login";
- $user = array('login' => $login,
- 'password' => "geqgeagae",
- 'email' => "test@test.com");
+ $user = array(
+ 'login' => $login,
+ 'password' => "geqgeagae",
+ 'email' => "test@test.com",
+ );
$this->api->addUser($user['login'], $user['password'], $user['email']);
@@ -150,10 +152,10 @@ class UsersManagerTest extends IntegrationTestCase
public function getAddUserInvalidLoginData()
{
return array(
- array(9, "password", "email@email.com"), // wrong login / integer => exception
- array("gegag'ggea'", "password", "email@email.com"), // wrong login / too short => exception
- array("gegag11gge&", "password", "email@email.com"), // wrong login / too long => exception
- array("geg'ag11gge@", "password", "email@email.com"), // wrong login / bad characters => exception
+ array(9, "password", "email@email.com"), // wrong login / integer => exception
+ array("gegag'ggea'", "password", "email@email.com"), // wrong login / too short => exception
+ array("gegag11gge&", "password", "email@email.com"), // wrong login / too long => exception
+ array("geg'ag11gge@", "password", "email@email.com"), // wrong login / bad characters => exception
);
}
@@ -177,6 +179,25 @@ class UsersManagerTest extends IntegrationTestCase
$this->api->addUser("test", "password2", "em2ail@email.com");
}
+ public function testAddUserExistingEmail()
+ {
+ $this->expectException(\Exception::class);
+ $this->expectExceptionMessage('UsersManager_ExceptionEmailExists');
+
+ $this->api->addUser("test", "password", "email@email.com");
+ $this->api->addUser("test2", "password2", "email@email.com");
+ }
+
+
+ public function testAddUserExistingEmailAsUserName()
+ {
+ $this->expectException(\Exception::class);
+ $this->expectExceptionMessage('UsersManager_ExceptionEmailExistsAsLogin');
+
+ $this->api->addUser("email@email.com", "password", "email2@email.com");
+ $this->api->addUser("test2", "password2", "email@email.com");
+ }
+
/**
* @see https://github.com/piwik/piwik/issues/8548
*/
@@ -195,8 +216,8 @@ class UsersManagerTest extends IntegrationTestCase
public function getWrongPasswordTestData()
{
return array(
- array("geggeqgeqag", "pas", "email@email.com"), // too short -> exception
- array("geggeqgeqag", "", "email@email.com"), // empty -> exception
+ array("geggeqgeqag", "pas", "email@email.com"), // too short -> exception
+ array("geggeqgeqag", "", "email@email.com"), // empty -> exception
);
}
@@ -225,7 +246,9 @@ class UsersManagerTest extends IntegrationTestCase
public function testAddUserLongPassword()
{
$login = "geggeqgeqag";
- $this->api->addUser($login, "geqgeagaegeqgeagaegeqgeagaegeqgeagaegeqgeagaegeqgeagaegeqgeagaegeqgeagaegeqgeagaegeqgeagaegeqgeagaeg", "mgeagi@geq.com");
+ $this->api->addUser($login,
+ "geqgeagaegeqgeagaegeqgeagaegeqgeagaegeqgeagaegeqgeagaegeqgeagaegeqgeagaegeqgeagaegeqgeagaegeqgeagaeg",
+ "mgeagi@geq.com");
$user = $this->api->getUser($login);
$this->assertEquals($login, $user['login']);
}
@@ -245,7 +268,7 @@ class UsersManagerTest extends IntegrationTestCase
// check that the date registered is correct
$this->assertTrue($time <= strtotime($user['date_registered']) && strtotime($user['date_registered']) <= time(),
- "the date_registered " . strtotime($user['date_registered']) . " is different from the time() " . time());
+ "the date_registered " . strtotime($user['date_registered']) . " is different from the time() " . time());
// check that password and token are properly set
$this->assertEquals(60, strlen($user['password']));
@@ -280,7 +303,7 @@ class UsersManagerTest extends IntegrationTestCase
$access = $this->api->getSitesAccessFromUser($login);
$this->assertEquals([
- ['site' => 1, 'access' => 'view'],
+ ['site' => 1, 'access' => 'view'],
], $access);
}
@@ -295,7 +318,8 @@ class UsersManagerTest extends IntegrationTestCase
$this->api->addUser('userLogin2', 'password', 'userlogin2@email.com');
}
- public function test_addUser_shouldNotAllowAdminUsersToCreateUsersWithAccessToSite_ThatAdminUserDoesNotHaveAccessTo()
+ public function test_addUser_shouldNotAllowAdminUsersToCreateUsersWithAccessToSite_ThatAdminUserDoesNotHaveAccessTo(
+ )
{
$this->expectException(\Exception::class);
$this->expectExceptionMessage('checkUserHasAdminAccess Fake exception');
@@ -440,17 +464,32 @@ class UsersManagerTest extends IntegrationTestCase
$this->api->addUser("geggeqge632ge56a4qag", "geqgegeagae", "tesggt@tesgt.com");
$this->api->addUser("geggeqgeqagqegg", "geqgeaggggae", "tesgggt@tesgt.com");
- Option::set('UsersManager.lastSeen.gegg4564eqgeqag',$now = time());
+ Option::set('UsersManager.lastSeen.gegg4564eqgeqag', $now = time());
$users = $this->api->getUsers();
$users = $this->_removeNonTestableFieldsFromUsers($users);
- $user1 = array('login' => "gegg4564eqgeqag", 'email' => "tegst@tesgt.com", 'superuser_access' => 0, 'uses_2fa' => false, 'last_seen' => Date::getDatetimeFromTimestamp($now));
- $user2 = array('login' => "geggeqge632ge56a4qag", 'email' => "tesggt@tesgt.com", 'superuser_access' => 0, 'uses_2fa' => false);
- $user3 = array('login' => "geggeqgeqagqegg", 'email' => "tesgggt@tesgt.com", 'superuser_access' => 0, 'uses_2fa' => false);
+ $user1 = array('login' => "gegg4564eqgeqag",
+ 'email' => "tegst@tesgt.com",
+ 'superuser_access' => 0,
+ 'uses_2fa' => false,
+ 'last_seen' => Date::getDatetimeFromTimestamp($now)
+ );
+ $user2 = array('login' => "geggeqge632ge56a4qag",
+ 'email' => "tesggt@tesgt.com",
+ 'superuser_access' => 0,
+ 'uses_2fa' => false
+ );
+ $user3 = array('login' => "geggeqgeqagqegg",
+ 'email' => "tesgggt@tesgt.com",
+ 'superuser_access' => 0,
+ 'uses_2fa' => false
+ );
$expectedUsers = array($user1, $user2, $user3);
$this->assertEquals($expectedUsers, $users);
- $this->assertEquals(array($user1), $this->_removeNonTestableFieldsFromUsers($this->api->getUsers('gegg4564eqgeqag')));
- $this->assertEquals(array($user1, $user2), $this->_removeNonTestableFieldsFromUsers($this->api->getUsers('gegg4564eqgeqag,geggeqge632ge56a4qag')));
+ $this->assertEquals(array($user1),
+ $this->_removeNonTestableFieldsFromUsers($this->api->getUsers('gegg4564eqgeqag')));
+ $this->assertEquals(array($user1, $user2),
+ $this->_removeNonTestableFieldsFromUsers($this->api->getUsers('gegg4564eqgeqag,geggeqge632ge56a4qag')));
}
public function testGetUsers_withViewAccess_shouldThrowAnException()
@@ -475,6 +514,10 @@ class UsersManagerTest extends IntegrationTestCase
unset($user['date_registered']);
unset($user['ts_password_modified']);
unset($user['invite_status']);
+ unset($user['invite_expired_at']);
+ unset($user['invite_token']);
+ unset($user['invite_accept_at']);
+ unset($user['invited_by']);
}
return $users;
}
@@ -518,7 +561,7 @@ class UsersManagerTest extends IntegrationTestCase
$this->expectException(\Exception::class);
$this->expectExceptionMessage('checkUserHasSomeAdminAccess Fake exception');
- FakeAccess::clearAccess($superUser = false, $admin =array(), $view = array(1));
+ FakeAccess::clearAccess($superUser = false, $admin = array(), $view = array(1));
$this->api->getUserLoginFromUserEmail('tegst@tesgt.com');
}
@@ -527,7 +570,7 @@ class UsersManagerTest extends IntegrationTestCase
$this->expectException(\Exception::class);
$this->expectExceptionMessage('UsersManager_ExceptionUserDoesNotExist');
- FakeAccess::clearAccess($superUser = false, $admin =array(1), $view = array());
+ FakeAccess::clearAccess($superUser = false, $admin = array(1), $view = array());
$this->api->setUserAccess("nologin", "view", 1);
}
@@ -537,7 +580,7 @@ class UsersManagerTest extends IntegrationTestCase
$this->expectExceptionMessage('UsersManager_ExceptionAccessValues');
$this->api->addUser("gegg4564eqgeqag", "geqgegagae", "tegst@tesgt.com");
- FakeAccess::clearAccess($superUser = false, $admin =array(1), $view = array());
+ FakeAccess::clearAccess($superUser = false, $admin = array(1), $view = array());
$this->api->setUserAccess("gegg4564eqgeqag", "viewnotknown", 1);
}
@@ -547,7 +590,7 @@ class UsersManagerTest extends IntegrationTestCase
$this->expectExceptionMessage('UsersManager_ExceptionAccessValues');
$this->api->addUser("gegg4564eqgeqag", "geqgegagae", "tegst@tesgt.com");
- FakeAccess::clearAccess($superUser = false, $admin =array(1), $view = array());
+ FakeAccess::clearAccess($superUser = false, $admin = array(1), $view = array());
$this->api->setUserAccess("gegg4564eqgeqag", "superuser", 1);
}
@@ -556,7 +599,7 @@ class UsersManagerTest extends IntegrationTestCase
$this->expectException(\Exception::class);
$this->expectExceptionMessage('UsersManager_ExceptionUserDoesNotExist');
- FakeAccess::clearAccess($superUser = false, $admin =array(1), $view = array());
+ FakeAccess::clearAccess($superUser = false, $admin = array(1), $view = array());
$this->api->setUserAccess('superusertest', 'view', 1);
}
@@ -769,7 +812,7 @@ class UsersManagerTest extends IntegrationTestCase
$pwd = $this->createCurrentUser();
- FakeAccess::$superUser= false;
+ FakeAccess::$superUser = false;
$this->api->setSuperUserAccess('nologin', false, $pwd);
}
@@ -901,9 +944,11 @@ class UsersManagerTest extends IntegrationTestCase
$this->expectExceptionMessage('UsersManager_ConfirmWithPassword');
$login = "login";
- $user = array('login' => $login,
- 'password' => "geqgeagae",
- 'email' => "test@test.com");
+ $user = array(
+ 'login' => $login,
+ 'password' => "geqgeagae",
+ 'email' => "test@test.com"
+ );
$this->api->addUser($user['login'], $user['password'], $user['email']);
@@ -917,9 +962,11 @@ class UsersManagerTest extends IntegrationTestCase
$this->expectExceptionMessage('UsersManager_CurrentPasswordNotCorrect');
$login = "login";
- $user = array('login' => $login,
- 'password' => "geqgeagae",
- 'email' => "test@test.com");
+ $user = array(
+ 'login' => $login,
+ 'password' => "geqgeagae",
+ 'email' => "test@test.com"
+ );
$this->api->addUser($user['login'], $user['password'], $user['email']);
@@ -933,9 +980,11 @@ class UsersManagerTest extends IntegrationTestCase
$this->expectExceptionMessage('UsersManager_CurrentPasswordNotCorrect');
$login = "login";
- $user = array('login' => $login,
- 'password' => "geqgeagae",
- 'email' => "test@test.com");
+ $user = array(
+ 'login' => $login,
+ 'password' => "geqgeagae",
+ 'email' => "test@test.com"
+ );
$this->api->addUser($user['login'], $user['password'], $user['email']);
// currently logged in is a super user and not "login". therefore the password of "login" won't work
@@ -948,9 +997,11 @@ class UsersManagerTest extends IntegrationTestCase
public function testUpdateUserNoEmail()
{
$login = "login";
- $user = array('login' => $login,
- 'password' => "geqgeagae",
- 'email' => "test@test.com");
+ $user = array(
+ 'login' => $login,
+ 'password' => "geqgeagae",
+ 'email' => "test@test.com"
+ );
$this->api->addUser($user['login'], $user['password'], $user['email']);
@@ -990,9 +1041,11 @@ class UsersManagerTest extends IntegrationTestCase
public function testUpdateUser()
{
$login = "login";
- $user = array('login' => $login,
- 'password' => "geqgeagae",
- 'email' => "test@test.com");
+ $user = array(
+ 'login' => $login,
+ 'password' => "geqgeagae",
+ 'email' => "test@test.com"
+ );
$this->api->addUser($user['login'], $user['password'], $user['email']);
@@ -1011,9 +1064,11 @@ class UsersManagerTest extends IntegrationTestCase
public function testGetUserByEmail()
{
- $user = array('login' => "login",
- 'password' => "geqgeagae",
- 'email' => "test@test.com");
+ $user = array(
+ 'login' => "login",
+ 'password' => "geqgeagae",
+ 'email' => "test@test.com"
+ );
$this->api->addUser($user['login'], $user['password'], $user['email']);
@@ -1038,23 +1093,24 @@ class UsersManagerTest extends IntegrationTestCase
$this->addSites(1);
$roles = $this->api->getAvailableRoles();
$expected = array(
- array (
- 'id' => 'view',
- 'name' => 'UsersManager_PrivView',
- 'description' => 'UsersManager_PrivViewDescription',
- 'helpUrl' => 'https://matomo.org/faq/general/faq_70/'
- ), array (
- 'id' => 'write',
- 'name' => 'UsersManager_PrivWrite',
- 'description' => 'UsersManager_PrivWriteDescription',
- 'helpUrl' => 'https://matomo.org/faq/general/faq_26910'
- ),
- array (
- 'id' => 'admin',
- 'name' => 'UsersManager_PrivAdmin',
- 'description' => 'UsersManager_PrivAdminDescription',
- 'helpUrl' => 'https://matomo.org/faq/general/faq_69/',
- )
+ array(
+ 'id' => 'view',
+ 'name' => 'UsersManager_PrivView',
+ 'description' => 'UsersManager_PrivViewDescription',
+ 'helpUrl' => 'https://matomo.org/faq/general/faq_70/'
+ ),
+ array(
+ 'id' => 'write',
+ 'name' => 'UsersManager_PrivWrite',
+ 'description' => 'UsersManager_PrivWriteDescription',
+ 'helpUrl' => 'https://matomo.org/faq/general/faq_26910'
+ ),
+ array(
+ 'id' => 'admin',
+ 'name' => 'UsersManager_PrivAdmin',
+ 'description' => 'UsersManager_PrivAdminDescription',
+ 'helpUrl' => 'https://matomo.org/faq/general/faq_69/',
+ )
);
$this->assertEquals($expected, $roles);
}
@@ -1063,30 +1119,30 @@ class UsersManagerTest extends IntegrationTestCase
{
$this->addSites(1);
$this->assertSame(array(
- 0 => array(
- 'id' => 'tagmanager_write',
- 'name' => 'UsersManager_PrivWrite',
- 'description' => 'TagManager_CapabilityWriteDescription',
- 'helpUrl' => '',
- 'includedInRoles' => array ('write', 'admin'),
- 'category' => 'TagManager_TagManager',
- ),
- 1 => array (
- 'id' => 'tagmanager_publish_live_container',
- 'name' => 'TagManager_CapabilityPublishLiveContainer',
- 'description' => 'TagManager_CapabilityPublishLiveContainerDescription',
- 'helpUrl' => '',
- 'includedInRoles' => array ('admin'),
- 'category' => 'TagManager_TagManager',
- ),
- 2 => array (
- 'id' => 'tagmanager_use_custom_templates',
- 'name' => 'TagManager_CapabilityUseCustomTemplates',
- 'description' => 'TagManager_CapabilityUseCustomTemplateDescription',
- 'helpUrl' => '',
- 'includedInRoles' => array ('admin'),
- 'category' => 'TagManager_TagManager',
- )
+ 0 => array(
+ 'id' => 'tagmanager_write',
+ 'name' => 'UsersManager_PrivWrite',
+ 'description' => 'TagManager_CapabilityWriteDescription',
+ 'helpUrl' => '',
+ 'includedInRoles' => array('write', 'admin'),
+ 'category' => 'TagManager_TagManager',
+ ),
+ 1 => array(
+ 'id' => 'tagmanager_publish_live_container',
+ 'name' => 'TagManager_CapabilityPublishLiveContainer',
+ 'description' => 'TagManager_CapabilityPublishLiveContainerDescription',
+ 'helpUrl' => '',
+ 'includedInRoles' => array('admin'),
+ 'category' => 'TagManager_TagManager',
+ ),
+ 2 => array(
+ 'id' => 'tagmanager_use_custom_templates',
+ 'name' => 'TagManager_CapabilityUseCustomTemplates',
+ 'description' => 'TagManager_CapabilityUseCustomTemplateDescription',
+ 'helpUrl' => '',
+ 'includedInRoles' => array('admin'),
+ 'category' => 'TagManager_TagManager',
+ )
), $this->api->getAvailableCapabilities());
}
@@ -1104,43 +1160,14 @@ class UsersManagerTest extends IntegrationTestCase
$this->assertNotEmpty($user['invite_status']);
}
- public function testInviteUserEmail()
- {
- $view = new View('@UsersManager/_userInviteEmail.twig');
- $view->login = "test";
- $view->emailAddress = "test@test.com";;
- $view->idSite = 1;
- $view->siteName = 'test';
- $view->token = "thisisatoken";
-
- // content line for email body
- $view->content =Piwik::translate('CoreAdminHome_UserInviteSubject',
- ["<strong>test</strong>", "<strong>test</strong>"]);
-
- //notes for email footer
- $view->notes = Piwik::translate('CoreAdminHome_UserInviteNotes', ['test','test']);
- $host = SettingsPiwik::getPiwikUrl();
- $content = <<<END
-<p>General_HelloUser</p>
-<p>CoreAdminHome_UserInviteSubject</p>
-<a target="_blank" href="$host?module=Login&action=acceptInvitation&token=thisisatoken"
->CoreAdminHome_AcceptInvite</a> |
-<a target="_blank" href="$host?module=Login&action=declineInvitation&token=thisisatoken"
->CoreAdminHome_DeclineInvite</a>
-<p><b>Notes:</b>CoreAdminHome_UserInviteNotes</p>
-END;
- $this->assertEquals($content, $view->render());
-
- }
-
-
private function addSites($numberOfSites)
{
$idSites = array();
for ($index = 0; $index < $numberOfSites; $index++) {
- $name = "test" . ($index + 1);
- $idSites[] = APISitesManager::getInstance()->addSite($name, array("http://piwik.net", "http://piwik.com/test/"));
+ $name = "test" . ($index + 1);
+ $idSites[] = APISitesManager::getInstance()->addSite($name,
+ array("http://piwik.net", "http://piwik.com/test/"));
}
return $idSites;
@@ -1149,7 +1176,7 @@ END;
public function provideContainerConfig()
{
return array(
- 'Piwik\Access' => new FakeAccess()
+ 'Piwik\Access' => new FakeAccess()
);
}
diff --git a/plugins/UsersManager/tests/System/ApiTest.php b/plugins/UsersManager/tests/System/ApiTest.php
index dd5f1d99d5..528163512b 100644
--- a/plugins/UsersManager/tests/System/ApiTest.php
+++ b/plugins/UsersManager/tests/System/ApiTest.php
@@ -61,7 +61,18 @@ class ApiTest extends SystemTestCase
// login1 = super user, login2 = some admin access, login4 = only view access
foreach ($logins as $login => $appendix) {
$params['token_auth'] = self::$fixture->users[$login]['token'];
- $xmlFieldsToRemove = array('date_registered', 'invite_status', 'last_seen', 'password', 'token_auth', 'ts_password_modified', 'idchange_last_viewed');
+ $xmlFieldsToRemove = array(
+ 'date_registered',
+ 'invite_token',
+ 'invite_accept_at',
+ 'invite_expired_at',
+ 'last_seen',
+ 'password',
+ 'token_auth',
+ 'ts_password_modified',
+ 'idchange_last_viewed',
+ 'invite_status'
+ );
$this->runAnyApiTest($api, $apiId . '_' . $appendix, $params, array('xmlFieldsToRemove' => $xmlFieldsToRemove));
}
diff --git a/plugins/UsersManager/tests/System/expected/test___UsersManager.getUser_login1_when_superuseraccess.xml b/plugins/UsersManager/tests/System/expected/test___UsersManager.getUser_login1_when_superuseraccess.xml
index 8dab9ca5ce..f07ca1cf6c 100644
--- a/plugins/UsersManager/tests/System/expected/test___UsersManager.getUser_login1_when_superuseraccess.xml
+++ b/plugins/UsersManager/tests/System/expected/test___UsersManager.getUser_login1_when_superuseraccess.xml
@@ -5,6 +5,10 @@
<email>login1@example.com</email>
<superuser_access>1</superuser_access>
+ <invited_by />
+
+
+
<uses_2fa>0</uses_2fa>
</row>
diff --git a/plugins/UsersManager/tests/System/expected/test___UsersManager.getUser_login2_when_adminaccess.xml b/plugins/UsersManager/tests/System/expected/test___UsersManager.getUser_login2_when_adminaccess.xml
index 98231bbff5..96019b8419 100644
--- a/plugins/UsersManager/tests/System/expected/test___UsersManager.getUser_login2_when_adminaccess.xml
+++ b/plugins/UsersManager/tests/System/expected/test___UsersManager.getUser_login2_when_adminaccess.xml
@@ -4,5 +4,6 @@
<login>login2</login>
<email>login2@example.com</email>
<superuser_access>0</superuser_access>
+
</row>
</result> \ No newline at end of file
diff --git a/plugins/UsersManager/tests/System/expected/test___UsersManager.getUser_login2_when_superuseraccess.xml b/plugins/UsersManager/tests/System/expected/test___UsersManager.getUser_login2_when_superuseraccess.xml
index fa3bd7ac68..79f9f74969 100644
--- a/plugins/UsersManager/tests/System/expected/test___UsersManager.getUser_login2_when_superuseraccess.xml
+++ b/plugins/UsersManager/tests/System/expected/test___UsersManager.getUser_login2_when_superuseraccess.xml
@@ -5,6 +5,10 @@
<email>login2@example.com</email>
<superuser_access>0</superuser_access>
+ <invited_by />
+
+
+
<uses_2fa>0</uses_2fa>
</row>
diff --git a/plugins/UsersManager/tests/System/expected/test___UsersManager.getUser_login4_when_superuseraccess.xml b/plugins/UsersManager/tests/System/expected/test___UsersManager.getUser_login4_when_superuseraccess.xml
index 9cc5801c8d..71f8ce19be 100644
--- a/plugins/UsersManager/tests/System/expected/test___UsersManager.getUser_login4_when_superuseraccess.xml
+++ b/plugins/UsersManager/tests/System/expected/test___UsersManager.getUser_login4_when_superuseraccess.xml
@@ -5,6 +5,10 @@
<email>login4@example.com</email>
<superuser_access>0</superuser_access>
+ <invited_by />
+
+
+
<uses_2fa>0</uses_2fa>
</row>
diff --git a/plugins/UsersManager/tests/System/expected/test___UsersManager.getUser_login4_when_viewaccess.xml b/plugins/UsersManager/tests/System/expected/test___UsersManager.getUser_login4_when_viewaccess.xml
index b6cf8cb4c4..bccb9256f9 100644
--- a/plugins/UsersManager/tests/System/expected/test___UsersManager.getUser_login4_when_viewaccess.xml
+++ b/plugins/UsersManager/tests/System/expected/test___UsersManager.getUser_login4_when_viewaccess.xml
@@ -4,5 +4,6 @@
<login>login4</login>
<email>login4@example.com</email>
<superuser_access>0</superuser_access>
+
</row>
</result> \ No newline at end of file
diff --git a/plugins/UsersManager/tests/System/expected/test___UsersManager.getUser_login6_when_superuseraccess.xml b/plugins/UsersManager/tests/System/expected/test___UsersManager.getUser_login6_when_superuseraccess.xml
index dcddc97dfd..0ddf3a7097 100644
--- a/plugins/UsersManager/tests/System/expected/test___UsersManager.getUser_login6_when_superuseraccess.xml
+++ b/plugins/UsersManager/tests/System/expected/test___UsersManager.getUser_login6_when_superuseraccess.xml
@@ -5,6 +5,10 @@
<email>login6@example.com</email>
<superuser_access>0</superuser_access>
+ <invited_by />
+
+
+
<uses_2fa>0</uses_2fa>
</row>
diff --git a/plugins/UsersManager/tests/System/expected/test___UsersManager.getUsersLogin__when_adminaccess.xml b/plugins/UsersManager/tests/System/expected/test___UsersManager.getUsersLogin__when_adminaccess.xml
index 7658fdd5a6..60a460dd8c 100644
--- a/plugins/UsersManager/tests/System/expected/test___UsersManager.getUsersLogin__when_adminaccess.xml
+++ b/plugins/UsersManager/tests/System/expected/test___UsersManager.getUsersLogin__when_adminaccess.xml
@@ -7,4 +7,5 @@
<row>login7</row>
<row>login8</row>
<row>login9</row>
+ <row>zzzpendingUser2</row>
</result> \ No newline at end of file
diff --git a/plugins/UsersManager/tests/System/expected/test___UsersManager.getUsersLogin__when_superuseraccess.xml b/plugins/UsersManager/tests/System/expected/test___UsersManager.getUsersLogin__when_superuseraccess.xml
index b81834b5fb..0083838caf 100644
--- a/plugins/UsersManager/tests/System/expected/test___UsersManager.getUsersLogin__when_superuseraccess.xml
+++ b/plugins/UsersManager/tests/System/expected/test___UsersManager.getUsersLogin__when_superuseraccess.xml
@@ -12,4 +12,5 @@
<row>login8</row>
<row>login9</row>
<row>superUserLogin</row>
+ <row>zzzpendingUser2</row>
</result> \ No newline at end of file
diff --git a/plugins/UsersManager/tests/System/expected/test___UsersManager.getUsersWithSiteAccess_3_admin_when_superuseraccess.xml b/plugins/UsersManager/tests/System/expected/test___UsersManager.getUsersWithSiteAccess_3_admin_when_superuseraccess.xml
index 02ec1e6d90..75c08d51bf 100644
--- a/plugins/UsersManager/tests/System/expected/test___UsersManager.getUsersWithSiteAccess_3_admin_when_superuseraccess.xml
+++ b/plugins/UsersManager/tests/System/expected/test___UsersManager.getUsersWithSiteAccess_3_admin_when_superuseraccess.xml
@@ -5,6 +5,10 @@
<email>login5@example.com</email>
<superuser_access>0</superuser_access>
+ <invited_by />
+
+
+
<uses_2fa>0</uses_2fa>
</row>
@@ -13,6 +17,10 @@
<email>login6@example.com</email>
<superuser_access>0</superuser_access>
+ <invited_by />
+
+
+
<uses_2fa>0</uses_2fa>
</row>
diff --git a/plugins/UsersManager/tests/System/expected/test___UsersManager.getUsers__when_adminaccess.xml b/plugins/UsersManager/tests/System/expected/test___UsersManager.getUsers__when_adminaccess.xml
index 31a5fac273..5d3b34b562 100644
--- a/plugins/UsersManager/tests/System/expected/test___UsersManager.getUsers__when_adminaccess.xml
+++ b/plugins/UsersManager/tests/System/expected/test___UsersManager.getUsers__when_adminaccess.xml
@@ -1,32 +1,40 @@
<?xml version="1.0" encoding="utf-8" ?>
<result>
<row>
- <login>000pendingUser1</login>
- <superuser_access>0</superuser_access>
- </row>
- <row>
<login>login2</login>
<email>login2@example.com</email>
<superuser_access>0</superuser_access>
+
</row>
<row>
<login>login4</login>
<superuser_access>0</superuser_access>
+
</row>
<row>
<login>login6</login>
<superuser_access>0</superuser_access>
+
</row>
<row>
<login>login7</login>
<superuser_access>0</superuser_access>
+
</row>
<row>
<login>login8</login>
<superuser_access>0</superuser_access>
+
</row>
<row>
<login>login9</login>
<superuser_access>0</superuser_access>
+
+ </row>
+ <row>
+ <login>zzzpendingUser2</login>
+ <superuser_access>0</superuser_access>
+
+ <invited_by>login2</invited_by>
</row>
</result> \ No newline at end of file
diff --git a/plugins/UsersManager/tests/System/expected/test___UsersManager.getUsers__when_superuseraccess.xml b/plugins/UsersManager/tests/System/expected/test___UsersManager.getUsers__when_superuseraccess.xml
index a2032128d8..25a13356b3 100644
--- a/plugins/UsersManager/tests/System/expected/test___UsersManager.getUsers__when_superuseraccess.xml
+++ b/plugins/UsersManager/tests/System/expected/test___UsersManager.getUsers__when_superuseraccess.xml
@@ -5,7 +5,11 @@
<email>pendinguser1light@example.com</email>
<superuser_access>0</superuser_access>
- <invite_status>today-date-removed-in-tests</invite_status>
+ <invited_by>superUserLogin</invited_by>
+
+
+
+
<uses_2fa>0</uses_2fa>
</row>
<row>
@@ -13,7 +17,11 @@
<email>login1@example.com</email>
<superuser_access>1</superuser_access>
- <invite_status />
+ <invited_by />
+
+
+
+
<uses_2fa>0</uses_2fa>
</row>
<row>
@@ -21,7 +29,11 @@
<email>login10@example.com</email>
<superuser_access>1</superuser_access>
- <invite_status />
+ <invited_by />
+
+
+
+
<uses_2fa>0</uses_2fa>
</row>
<row>
@@ -29,7 +41,11 @@
<email>login2@example.com</email>
<superuser_access>0</superuser_access>
- <invite_status />
+ <invited_by />
+
+
+
+
<uses_2fa>0</uses_2fa>
</row>
<row>
@@ -37,7 +53,11 @@
<email>login3@example.com</email>
<superuser_access>0</superuser_access>
- <invite_status />
+ <invited_by />
+
+
+
+
<uses_2fa>0</uses_2fa>
</row>
<row>
@@ -45,7 +65,11 @@
<email>login4@example.com</email>
<superuser_access>0</superuser_access>
- <invite_status />
+ <invited_by />
+
+
+
+
<uses_2fa>0</uses_2fa>
</row>
<row>
@@ -53,7 +77,11 @@
<email>login5@example.com</email>
<superuser_access>0</superuser_access>
- <invite_status />
+ <invited_by />
+
+
+
+
<uses_2fa>0</uses_2fa>
</row>
<row>
@@ -61,7 +89,11 @@
<email>login6@example.com</email>
<superuser_access>0</superuser_access>
- <invite_status />
+ <invited_by />
+
+
+
+
<uses_2fa>0</uses_2fa>
</row>
<row>
@@ -69,7 +101,11 @@
<email>login7@example.com</email>
<superuser_access>0</superuser_access>
- <invite_status />
+ <invited_by />
+
+
+
+
<uses_2fa>0</uses_2fa>
</row>
<row>
@@ -77,7 +113,11 @@
<email>login8@example.com</email>
<superuser_access>0</superuser_access>
- <invite_status />
+ <invited_by />
+
+
+
+
<uses_2fa>0</uses_2fa>
</row>
<row>
@@ -85,7 +125,11 @@
<email>login9@example.com</email>
<superuser_access>0</superuser_access>
- <invite_status />
+ <invited_by />
+
+
+
+
<uses_2fa>0</uses_2fa>
</row>
<row>
@@ -93,7 +137,23 @@
<email>hello@example.org</email>
<superuser_access>1</superuser_access>
- <invite_status />
+ <invited_by />
+
+
+
+
+ <uses_2fa>0</uses_2fa>
+ </row>
+ <row>
+ <login>zzzpendingUser2</login>
+ <email>zpendinguser2light@example.com</email>
+ <superuser_access>0</superuser_access>
+
+ <invited_by>login2</invited_by>
+
+
+
+
<uses_2fa>0</uses_2fa>
</row>
</result> \ 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 e4e4b58e64..f2c5a20772 100644
--- a/plugins/UsersManager/tests/UI/UsersManager_spec.js
+++ b/plugins/UsersManager/tests/UI/UsersManager_spec.js
@@ -36,13 +36,8 @@ describe("UsersManager", function () {
expect(await page.screenshotSelector('.usersManager')).to.matchImage('load');
});
- it('should show resend confirm when resend clicked', async function () {
- await (await page.jQuery('.resend')).click();
- expect(await page.screenshotSelector('.usersManager')).to.matchImage('resend_popup');
- });
it('should change the results page when next is clicked', async function () {
- await (await page.jQuery('.resend-invite-confirm-modal .modal-close:not(.modal-no):visible')).click();
await page.click('.usersListPagination .btn.next');
await page.mouse.move(-10, -10);
await page.waitForNetworkIdle();
@@ -54,6 +49,8 @@ describe("UsersManager", function () {
await page.evaluate(function () {
$('select[name=access-level-filter]').val('string:view').change();
$('#user-text-filter').val('ight').change();
+ $('select[name=status-level-filter]').val('string:pending').change();
+
});
await page.waitForNetworkIdle();
await page.waitForTimeout(1000); // wait for rendering
@@ -65,6 +62,7 @@ describe("UsersManager", function () {
// remove access filter
await page.evaluate(function () {
$('select[name=access-level-filter]').val('string:').change();
+ $('select[name=status-level-filter]').val('string:').change();
});
await page.evaluate(() => $('th.role_header .siteSelector a.title').click());
@@ -519,9 +517,25 @@ describe("UsersManager", function () {
await page.waitForNetworkIdle();
await page.waitForSelector('#notificationContainer .notification');
+
expect(await page.screenshotSelector('.admin#content,#notificationContainer')).to.matchImage('edit_user_basic_confirmed_wrong_password');
});
+ it('should show resend confirm when resend clicked', async function () {
+ await page.goto(url);
+ await (await page.jQuery('.resend')).click();
+ await page.waitForTimeout(500); // animation
+ await page.waitForSelector('.resend-invite-confirm-modal', { visible: true });
+ expect(await page.screenshotSelector('.usersManager')).to.matchImage('resend_popup');
+ });
+
+ it('should show resend success message', async function() {
+ await (await page.jQuery('.resend-invite-confirm-modal .modal-close:not(.modal-no):visible')).click();
+ await page.waitForSelector('#notificationContainer .notification');
+ expect(await page.screenshotSelector('.usersManager')).to.matchImage('resend_success');
+ });
+
+
// admin user tests
describe('UsersManager_admin_view', function () {
before(async function () {
diff --git a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_add_new_user_form.png b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_add_new_user_form.png
index 49beda2f91..20d1fa159a 100644
--- a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_add_new_user_form.png
+++ b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_add_new_user_form.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:df465b8206b76a6057fb58a5d48aeffb444e80ead2d0a6ea7a924b6b232e3f6b
-size 51512
+oid sha256:fb9640614a2c2ce098c4c0d5320206cdac71c0611d7bd9e9c0e9a4d1c03a2827
+size 51975
diff --git a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_admin_view_admin_add_user.png b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_admin_view_admin_add_user.png
index 49beda2f91..20d1fa159a 100644
--- a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_admin_view_admin_add_user.png
+++ b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_admin_view_admin_add_user.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:df465b8206b76a6057fb58a5d48aeffb444e80ead2d0a6ea7a924b6b232e3f6b
-size 51512
+oid sha256:fb9640614a2c2ce098c4c0d5320206cdac71c0611d7bd9e9c0e9a4d1c03a2827
+size 51975
diff --git a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_admin_view_admin_add_user_by_email.png b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_admin_view_admin_add_user_by_email.png
index f367d4283b..4a95db6ece 100644
--- a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_admin_view_admin_add_user_by_email.png
+++ b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_admin_view_admin_add_user_by_email.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:99aa09442363e539084d440c5f72c586e170f5c08202e3c7717ed94d107ab000
-size 46067
+oid sha256:ae0a19a32d2fb0ba3df609914db1710754aaf0bb4f852027d6a9a2498e19b9eb
+size 45809
diff --git a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_admin_view_admin_add_user_by_login.png b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_admin_view_admin_add_user_by_login.png
index d1269abd39..13c37d4e8a 100644
--- a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_admin_view_admin_add_user_by_login.png
+++ b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_admin_view_admin_add_user_by_login.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:44c6177345745953c3eb700166b3d9826de1a83eea8ef8a2e25a7348905df814
-size 44138
+oid sha256:33ef14962b6edc965b2b928fbacf586e73222606fc73c5852e0186fbbf4bfbb9
+size 43835
diff --git a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_admin_view_admin_add_user_not_exists.png b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_admin_view_admin_add_user_not_exists.png
index afffee7f11..fb6f3d074c 100644
--- a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_admin_view_admin_add_user_not_exists.png
+++ b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_admin_view_admin_add_user_not_exists.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:2eaf09b2a278a4524a299fdabe08ec8f9127847af03b2380020f942135217f40
-size 40075
+oid sha256:8b0148b8066cee3d6b256d38a08753da4f3c3356075a719a44c7ce8ba25c4f14
+size 40840
diff --git a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_admin_view_admin_load.png b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_admin_view_admin_load.png
index 3ce45b448c..6cf6aa4384 100644
--- a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_admin_view_admin_load.png
+++ b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_admin_view_admin_load.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:d900ab4e0295bbe056d943cf62f2c7b9bfa4de96bb2269612d0063dde7434e20
-size 136766
+oid sha256:8a2c8af6d0c208d6803094f9762157429155751ae77240e796d18b44a8fdc18d
+size 125120
diff --git a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_all_rows_deselected.png b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_all_rows_deselected.png
index eeb04639af..fbbf3f66d2 100644
--- a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_all_rows_deselected.png
+++ b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_all_rows_deselected.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:90cbdd69c29d89d3b843c3b29f8d2f06c1f9ae12cd547a385415ab94af710e98
-size 189876
+oid sha256:7b47dc217801273f99419123512394169fc612f2617ce2901e2ac7e88a5c2614
+size 177823
diff --git a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_all_rows_in_search.png b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_all_rows_in_search.png
index c4f3c28fda..f1617699f0 100644
--- a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_all_rows_in_search.png
+++ b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_all_rows_in_search.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:3c5af9e3e3b371d75765dfa99ac73239fa0bc6d5f28503aa9ddcde5cf8c36d67
-size 190238
+oid sha256:d572a26d1f78df50632821e9bd237e667bacf4c3bd18b9cbeb7d2a09821bfc7f
+size 178182
diff --git a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_all_rows_selected.png b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_all_rows_selected.png
index eeb04639af..fbbf3f66d2 100644
--- a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_all_rows_selected.png
+++ b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_all_rows_selected.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:90cbdd69c29d89d3b843c3b29f8d2f06c1f9ae12cd547a385415ab94af710e98
-size 189876
+oid sha256:7b47dc217801273f99419123512394169fc612f2617ce2901e2ac7e88a5c2614
+size 177823
diff --git a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_bulk_remove_access.png b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_bulk_remove_access.png
index a5e69931ad..0bf31bcb2d 100644
--- a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_bulk_remove_access.png
+++ b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_bulk_remove_access.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:9a6067784a28a84cf9994cdd648f37fa471f51e34efce5d5e84d09665e5f518a
-size 180900
+oid sha256:2c5cfbb45de502c5c709a8b9e729d17d7c5207f3a52d2e5a80251e8f044ab8e0
+size 168877
diff --git a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_bulk_set_access.png b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_bulk_set_access.png
index 7197789c4a..ffe716941e 100644
--- a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_bulk_set_access.png
+++ b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_bulk_set_access.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:de69e012f88d200df0fb0fac97485a9949fa3af94c89c828513eaa5a25cb06e9
-size 171656
+oid sha256:49f5101fa39e83217cb385ad9b11d19c138cd8063f1bc730006876f8bd622968
+size 159347
diff --git a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_bulk_set_access_confirm.png b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_bulk_set_access_confirm.png
index 3756acdcee..87346b5818 100644
--- a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_bulk_set_access_confirm.png
+++ b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_bulk_set_access_confirm.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:18dc30ffd01c62b5f591b05cc85b76a25786eb935f0538e65656f8848f0c59c8
-size 9351
+oid sha256:7223123c832edc705080b0bfbcd92ea4fa00255cfb17bde06cf04dfefb5b97f1
+size 9526
diff --git a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_delete_bulk_access.png b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_delete_bulk_access.png
index 3aee339185..436da04ed1 100644
--- a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_delete_bulk_access.png
+++ b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_delete_bulk_access.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:92825d9f4fb5080afd23dbabf519d2be4d4964a6623c3da11f4820f1517115a6
-size 169385
+oid sha256:142a425ca04ec7b5a1580ac02fc2e29545348e586342c7f03ab1ea6563127443
+size 170040
diff --git a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_delete_single.png b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_delete_single.png
index ca7bf2eacc..0cff043a61 100644
--- a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_delete_single.png
+++ b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_delete_single.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:6ae36fbee0d0eceb6b320808da446b9f7538e12c926bd55271b9909b4bef191d
-size 170695
+oid sha256:27f1f1974ce5f805d81fe0ecade75d98a667d9c82e08b765cfd68be9a6e09a60
+size 171357
diff --git a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_filters.png b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_filters.png
index bd497115da..dc6d7c5cfd 100644
--- a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_filters.png
+++ b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_filters.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:97938e80121da3aa373377e92066c1798341c91a53de14e516668e2467b3e5cb
-size 172026
+oid sha256:5941c7d9be4d9648c7dd0a04ad0fbd71ec1a650b908526e28e541c87de60e86e
+size 45243
diff --git a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_load.png b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_load.png
index accf87147a..3896263dca 100644
--- a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_load.png
+++ b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_load.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:f9a2640f91c653940bd7f4f3f631f370122e6e7d81635fb18ada658e7f18fc01
-size 179096
+oid sha256:cc295812f1eddc30410ae5699b5c8b42b68c73da7dd046cde5ee40670c083f8f
+size 180107
diff --git a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_manage_users_back.png b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_manage_users_back.png
index 9dbfe8223d..c1f185df9b 100644
--- a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_manage_users_back.png
+++ b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_manage_users_back.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:5575d62aec7479771521771d917833f917118ed81d0a26a09c5bfa340c956842
-size 180151
+oid sha256:d399814e61b3b412ec24fd978138b935061a04f99d00abfd4c9e873704973f17
+size 181925
diff --git a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_next_click.png b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_next_click.png
index accf87147a..0d9e82b574 100644
--- a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_next_click.png
+++ b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_next_click.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:f9a2640f91c653940bd7f4f3f631f370122e6e7d81635fb18ada658e7f18fc01
-size 179096
+oid sha256:563c7d96fe000357dbcd919bd7dd0c84ad9bd27985fb02a124f21b99abe2f5d6
+size 182540
diff --git a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_permissions_all_rows_in_search.png b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_permissions_all_rows_in_search.png
index 5446e90a8f..52bfa62b80 100644
--- a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_permissions_all_rows_in_search.png
+++ b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_permissions_all_rows_in_search.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:a828ac11b951dad41d2c9fde7ef4dba7fb3a0054a6f5642062fc5e2e90960ecb
-size 92981
+oid sha256:8d9ef941cb4ff627f7beb3d5ac00974b6202dca60a185aa98e977d47342f3d12
+size 108004
diff --git a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_permissions_edit.png b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_permissions_edit.png
index ef51a6b1dd..3682b1348e 100644
--- a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_permissions_edit.png
+++ b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_permissions_edit.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:030cf64820bb2651df8089d886d22d734c8bf4db15003a1a03358808e6d22923
-size 81545
+oid sha256:0f73adc2c884b138c888a1edb0632ad192331cb4c8d8d17141a285a9a0f0e725
+size 96478
diff --git a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_permissions_select_multiple.png b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_permissions_select_multiple.png
index 830864f35e..1e711f7569 100644
--- a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_permissions_select_multiple.png
+++ b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_permissions_select_multiple.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:76e20b38c58d6b39b66a00eee1ff00223b54f23faf0c4f70a9a9a49e8e28419c
-size 91941
+oid sha256:b757661c0d5992bdd8296c4426dc3369b0acae76ac4bcd403703a1850ec42510
+size 91948
diff --git a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_previous.png b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_previous.png
index 69eeda3864..b5b82113e2 100644
--- a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_previous.png
+++ b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_previous.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:3a1f5d5c5e0015870d94550a7a08cb4ea7833171648398308c917183790da3db
-size 170518
+oid sha256:e11665e96a0656366b93e8bed7f6d74a41bbeb68e1edc91b9b3382b45f07cced
+size 171421
diff --git a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_resend_popup.png b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_resend_popup.png
index 25cd79c9cd..23e1465e86 100644
--- a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_resend_popup.png
+++ b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_resend_popup.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:28f70514a1c2aac645aef53f388bbe9428249d836d75c9b0bed1868c06eafb99
-size 189374
+oid sha256:fb25420e0fd845fe553714b65a914d430614b957f4aa725d397fdca1bdcecb3a
+size 178586
diff --git a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_resend_success.png b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_resend_success.png
new file mode 100644
index 0000000000..96f219f0c3
--- /dev/null
+++ b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_resend_success.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:db43c1ca4b3b1f04ca7ec5762430bf24ebb84853ff9b0b900a060160cde259c0
+size 172581
diff --git a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_role_for.png b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_role_for.png
index a388c9481a..58b34e9a60 100644
--- a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_role_for.png
+++ b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_role_for.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:1fadec033c757181ce95c7364517de678dd933400259177cef0d2f87cfa6caeb
-size 175226
+oid sha256:8006f4ec6a1f7e33fb45be40c9fb91a6872e8e6f4b219844f3d9baf3f22217bc
+size 163058
diff --git a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_rows_selected.png b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_rows_selected.png
index 48a5b74dc8..0bf7c597f8 100644
--- a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_rows_selected.png
+++ b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_rows_selected.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:5ae5ffd11859c0040e4203967390d76c3fac06b2626579bb0eb3928ef732a42d
-size 176975
+oid sha256:506630c5db3040468c81104fd1cd6f1c2bbb7abd7f2f6e7d0ebb13a24ac2d5bf
+size 164900
diff --git a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_superuser_confirm.png b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_superuser_confirm.png
index 9794675211..7b3c80ca7e 100644
--- a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_superuser_confirm.png
+++ b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_superuser_confirm.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:2777d9df6068d8f669d5fe6087b33e54c8e13eafebe43534340bc96d671503c5
-size 19854
+oid sha256:6b1e0e91934fc47c4db57a68607f622416a7757000cee2ee2353bfae35f90382
+size 19849
diff --git a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_user_created.png b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_user_created.png
index 0d4934988b..9184f1a37d 100644
--- a/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_user_created.png
+++ b/plugins/UsersManager/tests/UI/expected-screenshots/UsersManager_user_created.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:406437e042339b681e39ce9e745e8ee5e391fd758a3bee0b8a1651a9c80f5c96
-size 22488
+oid sha256:f97cfaa64c56e51a88d1f4727be80753f5e51956fd474d4d1ec89a5dfd0d5508
+size 22833
diff --git a/plugins/UsersManager/vue/dist/UsersManager.umd.js b/plugins/UsersManager/vue/dist/UsersManager.umd.js
index 424ce5a8c1..065b5b3fe4 100644
--- a/plugins/UsersManager/vue/dist/UsersManager.umd.js
+++ b/plugins/UsersManager/vue/dist/UsersManager.umd.js
@@ -103,13 +103,6 @@ module.exports = __WEBPACK_EXTERNAL_MODULE__19dc__;
/***/ }),
-/***/ "8bba":
-/***/ (function(module, exports, __webpack_require__) {
-
-// extracted by mini-css-extract-plugin
-
-/***/ }),
-
/***/ "8bbf":
/***/ (function(module, exports) {
@@ -124,17 +117,6 @@ 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":
/***/ (function(module, __webpack_exports__, __webpack_require__) {
@@ -1466,119 +1448,119 @@ UserPermissionsEditvue_type_script_lang_ts.render = UserPermissionsEditvue_type_
directiveName: 'piwikUserPermissionsEdit',
restrict: 'E'
}));
-// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-babel/node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/templateLoader.js??ref--6!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--0-1!./plugins/UsersManager/vue/src/UserEditForm/UserEditForm.vue?vue&type=template&id=630fdb84
+// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-babel/node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/templateLoader.js??ref--6!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--0-1!./plugins/UsersManager/vue/src/UserEditForm/UserEditForm.vue?vue&type=template&id=71e0c307
-var UserEditFormvue_type_template_id_630fdb84_hoisted_1 = {
+var UserEditFormvue_type_template_id_71e0c307_hoisted_1 = {
class: "row"
};
-var UserEditFormvue_type_template_id_630fdb84_hoisted_2 = {
+var UserEditFormvue_type_template_id_71e0c307_hoisted_2 = {
key: 0,
class: "col m2 entityList"
};
-var UserEditFormvue_type_template_id_630fdb84_hoisted_3 = {
+var UserEditFormvue_type_template_id_71e0c307_hoisted_3 = {
class: "listCircle"
};
-var UserEditFormvue_type_template_id_630fdb84_hoisted_4 = {
+var UserEditFormvue_type_template_id_71e0c307_hoisted_4 = {
key: 0,
class: "icon-warning"
};
-var UserEditFormvue_type_template_id_630fdb84_hoisted_5 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", {
+var UserEditFormvue_type_template_id_71e0c307_hoisted_5 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", {
class: "save-button-spacer hide-on-small-only"
}, null, -1);
-var UserEditFormvue_type_template_id_630fdb84_hoisted_6 = {
+var UserEditFormvue_type_template_id_71e0c307_hoisted_6 = {
href: "",
class: "entityCancelLink"
};
-var UserEditFormvue_type_template_id_630fdb84_hoisted_7 = {
+var UserEditFormvue_type_template_id_71e0c307_hoisted_7 = {
class: "visibleTab col m10"
};
-var UserEditFormvue_type_template_id_630fdb84_hoisted_8 = {
+var UserEditFormvue_type_template_id_71e0c307_hoisted_8 = {
key: 0,
class: "basic-info-tab"
};
-var UserEditFormvue_type_template_id_630fdb84_hoisted_9 = {
+var UserEditFormvue_type_template_id_71e0c307_hoisted_9 = {
class: "form-group row",
style: {
"position": "relative"
}
};
-var UserEditFormvue_type_template_id_630fdb84_hoisted_10 = {
+var UserEditFormvue_type_template_id_71e0c307_hoisted_10 = {
class: "col s12 m6"
};
-var UserEditFormvue_type_template_id_630fdb84_hoisted_11 = {
+var UserEditFormvue_type_template_id_71e0c307_hoisted_11 = {
class: "col s12 m6"
};
-var UserEditFormvue_type_template_id_630fdb84_hoisted_12 = {
+var UserEditFormvue_type_template_id_71e0c307_hoisted_12 = {
key: 0,
class: "form-help"
};
-var UserEditFormvue_type_template_id_630fdb84_hoisted_13 = ["innerHTML"];
-var UserEditFormvue_type_template_id_630fdb84_hoisted_14 = {
+var UserEditFormvue_type_template_id_71e0c307_hoisted_13 = ["innerHTML"];
+var UserEditFormvue_type_template_id_71e0c307_hoisted_14 = {
key: 0,
class: "entityCancel"
};
-var UserEditFormvue_type_template_id_630fdb84_hoisted_15 = {
+var UserEditFormvue_type_template_id_71e0c307_hoisted_15 = {
key: 1,
class: "user-permissions"
};
-var UserEditFormvue_type_template_id_630fdb84_hoisted_16 = {
+var UserEditFormvue_type_template_id_71e0c307_hoisted_16 = {
key: 0
};
-var UserEditFormvue_type_template_id_630fdb84_hoisted_17 = {
+var UserEditFormvue_type_template_id_71e0c307_hoisted_17 = {
key: 1,
class: "alert alert-info"
};
-var UserEditFormvue_type_template_id_630fdb84_hoisted_18 = {
+var UserEditFormvue_type_template_id_71e0c307_hoisted_18 = {
key: 2,
class: "superuser-access"
};
-var UserEditFormvue_type_template_id_630fdb84_hoisted_19 = {
+var UserEditFormvue_type_template_id_71e0c307_hoisted_19 = {
class: "superuser-confirm-modal modal",
ref: "superUserConfirmModal"
};
-var UserEditFormvue_type_template_id_630fdb84_hoisted_20 = {
+var UserEditFormvue_type_template_id_71e0c307_hoisted_20 = {
class: "modal-content"
};
-var UserEditFormvue_type_template_id_630fdb84_hoisted_21 = {
+var UserEditFormvue_type_template_id_71e0c307_hoisted_21 = {
key: 0
};
-var UserEditFormvue_type_template_id_630fdb84_hoisted_22 = {
+var UserEditFormvue_type_template_id_71e0c307_hoisted_22 = {
key: 1
};
-var UserEditFormvue_type_template_id_630fdb84_hoisted_23 = {
+var UserEditFormvue_type_template_id_71e0c307_hoisted_23 = {
class: "modal-footer"
};
-var UserEditFormvue_type_template_id_630fdb84_hoisted_24 = {
+var UserEditFormvue_type_template_id_71e0c307_hoisted_24 = {
key: 3,
class: "twofa-reset"
};
-var UserEditFormvue_type_template_id_630fdb84_hoisted_25 = {
+var UserEditFormvue_type_template_id_71e0c307_hoisted_25 = {
class: "resetTwoFa"
};
-var UserEditFormvue_type_template_id_630fdb84_hoisted_26 = {
+var UserEditFormvue_type_template_id_71e0c307_hoisted_26 = {
class: "twofa-confirm-modal modal",
ref: "twofaConfirmModal"
};
-var UserEditFormvue_type_template_id_630fdb84_hoisted_27 = {
+var UserEditFormvue_type_template_id_71e0c307_hoisted_27 = {
class: "modal-content"
};
-var UserEditFormvue_type_template_id_630fdb84_hoisted_28 = {
+var UserEditFormvue_type_template_id_71e0c307_hoisted_28 = {
class: "modal-footer"
};
-var UserEditFormvue_type_template_id_630fdb84_hoisted_29 = {
+var UserEditFormvue_type_template_id_71e0c307_hoisted_29 = {
class: "change-password-modal modal",
ref: "changePasswordModal"
};
-var UserEditFormvue_type_template_id_630fdb84_hoisted_30 = {
+var UserEditFormvue_type_template_id_71e0c307_hoisted_30 = {
class: "modal-content"
};
-var UserEditFormvue_type_template_id_630fdb84_hoisted_31 = ["innerHTML"];
-var UserEditFormvue_type_template_id_630fdb84_hoisted_32 = {
+var UserEditFormvue_type_template_id_71e0c307_hoisted_31 = ["innerHTML"];
+var UserEditFormvue_type_template_id_71e0c307_hoisted_32 = {
class: "modal-footer"
};
-function UserEditFormvue_type_template_id_630fdb84_render(_ctx, _cache, $props, $setup, $data, $options) {
+function UserEditFormvue_type_template_id_71e0c307_render(_ctx, _cache, $props, $setup, $data, $options) {
var _component_Field = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["resolveComponent"])("Field");
var _component_SaveButton = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["resolveComponent"])("SaveButton");
@@ -1596,7 +1578,7 @@ function UserEditFormvue_type_template_id_630fdb84_render(_ctx, _cache, $props,
"content-title": "".concat(_ctx.formTitle, " ").concat(!_ctx.isAdd ? "'".concat(_ctx.theUser.login, "'") : '')
}, {
default: Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withCtx"])(function () {
- return [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UserEditFormvue_type_template_id_630fdb84_hoisted_1, [!_ctx.isAdd ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", UserEditFormvue_type_template_id_630fdb84_hoisted_2, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("ul", UserEditFormvue_type_template_id_630fdb84_hoisted_3, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("li", {
+ return [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UserEditFormvue_type_template_id_71e0c307_hoisted_1, [!_ctx.isAdd ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", UserEditFormvue_type_template_id_71e0c307_hoisted_2, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("ul", UserEditFormvue_type_template_id_71e0c307_hoisted_3, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("li", {
class: Object(external_commonjs_vue_commonjs2_vue_root_Vue_["normalizeClass"])([{
active: _ctx.activeTab === 'basic'
}, "menuBasicInfo"])
@@ -1617,7 +1599,7 @@ function UserEditFormvue_type_template_id_630fdb84_render(_ctx, _cache, $props,
style: {
"margin-right": "3.5px"
}
- }, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_Permissions')), 1), !_ctx.userHasAccess && !_ctx.theUser.superuser_access ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("span", UserEditFormvue_type_template_id_630fdb84_hoisted_4)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true)], 2), _ctx.currentUserRole === 'superuser' ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("li", {
+ }, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_Permissions')), 1), !_ctx.userHasAccess && !_ctx.theUser.superuser_access ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("span", UserEditFormvue_type_template_id_71e0c307_hoisted_4)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true)], 2), _ctx.currentUserRole === 'superuser' ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("li", {
key: 0,
class: Object(external_commonjs_vue_commonjs2_vue_root_Vue_["normalizeClass"])([{
active: _ctx.activeTab === 'superuser'
@@ -1637,12 +1619,12 @@ function UserEditFormvue_type_template_id_630fdb84_render(_ctx, _cache, $props,
onClick: _cache[3] || (_cache[3] = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withModifiers"])(function ($event) {
return _ctx.activeTab = '2fa';
}, ["prevent"]))
- }, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_TwoFactorAuthentication')), 1)], 2)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true)]), UserEditFormvue_type_template_id_630fdb84_hoisted_5, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", {
+ }, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_TwoFactorAuthentication')), 1)], 2)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true)]), UserEditFormvue_type_template_id_71e0c307_hoisted_5, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", {
class: "entityCancel",
onClick: _cache[4] || (_cache[4] = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withModifiers"])(function ($event) {
return _ctx.onDoneEditing();
}, ["prevent"]))
- }, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", UserEditFormvue_type_template_id_630fdb84_hoisted_6, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('Mobile_NavigationBack')), 1)])])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UserEditFormvue_type_template_id_630fdb84_hoisted_7, [_ctx.activeTab === 'basic' ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", UserEditFormvue_type_template_id_630fdb84_hoisted_8, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_Field, {
+ }, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", UserEditFormvue_type_template_id_71e0c307_hoisted_6, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('Mobile_NavigationBack')), 1)])])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UserEditFormvue_type_template_id_71e0c307_hoisted_7, [_ctx.activeTab === 'basic' ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", UserEditFormvue_type_template_id_71e0c307_hoisted_8, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_Field, {
modelValue: _ctx.theUser.login,
"onUpdate:modelValue": _cache[5] || (_cache[5] = function ($event) {
return _ctx.theUser.login = $event;
@@ -1652,7 +1634,7 @@ function UserEditFormvue_type_template_id_630fdb84_render(_ctx, _cache, $props,
name: "user_login",
maxlength: 100,
title: _ctx.translate('General_Username')
- }, null, 8, ["modelValue", "disabled", "title"])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [_ctx.isPendingUser ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createBlock"])(_component_Field, {
+ }, null, 8, ["modelValue", "disabled", "title"])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [!_ctx.isPending ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createBlock"])(_component_Field, {
key: 0,
"model-value": _ctx.theUser.password,
disabled: _ctx.isSavingUserInfo || _ctx.currentUserRole !== 'superuser' && !_ctx.isAdd || _ctx.isShowingPasswordConfirm,
@@ -1688,7 +1670,7 @@ function UserEditFormvue_type_template_id_630fdb84_render(_ctx, _cache, $props,
},
title: _ctx.translate('UsersManager_FirstWebsitePermission'),
"inline-help": _ctx.translate('UsersManager_FirstSiteInlineHelp')
- }, null, 8, ["modelValue", "disabled", "title", "inline-help"])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true)]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UserEditFormvue_type_template_id_630fdb84_hoisted_9, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UserEditFormvue_type_template_id_630fdb84_hoisted_10, [_ctx.currentUserRole === 'superuser' || _ctx.isAdd ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createBlock"])(_component_SaveButton, {
+ }, null, 8, ["modelValue", "disabled", "title", "inline-help"])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true)]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UserEditFormvue_type_template_id_71e0c307_hoisted_9, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UserEditFormvue_type_template_id_71e0c307_hoisted_10, [_ctx.currentUserRole === 'superuser' || _ctx.isAdd ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createBlock"])(_component_SaveButton, {
key: 0,
style: {
"position": "absolute",
@@ -1700,16 +1682,16 @@ function UserEditFormvue_type_template_id_630fdb84_render(_ctx, _cache, $props,
onConfirm: _cache[9] || (_cache[9] = function ($event) {
return _ctx.saveUserInfo();
})
- }, null, 8, ["value", "disabled", "saving"])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true)]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UserEditFormvue_type_template_id_630fdb84_hoisted_11, [_ctx.isAdd ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", UserEditFormvue_type_template_id_630fdb84_hoisted_12, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", {
+ }, null, 8, ["value", "disabled", "saving"])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true)]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UserEditFormvue_type_template_id_71e0c307_hoisted_11, [_ctx.isAdd ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", UserEditFormvue_type_template_id_71e0c307_hoisted_12, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", {
class: "inline-help",
innerHTML: _ctx.$sanitize(_ctx.translate('UsersManager_InviteSuccessNotification', [7]))
- }, null, 8, UserEditFormvue_type_template_id_630fdb84_hoisted_13)])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true)])])]), _ctx.isAdd ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", UserEditFormvue_type_template_id_630fdb84_hoisted_14, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", {
+ }, null, 8, UserEditFormvue_type_template_id_71e0c307_hoisted_13)])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true)])])]), _ctx.isAdd ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", UserEditFormvue_type_template_id_71e0c307_hoisted_14, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", {
href: "",
class: "entityCancelLink",
onClick: _cache[10] || (_cache[10] = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withModifiers"])(function ($event) {
return _ctx.onDoneEditing();
}, ["prevent"]))
- }, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('General_Cancel')), 1)])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true)])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), !_ctx.isAdd ? Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])((Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", UserEditFormvue_type_template_id_630fdb84_hoisted_15, [!_ctx.theUser.superuser_access ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", UserEditFormvue_type_template_id_630fdb84_hoisted_16, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_UserPermissionsEdit, {
+ }, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('General_Cancel')), 1)])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true)])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), !_ctx.isAdd ? Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])((Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", UserEditFormvue_type_template_id_71e0c307_hoisted_15, [!_ctx.theUser.superuser_access ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", UserEditFormvue_type_template_id_71e0c307_hoisted_16, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_UserPermissionsEdit, {
"user-login": _ctx.theUser.login,
onUserHasAccessDetected: _cache[11] || (_cache[11] = function ($event) {
return _ctx.userHasAccess = $event.hasAccess;
@@ -1719,7 +1701,7 @@ function UserEditFormvue_type_template_id_630fdb84_render(_ctx, _cache, $props,
}),
"access-levels": _ctx.accessLevels,
"filter-access-levels": _ctx.filterAccessLevels
- }, null, 8, ["user-login", "access-levels", "filter-access-levels"])])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), _ctx.theUser.superuser_access ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", UserEditFormvue_type_template_id_630fdb84_hoisted_17, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_SuperUsersPermissionsNotice')), 1)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true)], 512)), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vShow"], _ctx.activeTab === 'permissions']]) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), _ctx.activeTab === 'superuser' && _ctx.currentUserRole === 'superuser' && !_ctx.isAdd ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", UserEditFormvue_type_template_id_630fdb84_hoisted_18, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("p", null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_SuperUserIntro1')), 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("p", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("strong", null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_SuperUserIntro2')), 1)]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_Field, {
+ }, null, 8, ["user-login", "access-levels", "filter-access-levels"])])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), _ctx.theUser.superuser_access ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", UserEditFormvue_type_template_id_71e0c307_hoisted_17, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_SuperUsersPermissionsNotice')), 1)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true)], 512)), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vShow"], _ctx.activeTab === 'permissions']]) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), _ctx.activeTab === 'superuser' && _ctx.currentUserRole === 'superuser' && !_ctx.isAdd ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", UserEditFormvue_type_template_id_71e0c307_hoisted_18, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("p", null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_SuperUserIntro1')), 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("p", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("strong", null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_SuperUserIntro2')), 1)]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_Field, {
modelValue: _ctx.superUserAccessChecked,
"onUpdate:modelValue": _cache[13] || (_cache[13] = function ($event) {
return _ctx.superUserAccessChecked = $event;
@@ -1731,7 +1713,7 @@ function UserEditFormvue_type_template_id_630fdb84_render(_ctx, _cache, $props,
uicontrol: "checkbox",
name: "superuser_access",
title: _ctx.translate('UsersManager_HasSuperUserAccess')
- }, null, 8, ["modelValue", "disabled", "title"])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UserEditFormvue_type_template_id_630fdb84_hoisted_19, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UserEditFormvue_type_template_id_630fdb84_hoisted_20, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("h2", null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_AreYouSure')), 1), _ctx.theUser.superuser_access ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("p", UserEditFormvue_type_template_id_630fdb84_hoisted_21, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_RemoveSuperuserAccessConfirm')), 1)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), !_ctx.theUser.superuser_access ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("p", UserEditFormvue_type_template_id_630fdb84_hoisted_22, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_AddSuperuserAccessConfirm')), 1)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_Field, {
+ }, null, 8, ["modelValue", "disabled", "title"])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UserEditFormvue_type_template_id_71e0c307_hoisted_19, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UserEditFormvue_type_template_id_71e0c307_hoisted_20, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("h2", null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_AreYouSure')), 1), _ctx.theUser.superuser_access ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("p", UserEditFormvue_type_template_id_71e0c307_hoisted_21, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_RemoveSuperuserAccessConfirm')), 1)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), !_ctx.theUser.superuser_access ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("p", UserEditFormvue_type_template_id_71e0c307_hoisted_22, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_AddSuperuserAccessConfirm')), 1)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_Field, {
modelValue: _ctx.passwordConfirmationForSuperUser,
"onUpdate:modelValue": _cache[15] || (_cache[15] = function ($event) {
return _ctx.passwordConfirmationForSuperUser = $event;
@@ -1741,7 +1723,7 @@ function UserEditFormvue_type_template_id_630fdb84_render(_ctx, _cache, $props,
autocomplete: false,
"full-width": true,
title: _ctx.translate('UsersManager_YourCurrentPassword')
- }, null, 8, ["modelValue", "title"])])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UserEditFormvue_type_template_id_630fdb84_hoisted_23, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", {
+ }, null, 8, ["modelValue", "title"])])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UserEditFormvue_type_template_id_71e0c307_hoisted_23, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", {
href: "",
class: "modal-action modal-close btn",
onClick: _cache[16] || (_cache[16] = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withModifiers"])(function ($event) {
@@ -1758,13 +1740,13 @@ function UserEditFormvue_type_template_id_630fdb84_render(_ctx, _cache, $props,
_ctx.passwordConfirmationForSuperUser = '';
}, ["prevent"]))
- }, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('General_No')), 1)])], 512)])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), _ctx.currentUserRole === 'superuser' && !_ctx.isAdd ? Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])((Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", UserEditFormvue_type_template_id_630fdb84_hoisted_24, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("p", null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_ResetTwoFactorAuthenticationInfo')), 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UserEditFormvue_type_template_id_630fdb84_hoisted_25, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_SaveButton, {
+ }, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('General_No')), 1)])], 512)])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), _ctx.currentUserRole === 'superuser' && !_ctx.isAdd ? Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])((Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", UserEditFormvue_type_template_id_71e0c307_hoisted_24, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("p", null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_ResetTwoFactorAuthenticationInfo')), 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UserEditFormvue_type_template_id_71e0c307_hoisted_25, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_SaveButton, {
saving: _ctx.isResetting2FA,
onConfirm: _cache[18] || (_cache[18] = function ($event) {
return _ctx.confirmReset2FA();
}),
value: _ctx.translate('UsersManager_ResetTwoFactorAuthentication')
- }, null, 8, ["saving", "value"])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UserEditFormvue_type_template_id_630fdb84_hoisted_26, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UserEditFormvue_type_template_id_630fdb84_hoisted_27, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("h2", null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_AreYouSure')), 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("p", null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_ConfirmWithPassword')), 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_Field, {
+ }, null, 8, ["saving", "value"])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UserEditFormvue_type_template_id_71e0c307_hoisted_26, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UserEditFormvue_type_template_id_71e0c307_hoisted_27, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("h2", null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_AreYouSure')), 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("p", null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_ConfirmWithPassword')), 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_Field, {
modelValue: _ctx.passwordConfirmation,
"onUpdate:modelValue": _cache[19] || (_cache[19] = function ($event) {
return _ctx.passwordConfirmation = $event;
@@ -1774,7 +1756,7 @@ function UserEditFormvue_type_template_id_630fdb84_render(_ctx, _cache, $props,
autocomplete: false,
"full-width": true,
title: _ctx.translate('UsersManager_YourCurrentPassword')
- }, null, 8, ["modelValue", "title"])])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UserEditFormvue_type_template_id_630fdb84_hoisted_28, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", {
+ }, null, 8, ["modelValue", "title"])])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UserEditFormvue_type_template_id_71e0c307_hoisted_28, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", {
href: "",
class: "modal-action modal-close btn",
onClick: _cache[20] || (_cache[20] = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withModifiers"])(function ($event) {
@@ -1790,9 +1772,9 @@ function UserEditFormvue_type_template_id_630fdb84_render(_ctx, _cache, $props,
$event.preventDefault();
_ctx.passwordConfirmation = '';
})
- }, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('General_No')), 1)])], 512)], 512)), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vShow"], _ctx.activeTab === '2fa']]) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true)])], 512), [[_directive_form]]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UserEditFormvue_type_template_id_630fdb84_hoisted_29, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UserEditFormvue_type_template_id_630fdb84_hoisted_30, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("h2", {
+ }, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('General_No')), 1)])], 512)], 512)), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vShow"], _ctx.activeTab === '2fa']]) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true)])], 512), [[_directive_form]]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UserEditFormvue_type_template_id_71e0c307_hoisted_29, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UserEditFormvue_type_template_id_71e0c307_hoisted_30, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("h2", {
innerHTML: _ctx.$sanitize(_ctx.changePasswordTitle)
- }, null, 8, UserEditFormvue_type_template_id_630fdb84_hoisted_31), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("p", null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_ConfirmWithPassword')), 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_Field, {
+ }, null, 8, UserEditFormvue_type_template_id_71e0c307_hoisted_31), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("p", null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_ConfirmWithPassword')), 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_Field, {
modelValue: _ctx.passwordConfirmation,
"onUpdate:modelValue": _cache[22] || (_cache[22] = function ($event) {
return _ctx.passwordConfirmation = $event;
@@ -1802,7 +1784,7 @@ function UserEditFormvue_type_template_id_630fdb84_render(_ctx, _cache, $props,
autocomplete: false,
"full-width": true,
title: _ctx.translate('UsersManager_YourCurrentPassword')
- }, null, 8, ["modelValue", "title"])])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UserEditFormvue_type_template_id_630fdb84_hoisted_32, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", {
+ }, null, 8, ["modelValue", "title"])])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UserEditFormvue_type_template_id_71e0c307_hoisted_32, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", {
href: "",
class: "modal-action modal-close btn",
onClick: _cache[23] || (_cache[23] = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withModifiers"])(function ($event) {
@@ -1820,7 +1802,7 @@ function UserEditFormvue_type_template_id_630fdb84_render(_ctx, _cache, $props,
_: 1
}, 8, ["class", "content-title"]);
}
-// CONCATENATED MODULE: ./plugins/UsersManager/vue/src/UserEditForm/UserEditForm.vue?vue&type=template&id=630fdb84
+// CONCATENATED MODULE: ./plugins/UsersManager/vue/src/UserEditForm/UserEditForm.vue?vue&type=template&id=71e0c307
// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-typescript/node_modules/cache-loader/dist/cjs.js??ref--14-0!./node_modules/babel-loader/lib!./node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader??ref--14-2!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--0-1!./plugins/UsersManager/vue/src/UserEditForm/UserEditForm.vue?vue&type=script&lang=ts
@@ -1833,7 +1815,7 @@ var DEFAULT_USER = {
uses_2fa: false,
password: '',
email: '',
- invited_at: ''
+ invite_status: ''
};
var UserEditFormvue_type_script_lang_ts_window = window,
UserEditFormvue_type_script_lang_ts_$ = UserEditFormvue_type_script_lang_ts_window.$;
@@ -1972,11 +1954,11 @@ var UserEditFormvue_type_script_lang_ts_window = window,
_this3.firstSiteAccess = null;
_this3.isSavingUserInfo = false;
_this3.isUserModified = true;
- _this3.theUser.invited_at = 'xx';
+ _this3.theUser.invite_status = 'pending';
_this3.resetPasswordVar();
- _this3.showUserSavedNotification();
+ _this3.showUserCreatedNotification();
});
},
resetPasswordVar: function resetPasswordVar() {
@@ -2016,6 +1998,13 @@ var UserEditFormvue_type_script_lang_ts_window = window,
type: 'toast'
});
},
+ showUserCreatedNotification: function showUserCreatedNotification() {
+ external_CoreHome_["NotificationsStore"].show({
+ message: Object(external_CoreHome_["translate"])('UsersManager_InviteSuccess'),
+ context: 'success',
+ type: 'toast'
+ });
+ },
reset2FA: function reset2FA() {
var _this5 = this;
@@ -2078,12 +2067,19 @@ var UserEditFormvue_type_script_lang_ts_window = window,
saveButtonLabel: function saveButtonLabel() {
return this.isAdd ? Object(external_CoreHome_["translate"])('UsersManager_InviteUser') : Object(external_CoreHome_["translate"])('UsersManager_SaveBasicInfo');
},
- isPendingUser: function isPendingUser() {
- // eslint-disable-next-line eqeqeq
- return this.user && (this.theUser.invited_at === '' || !this.theUser.invited_at);
+ isPending: function isPending() {
+ if (!this.user) {
+ return true;
+ }
+
+ if (this.user.invite_status === 'pending' || Number.isInteger(this.user.invite_status)) {
+ return true;
+ }
+
+ return false;
},
isAdd: function isAdd() {
- return !this.user; // purposefully checking input property not theUser state
+ return !this.user;
},
changePasswordTitle: function changePasswordTitle() {
return Object(external_CoreHome_["translate"])('UsersManager_AreYouSureChangeDetails', "<strong>".concat(this.theUser.login, "</strong>"));
@@ -2096,7 +2092,7 @@ var UserEditFormvue_type_script_lang_ts_window = window,
-UserEditFormvue_type_script_lang_ts.render = UserEditFormvue_type_template_id_630fdb84_render
+UserEditFormvue_type_script_lang_ts.render = UserEditFormvue_type_template_id_71e0c307_render
/* harmony default export */ var UserEditForm = (UserEditFormvue_type_script_lang_ts);
// CONCATENATED MODULE: ./plugins/UsersManager/vue/src/UserEditForm/UserEditForm.adapter.ts
@@ -2141,226 +2137,224 @@ UserEditFormvue_type_script_lang_ts.render = UserEditFormvue_type_template_id_63
directiveName: 'piwikUserEditForm',
restrict: 'E'
}));
-// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-babel/node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/templateLoader.js??ref--6!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--0-1!./plugins/UsersManager/vue/src/PagedUsersList/PagedUsersList.vue?vue&type=template&id=2ff6c088&scoped=true
-
+// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-babel/node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/templateLoader.js??ref--6!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--0-1!./plugins/UsersManager/vue/src/PagedUsersList/PagedUsersList.vue?vue&type=template&id=4e2f5521
-Object(external_commonjs_vue_commonjs2_vue_root_Vue_["pushScopeId"])("data-v-2ff6c088");
-
-var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_1 = {
+var PagedUsersListvue_type_template_id_4e2f5521_hoisted_1 = {
class: "userListFilters row"
};
-var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_2 = {
- class: "col s12 m12 l6"
+var PagedUsersListvue_type_template_id_4e2f5521_hoisted_2 = {
+ class: "col s12 m12 l8"
};
-var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_3 = {
- class: "input-field col s12 m4 l4"
+var PagedUsersListvue_type_template_id_4e2f5521_hoisted_3 = {
+ class: "input-field col s12 m3 l3"
};
-var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_4 = {
+var PagedUsersListvue_type_template_id_4e2f5521_hoisted_4 = {
id: "user-list-bulk-actions",
class: "dropdown-content"
};
-var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_5 = {
+var PagedUsersListvue_type_template_id_4e2f5521_hoisted_5 = {
class: "dropdown-trigger",
"data-target": "bulk-set-access"
};
-var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_6 = {
+var PagedUsersListvue_type_template_id_4e2f5521_hoisted_6 = {
id: "bulk-set-access",
class: "dropdown-content"
};
-var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_7 = ["onClick"];
-var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_8 = {
+var PagedUsersListvue_type_template_id_4e2f5521_hoisted_7 = ["onClick"];
+var PagedUsersListvue_type_template_id_4e2f5521_hoisted_8 = {
key: 0
};
-var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_9 = {
- class: "input-field col s12 m4 l4"
+var PagedUsersListvue_type_template_id_4e2f5521_hoisted_9 = {
+ class: "input-field col s12 m3 l3"
};
-var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_10 = {
+var PagedUsersListvue_type_template_id_4e2f5521_hoisted_10 = {
class: "permissions-for-selector"
};
-var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_11 = {
- class: "input-field col s12 m4 l4"
+var PagedUsersListvue_type_template_id_4e2f5521_hoisted_11 = {
+ class: "input-field col s12 m3 l3"
};
-var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_12 = {
+var PagedUsersListvue_type_template_id_4e2f5521_hoisted_12 = {
+ class: "input-field col s12 m3 l3"
+};
+var PagedUsersListvue_type_template_id_4e2f5521_hoisted_13 = {
key: 0,
- class: "input-field col s12 m12 l6 users-list-pagination-container"
+ class: "input-field col s12 m12 l4 users-list-pagination-container"
};
-var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_13 = {
+var PagedUsersListvue_type_template_id_4e2f5521_hoisted_14 = {
class: "usersListPagination"
};
-var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_14 = {
+var PagedUsersListvue_type_template_id_4e2f5521_hoisted_15 = {
class: "pointer"
};
-var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_15 = {
+var PagedUsersListvue_type_template_id_4e2f5521_hoisted_16 = {
class: "counter"
};
-var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_16 = {
+var PagedUsersListvue_type_template_id_4e2f5521_hoisted_17 = {
class: "pointer"
};
-var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_17 = {
+var PagedUsersListvue_type_template_id_4e2f5521_hoisted_18 = {
key: 0,
class: "roles-help-notification"
};
-var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_18 = ["innerHTML"];
-var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_19 = {
+var PagedUsersListvue_type_template_id_4e2f5521_hoisted_19 = ["innerHTML"];
+var PagedUsersListvue_type_template_id_4e2f5521_hoisted_20 = {
class: "select-cell"
};
-var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_20 = {
+var PagedUsersListvue_type_template_id_4e2f5521_hoisted_21 = {
class: "checkbox-container"
};
-var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_21 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", null, null, -1);
+var PagedUsersListvue_type_template_id_4e2f5521_hoisted_22 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", null, null, -1);
-var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_22 = {
+var PagedUsersListvue_type_template_id_4e2f5521_hoisted_23 = {
class: "first"
};
-var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_23 = {
+var PagedUsersListvue_type_template_id_4e2f5521_hoisted_24 = {
class: "role_header"
};
-var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_24 = {
+var PagedUsersListvue_type_template_id_4e2f5521_hoisted_25 = {
style: {
"margin-right": "3.5px"
}
};
-var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_25 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", {
+var PagedUsersListvue_type_template_id_4e2f5521_hoisted_26 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", {
class: "icon-help"
}, null, -1);
-var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_26 = [PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_25];
-var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_27 = {
+var PagedUsersListvue_type_template_id_4e2f5521_hoisted_27 = [PagedUsersListvue_type_template_id_4e2f5521_hoisted_26];
+var PagedUsersListvue_type_template_id_4e2f5521_hoisted_28 = {
key: 0
};
-var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_28 = ["title"];
-var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_29 = {
+var PagedUsersListvue_type_template_id_4e2f5521_hoisted_29 = ["title"];
+var PagedUsersListvue_type_template_id_4e2f5521_hoisted_30 = {
key: 2
};
-var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_30 = {
+var PagedUsersListvue_type_template_id_4e2f5521_hoisted_31 = {
class: "actions-cell-header"
};
-var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_31 = {
+var PagedUsersListvue_type_template_id_4e2f5521_hoisted_32 = {
key: 0,
class: "select-all-row"
};
-var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_32 = {
+var PagedUsersListvue_type_template_id_4e2f5521_hoisted_33 = {
colspan: "8"
};
-var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_33 = {
+var PagedUsersListvue_type_template_id_4e2f5521_hoisted_34 = {
key: 0
};
-var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_34 = ["innerHTML"];
-var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_35 = ["innerHTML"];
-var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_36 = {
+var PagedUsersListvue_type_template_id_4e2f5521_hoisted_35 = ["innerHTML"];
+var PagedUsersListvue_type_template_id_4e2f5521_hoisted_36 = ["innerHTML"];
+var PagedUsersListvue_type_template_id_4e2f5521_hoisted_37 = {
key: 1
};
-var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_37 = ["innerHTML"];
-var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_38 = ["innerHTML"];
-var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_39 = ["id"];
-var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_40 = {
+var PagedUsersListvue_type_template_id_4e2f5521_hoisted_38 = ["innerHTML"];
+var PagedUsersListvue_type_template_id_4e2f5521_hoisted_39 = ["innerHTML"];
+var PagedUsersListvue_type_template_id_4e2f5521_hoisted_40 = ["id"];
+var PagedUsersListvue_type_template_id_4e2f5521_hoisted_41 = {
class: "select-cell"
};
-var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_41 = {
+var PagedUsersListvue_type_template_id_4e2f5521_hoisted_42 = {
class: "checkbox-container"
};
-var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_42 = ["id", "onUpdate:modelValue"];
+var PagedUsersListvue_type_template_id_4e2f5521_hoisted_43 = ["id", "onUpdate:modelValue"];
-var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_43 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", null, null, -1);
+var PagedUsersListvue_type_template_id_4e2f5521_hoisted_44 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", null, null, -1);
-var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_44 = {
+var PagedUsersListvue_type_template_id_4e2f5521_hoisted_45 = {
id: "userLogin"
};
-var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_45 = {
+var PagedUsersListvue_type_template_id_4e2f5521_hoisted_46 = {
class: "access-cell"
};
-var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_46 = {
+var PagedUsersListvue_type_template_id_4e2f5521_hoisted_47 = {
key: 0,
id: "email"
};
-var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_47 = {
+var PagedUsersListvue_type_template_id_4e2f5521_hoisted_48 = {
key: 1,
id: "twofa"
};
-var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_48 = {
+var PagedUsersListvue_type_template_id_4e2f5521_hoisted_49 = {
key: 0,
class: "icon-ok"
};
-var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_49 = {
+var PagedUsersListvue_type_template_id_4e2f5521_hoisted_50 = {
key: 1,
class: "icon-close"
};
-var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_50 = {
+var PagedUsersListvue_type_template_id_4e2f5521_hoisted_51 = {
key: 2,
id: "last_seen"
};
-var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_51 = {
+var PagedUsersListvue_type_template_id_4e2f5521_hoisted_52 = {
id: "status"
};
-var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_52 = {
+var PagedUsersListvue_type_template_id_4e2f5521_hoisted_53 = ["title"];
+var PagedUsersListvue_type_template_id_4e2f5521_hoisted_54 = {
class: "center actions-cell"
};
-var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_53 = ["onClick"];
+var PagedUsersListvue_type_template_id_4e2f5521_hoisted_55 = ["onClick"];
-var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_54 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", {
+var PagedUsersListvue_type_template_id_4e2f5521_hoisted_56 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", {
class: "icon-email"
}, null, -1);
-var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_55 = [PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_54];
-var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_56 = ["onClick"];
+var PagedUsersListvue_type_template_id_4e2f5521_hoisted_57 = [PagedUsersListvue_type_template_id_4e2f5521_hoisted_56];
+var PagedUsersListvue_type_template_id_4e2f5521_hoisted_58 = ["onClick"];
-var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_57 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", {
+var PagedUsersListvue_type_template_id_4e2f5521_hoisted_59 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", {
class: "icon-edit"
}, null, -1);
-var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_58 = [PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_57];
-var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_59 = ["onClick"];
+var PagedUsersListvue_type_template_id_4e2f5521_hoisted_60 = [PagedUsersListvue_type_template_id_4e2f5521_hoisted_59];
+var PagedUsersListvue_type_template_id_4e2f5521_hoisted_61 = ["onClick"];
-var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_60 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", {
+var PagedUsersListvue_type_template_id_4e2f5521_hoisted_62 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", {
class: "icon-delete"
}, null, -1);
-var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_61 = [PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_60];
-var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_62 = {
+var PagedUsersListvue_type_template_id_4e2f5521_hoisted_63 = [PagedUsersListvue_type_template_id_4e2f5521_hoisted_62];
+var _hoisted_64 = {
class: "delete-user-confirm-modal modal",
ref: "deleteUserConfirmModal"
};
-var PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_63 = {
+var _hoisted_65 = {
class: "modal-content"
};
-var _hoisted_64 = ["innerHTML"];
-var _hoisted_65 = ["innerHTML"];
-var _hoisted_66 = {
+var _hoisted_66 = ["innerHTML"];
+var _hoisted_67 = ["innerHTML"];
+var _hoisted_68 = {
class: "modal-footer"
};
-var _hoisted_67 = {
+var _hoisted_69 = {
class: "change-user-role-confirm-modal modal",
ref: "changeUserRoleConfirmModal"
};
-var _hoisted_68 = {
+var _hoisted_70 = {
class: "modal-content"
};
-var _hoisted_69 = ["innerHTML"];
-var _hoisted_70 = {
+var _hoisted_71 = ["innerHTML"];
+var _hoisted_72 = {
key: 1
};
-var _hoisted_71 = ["innerHTML"];
-var _hoisted_72 = ["innerHTML"];
-var _hoisted_73 = {
+var _hoisted_73 = ["innerHTML"];
+var _hoisted_74 = ["innerHTML"];
+var _hoisted_75 = {
class: "modal-footer"
};
-var _hoisted_74 = {
+var _hoisted_76 = {
class: "resend-invite-confirm-modal modal",
ref: "resendInviteConfirmModal"
};
-var _hoisted_75 = {
+var _hoisted_77 = {
class: "modal-content"
};
-var _hoisted_76 = ["innerHTML"];
-var _hoisted_77 = {
+var _hoisted_78 = ["innerHTML"];
+var _hoisted_79 = {
class: "modal-footer"
};
-
-Object(external_commonjs_vue_commonjs2_vue_root_Vue_["popScopeId"])();
-
-function PagedUsersListvue_type_template_id_2ff6c088_scoped_true_render(_ctx, _cache, $props, $setup, $data, $options) {
+function PagedUsersListvue_type_template_id_4e2f5521_render(_ctx, _cache, $props, $setup, $data, $options) {
var _component_Field = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["resolveComponent"])("Field");
var _component_ActivityIndicator = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["resolveComponent"])("ActivityIndicator");
@@ -2377,13 +2371,13 @@ function PagedUsersListvue_type_template_id_2ff6c088_scoped_true_render(_ctx, _c
class: Object(external_commonjs_vue_commonjs2_vue_root_Vue_["normalizeClass"])(["pagedUsersList", {
loading: _ctx.isLoadingUsers
}])
- }, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_1, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_2, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_3, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", {
+ }, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", PagedUsersListvue_type_template_id_4e2f5521_hoisted_1, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", PagedUsersListvue_type_template_id_4e2f5521_hoisted_2, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", PagedUsersListvue_type_template_id_4e2f5521_hoisted_3, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", {
class: Object(external_commonjs_vue_commonjs2_vue_root_Vue_["normalizeClass"])(["dropdown-trigger btn bulk-actions", {
disabled: _ctx.isBulkActionsDisabled
}]),
href: "",
"data-target": "user-list-bulk-actions"
- }, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createTextVNode"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_BulkActions')), 1)], 2), [[_directive_dropdown_menu]]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("ul", PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_4, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("li", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_5, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createTextVNode"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_SetPermission')), 1)], 512), [[_directive_dropdown_menu]]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("ul", PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_6, [(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(true), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])(external_commonjs_vue_commonjs2_vue_root_Vue_["Fragment"], null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["renderList"])(_ctx.bulkActionAccessLevels, function (access) {
+ }, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createTextVNode"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_BulkActions')), 1)], 2), [[_directive_dropdown_menu]]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("ul", PagedUsersListvue_type_template_id_4e2f5521_hoisted_4, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("li", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", PagedUsersListvue_type_template_id_4e2f5521_hoisted_5, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createTextVNode"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_SetPermission')), 1)], 512), [[_directive_dropdown_menu]]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("ul", PagedUsersListvue_type_template_id_4e2f5521_hoisted_6, [(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(true), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])(external_commonjs_vue_commonjs2_vue_root_Vue_["Fragment"], null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["renderList"])(_ctx.bulkActionAccessLevels, function (access) {
return Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("li", {
key: access.key
}, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", {
@@ -2394,7 +2388,7 @@ function PagedUsersListvue_type_template_id_2ff6c088_scoped_true_render(_ctx, _c
_ctx.showAccessChangeConfirm();
}, ["prevent"])
- }, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(access.value), 9, PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_7)]);
+ }, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(access.value), 9, PagedUsersListvue_type_template_id_4e2f5521_hoisted_7)]);
}), 128))])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("li", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", {
href: "",
onClick: _cache[0] || (_cache[0] = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withModifiers"])(function ($event) {
@@ -2403,12 +2397,12 @@ function PagedUsersListvue_type_template_id_2ff6c088_scoped_true_render(_ctx, _c
_ctx.showAccessChangeConfirm();
}, ["prevent"]))
- }, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_RemovePermissions')), 1)]), _ctx.currentUserRole === 'superuser' ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("li", PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_8, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", {
+ }, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_RemovePermissions')), 1)]), _ctx.currentUserRole === 'superuser' ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("li", PagedUsersListvue_type_template_id_4e2f5521_hoisted_8, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", {
href: "",
onClick: _cache[1] || (_cache[1] = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withModifiers"])(function ($event) {
return _ctx.showDeleteConfirm();
}, ["prevent"]))
- }, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_DeleteUsers')), 1)])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true)])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_9, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_10, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_Field, {
+ }, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_DeleteUsers')), 1)])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true)])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", PagedUsersListvue_type_template_id_4e2f5521_hoisted_9, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", PagedUsersListvue_type_template_id_4e2f5521_hoisted_10, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_Field, {
"model-value": _ctx.userTextFilter,
"onUpdate:modelValue": _cache[2] || (_cache[2] = function ($event) {
return _ctx.onUserTextFilterChange($event);
@@ -2417,7 +2411,7 @@ function PagedUsersListvue_type_template_id_2ff6c088_scoped_true_render(_ctx, _c
uicontrol: "text",
"full-width": true,
placeholder: _ctx.translate('UsersManager_UserSearch')
- }, null, 8, ["model-value", "placeholder"])])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_11, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_Field, {
+ }, null, 8, ["model-value", "placeholder"])])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", PagedUsersListvue_type_template_id_4e2f5521_hoisted_11, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_Field, {
"model-value": _ctx.accessLevelFilter,
"onUpdate:modelValue": _cache[3] || (_cache[3] = function ($event) {
_ctx.accessLevelFilter = $event;
@@ -2432,14 +2426,29 @@ function PagedUsersListvue_type_template_id_2ff6c088_scoped_true_render(_ctx, _c
options: _ctx.filterAccessLevels,
"full-width": true,
placeholder: _ctx.translate('UsersManager_FilterByAccess')
- }, null, 8, ["model-value", "options", "placeholder"])])])]), _ctx.totalEntries > _ctx.searchParams.limit ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_12, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_13, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", {
+ }, null, 8, ["model-value", "options", "placeholder"])])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", PagedUsersListvue_type_template_id_4e2f5521_hoisted_12, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_Field, {
+ "model-value": _ctx.statusLevelFilter,
+ "onUpdate:modelValue": _cache[4] || (_cache[4] = function ($event) {
+ _ctx.statusLevelFilter = $event;
+
+ _ctx.changeSearch({
+ filter_status: _ctx.statusLevelFilter,
+ offset: 0
+ });
+ }),
+ name: "status-level-filter",
+ uicontrol: "select",
+ options: _ctx.filterStatusLevels,
+ "full-width": true,
+ placeholder: _ctx.translate('UsersManager_FilterByStatus')
+ }, null, 8, ["model-value", "options", "placeholder"])])])]), _ctx.totalEntries > _ctx.searchParams.limit ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", PagedUsersListvue_type_template_id_4e2f5521_hoisted_13, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", PagedUsersListvue_type_template_id_4e2f5521_hoisted_14, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", {
class: Object(external_commonjs_vue_commonjs2_vue_root_Vue_["normalizeClass"])(["btn prev", {
disabled: _ctx.searchParams.offset <= 0
}]),
- onClick: _cache[4] || (_cache[4] = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withModifiers"])(function ($event) {
+ onClick: _cache[5] || (_cache[5] = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withModifiers"])(function ($event) {
return _ctx.gotoPreviousPage();
}, ["prevent"]))
- }, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_14, "« " + Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('General_Previous')), 1)], 2), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_15, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", {
+ }, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", PagedUsersListvue_type_template_id_4e2f5521_hoisted_15, "« " + Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('General_Previous')), 1)], 2), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", PagedUsersListvue_type_template_id_4e2f5521_hoisted_16, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", {
class: Object(external_commonjs_vue_commonjs2_vue_root_Vue_["normalizeClass"])({
visibility: _ctx.isLoadingUsers ? 'hidden' : 'visible'
})
@@ -2449,10 +2458,10 @@ function PagedUsersListvue_type_template_id_2ff6c088_scoped_true_render(_ctx, _c
class: Object(external_commonjs_vue_commonjs2_vue_root_Vue_["normalizeClass"])(["btn next", {
disabled: _ctx.searchParams.offset + _ctx.searchParams.limit >= _ctx.totalEntries
}]),
- onClick: _cache[5] || (_cache[5] = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withModifiers"])(function ($event) {
+ onClick: _cache[6] || (_cache[6] = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withModifiers"])(function ($event) {
return _ctx.gotoNextPage();
}, ["prevent"]))
- }, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_16, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('General_Next')) + " »", 1)], 2)])])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true)]), _ctx.isRoleHelpToggled ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_17, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_Notification, {
+ }, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", PagedUsersListvue_type_template_id_4e2f5521_hoisted_17, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('General_Next')) + " »", 1)], 2)])])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true)]), _ctx.isRoleHelpToggled ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", PagedUsersListvue_type_template_id_4e2f5521_hoisted_18, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_Notification, {
context: "info",
type: "persistent",
noclear: true
@@ -2460,7 +2469,7 @@ function PagedUsersListvue_type_template_id_2ff6c088_scoped_true_render(_ctx, _c
default: Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withCtx"])(function () {
return [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", {
innerHTML: _ctx.$sanitize(_ctx.rolesHelpText)
- }, null, 8, PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_18)];
+ }, null, 8, PagedUsersListvue_type_template_id_4e2f5521_hoisted_19)];
}),
_: 1
})])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_ContentBlock, null, {
@@ -2470,75 +2479,75 @@ function PagedUsersListvue_type_template_id_2ff6c088_scoped_true_render(_ctx, _c
class: Object(external_commonjs_vue_commonjs2_vue_root_Vue_["normalizeClass"])({
loading: _ctx.isLoadingUsers
})
- }, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("thead", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("tr", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("th", PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_19, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_20, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("label", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("input", {
+ }, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("thead", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("tr", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("th", PagedUsersListvue_type_template_id_4e2f5521_hoisted_20, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", PagedUsersListvue_type_template_id_4e2f5521_hoisted_21, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("label", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("input", {
type: "checkbox",
id: "paged_users_select_all",
checked: "checked",
- "onUpdate:modelValue": _cache[6] || (_cache[6] = function ($event) {
+ "onUpdate:modelValue": _cache[7] || (_cache[7] = function ($event) {
return _ctx.isAllCheckboxSelected = $event;
}),
- onChange: _cache[7] || (_cache[7] = function ($event) {
+ onChange: _cache[8] || (_cache[8] = function ($event) {
return _ctx.onAllCheckboxChange();
})
- }, null, 544), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vModelCheckbox"], _ctx.isAllCheckboxSelected]]), PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_21])])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("th", PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_22, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_Username')), 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("th", PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_23, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_24, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_RoleFor')), 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", {
+ }, null, 544), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vModelCheckbox"], _ctx.isAllCheckboxSelected]]), PagedUsersListvue_type_template_id_4e2f5521_hoisted_22])])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("th", PagedUsersListvue_type_template_id_4e2f5521_hoisted_23, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_Username')), 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("th", PagedUsersListvue_type_template_id_4e2f5521_hoisted_24, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", PagedUsersListvue_type_template_id_4e2f5521_hoisted_25, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_RoleFor')), 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", {
href: "",
class: Object(external_commonjs_vue_commonjs2_vue_root_Vue_["normalizeClass"])(["helpIcon", {
sticky: _ctx.isRoleHelpToggled
}]),
- onClick: _cache[8] || (_cache[8] = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withModifiers"])(function ($event) {
+ onClick: _cache[9] || (_cache[9] = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withModifiers"])(function ($event) {
return _ctx.isRoleHelpToggled = !_ctx.isRoleHelpToggled;
}, ["prevent"]))
- }, PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_26, 2), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_Field, {
+ }, PagedUsersListvue_type_template_id_4e2f5521_hoisted_27, 2), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_Field, {
class: "permissions-for-selector",
"model-value": _ctx.permissionsForSite,
- "onUpdate:modelValue": _cache[9] || (_cache[9] = function ($event) {
+ "onUpdate:modelValue": _cache[10] || (_cache[10] = function ($event) {
_ctx.onPermissionsForUpdate($event);
}),
uicontrol: "site",
"ui-control-attributes": {
onlySitesWithAdminAccess: _ctx.currentUserRole !== 'superuser'
}
- }, null, 8, ["model-value", "ui-control-attributes"])])]), _ctx.currentUserRole === 'superuser' ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("th", PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_27, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_Email')), 1)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), _ctx.currentUserRole === 'superuser' ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("th", {
+ }, null, 8, ["model-value", "ui-control-attributes"])])]), _ctx.currentUserRole === 'superuser' ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("th", PagedUsersListvue_type_template_id_4e2f5521_hoisted_28, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_Email')), 1)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), _ctx.currentUserRole === 'superuser' ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("th", {
key: 1,
title: _ctx.translate('UsersManager_UsesTwoFactorAuthentication')
- }, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_2FA')), 9, PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_28)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), _ctx.currentUserRole === 'superuser' ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("th", PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_29, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_LastSeen')), 1)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("th", null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_Status')), 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("th", PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_30, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('General_Actions')), 1)])])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("tbody", null, [_ctx.isAllCheckboxSelected && _ctx.users.length && _ctx.users.length < _ctx.totalEntries ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("tr", PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_31, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("td", PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_32, [!_ctx.areAllResultsSelected ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_33, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", {
+ }, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_2FA')), 9, PagedUsersListvue_type_template_id_4e2f5521_hoisted_29)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), _ctx.currentUserRole === 'superuser' ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("th", PagedUsersListvue_type_template_id_4e2f5521_hoisted_30, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_LastSeen')), 1)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("th", null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_Status')), 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("th", PagedUsersListvue_type_template_id_4e2f5521_hoisted_31, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('General_Actions')), 1)])])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("tbody", null, [_ctx.isAllCheckboxSelected && _ctx.users.length && _ctx.users.length < _ctx.totalEntries ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("tr", PagedUsersListvue_type_template_id_4e2f5521_hoisted_32, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("td", PagedUsersListvue_type_template_id_4e2f5521_hoisted_33, [!_ctx.areAllResultsSelected ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", PagedUsersListvue_type_template_id_4e2f5521_hoisted_34, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", {
innerHTML: _ctx.$sanitize(_ctx.translate('UsersManager_TheDisplayedUsersAreSelected', "<strong>".concat(_ctx.users.length, "</strong>"))),
style: {
"margin-right": "3.5px"
}
- }, null, 8, PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_34), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", {
+ }, null, 8, PagedUsersListvue_type_template_id_4e2f5521_hoisted_35), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", {
class: "toggle-select-all-in-search",
href: "#",
- onClick: _cache[10] || (_cache[10] = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withModifiers"])(function ($event) {
+ onClick: _cache[11] || (_cache[11] = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withModifiers"])(function ($event) {
return _ctx.areAllResultsSelected = !_ctx.areAllResultsSelected;
}, ["prevent"])),
innerHTML: _ctx.$sanitize(_ctx.translate('UsersManager_ClickToSelectAll', "<strong>".concat(_ctx.totalEntries, "</strong>")))
- }, null, 8, PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_35)])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), _ctx.areAllResultsSelected ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_36, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", {
+ }, null, 8, PagedUsersListvue_type_template_id_4e2f5521_hoisted_36)])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), _ctx.areAllResultsSelected ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", PagedUsersListvue_type_template_id_4e2f5521_hoisted_37, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", {
innerHTML: _ctx.$sanitize(_ctx.translate('UsersManager_AllUsersAreSelected', "<strong>".concat(_ctx.totalEntries, "</strong>"))),
style: {
"margin-right": "3.5px"
}
- }, null, 8, PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_37), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", {
+ }, null, 8, PagedUsersListvue_type_template_id_4e2f5521_hoisted_38), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", {
class: "toggle-select-all-in-search",
href: "#",
- onClick: _cache[11] || (_cache[11] = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withModifiers"])(function ($event) {
+ onClick: _cache[12] || (_cache[12] = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withModifiers"])(function ($event) {
return _ctx.areAllResultsSelected = !_ctx.areAllResultsSelected;
}, ["prevent"])),
innerHTML: _ctx.$sanitize(_ctx.translate('UsersManager_ClickToSelectDisplayedUsers', "<strong>".concat(_ctx.users.length, "</strong>")))
- }, null, 8, PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_38)])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true)])])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(true), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])(external_commonjs_vue_commonjs2_vue_root_Vue_["Fragment"], null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["renderList"])(_ctx.users, function (user, index) {
+ }, null, 8, PagedUsersListvue_type_template_id_4e2f5521_hoisted_39)])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true)])])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(true), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])(external_commonjs_vue_commonjs2_vue_root_Vue_["Fragment"], null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["renderList"])(_ctx.users, function (user, index) {
return Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("tr", {
id: "row".concat(index),
key: user.login
- }, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("td", PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_40, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_41, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("label", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("input", {
+ }, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("td", PagedUsersListvue_type_template_id_4e2f5521_hoisted_41, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", PagedUsersListvue_type_template_id_4e2f5521_hoisted_42, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("label", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("input", {
type: "checkbox",
id: "paged_users_select_row".concat(index),
"onUpdate:modelValue": function onUpdateModelValue($event) {
return _ctx.selectedRows[index] = $event;
},
- onClick: _cache[12] || (_cache[12] = function ($event) {
+ onClick: _cache[13] || (_cache[13] = function ($event) {
return _ctx.onRowSelected();
})
- }, null, 8, PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_42), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vModelCheckbox"], _ctx.selectedRows[index]]]), PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_43])])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("td", PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_44, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(user.login), 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("td", PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_45, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_Field, {
+ }, null, 8, PagedUsersListvue_type_template_id_4e2f5521_hoisted_43), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vModelCheckbox"], _ctx.selectedRows[index]]]), PagedUsersListvue_type_template_id_4e2f5521_hoisted_44])])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("td", PagedUsersListvue_type_template_id_4e2f5521_hoisted_45, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(user.login), 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("td", PagedUsersListvue_type_template_id_4e2f5521_hoisted_46, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_Field, {
"model-value": user.role,
"onUpdate:modelValue": function onUpdateModelValue($event) {
_ctx.userToChange = user;
@@ -2549,9 +2558,10 @@ function PagedUsersListvue_type_template_id_2ff6c088_scoped_true_render(_ctx, _c
disabled: user.role === 'superuser',
uicontrol: "select",
options: user.login !== 'anonymous' ? _ctx.accessLevels : _ctx.anonymousAccessLevels
- }, null, 8, ["model-value", "onUpdate:modelValue", "disabled", "options"])])]), _ctx.currentUserRole === 'superuser' ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("td", PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_46, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(user.email), 1)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), _ctx.currentUserRole === 'superuser' ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("td", PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_47, [user.uses_2fa ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("span", PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_48)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), !user.uses_2fa ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("span", PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_49)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true)])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), _ctx.currentUserRole === 'superuser' ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("td", PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_50, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(user.last_seen ? "".concat(user.last_seen, " ago") : '-'), 1)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("td", PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_51, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", {
- class: Object(external_commonjs_vue_commonjs2_vue_root_Vue_["normalizeClass"])(user.invite_status)
- }, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.getInviteStatus(user.invite_status)), 3)]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("td", PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_52, [user.invite_status !== 'accept' ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("button", {
+ }, null, 8, ["model-value", "onUpdate:modelValue", "disabled", "options"])])]), _ctx.currentUserRole === 'superuser' ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("td", PagedUsersListvue_type_template_id_4e2f5521_hoisted_47, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(user.email), 1)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), _ctx.currentUserRole === 'superuser' ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("td", PagedUsersListvue_type_template_id_4e2f5521_hoisted_48, [user.uses_2fa ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("span", PagedUsersListvue_type_template_id_4e2f5521_hoisted_49)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), !user.uses_2fa ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("span", PagedUsersListvue_type_template_id_4e2f5521_hoisted_50)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true)])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), _ctx.currentUserRole === 'superuser' ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("td", PagedUsersListvue_type_template_id_4e2f5521_hoisted_51, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(user.last_seen ? "".concat(user.last_seen, " ago") : '-'), 1)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("td", PagedUsersListvue_type_template_id_4e2f5521_hoisted_52, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", {
+ class: Object(external_commonjs_vue_commonjs2_vue_root_Vue_["normalizeClass"])(Number.isInteger(user.invite_status) ? 'pending' : user.invite_status),
+ title: user.invite_status === 'expired' ? _ctx.translate('UsersManager_ExpiredInviteAutomaticallyRemoved', '3') : ''
+ }, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.getInviteStatus(user.invite_status)), 11, PagedUsersListvue_type_template_id_4e2f5521_hoisted_53)]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("td", PagedUsersListvue_type_template_id_4e2f5521_hoisted_54, [(_ctx.currentUserRole === 'superuser' || _ctx.currentUserRole === 'admin' && user.invited_by === _ctx.currentUserLogin) && user.invite_status !== 'active' ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("button", {
key: 0,
class: "resend table-action",
title: "Resend Invite",
@@ -2560,7 +2570,7 @@ function PagedUsersListvue_type_template_id_2ff6c088_scoped_true_render(_ctx, _c
_ctx.showResendConfirm();
}
- }, PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_55, 8, PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_53)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), user.login !== 'anonymous' ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("button", {
+ }, PagedUsersListvue_type_template_id_4e2f5521_hoisted_57, 8, PagedUsersListvue_type_template_id_4e2f5521_hoisted_55)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), user.login !== 'anonymous' ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("button", {
key: 1,
class: "edituser table-action",
title: "Edit",
@@ -2569,7 +2579,7 @@ function PagedUsersListvue_type_template_id_2ff6c088_scoped_true_render(_ctx, _c
user: user
});
}
- }, PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_58, 8, PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_56)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), _ctx.currentUserRole === 'superuser' && user.login !== 'anonymous' ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("button", {
+ }, PagedUsersListvue_type_template_id_4e2f5521_hoisted_60, 8, PagedUsersListvue_type_template_id_4e2f5521_hoisted_58)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), (_ctx.currentUserRole === 'superuser' || _ctx.currentUserRole === 'admin' && user.invited_by === _ctx.currentUserLogin) && user.login !== 'anonymous' ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("button", {
key: 2,
class: "deleteuser table-action",
title: "Delete",
@@ -2578,20 +2588,20 @@ function PagedUsersListvue_type_template_id_2ff6c088_scoped_true_render(_ctx, _c
_ctx.showDeleteConfirm();
}
- }, PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_61, 8, PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_59)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true)])], 8, PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_39);
+ }, PagedUsersListvue_type_template_id_4e2f5521_hoisted_63, 8, PagedUsersListvue_type_template_id_4e2f5521_hoisted_61)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true)])], 8, PagedUsersListvue_type_template_id_4e2f5521_hoisted_40);
}), 128))])], 2), [[_directive_content_table]])];
}),
_: 1
- }), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_62, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", PagedUsersListvue_type_template_id_2ff6c088_scoped_true_hoisted_63, [_ctx.userToChange ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("h3", {
+ }), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_64, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_65, [_ctx.userToChange ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("h3", {
key: 0,
innerHTML: _ctx.$sanitize(_ctx.translate('UsersManager_DeleteUserConfirmSingle', "<strong>".concat(_ctx.userToChange.login, "</strong>")))
- }, null, 8, _hoisted_64)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), !_ctx.userToChange ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("p", {
+ }, null, 8, _hoisted_66)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), !_ctx.userToChange ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("p", {
key: 1,
innerHTML: _ctx.$sanitize(_ctx.translate('UsersManager_DeleteUserConfirmMultiple', "<strong>".concat(_ctx.affectedUsersCount, "</strong>")))
- }, null, 8, _hoisted_65)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true)]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_66, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", {
+ }, null, 8, _hoisted_67)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true)]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_68, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", {
href: "",
class: "modal-action modal-close btn",
- onClick: _cache[13] || (_cache[13] = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withModifiers"])(function ($event) {
+ onClick: _cache[14] || (_cache[14] = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withModifiers"])(function ($event) {
return _ctx.deleteRequestedUsers();
}, ["prevent"])),
style: {
@@ -2600,22 +2610,22 @@ function PagedUsersListvue_type_template_id_2ff6c088_scoped_true_render(_ctx, _c
}, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('General_Yes')), 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", {
href: "",
class: "modal-action modal-close modal-no",
- onClick: _cache[14] || (_cache[14] = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withModifiers"])(function ($event) {
+ onClick: _cache[15] || (_cache[15] = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withModifiers"])(function ($event) {
_ctx.userToChange = null;
_ctx.roleToChangeTo = null;
}, ["prevent"]))
- }, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('General_No')), 1)])], 512), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_67, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_68, [_ctx.userToChange ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("h3", {
+ }, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('General_No')), 1)])], 512), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_69, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_70, [_ctx.userToChange ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("h3", {
key: 0,
innerHTML: _ctx.$sanitize(_ctx.deleteUserPermConfirmSingleText)
- }, null, 8, _hoisted_69)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), _ctx.userToChange && _ctx.userToChange.login === 'anonymous' && _ctx.roleToChangeTo === 'view' ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("h3", _hoisted_70, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("em", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createTextVNode"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('General_Note')) + ": ", 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", {
+ }, null, 8, _hoisted_71)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), _ctx.userToChange && _ctx.userToChange.login === 'anonymous' && _ctx.roleToChangeTo === 'view' ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("h3", _hoisted_72, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("em", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createTextVNode"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('General_Note')) + ": ", 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", {
innerHTML: _ctx.$sanitize(_ctx.translate('UsersManager_AnonymousUserRoleChangeWarning', 'anonymous', _ctx.getRoleDisplay(_ctx.roleToChangeTo)))
- }, null, 8, _hoisted_71)])])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), !_ctx.userToChange ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("p", {
+ }, null, 8, _hoisted_73)])])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), !_ctx.userToChange ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("p", {
key: 2,
innerHTML: _ctx.$sanitize(_ctx.deleteUserPermConfirmMultipleText)
- }, null, 8, _hoisted_72)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true)]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_73, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", {
+ }, null, 8, _hoisted_74)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true)]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_75, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", {
href: "",
class: "modal-action modal-close btn",
- onClick: _cache[15] || (_cache[15] = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withModifiers"])(function ($event) {
+ onClick: _cache[16] || (_cache[16] = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withModifiers"])(function ($event) {
return _ctx.changeUserRole();
}, ["prevent"])),
style: {
@@ -2624,17 +2634,17 @@ function PagedUsersListvue_type_template_id_2ff6c088_scoped_true_render(_ctx, _c
}, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('General_Yes')), 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", {
href: "",
class: "modal-action modal-close modal-no",
- onClick: _cache[16] || (_cache[16] = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withModifiers"])(function ($event) {
+ onClick: _cache[17] || (_cache[17] = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withModifiers"])(function ($event) {
_ctx.userToChange = null;
_ctx.roleToChangeTo = null;
}, ["prevent"]))
- }, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('General_No')), 1)])], 512), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_74, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_75, [_ctx.userToChange ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("h3", {
+ }, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('General_No')), 1)])], 512), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_76, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_77, [_ctx.userToChange ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("h3", {
key: 0,
innerHTML: _ctx.$sanitize(_ctx.translate('UsersManager_ResendInviteConfirmSingle', "<strong>".concat(_ctx.userToChange.login, "</strong>")))
- }, null, 8, _hoisted_76)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true)]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_77, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", {
+ }, null, 8, _hoisted_78)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true)]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_79, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", {
href: "",
class: "modal-action modal-close btn",
- onClick: _cache[17] || (_cache[17] = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withModifiers"])(function ($event) {
+ onClick: _cache[18] || (_cache[18] = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withModifiers"])(function ($event) {
return _ctx.resendRequestedUser();
}, ["prevent"])),
style: {
@@ -2643,13 +2653,13 @@ function PagedUsersListvue_type_template_id_2ff6c088_scoped_true_render(_ctx, _c
}, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('General_Yes')), 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", {
href: "",
class: "modal-action modal-close modal-no",
- onClick: _cache[18] || (_cache[18] = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withModifiers"])(function ($event) {
+ onClick: _cache[19] || (_cache[19] = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withModifiers"])(function ($event) {
_ctx.userToChange = null;
_ctx.roleToChangeTo = null;
}, ["prevent"]))
}, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('General_No')), 1)])], 512)], 2);
}
-// CONCATENATED MODULE: ./plugins/UsersManager/vue/src/PagedUsersList/PagedUsersList.vue?vue&type=template&id=2ff6c088&scoped=true
+// CONCATENATED MODULE: ./plugins/UsersManager/vue/src/PagedUsersList/PagedUsersList.vue?vue&type=template&id=4e2f5521
// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-typescript/node_modules/cache-loader/dist/cjs.js??ref--14-0!./node_modules/babel-loader/lib!./node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader??ref--14-2!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--0-1!./plugins/UsersManager/vue/src/PagedUsersList/PagedUsersList.vue?vue&type=script&lang=ts
@@ -2677,6 +2687,10 @@ var PagedUsersListvue_type_script_lang_ts_window = window,
type: Array,
required: true
},
+ filterStatusLevels: {
+ type: Array,
+ required: true
+ },
totalEntries: Number,
users: {
type: Array,
@@ -2706,6 +2720,7 @@ var PagedUsersListvue_type_script_lang_ts_window = window,
userToChange: null,
roleToChangeTo: null,
accessLevelFilter: null,
+ statusLevelFilter: null,
isRoleHelpToggled: false,
userTextFilter: '',
permissionsForSite: {
@@ -2725,19 +2740,15 @@ var PagedUsersListvue_type_script_lang_ts_window = window,
},
methods: {
getInviteStatus: function getInviteStatus(inviteStatus) {
- if (inviteStatus === 'accept') {
- return Object(external_CoreHome_["translate"])('UsersManager_Active');
- }
-
- if (inviteStatus === 'pending') {
- return Object(external_CoreHome_["translate"])('UsersManager_Pending');
+ if (Number.isInteger(inviteStatus)) {
+ return Object(external_CoreHome_["translate"])('UsersManager_InviteDayLeft', inviteStatus);
}
if (inviteStatus === 'expired') {
return Object(external_CoreHome_["translate"])('UsersManager_Expired');
}
- return Object(external_CoreHome_["translate"])('UsersManager_Decline');
+ return Object(external_CoreHome_["translate"])('UsersManager_Active');
},
onPermissionsForUpdate: function onPermissionsForUpdate(site) {
this.permissionsForSite = site;
@@ -2844,6 +2855,9 @@ var PagedUsersListvue_type_script_lang_ts_window = window,
}
},
computed: {
+ currentUserLogin: function currentUserLogin() {
+ return external_CoreHome_["Matomo"].userLogin;
+ },
paginationLowerBound: function paginationLowerBound() {
return this.searchParams.offset + 1;
},
@@ -2928,17 +2942,11 @@ var PagedUsersListvue_type_script_lang_ts_window = window,
}));
// CONCATENATED MODULE: ./plugins/UsersManager/vue/src/PagedUsersList/PagedUsersList.vue?vue&type=script&lang=ts
-// EXTERNAL MODULE: ./plugins/UsersManager/vue/src/PagedUsersList/PagedUsersList.vue?vue&type=style&index=0&id=2ff6c088&scoped=true&lang=css
-var PagedUsersListvue_type_style_index_0_id_2ff6c088_scoped_true_lang_css = __webpack_require__("f2d6");
-
// CONCATENATED MODULE: ./plugins/UsersManager/vue/src/PagedUsersList/PagedUsersList.vue
-
-
-PagedUsersListvue_type_script_lang_ts.render = PagedUsersListvue_type_template_id_2ff6c088_scoped_true_render
-PagedUsersListvue_type_script_lang_ts.__scopeId = "data-v-2ff6c088"
+PagedUsersListvue_type_script_lang_ts.render = PagedUsersListvue_type_template_id_4e2f5521_render
/* harmony default export */ var PagedUsersList = (PagedUsersListvue_type_script_lang_ts);
// CONCATENATED MODULE: ./plugins/UsersManager/vue/src/PagedUsersList/PagedUsersList.adapter.ts
@@ -3004,47 +3012,47 @@ PagedUsersListvue_type_script_lang_ts.__scopeId = "data-v-2ff6c088"
directiveName: 'piwikPagedUsersList',
restrict: 'E'
}));
-// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-babel/node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/templateLoader.js??ref--6!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--0-1!./plugins/UsersManager/vue/src/UsersManager/UsersManager.vue?vue&type=template&id=621f5797
+// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-babel/node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/templateLoader.js??ref--6!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--0-1!./plugins/UsersManager/vue/src/UsersManager/UsersManager.vue?vue&type=template&id=4688a5a2
-var UsersManagervue_type_template_id_621f5797_hoisted_1 = {
+var UsersManagervue_type_template_id_4688a5a2_hoisted_1 = {
class: "usersManager"
};
-var UsersManagervue_type_template_id_621f5797_hoisted_2 = {
+var UsersManagervue_type_template_id_4688a5a2_hoisted_2 = {
key: 0
};
-var UsersManagervue_type_template_id_621f5797_hoisted_3 = {
+var UsersManagervue_type_template_id_4688a5a2_hoisted_3 = {
key: 1
};
-var UsersManagervue_type_template_id_621f5797_hoisted_4 = {
+var UsersManagervue_type_template_id_4688a5a2_hoisted_4 = {
class: "row add-user-container"
};
-var UsersManagervue_type_template_id_621f5797_hoisted_5 = {
+var UsersManagervue_type_template_id_4688a5a2_hoisted_5 = {
class: "col s12"
};
-var UsersManagervue_type_template_id_621f5797_hoisted_6 = {
+var UsersManagervue_type_template_id_4688a5a2_hoisted_6 = {
class: "input-field",
style: {
"margin-right": "3.5px"
}
};
-var UsersManagervue_type_template_id_621f5797_hoisted_7 = {
+var UsersManagervue_type_template_id_4688a5a2_hoisted_7 = {
key: 0,
class: "input-field"
};
-var UsersManagervue_type_template_id_621f5797_hoisted_8 = {
+var UsersManagervue_type_template_id_4688a5a2_hoisted_8 = {
key: 0
};
-var UsersManagervue_type_template_id_621f5797_hoisted_9 = {
+var UsersManagervue_type_template_id_4688a5a2_hoisted_9 = {
class: "add-existing-user-modal modal",
ref: "addExistingUserModal"
};
-var UsersManagervue_type_template_id_621f5797_hoisted_10 = {
+var UsersManagervue_type_template_id_4688a5a2_hoisted_10 = {
class: "modal-content"
};
-var UsersManagervue_type_template_id_621f5797_hoisted_11 = {
+var UsersManagervue_type_template_id_4688a5a2_hoisted_11 = {
class: "modal-footer"
};
-function UsersManagervue_type_template_id_621f5797_render(_ctx, _cache, $props, $setup, $data, $options) {
+function UsersManagervue_type_template_id_4688a5a2_render(_ctx, _cache, $props, $setup, $data, $options) {
var _component_EnrichedHeadline = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["resolveComponent"])("EnrichedHeadline");
var _component_PagedUsersList = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["resolveComponent"])("PagedUsersList");
@@ -3057,7 +3065,7 @@ function UsersManagervue_type_template_id_621f5797_render(_ctx, _cache, $props,
var _directive_tooltips = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["resolveDirective"])("tooltips");
- return Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])((Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", UsersManagervue_type_template_id_621f5797_hoisted_1, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("h2", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_EnrichedHeadline, {
+ return Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])((Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", UsersManagervue_type_template_id_4688a5a2_hoisted_1, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("h2", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_EnrichedHeadline, {
"help-url": "https://matomo.org/docs/manage-users/",
"feature-name": "Users Management"
}, {
@@ -3065,12 +3073,12 @@ function UsersManagervue_type_template_id_621f5797_render(_ctx, _cache, $props,
return [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createTextVNode"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_ManageUsers')), 1)];
}),
_: 1
- })]), _ctx.currentUserRole === 'superuser' ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("p", UsersManagervue_type_template_id_621f5797_hoisted_2, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_ManageUsersDesc')), 1)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), _ctx.currentUserRole === 'admin' ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("p", UsersManagervue_type_template_id_621f5797_hoisted_3, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_ManageUsersAdminDesc')), 1)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UsersManagervue_type_template_id_621f5797_hoisted_4, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UsersManagervue_type_template_id_621f5797_hoisted_5, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UsersManagervue_type_template_id_621f5797_hoisted_6, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", {
+ })]), _ctx.currentUserRole === 'superuser' ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("p", UsersManagervue_type_template_id_4688a5a2_hoisted_2, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_ManageUsersDesc')), 1)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), _ctx.currentUserRole === 'admin' ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("p", UsersManagervue_type_template_id_4688a5a2_hoisted_3, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_ManageUsersAdminDesc')), 1)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UsersManagervue_type_template_id_4688a5a2_hoisted_4, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UsersManagervue_type_template_id_4688a5a2_hoisted_5, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UsersManagervue_type_template_id_4688a5a2_hoisted_6, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", {
class: "btn add-new-user",
onClick: _cache[0] || (_cache[0] = function ($event) {
return _ctx.onAddNewUser();
})
- }, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_InviteNewUser')), 1)]), _ctx.currentUserRole !== 'superuser' ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", UsersManagervue_type_template_id_621f5797_hoisted_7, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", {
+ }, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_InviteNewUser')), 1)]), _ctx.currentUserRole !== 'superuser' ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", UsersManagervue_type_template_id_4688a5a2_hoisted_7, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", {
class: "btn add-existing-user",
onClick: _cache[1] || (_cache[1] = function ($event) {
return _ctx.showAddExistingUserModal();
@@ -3099,10 +3107,11 @@ function UsersManagervue_type_template_id_621f5797_render(_ctx, _cache, $props,
"current-user-role": _ctx.currentUserRole,
"access-levels": _ctx.accessLevels,
"filter-access-levels": _ctx.actualFilterAccessLevels,
+ "filter-status-levels": _ctx.filterStatusLevels,
"search-params": _ctx.searchParams,
users: _ctx.users,
"total-entries": _ctx.totalEntries
- }, null, 8, ["initial-site-id", "initial-site-name", "is-loading-users", "current-user-role", "access-levels", "filter-access-levels", "search-params", "users", "total-entries"])], 512), [[_directive_content_intro]])], 512), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vShow"], !_ctx.isEditing]]), _ctx.isEditing ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", UsersManagervue_type_template_id_621f5797_hoisted_8, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_UserEditForm, {
+ }, null, 8, ["initial-site-id", "initial-site-name", "is-loading-users", "current-user-role", "access-levels", "filter-access-levels", "filter-status-levels", "search-params", "users", "total-entries"])], 512), [[_directive_content_intro]])], 512), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vShow"], !_ctx.isEditing]]), _ctx.isEditing ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", UsersManagervue_type_template_id_4688a5a2_hoisted_8, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_UserEditForm, {
onDone: _cache[7] || (_cache[7] = function ($event) {
return _ctx.onDoneEditing($event.isUserModified);
}),
@@ -3115,14 +3124,14 @@ function UsersManagervue_type_template_id_621f5797_render(_ctx, _cache, $props,
onUpdated: _cache[8] || (_cache[8] = function ($event) {
return _ctx.userBeingEdited = $event.user;
})
- }, null, 8, ["user", "current-user-role", "access-levels", "filter-access-levels", "initial-site-id", "initial-site-name"])])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UsersManagervue_type_template_id_621f5797_hoisted_9, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UsersManagervue_type_template_id_621f5797_hoisted_10, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("h3", null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_AddExistingUser')), 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("p", null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_EnterUsernameOrEmail')) + ":", 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_Field, {
+ }, null, 8, ["user", "current-user-role", "access-levels", "filter-access-levels", "initial-site-id", "initial-site-name"])])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UsersManagervue_type_template_id_4688a5a2_hoisted_9, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UsersManagervue_type_template_id_4688a5a2_hoisted_10, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("h3", null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_AddExistingUser')), 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("p", null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_EnterUsernameOrEmail')) + ":", 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_Field, {
modelValue: _ctx.addNewUserLoginEmail,
"onUpdate:modelValue": _cache[9] || (_cache[9] = function ($event) {
return _ctx.addNewUserLoginEmail = $event;
}),
name: "add-existing-user-email",
uicontrol: "text"
- }, null, 8, ["modelValue"])])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UsersManagervue_type_template_id_621f5797_hoisted_11, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", {
+ }, null, 8, ["modelValue"])])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", UsersManagervue_type_template_id_4688a5a2_hoisted_11, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", {
href: "",
class: "modal-action modal-close btn",
onClick: _cache[10] || (_cache[10] = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withModifiers"])(function ($event) {
@@ -3139,7 +3148,7 @@ function UsersManagervue_type_template_id_621f5797_render(_ctx, _cache, $props,
}, ["prevent"]))
}, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('General_Cancel')), 1)])], 512)], 512)), [[_directive_tooltips]]);
}
-// CONCATENATED MODULE: ./plugins/UsersManager/vue/src/UsersManager/UsersManager.vue?vue&type=template&id=621f5797
+// CONCATENATED MODULE: ./plugins/UsersManager/vue/src/UsersManager/UsersManager.vue?vue&type=template&id=4688a5a2
// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-typescript/node_modules/cache-loader/dist/cjs.js??ref--14-0!./node_modules/babel-loader/lib!./node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader??ref--14-2!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--0-1!./plugins/UsersManager/vue/src/UsersManager/UsersManager.vue?vue&type=script&lang=ts
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
@@ -3184,6 +3193,10 @@ var UsersManagervue_type_script_lang_ts_window = window,
filterAccessLevels: {
type: Array,
required: true
+ },
+ filterStatusLevels: {
+ type: Array,
+ required: true
}
},
components: {
@@ -3207,6 +3220,7 @@ var UsersManagervue_type_script_lang_ts_window = window,
limit: NUM_USERS_PER_PAGE,
filter_search: '',
filter_access: '',
+ filter_status: '',
idSite: this.initialSiteId
},
isLoadingUsers: false,
@@ -3280,6 +3294,7 @@ var UsersManagervue_type_script_lang_ts_window = window,
method: 'UsersManager.getUsersPlusRole',
filter_search: this.searchParams.filter_search,
filter_access: this.searchParams.filter_access,
+ filter_status: this.searchParams.filter_status,
idSite: this.searchParams.idSite,
filter_limit: '-1'
});
@@ -3314,16 +3329,25 @@ var UsersManagervue_type_script_lang_ts_window = window,
});
},
onResendInvite: function onResendInvite(user) {
- console.log(user);
+ var _this3 = this;
+
external_CoreHome_["AjaxHelper"].fetch({
method: 'UsersManager.resendInvite',
userLogin: user.login
- }).then(function (res) {
- console.log(res);
+ }).then(function () {
+ _this3.fetchUsers();
+
+ var id = external_CoreHome_["NotificationsStore"].show({
+ message: Object(external_CoreHome_["translate"])('UsersManager_ResendInviteSuccess', user.login),
+ id: 'resendinvite',
+ context: 'success',
+ type: 'transient'
+ });
+ external_CoreHome_["NotificationsStore"].scrollToNotification(id);
});
},
fetchUsers: function fetchUsers() {
- var _this3 = this;
+ var _this4 = this;
this.isLoadingUsers = true;
return external_CoreHome_["AjaxHelper"].fetch(Object.assign(Object.assign({}, this.searchParams), {}, {
@@ -3332,15 +3356,15 @@ var UsersManagervue_type_script_lang_ts_window = window,
returnResponseObject: true
}).then(function (helper) {
var result = helper.getRequestHandle();
- _this3.totalEntries = parseInt(result.getResponseHeader('x-matomo-total-results') || '0', 10);
- _this3.users = result.responseJSON;
- _this3.isLoadingUsers = false;
+ _this4.totalEntries = parseInt(result.getResponseHeader('x-matomo-total-results') || '0', 10);
+ _this4.users = result.responseJSON;
+ _this4.isLoadingUsers = false;
}).catch(function () {
- _this3.isLoadingUsers = false;
+ _this4.isLoadingUsers = false;
});
},
addExistingUser: function addExistingUser() {
- var _this4 = this;
+ var _this5 = this;
this.isLoadingUsers = true;
return external_CoreHome_["AjaxHelper"].fetch({
@@ -3348,12 +3372,12 @@ var UsersManagervue_type_script_lang_ts_window = window,
userLogin: this.addNewUserLoginEmail
}).then(function (response) {
if (response && response.value) {
- return _this4.addNewUserLoginEmail;
+ return _this5.addNewUserLoginEmail;
}
return external_CoreHome_["AjaxHelper"].fetch({
method: 'UsersManager.getUserLoginFromUserEmail',
- userEmail: _this4.addNewUserLoginEmail
+ userEmail: _this5.addNewUserLoginEmail
}).then(function (r) {
return r.value;
});
@@ -3363,12 +3387,12 @@ var UsersManagervue_type_script_lang_ts_window = window,
}, {
userLogin: login,
access: 'view',
- idSites: _this4.searchParams.idSite
+ idSites: _this5.searchParams.idSite
});
}).then(function () {
- return _this4.fetchUsers();
+ return _this5.fetchUsers();
}).catch(function () {
- _this4.isLoadingUsers = false;
+ _this5.isLoadingUsers = false;
});
},
onAddNewUser: function onAddNewUser() {
@@ -3404,7 +3428,7 @@ var UsersManagervue_type_script_lang_ts_window = window,
-UsersManagervue_type_script_lang_ts.render = UsersManagervue_type_template_id_621f5797_render
+UsersManagervue_type_script_lang_ts.render = UsersManagervue_type_template_id_4688a5a2_render
/* harmony default export */ var UsersManager = (UsersManagervue_type_script_lang_ts);
// CONCATENATED MODULE: ./plugins/UsersManager/vue/src/UsersManager/UsersManager.adapter.ts
@@ -3433,6 +3457,9 @@ UsersManagervue_type_script_lang_ts.render = UsersManagervue_type_template_id_62
},
filterAccessLevels: {
angularJsBind: '<'
+ },
+ filterStatusLevels: {
+ angularJsBind: '<'
}
},
directiveName: 'piwikUsersManager',
diff --git a/plugins/UsersManager/vue/dist/UsersManager.umd.min.js b/plugins/UsersManager/vue/dist/UsersManager.umd.min.js
index c3c14a30d0..980b483417 100644
--- a/plugins/UsersManager/vue/dist/UsersManager.umd.min.js
+++ b/plugins/UsersManager/vue/dist/UsersManager.umd.min.js
@@ -1,56 +1,56 @@
-(function(e,t){"object"===typeof exports&&"object"===typeof module?module.exports=t(require("CoreHome"),require("vue"),require("CorePluginsAdmin")):"function"===typeof define&&define.amd?define(["CoreHome",,"CorePluginsAdmin"],t):"object"===typeof exports?exports["UsersManager"]=t(require("CoreHome"),require("vue"),require("CorePluginsAdmin")):e["UsersManager"]=t(e["CoreHome"],e["Vue"],e["CorePluginsAdmin"])})("undefined"!==typeof self?self:this,(function(e,t,n){return function(e){var t={};function n(s){if(t[s])return t[s].exports;var r=t[s]={i:s,l:!1,exports:{}};return e[s].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=e,n.c=t,n.d=function(e,t,s){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:s})},n.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var s=Object.create(null);if(n.r(s),Object.defineProperty(s,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(s,r,function(t){return e[t]}.bind(null,r));return s},n.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="plugins/UsersManager/vue/dist/",n(n.s="fae3")}({"19dc":function(t,n){t.exports=e},"8bba":function(e,t,n){},"8bbf":function(e,n){e.exports=t},a5a2:function(e,t){e.exports=n},f2d6:function(e,t,n){"use strict";n("8bba")},fae3:function(e,t,n){"use strict";if(n.r(t),n.d(t,"CapabilitiesEdit",(function(){return E})),n.d(t,"UserPermissionsEdit",(function(){return Fe})),n.d(t,"UserEditForm",(function(){return yt})),n.d(t,"PagedUsersList",(function(){return es})),n.d(t,"UsersManager",(function(){return Ss})),n.d(t,"NewsletterSettings",(function(){return ks})),n.d(t,"AnonymousSettings",(function(){return Ms})),n.d(t,"PersonalSettings",(function(){return $s})),"undefined"!==typeof window){var s=window.document.currentScript,r=s&&s.src.match(/(.+\/)[^/]+\.js(\?.*)?$/);r&&(n.p=r[1])}var i=n("19dc"),a=n("8bbf"),o=["title"],l=["onClick"],c={key:0,class:"addCapability"},d={class:"ui-confirm confirmCapabilityToggle modal",ref:"confirmCapabilityToggleModal"},u={class:"modal-content"},m=["innerHTML"],b=["innerHTML"],p={class:"modal-footer"};function g(e,t,n,s,r,i){var g=Object(a["resolveComponent"])("Field");return Object(a["openBlock"])(),Object(a["createElementBlock"])("div",{class:Object(a["normalizeClass"])(["capabilitiesEdit",{busy:e.isBusy}])},[(Object(a["openBlock"])(!0),Object(a["createElementBlock"])(a["Fragment"],null,Object(a["renderList"])(e.actualCapabilities,(function(t){return Object(a["openBlock"])(),Object(a["createElementBlock"])("div",{key:t.id,class:"chip"},[Object(a["createElementVNode"])("span",{class:"capability-name",title:"".concat(t.description," ").concat(e.isIncludedInRole(t)?"<br/><br/>".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<t.length;n++){var s=t[n];s.enumerable=s.enumerable||!1,s.configurable=!0,"value"in s&&(s.writable=!0),Object.defineProperty(e,s.key,s)}}function O(e,t,n){return t&&j(e.prototype,t),n&&j(e,n),e}function v(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}
+(function(e,t){"object"===typeof exports&&"object"===typeof module?module.exports=t(require("CoreHome"),require("vue"),require("CorePluginsAdmin")):"function"===typeof define&&define.amd?define(["CoreHome",,"CorePluginsAdmin"],t):"object"===typeof exports?exports["UsersManager"]=t(require("CoreHome"),require("vue"),require("CorePluginsAdmin")):e["UsersManager"]=t(e["CoreHome"],e["Vue"],e["CorePluginsAdmin"])})("undefined"!==typeof self?self:this,(function(e,t,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 yt})),n.d(t,"PagedUsersList",(function(){return ns})),n.d(t,"UsersManager",(function(){return ys})),n.d(t,"NewsletterSettings",(function(){return ws})),n.d(t,"AnonymousSettings",(function(){return _s})),n.d(t,"PersonalSettings",(function(){return zs})),"undefined"!==typeof window){var s=window.document.currentScript,r=s&&s.src.match(/(.+\/)[^/]+\.js(\?.*)?$/);r&&(n.p=r[1])}var i=n("19dc"),a=n("8bbf"),o=["title"],l=["onClick"],c={key:0,class:"addCapability"},d={class:"ui-confirm confirmCapabilityToggle modal",ref:"confirmCapabilityToggleModal"},u={class:"modal-content"},m=["innerHTML"],b=["innerHTML"],p={class:"modal-footer"};function g(e,t,n,s,r,i){var g=Object(a["resolveComponent"])("Field");return Object(a["openBlock"])(),Object(a["createElementBlock"])("div",{class:Object(a["normalizeClass"])(["capabilitiesEdit",{busy:e.isBusy}])},[(Object(a["openBlock"])(!0),Object(a["createElementBlock"])(a["Fragment"],null,Object(a["renderList"])(e.actualCapabilities,(function(t){return Object(a["openBlock"])(),Object(a["createElementBlock"])("div",{key:t.id,class:"chip"},[Object(a["createElementVNode"])("span",{class:"capability-name",title:"".concat(t.description," ").concat(e.isIncludedInRole(t)?"<br/><br/>".concat(e.translate("UsersManager_IncludedInUsersRole")):"")},Object(a["toDisplayString"])(t.category)+": "+Object(a["toDisplayString"])(t.name),9,o),e.isIncludedInRole(t)?Object(a["createCommentVNode"])("",!0):(Object(a["openBlock"])(),Object(a["createElementBlock"])("span",{key:0,class:"icon-close",onClick:function(n){e.capabilityToRemoveId=t.id,e.onToggleCapability(!1)}},null,8,l))])})),128)),e.availableCapabilitiesGrouped.length?(Object(a["openBlock"])(),Object(a["createElementBlock"])("div",c,[Object(a["createVNode"])(g,{"model-value":e.capabilityToAddId,"onUpdate:modelValue":t[0]||(t[0]=function(t){e.capabilityToAddId=t,e.onToggleCapability(!0)}),disabled:e.isBusy,uicontrol:"expandable-select",name:"add_capability","full-width":!0,options:e.availableCapabilitiesGrouped},null,8,["model-value","disabled","options"])])):Object(a["createCommentVNode"])("",!0),Object(a["createElementVNode"])("div",d,[Object(a["createElementVNode"])("div",u,[e.isAddingCapability?(Object(a["openBlock"])(),Object(a["createElementBlock"])("h2",{key:0,innerHTML:e.$sanitize(e.confirmAddCapabilityToggleContent)},null,8,m)):Object(a["createCommentVNode"])("",!0),e.isAddingCapability?Object(a["createCommentVNode"])("",!0):(Object(a["openBlock"])(),Object(a["createElementBlock"])("h2",{key:1,innerHTML:e.$sanitize(e.confirmCapabilityToggleContent)},null,8,b))]),Object(a["createElementVNode"])("div",p,[Object(a["createElementVNode"])("a",{href:"",class:"modal-action modal-close btn",onClick:t[1]||(t[1]=Object(a["withModifiers"])((function(t){return e.toggleCapability()}),["prevent"]))},Object(a["toDisplayString"])(e.translate("General_Yes")),1),Object(a["createElementVNode"])("a",{href:"",class:"modal-action modal-close modal-no",onClick:t[2]||(t[2]=Object(a["withModifiers"])((function(t){e.capabilityToAddOrRemove=null,e.capabilityToAddId=null,e.capabilityToRemoveId=null}),["prevent"]))},Object(a["toDisplayString"])(e.translate("General_No")),1)])],512)],2)}var f=n("a5a2");function h(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function j(e,t){for(var n=0;n<t.length;n++){var s=t[n];s.enumerable=s.enumerable||!1,s.configurable=!0,"value"in s&&(s.writable=!0),Object.defineProperty(e,s.key,s)}}function O(e,t,n){return t&&j(e.prototype,t),n&&j(e,n),e}function v(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}
/*!
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
- */var C=function(){function e(){var t=this;f(this,e),v(this,"privateState",Object(a["reactive"])({isLoading:!1,capabilities:[]})),v(this,"state",Object(a["computed"])((function(){return Object(a["readonly"])(t.privateState)}))),v(this,"capabilities",Object(a["computed"])((function(){return t.state.value.capabilities}))),v(this,"isLoading",Object(a["computed"])((function(){return t.state.value.isLoading}))),v(this,"fetchPromise",void 0)}return O(e,[{key:"init",value:function(){return this.fetchCapabilities()}},{key:"fetchCapabilities",value:function(){var e=this;return this.fetchPromise||(this.privateState.isLoading=!0,this.fetchPromise=i["AjaxHelper"].fetch({method:"UsersManager.getAvailableCapabilities"}).then((function(t){return e.privateState.capabilities=t,e.capabilities.value})).finally((function(){e.privateState.isLoading=!1}))),this.fetchPromise}}]),e}(),N=new C,S=window,U=S.$,y=Object(a["defineComponent"])({props:{idsite:[String,Number],siteName:{type:String,required:!0},userLogin:{type:String,required:!0},userRole:{type:String,required:!0},capabilities:Array},components:{Field:h["Field"]},data:function(){return{theCapabilities:this.capabilities||[],isBusy:!1,isAddingCapability:!1,capabilityToAddId:null,capabilityToRemoveId:null,capabilityToAddOrRemove:null}},emits:["change"],watch:{capabilities:function(e){e&&(this.theCapabilities=e)}},created:function(){var e=this;N.init(),this.capabilities?this.theCapabilities=this.capabilities:(this.isBusy=!0,i["AjaxHelper"].fetch({method:"UsersManager.getUsersPlusRole",limit:"1",filter_search:this.userLogin}).then((function(e){return e&&e.capabilities?e.capabilities:[]})).then((function(t){e.theCapabilities=t})).finally((function(){e.isBusy=!1})))},methods:{onToggleCapability:function(e){var t=this;this.isAddingCapability=e;var n=e?this.capabilityToAddId:this.capabilityToRemoveId;this.capabilityToAddOrRemove=null,this.availableCapabilities.forEach((function(e){e.id===n&&(t.capabilityToAddOrRemove=e)})),this.$refs.confirmCapabilityToggleModal&&U(this.$refs.confirmCapabilityToggleModal).modal({dismissible:!1,yes:function(){return null}}).modal("open")},toggleCapability:function(){this.isAddingCapability?this.addCapability(this.capabilityToAddOrRemove):this.removeCapability(this.capabilityToAddOrRemove)},isIncludedInRole:function(e){return-1!==(e.includedInRoles||[]).indexOf(this.userRole)},getCapabilitiesList:function(){var e=this,t=[];return this.availableCapabilities.forEach((function(n){e.isIncludedInRole(n)||e.capabilitiesSet[n.id]&&t.push(n.id)})),t},addCapability:function(e){var t=this;this.isBusy=!0,i["AjaxHelper"].post({method:"UsersManager.addCapabilities"},{userLogin:this.userLogin,capabilities:e.id,idSites:this.idsite}).then((function(){t.$emit("change",t.getCapabilitiesList())})).finally((function(){t.isBusy=!1,t.capabilityToAddOrRemove=null,t.capabilityToAddId=null,t.capabilityToRemoveId=null}))},removeCapability:function(e){var t=this;this.isBusy=!0,i["AjaxHelper"].post({method:"UsersManager.removeCapabilities"},{userLogin:this.userLogin,capabilities:e.id,idSites:this.idsite}).then((function(){t.$emit("change",t.getCapabilitiesList())})).finally((function(){t.isBusy=!1,t.capabilityToAddOrRemove=null,t.capabilityToAddId=null,t.capabilityToRemoveId=null}))}},computed:{availableCapabilities:function(){return N.capabilities.value},confirmAddCapabilityToggleContent:function(){return Object(i["translate"])("UsersManager_AreYouSureAddCapability","<strong>".concat(this.userLogin,"</strong>"),"<strong>".concat(this.capabilityToAddOrRemove?this.capabilityToAddOrRemove.name:"","</strong>"),"<strong>".concat(this.siteNameText,"</strong>"))},confirmCapabilityToggleContent:function(){return Object(i["translate"])("UsersManager_AreYouSureRemoveCapability","<strong>".concat(this.capabilityToAddOrRemove?this.capabilityToAddOrRemove.name:"","</strong>"),"<strong>".concat(this.userLogin,"</strong>"),"<strong>".concat(this.siteNameText,"</strong>"))},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<t.value?-1:1:e.group<t.group?-1:1})),t},capabilitiesSet:function(){var e=this,t={},n=this.theCapabilities;return(n||[]).forEach((function(e){t[e]=!0})),(this.availableCapabilities||[]).forEach((function(n){e.isIncludedInRole(n)&&(t[n.id]=!0)})),t},actualCapabilities:function(){var e=this.capabilitiesSet;return this.availableCapabilities.filter((function(t){return!!e[t.id]}))}}});y.render=g;var E=y,V=(Object(i["createAngularJsAdapter"])({component:E,scope:{idsite:{angularJsBind:"<"},siteName:{angularJsBind:"<"},userLogin:{angularJsBind:"<"},userRole:{angularJsBind:"<"},capabilities:{angularJsBind:"<"},onCapabilitiesChange:{angularJsBind:"&",vue:"change"}},directiveName:"piwikCapabilitiesEdit",restrict:"E",$inject:["$timeout"],events:{change:function(e,t,n,s,r,i,a){a((function(){n.onCapabilitiesChange&&n.onCapabilitiesChange.call({capabilities:e})}))}}}),{key:0,class:"row"}),k={class:"row to-all-websites"},A={class:"col s12"},w={style:{"margin-right":"3.5px"}},T={id:"all-sites-access-select",style:{"margin-right":"3.5px"}},B={style:{"margin-top":"18px"}},_={class:"filters row"},D={class:"col s12 m12 l8"},L={class:"input-field bulk-actions",style:{"margin-right":"3.5px"}},R={id:"user-permissions-edit-bulk-actions",class:"dropdown-content"},x={class:"dropdown-trigger","data-target":"user-permissions-bulk-set-access"},P={id:"user-permissions-bulk-set-access",class:"dropdown-content"},H=["onClick"],F={class:"input-field site-filter",style:{"margin-right":"3.5px"}},I=["value","placeholder"],J={class:"input-field access-filter",style:{"margin-right":"3.5px"}},q={key:0,class:"col s12 m12 l4 sites-for-permission-pagination-container"},$={class:"sites-for-permission-pagination"},G={class:"counter"},z=["textContent"],W={class:"roles-help-notification"},Y=["innerHTML"],X={class:"capabilities-help-notification"},K={id:"sitesForPermission"},Q={class:"select-cell"},Z={class:"checkbox-container"},ee=["checked"],te=Object(a["createElementVNode"])("span",null,null,-1),ne={class:"role_header"},se=["innerHTML"],re=Object(a["createElementVNode"])("span",{class:"icon-help"},null,-1),ie=[re],ae={class:"capabilities_header"},oe=["innerHTML"],le=Object(a["createElementVNode"])("span",{class:"icon-help"},null,-1),ce=[le],de={key:0,class:"select-all-row"},ue={colspan:"4"},me={key:0},be=["innerHTML"],pe=["innerHTML"],ge={key:1},he=["innerHTML"],fe=["innerHTML"],je={class:"select-cell"},Oe={class:"checkbox-container"},ve=["id","onUpdate:modelValue"],Ce=Object(a["createElementVNode"])("span",null,null,-1),Ne={class:"role-select"},Se={class:"delete-access-confirm-modal modal",ref:"deleteAccessConfirmModal"},Ue={class:"modal-content"},ye=["innerHTML"],Ee=["innerHTML"],Ve={class:"modal-footer"},ke={class:"change-access-confirm-modal modal",ref:"changeAccessConfirmModal"},Ae={class:"modal-content"},we=["innerHTML"],Te=["innerHTML"],Me={class:"modal-footer"},Be={class:"confirm-give-access-all-sites modal",ref:"confirmGiveAccessAllSitesModal"},_e={class:"modal-content"},De=["innerHTML"],Le={class:"modal-footer"};
+ */var C=function(){function e(){var t=this;h(this,e),v(this,"privateState",Object(a["reactive"])({isLoading:!1,capabilities:[]})),v(this,"state",Object(a["computed"])((function(){return Object(a["readonly"])(t.privateState)}))),v(this,"capabilities",Object(a["computed"])((function(){return t.state.value.capabilities}))),v(this,"isLoading",Object(a["computed"])((function(){return t.state.value.isLoading}))),v(this,"fetchPromise",void 0)}return O(e,[{key:"init",value:function(){return this.fetchCapabilities()}},{key:"fetchCapabilities",value:function(){var e=this;return this.fetchPromise||(this.privateState.isLoading=!0,this.fetchPromise=i["AjaxHelper"].fetch({method:"UsersManager.getAvailableCapabilities"}).then((function(t){return e.privateState.capabilities=t,e.capabilities.value})).finally((function(){e.privateState.isLoading=!1}))),this.fetchPromise}}]),e}(),N=new C,S=window,U=S.$,y=Object(a["defineComponent"])({props:{idsite:[String,Number],siteName:{type:String,required:!0},userLogin:{type:String,required:!0},userRole:{type:String,required:!0},capabilities:Array},components:{Field:f["Field"]},data:function(){return{theCapabilities:this.capabilities||[],isBusy:!1,isAddingCapability:!1,capabilityToAddId:null,capabilityToRemoveId:null,capabilityToAddOrRemove:null}},emits:["change"],watch:{capabilities:function(e){e&&(this.theCapabilities=e)}},created:function(){var e=this;N.init(),this.capabilities?this.theCapabilities=this.capabilities:(this.isBusy=!0,i["AjaxHelper"].fetch({method:"UsersManager.getUsersPlusRole",limit:"1",filter_search:this.userLogin}).then((function(e){return e&&e.capabilities?e.capabilities:[]})).then((function(t){e.theCapabilities=t})).finally((function(){e.isBusy=!1})))},methods:{onToggleCapability:function(e){var t=this;this.isAddingCapability=e;var n=e?this.capabilityToAddId:this.capabilityToRemoveId;this.capabilityToAddOrRemove=null,this.availableCapabilities.forEach((function(e){e.id===n&&(t.capabilityToAddOrRemove=e)})),this.$refs.confirmCapabilityToggleModal&&U(this.$refs.confirmCapabilityToggleModal).modal({dismissible:!1,yes:function(){return null}}).modal("open")},toggleCapability:function(){this.isAddingCapability?this.addCapability(this.capabilityToAddOrRemove):this.removeCapability(this.capabilityToAddOrRemove)},isIncludedInRole:function(e){return-1!==(e.includedInRoles||[]).indexOf(this.userRole)},getCapabilitiesList:function(){var e=this,t=[];return this.availableCapabilities.forEach((function(n){e.isIncludedInRole(n)||e.capabilitiesSet[n.id]&&t.push(n.id)})),t},addCapability:function(e){var t=this;this.isBusy=!0,i["AjaxHelper"].post({method:"UsersManager.addCapabilities"},{userLogin:this.userLogin,capabilities:e.id,idSites:this.idsite}).then((function(){t.$emit("change",t.getCapabilitiesList())})).finally((function(){t.isBusy=!1,t.capabilityToAddOrRemove=null,t.capabilityToAddId=null,t.capabilityToRemoveId=null}))},removeCapability:function(e){var t=this;this.isBusy=!0,i["AjaxHelper"].post({method:"UsersManager.removeCapabilities"},{userLogin:this.userLogin,capabilities:e.id,idSites:this.idsite}).then((function(){t.$emit("change",t.getCapabilitiesList())})).finally((function(){t.isBusy=!1,t.capabilityToAddOrRemove=null,t.capabilityToAddId=null,t.capabilityToRemoveId=null}))}},computed:{availableCapabilities:function(){return N.capabilities.value},confirmAddCapabilityToggleContent:function(){return Object(i["translate"])("UsersManager_AreYouSureAddCapability","<strong>".concat(this.userLogin,"</strong>"),"<strong>".concat(this.capabilityToAddOrRemove?this.capabilityToAddOrRemove.name:"","</strong>"),"<strong>".concat(this.siteNameText,"</strong>"))},confirmCapabilityToggleContent:function(){return Object(i["translate"])("UsersManager_AreYouSureRemoveCapability","<strong>".concat(this.capabilityToAddOrRemove?this.capabilityToAddOrRemove.name:"","</strong>"),"<strong>".concat(this.userLogin,"</strong>"),"<strong>".concat(this.siteNameText,"</strong>"))},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<t.value?-1:1:e.group<t.group?-1:1})),t},capabilitiesSet:function(){var e=this,t={},n=this.theCapabilities;return(n||[]).forEach((function(e){t[e]=!0})),(this.availableCapabilities||[]).forEach((function(n){e.isIncludedInRole(n)&&(t[n.id]=!0)})),t},actualCapabilities:function(){var e=this.capabilitiesSet;return this.availableCapabilities.filter((function(t){return!!e[t.id]}))}}});y.render=g;var E=y,V=(Object(i["createAngularJsAdapter"])({component:E,scope:{idsite:{angularJsBind:"<"},siteName:{angularJsBind:"<"},userLogin:{angularJsBind:"<"},userRole:{angularJsBind:"<"},capabilities:{angularJsBind:"<"},onCapabilitiesChange:{angularJsBind:"&",vue:"change"}},directiveName:"piwikCapabilitiesEdit",restrict:"E",$inject:["$timeout"],events:{change:function(e,t,n,s,r,i,a){a((function(){n.onCapabilitiesChange&&n.onCapabilitiesChange.call({capabilities:e})}))}}}),{key:0,class:"row"}),k={class:"row to-all-websites"},A={class:"col s12"},w={style:{"margin-right":"3.5px"}},T={id:"all-sites-access-select",style:{"margin-right":"3.5px"}},B={style:{"margin-top":"18px"}},_={class:"filters row"},D={class:"col s12 m12 l8"},L={class:"input-field bulk-actions",style:{"margin-right":"3.5px"}},R={id:"user-permissions-edit-bulk-actions",class:"dropdown-content"},x={class:"dropdown-trigger","data-target":"user-permissions-bulk-set-access"},P={id:"user-permissions-bulk-set-access",class:"dropdown-content"},F=["onClick"],H={class:"input-field site-filter",style:{"margin-right":"3.5px"}},I=["value","placeholder"],J={class:"input-field access-filter",style:{"margin-right":"3.5px"}},q={key:0,class:"col s12 m12 l4 sites-for-permission-pagination-container"},$={class:"sites-for-permission-pagination"},G={class:"counter"},z=["textContent"],W={class:"roles-help-notification"},Y=["innerHTML"],X={class:"capabilities-help-notification"},K={id:"sitesForPermission"},Q={class:"select-cell"},Z={class:"checkbox-container"},ee=["checked"],te=Object(a["createElementVNode"])("span",null,null,-1),ne={class:"role_header"},se=["innerHTML"],re=Object(a["createElementVNode"])("span",{class:"icon-help"},null,-1),ie=[re],ae={class:"capabilities_header"},oe=["innerHTML"],le=Object(a["createElementVNode"])("span",{class:"icon-help"},null,-1),ce=[le],de={key:0,class:"select-all-row"},ue={colspan:"4"},me={key:0},be=["innerHTML"],pe=["innerHTML"],ge={key:1},fe=["innerHTML"],he=["innerHTML"],je={class:"select-cell"},Oe={class:"checkbox-container"},ve=["id","onUpdate:modelValue"],Ce=Object(a["createElementVNode"])("span",null,null,-1),Ne={class:"role-select"},Se={class:"delete-access-confirm-modal modal",ref:"deleteAccessConfirmModal"},Ue={class:"modal-content"},ye=["innerHTML"],Ee=["innerHTML"],Ve={class:"modal-footer"},ke={class:"change-access-confirm-modal modal",ref:"changeAccessConfirmModal"},Ae={class:"modal-content"},we=["innerHTML"],Te=["innerHTML"],Me={class:"modal-footer"},Be={class:"confirm-give-access-all-sites modal",ref:"confirmGiveAccessAllSitesModal"},_e={class:"modal-content"},De=["innerHTML"],Le={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 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<e.totalEntries?(Object(a["openBlock"])(),Object(a["createElementBlock"])("tr",de,[Object(a["createElementVNode"])("td",ue,[e.areAllResultsSelected?Object(a["createCommentVNode"])("",!0):(Object(a["openBlock"])(),Object(a["createElementBlock"])("div",me,[Object(a["createElementVNode"])("span",{innerHTML:e.$sanitize(e.theDisplayedWebsitesAreSelectedText),style:{"margin-right":"3.5px"}},null,8,be),Object(a["createElementVNode"])("a",{href:"#",onClick:t[11]||(t[11]=Object(a["withModifiers"])((function(t){return e.areAllResultsSelected=!e.areAllResultsSelected}),["prevent"])),innerHTML:e.$sanitize(e.clickToSelectAllText)},null,8,pe)])),e.areAllResultsSelected?(Object(a["openBlock"])(),Object(a["createElementBlock"])("div",ge,[Object(a["createElementVNode"])("span",{innerHTML:e.$sanitize(e.allWebsitesAreSelectedText),style:{"margin-right":"3.5px"}},null,8,he),Object(a["createElementVNode"])("a",{href:"#",onClick:t[12]||(t[12]=Object(a["withModifiers"])((function(t){return e.areAllResultsSelected=!e.areAllResultsSelected}),["prevent"])),innerHTML:e.$sanitize(e.clickToSelectDisplayedWebsitesText)},null,8,fe)])):Object(a["createCommentVNode"])("",!0)])])):Object(a["createCommentVNode"])("",!0),(Object(a["openBlock"])(!0),Object(a["createElementBlock"])(a["Fragment"],null,Object(a["renderList"])(e.siteAccess,(function(n,s){return Object(a["openBlock"])(),Object(a["createElementBlock"])("tr",{key:n.idsite},[Object(a["createElementVNode"])("td",je,[Object(a["createElementVNode"])("span",Oe,[Object(a["createElementVNode"])("label",null,[Object(a["withDirectives"])(Object(a["createElementVNode"])("input",{type:"checkbox",id:"perm_edit_select_row".concat(s),"onUpdate:modelValue":function(t){return e.selectedRows[s]=t},onClick:t[13]||(t[13]=function(t){return e.onRowSelected()})},null,8,ve),[[a["vModelCheckbox"],e.selectedRows[s]]]),Ce])])]),Object(a["createElementVNode"])("td",null,[Object(a["createElementVNode"])("span",null,Object(a["toDisplayString"])(n.site_name),1)]),Object(a["createElementVNode"])("td",null,[Object(a["createElementVNode"])("div",Ne,[Object(a["createVNode"])(l,{"model-value":n.role,"onUpdate:modelValue":function(t){e.onRoleChange(n,t)},uicontrol:"select",options:e.filteredAccessLevels,"full-width":!0},null,8,["model-value","onUpdate:modelValue","options"])])]),Object(a["createElementVNode"])("td",null,[Object(a["createElementVNode"])("div",null,[Object(a["createVNode"])(c,{idsite:n.idsite,"site-name":n.site_name,"user-login":e.userLogin,"user-role":n.role,capabilities:n.capabilities,onChange:t[14]||(t[14]=function(t){return e.fetchAccess()})},null,8,["idsite","site-name","user-login","user-role","capabilities"])])])])})),128))])],512),[[u]]),Object(a["createElementVNode"])("div",Se,[Object(a["createElementVNode"])("div",Ue,[e.siteAccessToChange?(Object(a["openBlock"])(),Object(a["createElementBlock"])("h3",{key:0,innerHTML:e.$sanitize(e.deletePermConfirmSingleText)},null,8,ye)):Object(a["createCommentVNode"])("",!0),e.siteAccessToChange?Object(a["createCommentVNode"])("",!0):(Object(a["openBlock"])(),Object(a["createElementBlock"])("p",{key:1,innerHTML:e.$sanitize(e.deletePermConfirmMultipleText)},null,8,Ee))]),Object(a["createElementVNode"])("div",Ve,[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.siteAccessToChange=null,e.roleToChangeTo=null}),["prevent"]))},Object(a["toDisplayString"])(e.translate("General_No")),1)])],512),Object(a["createElementVNode"])("div",ke,[Object(a["createElementVNode"])("div",Ae,[e.siteAccessToChange?(Object(a["openBlock"])(),Object(a["createElementBlock"])("h3",{key:0,innerHTML:e.$sanitize(e.changePermToSiteConfirmSingleText)},null,8,we)):Object(a["createCommentVNode"])("",!0),e.siteAccessToChange?Object(a["createCommentVNode"])("",!0):(Object(a["openBlock"])(),Object(a["createElementBlock"])("p",{key:1,innerHTML:e.$sanitize(e.changePermToSiteConfirmMultipleText)},null,8,Te))]),Object(a["createElementVNode"])("div",Me,[Object(a["createElementVNode"])("a",{href:"",class:"modal-action modal-close btn",onClick:t[17]||(t[17]=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[18]||(t[18]=Object(a["withModifiers"])((function(t){e.siteAccessToChange.role=e.previousRole,e.siteAccessToChange=null,e.roleToChangeTo=null}),["prevent"]))},Object(a["toDisplayString"])(e.translate("General_No")),1)])],512),Object(a["createElementVNode"])("div",Be,[Object(a["createElementVNode"])("div",_e,[Object(a["createElementVNode"])("h3",{innerHTML:e.$sanitize(e.changePermToAllSitesConfirmText)},null,8,De),Object(a["createElementVNode"])("p",null,Object(a["toDisplayString"])(e.translate("UsersManager_ChangePermToAllSitesConfirm2")),1)]),Object(a["createElementVNode"])("div",Le,[Object(a["createElementVNode"])("a",{href:"",class:"modal-action modal-close btn",onClick:t[19]||(t[19]=Object(a["withModifiers"])((function(t){return e.giveAccessToAllSites()}),["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[20]||(t[20]=function(e){return e.preventDefault()})},Object(a["toDisplayString"])(e.translate("General_No")),1)])],512)],2)}var xe=window,Pe=xe.$,He=Object(a["defineComponent"])({props:{userLogin:{type:String,required:!0},limit:{type:Number,default:10},accessLevels:{type:Array,required:!0},filterAccessLevels:{type:Array,required:!0}},components:{Notification:i["Notification"],Field:h["Field"],CapabilitiesEdit:E},directives:{DropdownMenu:i["DropdownMenu"],ContentTable:i["ContentTable"]},data:function(){return{siteAccess:[],offset:0,totalEntries:null,accessLevelFilter:"",siteNameFilter:"",isLoadingAccess:!1,allWebsitesAccssLevelSet:"view",isAllCheckboxSelected:!1,selectedRows:{},isBulkActionsDisabled:!0,areAllResultsSelected:!1,previousRole:null,hasAccessToAtLeastOneSite:!0,isRoleHelpToggled:!1,isCapabilitiesHelpToggled:!1,isGivingAccessToAllSites:!1,roleToChangeTo:null,siteAccessToChange:null}},emits:["userHasAccessDetected","accessChanged"],created:function(){var e=this;this.onChangeSiteFilter=Object(i["debounce"])(this.onChangeSiteFilter,300),Object(a["watch"])((function(){return e.allPropsWatch}),(function(){e.limit&&e.fetchAccess()})),this.fetchAccess()},watch:{accessLevelFilter:function(){this.offset=0,this.fetchAccess()}},methods:{onAllCheckboxChange:function(e){var t=this;this.isAllCheckboxSelected=e.target.checked,this.isAllCheckboxSelected?(this.siteAccess.forEach((function(e,n){t.selectedRows[n]=!0})),this.isBulkActionsDisabled=!1):this.clearSelection()},clearSelection:function(){this.selectedRows={},this.areAllResultsSelected=!1,this.isBulkActionsDisabled=!0,this.isAllCheckboxSelected=!1,this.siteAccessToChange=null},onRowSelected:function(){var e=this;setTimeout((function(){var t=e.selectedRowsCount;e.isBulkActionsDisabled=0===t,e.isAllCheckboxSelected=t===e.siteAccess.length}))},fetchAccess:function(){var e=this;return this.isLoadingAccess=!0,i["AjaxHelper"].fetch({method:"UsersManager.getSitesAccessForUser",limit:this.limit,offset:this.offset,filter_search:this.siteNameFilter,filter_access:this.accessLevelFilter,userLogin:this.userLogin},{returnResponseObject:!0}).then((function(t){var n=t.getRequestHandle();e.isLoadingAccess=!1,e.siteAccess=n.responseJSON,e.totalEntries=parseInt(n.getResponseHeader("x-matomo-total-results"),10)||0,e.hasAccessToAtLeastOneSite=!!n.getResponseHeader("x-matomo-has-some"),e.$emit("userHasAccessDetected",{hasAccess:e.hasAccessToAtLeastOneSite}),e.clearSelection()})).catch((function(){e.isLoadingAccess=!1,e.clearSelection()}))},gotoPreviousPage:function(){this.offset=Math.max(0,this.offset-this.limit),this.fetchAccess()},gotoNextPage:function(){var e=this.offset+this.limit;e>=(this.totalEntries||0)||(this.offset=e,this.fetchAccess())},showRemoveAccessConfirm:function(){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",'<a href="https://matomo.org/faq/general/faq_70/" target="_blank" rel="noreferrer noopener">',"</a>",'<a href="https://matomo.org/faq/general/faq_69/" target="_blank" rel="noreferrer noopener">',"</a>")},theDisplayedWebsitesAreSelectedText:function(){var e=Object(i["translate"])("UsersManager_TheDisplayedWebsitesAreSelected","<strong>".concat(this.siteAccess.length,"</strong>"));return"".concat(e," ")},clickToSelectAllText:function(){return Object(i["translate"])("UsersManager_ClickToSelectAll","<strong>".concat(this.totalEntries,"</strong>"))},allWebsitesAreSelectedText:function(){return Object(i["translate"])("UsersManager_AllWebsitesAreSelected","<strong>".concat(this.totalEntries,"</strong>"))},clickToSelectDisplayedWebsitesText:function(){return Object(i["translate"])("UsersManager_ClickToSelectDisplayedWebsites","<strong>".concat(this.siteAccess.length,"</strong>"))},deletePermConfirmSingleText:function(){return Object(i["translate"])("UsersManager_DeletePermConfirmSingle","<strong>".concat(this.userLogin,"</strong>"),"<strong>".concat(this.siteAccessToChangeName,"</strong>"))},deletePermConfirmMultipleText:function(){return Object(i["translate"])("UsersManager_DeletePermConfirmMultiple","<strong>".concat(this.userLogin,"</strong>"),"<strong>".concat(this.affectedSitesCount,"</strong>"))},changePermToSiteConfirmSingleText:function(){return Object(i["translate"])("UsersManager_ChangePermToSiteConfirmSingle","<strong>".concat(this.userLogin,"</strong>"),"<strong>".concat(this.siteAccessToChangeName,"</strong>"),"<strong>".concat(this.getRoleDisplay(this.roleToChangeTo),"</strong>"))},changePermToSiteConfirmMultipleText:function(){return Object(i["translate"])("UsersManager_ChangePermToSiteConfirmMultiple","<strong>".concat(this.userLogin,"</strong>"),"<strong>".concat(this.affectedSitesCount,"</strong>"),"<strong>".concat(this.getRoleDisplay(this.roleToChangeTo),"</strong>"))},changePermToAllSitesConfirmText:function(){return Object(i["translate"])("UsersManager_ChangePermToAllSitesConfirm","<strong>".concat(this.userLogin,"</strong>"),"<strong>".concat(this.getRoleDisplay(this.allWebsitesAccssLevelSet),"</strong>"))},paginationLowerBound:function(){return this.offset+1},paginationUpperBound:function(){return this.totalEntries?Math.min(this.offset+this.limit,this.totalEntries):"?"},filteredAccessLevels:function(){return this.accessLevels.filter((function(e){return"superuser"!==e.key}))},filteredSelectAccessLevels:function(){return this.filterAccessLevels.filter((function(e){return"superuser"!==e.key}))},selectedRowsCount:function(){var e=0;return Object.values(this.selectedRows).forEach((function(t){t&&(e+=1)})),e},affectedSitesCount:function(){return this.areAllResultsSelected?this.totalEntries:this.selectedRowsCount},allPropsWatch:function(){return this.userLogin,this.limit,this.accessLevels,this.filterAccessLevels,Date.now()},siteAccessToChangeName:function(){return this.siteAccessToChange?i["Matomo"].helper.htmlEntities(this.siteAccessToChange.site_name):""},paginationText:function(){var e=Object(i["translate"])("General_Pagination","".concat(this.paginationLowerBound),"".concat(this.paginationUpperBound),"".concat(this.totalEntries));return" ".concat(e," ")}}});He.render=Re;var Fe=He,Ie=(Object(i["createAngularJsAdapter"])({component:Fe,scope:{userLogin:{angularJsBind:"<"},limit:{angularJsBind:"<"},onUserHasAccessDetected:{angularJsBind:"&",vue:"userHasAccessDetected"},onAccessChange:{angularJsBind:"&",vue:"accessChanged"},accessLevels:{angularJsBind:"<"},filterAccessLevels:{angularJsBind:"<"}},directiveName:"piwikUserPermissionsEdit",restrict:"E"}),{class:"row"}),Je={key:0,class:"col m2 entityList"},qe={class:"listCircle"},$e={key:0,class:"icon-warning"},Ge=Object(a["createElementVNode"])("div",{class:"save-button-spacer hide-on-small-only"},null,-1),ze={href:"",class:"entityCancelLink"},We={class:"visibleTab col m10"},Ye={key:0,class:"basic-info-tab"},Xe={class:"form-group row",style:{position:"relative"}},Ke={class:"col s12 m6"},Qe={class:"col s12 m6"},Ze={key:0,class:"form-help"},et=["innerHTML"],tt={key:0,class:"entityCancel"},nt={key:1,class:"user-permissions"},st={key:0},rt={key:1,class:"alert alert-info"},it={key:2,class:"superuser-access"},at={class:"superuser-confirm-modal modal",ref:"superUserConfirmModal"},ot={class:"modal-content"},lt={key:0},ct={key:1},dt={class:"modal-footer"},ut={key:3,class:"twofa-reset"},mt={class:"resetTwoFa"},bt={class:"twofa-confirm-modal modal",ref:"twofaConfirmModal"},pt={class:"modal-content"},gt={class:"modal-footer"},ht={class:"change-password-modal modal",ref:"changePasswordModal"},ft={class:"modal-content"},jt=["innerHTML"],Ot={class:"modal-footer"};
+ */function Re(e,t,n,s,r,i){var o=Object(a["resolveComponent"])("Notification"),l=Object(a["resolveComponent"])("Field"),c=Object(a["resolveComponent"])("CapabilitiesEdit"),d=Object(a["resolveDirective"])("dropdown-menu"),u=Object(a["resolveDirective"])("content-table");return Object(a["openBlock"])(),Object(a["createElementBlock"])("div",{class:Object(a["normalizeClass"])(["userPermissionsEdit",{loading:e.isLoadingAccess}])},[e.hasAccessToAtLeastOneSite?Object(a["createCommentVNode"])("",!0):(Object(a["openBlock"])(),Object(a["createElementBlock"])("div",V,[Object(a["createElementVNode"])("div",null,[Object(a["createVNode"])(o,{context:"warning",type:"transient",noclear:!0},{default:Object(a["withCtx"])((function(){return[Object(a["createElementVNode"])("strong",null,Object(a["toDisplayString"])(e.translate("General_Warning"))+":",1),Object(a["createTextVNode"])(" "+Object(a["toDisplayString"])(e.translate("UsersManager_NoAccessWarning")),1)]})),_:1})])])),Object(a["createElementVNode"])("div",k,[Object(a["createElementVNode"])("div",A,[Object(a["createElementVNode"])("div",null,[Object(a["createElementVNode"])("span",w,Object(a["toDisplayString"])(e.translate("UsersManager_GiveAccessToAll"))+":",1),Object(a["createElementVNode"])("div",T,[Object(a["createVNode"])(l,{modelValue:e.allWebsitesAccssLevelSet,"onUpdate:modelValue":t[0]||(t[0]=function(t){return e.allWebsitesAccssLevelSet=t}),uicontrol:"select",options:e.filteredAccessLevels,"full-width":!0},null,8,["modelValue","options"])]),Object(a["createElementVNode"])("a",{href:"",class:Object(a["normalizeClass"])(["btn",{disabled:e.isGivingAccessToAllSites}]),onClick:t[1]||(t[1]=Object(a["withModifiers"])((function(t){return e.showChangeAccessAllSitesModal()}),["prevent"]))},Object(a["toDisplayString"])(e.translate("General_Apply")),3)]),Object(a["createElementVNode"])("p",B,Object(a["toDisplayString"])(e.translate("UsersManager_OrManageIndividually"))+":",1)])]),Object(a["createElementVNode"])("div",_,[Object(a["createElementVNode"])("div",D,[Object(a["createElementVNode"])("div",L,[Object(a["withDirectives"])(Object(a["createElementVNode"])("a",{class:Object(a["normalizeClass"])(["dropdown-trigger btn",{disabled:e.isBulkActionsDisabled}]),href:"","data-target":"user-permissions-edit-bulk-actions"},[Object(a["createTextVNode"])(Object(a["toDisplayString"])(e.translate("UsersManager_BulkActions")),1)],2),[[d,{activates:"#user-permissions-edit-bulk-actions"}]]),Object(a["createElementVNode"])("ul",R,[Object(a["createElementVNode"])("li",null,[Object(a["withDirectives"])(Object(a["createElementVNode"])("a",x,[Object(a["createTextVNode"])(Object(a["toDisplayString"])(e.translate("UsersManager_SetPermission")),1)],512),[[d,{activates:"#user-permissions-bulk-set-access"}]]),Object(a["createElementVNode"])("ul",P,[(Object(a["openBlock"])(!0),Object(a["createElementBlock"])(a["Fragment"],null,Object(a["renderList"])(e.filteredAccessLevels,(function(t){return Object(a["openBlock"])(),Object(a["createElementBlock"])("li",{key:t.key},[Object(a["createElementVNode"])("a",{href:"",onClick:Object(a["withModifiers"])((function(n){e.siteAccessToChange=null,e.roleToChangeTo=t.key,e.showChangeAccessConfirm()}),["prevent"])},Object(a["toDisplayString"])(t.value),9,F)])})),128))])]),Object(a["createElementVNode"])("li",null,[Object(a["createElementVNode"])("a",{href:"",onClick:t[2]||(t[2]=Object(a["withModifiers"])((function(t){e.siteAccessToChange=null,e.roleToChangeTo="noaccess",e.showRemoveAccessConfirm()}),["prevent"]))},Object(a["toDisplayString"])(e.translate("UsersManager_RemovePermissions")),1)])])]),Object(a["createElementVNode"])("div",H,[Object(a["createElementVNode"])("input",{type:"text",value:e.siteNameFilter,onKeydown:t[3]||(t[3]=function(t){e.onChangeSiteFilter(t)}),onChange:t[4]||(t[4]=function(t){e.onChangeSiteFilter(t)}),placeholder:e.translate("UsersManager_FilterByWebsite")},null,40,I)]),Object(a["createElementVNode"])("div",J,[Object(a["createElementVNode"])("div",null,[Object(a["createVNode"])(l,{modelValue:e.accessLevelFilter,"onUpdate:modelValue":t[5]||(t[5]=function(t){return e.accessLevelFilter=t}),uicontrol:"select",options:e.filteredSelectAccessLevels,"full-width":!0,placeholder:e.translate("UsersManager_FilterByAccess")},null,8,["modelValue","options","placeholder"])])])]),e.totalEntries>e.limit?(Object(a["openBlock"])(),Object(a["createElementBlock"])("div",q,[Object(a["createElementVNode"])("div",$,[Object(a["createElementVNode"])("a",{class:Object(a["normalizeClass"])(["prev",{disabled:e.offset<=0}])},[Object(a["createElementVNode"])("span",{class:"pointer",onClick:t[6]||(t[6]=function(t){return e.gotoPreviousPage()})},"« "+Object(a["toDisplayString"])(e.translate("General_Previous")),1)],2),Object(a["createElementVNode"])("span",G,[Object(a["createElementVNode"])("span",{textContent:Object(a["toDisplayString"])(e.paginationText)},null,8,z)]),Object(a["createElementVNode"])("a",{class:Object(a["normalizeClass"])(["next",{disabled:e.offset+e.limit>=e.totalEntries}])},[Object(a["createElementVNode"])("span",{class:"pointer",onClick:t[7]||(t[7]=function(t){return e.gotoNextPage()})},Object(a["toDisplayString"])(e.translate("General_Next"))+" »",1)],2)])])):Object(a["createCommentVNode"])("",!0)]),Object(a["createElementVNode"])("div",W,[e.isRoleHelpToggled?(Object(a["openBlock"])(),Object(a["createBlock"])(o,{key:0,context:"info",type:"persistent",noclear:!0},{default:Object(a["withCtx"])((function(){return[Object(a["createElementVNode"])("span",{innerHTML:e.$sanitize(e.rolesHelpText)},null,8,Y)]})),_:1})):Object(a["createCommentVNode"])("",!0)]),Object(a["createElementVNode"])("div",X,[e.isCapabilitiesHelpToggled?(Object(a["openBlock"])(),Object(a["createBlock"])(o,{key:0,context:"info",type:"persistent",noclear:!0},{default:Object(a["withCtx"])((function(){return[Object(a["createElementVNode"])("span",null,Object(a["toDisplayString"])(e.translate("UsersManager_CapabilitiesHelp")),1)]})),_:1})):Object(a["createCommentVNode"])("",!0)]),Object(a["withDirectives"])(Object(a["createElementVNode"])("table",K,[Object(a["createElementVNode"])("thead",null,[Object(a["createElementVNode"])("tr",null,[Object(a["createElementVNode"])("th",Q,[Object(a["createElementVNode"])("span",Z,[Object(a["createElementVNode"])("label",null,[Object(a["createElementVNode"])("input",{type:"checkbox",id:"perm_edit_select_all",checked:e.isAllCheckboxSelected,onChange:t[8]||(t[8]=function(t){return e.onAllCheckboxChange(t)})},null,40,ee),te])])]),Object(a["createElementVNode"])("th",null,Object(a["toDisplayString"])(e.translate("General_Name")),1),Object(a["createElementVNode"])("th",ne,[Object(a["createElementVNode"])("span",{innerHTML:e.$sanitize("".concat(e.translate("UsersManager_Role")," "))},null,8,se),Object(a["createElementVNode"])("a",{href:"",class:Object(a["normalizeClass"])(["helpIcon",{sticky:e.isRoleHelpToggled}]),onClick:t[9]||(t[9]=Object(a["withModifiers"])((function(t){return e.isRoleHelpToggled=!e.isRoleHelpToggled}),["prevent"]))},ie,2)]),Object(a["createElementVNode"])("th",ae,[Object(a["createElementVNode"])("span",{innerHTML:e.$sanitize("".concat(e.translate("UsersManager_Capabilities")," "))},null,8,oe),Object(a["createElementVNode"])("a",{href:"",class:Object(a["normalizeClass"])(["helpIcon",{sticky:e.isCapabilitiesHelpToggled}]),onClick:t[10]||(t[10]=Object(a["withModifiers"])((function(t){return e.isCapabilitiesHelpToggled=!e.isCapabilitiesHelpToggled}),["prevent"]))},ce,2)])])]),Object(a["createElementVNode"])("tbody",null,[e.isAllCheckboxSelected&&e.siteAccess.length<e.totalEntries?(Object(a["openBlock"])(),Object(a["createElementBlock"])("tr",de,[Object(a["createElementVNode"])("td",ue,[e.areAllResultsSelected?Object(a["createCommentVNode"])("",!0):(Object(a["openBlock"])(),Object(a["createElementBlock"])("div",me,[Object(a["createElementVNode"])("span",{innerHTML:e.$sanitize(e.theDisplayedWebsitesAreSelectedText),style:{"margin-right":"3.5px"}},null,8,be),Object(a["createElementVNode"])("a",{href:"#",onClick:t[11]||(t[11]=Object(a["withModifiers"])((function(t){return e.areAllResultsSelected=!e.areAllResultsSelected}),["prevent"])),innerHTML:e.$sanitize(e.clickToSelectAllText)},null,8,pe)])),e.areAllResultsSelected?(Object(a["openBlock"])(),Object(a["createElementBlock"])("div",ge,[Object(a["createElementVNode"])("span",{innerHTML:e.$sanitize(e.allWebsitesAreSelectedText),style:{"margin-right":"3.5px"}},null,8,fe),Object(a["createElementVNode"])("a",{href:"#",onClick:t[12]||(t[12]=Object(a["withModifiers"])((function(t){return e.areAllResultsSelected=!e.areAllResultsSelected}),["prevent"])),innerHTML:e.$sanitize(e.clickToSelectDisplayedWebsitesText)},null,8,he)])):Object(a["createCommentVNode"])("",!0)])])):Object(a["createCommentVNode"])("",!0),(Object(a["openBlock"])(!0),Object(a["createElementBlock"])(a["Fragment"],null,Object(a["renderList"])(e.siteAccess,(function(n,s){return Object(a["openBlock"])(),Object(a["createElementBlock"])("tr",{key:n.idsite},[Object(a["createElementVNode"])("td",je,[Object(a["createElementVNode"])("span",Oe,[Object(a["createElementVNode"])("label",null,[Object(a["withDirectives"])(Object(a["createElementVNode"])("input",{type:"checkbox",id:"perm_edit_select_row".concat(s),"onUpdate:modelValue":function(t){return e.selectedRows[s]=t},onClick:t[13]||(t[13]=function(t){return e.onRowSelected()})},null,8,ve),[[a["vModelCheckbox"],e.selectedRows[s]]]),Ce])])]),Object(a["createElementVNode"])("td",null,[Object(a["createElementVNode"])("span",null,Object(a["toDisplayString"])(n.site_name),1)]),Object(a["createElementVNode"])("td",null,[Object(a["createElementVNode"])("div",Ne,[Object(a["createVNode"])(l,{"model-value":n.role,"onUpdate:modelValue":function(t){e.onRoleChange(n,t)},uicontrol:"select",options:e.filteredAccessLevels,"full-width":!0},null,8,["model-value","onUpdate:modelValue","options"])])]),Object(a["createElementVNode"])("td",null,[Object(a["createElementVNode"])("div",null,[Object(a["createVNode"])(c,{idsite:n.idsite,"site-name":n.site_name,"user-login":e.userLogin,"user-role":n.role,capabilities:n.capabilities,onChange:t[14]||(t[14]=function(t){return e.fetchAccess()})},null,8,["idsite","site-name","user-login","user-role","capabilities"])])])])})),128))])],512),[[u]]),Object(a["createElementVNode"])("div",Se,[Object(a["createElementVNode"])("div",Ue,[e.siteAccessToChange?(Object(a["openBlock"])(),Object(a["createElementBlock"])("h3",{key:0,innerHTML:e.$sanitize(e.deletePermConfirmSingleText)},null,8,ye)):Object(a["createCommentVNode"])("",!0),e.siteAccessToChange?Object(a["createCommentVNode"])("",!0):(Object(a["openBlock"])(),Object(a["createElementBlock"])("p",{key:1,innerHTML:e.$sanitize(e.deletePermConfirmMultipleText)},null,8,Ee))]),Object(a["createElementVNode"])("div",Ve,[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.siteAccessToChange=null,e.roleToChangeTo=null}),["prevent"]))},Object(a["toDisplayString"])(e.translate("General_No")),1)])],512),Object(a["createElementVNode"])("div",ke,[Object(a["createElementVNode"])("div",Ae,[e.siteAccessToChange?(Object(a["openBlock"])(),Object(a["createElementBlock"])("h3",{key:0,innerHTML:e.$sanitize(e.changePermToSiteConfirmSingleText)},null,8,we)):Object(a["createCommentVNode"])("",!0),e.siteAccessToChange?Object(a["createCommentVNode"])("",!0):(Object(a["openBlock"])(),Object(a["createElementBlock"])("p",{key:1,innerHTML:e.$sanitize(e.changePermToSiteConfirmMultipleText)},null,8,Te))]),Object(a["createElementVNode"])("div",Me,[Object(a["createElementVNode"])("a",{href:"",class:"modal-action modal-close btn",onClick:t[17]||(t[17]=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[18]||(t[18]=Object(a["withModifiers"])((function(t){e.siteAccessToChange.role=e.previousRole,e.siteAccessToChange=null,e.roleToChangeTo=null}),["prevent"]))},Object(a["toDisplayString"])(e.translate("General_No")),1)])],512),Object(a["createElementVNode"])("div",Be,[Object(a["createElementVNode"])("div",_e,[Object(a["createElementVNode"])("h3",{innerHTML:e.$sanitize(e.changePermToAllSitesConfirmText)},null,8,De),Object(a["createElementVNode"])("p",null,Object(a["toDisplayString"])(e.translate("UsersManager_ChangePermToAllSitesConfirm2")),1)]),Object(a["createElementVNode"])("div",Le,[Object(a["createElementVNode"])("a",{href:"",class:"modal-action modal-close btn",onClick:t[19]||(t[19]=Object(a["withModifiers"])((function(t){return e.giveAccessToAllSites()}),["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[20]||(t[20]=function(e){return e.preventDefault()})},Object(a["toDisplayString"])(e.translate("General_No")),1)])],512)],2)}var xe=window,Pe=xe.$,Fe=Object(a["defineComponent"])({props:{userLogin:{type:String,required:!0},limit:{type:Number,default:10},accessLevels:{type:Array,required:!0},filterAccessLevels:{type:Array,required:!0}},components:{Notification:i["Notification"],Field:f["Field"],CapabilitiesEdit:E},directives:{DropdownMenu:i["DropdownMenu"],ContentTable:i["ContentTable"]},data:function(){return{siteAccess:[],offset:0,totalEntries:null,accessLevelFilter:"",siteNameFilter:"",isLoadingAccess:!1,allWebsitesAccssLevelSet:"view",isAllCheckboxSelected:!1,selectedRows:{},isBulkActionsDisabled:!0,areAllResultsSelected:!1,previousRole:null,hasAccessToAtLeastOneSite:!0,isRoleHelpToggled:!1,isCapabilitiesHelpToggled:!1,isGivingAccessToAllSites:!1,roleToChangeTo:null,siteAccessToChange:null}},emits:["userHasAccessDetected","accessChanged"],created:function(){var e=this;this.onChangeSiteFilter=Object(i["debounce"])(this.onChangeSiteFilter,300),Object(a["watch"])((function(){return e.allPropsWatch}),(function(){e.limit&&e.fetchAccess()})),this.fetchAccess()},watch:{accessLevelFilter:function(){this.offset=0,this.fetchAccess()}},methods:{onAllCheckboxChange:function(e){var t=this;this.isAllCheckboxSelected=e.target.checked,this.isAllCheckboxSelected?(this.siteAccess.forEach((function(e,n){t.selectedRows[n]=!0})),this.isBulkActionsDisabled=!1):this.clearSelection()},clearSelection:function(){this.selectedRows={},this.areAllResultsSelected=!1,this.isBulkActionsDisabled=!0,this.isAllCheckboxSelected=!1,this.siteAccessToChange=null},onRowSelected:function(){var e=this;setTimeout((function(){var t=e.selectedRowsCount;e.isBulkActionsDisabled=0===t,e.isAllCheckboxSelected=t===e.siteAccess.length}))},fetchAccess:function(){var e=this;return this.isLoadingAccess=!0,i["AjaxHelper"].fetch({method:"UsersManager.getSitesAccessForUser",limit:this.limit,offset:this.offset,filter_search:this.siteNameFilter,filter_access:this.accessLevelFilter,userLogin:this.userLogin},{returnResponseObject:!0}).then((function(t){var n=t.getRequestHandle();e.isLoadingAccess=!1,e.siteAccess=n.responseJSON,e.totalEntries=parseInt(n.getResponseHeader("x-matomo-total-results"),10)||0,e.hasAccessToAtLeastOneSite=!!n.getResponseHeader("x-matomo-has-some"),e.$emit("userHasAccessDetected",{hasAccess:e.hasAccessToAtLeastOneSite}),e.clearSelection()})).catch((function(){e.isLoadingAccess=!1,e.clearSelection()}))},gotoPreviousPage:function(){this.offset=Math.max(0,this.offset-this.limit),this.fetchAccess()},gotoNextPage:function(){var e=this.offset+this.limit;e>=(this.totalEntries||0)||(this.offset=e,this.fetchAccess())},showRemoveAccessConfirm:function(){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",'<a href="https://matomo.org/faq/general/faq_70/" target="_blank" rel="noreferrer noopener">',"</a>",'<a href="https://matomo.org/faq/general/faq_69/" target="_blank" rel="noreferrer noopener">',"</a>")},theDisplayedWebsitesAreSelectedText:function(){var e=Object(i["translate"])("UsersManager_TheDisplayedWebsitesAreSelected","<strong>".concat(this.siteAccess.length,"</strong>"));return"".concat(e," ")},clickToSelectAllText:function(){return Object(i["translate"])("UsersManager_ClickToSelectAll","<strong>".concat(this.totalEntries,"</strong>"))},allWebsitesAreSelectedText:function(){return Object(i["translate"])("UsersManager_AllWebsitesAreSelected","<strong>".concat(this.totalEntries,"</strong>"))},clickToSelectDisplayedWebsitesText:function(){return Object(i["translate"])("UsersManager_ClickToSelectDisplayedWebsites","<strong>".concat(this.siteAccess.length,"</strong>"))},deletePermConfirmSingleText:function(){return Object(i["translate"])("UsersManager_DeletePermConfirmSingle","<strong>".concat(this.userLogin,"</strong>"),"<strong>".concat(this.siteAccessToChangeName,"</strong>"))},deletePermConfirmMultipleText:function(){return Object(i["translate"])("UsersManager_DeletePermConfirmMultiple","<strong>".concat(this.userLogin,"</strong>"),"<strong>".concat(this.affectedSitesCount,"</strong>"))},changePermToSiteConfirmSingleText:function(){return Object(i["translate"])("UsersManager_ChangePermToSiteConfirmSingle","<strong>".concat(this.userLogin,"</strong>"),"<strong>".concat(this.siteAccessToChangeName,"</strong>"),"<strong>".concat(this.getRoleDisplay(this.roleToChangeTo),"</strong>"))},changePermToSiteConfirmMultipleText:function(){return Object(i["translate"])("UsersManager_ChangePermToSiteConfirmMultiple","<strong>".concat(this.userLogin,"</strong>"),"<strong>".concat(this.affectedSitesCount,"</strong>"),"<strong>".concat(this.getRoleDisplay(this.roleToChangeTo),"</strong>"))},changePermToAllSitesConfirmText:function(){return Object(i["translate"])("UsersManager_ChangePermToAllSitesConfirm","<strong>".concat(this.userLogin,"</strong>"),"<strong>".concat(this.getRoleDisplay(this.allWebsitesAccssLevelSet),"</strong>"))},paginationLowerBound:function(){return this.offset+1},paginationUpperBound:function(){return this.totalEntries?Math.min(this.offset+this.limit,this.totalEntries):"?"},filteredAccessLevels:function(){return this.accessLevels.filter((function(e){return"superuser"!==e.key}))},filteredSelectAccessLevels:function(){return this.filterAccessLevels.filter((function(e){return"superuser"!==e.key}))},selectedRowsCount:function(){var e=0;return Object.values(this.selectedRows).forEach((function(t){t&&(e+=1)})),e},affectedSitesCount:function(){return this.areAllResultsSelected?this.totalEntries:this.selectedRowsCount},allPropsWatch:function(){return this.userLogin,this.limit,this.accessLevels,this.filterAccessLevels,Date.now()},siteAccessToChangeName:function(){return this.siteAccessToChange?i["Matomo"].helper.htmlEntities(this.siteAccessToChange.site_name):""},paginationText:function(){var e=Object(i["translate"])("General_Pagination","".concat(this.paginationLowerBound),"".concat(this.paginationUpperBound),"".concat(this.totalEntries));return" ".concat(e," ")}}});Fe.render=Re;var He=Fe,Ie=(Object(i["createAngularJsAdapter"])({component:He,scope:{userLogin:{angularJsBind:"<"},limit:{angularJsBind:"<"},onUserHasAccessDetected:{angularJsBind:"&",vue:"userHasAccessDetected"},onAccessChange:{angularJsBind:"&",vue:"accessChanged"},accessLevels:{angularJsBind:"<"},filterAccessLevels:{angularJsBind:"<"}},directiveName:"piwikUserPermissionsEdit",restrict:"E"}),{class:"row"}),Je={key:0,class:"col m2 entityList"},qe={class:"listCircle"},$e={key:0,class:"icon-warning"},Ge=Object(a["createElementVNode"])("div",{class:"save-button-spacer hide-on-small-only"},null,-1),ze={href:"",class:"entityCancelLink"},We={class:"visibleTab col m10"},Ye={key:0,class:"basic-info-tab"},Xe={class:"form-group row",style:{position:"relative"}},Ke={class:"col s12 m6"},Qe={class:"col s12 m6"},Ze={key:0,class:"form-help"},et=["innerHTML"],tt={key:0,class:"entityCancel"},nt={key:1,class:"user-permissions"},st={key:0},rt={key:1,class:"alert alert-info"},it={key:2,class:"superuser-access"},at={class:"superuser-confirm-modal modal",ref:"superUserConfirmModal"},ot={class:"modal-content"},lt={key:0},ct={key:1},dt={class:"modal-footer"},ut={key:3,class:"twofa-reset"},mt={class:"resetTwoFa"},bt={class:"twofa-confirm-modal modal",ref:"twofaConfirmModal"},pt={class:"modal-content"},gt={class:"modal-footer"},ft={class:"change-password-modal modal",ref:"changePasswordModal"},ht={class:"modal-content"},jt=["innerHTML"],Ot={class:"modal-footer"};
/*!
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
- */function vt(e,t,n,s,r,i){var o=Object(a["resolveComponent"])("Field"),l=Object(a["resolveComponent"])("SaveButton"),c=Object(a["resolveComponent"])("UserPermissionsEdit"),d=Object(a["resolveComponent"])("ContentBlock"),u=Object(a["resolveDirective"])("form");return Object(a["openBlock"])(),Object(a["createBlock"])(d,{class:Object(a["normalizeClass"])(["userEditForm",{loading:e.isSavingUserInfo}]),"content-title":"".concat(e.formTitle," ").concat(e.isAdd?"":"'".concat(e.theUser.login,"'"))},{default:Object(a["withCtx"])((function(){return[Object(a["withDirectives"])(Object(a["createElementVNode"])("div",Ie,[e.isAdd?Object(a["createCommentVNode"])("",!0):(Object(a["openBlock"])(),Object(a["createElementBlock"])("div",Je,[Object(a["createElementVNode"])("ul",qe,[Object(a["createElementVNode"])("li",{class:Object(a["normalizeClass"])([{active:"basic"===e.activeTab},"menuBasicInfo"])},[Object(a["createElementVNode"])("a",{href:"",onClick:t[0]||(t[0]=Object(a["withModifiers"])((function(t){return e.activeTab="basic"}),["prevent"]))},Object(a["toDisplayString"])(e.translate("UsersManager_BasicInformation")),1)],2),Object(a["createElementVNode"])("li",{class:Object(a["normalizeClass"])([{active:"permissions"===e.activeTab},"menuPermissions"])},[Object(a["createElementVNode"])("a",{href:"",onClick:t[1]||(t[1]=Object(a["withModifiers"])((function(t){return e.activeTab="permissions"}),["prevent"])),style:{"margin-right":"3.5px"}},Object(a["toDisplayString"])(e.translate("UsersManager_Permissions")),1),e.userHasAccess||e.theUser.superuser_access?Object(a["createCommentVNode"])("",!0):(Object(a["openBlock"])(),Object(a["createElementBlock"])("span",$e))],2),"superuser"===e.currentUserRole?(Object(a["openBlock"])(),Object(a["createElementBlock"])("li",{key:0,class:Object(a["normalizeClass"])([{active:"superuser"===e.activeTab},"menuSuperuser"])},[Object(a["createElementVNode"])("a",{href:"",onClick:t[2]||(t[2]=Object(a["withModifiers"])((function(t){return e.activeTab="superuser"}),["prevent"]))},Object(a["toDisplayString"])(e.translate("UsersManager_SuperUserAccess")),1)],2)):Object(a["createCommentVNode"])("",!0),"superuser"===e.currentUserRole&&e.theUser.uses_2fa&&!e.isAdd?(Object(a["openBlock"])(),Object(a["createElementBlock"])("li",{key:1,class:Object(a["normalizeClass"])([{active:"2fa"===e.activeTab},"menuUserTwoFa"])},[Object(a["createElementVNode"])("a",{href:"",onClick:t[3]||(t[3]=Object(a["withModifiers"])((function(t){return e.activeTab="2fa"}),["prevent"]))},Object(a["toDisplayString"])(e.translate("UsersManager_TwoFactorAuthentication")),1)],2)):Object(a["createCommentVNode"])("",!0)]),Ge,Object(a["createElementVNode"])("div",{class:"entityCancel",onClick:t[4]||(t[4]=Object(a["withModifiers"])((function(t){return e.onDoneEditing()}),["prevent"]))},[Object(a["createElementVNode"])("a",ze,Object(a["toDisplayString"])(e.translate("Mobile_NavigationBack")),1)])])),Object(a["createElementVNode"])("div",We,["basic"===e.activeTab?(Object(a["openBlock"])(),Object(a["createElementBlock"])("div",Ye,[Object(a["createElementVNode"])("div",null,[Object(a["createVNode"])(o,{modelValue:e.theUser.login,"onUpdate:modelValue":t[5]||(t[5]=function(t){return e.theUser.login=t}),disabled:e.isSavingUserInfo||!e.isAdd||e.isShowingPasswordConfirm,uicontrol:"text",name:"user_login",maxlength:100,title:e.translate("General_Username")},null,8,["modelValue","disabled","title"])]),Object(a["createElementVNode"])("div",null,[e.isPendingUser?(Object(a["openBlock"])(),Object(a["createBlock"])(o,{key:0,"model-value":e.theUser.password,disabled:e.isSavingUserInfo||"superuser"!==e.currentUserRole&&!e.isAdd||e.isShowingPasswordConfirm,"onUpdate:modelValue":t[6]||(t[6]=function(t){e.theUser.password=t,e.isPasswordModified=!0}),uicontrol:"password",name:"user_password",title:e.translate("General_Password")},null,8,["model-value","disabled","title"])):Object(a["createCommentVNode"])("",!0)]),Object(a["createElementVNode"])("div",null,["superuser"===e.currentUserRole||e.isAdd?(Object(a["openBlock"])(),Object(a["createBlock"])(o,{key:0,modelValue:e.theUser.email,"onUpdate:modelValue":t[7]||(t[7]=function(t){return e.theUser.email=t}),disabled:e.isSavingUserInfo||"superuser"!==e.currentUserRole&&!e.isAdd||e.isShowingPasswordConfirm,uicontrol:"text",name:"user_email",maxlength:100,title:e.translate("UsersManager_Email")},null,8,["modelValue","disabled","title"])):Object(a["createCommentVNode"])("",!0)]),Object(a["createElementVNode"])("div",null,[e.isAdd?(Object(a["openBlock"])(),Object(a["createBlock"])(o,{key:0,modelValue:e.firstSiteAccess,"onUpdate:modelValue":t[8]||(t[8]=function(t){return e.firstSiteAccess=t}),disabled:e.isSavingUserInfo,uicontrol:"site",name:"user_site","ui-control-attributes":{onlySitesWithAdminAccess:!0},title:e.translate("UsersManager_FirstWebsitePermission"),"inline-help":e.translate("UsersManager_FirstSiteInlineHelp")},null,8,["modelValue","disabled","title","inline-help"])):Object(a["createCommentVNode"])("",!0)]),Object(a["createElementVNode"])("div",null,[Object(a["createElementVNode"])("div",Xe,[Object(a["createElementVNode"])("div",Ke,["superuser"===e.currentUserRole||e.isAdd?(Object(a["openBlock"])(),Object(a["createBlock"])(l,{key:0,style:{position:"absolute",bottom:"0"},value:e.saveButtonLabel,disabled:e.isAdd&&(!e.firstSiteAccess||!e.firstSiteAccess.id),saving:e.isSavingUserInfo,onConfirm:t[9]||(t[9]=function(t){return e.saveUserInfo()})},null,8,["value","disabled","saving"])):Object(a["createCommentVNode"])("",!0)]),Object(a["createElementVNode"])("div",Qe,[e.isAdd?(Object(a["openBlock"])(),Object(a["createElementBlock"])("div",Ze,[Object(a["createElementVNode"])("span",{class:"inline-help",innerHTML:e.$sanitize(e.translate("UsersManager_InviteSuccessNotification",[7]))},null,8,et)])):Object(a["createCommentVNode"])("",!0)])])]),e.isAdd?(Object(a["openBlock"])(),Object(a["createElementBlock"])("div",tt,[Object(a["createElementVNode"])("a",{href:"",class:"entityCancelLink",onClick:t[10]||(t[10]=Object(a["withModifiers"])((function(t){return e.onDoneEditing()}),["prevent"]))},Object(a["toDisplayString"])(e.translate("General_Cancel")),1)])):Object(a["createCommentVNode"])("",!0)])):Object(a["createCommentVNode"])("",!0),e.isAdd?Object(a["createCommentVNode"])("",!0):Object(a["withDirectives"])((Object(a["openBlock"])(),Object(a["createElementBlock"])("div",nt,[e.theUser.superuser_access?Object(a["createCommentVNode"])("",!0):(Object(a["openBlock"])(),Object(a["createElementBlock"])("div",st,[Object(a["createVNode"])(c,{"user-login":e.theUser.login,onUserHasAccessDetected:t[11]||(t[11]=function(t){return e.userHasAccess=t.hasAccess}),onAccessChanged:t[12]||(t[12]=function(t){return e.isUserModified=!0}),"access-levels":e.accessLevels,"filter-access-levels":e.filterAccessLevels},null,8,["user-login","access-levels","filter-access-levels"])])),e.theUser.superuser_access?(Object(a["openBlock"])(),Object(a["createElementBlock"])("div",rt,Object(a["toDisplayString"])(e.translate("UsersManager_SuperUsersPermissionsNotice")),1)):Object(a["createCommentVNode"])("",!0)],512)),[[a["vShow"],"permissions"===e.activeTab]]),"superuser"!==e.activeTab||"superuser"!==e.currentUserRole||e.isAdd?Object(a["createCommentVNode"])("",!0):(Object(a["openBlock"])(),Object(a["createElementBlock"])("div",it,[Object(a["createElementVNode"])("p",null,Object(a["toDisplayString"])(e.translate("UsersManager_SuperUserIntro1")),1),Object(a["createElementVNode"])("p",null,[Object(a["createElementVNode"])("strong",null,Object(a["toDisplayString"])(e.translate("UsersManager_SuperUserIntro2")),1)]),Object(a["createElementVNode"])("div",null,[Object(a["createVNode"])(o,{modelValue:e.superUserAccessChecked,"onUpdate:modelValue":t[13]||(t[13]=function(t){return e.superUserAccessChecked=t}),onClick:t[14]||(t[14]=function(t){return e.confirmSuperUserChange()}),disabled:e.isSavingUserInfo,uicontrol:"checkbox",name:"superuser_access",title:e.translate("UsersManager_HasSuperUserAccess")},null,8,["modelValue","disabled","title"])]),Object(a["createElementVNode"])("div",at,[Object(a["createElementVNode"])("div",ot,[Object(a["createElementVNode"])("h2",null,Object(a["toDisplayString"])(e.translate("UsersManager_AreYouSure")),1),e.theUser.superuser_access?(Object(a["openBlock"])(),Object(a["createElementBlock"])("p",lt,Object(a["toDisplayString"])(e.translate("UsersManager_RemoveSuperuserAccessConfirm")),1)):Object(a["createCommentVNode"])("",!0),e.theUser.superuser_access?Object(a["createCommentVNode"])("",!0):(Object(a["openBlock"])(),Object(a["createElementBlock"])("p",ct,Object(a["toDisplayString"])(e.translate("UsersManager_AddSuperuserAccessConfirm")),1)),Object(a["createElementVNode"])("div",null,[Object(a["createVNode"])(o,{modelValue:e.passwordConfirmationForSuperUser,"onUpdate:modelValue":t[15]||(t[15]=function(t){return e.passwordConfirmationForSuperUser=t}),uicontrol:"password",name:"currentUserPasswordForSuperUser",autocomplete:!1,"full-width":!0,title:e.translate("UsersManager_YourCurrentPassword")},null,8,["modelValue","title"])])]),Object(a["createElementVNode"])("div",dt,[Object(a["createElementVNode"])("a",{href:"",class:"modal-action modal-close btn",onClick:t[16]||(t[16]=Object(a["withModifiers"])((function(t){return e.toggleSuperuserAccess()}),["prevent"])),style:{"margin-right":"3.5px"}},Object(a["toDisplayString"])(e.translate("General_Yes")),1),Object(a["createElementVNode"])("a",{href:"",class:"modal-action modal-close modal-no",onClick:t[17]||(t[17]=Object(a["withModifiers"])((function(t){e.setSuperUserAccessChecked(),e.passwordConfirmationForSuperUser=""}),["prevent"]))},Object(a["toDisplayString"])(e.translate("General_No")),1)])],512)])),"superuser"!==e.currentUserRole||e.isAdd?Object(a["createCommentVNode"])("",!0):Object(a["withDirectives"])((Object(a["openBlock"])(),Object(a["createElementBlock"])("div",ut,[Object(a["createElementVNode"])("p",null,Object(a["toDisplayString"])(e.translate("UsersManager_ResetTwoFactorAuthenticationInfo")),1),Object(a["createElementVNode"])("div",mt,[Object(a["createVNode"])(l,{saving:e.isResetting2FA,onConfirm:t[18]||(t[18]=function(t){return e.confirmReset2FA()}),value:e.translate("UsersManager_ResetTwoFactorAuthentication")},null,8,["saving","value"])]),Object(a["createElementVNode"])("div",bt,[Object(a["createElementVNode"])("div",pt,[Object(a["createElementVNode"])("h2",null,Object(a["toDisplayString"])(e.translate("UsersManager_AreYouSure")),1),Object(a["createElementVNode"])("p",null,Object(a["toDisplayString"])(e.translate("UsersManager_ConfirmWithPassword")),1),Object(a["createElementVNode"])("div",null,[Object(a["createVNode"])(o,{modelValue:e.passwordConfirmation,"onUpdate:modelValue":t[19]||(t[19]=function(t){return e.passwordConfirmation=t}),uicontrol:"password",name:"currentUserPasswordTwoFa",autocomplete:!1,"full-width":!0,title:e.translate("UsersManager_YourCurrentPassword")},null,8,["modelValue","title"])])]),Object(a["createElementVNode"])("div",gt,[Object(a["createElementVNode"])("a",{href:"",class:"modal-action modal-close btn",onClick:t[20]||(t[20]=Object(a["withModifiers"])((function(t){return e.reset2FA()}),["prevent"])),style:{"margin-right":"3.5px"}},Object(a["toDisplayString"])(e.translate("General_Yes")),1),Object(a["createElementVNode"])("a",{href:"",class:"modal-action modal-close modal-no",onClick:t[21]||(t[21]=function(t){t.preventDefault(),e.passwordConfirmation=""})},Object(a["toDisplayString"])(e.translate("General_No")),1)])],512)],512)),[[a["vShow"],"2fa"===e.activeTab]])])],512),[[u]]),Object(a["createElementVNode"])("div",ht,[Object(a["createElementVNode"])("div",ft,[Object(a["createElementVNode"])("h2",{innerHTML:e.$sanitize(e.changePasswordTitle)},null,8,jt),Object(a["createElementVNode"])("p",null,Object(a["toDisplayString"])(e.translate("UsersManager_ConfirmWithPassword")),1),Object(a["createElementVNode"])("div",null,[Object(a["createVNode"])(o,{modelValue:e.passwordConfirmation,"onUpdate:modelValue":t[22]||(t[22]=function(t){return e.passwordConfirmation=t}),uicontrol:"password",name:"currentUserPasswordChangePwd",autocomplete:!1,"full-width":!0,title:e.translate("UsersManager_YourCurrentPassword")},null,8,["modelValue","title"])])]),Object(a["createElementVNode"])("div",Ot,[Object(a["createElementVNode"])("a",{href:"",class:"modal-action modal-close btn",onClick:t[23]||(t[23]=Object(a["withModifiers"])((function(t){return e.updateUser()}),["prevent"]))},Object(a["toDisplayString"])(e.translate("General_Yes")),1),Object(a["createElementVNode"])("a",{href:"",class:"modal-action modal-close modal-no",onClick:t[24]||(t[24]=function(t){t.preventDefault(),e.passwordConfirmation=""})},Object(a["toDisplayString"])(e.translate("General_No")),1)])],512)]})),_:1},8,["class","content-title"])}var Ct={login:"",superuser_access:!1,uses_2fa:!1,password:"",email:"",invited_at:""},Nt=window,St=Nt.$,Ut=Object(a["defineComponent"])({props:{user:Object,currentUserRole:{type:String,required:!0},accessLevels:{type:Array,required:!0},filterAccessLevels:{type:Array,required:!0},initialSiteId:{type:[String,Number],required:!0},initialSiteName:{type:String,required:!0}},components:{ContentBlock:i["ContentBlock"],Field:h["Field"],SaveButton:h["SaveButton"],UserPermissionsEdit:Fe},directives:{Form:h["Form"]},data:function(){return{theUser:this.user||Object.assign({},Ct),activeTab:"basic",permissionsForIdSite:1,isSavingUserInfo:!1,userHasAccess:!0,firstSiteAccess:{id:this.initialSiteId,name:this.initialSiteName},isUserModified:!1,passwordConfirmation:"",isPasswordModified:!1,superUserAccessChecked:null,passwordConfirmationForSuperUser:"",isResetting2FA:!1,isShowingPasswordConfirm:!1}},emits:["done","updated"],watch:{user:function(e){this.onUserChange(e)}},created:function(){this.onUserChange(this.user)},methods:{onUserChange:function(e){this.theUser=e||Object.assign({},Ct),this.theUser.password||this.resetPasswordVar(),this.setSuperUserAccessChecked()},confirmSuperUserChange:function(){St(this.$refs.superUserConfirmModal).modal({dismissible:!1}).modal("open")},confirmReset2FA:function(){St(this.$refs.twofaConfirmModal).modal({dismissible:!1}).modal("open")},toggleSuperuserAccess:function(){var e=this;this.isSavingUserInfo=!0,i["AjaxHelper"].post({method:"UsersManager.setSuperUserAccess"},{userLogin:this.theUser.login,hasSuperUserAccess:this.theUser.superuser_access?"0":"1",passwordConfirmation:this.passwordConfirmationForSuperUser}).then((function(){e.theUser.superuser_access=!e.theUser.superuser_access})).catch((function(){})).then((function(){e.isSavingUserInfo=!1,e.isUserModified=!0,e.passwordConfirmationForSuperUser="",e.setSuperUserAccessChecked()}))},saveUserInfo:function(){var e=this;return Promise.resolve().then((function(){return e.isAdd?e.createUser():e.confirmUserChange()})).then((function(){e.$emit("updated",{user:Object(a["readonly"])(e.theUser)})}))},createUser:function(){var e=this;return this.isSavingUserInfo=!0,i["AjaxHelper"].post({method:"UsersManager.inviteUser"},{userLogin:this.theUser.login,email:this.theUser.email,initialIdSite:this.firstSiteAccess?this.firstSiteAccess.id:void 0}).catch((function(t){throw e.isSavingUserInfo=!1,t})).then((function(){e.firstSiteAccess=null,e.isSavingUserInfo=!1,e.isUserModified=!0,e.theUser.invited_at="xx",e.resetPasswordVar(),e.showUserSavedNotification()}))},resetPasswordVar:function(){this.isAdd||(this.theUser.password="XXXXXXXX")},confirmUserChange:function(){var e=this;this.passwordConfirmation="",this.isShowingPasswordConfirm=!0;var t=function(t){var n=t.keyCode?t.keyCode:t.which;13===n&&(St(e.$refs.changePasswordModal).modal("close"),e.updateUser())};St(this.$refs.changePasswordModal).modal({dismissible:!1,onOpenEnd:function(){e.isShowingPasswordConfirm=!1,St(".modal.open #currentUserPasswordChangePwd").focus().off("keypress").keypress(t)}}).modal("open")},showUserSavedNotification:function(){i["NotificationsStore"].show({message:Object(i["translate"])("General_YourChangesHaveBeenSaved"),context:"success",type:"toast"})},reset2FA:function(){var e=this;return this.isResetting2FA=!0,i["AjaxHelper"].post({method:"TwoFactorAuth.resetTwoFactorAuth",userLogin:this.theUser.login,passwordConfirmation:this.passwordConfirmation}).catch((function(t){throw e.isResetting2FA=!1,t})).then((function(){e.isResetting2FA=!1,e.theUser.uses_2fa=!1,e.activeTab="basic",e.showUserSavedNotification()})).finally((function(){e.passwordConfirmation=""}))},updateUser:function(){var e=this;return this.isSavingUserInfo=!0,i["AjaxHelper"].post({method:"UsersManager.updateUser"},{userLogin:this.theUser.login,password:this.isPasswordModified&&this.theUser.password?this.theUser.password:void 0,passwordConfirmation:this.passwordConfirmation?this.passwordConfirmation:void 0,email:this.theUser.email}).then((function(){e.isSavingUserInfo=!1,e.passwordConfirmation="",e.isUserModified=!0,e.isPasswordModified=!1,e.resetPasswordVar(),e.showUserSavedNotification()})).catch((function(){e.isSavingUserInfo=!1,e.passwordConfirmation=""}))},setSuperUserAccessChecked:function(){this.superUserAccessChecked=!!this.theUser.superuser_access},onDoneEditing:function(){this.$emit("done",{isUserModified:this.isUserModified})}},computed:{formTitle:function(){return this.isAdd?Object(i["translate"])("UsersManager_InviteNewUser"):Object(i["translate"])("UsersManager_EditUser")},saveButtonLabel:function(){return this.isAdd?Object(i["translate"])("UsersManager_InviteUser"):Object(i["translate"])("UsersManager_SaveBasicInfo")},isPendingUser:function(){return this.user&&(""===this.theUser.invited_at||!this.theUser.invited_at)},isAdd:function(){return!this.user},changePasswordTitle:function(){return Object(i["translate"])("UsersManager_AreYouSureChangeDetails","<strong>".concat(this.theUser.login,"</strong>"))}}});Ut.render=vt;var yt=Ut;
+ */function vt(e,t,n,s,r,i){var o=Object(a["resolveComponent"])("Field"),l=Object(a["resolveComponent"])("SaveButton"),c=Object(a["resolveComponent"])("UserPermissionsEdit"),d=Object(a["resolveComponent"])("ContentBlock"),u=Object(a["resolveDirective"])("form");return Object(a["openBlock"])(),Object(a["createBlock"])(d,{class:Object(a["normalizeClass"])(["userEditForm",{loading:e.isSavingUserInfo}]),"content-title":"".concat(e.formTitle," ").concat(e.isAdd?"":"'".concat(e.theUser.login,"'"))},{default:Object(a["withCtx"])((function(){return[Object(a["withDirectives"])(Object(a["createElementVNode"])("div",Ie,[e.isAdd?Object(a["createCommentVNode"])("",!0):(Object(a["openBlock"])(),Object(a["createElementBlock"])("div",Je,[Object(a["createElementVNode"])("ul",qe,[Object(a["createElementVNode"])("li",{class:Object(a["normalizeClass"])([{active:"basic"===e.activeTab},"menuBasicInfo"])},[Object(a["createElementVNode"])("a",{href:"",onClick:t[0]||(t[0]=Object(a["withModifiers"])((function(t){return e.activeTab="basic"}),["prevent"]))},Object(a["toDisplayString"])(e.translate("UsersManager_BasicInformation")),1)],2),Object(a["createElementVNode"])("li",{class:Object(a["normalizeClass"])([{active:"permissions"===e.activeTab},"menuPermissions"])},[Object(a["createElementVNode"])("a",{href:"",onClick:t[1]||(t[1]=Object(a["withModifiers"])((function(t){return e.activeTab="permissions"}),["prevent"])),style:{"margin-right":"3.5px"}},Object(a["toDisplayString"])(e.translate("UsersManager_Permissions")),1),e.userHasAccess||e.theUser.superuser_access?Object(a["createCommentVNode"])("",!0):(Object(a["openBlock"])(),Object(a["createElementBlock"])("span",$e))],2),"superuser"===e.currentUserRole?(Object(a["openBlock"])(),Object(a["createElementBlock"])("li",{key:0,class:Object(a["normalizeClass"])([{active:"superuser"===e.activeTab},"menuSuperuser"])},[Object(a["createElementVNode"])("a",{href:"",onClick:t[2]||(t[2]=Object(a["withModifiers"])((function(t){return e.activeTab="superuser"}),["prevent"]))},Object(a["toDisplayString"])(e.translate("UsersManager_SuperUserAccess")),1)],2)):Object(a["createCommentVNode"])("",!0),"superuser"===e.currentUserRole&&e.theUser.uses_2fa&&!e.isAdd?(Object(a["openBlock"])(),Object(a["createElementBlock"])("li",{key:1,class:Object(a["normalizeClass"])([{active:"2fa"===e.activeTab},"menuUserTwoFa"])},[Object(a["createElementVNode"])("a",{href:"",onClick:t[3]||(t[3]=Object(a["withModifiers"])((function(t){return e.activeTab="2fa"}),["prevent"]))},Object(a["toDisplayString"])(e.translate("UsersManager_TwoFactorAuthentication")),1)],2)):Object(a["createCommentVNode"])("",!0)]),Ge,Object(a["createElementVNode"])("div",{class:"entityCancel",onClick:t[4]||(t[4]=Object(a["withModifiers"])((function(t){return e.onDoneEditing()}),["prevent"]))},[Object(a["createElementVNode"])("a",ze,Object(a["toDisplayString"])(e.translate("Mobile_NavigationBack")),1)])])),Object(a["createElementVNode"])("div",We,["basic"===e.activeTab?(Object(a["openBlock"])(),Object(a["createElementBlock"])("div",Ye,[Object(a["createElementVNode"])("div",null,[Object(a["createVNode"])(o,{modelValue:e.theUser.login,"onUpdate:modelValue":t[5]||(t[5]=function(t){return e.theUser.login=t}),disabled:e.isSavingUserInfo||!e.isAdd||e.isShowingPasswordConfirm,uicontrol:"text",name:"user_login",maxlength:100,title:e.translate("General_Username")},null,8,["modelValue","disabled","title"])]),Object(a["createElementVNode"])("div",null,[e.isPending?Object(a["createCommentVNode"])("",!0):(Object(a["openBlock"])(),Object(a["createBlock"])(o,{key:0,"model-value":e.theUser.password,disabled:e.isSavingUserInfo||"superuser"!==e.currentUserRole&&!e.isAdd||e.isShowingPasswordConfirm,"onUpdate:modelValue":t[6]||(t[6]=function(t){e.theUser.password=t,e.isPasswordModified=!0}),uicontrol:"password",name:"user_password",title:e.translate("General_Password")},null,8,["model-value","disabled","title"]))]),Object(a["createElementVNode"])("div",null,["superuser"===e.currentUserRole||e.isAdd?(Object(a["openBlock"])(),Object(a["createBlock"])(o,{key:0,modelValue:e.theUser.email,"onUpdate:modelValue":t[7]||(t[7]=function(t){return e.theUser.email=t}),disabled:e.isSavingUserInfo||"superuser"!==e.currentUserRole&&!e.isAdd||e.isShowingPasswordConfirm,uicontrol:"text",name:"user_email",maxlength:100,title:e.translate("UsersManager_Email")},null,8,["modelValue","disabled","title"])):Object(a["createCommentVNode"])("",!0)]),Object(a["createElementVNode"])("div",null,[e.isAdd?(Object(a["openBlock"])(),Object(a["createBlock"])(o,{key:0,modelValue:e.firstSiteAccess,"onUpdate:modelValue":t[8]||(t[8]=function(t){return e.firstSiteAccess=t}),disabled:e.isSavingUserInfo,uicontrol:"site",name:"user_site","ui-control-attributes":{onlySitesWithAdminAccess:!0},title:e.translate("UsersManager_FirstWebsitePermission"),"inline-help":e.translate("UsersManager_FirstSiteInlineHelp")},null,8,["modelValue","disabled","title","inline-help"])):Object(a["createCommentVNode"])("",!0)]),Object(a["createElementVNode"])("div",null,[Object(a["createElementVNode"])("div",Xe,[Object(a["createElementVNode"])("div",Ke,["superuser"===e.currentUserRole||e.isAdd?(Object(a["openBlock"])(),Object(a["createBlock"])(l,{key:0,style:{position:"absolute",bottom:"0"},value:e.saveButtonLabel,disabled:e.isAdd&&(!e.firstSiteAccess||!e.firstSiteAccess.id),saving:e.isSavingUserInfo,onConfirm:t[9]||(t[9]=function(t){return e.saveUserInfo()})},null,8,["value","disabled","saving"])):Object(a["createCommentVNode"])("",!0)]),Object(a["createElementVNode"])("div",Qe,[e.isAdd?(Object(a["openBlock"])(),Object(a["createElementBlock"])("div",Ze,[Object(a["createElementVNode"])("span",{class:"inline-help",innerHTML:e.$sanitize(e.translate("UsersManager_InviteSuccessNotification",[7]))},null,8,et)])):Object(a["createCommentVNode"])("",!0)])])]),e.isAdd?(Object(a["openBlock"])(),Object(a["createElementBlock"])("div",tt,[Object(a["createElementVNode"])("a",{href:"",class:"entityCancelLink",onClick:t[10]||(t[10]=Object(a["withModifiers"])((function(t){return e.onDoneEditing()}),["prevent"]))},Object(a["toDisplayString"])(e.translate("General_Cancel")),1)])):Object(a["createCommentVNode"])("",!0)])):Object(a["createCommentVNode"])("",!0),e.isAdd?Object(a["createCommentVNode"])("",!0):Object(a["withDirectives"])((Object(a["openBlock"])(),Object(a["createElementBlock"])("div",nt,[e.theUser.superuser_access?Object(a["createCommentVNode"])("",!0):(Object(a["openBlock"])(),Object(a["createElementBlock"])("div",st,[Object(a["createVNode"])(c,{"user-login":e.theUser.login,onUserHasAccessDetected:t[11]||(t[11]=function(t){return e.userHasAccess=t.hasAccess}),onAccessChanged:t[12]||(t[12]=function(t){return e.isUserModified=!0}),"access-levels":e.accessLevels,"filter-access-levels":e.filterAccessLevels},null,8,["user-login","access-levels","filter-access-levels"])])),e.theUser.superuser_access?(Object(a["openBlock"])(),Object(a["createElementBlock"])("div",rt,Object(a["toDisplayString"])(e.translate("UsersManager_SuperUsersPermissionsNotice")),1)):Object(a["createCommentVNode"])("",!0)],512)),[[a["vShow"],"permissions"===e.activeTab]]),"superuser"!==e.activeTab||"superuser"!==e.currentUserRole||e.isAdd?Object(a["createCommentVNode"])("",!0):(Object(a["openBlock"])(),Object(a["createElementBlock"])("div",it,[Object(a["createElementVNode"])("p",null,Object(a["toDisplayString"])(e.translate("UsersManager_SuperUserIntro1")),1),Object(a["createElementVNode"])("p",null,[Object(a["createElementVNode"])("strong",null,Object(a["toDisplayString"])(e.translate("UsersManager_SuperUserIntro2")),1)]),Object(a["createElementVNode"])("div",null,[Object(a["createVNode"])(o,{modelValue:e.superUserAccessChecked,"onUpdate:modelValue":t[13]||(t[13]=function(t){return e.superUserAccessChecked=t}),onClick:t[14]||(t[14]=function(t){return e.confirmSuperUserChange()}),disabled:e.isSavingUserInfo,uicontrol:"checkbox",name:"superuser_access",title:e.translate("UsersManager_HasSuperUserAccess")},null,8,["modelValue","disabled","title"])]),Object(a["createElementVNode"])("div",at,[Object(a["createElementVNode"])("div",ot,[Object(a["createElementVNode"])("h2",null,Object(a["toDisplayString"])(e.translate("UsersManager_AreYouSure")),1),e.theUser.superuser_access?(Object(a["openBlock"])(),Object(a["createElementBlock"])("p",lt,Object(a["toDisplayString"])(e.translate("UsersManager_RemoveSuperuserAccessConfirm")),1)):Object(a["createCommentVNode"])("",!0),e.theUser.superuser_access?Object(a["createCommentVNode"])("",!0):(Object(a["openBlock"])(),Object(a["createElementBlock"])("p",ct,Object(a["toDisplayString"])(e.translate("UsersManager_AddSuperuserAccessConfirm")),1)),Object(a["createElementVNode"])("div",null,[Object(a["createVNode"])(o,{modelValue:e.passwordConfirmationForSuperUser,"onUpdate:modelValue":t[15]||(t[15]=function(t){return e.passwordConfirmationForSuperUser=t}),uicontrol:"password",name:"currentUserPasswordForSuperUser",autocomplete:!1,"full-width":!0,title:e.translate("UsersManager_YourCurrentPassword")},null,8,["modelValue","title"])])]),Object(a["createElementVNode"])("div",dt,[Object(a["createElementVNode"])("a",{href:"",class:"modal-action modal-close btn",onClick:t[16]||(t[16]=Object(a["withModifiers"])((function(t){return e.toggleSuperuserAccess()}),["prevent"])),style:{"margin-right":"3.5px"}},Object(a["toDisplayString"])(e.translate("General_Yes")),1),Object(a["createElementVNode"])("a",{href:"",class:"modal-action modal-close modal-no",onClick:t[17]||(t[17]=Object(a["withModifiers"])((function(t){e.setSuperUserAccessChecked(),e.passwordConfirmationForSuperUser=""}),["prevent"]))},Object(a["toDisplayString"])(e.translate("General_No")),1)])],512)])),"superuser"!==e.currentUserRole||e.isAdd?Object(a["createCommentVNode"])("",!0):Object(a["withDirectives"])((Object(a["openBlock"])(),Object(a["createElementBlock"])("div",ut,[Object(a["createElementVNode"])("p",null,Object(a["toDisplayString"])(e.translate("UsersManager_ResetTwoFactorAuthenticationInfo")),1),Object(a["createElementVNode"])("div",mt,[Object(a["createVNode"])(l,{saving:e.isResetting2FA,onConfirm:t[18]||(t[18]=function(t){return e.confirmReset2FA()}),value:e.translate("UsersManager_ResetTwoFactorAuthentication")},null,8,["saving","value"])]),Object(a["createElementVNode"])("div",bt,[Object(a["createElementVNode"])("div",pt,[Object(a["createElementVNode"])("h2",null,Object(a["toDisplayString"])(e.translate("UsersManager_AreYouSure")),1),Object(a["createElementVNode"])("p",null,Object(a["toDisplayString"])(e.translate("UsersManager_ConfirmWithPassword")),1),Object(a["createElementVNode"])("div",null,[Object(a["createVNode"])(o,{modelValue:e.passwordConfirmation,"onUpdate:modelValue":t[19]||(t[19]=function(t){return e.passwordConfirmation=t}),uicontrol:"password",name:"currentUserPasswordTwoFa",autocomplete:!1,"full-width":!0,title:e.translate("UsersManager_YourCurrentPassword")},null,8,["modelValue","title"])])]),Object(a["createElementVNode"])("div",gt,[Object(a["createElementVNode"])("a",{href:"",class:"modal-action modal-close btn",onClick:t[20]||(t[20]=Object(a["withModifiers"])((function(t){return e.reset2FA()}),["prevent"])),style:{"margin-right":"3.5px"}},Object(a["toDisplayString"])(e.translate("General_Yes")),1),Object(a["createElementVNode"])("a",{href:"",class:"modal-action modal-close modal-no",onClick:t[21]||(t[21]=function(t){t.preventDefault(),e.passwordConfirmation=""})},Object(a["toDisplayString"])(e.translate("General_No")),1)])],512)],512)),[[a["vShow"],"2fa"===e.activeTab]])])],512),[[u]]),Object(a["createElementVNode"])("div",ft,[Object(a["createElementVNode"])("div",ht,[Object(a["createElementVNode"])("h2",{innerHTML:e.$sanitize(e.changePasswordTitle)},null,8,jt),Object(a["createElementVNode"])("p",null,Object(a["toDisplayString"])(e.translate("UsersManager_ConfirmWithPassword")),1),Object(a["createElementVNode"])("div",null,[Object(a["createVNode"])(o,{modelValue:e.passwordConfirmation,"onUpdate:modelValue":t[22]||(t[22]=function(t){return e.passwordConfirmation=t}),uicontrol:"password",name:"currentUserPasswordChangePwd",autocomplete:!1,"full-width":!0,title:e.translate("UsersManager_YourCurrentPassword")},null,8,["modelValue","title"])])]),Object(a["createElementVNode"])("div",Ot,[Object(a["createElementVNode"])("a",{href:"",class:"modal-action modal-close btn",onClick:t[23]||(t[23]=Object(a["withModifiers"])((function(t){return e.updateUser()}),["prevent"]))},Object(a["toDisplayString"])(e.translate("General_Yes")),1),Object(a["createElementVNode"])("a",{href:"",class:"modal-action modal-close modal-no",onClick:t[24]||(t[24]=function(t){t.preventDefault(),e.passwordConfirmation=""})},Object(a["toDisplayString"])(e.translate("General_No")),1)])],512)]})),_:1},8,["class","content-title"])}var Ct={login:"",superuser_access:!1,uses_2fa:!1,password:"",email:"",invite_status:""},Nt=window,St=Nt.$,Ut=Object(a["defineComponent"])({props:{user:Object,currentUserRole:{type:String,required:!0},accessLevels:{type:Array,required:!0},filterAccessLevels:{type:Array,required:!0},initialSiteId:{type:[String,Number],required:!0},initialSiteName:{type:String,required:!0}},components:{ContentBlock:i["ContentBlock"],Field:f["Field"],SaveButton:f["SaveButton"],UserPermissionsEdit:He},directives:{Form:f["Form"]},data:function(){return{theUser:this.user||Object.assign({},Ct),activeTab:"basic",permissionsForIdSite:1,isSavingUserInfo:!1,userHasAccess:!0,firstSiteAccess:{id:this.initialSiteId,name:this.initialSiteName},isUserModified:!1,passwordConfirmation:"",isPasswordModified:!1,superUserAccessChecked:null,passwordConfirmationForSuperUser:"",isResetting2FA:!1,isShowingPasswordConfirm:!1}},emits:["done","updated"],watch:{user:function(e){this.onUserChange(e)}},created:function(){this.onUserChange(this.user)},methods:{onUserChange:function(e){this.theUser=e||Object.assign({},Ct),this.theUser.password||this.resetPasswordVar(),this.setSuperUserAccessChecked()},confirmSuperUserChange:function(){St(this.$refs.superUserConfirmModal).modal({dismissible:!1}).modal("open")},confirmReset2FA:function(){St(this.$refs.twofaConfirmModal).modal({dismissible:!1}).modal("open")},toggleSuperuserAccess:function(){var e=this;this.isSavingUserInfo=!0,i["AjaxHelper"].post({method:"UsersManager.setSuperUserAccess"},{userLogin:this.theUser.login,hasSuperUserAccess:this.theUser.superuser_access?"0":"1",passwordConfirmation:this.passwordConfirmationForSuperUser}).then((function(){e.theUser.superuser_access=!e.theUser.superuser_access})).catch((function(){})).then((function(){e.isSavingUserInfo=!1,e.isUserModified=!0,e.passwordConfirmationForSuperUser="",e.setSuperUserAccessChecked()}))},saveUserInfo:function(){var e=this;return Promise.resolve().then((function(){return e.isAdd?e.createUser():e.confirmUserChange()})).then((function(){e.$emit("updated",{user:Object(a["readonly"])(e.theUser)})}))},createUser:function(){var e=this;return this.isSavingUserInfo=!0,i["AjaxHelper"].post({method:"UsersManager.inviteUser"},{userLogin:this.theUser.login,email:this.theUser.email,initialIdSite:this.firstSiteAccess?this.firstSiteAccess.id:void 0}).catch((function(t){throw e.isSavingUserInfo=!1,t})).then((function(){e.firstSiteAccess=null,e.isSavingUserInfo=!1,e.isUserModified=!0,e.theUser.invite_status="pending",e.resetPasswordVar(),e.showUserCreatedNotification()}))},resetPasswordVar:function(){this.isAdd||(this.theUser.password="XXXXXXXX")},confirmUserChange:function(){var e=this;this.passwordConfirmation="",this.isShowingPasswordConfirm=!0;var t=function(t){var n=t.keyCode?t.keyCode:t.which;13===n&&(St(e.$refs.changePasswordModal).modal("close"),e.updateUser())};St(this.$refs.changePasswordModal).modal({dismissible:!1,onOpenEnd:function(){e.isShowingPasswordConfirm=!1,St(".modal.open #currentUserPasswordChangePwd").focus().off("keypress").keypress(t)}}).modal("open")},showUserSavedNotification:function(){i["NotificationsStore"].show({message:Object(i["translate"])("General_YourChangesHaveBeenSaved"),context:"success",type:"toast"})},showUserCreatedNotification:function(){i["NotificationsStore"].show({message:Object(i["translate"])("UsersManager_InviteSuccess"),context:"success",type:"toast"})},reset2FA:function(){var e=this;return this.isResetting2FA=!0,i["AjaxHelper"].post({method:"TwoFactorAuth.resetTwoFactorAuth",userLogin:this.theUser.login,passwordConfirmation:this.passwordConfirmation}).catch((function(t){throw e.isResetting2FA=!1,t})).then((function(){e.isResetting2FA=!1,e.theUser.uses_2fa=!1,e.activeTab="basic",e.showUserSavedNotification()})).finally((function(){e.passwordConfirmation=""}))},updateUser:function(){var e=this;return this.isSavingUserInfo=!0,i["AjaxHelper"].post({method:"UsersManager.updateUser"},{userLogin:this.theUser.login,password:this.isPasswordModified&&this.theUser.password?this.theUser.password:void 0,passwordConfirmation:this.passwordConfirmation?this.passwordConfirmation:void 0,email:this.theUser.email}).then((function(){e.isSavingUserInfo=!1,e.passwordConfirmation="",e.isUserModified=!0,e.isPasswordModified=!1,e.resetPasswordVar(),e.showUserSavedNotification()})).catch((function(){e.isSavingUserInfo=!1,e.passwordConfirmation=""}))},setSuperUserAccessChecked:function(){this.superUserAccessChecked=!!this.theUser.superuser_access},onDoneEditing:function(){this.$emit("done",{isUserModified:this.isUserModified})}},computed:{formTitle:function(){return this.isAdd?Object(i["translate"])("UsersManager_InviteNewUser"):Object(i["translate"])("UsersManager_EditUser")},saveButtonLabel:function(){return this.isAdd?Object(i["translate"])("UsersManager_InviteUser"):Object(i["translate"])("UsersManager_SaveBasicInfo")},isPending:function(){return!this.user||!("pending"!==this.user.invite_status&&!Number.isInteger(this.user.invite_status))},isAdd:function(){return!this.user},changePasswordTitle:function(){return Object(i["translate"])("UsersManager_AreYouSureChangeDetails","<strong>".concat(this.theUser.login,"</strong>"))}}});Ut.render=vt;var yt=Ut,Et=(Object(i["createAngularJsAdapter"])({component:yt,scope:{user:{angularJsBind:"<"},onDoneEditing:{angularJsBind:"&",vue:"done"},currentUserRole:{angularJsBind:"<"},accessLevels:{angularJsBind:"<"},filterAccessLevels:{angularJsBind:"<"},initialSiteId:{angularJsBind:"<"},initialSiteName:{angularJsBind:"<"},onUpdated:{angularJsBind:"&",vue:"updated"}},directiveName:"piwikUserEditForm",restrict:"E"}),{class:"userListFilters row"}),Vt={class:"col s12 m12 l8"},kt={class:"input-field col s12 m3 l3"},At={id:"user-list-bulk-actions",class:"dropdown-content"},wt={class:"dropdown-trigger","data-target":"bulk-set-access"},Tt={id:"bulk-set-access",class:"dropdown-content"},Mt=["onClick"],Bt={key:0},_t={class:"input-field col s12 m3 l3"},Dt={class:"permissions-for-selector"},Lt={class:"input-field col s12 m3 l3"},Rt={class:"input-field col s12 m3 l3"},xt={key:0,class:"input-field col s12 m12 l4 users-list-pagination-container"},Pt={class:"usersListPagination"},Ft={class:"pointer"},Ht={class:"counter"},It={class:"pointer"},Jt={key:0,class:"roles-help-notification"},qt=["innerHTML"],$t={class:"select-cell"},Gt={class:"checkbox-container"},zt=Object(a["createElementVNode"])("span",null,null,-1),Wt={class:"first"},Yt={class:"role_header"},Xt={style:{"margin-right":"3.5px"}},Kt=Object(a["createElementVNode"])("span",{class:"icon-help"},null,-1),Qt=[Kt],Zt={key:0},en=["title"],tn={key:2},nn={class:"actions-cell-header"},sn={key:0,class:"select-all-row"},rn={colspan:"8"},an={key:0},on=["innerHTML"],ln=["innerHTML"],cn={key:1},dn=["innerHTML"],un=["innerHTML"],mn=["id"],bn={class:"select-cell"},pn={class:"checkbox-container"},gn=["id","onUpdate:modelValue"],fn=Object(a["createElementVNode"])("span",null,null,-1),hn={id:"userLogin"},jn={class:"access-cell"},On={key:0,id:"email"},vn={key:1,id:"twofa"},Cn={key:0,class:"icon-ok"},Nn={key:1,class:"icon-close"},Sn={key:2,id:"last_seen"},Un={id:"status"},yn=["title"],En={class:"center actions-cell"},Vn=["onClick"],kn=Object(a["createElementVNode"])("span",{class:"icon-email"},null,-1),An=[kn],wn=["onClick"],Tn=Object(a["createElementVNode"])("span",{class:"icon-edit"},null,-1),Mn=[Tn],Bn=["onClick"],_n=Object(a["createElementVNode"])("span",{class:"icon-delete"},null,-1),Dn=[_n],Ln={class:"delete-user-confirm-modal modal",ref:"deleteUserConfirmModal"},Rn={class:"modal-content"},xn=["innerHTML"],Pn=["innerHTML"],Fn={class:"modal-footer"},Hn={class:"change-user-role-confirm-modal modal",ref:"changeUserRoleConfirmModal"},In={class:"modal-content"},Jn=["innerHTML"],qn={key:1},$n=["innerHTML"],Gn=["innerHTML"],zn={class:"modal-footer"},Wn={class:"resend-invite-confirm-modal modal",ref:"resendInviteConfirmModal"},Yn={class:"modal-content"},Xn=["innerHTML"],Kn={class:"modal-footer"};
/*!
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
- */Object(i["createAngularJsAdapter"])({component:yt,scope:{user:{angularJsBind:"<"},onDoneEditing:{angularJsBind:"&",vue:"done"},currentUserRole:{angularJsBind:"<"},accessLevels:{angularJsBind:"<"},filterAccessLevels:{angularJsBind:"<"},initialSiteId:{angularJsBind:"<"},initialSiteName:{angularJsBind:"<"},onUpdated:{angularJsBind:"&",vue:"updated"}},directiveName:"piwikUserEditForm",restrict:"E"});Object(a["pushScopeId"])("data-v-2ff6c088");var Et={class:"userListFilters row"},Vt={class:"col s12 m12 l6"},kt={class:"input-field col s12 m4 l4"},At={id:"user-list-bulk-actions",class:"dropdown-content"},wt={class:"dropdown-trigger","data-target":"bulk-set-access"},Tt={id:"bulk-set-access",class:"dropdown-content"},Mt=["onClick"],Bt={key:0},_t={class:"input-field col s12 m4 l4"},Dt={class:"permissions-for-selector"},Lt={class:"input-field col s12 m4 l4"},Rt={key:0,class:"input-field col s12 m12 l6 users-list-pagination-container"},xt={class:"usersListPagination"},Pt={class:"pointer"},Ht={class:"counter"},Ft={class:"pointer"},It={key:0,class:"roles-help-notification"},Jt=["innerHTML"],qt={class:"select-cell"},$t={class:"checkbox-container"},Gt=Object(a["createElementVNode"])("span",null,null,-1),zt={class:"first"},Wt={class:"role_header"},Yt={style:{"margin-right":"3.5px"}},Xt=Object(a["createElementVNode"])("span",{class:"icon-help"},null,-1),Kt=[Xt],Qt={key:0},Zt=["title"],en={key:2},tn={class:"actions-cell-header"},nn={key:0,class:"select-all-row"},sn={colspan:"8"},rn={key:0},an=["innerHTML"],on=["innerHTML"],ln={key:1},cn=["innerHTML"],dn=["innerHTML"],un=["id"],mn={class:"select-cell"},bn={class:"checkbox-container"},pn=["id","onUpdate:modelValue"],gn=Object(a["createElementVNode"])("span",null,null,-1),hn={id:"userLogin"},fn={class:"access-cell"},jn={key:0,id:"email"},On={key:1,id:"twofa"},vn={key:0,class:"icon-ok"},Cn={key:1,class:"icon-close"},Nn={key:2,id:"last_seen"},Sn={id:"status"},Un={class:"center actions-cell"},yn=["onClick"],En=Object(a["createElementVNode"])("span",{class:"icon-email"},null,-1),Vn=[En],kn=["onClick"],An=Object(a["createElementVNode"])("span",{class:"icon-edit"},null,-1),wn=[An],Tn=["onClick"],Mn=Object(a["createElementVNode"])("span",{class:"icon-delete"},null,-1),Bn=[Mn],_n={class:"delete-user-confirm-modal modal",ref:"deleteUserConfirmModal"},Dn={class:"modal-content"},Ln=["innerHTML"],Rn=["innerHTML"],xn={class:"modal-footer"},Pn={class:"change-user-role-confirm-modal modal",ref:"changeUserRoleConfirmModal"},Hn={class:"modal-content"},Fn=["innerHTML"],In={key:1},Jn=["innerHTML"],qn=["innerHTML"],$n={class:"modal-footer"},Gn={class:"resend-invite-confirm-modal modal",ref:"resendInviteConfirmModal"},zn={class:"modal-content"},Wn=["innerHTML"],Yn={class:"modal-footer"};function Xn(e,t,n,s,r,i){var o=Object(a["resolveComponent"])("Field"),l=Object(a["resolveComponent"])("ActivityIndicator"),c=Object(a["resolveComponent"])("Notification"),d=Object(a["resolveComponent"])("ContentBlock"),u=Object(a["resolveDirective"])("dropdown-menu"),m=Object(a["resolveDirective"])("content-table");return Object(a["openBlock"])(),Object(a["createElementBlock"])("div",{class:Object(a["normalizeClass"])(["pagedUsersList",{loading:e.isLoadingUsers}])},[Object(a["createElementVNode"])("div",Et,[Object(a["createElementVNode"])("div",Vt,[Object(a["createElementVNode"])("div",kt,[Object(a["withDirectives"])(Object(a["createElementVNode"])("a",{class:Object(a["normalizeClass"])(["dropdown-trigger btn bulk-actions",{disabled:e.isBulkActionsDisabled}]),href:"","data-target":"user-list-bulk-actions"},[Object(a["createTextVNode"])(Object(a["toDisplayString"])(e.translate("UsersManager_BulkActions")),1)],2),[[u]]),Object(a["createElementVNode"])("ul",At,[Object(a["createElementVNode"])("li",null,[Object(a["withDirectives"])(Object(a["createElementVNode"])("a",wt,[Object(a["createTextVNode"])(Object(a["toDisplayString"])(e.translate("UsersManager_SetPermission")),1)],512),[[u]]),Object(a["createElementVNode"])("ul",Tt,[(Object(a["openBlock"])(!0),Object(a["createElementBlock"])(a["Fragment"],null,Object(a["renderList"])(e.bulkActionAccessLevels,(function(t){return Object(a["openBlock"])(),Object(a["createElementBlock"])("li",{key:t.key},[Object(a["createElementVNode"])("a",{href:"",onClick:Object(a["withModifiers"])((function(n){e.userToChange=null,e.roleToChangeTo=t.key,e.showAccessChangeConfirm()}),["prevent"])},Object(a["toDisplayString"])(t.value),9,Mt)])})),128))])]),Object(a["createElementVNode"])("li",null,[Object(a["createElementVNode"])("a",{href:"",onClick:t[0]||(t[0]=Object(a["withModifiers"])((function(t){e.userToChange=null,e.roleToChangeTo="noaccess",e.showAccessChangeConfirm()}),["prevent"]))},Object(a["toDisplayString"])(e.translate("UsersManager_RemovePermissions")),1)]),"superuser"===e.currentUserRole?(Object(a["openBlock"])(),Object(a["createElementBlock"])("li",Bt,[Object(a["createElementVNode"])("a",{href:"",onClick:t[1]||(t[1]=Object(a["withModifiers"])((function(t){return e.showDeleteConfirm()}),["prevent"]))},Object(a["toDisplayString"])(e.translate("UsersManager_DeleteUsers")),1)])):Object(a["createCommentVNode"])("",!0)])]),Object(a["createElementVNode"])("div",_t,[Object(a["createElementVNode"])("div",Dt,[Object(a["createVNode"])(o,{"model-value":e.userTextFilter,"onUpdate:modelValue":t[2]||(t[2]=function(t){return e.onUserTextFilterChange(t)}),name:"user-text-filter",uicontrol:"text","full-width":!0,placeholder:e.translate("UsersManager_UserSearch")},null,8,["model-value","placeholder"])])]),Object(a["createElementVNode"])("div",Lt,[Object(a["createElementVNode"])("div",null,[Object(a["createVNode"])(o,{"model-value":e.accessLevelFilter,"onUpdate:modelValue":t[3]||(t[3]=function(t){e.accessLevelFilter=t,e.changeSearch({filter_access:e.accessLevelFilter,offset:0})}),name:"access-level-filter",uicontrol:"select",options:e.filterAccessLevels,"full-width":!0,placeholder:e.translate("UsersManager_FilterByAccess")},null,8,["model-value","options","placeholder"])])])]),e.totalEntries>e.searchParams.limit?(Object(a["openBlock"])(),Object(a["createElementBlock"])("div",Rt,[Object(a["createElementVNode"])("div",xt,[Object(a["createElementVNode"])("a",{class:Object(a["normalizeClass"])(["btn prev",{disabled:e.searchParams.offset<=0}]),onClick:t[4]||(t[4]=Object(a["withModifiers"])((function(t){return e.gotoPreviousPage()}),["prevent"]))},[Object(a["createElementVNode"])("span",Pt,"« "+Object(a["toDisplayString"])(e.translate("General_Previous")),1)],2),Object(a["createElementVNode"])("div",Ht,[Object(a["createElementVNode"])("span",{class:Object(a["normalizeClass"])({visibility:e.isLoadingUsers?"hidden":"visible"})},Object(a["toDisplayString"])(e.translate("General_Pagination",e.paginationLowerBound,e.paginationUpperBound,e.totalEntries)),3),Object(a["createVNode"])(l,{loading:e.isLoadingUsers},null,8,["loading"])]),Object(a["createElementVNode"])("a",{class:Object(a["normalizeClass"])(["btn next",{disabled:e.searchParams.offset+e.searchParams.limit>=e.totalEntries}]),onClick:t[5]||(t[5]=Object(a["withModifiers"])((function(t){return e.gotoNextPage()}),["prevent"]))},[Object(a["createElementVNode"])("span",Ft,Object(a["toDisplayString"])(e.translate("General_Next"))+" »",1)],2)])])):Object(a["createCommentVNode"])("",!0)]),e.isRoleHelpToggled?(Object(a["openBlock"])(),Object(a["createElementBlock"])("div",It,[Object(a["createVNode"])(c,{context:"info",type:"persistent",noclear:!0},{default:Object(a["withCtx"])((function(){return[Object(a["createElementVNode"])("span",{innerHTML:e.$sanitize(e.rolesHelpText)},null,8,Jt)]})),_:1})])):Object(a["createCommentVNode"])("",!0),Object(a["createVNode"])(d,null,{default:Object(a["withCtx"])((function(){return[Object(a["withDirectives"])(Object(a["createElementVNode"])("table",{id:"manageUsersTable",class:Object(a["normalizeClass"])({loading:e.isLoadingUsers})},[Object(a["createElementVNode"])("thead",null,[Object(a["createElementVNode"])("tr",null,[Object(a["createElementVNode"])("th",qt,[Object(a["createElementVNode"])("span",$t,[Object(a["createElementVNode"])("label",null,[Object(a["withDirectives"])(Object(a["createElementVNode"])("input",{type:"checkbox",id:"paged_users_select_all",checked:"checked","onUpdate:modelValue":t[6]||(t[6]=function(t){return e.isAllCheckboxSelected=t}),onChange:t[7]||(t[7]=function(t){return e.onAllCheckboxChange()})},null,544),[[a["vModelCheckbox"],e.isAllCheckboxSelected]]),Gt])])]),Object(a["createElementVNode"])("th",zt,Object(a["toDisplayString"])(e.translate("UsersManager_Username")),1),Object(a["createElementVNode"])("th",Wt,[Object(a["createElementVNode"])("span",Yt,Object(a["toDisplayString"])(e.translate("UsersManager_RoleFor")),1),Object(a["createElementVNode"])("a",{href:"",class:Object(a["normalizeClass"])(["helpIcon",{sticky:e.isRoleHelpToggled}]),onClick:t[8]||(t[8]=Object(a["withModifiers"])((function(t){return e.isRoleHelpToggled=!e.isRoleHelpToggled}),["prevent"]))},Kt,2),Object(a["createElementVNode"])("div",null,[Object(a["createVNode"])(o,{class:"permissions-for-selector","model-value":e.permissionsForSite,"onUpdate:modelValue":t[9]||(t[9]=function(t){e.onPermissionsForUpdate(t)}),uicontrol:"site","ui-control-attributes":{onlySitesWithAdminAccess:"superuser"!==e.currentUserRole}},null,8,["model-value","ui-control-attributes"])])]),"superuser"===e.currentUserRole?(Object(a["openBlock"])(),Object(a["createElementBlock"])("th",Qt,Object(a["toDisplayString"])(e.translate("UsersManager_Email")),1)):Object(a["createCommentVNode"])("",!0),"superuser"===e.currentUserRole?(Object(a["openBlock"])(),Object(a["createElementBlock"])("th",{key:1,title:e.translate("UsersManager_UsesTwoFactorAuthentication")},Object(a["toDisplayString"])(e.translate("UsersManager_2FA")),9,Zt)):Object(a["createCommentVNode"])("",!0),"superuser"===e.currentUserRole?(Object(a["openBlock"])(),Object(a["createElementBlock"])("th",en,Object(a["toDisplayString"])(e.translate("UsersManager_LastSeen")),1)):Object(a["createCommentVNode"])("",!0),Object(a["createElementVNode"])("th",null,Object(a["toDisplayString"])(e.translate("UsersManager_Status")),1),Object(a["createElementVNode"])("th",tn,[Object(a["createElementVNode"])("div",null,Object(a["toDisplayString"])(e.translate("General_Actions")),1)])])]),Object(a["createElementVNode"])("tbody",null,[e.isAllCheckboxSelected&&e.users.length&&e.users.length<e.totalEntries?(Object(a["openBlock"])(),Object(a["createElementBlock"])("tr",nn,[Object(a["createElementVNode"])("td",sn,[e.areAllResultsSelected?Object(a["createCommentVNode"])("",!0):(Object(a["openBlock"])(),Object(a["createElementBlock"])("div",rn,[Object(a["createElementVNode"])("span",{innerHTML:e.$sanitize(e.translate("UsersManager_TheDisplayedUsersAreSelected","<strong>".concat(e.users.length,"</strong>"))),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","<strong>".concat(e.totalEntries,"</strong>")))},null,8,on)])),e.areAllResultsSelected?(Object(a["openBlock"])(),Object(a["createElementBlock"])("div",ln,[Object(a["createElementVNode"])("span",{innerHTML:e.$sanitize(e.translate("UsersManager_AllUsersAreSelected","<strong>".concat(e.totalEntries,"</strong>"))),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","<strong>".concat(e.users.length,"</strong>")))},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","<strong>".concat(e.userToChange.login,"</strong>")))},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","<strong>".concat(e.affectedUsersCount,"</strong>")))},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","<strong>".concat(e.userToChange.login,"</strong>")))},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",'<a href="'.concat(e,'" target="_blank" rel="noreferrer noopener">'),"</a>",'<a href="'.concat(t,'" target="_blank" rel="noreferrer noopener">'),"</a>")},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","<strong>".concat((null===(e=this.userToChange)||void 0===e?void 0:e.login)||"","</strong>"),"<strong>".concat(this.getRoleDisplay(this.roleToChangeTo),"</strong>"),"<strong>".concat(i["Matomo"].helper.htmlEntities((null===(t=this.permissionsForSite)||void 0===t?void 0:t.name)||""),"</strong>"))},deleteUserPermConfirmMultipleText:function(){var e;return Object(i["translate"])("UsersManager_DeleteUserPermConfirmMultiple","<strong>".concat(this.affectedUsersCount,"</strong>"),"<strong>".concat(this.getRoleDisplay(this.roleToChangeTo),"</strong>"),"<strong>".concat(i["Matomo"].helper.htmlEntities((null===(e=this.permissionsForSite)||void 0===e?void 0:e.name)||""),"</strong>"))},bulkActionAccessLevels:function(){return this.accessLevels.filter((function(e){return"noaccess"!==e.key&&"superuser"!==e.key}))},anonymousAccessLevels:function(){return this.accessLevels.filter((function(e){return"noaccess"===e.key||"view"===e.key}))}}});n("f2d6");Zn.render=Xn,Zn.__scopeId="data-v-2ff6c088";var es=Zn,ts=(Object(i["createAngularJsAdapter"])({component:es,scope:{onEditUser:{angularJsBind:"&",vue:"editUser"},onChangeUserRole:{angularJsBind:"&",vue:"changeUserRole"},onDeleteUser:{angularJsBind:"&",vue:"deleteUser"},onSearchChange:{angularJsBind:"&",vue:"searchChange"},onResendInvite:{angularJsBind:"&",vue:"resendInvite"},initialSiteId:{angularJsBind:"<"},initialSiteName:{angularJsBind:"<"},currentUserRole:{angularJsBind:"<"},isLoadingUsers:{angularJsBind:"<"},accessLevels:{angularJsBind:"<"},filterAccessLevels:{angularJsBind:"<"},totalEntries:{angularJsBind:"<"},users:{angularJsBind:"<"},searchParams:{angularJsBind:"<"}},directiveName:"piwikPagedUsersList",restrict:"E"}),{class:"usersManager"}),ns={key:0},ss={key:1},rs={class:"row add-user-container"},is={class:"col s12"},as={class:"input-field",style:{"margin-right":"3.5px"}},os={key:0,class:"input-field"},ls={key:0},cs={class:"add-existing-user-modal modal",ref:"addExistingUserModal"},ds={class:"modal-content"},us={class:"modal-footer"};
+ */function Qn(e,t,n,s,r,i){var o=Object(a["resolveComponent"])("Field"),l=Object(a["resolveComponent"])("ActivityIndicator"),c=Object(a["resolveComponent"])("Notification"),d=Object(a["resolveComponent"])("ContentBlock"),u=Object(a["resolveDirective"])("dropdown-menu"),m=Object(a["resolveDirective"])("content-table");return Object(a["openBlock"])(),Object(a["createElementBlock"])("div",{class:Object(a["normalizeClass"])(["pagedUsersList",{loading:e.isLoadingUsers}])},[Object(a["createElementVNode"])("div",Et,[Object(a["createElementVNode"])("div",Vt,[Object(a["createElementVNode"])("div",kt,[Object(a["withDirectives"])(Object(a["createElementVNode"])("a",{class:Object(a["normalizeClass"])(["dropdown-trigger btn bulk-actions",{disabled:e.isBulkActionsDisabled}]),href:"","data-target":"user-list-bulk-actions"},[Object(a["createTextVNode"])(Object(a["toDisplayString"])(e.translate("UsersManager_BulkActions")),1)],2),[[u]]),Object(a["createElementVNode"])("ul",At,[Object(a["createElementVNode"])("li",null,[Object(a["withDirectives"])(Object(a["createElementVNode"])("a",wt,[Object(a["createTextVNode"])(Object(a["toDisplayString"])(e.translate("UsersManager_SetPermission")),1)],512),[[u]]),Object(a["createElementVNode"])("ul",Tt,[(Object(a["openBlock"])(!0),Object(a["createElementBlock"])(a["Fragment"],null,Object(a["renderList"])(e.bulkActionAccessLevels,(function(t){return Object(a["openBlock"])(),Object(a["createElementBlock"])("li",{key:t.key},[Object(a["createElementVNode"])("a",{href:"",onClick:Object(a["withModifiers"])((function(n){e.userToChange=null,e.roleToChangeTo=t.key,e.showAccessChangeConfirm()}),["prevent"])},Object(a["toDisplayString"])(t.value),9,Mt)])})),128))])]),Object(a["createElementVNode"])("li",null,[Object(a["createElementVNode"])("a",{href:"",onClick:t[0]||(t[0]=Object(a["withModifiers"])((function(t){e.userToChange=null,e.roleToChangeTo="noaccess",e.showAccessChangeConfirm()}),["prevent"]))},Object(a["toDisplayString"])(e.translate("UsersManager_RemovePermissions")),1)]),"superuser"===e.currentUserRole?(Object(a["openBlock"])(),Object(a["createElementBlock"])("li",Bt,[Object(a["createElementVNode"])("a",{href:"",onClick:t[1]||(t[1]=Object(a["withModifiers"])((function(t){return e.showDeleteConfirm()}),["prevent"]))},Object(a["toDisplayString"])(e.translate("UsersManager_DeleteUsers")),1)])):Object(a["createCommentVNode"])("",!0)])]),Object(a["createElementVNode"])("div",_t,[Object(a["createElementVNode"])("div",Dt,[Object(a["createVNode"])(o,{"model-value":e.userTextFilter,"onUpdate:modelValue":t[2]||(t[2]=function(t){return e.onUserTextFilterChange(t)}),name:"user-text-filter",uicontrol:"text","full-width":!0,placeholder:e.translate("UsersManager_UserSearch")},null,8,["model-value","placeholder"])])]),Object(a["createElementVNode"])("div",Lt,[Object(a["createElementVNode"])("div",null,[Object(a["createVNode"])(o,{"model-value":e.accessLevelFilter,"onUpdate:modelValue":t[3]||(t[3]=function(t){e.accessLevelFilter=t,e.changeSearch({filter_access:e.accessLevelFilter,offset:0})}),name:"access-level-filter",uicontrol:"select",options:e.filterAccessLevels,"full-width":!0,placeholder:e.translate("UsersManager_FilterByAccess")},null,8,["model-value","options","placeholder"])])]),Object(a["createElementVNode"])("div",Rt,[Object(a["createElementVNode"])("div",null,[Object(a["createVNode"])(o,{"model-value":e.statusLevelFilter,"onUpdate:modelValue":t[4]||(t[4]=function(t){e.statusLevelFilter=t,e.changeSearch({filter_status:e.statusLevelFilter,offset:0})}),name:"status-level-filter",uicontrol:"select",options:e.filterStatusLevels,"full-width":!0,placeholder:e.translate("UsersManager_FilterByStatus")},null,8,["model-value","options","placeholder"])])])]),e.totalEntries>e.searchParams.limit?(Object(a["openBlock"])(),Object(a["createElementBlock"])("div",xt,[Object(a["createElementVNode"])("div",Pt,[Object(a["createElementVNode"])("a",{class:Object(a["normalizeClass"])(["btn prev",{disabled:e.searchParams.offset<=0}]),onClick:t[5]||(t[5]=Object(a["withModifiers"])((function(t){return e.gotoPreviousPage()}),["prevent"]))},[Object(a["createElementVNode"])("span",Ft,"« "+Object(a["toDisplayString"])(e.translate("General_Previous")),1)],2),Object(a["createElementVNode"])("div",Ht,[Object(a["createElementVNode"])("span",{class:Object(a["normalizeClass"])({visibility:e.isLoadingUsers?"hidden":"visible"})},Object(a["toDisplayString"])(e.translate("General_Pagination",e.paginationLowerBound,e.paginationUpperBound,e.totalEntries)),3),Object(a["createVNode"])(l,{loading:e.isLoadingUsers},null,8,["loading"])]),Object(a["createElementVNode"])("a",{class:Object(a["normalizeClass"])(["btn next",{disabled:e.searchParams.offset+e.searchParams.limit>=e.totalEntries}]),onClick:t[6]||(t[6]=Object(a["withModifiers"])((function(t){return e.gotoNextPage()}),["prevent"]))},[Object(a["createElementVNode"])("span",It,Object(a["toDisplayString"])(e.translate("General_Next"))+" »",1)],2)])])):Object(a["createCommentVNode"])("",!0)]),e.isRoleHelpToggled?(Object(a["openBlock"])(),Object(a["createElementBlock"])("div",Jt,[Object(a["createVNode"])(c,{context:"info",type:"persistent",noclear:!0},{default:Object(a["withCtx"])((function(){return[Object(a["createElementVNode"])("span",{innerHTML:e.$sanitize(e.rolesHelpText)},null,8,qt)]})),_:1})])):Object(a["createCommentVNode"])("",!0),Object(a["createVNode"])(d,null,{default:Object(a["withCtx"])((function(){return[Object(a["withDirectives"])(Object(a["createElementVNode"])("table",{id:"manageUsersTable",class:Object(a["normalizeClass"])({loading:e.isLoadingUsers})},[Object(a["createElementVNode"])("thead",null,[Object(a["createElementVNode"])("tr",null,[Object(a["createElementVNode"])("th",$t,[Object(a["createElementVNode"])("span",Gt,[Object(a["createElementVNode"])("label",null,[Object(a["withDirectives"])(Object(a["createElementVNode"])("input",{type:"checkbox",id:"paged_users_select_all",checked:"checked","onUpdate:modelValue":t[7]||(t[7]=function(t){return e.isAllCheckboxSelected=t}),onChange:t[8]||(t[8]=function(t){return e.onAllCheckboxChange()})},null,544),[[a["vModelCheckbox"],e.isAllCheckboxSelected]]),zt])])]),Object(a["createElementVNode"])("th",Wt,Object(a["toDisplayString"])(e.translate("UsersManager_Username")),1),Object(a["createElementVNode"])("th",Yt,[Object(a["createElementVNode"])("span",Xt,Object(a["toDisplayString"])(e.translate("UsersManager_RoleFor")),1),Object(a["createElementVNode"])("a",{href:"",class:Object(a["normalizeClass"])(["helpIcon",{sticky:e.isRoleHelpToggled}]),onClick:t[9]||(t[9]=Object(a["withModifiers"])((function(t){return e.isRoleHelpToggled=!e.isRoleHelpToggled}),["prevent"]))},Qt,2),Object(a["createElementVNode"])("div",null,[Object(a["createVNode"])(o,{class:"permissions-for-selector","model-value":e.permissionsForSite,"onUpdate:modelValue":t[10]||(t[10]=function(t){e.onPermissionsForUpdate(t)}),uicontrol:"site","ui-control-attributes":{onlySitesWithAdminAccess:"superuser"!==e.currentUserRole}},null,8,["model-value","ui-control-attributes"])])]),"superuser"===e.currentUserRole?(Object(a["openBlock"])(),Object(a["createElementBlock"])("th",Zt,Object(a["toDisplayString"])(e.translate("UsersManager_Email")),1)):Object(a["createCommentVNode"])("",!0),"superuser"===e.currentUserRole?(Object(a["openBlock"])(),Object(a["createElementBlock"])("th",{key:1,title:e.translate("UsersManager_UsesTwoFactorAuthentication")},Object(a["toDisplayString"])(e.translate("UsersManager_2FA")),9,en)):Object(a["createCommentVNode"])("",!0),"superuser"===e.currentUserRole?(Object(a["openBlock"])(),Object(a["createElementBlock"])("th",tn,Object(a["toDisplayString"])(e.translate("UsersManager_LastSeen")),1)):Object(a["createCommentVNode"])("",!0),Object(a["createElementVNode"])("th",null,Object(a["toDisplayString"])(e.translate("UsersManager_Status")),1),Object(a["createElementVNode"])("th",nn,[Object(a["createElementVNode"])("div",null,Object(a["toDisplayString"])(e.translate("General_Actions")),1)])])]),Object(a["createElementVNode"])("tbody",null,[e.isAllCheckboxSelected&&e.users.length&&e.users.length<e.totalEntries?(Object(a["openBlock"])(),Object(a["createElementBlock"])("tr",sn,[Object(a["createElementVNode"])("td",rn,[e.areAllResultsSelected?Object(a["createCommentVNode"])("",!0):(Object(a["openBlock"])(),Object(a["createElementBlock"])("div",an,[Object(a["createElementVNode"])("span",{innerHTML:e.$sanitize(e.translate("UsersManager_TheDisplayedUsersAreSelected","<strong>".concat(e.users.length,"</strong>"))),style:{"margin-right":"3.5px"}},null,8,on),Object(a["createElementVNode"])("a",{class:"toggle-select-all-in-search",href:"#",onClick:t[11]||(t[11]=Object(a["withModifiers"])((function(t){return e.areAllResultsSelected=!e.areAllResultsSelected}),["prevent"])),innerHTML:e.$sanitize(e.translate("UsersManager_ClickToSelectAll","<strong>".concat(e.totalEntries,"</strong>")))},null,8,ln)])),e.areAllResultsSelected?(Object(a["openBlock"])(),Object(a["createElementBlock"])("div",cn,[Object(a["createElementVNode"])("span",{innerHTML:e.$sanitize(e.translate("UsersManager_AllUsersAreSelected","<strong>".concat(e.totalEntries,"</strong>"))),style:{"margin-right":"3.5px"}},null,8,dn),Object(a["createElementVNode"])("a",{class:"toggle-select-all-in-search",href:"#",onClick:t[12]||(t[12]=Object(a["withModifiers"])((function(t){return e.areAllResultsSelected=!e.areAllResultsSelected}),["prevent"])),innerHTML:e.$sanitize(e.translate("UsersManager_ClickToSelectDisplayedUsers","<strong>".concat(e.users.length,"</strong>")))},null,8,un)])):Object(a["createCommentVNode"])("",!0)])])):Object(a["createCommentVNode"])("",!0),(Object(a["openBlock"])(!0),Object(a["createElementBlock"])(a["Fragment"],null,Object(a["renderList"])(e.users,(function(n,s){return Object(a["openBlock"])(),Object(a["createElementBlock"])("tr",{id:"row".concat(s),key:n.login},[Object(a["createElementVNode"])("td",bn,[Object(a["createElementVNode"])("span",pn,[Object(a["createElementVNode"])("label",null,[Object(a["withDirectives"])(Object(a["createElementVNode"])("input",{type:"checkbox",id:"paged_users_select_row".concat(s),"onUpdate:modelValue":function(t){return e.selectedRows[s]=t},onClick:t[13]||(t[13]=function(t){return e.onRowSelected()})},null,8,gn),[[a["vModelCheckbox"],e.selectedRows[s]]]),fn])])]),Object(a["createElementVNode"])("td",hn,Object(a["toDisplayString"])(n.login),1),Object(a["createElementVNode"])("td",jn,[Object(a["createElementVNode"])("div",null,[Object(a["createVNode"])(o,{"model-value":n.role,"onUpdate:modelValue":function(t){e.userToChange=n,e.roleToChangeTo=t,e.showAccessChangeConfirm()},disabled:"superuser"===n.role,uicontrol:"select",options:"anonymous"!==n.login?e.accessLevels:e.anonymousAccessLevels},null,8,["model-value","onUpdate:modelValue","disabled","options"])])]),"superuser"===e.currentUserRole?(Object(a["openBlock"])(),Object(a["createElementBlock"])("td",On,Object(a["toDisplayString"])(n.email),1)):Object(a["createCommentVNode"])("",!0),"superuser"===e.currentUserRole?(Object(a["openBlock"])(),Object(a["createElementBlock"])("td",vn,[n.uses_2fa?(Object(a["openBlock"])(),Object(a["createElementBlock"])("span",Cn)):Object(a["createCommentVNode"])("",!0),n.uses_2fa?Object(a["createCommentVNode"])("",!0):(Object(a["openBlock"])(),Object(a["createElementBlock"])("span",Nn))])):Object(a["createCommentVNode"])("",!0),"superuser"===e.currentUserRole?(Object(a["openBlock"])(),Object(a["createElementBlock"])("td",Sn,Object(a["toDisplayString"])(n.last_seen?"".concat(n.last_seen," ago"):"-"),1)):Object(a["createCommentVNode"])("",!0),Object(a["createElementVNode"])("td",Un,[Object(a["createElementVNode"])("span",{class:Object(a["normalizeClass"])(Number.isInteger(n.invite_status)?"pending":n.invite_status),title:"expired"===n.invite_status?e.translate("UsersManager_ExpiredInviteAutomaticallyRemoved","3"):""},Object(a["toDisplayString"])(e.getInviteStatus(n.invite_status)),11,yn)]),Object(a["createElementVNode"])("td",En,[("superuser"===e.currentUserRole||"admin"===e.currentUserRole&&n.invited_by===e.currentUserLogin)&&"active"!==n.invite_status?(Object(a["openBlock"])(),Object(a["createElementBlock"])("button",{key:0,class:"resend table-action",title:"Resend Invite",onClick:function(t){e.userToChange=n,e.showResendConfirm()}},An,8,Vn)):Object(a["createCommentVNode"])("",!0),"anonymous"!==n.login?(Object(a["openBlock"])(),Object(a["createElementBlock"])("button",{key:1,class:"edituser table-action",title:"Edit",onClick:function(t){return e.$emit("editUser",{user:n})}},Mn,8,wn)):Object(a["createCommentVNode"])("",!0),("superuser"===e.currentUserRole||"admin"===e.currentUserRole&&n.invited_by===e.currentUserLogin)&&"anonymous"!==n.login?(Object(a["openBlock"])(),Object(a["createElementBlock"])("button",{key:2,class:"deleteuser table-action",title:"Delete",onClick:function(t){e.userToChange=n,e.showDeleteConfirm()}},Dn,8,Bn)):Object(a["createCommentVNode"])("",!0)])],8,mn)})),128))])],2),[[m]])]})),_:1}),Object(a["createElementVNode"])("div",Ln,[Object(a["createElementVNode"])("div",Rn,[e.userToChange?(Object(a["openBlock"])(),Object(a["createElementBlock"])("h3",{key:0,innerHTML:e.$sanitize(e.translate("UsersManager_DeleteUserConfirmSingle","<strong>".concat(e.userToChange.login,"</strong>")))},null,8,xn)):Object(a["createCommentVNode"])("",!0),e.userToChange?Object(a["createCommentVNode"])("",!0):(Object(a["openBlock"])(),Object(a["createElementBlock"])("p",{key:1,innerHTML:e.$sanitize(e.translate("UsersManager_DeleteUserConfirmMultiple","<strong>".concat(e.affectedUsersCount,"</strong>")))},null,8,Pn))]),Object(a["createElementVNode"])("div",Fn,[Object(a["createElementVNode"])("a",{href:"",class:"modal-action modal-close btn",onClick:t[14]||(t[14]=Object(a["withModifiers"])((function(t){return e.deleteRequestedUsers()}),["prevent"])),style:{"margin-right":"3.5px"}},Object(a["toDisplayString"])(e.translate("General_Yes")),1),Object(a["createElementVNode"])("a",{href:"",class:"modal-action modal-close modal-no",onClick:t[15]||(t[15]=Object(a["withModifiers"])((function(t){e.userToChange=null,e.roleToChangeTo=null}),["prevent"]))},Object(a["toDisplayString"])(e.translate("General_No")),1)])],512),Object(a["createElementVNode"])("div",Hn,[Object(a["createElementVNode"])("div",In,[e.userToChange?(Object(a["openBlock"])(),Object(a["createElementBlock"])("h3",{key:0,innerHTML:e.$sanitize(e.deleteUserPermConfirmSingleText)},null,8,Jn)):Object(a["createCommentVNode"])("",!0),e.userToChange&&"anonymous"===e.userToChange.login&&"view"===e.roleToChangeTo?(Object(a["openBlock"])(),Object(a["createElementBlock"])("h3",qn,[Object(a["createElementVNode"])("em",null,[Object(a["createTextVNode"])(Object(a["toDisplayString"])(e.translate("General_Note"))+": ",1),Object(a["createElementVNode"])("span",{innerHTML:e.$sanitize(e.translate("UsersManager_AnonymousUserRoleChangeWarning","anonymous",e.getRoleDisplay(e.roleToChangeTo)))},null,8,$n)])])):Object(a["createCommentVNode"])("",!0),e.userToChange?Object(a["createCommentVNode"])("",!0):(Object(a["openBlock"])(),Object(a["createElementBlock"])("p",{key:2,innerHTML:e.$sanitize(e.deleteUserPermConfirmMultipleText)},null,8,Gn))]),Object(a["createElementVNode"])("div",zn,[Object(a["createElementVNode"])("a",{href:"",class:"modal-action modal-close btn",onClick:t[16]||(t[16]=Object(a["withModifiers"])((function(t){return e.changeUserRole()}),["prevent"])),style:{"margin-right":"3.5px"}},Object(a["toDisplayString"])(e.translate("General_Yes")),1),Object(a["createElementVNode"])("a",{href:"",class:"modal-action modal-close modal-no",onClick:t[17]||(t[17]=Object(a["withModifiers"])((function(t){e.userToChange=null,e.roleToChangeTo=null}),["prevent"]))},Object(a["toDisplayString"])(e.translate("General_No")),1)])],512),Object(a["createElementVNode"])("div",Wn,[Object(a["createElementVNode"])("div",Yn,[e.userToChange?(Object(a["openBlock"])(),Object(a["createElementBlock"])("h3",{key:0,innerHTML:e.$sanitize(e.translate("UsersManager_ResendInviteConfirmSingle","<strong>".concat(e.userToChange.login,"</strong>")))},null,8,Xn)):Object(a["createCommentVNode"])("",!0)]),Object(a["createElementVNode"])("div",Kn,[Object(a["createElementVNode"])("a",{href:"",class:"modal-action modal-close btn",onClick:t[18]||(t[18]=Object(a["withModifiers"])((function(t){return e.resendRequestedUser()}),["prevent"])),style:{"margin-right":"3.5px"}},Object(a["toDisplayString"])(e.translate("General_Yes")),1),Object(a["createElementVNode"])("a",{href:"",class:"modal-action modal-close modal-no",onClick:t[19]||(t[19]=Object(a["withModifiers"])((function(t){e.userToChange=null,e.roleToChangeTo=null}),["prevent"]))},Object(a["toDisplayString"])(e.translate("General_No")),1)])],512)],2)}var Zn=window,es=Zn.$,ts=Object(a["defineComponent"])({props:{initialSiteId:{type:[String,Number],required:!0},initialSiteName:{type:String,required:!0},currentUserRole:String,isLoadingUsers:Boolean,accessLevels:{type:Array,required:!0},filterAccessLevels:{type:Array,required:!0},filterStatusLevels:{type:Array,required:!0},totalEntries:Number,users:{type:Array,required:!0},searchParams:{type:Object,required:!0}},components:{Field:f["Field"],ActivityIndicator:i["ActivityIndicator"],Notification:i["Notification"],ContentBlock:i["ContentBlock"]},directives:{DropdownMenu:i["DropdownMenu"],ContentTable:i["ContentTable"]},data:function(){return{areAllResultsSelected:!1,selectedRows:{},isAllCheckboxSelected:!1,isBulkActionsDisabled:!0,userToChange:null,roleToChangeTo:null,accessLevelFilter:null,statusLevelFilter:null,isRoleHelpToggled:!1,userTextFilter:"",permissionsForSite:{id:this.initialSiteId,name:this.initialSiteName}}},emits:["editUser","changeUserRole","deleteUser","searchChange","resendInvite"],created:function(){this.onUserTextFilterChange=Object(i["debounce"])(this.onUserTextFilterChange,300)},watch:{users:function(){this.clearSelection()}},methods:{getInviteStatus:function(e){return Number.isInteger(e)?Object(i["translate"])("UsersManager_InviteDayLeft",e):"expired"===e?Object(i["translate"])("UsersManager_Expired"):Object(i["translate"])("UsersManager_Active")},onPermissionsForUpdate:function(e){this.permissionsForSite=e,this.changeSearch({idSite:this.permissionsForSite.id})},clearSelection:function(){this.selectedRows={},this.areAllResultsSelected=!1,this.isBulkActionsDisabled=!0,this.isAllCheckboxSelected=!1,this.userToChange=null},onAllCheckboxChange:function(){if(this.isAllCheckboxSelected){for(var e=0;e!==this.users.length;e+=1)this.selectedRows[e]=!0;this.isBulkActionsDisabled=!1}else this.clearSelection()},changeUserRole:function(){this.$emit("changeUserRole",{users:this.userOperationSubject,role:this.roleToChangeTo})},onRowSelected:function(){var e=this;setTimeout((function(){var t=e.selectedCount;e.isBulkActionsDisabled=0===t,e.isAllCheckboxSelected=t===e.users.length}))},deleteRequestedUsers:function(){this.$emit("deleteUser",{users:this.userOperationSubject})},resendRequestedUser:function(){this.$emit("resendInvite",{user:this.userToChange})},showDeleteConfirm:function(){es(this.$refs.deleteUserConfirmModal).modal({dismissible:!1}).modal("open")},showResendConfirm:function(){es(this.$refs.resendInviteConfirmModal).modal({dismissible:!1}).modal("open")},showAccessChangeConfirm:function(){es(this.$refs.changeUserRoleConfirmModal).modal({dismissible:!1}).modal("open")},getRoleDisplay:function(e){var t=null;return this.accessLevels.forEach((function(n){n.key===e&&(t=n.value)})),t},changeSearch:function(e){var t=Object.assign(Object.assign({},this.searchParams),e);this.$emit("searchChange",{params:t})},gotoPreviousPage:function(){this.changeSearch({offset:Math.max(0,this.searchParams.offset-this.searchParams.limit)})},gotoNextPage:function(){var e=this.searchParams.offset+this.searchParams.limit;e>=this.totalEntries||this.changeSearch({offset:e})},onUserTextFilterChange:function(e){this.userTextFilter=e,this.changeSearch({filter_search:e,offset:0})}},computed:{currentUserLogin:function(){return i["Matomo"].userLogin},paginationLowerBound:function(){return this.searchParams.offset+1},paginationUpperBound:function(){if(null===this.totalEntries)return"?";var e=this.searchParams;return Math.min(e.offset+e.limit,this.totalEntries)},userOperationSubject:function(){return this.userToChange?[this.userToChange]:this.areAllResultsSelected?"all":this.selectedUsers},selectedUsers:function(){var e=this,t=this.users,n=[];return Object.keys(this.selectedRows).forEach((function(s){var r=parseInt(s,10);e.selectedRows[s]&&t[r]&&n.push(t[r])})),n},rolesHelpText:function(){var e="https://matomo.org/faq/general/faq_70/",t="https://matomo.org/faq/general/faq_69/";return Object(i["translate"])("UsersManager_RolesHelp",'<a href="'.concat(e,'" target="_blank" rel="noreferrer noopener">'),"</a>",'<a href="'.concat(t,'" target="_blank" rel="noreferrer noopener">'),"</a>")},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","<strong>".concat((null===(e=this.userToChange)||void 0===e?void 0:e.login)||"","</strong>"),"<strong>".concat(this.getRoleDisplay(this.roleToChangeTo),"</strong>"),"<strong>".concat(i["Matomo"].helper.htmlEntities((null===(t=this.permissionsForSite)||void 0===t?void 0:t.name)||""),"</strong>"))},deleteUserPermConfirmMultipleText:function(){var e;return Object(i["translate"])("UsersManager_DeleteUserPermConfirmMultiple","<strong>".concat(this.affectedUsersCount,"</strong>"),"<strong>".concat(this.getRoleDisplay(this.roleToChangeTo),"</strong>"),"<strong>".concat(i["Matomo"].helper.htmlEntities((null===(e=this.permissionsForSite)||void 0===e?void 0:e.name)||""),"</strong>"))},bulkActionAccessLevels:function(){return this.accessLevels.filter((function(e){return"noaccess"!==e.key&&"superuser"!==e.key}))},anonymousAccessLevels:function(){return this.accessLevels.filter((function(e){return"noaccess"===e.key||"view"===e.key}))}}});ts.render=Qn;var ns=ts,ss=(Object(i["createAngularJsAdapter"])({component:ns,scope:{onEditUser:{angularJsBind:"&",vue:"editUser"},onChangeUserRole:{angularJsBind:"&",vue:"changeUserRole"},onDeleteUser:{angularJsBind:"&",vue:"deleteUser"},onSearchChange:{angularJsBind:"&",vue:"searchChange"},onResendInvite:{angularJsBind:"&",vue:"resendInvite"},initialSiteId:{angularJsBind:"<"},initialSiteName:{angularJsBind:"<"},currentUserRole:{angularJsBind:"<"},isLoadingUsers:{angularJsBind:"<"},accessLevels:{angularJsBind:"<"},filterAccessLevels:{angularJsBind:"<"},totalEntries:{angularJsBind:"<"},users:{angularJsBind:"<"},searchParams:{angularJsBind:"<"}},directiveName:"piwikPagedUsersList",restrict:"E"}),{class:"usersManager"}),rs={key:0},is={key:1},as={class:"row add-user-container"},os={class:"col s12"},ls={class:"input-field",style:{"margin-right":"3.5px"}},cs={key:0,class:"input-field"},ds={key:0},us={class:"add-existing-user-modal modal",ref:"addExistingUserModal"},ms={class:"modal-content"},bs={class:"modal-footer"};
/*!
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
- */function ms(e,t,n,s,r,i){var o=Object(a["resolveComponent"])("EnrichedHeadline"),l=Object(a["resolveComponent"])("PagedUsersList"),c=Object(a["resolveComponent"])("UserEditForm"),d=Object(a["resolveComponent"])("Field"),u=Object(a["resolveDirective"])("content-intro"),m=Object(a["resolveDirective"])("tooltips");return Object(a["withDirectives"])((Object(a["openBlock"])(),Object(a["createElementBlock"])("div",ts,[Object(a["withDirectives"])(Object(a["createElementVNode"])("div",null,[Object(a["withDirectives"])(Object(a["createElementVNode"])("div",null,[Object(a["createElementVNode"])("h2",null,[Object(a["createVNode"])(o,{"help-url":"https://matomo.org/docs/manage-users/","feature-name":"Users Management"},{default:Object(a["withCtx"])((function(){return[Object(a["createTextVNode"])(Object(a["toDisplayString"])(e.translate("UsersManager_ManageUsers")),1)]})),_:1})]),"superuser"===e.currentUserRole?(Object(a["openBlock"])(),Object(a["createElementBlock"])("p",ns,Object(a["toDisplayString"])(e.translate("UsersManager_ManageUsersDesc")),1)):Object(a["createCommentVNode"])("",!0),"admin"===e.currentUserRole?(Object(a["openBlock"])(),Object(a["createElementBlock"])("p",ss,Object(a["toDisplayString"])(e.translate("UsersManager_ManageUsersAdminDesc")),1)):Object(a["createCommentVNode"])("",!0),Object(a["createElementVNode"])("div",rs,[Object(a["createElementVNode"])("div",is,[Object(a["createElementVNode"])("div",as,[Object(a["createElementVNode"])("a",{class:"btn add-new-user",onClick:t[0]||(t[0]=function(t){return e.onAddNewUser()})},Object(a["toDisplayString"])(e.translate("UsersManager_InviteNewUser")),1)]),"superuser"!==e.currentUserRole?(Object(a["openBlock"])(),Object(a["createElementBlock"])("div",os,[Object(a["createElementVNode"])("a",{class:"btn add-existing-user",onClick:t[1]||(t[1]=function(t){return e.showAddExistingUserModal()})},Object(a["toDisplayString"])(e.translate("UsersManager_AddExistingUser")),1)])):Object(a["createCommentVNode"])("",!0)])]),Object(a["createVNode"])(l,{onEditUser:t[2]||(t[2]=function(t){return e.onEditUser(t.user)}),onChangeUserRole:t[3]||(t[3]=function(t){return e.onChangeUserRole(t.users,t.role)}),onDeleteUser:t[4]||(t[4]=function(t){return e.onDeleteUser(t.users)}),onSearchChange:t[5]||(t[5]=function(t){e.searchParams=t.params,e.fetchUsers()}),onResendInvite:t[6]||(t[6]=function(t){return e.onResendInvite(t.user)}),"initial-site-id":e.initialSiteId,"initial-site-name":e.initialSiteName,"is-loading-users":e.isLoadingUsers,"current-user-role":e.currentUserRole,"access-levels":e.accessLevels,"filter-access-levels":e.actualFilterAccessLevels,"search-params":e.searchParams,users:e.users,"total-entries":e.totalEntries},null,8,["initial-site-id","initial-site-name","is-loading-users","current-user-role","access-levels","filter-access-levels","search-params","users","total-entries"])],512),[[u]])],512),[[a["vShow"],!e.isEditing]]),e.isEditing?(Object(a["openBlock"])(),Object(a["createElementBlock"])("div",ls,[Object(a["createVNode"])(c,{onDone:t[7]||(t[7]=function(t){return e.onDoneEditing(t.isUserModified)}),user:e.userBeingEdited,"current-user-role":e.currentUserRole,"access-levels":e.accessLevels,"filter-access-levels":e.actualFilterAccessLevels,"initial-site-id":e.initialSiteId,"initial-site-name":e.initialSiteName,onUpdated:t[8]||(t[8]=function(t){return e.userBeingEdited=t.user})},null,8,["user","current-user-role","access-levels","filter-access-levels","initial-site-id","initial-site-name"])])):Object(a["createCommentVNode"])("",!0),Object(a["createElementVNode"])("div",cs,[Object(a["createElementVNode"])("div",ds,[Object(a["createElementVNode"])("h3",null,Object(a["toDisplayString"])(e.translate("UsersManager_AddExistingUser")),1),Object(a["createElementVNode"])("p",null,Object(a["toDisplayString"])(e.translate("UsersManager_EnterUsernameOrEmail"))+":",1),Object(a["createElementVNode"])("div",null,[Object(a["createVNode"])(d,{modelValue:e.addNewUserLoginEmail,"onUpdate:modelValue":t[9]||(t[9]=function(t){return e.addNewUserLoginEmail=t}),name:"add-existing-user-email",uicontrol:"text"},null,8,["modelValue"])])]),Object(a["createElementVNode"])("div",us,[Object(a["createElementVNode"])("a",{href:"",class:"modal-action modal-close btn",onClick:t[10]||(t[10]=Object(a["withModifiers"])((function(t){return e.addExistingUser()}),["prevent"])),style:{"margin-right":"3.5px"}},Object(a["toDisplayString"])(e.translate("General_Add")),1),Object(a["createElementVNode"])("a",{href:"",class:"modal-action modal-close modal-no",onClick:t[11]||(t[11]=Object(a["withModifiers"])((function(t){return e.addNewUserLoginEmail=null}),["prevent"]))},Object(a["toDisplayString"])(e.translate("General_Cancel")),1)])],512)],512)),[[m]])}function bs(e){return fs(e)||hs(e)||gs(e)||ps()}function ps(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function gs(e,t){if(e){if("string"===typeof e)return js(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?js(e,t):void 0}}function hs(e){if("undefined"!==typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}function fs(e){if(Array.isArray(e))return js(e)}function js(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,s=new Array(t);n<t;n++)s[n]=e[n];return s}var Os=20,vs=window,Cs=vs.$,Ns=Object(a["defineComponent"])({props:{currentUserRole:{type:String,required:!0},initialSiteName:{type:String,required:!0},initialSiteId:{type:String,required:!0},accessLevels:{type:Array,required:!0},filterAccessLevels:{type:Array,required:!0}},components:{EnrichedHeadline:i["EnrichedHeadline"],PagedUsersList:es,UserEditForm:yt,Field:h["Field"]},directives:{ContentIntro:i["ContentIntro"],Tooltips:i["Tooltips"]},data:function(){return{isEditing:!!i["MatomoUrl"].urlParsed.value.showadduser,isCurrentUserSuperUser:!0,users:[],totalEntries:null,searchParams:{offset:0,limit:Os,filter_search:"",filter_access:"",idSite:this.initialSiteId},isLoadingUsers:!1,userBeingEdited:null,addNewUserLoginEmail:""}},created:function(){this.fetchUsers()},watch:{limit:function(){this.fetchUsers()}},methods:{onEditUser:function(e){i["Matomo"].helper.lazyScrollToContent(),this.isEditing=!0,this.userBeingEdited=e},onDoneEditing:function(e){this.isEditing=!1,e&&this.fetchUsers()},showAddExistingUserModal:function(){Cs(this.$refs.addExistingUserModal).modal({dismissible:!1}).modal("open")},onChangeUserRole:function(e,t){var n=this;this.isLoadingUsers=!0,Promise.resolve().then((function(){return"all"===e?n.getAllUsersInSearch():e})).then((function(e){return e.filter((function(e){return"superuser"!==e.role})).map((function(e){return e.login}))})).then((function(e){var s=e.map((function(e){return{method:"UsersManager.setUserAccess",userLogin:e,access:t,idSites:n.searchParams.idSite,ignoreSuperusers:1}}));return i["AjaxHelper"].fetch(s,{createErrorNotification:!0})})).catch((function(){})).then((function(){return n.fetchUsers()}))},getAllUsersInSearch:function(){return i["AjaxHelper"].fetch({method:"UsersManager.getUsersPlusRole",filter_search:this.searchParams.filter_search,filter_access:this.searchParams.filter_access,idSite:this.searchParams.idSite,filter_limit:"-1"})},onDeleteUser:function(e){var t=this;this.isLoadingUsers=!0,Promise.resolve().then((function(){return"all"===e?t.getAllUsersInSearch():e})).then((function(e){return e.map((function(e){return e.login}))})).then((function(e){var t=e.map((function(e){return{method:"UsersManager.deleteUser",userLogin:e}}));return i["AjaxHelper"].fetch(t,{createErrorNotification:!0})})).catch((function(){})).then((function(){return t.fetchUsers()}))},onResendInvite:function(e){console.log(e),i["AjaxHelper"].fetch({method:"UsersManager.resendInvite",userLogin:e.login}).then((function(e){console.log(e)}))},fetchUsers:function(){var e=this;return this.isLoadingUsers=!0,i["AjaxHelper"].fetch(Object.assign(Object.assign({},this.searchParams),{},{method:"UsersManager.getUsersPlusRole"}),{returnResponseObject:!0}).then((function(t){var n=t.getRequestHandle();e.totalEntries=parseInt(n.getResponseHeader("x-matomo-total-results")||"0",10),e.users=n.responseJSON,e.isLoadingUsers=!1})).catch((function(){e.isLoadingUsers=!1}))},addExistingUser:function(){var e=this;return this.isLoadingUsers=!0,i["AjaxHelper"].fetch({method:"UsersManager.userExists",userLogin:this.addNewUserLoginEmail}).then((function(t){return t&&t.value?e.addNewUserLoginEmail:i["AjaxHelper"].fetch({method:"UsersManager.getUserLoginFromUserEmail",userEmail:e.addNewUserLoginEmail}).then((function(e){return e.value}))})).then((function(t){return i["AjaxHelper"].post({method:"UsersManager.setUserAccess"},{userLogin:t,access:"view",idSites:e.searchParams.idSite})})).then((function(){return e.fetchUsers()})).catch((function(){e.isLoadingUsers=!1}))},onAddNewUser:function(){var e={isAllowed:!0};i["Matomo"].postEvent("UsersManager.initAddUser",e),e&&!e.isAllowed||(this.isEditing=!0,this.userBeingEdited=null)}},computed:{actualFilterAccessLevels:function(){return"superuser"===this.currentUserRole?[].concat(bs(this.filterAccessLevels),[{key:"superuser",value:"Superuser"}]):this.filterAccessLevels}}});Ns.render=ms;var Ss=Ns,Us=(Object(i["createAngularJsAdapter"])({component:Ss,scope:{currentUserRole:{angularJsBind:"<"},initialSiteName:{angularJsBind:"@"},initialSiteId:{angularJsBind:"@"},accessLevels:{angularJsBind:"<"},filterAccessLevels:{angularJsBind:"<"}},directiveName:"piwikUsersManager",restrict:"E"}),{key:0,class:"alert alert-info"}),ys={key:1};
+ */function ps(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",ss,[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",rs,Object(a["toDisplayString"])(e.translate("UsersManager_ManageUsersDesc")),1)):Object(a["createCommentVNode"])("",!0),"admin"===e.currentUserRole?(Object(a["openBlock"])(),Object(a["createElementBlock"])("p",is,Object(a["toDisplayString"])(e.translate("UsersManager_ManageUsersAdminDesc")),1)):Object(a["createCommentVNode"])("",!0),Object(a["createElementVNode"])("div",as,[Object(a["createElementVNode"])("div",os,[Object(a["createElementVNode"])("div",ls,[Object(a["createElementVNode"])("a",{class:"btn add-new-user",onClick:t[0]||(t[0]=function(t){return e.onAddNewUser()})},Object(a["toDisplayString"])(e.translate("UsersManager_InviteNewUser")),1)]),"superuser"!==e.currentUserRole?(Object(a["openBlock"])(),Object(a["createElementBlock"])("div",cs,[Object(a["createElementVNode"])("a",{class:"btn add-existing-user",onClick:t[1]||(t[1]=function(t){return e.showAddExistingUserModal()})},Object(a["toDisplayString"])(e.translate("UsersManager_AddExistingUser")),1)])):Object(a["createCommentVNode"])("",!0)])]),Object(a["createVNode"])(l,{onEditUser:t[2]||(t[2]=function(t){return e.onEditUser(t.user)}),onChangeUserRole:t[3]||(t[3]=function(t){return e.onChangeUserRole(t.users,t.role)}),onDeleteUser:t[4]||(t[4]=function(t){return e.onDeleteUser(t.users)}),onSearchChange:t[5]||(t[5]=function(t){e.searchParams=t.params,e.fetchUsers()}),onResendInvite:t[6]||(t[6]=function(t){return e.onResendInvite(t.user)}),"initial-site-id":e.initialSiteId,"initial-site-name":e.initialSiteName,"is-loading-users":e.isLoadingUsers,"current-user-role":e.currentUserRole,"access-levels":e.accessLevels,"filter-access-levels":e.actualFilterAccessLevels,"filter-status-levels":e.filterStatusLevels,"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","filter-status-levels","search-params","users","total-entries"])],512),[[u]])],512),[[a["vShow"],!e.isEditing]]),e.isEditing?(Object(a["openBlock"])(),Object(a["createElementBlock"])("div",ds,[Object(a["createVNode"])(c,{onDone:t[7]||(t[7]=function(t){return e.onDoneEditing(t.isUserModified)}),user:e.userBeingEdited,"current-user-role":e.currentUserRole,"access-levels":e.accessLevels,"filter-access-levels":e.actualFilterAccessLevels,"initial-site-id":e.initialSiteId,"initial-site-name":e.initialSiteName,onUpdated:t[8]||(t[8]=function(t){return e.userBeingEdited=t.user})},null,8,["user","current-user-role","access-levels","filter-access-levels","initial-site-id","initial-site-name"])])):Object(a["createCommentVNode"])("",!0),Object(a["createElementVNode"])("div",us,[Object(a["createElementVNode"])("div",ms,[Object(a["createElementVNode"])("h3",null,Object(a["toDisplayString"])(e.translate("UsersManager_AddExistingUser")),1),Object(a["createElementVNode"])("p",null,Object(a["toDisplayString"])(e.translate("UsersManager_EnterUsernameOrEmail"))+":",1),Object(a["createElementVNode"])("div",null,[Object(a["createVNode"])(d,{modelValue:e.addNewUserLoginEmail,"onUpdate:modelValue":t[9]||(t[9]=function(t){return e.addNewUserLoginEmail=t}),name:"add-existing-user-email",uicontrol:"text"},null,8,["modelValue"])])]),Object(a["createElementVNode"])("div",bs,[Object(a["createElementVNode"])("a",{href:"",class:"modal-action modal-close btn",onClick:t[10]||(t[10]=Object(a["withModifiers"])((function(t){return e.addExistingUser()}),["prevent"])),style:{"margin-right":"3.5px"}},Object(a["toDisplayString"])(e.translate("General_Add")),1),Object(a["createElementVNode"])("a",{href:"",class:"modal-action modal-close modal-no",onClick:t[11]||(t[11]=Object(a["withModifiers"])((function(t){return e.addNewUserLoginEmail=null}),["prevent"]))},Object(a["toDisplayString"])(e.translate("General_Cancel")),1)])],512)],512)),[[m]])}function gs(e){return Os(e)||js(e)||hs(e)||fs()}function fs(){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 hs(e,t){if(e){if("string"===typeof e)return vs(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)?vs(e,t):void 0}}function js(e){if("undefined"!==typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}function Os(e){if(Array.isArray(e))return vs(e)}function vs(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,s=new Array(t);n<t;n++)s[n]=e[n];return s}var Cs=20,Ns=window,Ss=Ns.$,Us=Object(a["defineComponent"])({props:{currentUserRole:{type:String,required:!0},initialSiteName:{type:String,required:!0},initialSiteId:{type:String,required:!0},accessLevels:{type:Array,required:!0},filterAccessLevels:{type:Array,required:!0},filterStatusLevels:{type:Array,required:!0}},components:{EnrichedHeadline:i["EnrichedHeadline"],PagedUsersList:ns,UserEditForm:yt,Field:f["Field"]},directives:{ContentIntro:i["ContentIntro"],Tooltips:i["Tooltips"]},data:function(){return{isEditing:!!i["MatomoUrl"].urlParsed.value.showadduser,isCurrentUserSuperUser:!0,users:[],totalEntries:null,searchParams:{offset:0,limit:Cs,filter_search:"",filter_access:"",filter_status:"",idSite:this.initialSiteId},isLoadingUsers:!1,userBeingEdited:null,addNewUserLoginEmail:""}},created:function(){this.fetchUsers()},watch:{limit:function(){this.fetchUsers()}},methods:{onEditUser:function(e){i["Matomo"].helper.lazyScrollToContent(),this.isEditing=!0,this.userBeingEdited=e},onDoneEditing:function(e){this.isEditing=!1,e&&this.fetchUsers()},showAddExistingUserModal:function(){Ss(this.$refs.addExistingUserModal).modal({dismissible:!1}).modal("open")},onChangeUserRole:function(e,t){var n=this;this.isLoadingUsers=!0,Promise.resolve().then((function(){return"all"===e?n.getAllUsersInSearch():e})).then((function(e){return e.filter((function(e){return"superuser"!==e.role})).map((function(e){return e.login}))})).then((function(e){var s=e.map((function(e){return{method:"UsersManager.setUserAccess",userLogin:e,access:t,idSites:n.searchParams.idSite,ignoreSuperusers:1}}));return i["AjaxHelper"].fetch(s,{createErrorNotification:!0})})).catch((function(){})).then((function(){return n.fetchUsers()}))},getAllUsersInSearch:function(){return i["AjaxHelper"].fetch({method:"UsersManager.getUsersPlusRole",filter_search:this.searchParams.filter_search,filter_access:this.searchParams.filter_access,filter_status:this.searchParams.filter_status,idSite:this.searchParams.idSite,filter_limit:"-1"})},onDeleteUser:function(e){var t=this;this.isLoadingUsers=!0,Promise.resolve().then((function(){return"all"===e?t.getAllUsersInSearch():e})).then((function(e){return e.map((function(e){return e.login}))})).then((function(e){var t=e.map((function(e){return{method:"UsersManager.deleteUser",userLogin:e}}));return i["AjaxHelper"].fetch(t,{createErrorNotification:!0})})).catch((function(){})).then((function(){return t.fetchUsers()}))},onResendInvite:function(e){var t=this;i["AjaxHelper"].fetch({method:"UsersManager.resendInvite",userLogin:e.login}).then((function(){t.fetchUsers();var n=i["NotificationsStore"].show({message:Object(i["translate"])("UsersManager_ResendInviteSuccess",e.login),id:"resendinvite",context:"success",type:"transient"});i["NotificationsStore"].scrollToNotification(n)}))},fetchUsers:function(){var e=this;return this.isLoadingUsers=!0,i["AjaxHelper"].fetch(Object.assign(Object.assign({},this.searchParams),{},{method:"UsersManager.getUsersPlusRole"}),{returnResponseObject:!0}).then((function(t){var n=t.getRequestHandle();e.totalEntries=parseInt(n.getResponseHeader("x-matomo-total-results")||"0",10),e.users=n.responseJSON,e.isLoadingUsers=!1})).catch((function(){e.isLoadingUsers=!1}))},addExistingUser:function(){var e=this;return this.isLoadingUsers=!0,i["AjaxHelper"].fetch({method:"UsersManager.userExists",userLogin:this.addNewUserLoginEmail}).then((function(t){return t&&t.value?e.addNewUserLoginEmail:i["AjaxHelper"].fetch({method:"UsersManager.getUserLoginFromUserEmail",userEmail:e.addNewUserLoginEmail}).then((function(e){return e.value}))})).then((function(t){return i["AjaxHelper"].post({method:"UsersManager.setUserAccess"},{userLogin:t,access:"view",idSites:e.searchParams.idSite})})).then((function(){return e.fetchUsers()})).catch((function(){e.isLoadingUsers=!1}))},onAddNewUser:function(){var e={isAllowed:!0};i["Matomo"].postEvent("UsersManager.initAddUser",e),e&&!e.isAllowed||(this.isEditing=!0,this.userBeingEdited=null)}},computed:{actualFilterAccessLevels:function(){return"superuser"===this.currentUserRole?[].concat(gs(this.filterAccessLevels),[{key:"superuser",value:"Superuser"}]):this.filterAccessLevels}}});Us.render=ps;var ys=Us,Es=(Object(i["createAngularJsAdapter"])({component:ys,scope:{currentUserRole:{angularJsBind:"<"},initialSiteName:{angularJsBind:"@"},initialSiteId:{angularJsBind:"@"},accessLevels:{angularJsBind:"<"},filterAccessLevels:{angularJsBind:"<"},filterStatusLevels:{angularJsBind:"<"}},directiveName:"piwikUsersManager",restrict:"E"}),{key:0,class:"alert alert-info"}),Vs={key:1};
/*!
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
- */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"});
+ */function ks(e,t,n,s,r,i){var o=Object(a["resolveComponent"])("Field"),l=Object(a["resolveComponent"])("SaveButton"),c=Object(a["resolveComponent"])("ContentBlock"),d=Object(a["resolveDirective"])("form");return Object(a["openBlock"])(),Object(a["createBlock"])(c,{"content-title":e.title},{default:Object(a["withCtx"])((function(){return[0===e.anonymousSites.length?(Object(a["openBlock"])(),Object(a["createElementBlock"])("div",Es,Object(a["toDisplayString"])(e.translate("UsersManager_NoteNoAnonymousUserAccessSettingsWontBeUsed2")),1)):Object(a["createCommentVNode"])("",!0),e.anonymousSites.length>0?Object(a["withDirectives"])((Object(a["openBlock"])(),Object(a["createElementBlock"])("div",Vs,[Object(a["createElementVNode"])("div",null,[Object(a["createVNode"])(o,{uicontrol:"radio",name:"anonymousDefaultReport",modelValue:e.defaultReport,"onUpdate:modelValue":t[0]||(t[0]=function(t){return e.defaultReport=t}),introduction:e.translate("UsersManager_WhenUsersAreNotLoggedInAndVisitPiwikTheyShouldAccess"),options:e.defaultReportOptions},null,8,["modelValue","introduction","options"])]),Object(a["createElementVNode"])("div",null,[Object(a["createVNode"])(o,{uicontrol:"select",name:"anonymousDefaultReportWebsite",modelValue:e.defaultReportWebsite,"onUpdate:modelValue":t[1]||(t[1]=function(t){return e.defaultReportWebsite=t}),options:e.anonymousSites},null,8,["modelValue","options"])]),Object(a["createElementVNode"])("div",null,[Object(a["createVNode"])(o,{uicontrol:"radio",name:"anonymousDefaultDate",modelValue:e.defaultDate,"onUpdate:modelValue":t[2]||(t[2]=function(t){return e.defaultDate=t}),introduction:e.translate("UsersManager_ForAnonymousUsersReportDateToLoadByDefault"),options:e.availableDefaultDates},null,8,["modelValue","introduction","options"])]),Object(a["createVNode"])(l,{saving:e.loading,onConfirm:t[3]||(t[3]=function(t){return e.save()})},null,8,["saving"])],512)),[[d]]):Object(a["createCommentVNode"])("",!0)]})),_:1},8,["content-title"])}var As=Object(a["defineComponent"])({props:{title:{type:String,required:!0},anonymousSites:{type:Array,required:!0},anonymousDefaultReport:{type:[String,Number],required:!0},anonymousDefaultSite:{type:String,required:!0},anonymousDefaultDate:{type:String,required:!0},availableDefaultDates:{type:Object,required:!0},defaultReportOptions:{type:Object,required:!0}},components:{ContentBlock:i["ContentBlock"],SaveButton:f["SaveButton"],Field:f["Field"]},directives:{Form:f["Form"]},data:function(){return{loading:!1,defaultReport:"".concat(this.anonymousDefaultReport),defaultReportWebsite:this.anonymousDefaultSite,defaultDate:this.anonymousDefaultDate}},methods:{save:function(){var e=this,t={anonymousDefaultReport:"1"===this.defaultReport?this.defaultReportWebsite:this.defaultReport,anonymousDefaultDate:this.defaultDate};this.loading=!0,i["AjaxHelper"].post({module:"UsersManager",action:"recordAnonymousUserSettings",format:"json"},t,{withTokenInUrl:!0}).then((function(){var e=i["NotificationsStore"].show({message:Object(i["translate"])("CoreAdminHome_SettingsSaveSuccess"),id:"anonymousUserSettings",context:"success",type:"transient"});i["NotificationsStore"].scrollToNotification(e)})).finally((function(){e.loading=!1}))}}});As.render=ks;var ws=As,Ts=(Object(i["createAngularJsAdapter"])({component:ws,scope:{title:{angularJsBind:"<"},anonymousSites:{angularJsBind:"<"},anonymousDefaultReport:{angularJsBind:"<"},anonymousDefaultSite:{angularJsBind:"<"},anonymousDefaultDate:{angularJsBind:"<"},availableDefaultDates:{angularJsBind:"<"},defaultReportOptions:{angularJsBind:"<"}},directiveName:"matomoAnonymousSettings"}),{id:"newsletterSignup"});
/*!
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
- */function ws(e,t,n,s,r,i){var o=Object(a["resolveComponent"])("Field"),l=Object(a["resolveComponent"])("SaveButton"),c=Object(a["resolveComponent"])("ContentBlock");return Object(a["withDirectives"])((Object(a["openBlock"])(),Object(a["createElementBlock"])("div",As,[Object(a["createVNode"])(c,{"content-title":e.translate("UsersManager_NewsletterSignupTitle")},{default:Object(a["withCtx"])((function(){return[Object(a["createElementVNode"])("div",null,[Object(a["createVNode"])(o,{uicontrol:"checkbox",name:"newsletterSignupCheckbox",id:"newsletterSignupCheckbox",modelValue:e.newsletterSignupCheckbox,"onUpdate:modelValue":t[0]||(t[0]=function(t){return e.newsletterSignupCheckbox=t}),"full-width":!0,title:e.signupTitleText},null,8,["modelValue","title"])]),Object(a["createVNode"])(l,{id:"newsletterSignupBtn",onConfirm:t[1]||(t[1]=function(t){return e.signupForNewsletter()}),disabled:!e.newsletterSignupCheckbox,value:e.newsletterSignupButtonTitle,saving:e.isProcessingNewsletterSignup},null,8,["disabled","value","saving"])]})),_:1},8,["content-title"])],512)),[[a["vShow"],e.showNewsletterSignup]])}var Ts=Object(a["defineComponent"])({data:function(){return{showNewsletterSignup:!0,newsletterSignupCheckbox:!1,isProcessingNewsletterSignup:!1,newsletterSignupButtonTitle:Object(i["translate"])("General_Save")}},components:{ContentBlock:i["ContentBlock"],SaveButton:h["SaveButton"],Field:h["Field"]},computed:{signupTitleText:function(){return Object(i["translate"])("UsersManager_NewsletterSignupMessage",'<a href="https://matomo.org/privacy-policy/" target="_blank">',"</a>")}},methods:{signupForNewsletter:function(){var e=this;this.newsletterSignupButtonTitle=Object(i["translate"])("General_Loading"),this.isProcessingNewsletterSignup=!0,i["AjaxHelper"].fetch({module:"API",method:"UsersManager.newsletterSignup"},{withTokenInUrl:!0}).then((function(){e.isProcessingNewsletterSignup=!1,e.showNewsletterSignup=!1;var t=i["NotificationsStore"].show({message:Object(i["translate"])("UsersManager_NewsletterSignupSuccessMessage"),id:"newslettersignup",context:"success",type:"transient"});i["NotificationsStore"].scrollToNotification(t)})).catch((function(){e.isProcessingNewsletterSignup=!1;var t=i["NotificationsStore"].show({message:Object(i["translate"])("UsersManager_NewsletterSignupFailureMessage"),id:"newslettersignup",context:"error",type:"transient"});i["NotificationsStore"].scrollToNotification(t),e.newsletterSignupButtonTitle=Object(i["translate"])("General_PleaseTryAgain")}))}}});Ts.render=ws;var Ms=Ts,Bs=(Object(i["createAngularJsAdapter"])({component:Ms,scope:{},directiveName:"matomoNewsletterSettings"}),{id:"userSettingsTable"}),_s={key:0},Ds={id:"languageHelp",class:"inline-help-node"},Ls={target:"_blank",rel:"noreferrer noopener",href:"https://matomo.org/translations/"},Rs={class:"sites_autocomplete"},xs={class:"modal",id:"confirmChangesWithPassword",ref:"confirmChangesWithPasswordModal"},Ps={class:"modal-content"},Hs={class:"modal-footer"};
+ */function Ms(e,t,n,s,r,i){var o=Object(a["resolveComponent"])("Field"),l=Object(a["resolveComponent"])("SaveButton"),c=Object(a["resolveComponent"])("ContentBlock");return Object(a["withDirectives"])((Object(a["openBlock"])(),Object(a["createElementBlock"])("div",Ts,[Object(a["createVNode"])(c,{"content-title":e.translate("UsersManager_NewsletterSignupTitle")},{default:Object(a["withCtx"])((function(){return[Object(a["createElementVNode"])("div",null,[Object(a["createVNode"])(o,{uicontrol:"checkbox",name:"newsletterSignupCheckbox",id:"newsletterSignupCheckbox",modelValue:e.newsletterSignupCheckbox,"onUpdate:modelValue":t[0]||(t[0]=function(t){return e.newsletterSignupCheckbox=t}),"full-width":!0,title:e.signupTitleText},null,8,["modelValue","title"])]),Object(a["createVNode"])(l,{id:"newsletterSignupBtn",onConfirm:t[1]||(t[1]=function(t){return e.signupForNewsletter()}),disabled:!e.newsletterSignupCheckbox,value:e.newsletterSignupButtonTitle,saving:e.isProcessingNewsletterSignup},null,8,["disabled","value","saving"])]})),_:1},8,["content-title"])],512)),[[a["vShow"],e.showNewsletterSignup]])}var Bs=Object(a["defineComponent"])({data:function(){return{showNewsletterSignup:!0,newsletterSignupCheckbox:!1,isProcessingNewsletterSignup:!1,newsletterSignupButtonTitle:Object(i["translate"])("General_Save")}},components:{ContentBlock:i["ContentBlock"],SaveButton:f["SaveButton"],Field:f["Field"]},computed:{signupTitleText:function(){return Object(i["translate"])("UsersManager_NewsletterSignupMessage",'<a href="https://matomo.org/privacy-policy/" target="_blank">',"</a>")}},methods:{signupForNewsletter:function(){var e=this;this.newsletterSignupButtonTitle=Object(i["translate"])("General_Loading"),this.isProcessingNewsletterSignup=!0,i["AjaxHelper"].fetch({module:"API",method:"UsersManager.newsletterSignup"},{withTokenInUrl:!0}).then((function(){e.isProcessingNewsletterSignup=!1,e.showNewsletterSignup=!1;var t=i["NotificationsStore"].show({message:Object(i["translate"])("UsersManager_NewsletterSignupSuccessMessage"),id:"newslettersignup",context:"success",type:"transient"});i["NotificationsStore"].scrollToNotification(t)})).catch((function(){e.isProcessingNewsletterSignup=!1;var t=i["NotificationsStore"].show({message:Object(i["translate"])("UsersManager_NewsletterSignupFailureMessage"),id:"newslettersignup",context:"error",type:"transient"});i["NotificationsStore"].scrollToNotification(t),e.newsletterSignupButtonTitle=Object(i["translate"])("General_PleaseTryAgain")}))}}});Bs.render=Ms;var _s=Bs,Ds=(Object(i["createAngularJsAdapter"])({component:_s,scope:{},directiveName:"matomoNewsletterSettings"}),{id:"userSettingsTable"}),Ls={key:0},Rs={id:"languageHelp",class:"inline-help-node"},xs={target:"_blank",rel:"noreferrer noopener",href:"https://matomo.org/translations/"},Ps={class:"sites_autocomplete"},Fs={class:"modal",id:"confirmChangesWithPassword",ref:"confirmChangesWithPasswordModal"},Hs={class:"modal-content"},Is={class:"modal-footer"};
/*!
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
- */function Fs(e,t,n,s,r,i){var o=Object(a["resolveComponent"])("Field"),l=Object(a["resolveComponent"])("SiteSelector"),c=Object(a["resolveComponent"])("SaveButton"),d=Object(a["resolveComponent"])("ContentBlock"),u=Object(a["resolveDirective"])("form");return Object(a["openBlock"])(),Object(a["createBlock"])(d,{"content-title":e.title,feature:"true"},{default:Object(a["withCtx"])((function(){return[Object(a["withDirectives"])(Object(a["createElementVNode"])("form",Bs,[Object(a["createElementVNode"])("div",null,[Object(a["createVNode"])(o,{uicontrol:"text",name:"username",title:e.translate("General_Username"),disabled:!0,modelValue:e.username,"onUpdate:modelValue":t[0]||(t[0]=function(t){return e.username=t}),"inline-help":e.translate("UsersManager_YourUsernameCannotBeChanged")},null,8,["title","modelValue","inline-help"])]),e.isUsersAdminEnabled?(Object(a["openBlock"])(),Object(a["createElementBlock"])("div",_s,[Object(a["createVNode"])(o,{uicontrol:"text",name:"email","model-value":e.email,"onUpdate:modelValue":t[1]||(t[1]=function(t){e.email=t,e.doesRequirePasswordConfirmation=!0}),maxlength:100,title:e.translate("UsersManager_Email")},null,8,["model-value","title"])])):Object(a["createCommentVNode"])("",!0),Object(a["createElementVNode"])("div",Ds,[Object(a["createElementVNode"])("a",Ls,Object(a["toDisplayString"])(e.translate("LanguagesManager_AboutPiwikTranslations")),1)]),Object(a["createElementVNode"])("div",null,[Object(a["createVNode"])(o,{uicontrol:"select",name:"language",modelValue:e.language,"onUpdate:modelValue":t[2]||(t[2]=function(t){return e.language=t}),title:e.translate("General_Language"),options:e.languageOptions,"inline-help":"#languageHelp"},null,8,["modelValue","title","options"])]),Object(a["createElementVNode"])("div",null,[Object(a["createVNode"])(o,{uicontrol:"select",name:"timeformat",modelValue:e.timeformat,"onUpdate:modelValue":t[3]||(t[3]=function(t){return e.timeformat=t}),title:e.translate("General_TimeFormat"),options:e.timeFormats},null,8,["modelValue","title","options"])]),Object(a["createElementVNode"])("div",null,[Object(a["createVNode"])(o,{uicontrol:"radio",name:"defaultReport",modelValue:e.theDefaultReport,"onUpdate:modelValue":t[4]||(t[4]=function(t){return e.theDefaultReport=t}),introduction:e.translate("UsersManager_ReportToLoadByDefault"),title:e.translate("General_AllWebsitesDashboard"),options:e.defaultReportOptions},null,8,["modelValue","introduction","title","options"])]),Object(a["createElementVNode"])("div",Rs,[Object(a["createVNode"])(l,{modelValue:e.site,"onUpdate:modelValue":t[5]||(t[5]=function(t){return e.site=t}),"show-selected-site":!0,"switch-site-on-select":!1,"show-all-sites-item":!1,showselectedsite:!0,id:"defaultReportSiteSelector"},null,8,["modelValue"])]),Object(a["createElementVNode"])("div",null,[Object(a["createVNode"])(o,{uicontrol:"radio",name:"defaultDate",modelValue:e.theDefaultDate,"onUpdate:modelValue":t[6]||(t[6]=function(t){return e.theDefaultDate=t}),introduction:e.translate("UsersManager_ReportDateToLoadByDefault"),options:e.availableDefaultDates},null,8,["modelValue","introduction","options"])]),Object(a["createVNode"])(c,{onConfirm:t[7]||(t[7]=function(t){return e.save()}),saving:e.loading},null,8,["saving"]),Object(a["createElementVNode"])("div",xs,[Object(a["createElementVNode"])("div",Ps,[Object(a["createElementVNode"])("h2",null,Object(a["toDisplayString"])(e.translate("UsersManager_ConfirmWithPassword")),1),Object(a["createElementVNode"])("div",null,[Object(a["createVNode"])(o,{uicontrol:"password",name:"currentPassword",autocomplete:!1,modelValue:e.passwordCurrent,"onUpdate:modelValue":t[8]||(t[8]=function(t){return e.passwordCurrent=t}),"full-width":!0,title:e.translate("UsersManager_YourCurrentPassword")},null,8,["modelValue","title"])])]),Object(a["createElementVNode"])("div",Hs,[Object(a["createElementVNode"])("a",{href:"",class:"modal-action btn",onClick:t[9]||(t[9]=Object(a["withModifiers"])((function(t){return e.save()}),["prevent"])),style:{"margin-right":"3.5px"}},Object(a["toDisplayString"])(e.translate("General_Ok")),1),Object(a["createElementVNode"])("a",{href:"",class:"modal-action modal-close modal-no",onClick:t[10]||(t[10]=Object(a["withModifiers"])((function(t){return e.passwordCurrent=""}),["prevent"]))},Object(a["toDisplayString"])(e.translate("General_Cancel")),1)])],512)],512),[[u]])]})),_:1},8,["content-title"])}var Is=window,Js=Is.$,qs=Object(a["defineComponent"])({props:{isUsersAdminEnabled:{type:Boolean,required:!0},title:{type:String,required:!0},userLogin:{type:String,required:!0},userEmail:{type:String,required:!0},currentLanguageCode:{type:String,required:!0},languageOptions:{type:Object,required:!0},currentTimeformat:{type:Number,required:!0},timeFormats:{type:Object,required:!0},defaultReport:{type:[String,Number],required:!0},defaultReportOptions:{type:Object,required:!0},defaultReportIdSite:{type:[String,Number],required:!0},defaultReportSiteName:{type:String,required:!0},defaultDate:{type:String,required:!0},availableDefaultDates:{type:Object,required:!0}},components:{ContentBlock:i["ContentBlock"],SaveButton:h["SaveButton"],Field:h["Field"],SiteSelector:i["SiteSelector"]},directives:{Form:h["Form"]},data:function(){return{doesRequirePasswordConfirmation:!1,username:this.userLogin,email:this.userEmail,language:this.currentLanguageCode,timeformat:this.currentTimeformat,theDefaultReport:this.defaultReport,site:{id:this.defaultReportIdSite,name:i["Matomo"].helper.htmlDecode(this.defaultReportSiteName)},theDefaultDate:this.defaultDate,loading:!1,passwordCurrent:""}},methods:{save:function(){var e=this;if(!this.doesRequirePasswordConfirmation||this.passwordCurrent){var t=M.Modal.getInstance(this.$refs.confirmChangesWithPasswordModal);t&&t.close();var n={email:this.email,defaultReport:"MultiSites"===this.theDefaultReport?this.theDefaultReport:this.site.id,defaultDate:this.theDefaultDate,language:this.language,timeformat:this.timeformat};this.passwordCurrent&&(n.passwordConfirmation=this.passwordCurrent),this.loading=!0,i["AjaxHelper"].post({module:"UsersManager",action:"recordUserSettings",format:"json"},n,{withTokenInUrl:!0}).then((function(){var t=i["NotificationsStore"].show({message:Object(i["translate"])("CoreAdminHome_SettingsSaveSuccess"),id:"PersonalSettingsSuccess",context:"success",type:"transient"});i["NotificationsStore"].scrollToNotification(t),e.doesRequirePasswordConfirmation=!1,e.passwordCurrent="",e.loading=!1})).catch((function(){e.loading=!1,e.passwordCurrent=""}))}else Js(this.$refs.confirmChangesWithPasswordModal).modal({dismissible:!1,ready:function(){Js(".modal.open #currentPassword").focus()}}).modal("open")}}});qs.render=Fs;var $s=qs;
+ */function Js(e,t,n,s,r,i){var o=Object(a["resolveComponent"])("Field"),l=Object(a["resolveComponent"])("SiteSelector"),c=Object(a["resolveComponent"])("SaveButton"),d=Object(a["resolveComponent"])("ContentBlock"),u=Object(a["resolveDirective"])("form");return Object(a["openBlock"])(),Object(a["createBlock"])(d,{"content-title":e.title,feature:"true"},{default:Object(a["withCtx"])((function(){return[Object(a["withDirectives"])(Object(a["createElementVNode"])("form",Ds,[Object(a["createElementVNode"])("div",null,[Object(a["createVNode"])(o,{uicontrol:"text",name:"username",title:e.translate("General_Username"),disabled:!0,modelValue:e.username,"onUpdate:modelValue":t[0]||(t[0]=function(t){return e.username=t}),"inline-help":e.translate("UsersManager_YourUsernameCannotBeChanged")},null,8,["title","modelValue","inline-help"])]),e.isUsersAdminEnabled?(Object(a["openBlock"])(),Object(a["createElementBlock"])("div",Ls,[Object(a["createVNode"])(o,{uicontrol:"text",name:"email","model-value":e.email,"onUpdate:modelValue":t[1]||(t[1]=function(t){e.email=t,e.doesRequirePasswordConfirmation=!0}),maxlength:100,title:e.translate("UsersManager_Email")},null,8,["model-value","title"])])):Object(a["createCommentVNode"])("",!0),Object(a["createElementVNode"])("div",Rs,[Object(a["createElementVNode"])("a",xs,Object(a["toDisplayString"])(e.translate("LanguagesManager_AboutPiwikTranslations")),1)]),Object(a["createElementVNode"])("div",null,[Object(a["createVNode"])(o,{uicontrol:"select",name:"language",modelValue:e.language,"onUpdate:modelValue":t[2]||(t[2]=function(t){return e.language=t}),title:e.translate("General_Language"),options:e.languageOptions,"inline-help":"#languageHelp"},null,8,["modelValue","title","options"])]),Object(a["createElementVNode"])("div",null,[Object(a["createVNode"])(o,{uicontrol:"select",name:"timeformat",modelValue:e.timeformat,"onUpdate:modelValue":t[3]||(t[3]=function(t){return e.timeformat=t}),title:e.translate("General_TimeFormat"),options:e.timeFormats},null,8,["modelValue","title","options"])]),Object(a["createElementVNode"])("div",null,[Object(a["createVNode"])(o,{uicontrol:"radio",name:"defaultReport",modelValue:e.theDefaultReport,"onUpdate:modelValue":t[4]||(t[4]=function(t){return e.theDefaultReport=t}),introduction:e.translate("UsersManager_ReportToLoadByDefault"),title:e.translate("General_AllWebsitesDashboard"),options:e.defaultReportOptions},null,8,["modelValue","introduction","title","options"])]),Object(a["createElementVNode"])("div",Ps,[Object(a["createVNode"])(l,{modelValue:e.site,"onUpdate:modelValue":t[5]||(t[5]=function(t){return e.site=t}),"show-selected-site":!0,"switch-site-on-select":!1,"show-all-sites-item":!1,showselectedsite:!0,id:"defaultReportSiteSelector"},null,8,["modelValue"])]),Object(a["createElementVNode"])("div",null,[Object(a["createVNode"])(o,{uicontrol:"radio",name:"defaultDate",modelValue:e.theDefaultDate,"onUpdate:modelValue":t[6]||(t[6]=function(t){return e.theDefaultDate=t}),introduction:e.translate("UsersManager_ReportDateToLoadByDefault"),options:e.availableDefaultDates},null,8,["modelValue","introduction","options"])]),Object(a["createVNode"])(c,{onConfirm:t[7]||(t[7]=function(t){return e.save()}),saving:e.loading},null,8,["saving"]),Object(a["createElementVNode"])("div",Fs,[Object(a["createElementVNode"])("div",Hs,[Object(a["createElementVNode"])("h2",null,Object(a["toDisplayString"])(e.translate("UsersManager_ConfirmWithPassword")),1),Object(a["createElementVNode"])("div",null,[Object(a["createVNode"])(o,{uicontrol:"password",name:"currentPassword",autocomplete:!1,modelValue:e.passwordCurrent,"onUpdate:modelValue":t[8]||(t[8]=function(t){return e.passwordCurrent=t}),"full-width":!0,title:e.translate("UsersManager_YourCurrentPassword")},null,8,["modelValue","title"])])]),Object(a["createElementVNode"])("div",Is,[Object(a["createElementVNode"])("a",{href:"",class:"modal-action btn",onClick:t[9]||(t[9]=Object(a["withModifiers"])((function(t){return e.save()}),["prevent"])),style:{"margin-right":"3.5px"}},Object(a["toDisplayString"])(e.translate("General_Ok")),1),Object(a["createElementVNode"])("a",{href:"",class:"modal-action modal-close modal-no",onClick:t[10]||(t[10]=Object(a["withModifiers"])((function(t){return e.passwordCurrent=""}),["prevent"]))},Object(a["toDisplayString"])(e.translate("General_Cancel")),1)])],512)],512),[[u]])]})),_:1},8,["content-title"])}var qs=window,$s=qs.$,Gs=Object(a["defineComponent"])({props:{isUsersAdminEnabled:{type:Boolean,required:!0},title:{type:String,required:!0},userLogin:{type:String,required:!0},userEmail:{type:String,required:!0},currentLanguageCode:{type:String,required:!0},languageOptions:{type:Object,required:!0},currentTimeformat:{type:Number,required:!0},timeFormats:{type:Object,required:!0},defaultReport:{type:[String,Number],required:!0},defaultReportOptions:{type:Object,required:!0},defaultReportIdSite:{type:[String,Number],required:!0},defaultReportSiteName:{type:String,required:!0},defaultDate:{type:String,required:!0},availableDefaultDates:{type:Object,required:!0}},components:{ContentBlock:i["ContentBlock"],SaveButton:f["SaveButton"],Field:f["Field"],SiteSelector:i["SiteSelector"]},directives:{Form:f["Form"]},data:function(){return{doesRequirePasswordConfirmation:!1,username:this.userLogin,email:this.userEmail,language:this.currentLanguageCode,timeformat:this.currentTimeformat,theDefaultReport:this.defaultReport,site:{id:this.defaultReportIdSite,name:i["Matomo"].helper.htmlDecode(this.defaultReportSiteName)},theDefaultDate:this.defaultDate,loading:!1,passwordCurrent:""}},methods:{save:function(){var e=this;if(!this.doesRequirePasswordConfirmation||this.passwordCurrent){var t=M.Modal.getInstance(this.$refs.confirmChangesWithPasswordModal);t&&t.close();var n={email:this.email,defaultReport:"MultiSites"===this.theDefaultReport?this.theDefaultReport:this.site.id,defaultDate:this.theDefaultDate,language:this.language,timeformat:this.timeformat};this.passwordCurrent&&(n.passwordConfirmation=this.passwordCurrent),this.loading=!0,i["AjaxHelper"].post({module:"UsersManager",action:"recordUserSettings",format:"json"},n,{withTokenInUrl:!0}).then((function(){var t=i["NotificationsStore"].show({message:Object(i["translate"])("CoreAdminHome_SettingsSaveSuccess"),id:"PersonalSettingsSuccess",context:"success",type:"transient"});i["NotificationsStore"].scrollToNotification(t),e.doesRequirePasswordConfirmation=!1,e.passwordCurrent="",e.loading=!1})).catch((function(){e.loading=!1,e.passwordCurrent=""}))}else $s(this.$refs.confirmChangesWithPasswordModal).modal({dismissible:!1,ready:function(){$s(".modal.open #currentPassword").focus()}}).modal("open")}}});Gs.render=Js;var zs=Gs;
/*!
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
- */Object(i["createAngularJsAdapter"])({component:$s,scope:{isUsersAdminEnabled:{angularJsBind:"<"},title:{angularJsBind:"<"},userLogin:{angularJsBind:"<"},userEmail:{angularJsBind:"<"},currentLanguageCode:{angularJsBind:"<"},languageOptions:{angularJsBind:"<"},currentTimeformat:{angularJsBind:"<"},timeFormats:{angularJsBind:"<"},defaultReport:{angularJsBind:"<"},defaultReportOptions:{angularJsBind:"<"},defaultReportIdSite:{angularJsBind:"<"},defaultReportSiteName:{angularJsBind:"<"},defaultDate:{angularJsBind:"<"},availableDefaultDates:{angularJsBind:"<"}},directiveName:"matomoPersonalSettings"})}})}));
+ */Object(i["createAngularJsAdapter"])({component:zs,scope:{isUsersAdminEnabled:{angularJsBind:"<"},title:{angularJsBind:"<"},userLogin:{angularJsBind:"<"},userEmail:{angularJsBind:"<"},currentLanguageCode:{angularJsBind:"<"},languageOptions:{angularJsBind:"<"},currentTimeformat:{angularJsBind:"<"},timeFormats:{angularJsBind:"<"},defaultReport:{angularJsBind:"<"},defaultReportOptions:{angularJsBind:"<"},defaultReportIdSite:{angularJsBind:"<"},defaultReportSiteName:{angularJsBind:"<"},defaultDate:{angularJsBind:"<"},availableDefaultDates:{angularJsBind:"<"}},directiveName:"matomoPersonalSettings"})}})}));
//# sourceMappingURL=UsersManager.umd.min.js.map \ No newline at end of file
diff --git a/plugins/UsersManager/vue/src/PagedUsersList/PagedUsersList.less b/plugins/UsersManager/vue/src/PagedUsersList/PagedUsersList.less
index bc52e87ce3..f1a7d66783 100644
--- a/plugins/UsersManager/vue/src/PagedUsersList/PagedUsersList.less
+++ b/plugins/UsersManager/vue/src/PagedUsersList/PagedUsersList.less
@@ -37,7 +37,7 @@
table.entityTable tbody tr td.actions-cell {
width: 140px;
padding: 0;
- text-align: center;
+ text-align: left;
}
table.entityTable th.actions-cell-header > div {
@@ -124,6 +124,7 @@
.input-field > .btn {
margin-top: .7rem;
+ white-space: nowrap;
}
&.row {
@@ -133,6 +134,11 @@
}
}
+ .users-list-pagination-container {
+ float: right;
+ min-width: 350px;
+ }
+
.usersListPagination {
display: flex;
flex-direction: row;
@@ -140,6 +146,7 @@
justify-content: space-between;
margin-top: .7rem;
float: right;
+ white-space: nowrap;
.pointer {
cursor: pointer;
@@ -165,11 +172,11 @@
}
#status {
- .accept {
+ .active {
color: green;
}
- .expired, .decline {
+ .expired {
color: red;
}
diff --git a/plugins/UsersManager/vue/src/PagedUsersList/PagedUsersList.vue b/plugins/UsersManager/vue/src/PagedUsersList/PagedUsersList.vue
index 6af4687037..f0e5121354 100644
--- a/plugins/UsersManager/vue/src/PagedUsersList/PagedUsersList.vue
+++ b/plugins/UsersManager/vue/src/PagedUsersList/PagedUsersList.vue
@@ -6,41 +6,41 @@
<template>
<div
- class="pagedUsersList"
- :class="{loading: isLoadingUsers}"
+ class="pagedUsersList"
+ :class="{loading: isLoadingUsers}"
>
<div class="userListFilters row">
- <div class="col s12 m12 l6">
- <div class="input-field col s12 m4 l4">
+ <div class="col s12 m12 l8">
+ <div class="input-field col s12 m3 l3">
<a
- class="dropdown-trigger btn bulk-actions"
- href=""
- data-target="user-list-bulk-actions"
- :class="{ disabled: isBulkActionsDisabled }"
- v-dropdown-menu
+ class="dropdown-trigger btn bulk-actions"
+ href=""
+ data-target="user-list-bulk-actions"
+ :class="{ disabled: isBulkActionsDisabled }"
+ v-dropdown-menu
>
{{ translate('UsersManager_BulkActions') }}
</a>
<ul
- id="user-list-bulk-actions"
- class="dropdown-content"
+ id="user-list-bulk-actions"
+ class="dropdown-content"
>
<li>
<a
- class="dropdown-trigger"
- data-target="bulk-set-access"
- v-dropdown-menu
+ class="dropdown-trigger"
+ data-target="bulk-set-access"
+ v-dropdown-menu
>
{{ translate('UsersManager_SetPermission') }}
</a>
<ul
- id="bulk-set-access"
- class="dropdown-content"
+ id="bulk-set-access"
+ class="dropdown-content"
>
<li v-for="access in bulkActionAccessLevels" :key="access.key">
<a
- href=""
- @click.prevent="
+ href=""
+ @click.prevent="
userToChange = null; roleToChangeTo = access.key; showAccessChangeConfirm();
"
>
@@ -51,8 +51,8 @@
</li>
<li>
<a
- href=""
- @click.prevent="
+ href=""
+ @click.prevent="
userToChange = null; roleToChangeTo = 'noaccess'; showAccessChangeConfirm();
"
>
@@ -61,74 +61,90 @@
</li>
<li v-if="currentUserRole === 'superuser'">
<a
- href=""
- @click.prevent="showDeleteConfirm()"
+ href=""
+ @click.prevent="showDeleteConfirm()"
>{{ translate('UsersManager_DeleteUsers') }}</a>
</li>
</ul>
</div>
- <div class="input-field col s12 m4 l4">
+ <div class="input-field col s12 m3 l3">
<div
- class="permissions-for-selector"
+ class="permissions-for-selector"
>
<Field
- :model-value="userTextFilter"
- @update:model-value="onUserTextFilterChange($event)"
- name="user-text-filter"
- uicontrol="text"
- :full-width="true"
- :placeholder="translate('UsersManager_UserSearch')"
+ :model-value="userTextFilter"
+ @update:model-value="onUserTextFilterChange($event)"
+ name="user-text-filter"
+ uicontrol="text"
+ :full-width="true"
+ :placeholder="translate('UsersManager_UserSearch')"
/>
</div>
</div>
- <div class="input-field col s12 m4 l4">
+ <div class="input-field col s12 m3 l3">
<div>
<Field
- :model-value="accessLevelFilter"
- @update:model-value="accessLevelFilter = $event; changeSearch({
+ :model-value="accessLevelFilter"
+ @update:model-value="accessLevelFilter = $event; changeSearch({
filter_access: accessLevelFilter,
offset: 0,
})"
- name="access-level-filter"
- uicontrol="select"
- :options="filterAccessLevels"
- :full-width="true"
- :placeholder="translate('UsersManager_FilterByAccess')"
+ name="access-level-filter"
+ uicontrol="select"
+ :options="filterAccessLevels"
+ :full-width="true"
+ :placeholder="translate('UsersManager_FilterByAccess')"
+ />
+ </div>
+ </div>
+ <div class="input-field col s12 m3 l3">
+ <div>
+ <Field
+ :model-value="statusLevelFilter"
+ @update:model-value="statusLevelFilter = $event; changeSearch({
+ filter_status: statusLevelFilter,
+ offset: 0,
+ })"
+ name="status-level-filter"
+ uicontrol="select"
+ :options="filterStatusLevels"
+ :full-width="true"
+ :placeholder="translate('UsersManager_FilterByStatus')"
/>
</div>
</div>
</div>
<div
- class="input-field col s12 m12 l6 users-list-pagination-container"
- v-if="totalEntries > searchParams.limit"
+ class="input-field col s12 m12 l4 users-list-pagination-container"
+ v-if="totalEntries > searchParams.limit"
>
<div class="usersListPagination">
<a
- class="btn prev"
- :class="{ disabled: searchParams.offset <= 0 }"
- @click.prevent="gotoPreviousPage()"
+ class="btn prev"
+ :class="{ disabled: searchParams.offset <= 0 }"
+ @click.prevent="gotoPreviousPage()"
>
<span class="pointer">&#xAB; {{ translate('General_Previous') }}</span>
</a>
<div class="counter">
<span
- :class="{ visibility: isLoadingUsers ? 'hidden' : 'visible' }"
+ :class="{ visibility: isLoadingUsers ? 'hidden' : 'visible' }"
>
{{ translate(
- 'General_Pagination',
- paginationLowerBound,
- paginationUpperBound,
- totalEntries
- ) }}
+ 'General_Pagination',
+ paginationLowerBound,
+ paginationUpperBound,
+ totalEntries
+ ) }}
</span>
<ActivityIndicator
- :loading="isLoadingUsers"
+ :loading="isLoadingUsers"
/>
</div>
<a
- class="btn next"
- :class="{ disabled: searchParams.offset + searchParams.limit >= totalEntries }"
- @click.prevent="gotoNextPage()"
+ class="btn next"
+ :class="{ disabled: searchParams.offset + searchParams.limit >= totalEntries }"
+ @click.prevent="gotoNextPage()"
>
<span class="pointer">{{ translate('General_Next') }} &#xBB;</span>
</a>
@@ -136,52 +152,52 @@
</div>
</div>
<div
- class="roles-help-notification"
- v-if="isRoleHelpToggled"
+ class="roles-help-notification"
+ v-if="isRoleHelpToggled"
>
<Notification
- context="info"
- type="persistent"
- :noclear="true"
+ context="info"
+ type="persistent"
+ :noclear="true"
>
<span v-html="$sanitize(rolesHelpText)"></span>
</Notification>
</div>
<ContentBlock>
<table
- id="manageUsersTable"
- :class="{ loading: isLoadingUsers }"
- v-content-table
+ id="manageUsersTable"
+ :class="{ loading: isLoadingUsers }"
+ v-content-table
>
<thead>
- <tr>
- <th class="select-cell">
+ <tr>
+ <th class="select-cell">
<span class="checkbox-container">
<label>
<input
- type="checkbox"
- id="paged_users_select_all"
- checked="checked"
- v-model="isAllCheckboxSelected"
- @change="onAllCheckboxChange()"
+ type="checkbox"
+ id="paged_users_select_all"
+ checked="checked"
+ v-model="isAllCheckboxSelected"
+ @change="onAllCheckboxChange()"
/>
- <span />
+ <span/>
</label>
</span>
- </th>
- <th class="first">{{ translate('UsersManager_Username') }}</th>
- <th class="role_header">
- <span style="margin-right: 3.5px">{{ translate('UsersManager_RoleFor') }}</span>
- <a
+ </th>
+ <th class="first">{{ translate('UsersManager_Username') }}</th>
+ <th class="role_header">
+ <span style="margin-right: 3.5px">{{ translate('UsersManager_RoleFor') }}</span>
+ <a
href=""
class="helpIcon"
@click.prevent="isRoleHelpToggled = !isRoleHelpToggled"
:class="{ sticky: isRoleHelpToggled }"
- >
- <span class="icon-help" />
- </a>
- <div>
- <Field
+ >
+ <span class="icon-help"/>
+ </a>
+ <div>
+ <Field
class="permissions-for-selector"
:model-value="permissionsForSite"
@update:model-value="onPermissionsForUpdate($event);"
@@ -189,36 +205,37 @@
:ui-control-attributes="{
onlySitesWithAdminAccess: currentUserRole !== 'superuser',
}"
- />
- </div>
- </th>
- <th v-if="currentUserRole === 'superuser'">{{ translate('UsersManager_Email') }}</th>
- <th
+ />
+ </div>
+ </th>
+ <th v-if="currentUserRole === 'superuser'">{{ translate('UsersManager_Email') }}</th>
+ <th
v-if="currentUserRole === 'superuser'"
:title="translate('UsersManager_UsesTwoFactorAuthentication')"
- >{{ translate('UsersManager_2FA') }}</th>
- <th v-if="currentUserRole === 'superuser'">{{ translate('UsersManager_LastSeen') }}</th>
- <th>{{ translate('UsersManager_Status') }}</th>
- <th class="actions-cell-header">
- <div>{{ translate('General_Actions') }}</div>
- </th>
- </tr>
+ >{{ translate('UsersManager_2FA') }}
+ </th>
+ <th v-if="currentUserRole === 'superuser'">{{ translate('UsersManager_LastSeen') }}</th>
+ <th>{{ translate('UsersManager_Status') }}</th>
+ <th class="actions-cell-header">
+ <div>{{ translate('General_Actions') }}</div>
+ </th>
+ </tr>
</thead>
<tbody>
- <tr
+ <tr
class="select-all-row"
v-if="isAllCheckboxSelected && users.length && users.length < totalEntries"
- >
- <td colspan="8">
- <div v-if="!areAllResultsSelected">
+ >
+ <td colspan="8">
+ <div v-if="!areAllResultsSelected">
<span
- v-html="$sanitize(translate(
+ v-html="$sanitize(translate(
'UsersManager_TheDisplayedUsersAreSelected',
`<strong>${users.length}</strong>`,
))"
- style="margin-right:3.5px"
+ style="margin-right:3.5px"
></span>
- <a
+ <a
class="toggle-select-all-in-search"
href="#"
@click.prevent="areAllResultsSelected = !areAllResultsSelected"
@@ -226,16 +243,16 @@
'UsersManager_ClickToSelectAll',
`<strong>${totalEntries}</strong>`,
))"
- ></a>
- </div>
- <div v-if="areAllResultsSelected">
+ ></a>
+ </div>
+ <div v-if="areAllResultsSelected">
<span v-html="$sanitize(translate(
'UsersManager_AllUsersAreSelected',
`<strong>${totalEntries}</strong>`,
))"
- style="margin-right:3.5px"
+ style="margin-right:3.5px"
></span>
- <a
+ <a
class="toggle-select-all-in-search"
href="#"
@click.prevent="areAllResultsSelected = !areAllResultsSelected"
@@ -243,32 +260,32 @@
'UsersManager_ClickToSelectDisplayedUsers',
`<strong>${users.length}</strong>`,
))"
- ></a>
- </div>
- </td>
- </tr>
- <tr
+ ></a>
+ </div>
+ </td>
+ </tr>
+ <tr
v-for="(user, index) in users"
:id="`row${index}`"
:key="user.login"
- >
- <td class="select-cell">
+ >
+ <td class="select-cell">
<span class="checkbox-container">
<label>
<input
- type="checkbox"
- :id="`paged_users_select_row${index}`"
- v-model="selectedRows[index]"
- @click="onRowSelected()"
+ type="checkbox"
+ :id="`paged_users_select_row${index}`"
+ v-model="selectedRows[index]"
+ @click="onRowSelected()"
/>
- <span />
+ <span/>
</label>
</span>
- </td>
- <td id="userLogin">{{ user.login }}</td>
- <td class="access-cell">
- <div>
- <Field
+ </td>
+ <td id="userLogin">{{ user.login }}</td>
+ <td class="access-cell">
+ <div>
+ <Field
:model-value="user.role"
@update:model-value="
userToChange = user;
@@ -277,80 +294,89 @@
:disabled="user.role === 'superuser'"
uicontrol="select"
:options="user.login !== 'anonymous' ? accessLevels : anonymousAccessLevels"
- />
- </div>
- </td>
- <td
+ />
+ </div>
+ </td>
+ <td
id="email"
v-if="currentUserRole === 'superuser'"
- >{{ user.email }}</td>
- <td
+ >{{ user.email }}
+ </td>
+ <td
id="twofa"
v-if="currentUserRole === 'superuser'"
- >
+ >
<span
- class="icon-ok"
- v-if="user.uses_2fa"
+ class="icon-ok"
+ v-if="user.uses_2fa"
/>
- <span
+ <span
class="icon-close"
v-if="!user.uses_2fa"
- />
- </td>
- <td
+ />
+ </td>
+ <td
id="last_seen"
v-if="currentUserRole === 'superuser'"
+ >
+ {{ user.last_seen ? `${user.last_seen} ago`:'-' }}
+ </td>
+ <td id="status">
+ <span :class="Number.isInteger(user.invite_status)? 'pending':user.invite_status"
+ :title="user.invite_status === 'expired' ?
+ translate('UsersManager_ExpiredInviteAutomaticallyRemoved', '3') :
+ ''"
+ >{{ getInviteStatus(user.invite_status) }}</span>
+ </td>
+ <td class="center actions-cell">
+ <button
+ class="resend table-action"
+ title="Resend Invite"
+ @click="userToChange = user; showResendConfirm()"
+ v-if="(
+ currentUserRole === 'superuser'
+ || (currentUserRole === 'admin' && user.invited_by === currentUserLogin)
+ ) && user.invite_status!=='active'"
>
- {{ user.last_seen ? `${user.last_seen} ago` : '-' }}
- </td>
- <td id="status">
- <span :class="user.invite_status">
- {{ getInviteStatus(user.invite_status) }}
- </span>
- </td>
- <td class="center actions-cell">
- <button
- class="resend table-action"
- title="Resend Invite"
- @click="userToChange = user; showResendConfirm()"
- v-if="user.invite_status!=='accept'"
- >
- <span class="icon-email" />
- </button>
+ <span class="icon-email"/>
+ </button>
- <button
+ <button
class="edituser table-action"
title="Edit"
@click="$emit('editUser', { user: user })"
v-if="user.login !== 'anonymous'"
- >
- <span class="icon-edit" />
- </button>
- <button
+ >
+ <span class="icon-edit"/>
+ </button>
+ <button
class="deleteuser table-action"
title="Delete"
@click="userToChange = user; showDeleteConfirm()"
- v-if="currentUserRole === 'superuser' && user.login !== 'anonymous'"
- >
- <span class="icon-delete" />
- </button>
- </td>
- </tr>
+ v-if="(
+ currentUserRole === 'superuser'
+ || (currentUserRole === 'admin' && user.invited_by === currentUserLogin)
+ ) && user.login !== 'anonymous'"
+ >
+ <span class="icon-delete"/>
+ </button>
+ </td>
+ </tr>
</tbody>
</table>
</ContentBlock>
<div class="delete-user-confirm-modal modal" ref="deleteUserConfirmModal">
<div class="modal-content">
<h3
- v-if="userToChange"
- v-html="$sanitize(translate(
+ v-if="userToChange"
+ v-html="$sanitize(translate(
'UsersManager_DeleteUserConfirmSingle',
`<strong>${userToChange.login}</strong>`,
))"
></h3>
<p
- v-if="!userToChange"
- v-html="$sanitize(translate(
+ v-if="!userToChange"
+ v-html="$sanitize(translate(
'UsersManager_DeleteUserConfirmMultiple',
`<strong>${affectedUsersCount}</strong>`,
))"
@@ -358,23 +384,23 @@
</div>
<div class="modal-footer">
<a
- href=""
- class="modal-action modal-close btn"
- @click.prevent="deleteRequestedUsers()"
- style="margin-right:3.5px"
+ href=""
+ class="modal-action modal-close btn"
+ @click.prevent="deleteRequestedUsers()"
+ style="margin-right:3.5px"
>{{ translate('General_Yes') }}</a>
<a
- href=""
- class="modal-action modal-close modal-no"
- @click.prevent="userToChange = null; roleToChangeTo = null;"
+ href=""
+ class="modal-action modal-close modal-no"
+ @click.prevent="userToChange = null; roleToChangeTo = null;"
>{{ translate('General_No') }}</a>
</div>
</div>
<div class="change-user-role-confirm-modal modal" ref="changeUserRoleConfirmModal">
<div class="modal-content">
<h3
- v-if="userToChange"
- v-html="$sanitize(deleteUserPermConfirmSingleText)"
+ v-if="userToChange"
+ v-html="$sanitize(deleteUserPermConfirmSingleText)"
></h3>
<h3 v-if="userToChange && userToChange.login === 'anonymous' && roleToChangeTo === 'view'">
<em>{{ translate('General_Note') }}:
@@ -387,21 +413,21 @@
</em>
</h3>
<p
- v-if="!userToChange"
- v-html="$sanitize(deleteUserPermConfirmMultipleText)"
+ v-if="!userToChange"
+ v-html="$sanitize(deleteUserPermConfirmMultipleText)"
></p>
</div>
<div class="modal-footer">
<a
- href=""
- class="modal-action modal-close btn"
- @click.prevent="changeUserRole()"
- style="margin-right:3.5px"
+ href=""
+ class="modal-action modal-close btn"
+ @click.prevent="changeUserRole()"
+ style="margin-right:3.5px"
>{{ translate('General_Yes') }}</a>
<a
- href=""
- class="modal-action modal-close modal-no"
- @click.prevent="
+ href=""
+ class="modal-action modal-close modal-no"
+ @click.prevent="
userToChange = null;
roleToChangeTo = null;"
>{{ translate('General_No') }}</a>
@@ -461,9 +487,10 @@ interface PagedUsersListState {
selectedRows: Record<string, boolean>;
isAllCheckboxSelected: boolean;
isBulkActionsDisabled: boolean;
- userToChange: User|null;
- roleToChangeTo: string|null;
- accessLevelFilter: string|null;
+ userToChange: User | null;
+ roleToChangeTo: string | null;
+ accessLevelFilter: string | null;
+ statusLevelFilter: string | null;
isRoleHelpToggled: boolean;
userTextFilter: string;
permissionsForSite: SiteRef;
@@ -491,6 +518,10 @@ export default defineComponent({
type: Array,
required: true,
},
+ filterStatusLevels: {
+ type: Array,
+ required: true,
+ },
totalEntries: Number,
users: {
type: Array,
@@ -520,6 +551,7 @@ export default defineComponent({
userToChange: null,
roleToChangeTo: null,
accessLevelFilter: null,
+ statusLevelFilter: null,
isRoleHelpToggled: false,
userTextFilter: '',
permissionsForSite: {
@@ -538,17 +570,14 @@ export default defineComponent({
},
},
methods: {
- getInviteStatus(inviteStatus: string|null) {
- if (inviteStatus === 'accept') {
- return translate('UsersManager_Active');
- }
- if (inviteStatus === 'pending') {
- return translate('UsersManager_Pending');
+ getInviteStatus(inviteStatus: string | number) {
+ if (Number.isInteger(inviteStatus)) {
+ return translate('UsersManager_InviteDayLeft', inviteStatus);
}
if (inviteStatus === 'expired') {
return translate('UsersManager_Expired');
}
- return translate('UsersManager_Decline');
+ return translate('UsersManager_Active');
},
onPermissionsForUpdate(site: SiteRef) {
this.permissionsForSite = site;
@@ -596,21 +625,27 @@ export default defineComponent({
});
},
showDeleteConfirm() {
- $(this.$refs.deleteUserConfirmModal as HTMLElement).modal({
- dismissible: false,
- }).modal('open');
+ $(this.$refs.deleteUserConfirmModal as HTMLElement)
+ .modal({
+ dismissible: false,
+ })
+ .modal('open');
},
showResendConfirm() {
- $(this.$refs.resendInviteConfirmModal as HTMLElement).modal({
- dismissible: false,
- }).modal('open');
+ $(this.$refs.resendInviteConfirmModal as HTMLElement)
+ .modal({
+ dismissible: false,
+ })
+ .modal('open');
},
showAccessChangeConfirm() {
- $(this.$refs.changeUserRoleConfirmModal as HTMLElement).modal({
- dismissible: false,
- }).modal('open');
+ $(this.$refs.changeUserRoleConfirmModal as HTMLElement)
+ .modal({
+ dismissible: false,
+ })
+ .modal('open');
},
- getRoleDisplay(role: string|null) {
+ getRoleDisplay(role: string | null) {
let result = null;
(this.accessLevels as AccessLevel[]).forEach((entry) => {
if (entry.key === role) {
@@ -640,10 +675,16 @@ export default defineComponent({
},
onUserTextFilterChange(filter: string) {
this.userTextFilter = filter;
- this.changeSearch({ filter_search: filter, offset: 0 });
+ this.changeSearch({
+ filter_search: filter,
+ offset: 0,
+ });
},
},
computed: {
+ currentUserLogin() {
+ return Matomo.userLogin;
+ },
paginationLowerBound() {
return this.searchParams.offset + 1;
},
@@ -671,14 +712,15 @@ export default defineComponent({
const users = this.users as User[];
const result: User[] = [];
- Object.keys(this.selectedRows).forEach((index) => {
- const indexN = parseInt(index, 10);
- if (this.selectedRows[index]
- && users[indexN] // sanity check
- ) {
- result.push(users[indexN]);
- }
- });
+ Object.keys(this.selectedRows)
+ .forEach((index) => {
+ const indexN = parseInt(index, 10);
+ if (this.selectedRows[index]
+ && users[indexN] // sanity check
+ ) {
+ result.push(users[indexN]);
+ }
+ });
return result;
},
rolesHelpText() {
@@ -701,11 +743,12 @@ export default defineComponent({
},
selectedCount() {
let selectedRowKeyCount = 0;
- Object.keys(this.selectedRows).forEach((key) => {
- if (this.selectedRows[key]) {
- selectedRowKeyCount += 1;
- }
- });
+ Object.keys(this.selectedRows)
+ .forEach((key) => {
+ if (this.selectedRows[key]) {
+ selectedRowKeyCount += 1;
+ }
+ });
return selectedRowKeyCount;
},
deleteUserPermConfirmSingleText() {
@@ -737,8 +780,3 @@ export default defineComponent({
},
});
</script>
-<style scoped>
-.actions-cell {
- text-align: left!important;
-}
-</style>
diff --git a/plugins/UsersManager/vue/src/PagedUsersList/SearchParams.ts b/plugins/UsersManager/vue/src/PagedUsersList/SearchParams.ts
index 9fd4b7f657..5109a2fd10 100644
--- a/plugins/UsersManager/vue/src/PagedUsersList/SearchParams.ts
+++ b/plugins/UsersManager/vue/src/PagedUsersList/SearchParams.ts
@@ -11,6 +11,7 @@ interface SearchParams {
offset: number;
filter_search: string;
filter_access: string;
+ filter_status: string;
}
export default SearchParams;
diff --git a/plugins/UsersManager/vue/src/User.ts b/plugins/UsersManager/vue/src/User.ts
index 88fc0be970..eff29d9595 100644
--- a/plugins/UsersManager/vue/src/User.ts
+++ b/plugins/UsersManager/vue/src/User.ts
@@ -12,7 +12,7 @@ interface User {
password?: string;
email: string;
role?: string;
- invited_at?: string;
+ invite_status?: string;
}
export default User;
diff --git a/plugins/UsersManager/vue/src/UserEditForm/UserEditForm.vue b/plugins/UsersManager/vue/src/UserEditForm/UserEditForm.vue
index 6df10c52fd..c9d7c95c4d 100644
--- a/plugins/UsersManager/vue/src/UserEditForm/UserEditForm.vue
+++ b/plugins/UsersManager/vue/src/UserEditForm/UserEditForm.vue
@@ -94,7 +94,7 @@
</div>
<div>
<Field
- v-if="isPendingUser"
+ v-if="!isPending"
:model-value="theUser.password"
:disabled="isSavingUserInfo || (currentUserRole !== 'superuser' && !isAdd)
|| isShowingPasswordConfirm"
@@ -332,7 +332,7 @@ const DEFAULT_USER: User = {
uses_2fa: false,
password: '',
email: '',
- invited_at: '',
+ invite_status: '',
};
interface UserEditFormState {
@@ -484,10 +484,10 @@ export default defineComponent({
this.firstSiteAccess = null;
this.isSavingUserInfo = false;
this.isUserModified = true;
- this.theUser.invited_at = 'xx';
+ this.theUser.invite_status = 'pending';
this.resetPasswordVar();
- this.showUserSavedNotification();
+ this.showUserCreatedNotification();
});
},
resetPasswordVar() {
@@ -523,6 +523,13 @@ export default defineComponent({
type: 'toast',
});
},
+ showUserCreatedNotification() {
+ NotificationsStore.show({
+ message: translate('UsersManager_InviteSuccess'),
+ context: 'success',
+ type: 'toast',
+ });
+ },
reset2FA() {
this.isResetting2FA = true;
return AjaxHelper.post({
@@ -585,12 +592,17 @@ export default defineComponent({
? translate('UsersManager_InviteUser')
: translate('UsersManager_SaveBasicInfo');
},
- isPendingUser() {
- // eslint-disable-next-line eqeqeq
- return this.user && (this.theUser.invited_at === '' || !this.theUser.invited_at);
+ isPending() {
+ if (!this.user) {
+ return true;
+ }
+ if (this.user.invite_status === 'pending' || Number.isInteger(this.user.invite_status)) {
+ return true;
+ }
+ return false;
},
isAdd() {
- return !this.user; // purposefully checking input property not theUser state
+ return !this.user;
},
changePasswordTitle() {
return translate(
diff --git a/plugins/UsersManager/vue/src/UsersManager/UsersManager.adapter.ts b/plugins/UsersManager/vue/src/UsersManager/UsersManager.adapter.ts
index 2bfae741ff..b3bd967d9b 100644
--- a/plugins/UsersManager/vue/src/UsersManager/UsersManager.adapter.ts
+++ b/plugins/UsersManager/vue/src/UsersManager/UsersManager.adapter.ts
@@ -26,6 +26,9 @@ export default createAngularJsAdapter({
filterAccessLevels: {
angularJsBind: '<',
},
+ filterStatusLevels: {
+ angularJsBind: '<',
+ },
},
directiveName: 'piwikUsersManager',
restrict: 'E',
diff --git a/plugins/UsersManager/vue/src/UsersManager/UsersManager.vue b/plugins/UsersManager/vue/src/UsersManager/UsersManager.vue
index ac510ef3b1..b9cfcdc462 100644
--- a/plugins/UsersManager/vue/src/UsersManager/UsersManager.vue
+++ b/plugins/UsersManager/vue/src/UsersManager/UsersManager.vue
@@ -10,8 +10,8 @@
<div v-content-intro>
<h2>
<EnrichedHeadline
- help-url="https://matomo.org/docs/manage-users/"
- feature-name="Users Management"
+ help-url="https://matomo.org/docs/manage-users/"
+ feature-name="Users Management"
>
{{ translate('UsersManager_ManageUsers') }}
</EnrichedHeadline>
@@ -26,19 +26,19 @@
<div class="col s12">
<div class="input-field" style="margin-right:3.5px">
<a
- class="btn add-new-user"
- @click="onAddNewUser()"
+ class="btn add-new-user"
+ @click="onAddNewUser()"
>
{{ translate('UsersManager_InviteNewUser') }}
</a>
</div>
<div
- class="input-field"
- v-if="currentUserRole !== 'superuser'"
+ class="input-field"
+ v-if="currentUserRole !== 'superuser'"
>
<a
- class="btn add-existing-user"
- @click="showAddExistingUserModal()"
+ class="btn add-existing-user"
+ @click="showAddExistingUserModal()"
>
{{ translate('UsersManager_AddExistingUser') }}
</a>
@@ -46,34 +46,35 @@
</div>
</div>
<PagedUsersList
- @edit-user="onEditUser($event.user)"
- @change-user-role="onChangeUserRole($event.users, $event.role)"
- @delete-user="onDeleteUser($event.users)"
- @search-change="searchParams = $event.params; fetchUsers()"
- @resend-invite="onResendInvite($event.user)"
- :initial-site-id="initialSiteId"
- :initial-site-name="initialSiteName"
- :is-loading-users="isLoadingUsers"
- :current-user-role="currentUserRole"
- :access-levels="accessLevels"
- :filter-access-levels="actualFilterAccessLevels"
- :search-params="searchParams"
- :users="users"
- :total-entries="totalEntries"
+ @edit-user="onEditUser($event.user)"
+ @change-user-role="onChangeUserRole($event.users, $event.role)"
+ @delete-user="onDeleteUser($event.users)"
+ @search-change="searchParams = $event.params; fetchUsers()"
+ @resend-invite="onResendInvite($event.user)"
+ :initial-site-id="initialSiteId"
+ :initial-site-name="initialSiteName"
+ :is-loading-users="isLoadingUsers"
+ :current-user-role="currentUserRole"
+ :access-levels="accessLevels"
+ :filter-access-levels="actualFilterAccessLevels"
+ :filter-status-levels="filterStatusLevels"
+ :search-params="searchParams"
+ :users="users"
+ :total-entries="totalEntries"
/>
</div>
</div>
<!-- TODO: whether a user is being edited should be part of the URL -->
<div v-if="isEditing">
<UserEditForm
- @done="onDoneEditing($event.isUserModified)"
- :user="userBeingEdited"
- :current-user-role="currentUserRole"
- :access-levels="accessLevels"
- :filter-access-levels="actualFilterAccessLevels"
- :initial-site-id="initialSiteId"
- :initial-site-name="initialSiteName"
- @updated="userBeingEdited = $event.user"
+ @done="onDoneEditing($event.isUserModified)"
+ :user="userBeingEdited"
+ :current-user-role="currentUserRole"
+ :access-levels="accessLevels"
+ :filter-access-levels="actualFilterAccessLevels"
+ :initial-site-id="initialSiteId"
+ :initial-site-name="initialSiteName"
+ @updated="userBeingEdited = $event.user"
/>
</div>
<div class="add-existing-user-modal modal" ref="addExistingUserModal">
@@ -82,23 +83,23 @@
<p>{{ translate('UsersManager_EnterUsernameOrEmail') }}:</p>
<div>
<Field
- v-model="addNewUserLoginEmail"
- name="add-existing-user-email"
- uicontrol="text"
+ v-model="addNewUserLoginEmail"
+ name="add-existing-user-email"
+ uicontrol="text"
/>
</div>
</div>
<div class="modal-footer">
<a
- href
- class="modal-action modal-close btn"
- @click.prevent="addExistingUser()"
- style="margin-right:3.5px"
+ href
+ class="modal-action modal-close btn"
+ @click.prevent="addExistingUser()"
+ style="margin-right:3.5px"
>{{ translate('General_Add') }}</a>
<a
- href
- class="modal-action modal-close modal-no"
- @click.prevent="addNewUserLoginEmail = null"
+ href
+ class="modal-action modal-close modal-no"
+ @click.prevent="addNewUserLoginEmail = null"
>{{ translate('General_Cancel') }}</a>
</div>
</div>
@@ -116,6 +117,8 @@ import {
Matomo,
MatomoUrl,
AjaxHelper,
+ translate,
+ NotificationsStore,
} from 'CoreHome';
import { Field } from 'CorePluginsAdmin';
import PagedUsersList from '../PagedUsersList/PagedUsersList.vue';
@@ -127,8 +130,8 @@ interface UsersManagerState {
isEditing: boolean;
isCurrentUserSuperUser: boolean;
users: User[];
- userBeingEdited: User|null;
- totalEntries: null|number;
+ userBeingEdited: User | null;
+ totalEntries: null | number;
searchParams: SearchParams;
isLoadingUsers: boolean;
addNewUserLoginEmail: string;
@@ -160,6 +163,10 @@ export default defineComponent({
type: Array,
required: true,
},
+ filterStatusLevels: {
+ type: Array,
+ required: true,
+ },
},
components: {
EnrichedHeadline,
@@ -182,6 +189,7 @@ export default defineComponent({
limit: NUM_USERS_PER_PAGE,
filter_search: '',
filter_access: '',
+ filter_status: '',
idSite: this.initialSiteId,
},
isLoadingUsers: false,
@@ -210,69 +218,90 @@ export default defineComponent({
}
},
showAddExistingUserModal() {
- $(this.$refs.addExistingUserModal as HTMLElement).modal({ dismissible: false }).modal('open');
+ $(this.$refs.addExistingUserModal as HTMLElement)
+ .modal({ dismissible: false })
+ .modal('open');
},
- onChangeUserRole(users: User[]|string, role: string) {
+ onChangeUserRole(users: User[] | string, role: string) {
this.isLoadingUsers = true;
- Promise.resolve().then(() => {
- if (users === 'all') {
- return this.getAllUsersInSearch();
- }
- return users as User[];
- }).then((usersResolved) => (
- usersResolved.filter((u) => u.role !== 'superuser').map((u) => u.login)
- )).then((userLogins) => {
- const requests = userLogins.map((login) => ({
- method: 'UsersManager.setUserAccess',
- userLogin: login,
- access: role,
- idSites: this.searchParams.idSite,
- ignoreSuperusers: 1,
- }));
+ Promise.resolve()
+ .then(() => {
+ if (users === 'all') {
+ return this.getAllUsersInSearch();
+ }
+ return users as User[];
+ })
+ .then((usersResolved) => (
+ usersResolved.filter((u) => u.role !== 'superuser')
+ .map((u) => u.login)
+ ))
+ .then((userLogins) => {
+ const requests = userLogins.map((login) => ({
+ method: 'UsersManager.setUserAccess',
+ userLogin: login,
+ access: role,
+ idSites: this.searchParams.idSite,
+ ignoreSuperusers: 1,
+ }));
- return AjaxHelper.fetch(requests, { createErrorNotification: true });
- }).catch(() => {
- // ignore (errors will still be displayed to the user)
- }).then(() => this.fetchUsers());
+ return AjaxHelper.fetch(requests, { createErrorNotification: true });
+ })
+ .catch(() => {
+ // ignore (errors will still be displayed to the user)
+ })
+ .then(() => this.fetchUsers());
},
getAllUsersInSearch() {
return AjaxHelper.fetch<User[]>({
method: 'UsersManager.getUsersPlusRole',
filter_search: this.searchParams.filter_search,
filter_access: this.searchParams.filter_access,
+ filter_status: this.searchParams.filter_status,
idSite: this.searchParams.idSite,
filter_limit: '-1',
});
},
- onDeleteUser(users: User[]|string) {
+ onDeleteUser(users: User[] | string) {
this.isLoadingUsers = true;
- Promise.resolve().then(() => {
- if (users === 'all') {
- return this.getAllUsersInSearch();
- }
- return users as User[];
- }).then((usersResolved) => usersResolved.map((u) => u.login)).then((userLogins) => {
- const requests = userLogins.map((login) => ({
- method: 'UsersManager.deleteUser',
- userLogin: login,
- }));
- return AjaxHelper.fetch(requests, { createErrorNotification: true });
- }).catch(() => {
- // ignore (errors will still be displayed to the user)
- }).then(() => this.fetchUsers());
+ Promise.resolve()
+ .then(() => {
+ if (users === 'all') {
+ return this.getAllUsersInSearch();
+ }
+ return users as User[];
+ })
+ .then((usersResolved) => usersResolved.map((u) => u.login))
+ .then((userLogins) => {
+ const requests = userLogins.map((login) => ({
+ method: 'UsersManager.deleteUser',
+ userLogin: login,
+ }));
+ return AjaxHelper.fetch(requests, { createErrorNotification: true });
+ })
+ .catch(() => {
+ // ignore (errors will still be displayed to the user)
+ })
+ .then(() => this.fetchUsers());
},
onResendInvite(user: User) {
- console.log(user);
AjaxHelper.fetch<AjaxHelper>(
{
method: 'UsersManager.resendInvite',
userLogin: user.login,
},
- ).then((res) => {
- console.log(res);
- });
+ )
+ .then(() => {
+ this.fetchUsers();
+ const id = NotificationsStore.show({
+ message: translate('UsersManager_ResendInviteSuccess', user.login),
+ id: 'resendinvite',
+ context: 'success',
+ type: 'transient',
+ });
+ NotificationsStore.scrollToNotification(id);
+ });
},
fetchUsers() {
this.isLoadingUsers = true;
@@ -282,50 +311,57 @@ export default defineComponent({
method: 'UsersManager.getUsersPlusRole',
},
{ returnResponseObject: true },
- ).then((helper) => {
- const result = helper.getRequestHandle()!;
+ )
+ .then((helper) => {
+ const result = helper.getRequestHandle()!;
- this.totalEntries = parseInt(
- result.getResponseHeader('x-matomo-total-results') || '0',
- 10,
- );
- this.users = result.responseJSON as User[];
+ this.totalEntries = parseInt(
+ result.getResponseHeader('x-matomo-total-results') || '0',
+ 10,
+ );
+ this.users = result.responseJSON as User[];
- this.isLoadingUsers = false;
- }).catch(() => {
- this.isLoadingUsers = false;
- });
+ this.isLoadingUsers = false;
+ })
+ .catch(() => {
+ this.isLoadingUsers = false;
+ });
},
addExistingUser() {
this.isLoadingUsers = true;
return AjaxHelper.fetch<{ value: boolean }>({
method: 'UsersManager.userExists',
userLogin: this.addNewUserLoginEmail,
- }).then((response) => {
- if (response && response.value) {
- return this.addNewUserLoginEmail;
- }
+ })
+ .then((response) => {
+ if (response && response.value) {
+ return this.addNewUserLoginEmail;
+ }
- return AjaxHelper.fetch<{ value: string }>({
- method: 'UsersManager.getUserLoginFromUserEmail',
- userEmail: this.addNewUserLoginEmail,
- }).then((r) => r.value);
- }).then((login) => (
- AjaxHelper.post(
- {
- method: 'UsersManager.setUserAccess',
- },
- {
- userLogin: login,
- access: 'view',
- idSites: this.searchParams.idSite,
- },
+ return AjaxHelper.fetch<{ value: string }>({
+ method: 'UsersManager.getUserLoginFromUserEmail',
+ userEmail: this.addNewUserLoginEmail,
+ })
+ .then((r) => r.value);
+ })
+ .then((login) => (
+ AjaxHelper.post(
+ {
+ method: 'UsersManager.setUserAccess',
+ },
+ {
+ userLogin: login,
+ access: 'view',
+ idSites: this.searchParams.idSite,
+ },
+ )
+ ))
+ .then(
+ () => this.fetchUsers(),
)
- )).then(
- () => this.fetchUsers(),
- ).catch(() => {
- this.isLoadingUsers = false;
- });
+ .catch(() => {
+ this.isLoadingUsers = false;
+ });
},
onAddNewUser() {
const parameters = { isAllowed: true };
@@ -341,7 +377,10 @@ export default defineComponent({
computed: {
actualFilterAccessLevels() {
if (this.currentUserRole === 'superuser') {
- return [...this.filterAccessLevels, { key: 'superuser', value: 'Superuser' }];
+ return [...this.filterAccessLevels, {
+ key: 'superuser',
+ value: 'Superuser',
+ }];
}
return this.filterAccessLevels;
},
diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_admin_diagnostics_configfile.png b/tests/UI/expected-screenshots/UIIntegrationTest_admin_diagnostics_configfile.png
index e3d8c426a4..98bdb933b4 100644
--- a/tests/UI/expected-screenshots/UIIntegrationTest_admin_diagnostics_configfile.png
+++ b/tests/UI/expected-screenshots/UIIntegrationTest_admin_diagnostics_configfile.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:0858300415bf7b2039c21a422276935738ba26ff1ce9a2b148b1877f6c966421
-size 5243804
+oid sha256:008aa6a040f1f59a9c8659ad5aeee95acbfcb5e977457524fe4bbfbf6d9c65e5
+size 5249954
diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_api_listing.png b/tests/UI/expected-screenshots/UIIntegrationTest_api_listing.png
index 2f573ecc28..41f430a58c 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:7498df49cc7f6b2bc105dd5231753e7862e0bece21c551c256723d4b3489d03b
-size 5075019
+oid sha256:efbe9f032b56c581b38c170c5e5b7fa74c27740d774d9a5b0fafdc2aa63ce31e
+size 5076013
diff --git a/tests/resources/OmniFixture-dump.sql b/tests/resources/OmniFixture-dump.sql
index 840d99ca7e..c49ddce62c 100644
--- a/tests/resources/OmniFixture-dump.sql
+++ b/tests/resources/OmniFixture-dump.sql
@@ -1256,7 +1256,6 @@ 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 */;
@@ -1267,7 +1266,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',null);
+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');
/*!40000 ALTER TABLE `user` ENABLE KEYS */;
UNLOCK TABLES;