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"