Commit 2af2566f by chenith

Added option to send invitations to new users.

parent 1a5b49e1
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.utils.NotificationUtils;
import oneit.utils.*;
import performa.orm.*;
import performa.utils.Utils;
import performa.utils.WebUtils;
public class SendUserInvitationFP extends SaveFP
{
private static LoggingArea LOG = LoggingArea.createLoggingArea("SendUserInvitationFP");
private static final String DEFAULT_PASSWORD = "Talentology123";
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");
BusinessObjectParser.assertFieldCondition(company.getUserEmail()!=null, company, Company.FIELD_UserEmail, "mandatory", exceptions, true, request);
BusinessObjectParser.assertFieldCondition(!isEmailFound(process.getTransaction(), company.getUserEmail()), company, Company.FIELD_UserEmail, "emailExists", exceptions, true, request);
BusinessObjectParser.assertFieldCondition(company.getRoleType()!=null, company, Company.FIELD_RoleType, "mandatory", 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");
LogMgr.log(LOG, LogLevel.PROCESSING1, "Started to create new use", company);
SecUser newUser = SecUser.createSecUser(objTran);
CompanyUser newComUser = newUser.getExtensionOrCreate(CompanyUser.REFERENCE_CompanyUser);
newUser.setUserName(company.getUserEmail().toLowerCase());
newUser.setEmail(newUser.getUserName());
newUser.setAttribute("md5:" + SecUser.FIELD_Password, DEFAULT_PASSWORD);
newUser.addRole(Utils.getRole(Utils.ROLE_CLIENT, objTran));
newUser.setFirstName(company.getFirstName());
newUser.setLastName(company.getLastName());
newComUser.setCompany(company);
newComUser.setRole(company.getRoleType());
LogMgr.log(LOG, LogLevel.PROCESSING1, "New user created :: ", newUser);
sendInvitationMail(newComUser, request);
LogMgr.log(LOG, LogLevel.PROCESSING1, "End of sending invitation email.", newUser);
return super.processForm(process, submission, params);
}
@Override
public void init(ParticipantInitialisationContext context) throws InitialisationException
{
super.init(context);
invitationEmailer = (ConfigurableArticleTemplateEmailer) (context.getSingleChild("InvitationEmailer"));
}
protected void sendInvitationMail(CompanyUser companyUser, HttpServletRequest request) throws BusinessException
{
if(companyUser.getIsAccountVerified()!=Boolean.TRUE)
{
try
{
LogMgr.log(LOG, LogLevel.PROCESSING1, "Sending invitation mail from SendUserInvitationFP 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().getUserName()}, null, companyUser);
LogMgr.log(LOG, LogLevel.PROCESSING1, "Sent invitation mail successfully from " + SendUserInvitationFP.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 " + SendUserInvitationFP.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
......@@ -62,7 +62,7 @@ public class VerifyCompanyUserFP extends ORMProcessFormProcessor
if(CollectionUtils.equals(companyUser.getPassword(), companyUser.getConfirmPassword()))
{
if(company.getIsVerified()!=Boolean.TRUE)
if(company.getIsVerified()!=Boolean.TRUE && CollectionUtils.equals(company.getAddedByUser(), companyUser))
{
process.setAttribute("Company", company);
......
......@@ -11,6 +11,11 @@
<MULTIPLEREFERENCE name="Users" type="CompanyUser" backreferenceName="Company"/>
<MULTIPLEREFERENCE name="Clients" type="Client" backreferenceName="Company"/>
<TRANSIENT name="UserEmail" type="String" validators="Email" />
<TRANSIENT name="FirstName" type="String"/>
<TRANSIENT name="LastName" type="String"/>
<TRANSIENT name="RoleType" type="RoleType" defaultValue="RoleType.STANDARD" attribHelper="EnumeratedAttributeHelper"/>
<TABLE name="tl_company" tablePrefix="object">
<ATTRIB name="CompanyName" type="String" dbcol="company_name" mandatory="true" length="100" />
......
......@@ -185,7 +185,7 @@ public class Utils
}
public static List<CompanyUser> getUsersSorted(CompanyUser[] users, UserSortOption userSortOption)
public static List<CompanyUser> getUsersSorted(Set<CompanyUser> users, UserSortOption userSortOption)
{
ObjectTransform transform = Client.pipesClient().toObjectCreated();
Comparator comparator = CollectionUtils.DEFAULT_COMPARATOR;
......@@ -201,7 +201,7 @@ public class Utils
comparator = CollectionUtils.reverse(CollectionUtils.CASE_INSENSITIVE_COMPARATOR);
}
return ObjstoreUtils.sort( Arrays.asList(users),
return ObjstoreUtils.sort( users,
new ObjectTransform[]{transform},
new Comparator[]{comparator});
}
......
......@@ -38,6 +38,10 @@
<AccountCreatedEmailer factory="Participant" class="oneit.email.ConfigurableArticleTemplateEmailer" templateShortcut="AccountCreatedMail"/>
<InvitationEmailer factory="Participant" class="oneit.email.ConfigurableArticleTemplateEmailer" templateShortcut="InvitationMail"/>
</FORM>
<FORM name="*.sendUserInvites" factory="Participant" class="performa.form.SendUserInvitationFP">
<AccountCreatedEmailer factory="Participant" class="oneit.email.ConfigurableArticleTemplateEmailer" templateShortcut="AccountCreatedMail"/>
<InvitationEmailer factory="Participant" class="oneit.email.ConfigurableArticleTemplateEmailer" templateShortcut="InvitationMail"/>
</FORM>
<FORM name="*.saveUserDetails" factory="Participant" class="performa.form.SaveUserDetailsFP"/>
</NODE>
......
......@@ -48,7 +48,7 @@
<div class="form-group text-left">
<label>Company</label>
<%
if(company.getIsVerified()==Boolean.TRUE)
if(company.getIsVerified()==Boolean.TRUE || !CollectionUtils.equals(company.getAddedByUser(), companyUser))
{
%>
<oneit:ormInput obj="<%= company %>" type="text" attributeName="CompanyName" cssClass="form-control" readonly="true" required="true"/>
......
......@@ -6,10 +6,21 @@
<oneit:dynIncluded>
<%
// String nextPage = WebUtils.getSamePageInRenderMode(request, WebUtils.EDIT_CLIENT);
String usersPage = WebUtils.getSamePageInRenderMode(request, "Page");
UserSortOption userSortOpt = (UserSortOption) process.getAttribute("UserSortOption");
CompanyUser[] companyUsers = (CompanyUser[]) process.getAttribute("CompanyUsers");
String currentPage = WebUtils.getArticleByShortCut(process.getTransaction(), WebUtils.MANAGE_USERS).getLink(request);
String usersPage = WebUtils.getSamePageInRenderMode(request, "Page");
ObjectTransaction objTran = process.getTransaction ();
SecUser secUser = SecUser.getTXUser(objTran);
Company company = (Company) process.getAttribute("Company");
CompanyUser comUser = secUser.getExtension(CompanyUser.REFERENCE_CompanyUser);
if(company==null)
{
company = comUser.getCompany();
process.setAttribute("Company", company);
}
UserSortOption userSortOpt = (UserSortOption) process.getAttribute("UserSortOption");
Set<CompanyUser> companyUsers = (Set<CompanyUser>) process.getAttribute("CompanyUsers");
if( request.getParameter("UserSortOption") != null)
{
......@@ -23,9 +34,7 @@
if(companyUsers == null)
{
companyUsers = CompanyUser.SearchByAllCompanyUsers()
.byReferenceExtension(CompanyUser.REFERENCE_CompanyUser)
.search(transaction);
companyUsers = company.getUsersSet();
process.setAttribute("CompanyUsers", companyUsers);
}
......@@ -136,25 +145,26 @@
</div>
<div class="form-group">
<label><oneit:label GUIName="Email Address" /></label>
<input type="text" name="" class="form-control" />
<oneit:ormInput obj="<%= company %>" type="text" attributeName="UserEmail" cssClass="form-control" style="text-transform: lowercase"/>
</div>
<div class="form-group">
<label><oneit:label GUIName="First Name" /></label>
<input type="text" name="" class="form-control" />
<oneit:ormInput obj="<%= company %>" type="text" attributeName="FirstName" cssClass="form-control"/>
</div>
<div class="form-group">
<label><oneit:label GUIName="Last Name" /></label>
<input type="text" name="" class="form-control" />
<oneit:ormInput obj="<%= company %>" type="text" attributeName="FirstName" cssClass="form-control"/>
</div>
<div class="form-group">
<label><oneit:label GUIName="Role" /></label>
<select class="form-control">
<option>Admin</option>
<option>Standard</option>
</select>
<oneit:ormEnum obj="<%= company %>" attributeName="RoleType" cssClass="form-control"/>
</div>
<div class="invite-btn">
<input type="button" name="" class="btn btn-invite" value="Invite" />
<oneit:button value="Invite" name="sendUserInvites" cssClass="btn btn-invite"
requestAttribs="<%= CollectionUtils.mapEntry("nextPage", currentPage)
.mapEntry ("restartProcess", Boolean.TRUE)
.mapEntry(NotificationUtils.NOTIFICATION_MSG_PARAM, "invitationSent")
.toMap() %>" />
</div>
</div>
</div>
......
......@@ -25,5 +25,9 @@ Client.ContactSurname = Contact Last Name
Client.ClientLogo = Client Logo
Client.State = State or Province
Company.TimeZone =
Company.HasClientSupport = We help clients with hiring
\ No newline at end of file
Company.TimeZone = Time zone
Company.HasClientSupport = We help clients with hiring
Company.UserEmail = Email Address
Company.FirstName = First Name
Company.LastName = Last Name
Company.RoleType = Role
......@@ -2,4 +2,5 @@
#exceedMaxShortlisted = Selected number of applications exceed maximum shortlist application count
#saveTemplateFirst = Please save template first, before proceeding to the next step
#passwordNotMatch = The password does not match. Please try again.
#resetPasswordEmailSent = A password rest email has been sent to you. Please check your email.
\ No newline at end of file
#resetPasswordEmailSent = A password rest email has been sent to you. Please check your email.
#invitationSent = Your invitation has been successfully sent.
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