Commit 9fc4cbe7 by chenith

Updated email Change option in admin portal.

parent 7782f6ac
...@@ -6,6 +6,7 @@ import oneit.components.ParticipantInitialisationContext; ...@@ -6,6 +6,7 @@ import oneit.components.ParticipantInitialisationContext;
import oneit.email.ConfigurableArticleTemplateEmailer; import oneit.email.ConfigurableArticleTemplateEmailer;
import oneit.logging.LogLevel; import oneit.logging.LogLevel;
import oneit.logging.LogMgr; import oneit.logging.LogMgr;
import oneit.objstore.ObjectTransaction;
import oneit.objstore.StorageException; import oneit.objstore.StorageException;
import oneit.objstore.parser.BusinessObjectParser; import oneit.objstore.parser.BusinessObjectParser;
import oneit.security.SecUser; import oneit.security.SecUser;
...@@ -15,6 +16,7 @@ import oneit.servlets.forms.SuccessfulResult; ...@@ -15,6 +16,7 @@ import oneit.servlets.forms.SuccessfulResult;
import oneit.servlets.process.ORMProcessState; import oneit.servlets.process.ORMProcessState;
import oneit.servlets.process.SaveFP; import oneit.servlets.process.SaveFP;
import oneit.utils.BusinessException; import oneit.utils.BusinessException;
import oneit.utils.CollectionUtils;
import oneit.utils.InitialisationException; import oneit.utils.InitialisationException;
import oneit.utils.MultiException; import oneit.utils.MultiException;
import oneit.utils.StringUtils; import oneit.utils.StringUtils;
...@@ -37,32 +39,44 @@ public class SaveUserDetailsFP extends SaveFP ...@@ -37,32 +39,44 @@ public class SaveUserDetailsFP extends SaveFP
SecUser oldSecUser = (SecUser) secUser.getEarliestBackup(); SecUser oldSecUser = (SecUser) secUser.getEarliestBackup();
if(oldSecUser != null && !oldSecUser.getUserName().equals(secUser.getUserName())) if(oldSecUser != null)
{ {
if(companyUser.getConfirmPassword() == null) if(!companyUser.isLoggedViaSocial() && !CollectionUtils.equals(oldSecUser.getUserName(), secUser.getUserName()))
{ {
submission.getRequest().setAttribute("EmailChanged", true); if(companyUser.getConfirmPassword() == null)
return RedisplayResult.getInstance();
}
else
{
boolean validPassword = secUser.checkPassword(companyUser.getConfirmPassword());
if(!validPassword)
{ {
submission.getRequest().setAttribute("EmailChanged", false); submission.getRequest().setAttribute("EmailChanged", true);
companyUser.setConfirmPassword(null); return RedisplayResult.getInstance();
} }
else
BusinessObjectParser.assertFieldCondition(validPassword, companyUser, CompanyUser.FIELD_ConfirmPassword, "passwordNotMatch");
if(validPassword)
{ {
companyUser.setIsAccountVerified(Boolean.FALSE); boolean validPassword = secUser.checkPassword(companyUser.getConfirmPassword());
Utils.sendVerificationMail(companyUser, request, emailer, SaveUserDetailsFP.class.getName()); if(!validPassword)
{
submission.getRequest().setAttribute("EmailChanged", false);
companyUser.setConfirmPassword(null);
}
BusinessObjectParser.assertFieldCondition(validPassword, companyUser, CompanyUser.FIELD_ConfirmPassword, "passwordNotMatch");
if(validPassword)
{
companyUser.setIsAccountVerified(Boolean.FALSE);
Utils.sendEmailChangedMail(companyUser, request, emailer, SaveUserDetailsFP.class.getName());
}
} }
} }
else if (companyUser.isLoggedViaSocial() && !CollectionUtils.equals(oldSecUser.getEmail(), secUser.getEmail()))
{
//send email verification mail
LogMgr.log(CompanyUser.LOG, LogLevel.PROCESSING1,"Sending email resetted mail", companyUser );
Utils.sendEmailChangedMail(companyUser, request, emailer, SaveUserDetailsFP.class.getName());
companyUser.setIsAccountVerified(Boolean.FALSE);
}
} }
return super.processForm(process, submission, params); return super.processForm(process, submission, params);
...@@ -76,7 +90,16 @@ public class SaveUserDetailsFP extends SaveFP ...@@ -76,7 +90,16 @@ public class SaveUserDetailsFP extends SaveFP
CompanyUser companyUser = (CompanyUser) request.getAttribute("CompanyUser"); CompanyUser companyUser = (CompanyUser) request.getAttribute("CompanyUser");
SecUser secUser = companyUser.getUser(); SecUser secUser = companyUser.getUser();
BusinessObjectParser.assertFieldCondition(StringUtils.isEmailAddress(secUser.getUserName()), secUser, SecUser.FIELD_Email, "invalid", exceptions, true, request); if(!companyUser.isLoggedViaSocial())
{
BusinessObjectParser.assertFieldCondition(StringUtils.isEmailAddress(secUser.getUserName()), secUser, SecUser.FIELD_Email, "invalid", exceptions, true, request);
BusinessObjectParser.assertFieldCondition(!isCompanyUserEmailFound(secUser.getTransaction(), secUser.getUserName(), companyUser), secUser, SecUser.FIELD_UserName, "emailExists", exceptions, true, request);
}
else
{
BusinessObjectParser.assertFieldCondition(!isCompanyUserEmailFound(secUser.getTransaction(), secUser.getEmail(), companyUser), secUser, SecUser.FIELD_Email, "emailExists", exceptions, true, request);
}
BusinessObjectParser.assertFieldCondition(secUser.getFirstName()!= null, secUser, SecUser.FIELD_FirstName, "mandatory", exceptions, true, request); BusinessObjectParser.assertFieldCondition(secUser.getFirstName()!= null, secUser, SecUser.FIELD_FirstName, "mandatory", exceptions, true, request);
BusinessObjectParser.assertFieldCondition(secUser.getLastName()!= null, secUser, SecUser.FIELD_LastName, "mandatory", exceptions, true, request); BusinessObjectParser.assertFieldCondition(secUser.getLastName()!= null, secUser, SecUser.FIELD_LastName, "mandatory", exceptions, true, request);
...@@ -91,4 +114,25 @@ public class SaveUserDetailsFP extends SaveFP ...@@ -91,4 +114,25 @@ public class SaveUserDetailsFP extends SaveFP
emailer = (ConfigurableArticleTemplateEmailer) (context.getSingleChild("AccountVerificationEmailer")); emailer = (ConfigurableArticleTemplateEmailer) (context.getSingleChild("AccountVerificationEmailer"));
} }
private static Boolean isCompanyUserEmailFound(ObjectTransaction objTran, String email, CompanyUser currentUser)
{
if(email!=null)
{
SecUser user = SecUser.searchNAME(objTran, email.toLowerCase());
if(user!=null)
{
CompanyUser comUser = user.getExtension(CompanyUser.REFERENCE_CompanyUser);
if(comUser!=null && !CollectionUtils.equals(comUser, currentUser))
{
return Boolean.TRUE;
}
}
}
return Boolean.FALSE;
}
} }
\ No newline at end of file
...@@ -141,7 +141,7 @@ public class SendCompanyUserInvitesFP extends ORMProcessFormProcessor ...@@ -141,7 +141,7 @@ public class SendCompanyUserInvitesFP extends ORMProcessFormProcessor
Map defaultParams = CollectionUtils.EMPTY_MAP; Map defaultParams = CollectionUtils.EMPTY_MAP;
ObjectTransform transform = Utils.createCompoundTransform(defaultParams, companyUser); ObjectTransform transform = Utils.createCompoundTransform(defaultParams, companyUser);
Utils.sendMail(emailer, transform, new String[]{companyUser.getUser().getUserName()}, null, companyUser); Utils.sendMail(emailer, transform, new String[]{companyUser.getEmailAddressFromUser()}, null, companyUser);
LogMgr.log(LOG, LogLevel.PROCESSING1, "Sent Account Created mail successfully from " + SendCompanyUserInvitesFP.class + " to :: ", companyUser); LogMgr.log(LOG, LogLevel.PROCESSING1, "Sent Account Created mail successfully from " + SendCompanyUserInvitesFP.class + " to :: ", companyUser);
} }
...@@ -176,7 +176,7 @@ public class SendCompanyUserInvitesFP extends ORMProcessFormProcessor ...@@ -176,7 +176,7 @@ public class SendCompanyUserInvitesFP extends ORMProcessFormProcessor
Map defaultParams = CollectionUtils.mapEntry("link", link).toMap(); Map defaultParams = CollectionUtils.mapEntry("link", link).toMap();
ObjectTransform transform = Utils.createCompoundTransform(defaultParams, companyUser); ObjectTransform transform = Utils.createCompoundTransform(defaultParams, companyUser);
Utils.sendMail(invitationEmailer, transform, new String[]{companyUser.getUser().getEmail()}, null, companyUser); Utils.sendMail(invitationEmailer, transform, new String[]{companyUser.getEmailAddressFromUser()}, null, companyUser);
LogMgr.log(LOG, LogLevel.PROCESSING1, "Sent invitation mail successfully from " + SendVerificationMailFP.class + " to :: ", companyUser); LogMgr.log(LOG, LogLevel.PROCESSING1, "Sent invitation mail successfully from " + SendVerificationMailFP.class + " to :: ", companyUser);
} }
......
...@@ -137,7 +137,7 @@ public class SendUserInvitationFP extends SaveFP ...@@ -137,7 +137,7 @@ public class SendUserInvitationFP extends SaveFP
Map defaultParams = CollectionUtils.mapEntry("link", link).toMap(); Map defaultParams = CollectionUtils.mapEntry("link", link).toMap();
ObjectTransform transform = Utils.createCompoundTransform(defaultParams, companyUser); ObjectTransform transform = Utils.createCompoundTransform(defaultParams, companyUser);
Utils.sendMail(invitationEmailer, transform, new String[]{companyUser.getUser().getUserName()}, null, companyUser); Utils.sendMail(invitationEmailer, transform, new String[]{companyUser.getEmailAddressFromUser()}, null, companyUser);
LogMgr.log(LOG, LogLevel.PROCESSING1, "Sent invitation mail successfully from " + SendUserInvitationFP.class + " to :: ", companyUser); LogMgr.log(LOG, LogLevel.PROCESSING1, "Sent invitation mail successfully from " + SendUserInvitationFP.class + " to :: ", companyUser);
} }
......
...@@ -159,7 +159,7 @@ public class VerifyCompanyUserFP extends ORMProcessFormProcessor ...@@ -159,7 +159,7 @@ public class VerifyCompanyUserFP extends ORMProcessFormProcessor
Map defaultParams = CollectionUtils.EMPTY_MAP; Map defaultParams = CollectionUtils.EMPTY_MAP;
ObjectTransform transform = Utils.createCompoundTransform(defaultParams, companyUser); ObjectTransform transform = Utils.createCompoundTransform(defaultParams, companyUser);
Utils.sendMail(emailer, transform, new String[]{companyUser.getUser().getUserName()}, null, companyUser); Utils.sendMail(emailer, transform, new String[]{companyUser.getEmailAddressFromUser()}, null, companyUser);
LogMgr.log(LOG, LogLevel.PROCESSING1, "Sent Account Created mail successfully from " + VerifyCompanyUserFP.class + " to :: ", companyUser); LogMgr.log(LOG, LogLevel.PROCESSING1, "Sent Account Created mail successfully from " + VerifyCompanyUserFP.class + " to :: ", companyUser);
} }
......
...@@ -100,4 +100,17 @@ public class CompanyUser extends BaseCompanyUser ...@@ -100,4 +100,17 @@ public class CompanyUser extends BaseCompanyUser
return Boolean.FALSE; return Boolean.FALSE;
} }
public String getEmailAddressFromUser()
{
return StringUtils.isEmailAddress(getUser().getUserName()) ? getUser().getUserName() : getUser().getEmail();
}
public Boolean isLoggedViaSocial()
{
return !StringUtils.isEmailAddress(getUser().getUserName());
}
} }
\ No newline at end of file
...@@ -97,7 +97,7 @@ public class PerformaOAuthCallbackDecorator implements ServletDecorator, Initial ...@@ -97,7 +97,7 @@ public class PerformaOAuthCallbackDecorator implements ServletDecorator, Initial
{ {
Company company = Company.createCompany(transaction); Company company = Company.createCompany(transaction);
company.setCompanyName(" "); company.setCompanyName("");
company.setAddedByUser(companyUser); company.setAddedByUser(companyUser);
company.addToUsers(companyUser); company.addToUsers(companyUser);
......
...@@ -426,7 +426,46 @@ public class Utils ...@@ -426,7 +426,46 @@ public class Utils
Map defaultParams = CollectionUtils.mapEntry("link", link).toMap(); Map defaultParams = CollectionUtils.mapEntry("link", link).toMap();
ObjectTransform transform = Utils.createCompoundTransform(defaultParams, companyUser); ObjectTransform transform = Utils.createCompoundTransform(defaultParams, companyUser);
Utils.sendMail(emailer, transform, new String[]{companyUser.getUser().getEmail()}, null, companyUser); Utils.sendMail(emailer, transform, new String[]{companyUser.getEmailAddressFromUser()}, null, companyUser);
LogMgr.log(CompanyUser.LOG, LogLevel.PROCESSING1, "Sent verification mail successfully from " + callingClass + " to :: ", companyUser);
}
catch (ConfigurableEmailerException ex)
{
LogMgr.log(CompanyUser.LOG, LogLevel.SYSTEMERROR1, ex, "Error occured while sending mail for Candidate :: " + companyUser);
throw new BusinessException("We are unable to send mail. Please try again or contact Talentology for more details.");
}
}
else
{
LogMgr.log(CompanyUser.LOG, LogLevel.PROCESSING1, "Call from " + callingClass + ". Account is already verified for candidate :: ", companyUser);
}
}
public static void sendEmailChangedMail(CompanyUser companyUser, HttpServletRequest request, ConfigurableArticleTemplateEmailer emailer, String callingClass) throws BusinessException
{
if(!CollectionUtils.equals(companyUser.getIsAccountVerified(), Boolean.TRUE))
{
try
{
LogMgr.log(CompanyUser.LOG, LogLevel.PROCESSING1, "Sending verification mail from " + callingClass + " to :: ", companyUser);
RandomStringGen random = new RandomStringGen();
//set verification key and send mail time
companyUser.setVerificationKey(random.generateAlphaNum(6));
companyUser.setVerificationMailSendDate(new Date());
String link = LoopbackHTTP.getRemoteAccessURL(request)
+ "/extensions/adminportal/email_verified.jsp"
+ "?id=" + companyUser.getID()
+ "&key=" + companyUser.getVerificationKey();
Map defaultParams = CollectionUtils.mapEntry("link", link).toMap();
ObjectTransform transform = Utils.createCompoundTransform(defaultParams, companyUser);
Utils.sendMail(emailer, transform, new String[]{companyUser.getEmailAddressFromUser()}, null, companyUser);
LogMgr.log(CompanyUser.LOG, LogLevel.PROCESSING1, "Sent verification mail successfully from " + callingClass + " to :: ", companyUser); LogMgr.log(CompanyUser.LOG, LogLevel.PROCESSING1, "Sent verification mail successfully from " + callingClass + " to :: ", companyUser);
} }
......
...@@ -44,7 +44,7 @@ ...@@ -44,7 +44,7 @@
<InvitationEmailer factory="Participant" class="oneit.email.ConfigurableArticleTemplateEmailer" templateShortcut="InvitationMail"/> <InvitationEmailer factory="Participant" class="oneit.email.ConfigurableArticleTemplateEmailer" templateShortcut="InvitationMail"/>
</FORM> </FORM>
<FORM name="*.saveUserDetails" factory="Participant" class="performa.form.SaveUserDetailsFP"> <FORM name="*.saveUserDetails" factory="Participant" class="performa.form.SaveUserDetailsFP">
<AccountVerificationEmailer factory="Participant" class="oneit.email.ConfigurableArticleTemplateEmailer" templateShortcut="CompanyAccountVerificationMail"/> <AccountVerificationEmailer factory="Participant" class="oneit.email.ConfigurableArticleTemplateEmailer" templateShortcut="EmailChangedMail"/>
</FORM> </FORM>
<FORM name="*.resendVerification" factory="Participant" class="performa.form.ResendVerificationFP"> <FORM name="*.resendVerification" factory="Participant" class="performa.form.ResendVerificationFP">
<AccountVerificationEmailer factory="Participant" class="oneit.email.ConfigurableArticleTemplateEmailer" templateShortcut="CompanyAccountVerificationMail"/> <AccountVerificationEmailer factory="Participant" class="oneit.email.ConfigurableArticleTemplateEmailer" templateShortcut="CompanyAccountVerificationMail"/>
...@@ -101,6 +101,10 @@ ...@@ -101,6 +101,10 @@
<INHERITS factory="Named" nodename="CoreORMAdminNoPriv"/> <INHERITS factory="Named" nodename="CoreORMAdminNoPriv"/>
</NODE> </NODE>
<NODE name="email_verified_jsp" factory="Participant">
<INHERITS factory="Named" nodename="CoreORMAdminNoPriv"/>
</NODE>
<NODE name="ORMErrorConfig::ADMIN_PORTAL" factory="Participant" class="oneit.servlets.forms.ErrorReportConfig"> <NODE name="ORMErrorConfig::ADMIN_PORTAL" factory="Participant" class="oneit.servlets.forms.ErrorReportConfig">
<format item="field.*.error.pageHeader_performa_errorPrefix"> <format item="field.*.error.pageHeader_performa_errorPrefix">
<![CDATA[<div class="error-message message-common"><img src="${contextRoot}/images/error-alert.png" class="alert-icon" /><span class="message-txt" style="font-weight: bold">${translateLabel:Errors_Occurred:Errors occurred, please correct them and try again}</span><br/>]]> <![CDATA[<div class="error-message message-common"><img src="${contextRoot}/images/error-alert.png" class="alert-icon" /><span class="message-txt" style="font-weight: bold">${translateLabel:Errors_Occurred:Errors occurred, please correct them and try again}</span><br/>]]>
......
<%@ page extends="oneit.servlets.jsp.FormJSP" %>
<%@ include file="/setuprequest.jsp" %>
<%@ include file="/inc/stdimports50.jsp" %><%-- This is in cougar --%>
<%@ include file="/extensions/performa/inc/stdimports.jsp" %>
<%! protected String getName (ServletConfig config) { return "email_verified_jsp"; } %>
<%@ include file="inc/htmlheader_nopriv.jsp" %>
<%
ORMProcessState process = (ORMProcessState) ProcessDecorator.getDefaultProcess(request);
ObjectTransaction objTran = process.getTransaction ();
%>
Email verified!
<%@ include file="inc/htmlfooter_nopriv.jsp" %>
\ No newline at end of file
...@@ -53,17 +53,29 @@ ...@@ -53,17 +53,29 @@
</div> </div>
<div class="form-group"> <div class="form-group">
<label><oneit:label GUIName="Email Address" /></label> <label><oneit:label GUIName="Email Address" /></label>
<oneit:ormInput obj="<%= loggedInUser %>" type="text" attributeName="UserName" cssClass="form-control" />
<% <%
if(companyUser.isLoggedViaSocial())
{
%>
<oneit:ormInput obj="<%= loggedInUser %>" type="text" attributeName="Email" cssClass="form-control" />
<%
}
else
{
%>
<oneit:ormInput obj="<%= loggedInUser %>" type="text" attributeName="UserName" cssClass="form-control" />
<% }
if(!CollectionUtils.equals(companyUser.getIsAccountVerified(), Boolean.TRUE)) if(!CollectionUtils.equals(companyUser.getIsAccountVerified(), Boolean.TRUE))
{ {
%> %>
<div class="email-verify">Email address not yet verified. <div class="email-verify">Email address not yet verified.
<oneit:button value=" " name="resendVerification" skin="link" cssClass="email-verify-link" <oneit:button value=" " name="resendVerification" skin="link" cssClass="email-verify-link"
requestAttribs="<%= CollectionUtils.mapEntry("CompanyUser", companyUser) requestAttribs="<%= CollectionUtils.mapEntry("CompanyUser", companyUser)
.mapEntry("nextPage", nextPage) .mapEntry("nextPage", nextPage)
.mapEntry(NotificationUtils.NOTIFICATION_MSG_PARAM, "emailSent") .mapEntry(NotificationUtils.NOTIFICATION_MSG_PARAM, "emailSent")
.toMap() %>"> .toMap() %>">
Resend verification email Resend verification email
</oneit:button> </oneit:button>
</div> </div>
......
<?xml version="1.0" encoding="UTF-8"?>
<!-- @AutoRun -->
<OBJECTS xmlns:oneit="http://www.1iT.com.au" name="">
<NODE factory="Vector" name="Script"><NODE class="oneit.appservices.upgrade.cms.CMSArticleUpdateOperation" factory="Participant" name="Email Changed Mail">
<createSpecificIdentifier factory='String' value='180CNU1NHZCIJRIAM7PWFGKDEHD5QQ'/>
<articleIdentifiers factory="Array" class="java.lang.String">
<NODE factory="String" value="180CNU1NHZCIJRIAM7PWFGKDEHD5QQ"/>
</articleIdentifiers>
<createdLabel factory="String" value="180CNU1NHZCIJRIAM7PWFGKDEHD5QQ"/>
<newParentCategory factory="String" value="RESOURCE_LIBRARY"/>
<articleAttributeChanges factory="Map">
<NODE name="EmailTo" factory="Null"/>
<NODE name="EmailFrom" factory="String" value="help@talentology.com"/>
<NODE name="EmailSubject" factory="String" value="Email address changed"/>
<NODE name="Shortcuts" factory="String" value="EmailChangedMail"/>
<NODE name="EmailCC" factory="Null"/>
<NODE name="EmailBCC" factory="Null"/>
</articleAttributeChanges>
<ormAttributeChanges factory="Map">
<NODE name="PublishDate" factory="Date" value="2016-02-05 00:00:00"/>
<NODE name="WithdrawDate" factory="Date" value="2066-02-05 16:00:00"/>
<NODE name="Title" factory="String" value="Email Changed Mail"/>
<NODE name="ShortTitle" factory="String" value="Email Changed Mail"/>
<NODE name="SortOrder" factory="Integer" value="-200926"/>
<NODE name="Type" factory="Enumerated" class="oneit.business.content.ArticleType" value="ARTICLE"/>
<NODE name="Template" factory="Enumerated" class="oneit.business.content.ArticleTemplate" value="EMAIL_TEMPLATE"/>
</ormAttributeChanges>
<content factory="Map"> <NODE name="EmailBody" factory="Map">
<NODE name="Content" factory="String"><![CDATA[<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta content="HTML Tidy, see www.w3.org" name="generator">
<title></title>
</head>
<body>
<p>Hello</p>
<p>Thanks for taking the time to update your contact email address.</p>
<p>To verify your email, please <a href="${link}">click here</a>.</p>
<p>If you haven't requested the change or believe this email was sent by mistake, please do note take any action.</p>
<p>Thanks :)</p>
</body>
</html>
]]></NODE>
<NODE name="TransformedContent" factory="String"><![CDATA[<p>Hello</p><p>Thanks for taking the time to update your contact email address.</p><p>To verify your email, please <a href="${link}">click here</a>.</p><p>If you haven't requested the change or believe this email was sent by mistake, please do note take any action.</p><p>Thanks :)</p>
]]></NODE>
<NODE name="IncludeContent" factory="Boolean" value="true"/>
</NODE>
<NODE name="" factory="Map">
<NODE name="Content" factory="String"><![CDATA[
<p></p>
]]></NODE>
<NODE name="IncludeContent" factory="Boolean" value="true"/>
</NODE>
<NODE name="" factory="Map">
<NODE name="Content" factory="String"><![CDATA[
<p></p>
]]></NODE>
<NODE name="IncludeContent" factory="Boolean" value="true"/>
</NODE>
<NODE name="" factory="Map">
<NODE name="Content" factory="String"><![CDATA[
<p></p>
]]></NODE>
<NODE name="IncludeContent" factory="Boolean" value="true"/>
</NODE>
</content>
</NODE>
</NODE>
</OBJECTS>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment