Commit 34dfe523 by chenith

send invitation emails to company users.

parent 2373afbf
package performa.form;
import java.util.Date;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import oneit.business.content.Article;
import oneit.components.ParticipantInitialisationContext;
import oneit.email.ConfigurableArticleTemplateEmailer;
import oneit.email.ConfigurableEmailerException;
import oneit.logging.*;
import oneit.net.LoopbackHTTP;
import oneit.objstore.ObjectTransaction;
import oneit.objstore.StorageException;
import oneit.objstore.parser.BusinessObjectParser;
import oneit.security.SecUser;
import oneit.servlets.forms.*;
import oneit.servlets.process.*;
import oneit.servlets.security.SessionSecUserDecorator;
import oneit.utils.*;
import performa.orm.*;
import performa.utils.Utils;
import performa.utils.WebUtils;
public class SendCompanyUserInvitesFP extends ORMProcessFormProcessor
{
private static LoggingArea LOG = LoggingArea.createLoggingArea("VerifyCompanyUser");
private static final String DEFAULT_PASSWORD = "Talentology123";
protected ConfigurableArticleTemplateEmailer emailer;
protected ConfigurableArticleTemplateEmailer invitationEmailer;
@Override
public void validate(ORMProcessState process, SubmissionDetails submission, MultiException exceptions, Map params) throws StorageException
{
HttpServletRequest request = submission.getRequest();
Company company = (Company) process.getAttribute("Company");
for(CompanyUser cUser : company.getUsersSet())
{
if(!CollectionUtils.equals(cUser, company.getAddedByUser()))
{
SecUser secUser = cUser.getUser();
BusinessObjectParser.assertFieldCondition(!isEmailFound(process.getTransaction(), secUser.getEmail()), secUser, SecUser.FIELD_Email, "emailExists", exceptions, true, request);
}
}
super.validate(process, submission, exceptions, params);
}
@Override
public SuccessfulResult processForm(ORMProcessState process, SubmissionDetails submission, Map params) throws BusinessException, StorageException
{
HttpServletRequest request = submission.getRequest();
ObjectTransaction objTran = process.getTransaction();
Company company = (Company) process.getAttribute("Company");
CompanyUser companyUser = company.getAddedByUser();
SecUser secUser = companyUser.getUser();
String nextPage = (String) request.getAttribute("nextPage");
LogMgr.log(LOG, LogLevel.PROCESSING1, "Verifing Company User", companyUser, secUser);
secUser.setAttribute("md5:" + SecUser.FIELD_Password, companyUser.getPassword());
companyUser.setIsAccountVerified(Boolean.TRUE);
company.setIsVerified(Boolean.TRUE);
sendAccountCreatedMail(companyUser, request);
request.getSession().setAttribute (SecUser.SEC_USER_ID, secUser);
request.getSession().setAttribute (SessionSecUserDecorator.REFRESH_SECURITY, Boolean.TRUE);
LogMgr.log(LOG, LogLevel.PROCESSING1, "Password resetted", companyUser, secUser);
LogMgr.log(LOG, LogLevel.PROCESSING1, "Verifing Company User finished", companyUser, secUser);
//process user invitations
for(CompanyUser cUser : company.getUsersSet())
{
if(!CollectionUtils.equals(cUser, companyUser))
{
SecUser sUser = cUser.getUser();
LogMgr.log(LOG, LogLevel.PROCESSING1, "Started to send invitaion email.", cUser);
sUser.setUserName(sUser.getEmail().toLowerCase());
sUser.setAttribute("md5:" + SecUser.FIELD_Password, DEFAULT_PASSWORD);
sUser.addRole(Utils.getRole(Utils.ROLE_CLIENT, objTran));
LogMgr.log(LOG, LogLevel.PROCESSING1, "New user created :: ", sUser);
sendInvitationMail(cUser, request);
LogMgr.log(LOG, LogLevel.PROCESSING1, "End of sending invitation email.", cUser);
}
}
process.completeAndRestart();
return new ProcessRedirectResult(nextPage, new String[0]);
}
@Override
public void init(ParticipantInitialisationContext context) throws InitialisationException
{
super.init(context);
emailer = (ConfigurableArticleTemplateEmailer) (context.getSingleChild("AccountCreatedEmailer"));
invitationEmailer = (ConfigurableArticleTemplateEmailer) (context.getSingleChild("InvitationEmailer"));
}
protected void sendAccountCreatedMail(CompanyUser companyUser, HttpServletRequest request) throws BusinessException
{
try
{
LogMgr.log(LOG, LogLevel.PROCESSING1, "Sending Account Created mail from VerifyCompanyUserFP to :: ", companyUser);
Map defaultParams = CollectionUtils.EMPTY_MAP;
ObjectTransform transform = Utils.createCompoundTransform(defaultParams, companyUser);
Utils.sendMail(emailer, transform, new String[]{companyUser.getUser().getUserName()}, null, companyUser);
LogMgr.log(LOG, LogLevel.PROCESSING1, "Sent Account Created mail successfully from " + SendCompanyUserInvitesFP.class + " to :: ", companyUser);
}
catch (ConfigurableEmailerException ex)
{
LogMgr.log(LOG, LogLevel.SYSTEMERROR1, ex, "Error occured while sending mail for CompanyUser :: " + companyUser);
throw new BusinessException("We are unable to send mail. Please try again or contact Talentology for more details.");
}
}
protected void sendInvitationMail(CompanyUser companyUser, HttpServletRequest request) throws BusinessException
{
if(companyUser.getIsAccountVerified()!=Boolean.TRUE)
{
try
{
LogMgr.log(LOG, LogLevel.PROCESSING1, "Sending invitation mail from SendVerificationMailFP to :: ", companyUser);
Article invitationArticle = WebUtils.getArticleByShortCut(companyUser.getTransaction(), WebUtils.COMPANY_ACCOUNT_VERIFICATION);
RandomStringGen random = new RandomStringGen();
//set invitation key and send mail time
companyUser.setVerificationKey(random.generateAlphaNum(6));
companyUser.setVerificationMailSendDate(new Date());
String link = LoopbackHTTP.getRemoteAccessURL(request)
+ invitationArticle.getLink(request, CollectionUtils.EMPTY_MAP, "/")
+ "?id=" + companyUser.getID()
+ "&key=" + companyUser.getVerificationKey();
Map defaultParams = CollectionUtils.mapEntry("link", link).toMap();
ObjectTransform transform = Utils.createCompoundTransform(defaultParams, companyUser);
Utils.sendMail(invitationEmailer, transform, new String[]{companyUser.getUser().getEmail()}, null, companyUser);
LogMgr.log(LOG, LogLevel.PROCESSING1, "Sent invitation mail successfully from " + SendVerificationMailFP.class + " to :: ", companyUser);
}
catch (ConfigurableEmailerException ex)
{
LogMgr.log(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(LOG, LogLevel.PROCESSING1, "Call from " + SendVerificationMailFP.class + ". Account is already verified for candidate :: ", companyUser);
}
}
private Boolean isEmailFound(ObjectTransaction objTran, String email)
{
if(email!=null)
{
SecUser user = SecUser.searchNAME(objTran, email.toLowerCase());
if(user!=null) //&& user.getExtension(CompanyUser.REFERENCE_CompanyUser)!=null
{
return Boolean.TRUE;
}
}
return Boolean.FALSE;
}
}
\ No newline at end of file
......@@ -61,21 +61,21 @@ public class VerifyCompanyUserFP extends ORMProcessFormProcessor
LogMgr.log(LOG, LogLevel.PROCESSING1, "Verifing User", companyUser, secUser);
if(CollectionUtils.equals(companyUser.getPassword(), companyUser.getConfirmPassword()))
{
secUser.setAttribute("md5:" + SecUser.FIELD_Password, companyUser.getPassword());
companyUser.setIsAccountVerified(Boolean.TRUE);
{
if(company.getIsVerified()!=Boolean.TRUE)
{
company.setIsVerified(Boolean.TRUE);
process.setAttribute("Company", company);
nextPage = nextPage + "&CompanyUserID=" + companyUser.getObjectID();
return new ProcessRedirectResult(nextPage, new String[0]);
}
else
{
nextPage = WebUtils.getArticleByShortCut(process.getTransaction(), WebUtils.ADMIN_HOME).getLink(request);
}
secUser.setAttribute("md5:" + SecUser.FIELD_Password, companyUser.getPassword());
companyUser.setIsAccountVerified(Boolean.TRUE);
sendMail(companyUser, request);
request.getSession().setAttribute (SecUser.SEC_USER_ID, secUser);
......
......@@ -34,6 +34,10 @@
<FORM name="*.verifyCompanyUser" factory="Participant" class="performa.form.VerifyCompanyUserFP">
<AccountCreatedEmailer factory="Participant" class="oneit.email.ConfigurableArticleTemplateEmailer" templateShortcut="AccountCreatedMail"/>
</FORM>
<FORM name="*.sendCompanyUserInvites" factory="Participant" class="performa.form.SendCompanyUserInvitesFP">
<AccountCreatedEmailer factory="Participant" class="oneit.email.ConfigurableArticleTemplateEmailer" templateShortcut="AccountCreatedMail"/>
<InvitationEmailer factory="Participant" class="oneit.email.ConfigurableArticleTemplateEmailer" templateShortcut="InvitationMail"/>
</FORM>
</NODE>
<NODE name="job_assessment_criteria_add_jsp" factory="Participant">
......@@ -76,10 +80,6 @@
</FORM>
</NODE>
<NODE name="company_profile_jsp" factory="Participant">
<INHERITS factory="Named" nodename="CoreORMAdminNoPriv"/>
</NODE>
<NODE name="invite_user_add_jsp" factory="Participant">
<INHERITS factory="Named" nodename="CoreORMAdminNoPriv"/>
</NODE>
......
<%@ page extends="oneit.servlets.jsp.JSPInclude" %>
<%@ include file="/inc/stdimports50.jsp" %><%-- This is in cougar --%>
<%@ include file="/inc/stdcms.jsp" %><%-- This is in cougar --%>
<%@ include file="/extensions/performa/inc/stdimports.jsp" %>
<%@ include file="inc/htmlheader_nopriv.jsp" %>
<oneit:dynIncluded>
<%
String nextPage = WebUtils.getArticleByShortCut(process.getTransaction(), WebUtils.ADMIN_HOME).getLink(request);
Company company = (Company) process.getAttribute("Company");
Debug.assertion(company != null, "Invalid company user in admin portal");
CompanyUser companyUser = company.getAddedByUser();
SecUser secUser = companyUser.getUser();
Integer pageNumber = 2;
%>
<script type="text/javascript">
function addUser() {
var divID = "#usersSection";
ajaxProcessAddJQ ("<%= request.getContextPath() %>/extensions/adminportal/inc/invite_user_add.jsp", divID, {newuser: "true"}, function (theHTML_JQ) {
$(divID).append (theHTML_JQ);
});
}
function deleteUser(deleteVarKey) {
ajaxProcessDeleteJQ("<%= request.getContextPath() %>/genericDelete_AJAX.jsp", "#usersSection" , { varKey: deleteVarKey });
return false;
}
</script>
<div class="hire-the-right-candi" style="height: 77px">You're nearly there...</div>
<oneit:form name="companyProfile" method="post" enctype="multipart/form-data">
<oneit:dynInclude page="/extensions/applicantportal/inc/multifieldtext.jsp" data="<%= CollectionUtils.EMPTY_MAP%>"/>
<div class="section-tab-view">
<div class="main-tab-form">
<ul class="nav nav-pills nav-justified">
<li class="complate">
<a href="#">
<span>
<img src="images/right-mark.svg"/>
</span>
<div>Company Profile</div>
</a>
</li>
<li class="active">
<a href="#">
<span>2</span>
<div>Invite Users</div>
</a>
</li>
<li class="">
<a href="#">
<span>3</span>
<div>Create a Job</div>
</a>
</li>
</ul>
</div>
<div class="section-page-area" style="text-align: left">
<div class="main-sc-section">
<div class="form-group">
<div id="usersSection">
<%
for (CompanyUser cUser : company.getUsersSet())
{
if(!CollectionUtils.equals(cUser, companyUser))
{
%>
<oneit:dynInclude page="/extensions/adminportal/inc/invite_user_add.jsp"
CompanyUser="<%= cUser %>"
data="<%= CollectionUtils.EMPTY_MAP%>"/>
<%
}
}
%>
</div>
</div>
</div>
<div class="main-sc-section main-add-more content-to-center">
<oneit:button value="Add Another" name="newUser" cssClass="add-more-btn" skin="link"
onClick="<%="addUser(); return false;"%>"
requestAttribs="<%= CollectionUtils.EMPTY_MAP %>"/>
</div>
<div class="selection-br-line"></div>
<div class="main-sc-section form-group content-to-center">
<oneit:button value="Send invites & proceed" name="sendCompanyUserInvites" cssClass="box-btn send-btn"
requestAttribs="<%= CollectionUtils.mapEntry("nextPage", nextPage)
.mapEntry("procParams", CollectionUtils.mapEntry("Company", company).toMap())
.toMap() %>"/>
</div>
</div>
</div>
</oneit:form>
</oneit:dynIncluded>
<%@ include file="inc/htmlfooter_nopriv.jsp" %>
\ No newline at end of file
<%@ page extends="oneit.servlets.jsp.JSPInclude" %>
<%@ include file="/inc/stdimports50.jsp" %><%-- This is in cougar --%>
<%@ include file="/inc/stdcms.jsp" %><%-- This is in cougar --%>
<oneit:dynIncluded>
</oneit:dynIncluded>
<?xml version="1.0" encoding="UTF-8"?>
<OBJECTS xmlns:oneit="http://www.1iT.com.au" name="">
<NODE factory="Vector" name="Script"><NODE class="oneit.appservices.upgrade.cms.CMSArticleUpdateOperation" factory="Participant" name="Invitation Mail">
<createSpecificIdentifier factory='String' value='UDQKBSOIBW9O2ET72SI93FJJ6SUWF3'/>
<articleIdentifiers factory="Array" class="java.lang.String">
<NODE factory="String" value="UDQKBSOIBW9O2ET72SI93FJJ6SUWF3"/>
</articleIdentifiers>
<createdLabel factory="String" value="UDQKBSOIBW9O2ET72SI93FJJ6SUWF3"/>
<newParentCategory factory="String" value="RESOURCE_LIBRARY"/>
<articleAttributeChanges factory="Map">
<NODE name="EmailTo" factory="Null"/>
<NODE name="EmailFrom" factory="String" value="info@talentology.com.au"/>
<NODE name="EmailSubject" factory="String" value="Invitation to join Talentology"/>
<NODE name="Shortcuts" factory="String" value="InvitationMail"/>
<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="Invitation Mail"/>
<NODE name="ShortTitle" factory="String" value="Reset Code Email"/>
<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>
<strong>Join Talentology</strong>
</p>
<p>You are invited to join Talentology. To accept this invitation, <a href="${link}">click here</a>.</p>
</body>
</html>
]]></NODE>
<NODE name="TransformedContent" factory="String"><![CDATA[<p>
<strong>Join Talentology</strong>
</p><p>You are invited to join Talentology. To accept this invitation, <a href="${link}">click here</a>.</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
......@@ -7,7 +7,7 @@
<oneit:dynIncluded>
<%
String nextPage = "extensions/adminportal/company_profile.jsp";
String nextPage = WebUtils.getSamePageInRenderMode(request, "CompanyProfile");
CompanyUser companyUser = (CompanyUser) process.getAttribute("CompanyUser");
SecUser secUser = null;
......@@ -92,4 +92,6 @@
.mapEntry("nextPage", nextPage).toMap() %>"/>
</div>
</oneit:form>
</oneit:dynIncluded>
\ No newline at end of file
</oneit:dynIncluded>
<%@ include file="inc/htmlfooter_nopriv.jsp" %>
\ 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