summaryrefslogtreecommitdiffstats
path: root/src/userconfigdlg.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/userconfigdlg.cpp')
-rw-r--r--src/userconfigdlg.cpp58
1 files changed, 58 insertions, 0 deletions
diff --git a/src/userconfigdlg.cpp b/src/userconfigdlg.cpp
index 32fad5f..b731f13 100644
--- a/src/userconfigdlg.cpp
+++ b/src/userconfigdlg.cpp
@@ -41,10 +41,12 @@
#include <kdatetimewidget.h>
#include <kpassdlg.h>
#include <kiconloader.h>
+#include <kmdcodec.h>
#include <ksslcertificate.h>
#include "ldapmgr.h"
#include "userconfigdlg.h"
+#include "chfacedlg.h"
UserConfigDialog::UserConfigDialog(LDAPUserInfo user, LDAPConfig* parent, const char* name)
: KDialogBase(parent, name, true, i18n("LDAP User Properties"), Ok|Cancel, Ok, true), m_user(user), m_ldapconfig(parent)
@@ -77,6 +79,8 @@ UserConfigDialog::UserConfigDialog(LDAPUserInfo user, LDAPConfig* parent, const
connect(m_base->passwordExpireDisabled, TQ_SIGNAL(clicked()), this, TQ_SLOT(processLockouts()));
connect(m_base->requirePasswordAging, TQ_SIGNAL(clicked()), this, TQ_SLOT(processLockouts()));
connect(m_base->requirePasswordMinAge, TQ_SIGNAL(clicked()), this, TQ_SLOT(processLockouts()));
+ connect(m_base->changeAvatar, TQ_SIGNAL(clicked()), this, TQ_SLOT(changeAvatar()));
+ connect(m_base->clearAvatar, TQ_SIGNAL(clicked()), this, TQ_SLOT(clearAvatar()));
connect(m_base->primaryGroup, TQ_SIGNAL(activated(const TQString&)), this, TQ_SLOT(processLockouts()));
connect(m_base->certGenPrivateKey, TQ_SIGNAL(clicked()), this, TQ_SLOT(processLockouts()));
connect(m_base->certPrivateKeyFileName, TQ_SIGNAL(textChanged(const TQString&)), this, TQ_SLOT(processLockouts()));
@@ -145,6 +149,14 @@ UserConfigDialog::UserConfigDialog(LDAPUserInfo user, LDAPConfig* parent, const
m_base->telephoneNumber->setText(m_user.telephoneNumber);
m_base->faxNumber->setText(m_user.faxNumber);
m_base->email->setText(m_user.email);
+ if (!m_user.profileAvatar.isNull()) {
+ TQPixmap pixmapAvatar;
+ pixmapAvatar.loadFromData(m_user.profileAvatar);
+ if (!pixmapAvatar.isNull()) {
+ m_profileAvatar = pixmapAvatar;
+ m_base->changeAvatar->setPixmap(m_profileAvatar);
+ }
+ }
// Certificate generation information
TQDateTime suggestedExpiration = TQDateTime::currentDateTime().addDays(KERBEROS_PKI_KRB_EXPIRY_DAYS);
@@ -322,6 +334,52 @@ void UserConfigDialog::processLockouts() {
m_prevPrimaryGroup = m_base->primaryGroup->currentText();
}
+void UserConfigDialog::setNewAvatar(const TQPixmap &pix) {
+ if (pix.isNull()) {
+ KMessageBox::sorry(this, i18n("There was an error loading the image."));
+ return;
+ }
+
+ TQByteArray rawImage;
+ TQBuffer imageBuffer(rawImage);
+ imageBuffer.open(IO_WriteOnly);
+ // NOTE:
+ // While the LDAP attribute technically specifies JPEG, in practice compatibility has improved to include PNG
+ // with later versions of Microsoft software (e.g., the thumbnailPhoto aliased attribute)
+ // JPEG does not store alpha channel information, which causes ugly graphical artifacts
+ // Use PNG, even though it is in technical violation of the LDAP standards, for an improved user experience
+ if (!pix.save(&imageBuffer, "PNG")) {
+ KMessageBox::sorry(this, i18n("There was an error preparing the image."));
+ }
+ imageBuffer.close();
+ m_user.profileAvatar = rawImage;
+
+ m_profileAvatar = pix;
+ m_base->changeAvatar->setPixmap(m_profileAvatar);
+}
+
+void UserConfigDialog::changeAvatar() {
+ ChFaceDlg* avatarPickerDialog = new ChFaceDlg( TDEGlobal::dirs()->resourceDirs("data").last() + "/tdm/pics/users/" );
+
+ if (avatarPickerDialog->exec() == TQDialog::Accepted && !avatarPickerDialog->getFaceImage().isNull()) {
+ setNewAvatar(avatarPickerDialog->getFaceImage());
+ }
+
+ delete avatarPickerDialog;
+
+ processLockouts();
+}
+
+void UserConfigDialog::clearAvatar() {
+ TQPixmap nullPixmap;
+
+ m_user.profileAvatar = TQByteArray();
+ m_profileAvatar = nullPixmap;
+ m_base->changeAvatar->setPixmap(m_profileAvatar);
+
+ processLockouts();
+}
+
void UserConfigDialog::createPKICertificate() {
int ret;
TQString errorstring;