File indexing completed on 2024-05-26 05:05:31
0001 /* 0002 SPDX-FileCopyrightText: 2021-2024 Laurent Montel <montel@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 #include "administratoradduserwidget.h" 0007 #include "misc/rolescombobox.h" 0008 #include "rocketchataccount.h" 0009 #include "user.h" 0010 #include <KAuthorized> 0011 #include <KLineEditEventHandler> 0012 #include <KLocalizedString> 0013 #include <KPasswordLineEdit> 0014 #include <QCheckBox> 0015 #include <QFormLayout> 0016 #include <QLineEdit> 0017 #include <QPlainTextEdit> 0018 0019 AdministratorAddUserWidget::AdministratorAddUserWidget(RocketChatAccount *account, QWidget *parent) 0020 : QWidget(parent) 0021 , mName(new QLineEdit(this)) 0022 , mUserName(new QLineEdit(this)) 0023 , mStatusText(new QLineEdit(this)) 0024 , mEmail(new QLineEdit(this)) 0025 , mNickName(new QLineEdit(this)) 0026 , mPasswordLineEdit(new KPasswordLineEdit(this)) 0027 , mJoinDefaultChannels(new QCheckBox(i18n("Join Default Channels"), this)) 0028 , mSendWelcomeEmails(new QCheckBox(i18n("Send Welcome Email"), this)) 0029 , mRequirePasswordChange(new QCheckBox(i18n("Require Password Change"), this)) 0030 , mSetRandowPassword(new QCheckBox(i18n("Set random password and send by email"), this)) 0031 , mEmailVerified(new QCheckBox(i18n("Verified"), this)) 0032 , mRolesComboBox(new RolesComboBox(this)) 0033 , mBioPlainTextEdit(new QPlainTextEdit(this)) 0034 , mRocketChatAccount(account) 0035 { 0036 auto formLayout = new QFormLayout(this); 0037 formLayout->setObjectName(QStringLiteral("formLayout")); 0038 mName->setObjectName(QStringLiteral("mName")); 0039 mUserName->setObjectName(QStringLiteral("mUserName")); 0040 mEmail->setObjectName(QStringLiteral("mEmail")); 0041 mStatusText->setObjectName(QStringLiteral("mStatusText")); 0042 mBioPlainTextEdit->setObjectName(QStringLiteral("mBioPlainTextEdit")); 0043 mNickName->setObjectName(QStringLiteral("mNickName")); 0044 KLineEditEventHandler::catchReturnKey(mName); 0045 KLineEditEventHandler::catchReturnKey(mUserName); 0046 KLineEditEventHandler::catchReturnKey(mEmail); 0047 KLineEditEventHandler::catchReturnKey(mStatusText); 0048 KLineEditEventHandler::catchReturnKey(mNickName); 0049 0050 mJoinDefaultChannels->setObjectName(QStringLiteral("mJoinDefaultChannels")); 0051 mSendWelcomeEmails->setObjectName(QStringLiteral("mSendWelcomeEmails")); 0052 mPasswordLineEdit->setObjectName(QStringLiteral("mPasswordLineEdit")); 0053 mPasswordLineEdit->setRevealPasswordAvailable(KAuthorized::authorize(QStringLiteral("lineedit_reveal_password"))); 0054 mRolesComboBox->setObjectName(QStringLiteral("mRolesComboBox")); 0055 mRequirePasswordChange->setObjectName(QStringLiteral("mRequirePassword")); 0056 mSetRandowPassword->setObjectName(QStringLiteral("mSetRandowPassword")); 0057 mEmailVerified->setObjectName(QStringLiteral("mEmailVerified")); 0058 formLayout->addRow(i18n("Name:"), mName); 0059 formLayout->addRow(i18n("Username:"), mUserName); 0060 formLayout->addRow(i18n("Status Message:"), mStatusText); 0061 formLayout->addRow(i18n("Email:"), mEmail); 0062 formLayout->addWidget(mEmailVerified); 0063 formLayout->addRow(i18n("Password:"), mPasswordLineEdit); 0064 formLayout->addRow(i18n("Bio:"), mBioPlainTextEdit); 0065 formLayout->addRow(i18n("Nickname:"), mNickName); 0066 formLayout->addWidget(mJoinDefaultChannels); 0067 formLayout->addWidget(mSendWelcomeEmails); 0068 formLayout->addWidget(mRequirePasswordChange); 0069 formLayout->addWidget(mSetRandowPassword); 0070 formLayout->addRow(i18n("Roles:"), mRolesComboBox); 0071 connect(mName, &QLineEdit::textChanged, this, &AdministratorAddUserWidget::slotUpdateOkButton); 0072 connect(mUserName, &QLineEdit::textChanged, this, &AdministratorAddUserWidget::slotUpdateOkButton); 0073 connect(mEmail, &QLineEdit::textChanged, this, &AdministratorAddUserWidget::slotUpdateOkButton); 0074 connect(mPasswordLineEdit, &KPasswordLineEdit::passwordChanged, this, &AdministratorAddUserWidget::slotUpdateOkButton); 0075 connect(mSetRandowPassword, &QCheckBox::clicked, this, &AdministratorAddUserWidget::slotChangeSetRandomPassword); 0076 } 0077 0078 AdministratorAddUserWidget::~AdministratorAddUserWidget() = default; 0079 0080 void AdministratorAddUserWidget::slotChangeSetRandomPassword(bool checked) 0081 { 0082 mRequirePasswordChange->setChecked(checked); 0083 mRequirePasswordChange->setEnabled(!checked); 0084 mPasswordLineEdit->setEnabled(!checked); 0085 slotUpdateOkButton(); 0086 } 0087 0088 void AdministratorAddUserWidget::slotUpdateOkButton() 0089 { 0090 bool enableOkButton = !mName->text().trimmed().isEmpty() && !mUserName->text().trimmed().isEmpty() && !mEmail->text().trimmed().isEmpty(); 0091 if (mUserType == UserType::Create) { 0092 if (mPasswordLineEdit->isEnabled()) { 0093 enableOkButton &= !mPasswordLineEdit->password().isEmpty(); 0094 } 0095 } 0096 Q_EMIT updateButtonOk(enableOkButton); 0097 } 0098 0099 RocketChatRestApi::UpdateUserInfo AdministratorAddUserWidget::updateInfo() const 0100 { 0101 RocketChatRestApi::UpdateUserInfo info; 0102 info.mName = mName->text().trimmed(); 0103 info.mEmail = mEmail->text().trimmed(); 0104 info.mUserName = mUserName->text(); 0105 info.mSendWelcomeEmail = mSendWelcomeEmails->isChecked(); 0106 info.mJoinDefaultChannels = mJoinDefaultChannels->isChecked(); 0107 info.mPassword = mPasswordLineEdit->password(); 0108 info.mStatusText = mStatusText->text().trimmed(); 0109 0110 info.mRequirePasswordChange = mRequirePasswordChange->isChecked(); 0111 info.mSetRandomPassword = mSetRandowPassword->isChecked(); 0112 info.mRoles = mRolesComboBox->roles(); 0113 info.mBio = mBioPlainTextEdit->toPlainText(); 0114 info.mVerified = mEmailVerified->isChecked(); 0115 info.mNickName = mNickName->text().trimmed(); 0116 return info; 0117 } 0118 0119 void AdministratorAddUserWidget::setRoleInfo(const QVector<RoleInfo> &info) 0120 { 0121 mRolesComboBox->setRolesInfo(info); 0122 } 0123 0124 RocketChatRestApi::CreateUpdateUserInfo AdministratorAddUserWidget::createInfo() const 0125 { 0126 RocketChatRestApi::CreateUpdateUserInfo info; 0127 info.mName = mName->text().trimmed(); 0128 info.mEmail = mEmail->text().trimmed(); 0129 info.mUserName = mUserName->text(); 0130 info.mStatusText = mStatusText->text().trimmed(); 0131 info.mSendWelcomeEmail = mSendWelcomeEmails->isChecked(); 0132 info.mJoinDefaultChannels = mJoinDefaultChannels->isChecked(); 0133 if (mRocketChatAccount && mRocketChatAccount->hasPermission(QStringLiteral("edit-other-user-password"))) { 0134 info.mPassword = mPasswordLineEdit->password(); 0135 } 0136 info.mRequirePasswordChange = mRequirePasswordChange->isChecked(); 0137 info.mSetRandomPassword = mSetRandowPassword->isChecked(); 0138 info.mRoles = mRolesComboBox->roles(); 0139 info.mBio = mBioPlainTextEdit->toPlainText(); 0140 info.mVerified = mEmailVerified->isChecked(); 0141 info.mNickName = mNickName->text().trimmed(); 0142 return info; 0143 } 0144 0145 void AdministratorAddUserWidget::setUser(const User &user) 0146 { 0147 mUserType = UserType::Edit; 0148 mName->setText(user.name()); 0149 mUserName->setText(user.userName()); 0150 mEmail->setText(user.userEmailsInfo().email); 0151 mRolesComboBox->setRoles(user.roles()); 0152 mStatusText->setText(user.statusText()); 0153 mSetRandowPassword->setChecked(user.requirePasswordChange()); 0154 mBioPlainTextEdit->setPlainText(user.bio()); 0155 mNickName->setText(user.nickName()); 0156 mRequirePasswordChange->setChecked(user.requirePasswordChange()); 0157 mEmailVerified->setChecked(user.userEmailsInfo().verified); 0158 0159 // mSetRandowPassword 0160 // TODO add mSendWelcomeEmail and mJoinDefaultChannels 0161 // mJoinDefaultChannels->setChecked(user.jo) 0162 if (mRocketChatAccount) { 0163 mPasswordLineEdit->setEnabled(mRocketChatAccount->hasPermission(QStringLiteral("edit-other-user-password"))); 0164 } 0165 } 0166 0167 #include "moc_administratoradduserwidget.cpp"