/** * @class IDU.cardoMap.BergPass.Web.Client.Controls.UserProfileForm.controller.UserProfileForm * @extends Ext.ux.app.control.Controller * Controler für das Formular der Profildaten eines Nutzers, die er ändern kann * @author Nico * @date 2014-03-28 */ Ext4.define('IDU.cardoMap.BergPass.Web.Client.Controls.UserProfileForm.controller.UserProfileForm', { extend: 'Ext.ux.app.control.Controller', models: [ 'User' ], refs: [{ ref: 'userProfileForm', selector: 'idu-cardomap-bergpass-web-client-controls-userprofileform-userprofileform' }], /** * @inheritdoc */ init: function() { this.control({ 'idu-cardomap-bergpass-web-client-controls-userprofileform-userprofileform button#reset': { 'click': this.userProfileFormResetButtonClick }, 'idu-cardomap-bergpass-web-client-controls-userprofileform-userprofileform button#save': { 'click': this.userProfileFormSaveButtonClick } }); }, /** * Handlerfunktion, wenn der Datensatz gespeichert werden soll * @param {IDU.cardoMap.BergPass.Web.Client.Controls.UserProfileForm.model.User} record User-Record zum Speichern * @param {String} [currentPassword] aktuelles Kennwort (erforderlich, wenn ein neues Kennwort gesetzt werden soll) * @private */ saveUserRecord: function(record, currentPassword) { this.application.mask(); IDU.cardoMap.BergPass.Web.Client.Controls.UserProfileForm.UserProfileFormControlRemote.AxUpdateUserData( record.getData(), currentPassword, Ext4.bind(this.onSaveUserRecord, this, [record], 0), this ); }, /** * Ajax-Callback mit durchgeschleiftem Aufrufargument */ onSaveUserRecord: function(record, res) { this.application.unmask(); if (res.error) { this.application.alertMessage( 'Problem beim Speichern', Ext4.util.Format.nl2br(res.error.Message) ); } else { this.application.showMessage( 'Änderungen gespeichert', Ext4.util.Format.nl2br(res.value) ); this.getUserProfileForm().setRecord(record); //frisch setzen, damit der Reset-Knopf sich dann auf diesen Stand bezieht und die Kennwortfelder auch wieder richtig sind } }, /** * Handlerfunktion, wenn Änderungen zurückgesetzt werden sollen * @private */ userProfileFormResetButtonClick: function() { this.application.confirm( 'Änderungen zurücksetzen', 'Änderungen im Formular zurücksetzen auf den letzten gespeicherten Stand?', function(buttonId) { if (buttonId == 'yes') this.resetUserProfileForm(); }, this ); }, /** * Setzt die Daten im Detailformular zurück */ resetUserProfileForm: function() { this.getUserProfileForm().resetForm(); }, userProfileFormSaveButtonClick: function() { var userProfileForm = this.getUserProfileForm(), form = userProfileForm.getForm(), vals = form.getFieldValues(), formIsValid = form.isValid(), recordToSave = userProfileForm.getCurrentRecord().copy(), //nicht das Original verfriemeln submitPassword = true, logInDataChanged = false; if (vals.setPasswordCheckbox) //ist der Haken drin bei "Passwort ändern"? { if (!vals.password) { formIsValid = false; form.findField("password").markInvalid("'Passwort setzen' ist aktiviert, aber es ist kein Passwort angegeben."); } if (vals.password != vals.passwordRepeated) { //errs.push("Das Passwort und die Wiederholung des Passwortes stimmen nicht überein!"); formIsValid = false; form.findField("passwordRepeated").markInvalid("Die Wiederholung des Passwortes stimmt nicht mit dem Passwort überein!"); } logInDataChanged = true; } else { //evtl. steht noch Mist im Paswort drin, aber der Haken "Passwort setzen" ist //wieder raus genommen worden, also dafür sorgen, dass es wirklich leer ist submitPassword = false; } if ((recordToSave.get("eMail") || "").toLowerCase() != (vals.eMail || "").toLowerCase()) logInDataChanged = true; if (recordToSave.get("alternativeLogInName") != vals.alternativeLogInName) logInDataChanged = true; if (logInDataChanged && !vals.currentPassword) { formIsValid = false; form.findField("currentPassword").markInvalid("Sie müssen das bisherige Kennwort angeben, wenn Sie die E-Mail-Adresse, den Anmeldenamen oder Ihr Passwort ändern."); } if (!formIsValid) { var posY = userProfileForm.body.getY(); if (Ext4.getBody().getScrollTop() > posY) { //das machen wir, damit auf kleinen Bildschirmen die ErrMsg garantiert zu sehen sind //Ext4.getBody().setScrollTop(0); //Heul - warum geht'n das Zeug immer nicht if (document.documentElement && document.documentElement.scrollTop) document.documentElement.scrollTop = posY; } } else { form.updateRecord(recordToSave); if (!submitPassword) recordToSave.set("password", null); this.saveUserRecord(recordToSave, logInDataChanged ? vals.currentPassword : null); } } });