Hi Ferry,
I have made use of your login custom control which is very very useful thanks! I saw the post here
about extending it to replace the password change default form. I had a go at setting that up and it
was surprisingly easy to do modifying your existing code. I haven't fully fixed all the bugs yet but I
thought I'd put it here before I get too busy on something else. Hopefully this is useful for you or
someone else.
Change password custom control:
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core" dojoTheme="true"
dojoParseOnLoad="true" ><br/>
<xp:this.resources><br/>
<xp:dojoModule name="dijit.Dialog"/><br/>
<xp:dojoModule name="dijit.form.TextBox"/><br/>
<xp:dojoModule name="dijit.form.CheckBox"/><br/>
<xp:dojoModule name="dijit.form.Button"/><br/>
<xp:dojoModule name="dojo.cookie"></xp:dojoModule><br/>
</xp:this.resources><br/>
<xp:scriptBlock id="scr_ChangePassword"><br/>
<xp:this.value><![CDATA[function ChangePwd(data){<br/>
var changepwdurl = '#{javascript:compositeData.urlChangePwdNSF;}';
<br/>
// disable btnChangePassword<br/>
dojo.byId('#{id:btnChangePassword}').disabled=true;<br/>
<br/>
changepwdurl = changepwdurl.split('.nsf')[0] + '.nsf?changepassword';<br/>
<br/>
dojo.byId("divDlgMessage").display="block";<br/>
dojo.byId("divDlgMessage").style.color="black";<br/>
dojo.byId("divDlgMessage").style.backgroundColor="transparent";<br/>
dojo.byId("divDlgMessage").innerHTML = "Changing password ...";<br/>
<br/>
dojo.xhrPost({ <br/>
url: changepwdurl,<br/>
handleAs: "text",<br/>
content: {<br/>
"password" : dojo.byId('#{id:password}').value,<br/>
"passwordnew" : dojo.byId('#{id:passwordnew}').value,<br/>
"passwordconfirm" : dojo.byId('#{id:passwordconfirm}').value<br/>
},<br/>
load : function(response, data) {<br/>
var responseChgPwd = response;<br/>
responseChgPwd.toLowerCase();<br/>
<br/>
//This is checking against the default password change response. May need fixing if <br/>
//a different one is put into domcfg.nsf (I haven't checked to see if the response is <br/>
different)
if (responseChgPwd.toLowerCase().indexOf('password change request <br/>
submitted')!=-1) {
<br/>
//Change submitted<br/>
dojo.byId("divDlgMessage").display="block";<br/>
dojo.byId("divDlgMessage").style.color="green";<br/>
dojo.byId("divDlgMessage").style.backgroundColor="transparent";<br/>
dojo.byId("divDlgMessage").innerHTML = "Password successfully changed";<br/>
<br/>
//Close dialog<br/>
dojo.byId('#{id:password}').value = "";<br/>
dojo.byId('#{id:passwordnew}').value = "";<br/>
dojo.byId('#{id:passwordconfirm}').value = "";<br/>
dojo.byId('divDlgMessage').innerHTML = "";<br/>
dijit.byId('#{id:dialogChangePassword}').hide();<br/>
<br/>
} else {<br/>
<br/>
//error<br/>
dojo.byId("divDlgMessage").display="block";<br/>
dojo.byId("divDlgMessage").style.color="red";<br/>
dojo.byId("divDlgMessage").style.backgroundColor="transparent";<br/>
<br/>
if (responseChgPwd.toLowerCase().indexOf('input name' + '=\"reasontype\"')==-1) <br/>
{
// response does not have a 'reasonType' field, display default FailMessage;<br/>
dojo.byId("divDlgMessage").innerHTML = '#<br/>
{javascript:compositeData.FailMessage;}';
<br/>
}else{<br/>
<br/>
var reasonFail = <br/>
responseChgPwd.toLowerCase().substring(responseChgPwd.toLowerCase().indexOf('input
name' + '=\"reasontype\"'), (responseChgPwd.toLowerCase().indexOf('input name' +
'=\"reasontype\"') + 80));
var reasonNr = reasonFail.substring(reasonFail.indexOf('value') + 7, <br/>
(reasonFail.indexOf('value') + 8)) ;//last character will be the error
if ( reasonNr == "2") {<br/>
dojo.byId("divDlgMessage").innerHTML = '#<br/>
{javascript:compositeData.FailReason2Message;}';
}<br/>
if ( reasonNr == "3") {<br/>
dojo.byId("divDlgMessage").innerHTML = '#<br/>
{javascript:compositeData.FailReason3Message;}';
}<br/>
if ( reasonNr == "4") {<br/>
dojo.byId("divDlgMessage").innerHTML = '#<br/>
{javascript:compositeData.FailReason4Message;}';
}<br/>
if ( reasonNr == "5") {<br/>
dojo.byId("divDlgMessage").innerHTML = '#<br/>
{javascript:compositeData.FailReason5Message;}';
}<br/>
if ( reasonNr == "6") {<br/>
dojo.byId("divDlgMessage").innerHTML = '#<br/>
{javascript:compositeData.FailReason6Message;}';
}<br/>
if ( reasonNr == "7") {<br/>
dojo.byId("divDlgMessage").innerHTML = '#<br/>
{javascript:compositeData.FailReason7Message;}';
}<br/>
if ( reasonNr == "8") {<br/>
dojo.byId("divDlgMessage").innerHTML = '#<br/>
{javascript:compositeData.FailReason8Message;}';
}<br/>
if ( reasonNr == "9") {<br/>
dojo.byId("divDlgMessage").innerHTML = '#<br/>
{javascript:compositeData.FailReason9Message;}';
}<br/>
if ( reasonNr == "10") {<br/>
dojo.byId("divDlgMessage").innerHTML = '#<br/>
{javascript:compositeData.FailReason10Message;}';
}<br/>
if ( reasonNr == "11") {<br/>
dojo.byId("divDlgMessage").innerHTML = '#<br/>
{javascript:compositeData.FailReason11Message;}';
}<br/>
}<br/>
dijit.byId('#{id:btnChangePassword}').attr("disabled", false);<br/>
} <br/>
}, <br/>
error: function (error) {<br/>
alert(error);<br/>
} <br/>
}); <br/>
};]]></xp:this.value>
</xp:scriptBlock><br/>
<div dojoType="dijit.Dialog" id="dialogChangePassword"<br/>
title="#{javascript:compositeData.DialogTitle}" class="tundra"
execute="ChangePwd(arguments[0]);" style="display:none"><br/>
<br/>
<xp:table id="tableChangePassword" style="width:400px"><br/>
<xp:tr><br/>
<xp:td colspan="2" align="center"><br/>
<br/>
<br/>
<xp:br id="br3"></xp:br><br/>
</xp:td><br/>
</xp:tr><br/>
<xp:tr><br/>
<xp:td><br/>
<xp:label<br/>
id="lbl_password"<br/>
styleClass="label" value="Old password"><br/>
</xp:label><br/>
</xp:td><br/>
<xp:td><br/>
<xp:inputText id="password" style="width:200px" password="true"><br/>
<br/>
</xp:inputText><br/>
</xp:td><br/>
<br/>
<br/>
</xp:tr><br/>
<xp:tr><br/>
<xp:td><xp:label id="lbl_password_new" styleClass="label" value="New <br/>
password">
</xp:label></xp:td><br/>
<xp:td><xp:inputText id="passwordnew" password="true" style="width:200px"><br/>
<br/>
<br/>
</xp:inputText></xp:td>
<br/>
<br/>
</xp:tr><br/>
<xp:tr><br/>
<xp:td><xp:label id="lbl_password_confirm" styleClass="label" value="Confirm <br/>
password">
</xp:label></xp:td><br/>
<xp:td><br/>
<br/>
<xp:inputText id="passwordconfirm" password="true" style="width:200px"><br/>
<br/>
<xp:eventHandler event="onkeyup" submit="false"<br/>
id="eventHandler4"><br/>
<xp:this.script><![CDATA[if (thisEvent.keyCode == 13) <br/>
{
ChangePwd();<br/>
return true<br/>
}]]></xp:this.script>
</xp:eventHandler><br/>
</xp:inputText></xp:td><br/>
</xp:tr><br/>
<xp:tr><br/>
<xp:td colspan="2" align="right"><br/>
<div name="divDlgMessage" id="divDlgMessage"><br/>
<xp:br></xp:br></div><br/>
</xp:td><br/>
</xp:tr><br/>
<xp:tr><br/>
<xp:td colspan="2" align="right"><br/>
<xp:button id="btnChangePassword" dojoType="dijit.form.Button" <br/>
value="Change">
<xp:eventHandler event="onclick" submit="false"<br/>
immediate="false" save="false" id="eventHandler3"><br/>
<xp:this.script><![CDATA[ChangePwd();]]></xp:this.script><br/>
</xp:eventHandler><br/>
</xp:button><br/>
</xp:td><br/>
</xp:tr><br/>
<xp:tr><br/>
<xp:td colspan="2"><br/>
</xp:td><br/>
</xp:tr><br/>
</xp:table><br/>
</div><br/>
</xp:view>
The following need to go in the custom control Property definition
DialogTitle
urlChangePwdNSF (address book to change password against, usually/names.nsf)
FailMessage
FailReason1Message to FailReason11Message (taken from the reasontext field of the
$$ChangePasswordForm in domcfg.nsf)
Andrew Norrie