Commit 739bbb2b by Tuomas Riihimäki

Merge branch 'asm-placegive' into 'master'

Asm placegive

Paikan antaminen toiselle sähköpostilla

See merge request !142
2 parents 2465b0a9 e394936f
...@@ -89,7 +89,19 @@ public interface UserBeanLocal { ...@@ -89,7 +89,19 @@ public interface UserBeanLocal {
boolean userExists(String login); boolean userExists(String login);
boolean invite(String invitemail, String url); boolean userExistsByEmail(String email);
/**
*
* @param invitemail Target mail
* @param url Url to send
* @param membership target group membership, if null we generate new one
* @return
*/
boolean invite(String invitemail, String url, GroupMembership membership);
void cancelInvite(GroupMembership ship);
EventUser mergeEventUserChanges(EventUser shoppingUser); EventUser mergeEventUserChanges(EventUser shoppingUser);
......
...@@ -298,6 +298,8 @@ public class PlaceGroupBean implements PlaceGroupBeanLocal { ...@@ -298,6 +298,8 @@ public class PlaceGroupBean implements PlaceGroupBeanLocal {
throw new EJBAccessException("Not enough rights to release token"); throw new EJBAccessException("Not enough rights to release token");
} }
gmem.setUser(null); gmem.setUser(null);
gmem.setInviteEmail(null);
gmem.setInviteName(null);
gmem.setInviteToken(gmemfacade.createInviteToken()); gmem.setInviteToken(gmemfacade.createInviteToken());
logger.info("Place released. {} new token {}", gmem.getInviteToken()); logger.info("Place released. {} new token {}", gmem.getInviteToken());
} }
......
...@@ -419,6 +419,7 @@ public class UserBean implements UserBeanLocal { ...@@ -419,6 +419,7 @@ public class UserBean implements UserBeanLocal {
// return userFacade.searchForName(name); // return userFacade.searchForName(name);
// } // }
@Override @Override
@RolesAllowed(UserPermission.S_CREATE_NEW) @RolesAllowed(UserPermission.S_CREATE_NEW)
public void createNewUser(EventUser user, String password) { public void createNewUser(EventUser user, String password) {
...@@ -546,21 +547,42 @@ public class UserBean implements UserBeanLocal { ...@@ -546,21 +547,42 @@ public class UserBean implements UserBeanLocal {
@Override @Override
@RolesAllowed(UserPermission.S_INVITE_USERS) @RolesAllowed(UserPermission.S_INVITE_USERS)
public boolean invite(String invitemail, String url) { public boolean invite(String invitemail, String url, GroupMembership inviteGm) {
invitemail = invitemail.trim(); invitemail = invitemail.trim();
List<User> usercheck = userFacade.findByEmail(invitemail); List<User> usercheck = userFacade.findByEmail(invitemail);
if (usercheck.size() > 0) { if (usercheck.size() > 0 && inviteGm == null) {
logger.info("Email already exists {}", invitemail);
return false; return false;
} }
EventUser creator = permbean.getCurrentUser(); EventUser creator = permbean.getCurrentUser();
LanEvent ev = eventBean.getCurrentEvent(); LanEvent ev = eventBean.getCurrentEvent();
PlaceGroup pg = new PlaceGroup(ev, Calendar.getInstance(), Calendar.getInstance(), false);
pg.setCreator(creator);
pg.setName("Invite to " + invitemail); String token;
String token = PasswordFunctions.generateRandomString(30, PasswordFunctions.ALL_CHARS); do {
pg.getMembers().add(new GroupMembership(pg, null, token)); token = PasswordFunctions.generateRandomString(30, PasswordFunctions.ALL_CHARS);
pgfacade.create(pg); } while (gmfacade.findByToken(token) != null); // newer trust random
PlaceGroup pg;
if(inviteGm != null) {
inviteGm.setInviteToken(token);
inviteGm.setInviteEmail(invitemail);
gmfacade.merge(inviteGm);
pg = inviteGm.getPlaceGroup();
} else {
pg = new PlaceGroup(ev, Calendar.getInstance(), Calendar.getInstance(), false);
pg.setCreator(creator);
pg.setName("Invite to " + invitemail);
GroupMembership gm = new GroupMembership(pg, null, token);
gm.setInviteEmail(invitemail);
pg.getMembers().add(gm);
pgfacade.create(pg);
}
MailMessage msg = new MailMessage(); MailMessage msg = new MailMessage();
msg.setSubject(eventBean.getPropertyString(LanEventPropertyKey.INVITEMAIL_SUBJECT)); msg.setSubject(eventBean.getPropertyString(LanEventPropertyKey.INVITEMAIL_SUBJECT));
...@@ -573,6 +595,15 @@ public class UserBean implements UserBeanLocal { ...@@ -573,6 +595,15 @@ public class UserBean implements UserBeanLocal {
} }
@Override @Override
public void cancelInvite(GroupMembership ship) {
ship = gmfacade.merge(ship);
ship.setInviteToken(gmfacade.createInviteToken());
ship.setInviteEmail(null);
ship.setInviteName(null);
}
@Override
@PermitAll @PermitAll
public GroupMembership findToken(String token) { public GroupMembership findToken(String token) {
return gmfacade.findByToken(token); return gmfacade.findByToken(token);
...@@ -599,13 +630,19 @@ public class UserBean implements UserBeanLocal { ...@@ -599,13 +630,19 @@ public class UserBean implements UserBeanLocal {
public boolean createFromInviteToken(EventUser user, String token) { public boolean createFromInviteToken(EventUser user, String token) {
if (user == null || user.getLogin() == null) if (user == null || user.getLogin() == null)
return false; return false;
GroupMembership gm = findToken(token); GroupMembership gm = findToken(token);
// Check that invite has not already been accepted! // Check that invite has not already been accepted!
if (gm == null || gm.getUser() != null || gm.getInviteAccepted() != null) { if (gm == null || gm.getUser() != null || gm.getInviteAccepted() != null) {
return false; return false;
} }
user.setEvent(eventBean.getCurrentEvent()); user.setEvent(eventBean.getCurrentEvent());
if(user.getLogin() == null || user.getLogin().trim().isEmpty()) {
user.setLogin(user.getEmail());
}
gm.setUser(user); gm.setUser(user);
gm.setInviteAccepted(Calendar.getInstance()); gm.setInviteAccepted(Calendar.getInstance());
...@@ -724,6 +761,13 @@ public class UserBean implements UserBeanLocal { ...@@ -724,6 +761,13 @@ public class UserBean implements UserBeanLocal {
} }
@Override @Override
public boolean userExistsByEmail(String email) {
List<User> usr = userFacade.findByEmail(email);
return (usr != null && usr.size() > 0);
}
@Override
public EventUser findByEventUserId(Integer integer) { public EventUser findByEventUserId(Integer integer) {
return eventUserFacade.find(integer); return eventUserFacade.find(integer);
} }
......
...@@ -93,7 +93,7 @@ public class UserFacade extends IntegerPkGenericFacade<User> { ...@@ -93,7 +93,7 @@ public class UserFacade extends IntegerPkGenericFacade<User> {
CriteriaBuilder cb = getEm().getCriteriaBuilder(); CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<User> cq = cb.createQuery(User.class); CriteriaQuery<User> cq = cb.createQuery(User.class);
Root<User> root = cq.from(User.class); Root<User> root = cq.from(User.class);
cq.where(cb.equal(root.get(User_.login), login)); cq.where(cb.equal(cb.lower(root.get(User_.login)), login.toLowerCase()));
return getSingleNullableResult(getEm().createQuery(cq)); return getSingleNullableResult(getEm().createQuery(cq));
} }
...@@ -139,7 +139,7 @@ public class UserFacade extends IntegerPkGenericFacade<User> { ...@@ -139,7 +139,7 @@ public class UserFacade extends IntegerPkGenericFacade<User> {
CriteriaBuilder cb = getEm().getCriteriaBuilder(); CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<User> cq = cb.createQuery(User.class); CriteriaQuery<User> cq = cb.createQuery(User.class);
Root<User> root = cq.from(User.class); Root<User> root = cq.from(User.class);
cq.where(cb.equal(root.get(User_.email), email)); cq.where(cb.equal(cb.upper(root.get(User_.email)), email.toUpperCase()));
return getEm().createQuery(cq).getResultList(); return getEm().createQuery(cq).getResultList();
} }
......
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
<h:outputText rendered="#{empty placeGroupView.groupMemberships}" value="#{i18n['placegroupview.noMemberships']}" /> <h:outputText rendered="#{empty placeGroupView.groupMemberships}" value="#{i18n['placegroupview.noMemberships']}" />
<h:form rendered="#{!empty placeGroupView.groupMemberships}" id="placelistform"> <h:form rendered="#{!empty placeGroupView.groupMemberships}" id="placelistform">
<p:dataTable value="#{placeGroupView.groupMemberships}" var="member"> <p:dataTable value="#{placeGroupView.groupMemberships}" var="member" id="placestable">
<p:column> <p:column>
<f:facet name="header"> <f:facet name="header">
...@@ -38,7 +38,6 @@ ...@@ -38,7 +38,6 @@
</f:facet> </f:facet>
<h:outputText rendered="#{empty member.user}" value="#{member.inviteToken}" /> <h:outputText rendered="#{empty member.user}" value="#{member.inviteToken}" />
<h:outputText rendered="#{!empty member.user}" value="#{member.user.firstnames} #{member.user.lastname} (#{member.user.nick})" /> <h:outputText rendered="#{!empty member.user}" value="#{member.user.firstnames} #{member.user.lastname} (#{member.user.nick})" />
</p:column> </p:column>
<p:column> <p:column>
<f:facet name="header"> <f:facet name="header">
...@@ -50,9 +49,22 @@ ...@@ -50,9 +49,22 @@
<p:column> <p:column>
<h:commandButton rendered="#{placeGroupView.canModifyCurrent and placeGroupView.currentMemberUserNotNull and placeGroupView.currentReleaseAllowed}" action="#{placeGroupView.releasePlace()}" value="#{i18n['placegroupview.releasePlace']}" /> <h:commandButton rendered="#{placeGroupView.canModifyCurrent and placeGroupView.currentMemberUserNotNull and placeGroupView.currentReleaseAllowed}" action="#{placeGroupView.releasePlace()}" value="#{i18n['placegroupview.releasePlace']}" />
<p:inputText immediate="true" rendered="#{placeGroupView.canSendInviteCurrent}" value="#{placeGroupView.inviteMail}" />
<p:commandButton rendered="#{placeGroupView.canSendInviteCurrent}" value="#{i18n['user.invite']}" actionListener="#{placeGroupView.sendInvite}" update=":messages placestable" />
<h:outputText rendered="#{placeGroupView.showCancelInviteCurrent}" value="#{member.inviteEmail}" />&nbsp;&nbsp;
<p:commandButton rendered="#{placeGroupView.showCancelInviteCurrent}" value="#{i18n['user.cancelInvite']}" actionListener="#{placeGroupView.cancelInvite}" update=":messages placestable" />
</p:column> </p:column>
</p:dataTable> </p:dataTable>
<p:dialog header="Basic Dialog" widgetVar="dlg1" minHeight="40">
<h:outputText value="Resistance to PrimeFaces is futile!" />
</p:dialog>
</h:form> </h:form>
<p> <p>
......
...@@ -11,31 +11,29 @@ ...@@ -11,31 +11,29 @@
</f:metadata> </f:metadata>
<ui:define name="title"> <ui:define name="title">
<h1> <h1>
<h:outputText value="#{i18n['user.invite.header']}" /> <h:outputText rendered="#{!inviteAcceptView.placeGroupMembership}" value="#{i18n['user.invite.header']}" />
<h:outputText rendered="#{inviteAcceptView.placeGroupMembership}" value="#{i18n['user.invite.placeInvite.header']}" />
</h1> </h1>
</ui:define> </ui:define>
<ui:define name="content"> <ui:define name="content">
<ui:fragment rendered="#{!inviteAcceptView.done}"> <ui:fragment rendered="#{!inviteAcceptView.done}">
<h2> <p:fieldset legend="#{i18n['invite.existingUserHeader']}">
<h:outputText value="#{i18n['invite.existingUserHeader']}" /> <h:form>
</h2> <h:panelGrid columns="2">
<h:form> <h:outputLabel for="login" />
<h:panelGrid columns="2"> <p:inputText label="#{i18n['login.username']}" id="login" value="#{inviteAcceptView.username}" />
<h:outputLabel for="login" />
<p:inputText label="#{i18n['login.username']}" id="login" value="#{inviteAcceptView.username}" />
<h:outputLabel for="pwd" /> <h:outputLabel for="pwd" />
<p:password label="#{i18n['login.password']}" id="pwd" value="#{inviteAcceptView.password}" /> <p:password label="#{i18n['login.password']}" id="pwd" value="#{inviteAcceptView.password}" />
</h:panelGrid> </h:panelGrid>
<p:commandButton id="submit" action="#{inviteAcceptView.loginWithExisting()}" ajax="false" value="#{i18n['login.submit']}" /> <p:commandButton id="submit" action="#{inviteAcceptView.loginWithExisting()}" ajax="false" value="#{i18n['login.submit']}" />
</h:form> </h:form>
</p:fieldset>
<h2> <br /><br /><br />
<h:outputText value="#{i18n['invite.createNewUserHeader']}" /> <p:fieldset legend="#{i18n['invite.createNewUserHeader']}">
</h2> <users:create creating="true" commitaction="#{inviteAcceptView.createUser()}" commitvalue="#{i18n['user.create']}" />
</p:fieldset>
<users:create creating="true" commitaction="#{inviteAcceptView.createUser()}" commitvalue="#{i18n['user.create']}" />
</ui:fragment> </ui:fragment>
</ui:define> </ui:define>
</ui:composition> </ui:composition>
......
...@@ -19,7 +19,9 @@ ...@@ -19,7 +19,9 @@
package fi.codecrew.moya.web.cdiview.map; package fi.codecrew.moya.web.cdiview.map;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import javax.ejb.EJB; import javax.ejb.EJB;
import javax.enterprise.context.ConversationScoped; import javax.enterprise.context.ConversationScoped;
...@@ -28,6 +30,7 @@ import javax.inject.Inject; ...@@ -28,6 +30,7 @@ import javax.inject.Inject;
import javax.inject.Named; import javax.inject.Named;
import fi.codecrew.moya.beans.PlaceGroupBeanLocal; import fi.codecrew.moya.beans.PlaceGroupBeanLocal;
import fi.codecrew.moya.beans.UserBeanLocal;
import fi.codecrew.moya.enums.apps.MapPermission; import fi.codecrew.moya.enums.apps.MapPermission;
import fi.codecrew.moya.model.EventUser; import fi.codecrew.moya.model.EventUser;
import fi.codecrew.moya.model.GroupMembership; import fi.codecrew.moya.model.GroupMembership;
...@@ -35,12 +38,17 @@ import fi.codecrew.moya.model.Place; ...@@ -35,12 +38,17 @@ import fi.codecrew.moya.model.Place;
import fi.codecrew.moya.model.PlaceGroup; import fi.codecrew.moya.model.PlaceGroup;
import fi.codecrew.moya.web.annotations.SelectedUser; import fi.codecrew.moya.web.annotations.SelectedUser;
import fi.codecrew.moya.web.cdiview.GenericCDIView; import fi.codecrew.moya.web.cdiview.GenericCDIView;
import fi.codecrew.moya.web.cdiview.shop.InviteView;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Named("placeGroupView") @Named("placeGroupView")
@ConversationScoped @ConversationScoped
public class PlacegroupView extends GenericCDIView { public class PlacegroupView extends GenericCDIView {
private static final long serialVersionUID = -3934253910818396155L; private static final long serialVersionUID = -3934253910818396155L;
private static final Logger logger = LoggerFactory.getLogger(PlacegroupView.class);
// @Inject // @Inject
// private UserView userview; // private UserView userview;
...@@ -51,6 +59,12 @@ public class PlacegroupView extends GenericCDIView { ...@@ -51,6 +59,12 @@ public class PlacegroupView extends GenericCDIView {
@EJB @EJB
private transient PlaceGroupBeanLocal placegroupBean; private transient PlaceGroupBeanLocal placegroupBean;
@EJB
UserBeanLocal userBean;
@Inject
private InviteView inviteView;
private Place place; private Place place;
private PlaceGroup group; private PlaceGroup group;
...@@ -59,6 +73,8 @@ public class PlacegroupView extends GenericCDIView { ...@@ -59,6 +73,8 @@ public class PlacegroupView extends GenericCDIView {
private transient ListDataModel<GroupMembership> memberlist; private transient ListDataModel<GroupMembership> memberlist;
private Map<Integer, String> inviteMails = new HashMap<>();
public String editGroup() { public String editGroup() {
setGroup(placegroups.getRowData()); setGroup(placegroups.getRowData());
setPlacelist(new ListDataModel<Place>(group.getPlaces())); setPlacelist(new ListDataModel<Place>(group.getPlaces()));
...@@ -80,6 +96,35 @@ public class PlacegroupView extends GenericCDIView { ...@@ -80,6 +96,35 @@ public class PlacegroupView extends GenericCDIView {
return canModify(memberlist.getRowData()); return canModify(memberlist.getRowData());
} }
public boolean isShowCancelInviteCurrent() {
GroupMembership row = memberlist.getRowData();
if(row == null)
return false;
if(!isCanModifyCurrent())
return false;
if(row.getUser() == null && (row.getInviteEmail() != null && !row.getInviteEmail().trim().isEmpty()))
return true;
return false;
}
public boolean isCanSendInviteCurrent() {
GroupMembership row = memberlist.getRowData();
if(row == null)
return false;
if(!isCanModifyCurrent())
return false;
if(row.getUser() == null && (row.getInviteEmail() == null || row.getInviteEmail().trim().isEmpty()))
return true;
return false;
}
public boolean isCurrentMemberUserNotNull() { public boolean isCurrentMemberUserNotNull() {
GroupMembership row = memberlist.getRowData(); GroupMembership row = memberlist.getRowData();
if (row != null && row.getUser() != null) if (row != null && row.getUser() != null)
...@@ -169,4 +214,45 @@ public class PlacegroupView extends GenericCDIView { ...@@ -169,4 +214,45 @@ public class PlacegroupView extends GenericCDIView {
public void setUser(EventUser user) { public void setUser(EventUser user) {
this.user = user; this.user = user;
} }
public void sendInvite() {
GroupMembership row = memberlist.getRowData();
if (row != null) {
if (permbean.isCurrentUser(row.getPlaceGroup().getCreator()) || permbean.hasPermission(MapPermission.MANAGE_OTHERS)) {
String inviteMail = inviteMails.get(row.getId());
inviteView.setInviteGm(row);
inviteView.setInvitemail(inviteMail);
inviteView.invite();
}
}
}
public void cancelInvite() {
GroupMembership row = memberlist.getRowData();
if (row != null) {
if (permbean.isCurrentUser(row.getPlaceGroup().getCreator()) || permbean.hasPermission(MapPermission.MANAGE_OTHERS)) {
userBean.cancelInvite(row);
}
}
}
public String getInviteMail() {
GroupMembership row = memberlist.getRowData();
if(row != null) {
return inviteMails.get(row.getId());
}
return null;
}
public void setInviteMail(String inviteMail) {
GroupMembership row = memberlist.getRowData();
if(row != null) {
inviteMails.put(row.getId(), inviteMail);
}
}
} }
...@@ -27,6 +27,7 @@ import javax.inject.Named; ...@@ -27,6 +27,7 @@ import javax.inject.Named;
import javax.servlet.ServletException; import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import fi.codecrew.moya.web.cdiview.user.AuthView;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
...@@ -50,6 +51,9 @@ public class InviteAcceptView extends GenericCDIView { ...@@ -50,6 +51,9 @@ public class InviteAcceptView extends GenericCDIView {
@Inject @Inject
private UserView userview; private UserView userview;
@Inject
private AuthView authView;
private EventUser user; private EventUser user;
private boolean done = false; private boolean done = false;
...@@ -60,6 +64,8 @@ public class InviteAcceptView extends GenericCDIView { ...@@ -60,6 +64,8 @@ public class InviteAcceptView extends GenericCDIView {
private static final Logger logger = LoggerFactory.getLogger(InviteAcceptView.class); private static final Logger logger = LoggerFactory.getLogger(InviteAcceptView.class);
private boolean placeGroupMembership = false;
public void initView() { public void initView() {
if (membership == null) { if (membership == null) {
...@@ -72,6 +78,10 @@ public class InviteAcceptView extends GenericCDIView { ...@@ -72,6 +78,10 @@ public class InviteAcceptView extends GenericCDIView {
} else if (user == null) { } else if (user == null) {
user = new EventUser(new User(), null, permbean.getCurrentUser()); user = new EventUser(new User(), null, permbean.getCurrentUser());
userview.setUser(user); userview.setUser(user);
if(membership.getPlaceReservation() != null)
setPlaceGroupMembership(true);
super.beginConversation(); super.beginConversation();
} }
...@@ -89,6 +99,14 @@ public class InviteAcceptView extends GenericCDIView { ...@@ -89,6 +99,14 @@ public class InviteAcceptView extends GenericCDIView {
EventUser eu = userbean.acceptInviteForExistingUser(username, password, token); EventUser eu = userbean.acceptInviteForExistingUser(username, password, token);
if (eu != null) { if (eu != null) {
login(username, password); login(username, password);
this.username = null;
this.password = null;
super.addFaceMessage("invite.userCreateSuccessfull");
if(isPlaceGroupMembership())
return "/place/myGroups.jsf";
else
return "/index.jsf";
} }
this.username = null; this.username = null;
this.password = null; this.password = null;
...@@ -102,11 +120,11 @@ public class InviteAcceptView extends GenericCDIView { ...@@ -102,11 +120,11 @@ public class InviteAcceptView extends GenericCDIView {
String existingUsername = null; String existingUsername = null;
if (req.getUserPrincipal() != null) { if (req.getUserPrincipal() != null) {
if (User.ANONYMOUS_LOGINNAME.equals(req.getUserPrincipal().getName())) { if (req.getUserPrincipal() != null) {
try { try {
req.logout(); req.logout();
} catch (ServletException e) { } catch (ServletException e) {
logger.warn("Logging out anonymous failed!", e); logger.warn("Logging out previous user failed!", e);
} }
} else { } else {
existingUsername = req.getUserPrincipal().getName(); existingUsername = req.getUserPrincipal().getName();
...@@ -127,6 +145,16 @@ public class InviteAcceptView extends GenericCDIView { ...@@ -127,6 +145,16 @@ public class InviteAcceptView extends GenericCDIView {
user.getUser().resetPassword(userview.getPassword()); user.getUser().resetPassword(userview.getPassword());
if (userbean.createFromInviteToken(user, token)) { if (userbean.createFromInviteToken(user, token)) {
login(user.getUser().getLogin(), userview.getPassword()); login(user.getUser().getLogin(), userview.getPassword());
super.addFaceMessage("invite.userCreateSuccessfull");
done = true;
user = null;
if(isPlaceGroupMembership())
return "/place/myGroups.jsf";
else
return "/index.jsf";
} }
super.addFaceMessage("invite.userCreateSuccessfull"); super.addFaceMessage("invite.userCreateSuccessfull");
done = true; done = true;
...@@ -174,4 +202,11 @@ public class InviteAcceptView extends GenericCDIView { ...@@ -174,4 +202,11 @@ public class InviteAcceptView extends GenericCDIView {
this.password = password; this.password = password;
} }
public boolean isPlaceGroupMembership() {
return placeGroupMembership;
}
public void setPlaceGroupMembership(boolean placeGroupMembership) {
this.placeGroupMembership = placeGroupMembership;
}
} }
...@@ -24,6 +24,7 @@ import javax.faces.context.ExternalContext; ...@@ -24,6 +24,7 @@ import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext; import javax.faces.context.FacesContext;
import javax.inject.Named; import javax.inject.Named;
import fi.codecrew.moya.model.GroupMembership;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
...@@ -39,6 +40,9 @@ public class InviteView extends GenericCDIView { ...@@ -39,6 +40,9 @@ public class InviteView extends GenericCDIView {
private String invitemail; private String invitemail;
private GroupMembership inviteGm;
@EJB @EJB
private transient UserBeanLocal userbean; private transient UserBeanLocal userbean;
...@@ -68,7 +72,9 @@ public class InviteView extends GenericCDIView { ...@@ -68,7 +72,9 @@ public class InviteView extends GenericCDIView {
path.append("/") path.append("/")
.append(FacesContext.getCurrentInstance().getExternalContext().getContextName()) .append(FacesContext.getCurrentInstance().getExternalContext().getContextName())
.append("/user/acceptInvite.jsf?token={0}"); .append("/user/acceptInvite.jsf?token={0}");
boolean ret = userbean.invite(invitemail, path.toString());
boolean ret = userbean.invite(invitemail, path.toString(), inviteGm);
if (ret) { if (ret) {
this.addFaceMessage("invite.successfull"); this.addFaceMessage("invite.successfull");
invitemail = ""; invitemail = "";
...@@ -87,4 +93,13 @@ public class InviteView extends GenericCDIView { ...@@ -87,4 +93,13 @@ public class InviteView extends GenericCDIView {
return invitemail; return invitemail;
} }
public GroupMembership getInviteGm() {
return inviteGm;
}
public void setInviteGm(GroupMembership inviteGm) {
this.inviteGm = inviteGm;
}
} }
...@@ -65,6 +65,10 @@ public class UserValidator implements Serializable { ...@@ -65,6 +65,10 @@ public class UserValidator implements Serializable {
message(context, ui, "user.emailtooshortmessage", EMAIL_MIN_LENGTH); message(context, ui, "user.emailtooshortmessage", EMAIL_MIN_LENGTH);
} }
if(userbean.userExistsByEmail(email) || userbean.userExists(email)) {
message(context, ui, "userview.userExistsByEmail");
}
if (!permbean.hasPermission(UserPermission.MODIFY) && (email == null || email.indexOf('@') == -1)) { if (!permbean.hasPermission(UserPermission.MODIFY) && (email == null || email.indexOf('@') == -1)) {
message(context, ui, "userview.invalidEmail"); message(context, ui, "userview.invalidEmail");
} }
......
...@@ -426,3 +426,6 @@ user.createdmessage=K\u00E4ytt\u00E4j\u00E4tunnus on luotu onnistuneesti. ...@@ -426,3 +426,6 @@ user.createdmessage=K\u00E4ytt\u00E4j\u00E4tunnus on luotu onnistuneesti.
product.vat=ALV-% product.vat=ALV-%
productFlag.CREATE_NEW_PLACE_WHEN_BOUGHT=Luo uusi paikka ostettaessa productFlag.CREATE_NEW_PLACE_WHEN_BOUGHT=Luo uusi paikka ostettaessa
submenu.neomap.view=Paikkakartta submenu.neomap.view=Paikkakartta
user.cancelInvite=Peruuta kutsu
user.invite.placeInvite.header=Liit\u00E4 paikka itsellesi
userview.userExistsByEmail=
...@@ -1559,7 +1559,7 @@ usertitle.managingUser = Shop ...@@ -1559,7 +1559,7 @@ usertitle.managingUser = Shop
userview.header = Users userview.header = Users
userview.invalidEmail = Invalid email address userview.invalidEmail = Invalid email address
userview.loginstringFaulty = Username has to be atleast 2 characters long! userview.loginstringFaulty = Username has to be atleast 2 characters long\!
userview.oldPasswordError = Invalid password! userview.oldPasswordError = Invalid password!
userview.passwordTooShort = Password has to be atleast {0} characters long\! userview.passwordTooShort = Password has to be atleast {0} characters long\!
userview.passwordsChanged = Password changed userview.passwordsChanged = Password changed
...@@ -1623,3 +1623,6 @@ user.emailAgain=Email (again) ...@@ -1623,3 +1623,6 @@ user.emailAgain=Email (again)
required=Required required=Required
usercart.showoverview= usercart.showoverview=
submenu.neomap.view=Map submenu.neomap.view=Map
user.cancelInvite=Cancel invite
user.invite.placeInvite.header=Receive sendet place
userview.userExistsByEmail=Email already exists\! You may already have an account.
...@@ -1604,3 +1604,6 @@ user.emailsunmatch=S\u00E4hk\u00F6postiosoitteet eiv\u00E4t t\u00E4sm\u00E4\u00E ...@@ -1604,3 +1604,6 @@ user.emailsunmatch=S\u00E4hk\u00F6postiosoitteet eiv\u00E4t t\u00E4sm\u00E4\u00E
user.emailAgain=S\u00E4hk\u00F6posti (uudelleen) user.emailAgain=S\u00E4hk\u00F6posti (uudelleen)
required=Vaaditaan required=Vaaditaan
submenu.neomap.view=Paikkakartta submenu.neomap.view=Paikkakartta
user.cancelInvite=Peruuta kutsu
user.invite.placeInvite.header=Vastaanota l\u00E4hetetty paikka
userview.userExistsByEmail=S\u00E4hk\u00F6posti on jo olemassa. Sinulla saattaa jo olla tunnus j\u00E4rjestelm\u00E4ss\u00E4.
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!