Commit f6c97098 by chenith

Grouped and Soered company users list and added option for resend email to pending user.

parent f880576a
......@@ -15,7 +15,6 @@ 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;
......@@ -32,12 +31,20 @@ public class SendUserInvitationFP extends SaveFP
@Override
public void validate(ORMProcessState process, SubmissionDetails submission, MultiException exceptions, Map params) throws StorageException
{
HttpServletRequest request = submission.getRequest();
Company company = (Company) process.getAttribute("Company");
HttpServletRequest request = submission.getRequest();
Company company = (Company) process.getAttribute("Company");
CompanyUser resendUser = (CompanyUser) request.getAttribute("ResendUser");
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);
if(resendUser!=null)
{
BusinessObjectParser.assertFieldCondition(StringUtils.isEmailAddress(resendUser.getUser().getUserName()), resendUser, resendUser.FIELD_ObjectID, "invalidEmail", exceptions, false, request);
}
else
{
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);
}
......@@ -49,27 +56,39 @@ public class SendUserInvitationFP extends SaveFP
HttpServletRequest request = submission.getRequest();
ObjectTransaction objTran = process.getTransaction();
Company company = (Company) process.getAttribute("Company");
CompanyUser resendUser = (CompanyUser) request.getAttribute("ResendUser");
if(resendUser!=null)
{
LogMgr.log(LOG, LogLevel.PROCESSING1, "Started to re-sending invitaion email.", resendUser);
LogMgr.log(LOG, LogLevel.PROCESSING1, "Started to create new use", company);
sendInvitationMail(resendUser, request);
LogMgr.log(LOG, LogLevel.PROCESSING1, "End of re-sending invitation email.", resendUser);
}
else
{
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());
SecUser newUser = SecUser.createSecUser(objTran);
CompanyUser newComUser = newUser.getExtensionOrCreate(CompanyUser.REFERENCE_CompanyUser);
LogMgr.log(LOG, LogLevel.PROCESSING1, "New user created :: ", newUser);
sendInvitationMail(newComUser, request);
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, "End of sending invitation email.", newUser);
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);
}
......@@ -92,19 +111,24 @@ public class SendUserInvitationFP extends SaveFP
{
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();
Article invitationArticle = WebUtils.getArticleByShortCut(companyUser.getTransaction(), WebUtils.COMPANY_ACCOUNT_VERIFICATION);
//set invitation key and send mail time
companyUser.setVerificationKey(random.generateAlphaNum(6));
if(companyUser.getVerificationKey()==null)
{
RandomStringGen random = new RandomStringGen();
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);
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);
......
......@@ -185,26 +185,22 @@ public class Utils
}
public static List<CompanyUser> getUsersSorted(Set<CompanyUser> users, UserSortOption userSortOption)
public static Collection<CompanyUser> getUsersSorted(Collection<CompanyUser> users, UserSortOption userSortOption)
{
ObjectTransform transform = Client.pipesClient().toObjectCreated();
Comparator comparator = CollectionUtils.DEFAULT_COMPARATOR;
Comparator comparator = new UserComparator();
if(userSortOption == UserSortOption.ALPHA_A_Z)
{
transform = CompanyUser.pipesCompanyUser().toUser().toFirstName();
comparator = CollectionUtils.CASE_INSENSITIVE_COMPARATOR;
comparator = new UserComparator();
}
else if(userSortOption == UserSortOption.ALPHA_Z_A)
{
transform = CompanyUser.pipesCompanyUser().toUser().toFirstName();
comparator = CollectionUtils.reverse(CollectionUtils.CASE_INSENSITIVE_COMPARATOR);
comparator = CollectionUtils.reverse(new UserComparator());
}
return ObjstoreUtils.sort( users,
new ObjectTransform[]{transform},
new Comparator[]{comparator});
return CollectionUtils.sort(users, comparator);
}
public static class ClientToOpenJobCountTransform implements ObjectTransform<Client, Integer>
......@@ -359,3 +355,17 @@ public class Utils
.search(transaction);
}
}
class UserComparator implements Comparator<CompanyUser>
{
@Override
public int compare(CompanyUser o1, CompanyUser o2)
{
String o1Name = StringUtils.subBlanks(o1.getUser().getName())!=null ? o1.getUser().getName() : o1.getUser().getUserName();
String o2Name = StringUtils.subBlanks(o2.getUser().getName())!=null ? o2.getUser().getName() : o2.getUser().getUserName();
return o1Name.trim().compareTo(o2Name.trim());
}
}
\ 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 --%>
<%@ include file="/extensions/performa/inc/stdimports.jsp" %>
<%@ page import="oneit.utils.filter.CollectionFilter"%>
<oneit:dynIncluded>
<%
String currentPage = WebUtils.getArticleByShortCut(process.getTransaction(), WebUtils.MANAGE_USERS).getLink(request);
......@@ -12,15 +14,24 @@
SecUser secUser = SecUser.getTXUser(objTran);
Company company = (Company) process.getAttribute("Company");
CompanyUser comUser = secUser.getExtension(CompanyUser.REFERENCE_CompanyUser);
UserSortOption userSortOpt = (UserSortOption) process.getAttribute("UserSortOption");
Collection companyUsers = (Collection<CompanyUser>) process.getAttribute("CompanyUsers");
Collection pendingUsers = (Collection<CompanyUser>) process.getAttribute("PendingUsers");
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(companyUsers == null || pendingUsers == null)
{
companyUsers = CollectionFilter.filter(company.getUsersSet(), CompanyUser.SearchByAll().andIsAccountVerified(new EqualsFilter<>(Boolean.TRUE)));
pendingUsers = CollectionFilter.filter(company.getUsersSet(), CompanyUser.SearchByAll().andIsAccountVerified(new NotEqualsFilter<>(Boolean.TRUE)));
process.setAttribute("CompanyUsers", companyUsers);
process.setAttribute("PendingUsers", pendingUsers);
}
if( request.getParameter("UserSortOption") != null)
{
......@@ -29,19 +40,13 @@
if(userSortOpt == null)
{
userSortOpt = UserSortOption.ALPHA_A_Z;
}
if(companyUsers == null)
{
companyUsers = company.getUsersSet();
process.setAttribute("CompanyUsers", companyUsers);
userSortOpt = UserSortOption.ALPHA_A_Z;
}
List<CompanyUser> sortedUsers = Utils.getUsersSorted(companyUsers, userSortOpt);
process.setAttribute("UserSortOption", userSortOpt);
Collection<CompanyUser> sortedCompanyUsers = Utils.getUsersSorted(companyUsers, userSortOpt);
Collection<CompanyUser> sortedPendingUsers = Utils.getUsersSorted(pendingUsers, userSortOpt);
%>
<script type="text/javascript">
......@@ -84,7 +89,7 @@
</div>
<div class="main-manage-userlist">
<%
for(CompanyUser companyUser : companyUsers)
for(CompanyUser companyUser : sortedCompanyUsers)
{
SecUser user = companyUser.getUser();
%>
......@@ -122,21 +127,41 @@
</div>
</div>
-->
<div class="user-list-row">
<div class="m-user-left">
<div class="m-user-icon"><img src="images/user-list-icon.png"></div>
<div class="m-user-info">
<div class="m-user-name">Janis Stein</div>
<div class="m-user-email">janisstein@gmail.com</div>
<%
for(CompanyUser pendingUser : sortedPendingUsers)
{
SecUser user = pendingUser.getUser();
String name = StringUtils.subBlanks(user.getName())!=null ? user.getName() : user.getUserName();
String resendTxt = "Re-send invitation to " + (StringUtils.subBlanks(user.getFirstName())!=null ? user.getFirstName() : StringUtils.subBlanks(user.getLastName())!=null ? user.getLastName() : user.getUserName());
%>
<div class="user-list-row" id="<%= pendingUser.getID() %>">
<div class="m-user-left">
<div class="m-user-icon"><img src="images/user-list-icon.png"></div>
<div class="m-user-info">
<div class="m-user-name">
<oneit:toString value="<%= name %>" mode="EscapeHTML" />
</div>
<div class="m-user-email">
<oneit:toString value="<%= user.getEmail() %>" mode="EscapeHTML" />
</div>
</div>
</div>
<div class="m-user-right invite-combo">
<select class="form-control" disabled="">
<option>Invitation sent</option>
</select>
</div>
<div class="resend-link">
<oneit:button value="<%= resendTxt %>" name="sendUserInvites" skin="link"
requestAttribs="<%= CollectionUtils.mapEntry("nextPage", currentPage)
.mapEntry ("ResendUser", pendingUser)
.mapEntry(NotificationUtils.NOTIFICATION_MSG_PARAM, "invitationSent")
.toMap() %>" />
</div>
</div>
<div class="m-user-right invite-combo">
<select class="form-control" disabled="">
<option>Invitation sent</option>
</select>
</div>
<div class="resend-link"><a href="#">Re-send invitation to Janis</a></div>
</div>
<%
}
%>
</div>
</div>
<div class="manage-user-right">
......@@ -153,7 +178,7 @@
</div>
<div class="form-group">
<label><oneit:label GUIName="Last Name" /></label>
<oneit:ormInput obj="<%= company %>" type="text" attributeName="FirstName" cssClass="form-control"/>
<oneit:ormInput obj="<%= company %>" type="text" attributeName="LastName" cssClass="form-control"/>
</div>
<div class="form-group">
<label><oneit:label GUIName="Role" /></label>
......
......@@ -4,3 +4,4 @@
#passwordNotMatch = The password does not match. Please try again.
#resetPasswordEmailSent = A password rest email has been sent to you. Please check your email.
#invitationSent = Your invitation has been successfully sent.
#invalidEmail = Invalid email address.
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