Commit 3081bf18 by Tuomas Riihimäki

eh... Pitäis opetella committaamaan pienempiä paloja....

  - Verkkomaksu varmistusjuttuja.
  - Productin prepaidInstant ja userPrepaid korvattu productFlageillä
  - Kuvanuppimisjuttuja ( JPG on saatanasta... Rikkoo kaikki muista formaateista konvertoidut kuvat.. Käytetään PNG:tä )
  - Luotu uusi PrivatePermission jutuke eventille, jonne voi tallentaa juttuja joita ei haluta EJB kerroksen ulkopuolelle ilman riittäviä oikeuksia ( eg. verkkomaksuavaiet )
  - Mahdollisuus luoda lennosta paikkoja ( esim pelilisenssit ) -> Placelta not null Map rajoitus pois...
  - Varmaan jotain muutakin....
.
1 parent d8fa1439
Showing with 1024 additions and 792 deletions
......@@ -7,10 +7,6 @@
<attribute name="owner.project.facets" value="jst.ejb"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6">
<attributes>
<attribute name="owner.project.facets" value="java"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="output" path="build/classes"/>
</classpath>
<?xml version="1.0" encoding="UTF-8"?>
<ejb-jar xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:ejb="http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_1.xsd" version="3.1">
<display-name>LanBortalBeans </display-name>
<ejb-client-jar>LanBortalBeansClient.jar</ejb-client-jar>
<ejb-jar xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:ejb="http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_1.xsd"
version="3.1">
<display-name>LanBortalBeans</display-name>
<ejb-client-jar>LanBortalBeansClient.jar</ejb-client-jar>
</ejb-jar>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sun-ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Application Server 9.0 EJB 3.0//EN" "http://www.sun.com/software/appserver/dtds/sun-ejb-jar_3_0-0.dtd">
<sun-ejb-jar>
<enterprise-beans/>
<enterprise-beans />
</sun-ejb-jar>
......@@ -20,8 +20,8 @@ import fi.insomnia.bortal.enums.apps.UserPermission;
import fi.insomnia.bortal.facade.AccountEventFacade;
import fi.insomnia.bortal.model.AccountEvent;
import fi.insomnia.bortal.model.EventUser;
import fi.insomnia.bortal.model.IUser;
import fi.insomnia.bortal.model.Product;
import fi.insomnia.bortal.model.ProductFlag;
import fi.insomnia.bortal.model.Role;
/**
......@@ -80,7 +80,7 @@ public class AccountEventBean implements AccountEventBeanLocal {
}
@Override
public List<Role> getRolesFromAccountEvents(IUser u) {
public List<Role> getRolesFromAccountEvents(EventUser u) {
return accountfacade.findProvidedRoles(eventBean.getCurrentEvent(), u);
}
......@@ -107,7 +107,7 @@ public class AccountEventBean implements AccountEventBeanLocal {
tot = tot.add(prodentry.getValue().multiply(prodentry.getKey().getPrice()));
}
if (prodentry.getKey().isPrepaidInstant() && prodentry.getKey().getPlaces() != null && !prodentry.getKey().getPlaces().isEmpty()) {
if (prodentry.getKey().getProductFlags().contains(ProductFlag.RESERVE_PLACE_WHEN_BOUGHT) || prodentry.getKey().getProductFlags().contains(ProductFlag.CREATE_NEW_PLACE_WHEN_BOUGHT)) {
logger.debug("Prepaidplace");
placebean.lockPlaceProduct(shoppingUser, prodentry.getKey(), BigDecimal.ONE);
......
......@@ -25,9 +25,11 @@ import fi.insomnia.bortal.facade.BillLineFacade;
import fi.insomnia.bortal.model.AccountEvent;
import fi.insomnia.bortal.model.Bill;
import fi.insomnia.bortal.model.BillLine;
import fi.insomnia.bortal.model.EventUser;
import fi.insomnia.bortal.model.IUser;
import fi.insomnia.bortal.model.LanEvent;
import fi.insomnia.bortal.model.Product;
import fi.insomnia.bortal.model.ProductFlag;
import fi.insomnia.bortal.util.MailMessage;
import fi.insomnia.bortal.utilities.I18n;
......@@ -41,7 +43,8 @@ import fi.insomnia.bortal.utilities.I18n;
BillPermission.S_READ_ALL,
BillPermission.S_VIEW_OWN,
BillPermission.S_WRITE_ALL,
SpecialPermission.S_USER
SpecialPermission.S_USER,
SpecialPermission.S_VERKKOMAKSU_CHECK,
})
public class BillBean implements BillBeanLocal {
......@@ -196,7 +199,7 @@ public class BillBean implements BillBeanLocal {
}
@Override
@RolesAllowed(BillPermission.S_WRITE_ALL)
@RolesAllowed({ BillPermission.S_WRITE_ALL, SpecialPermission.S_VERKKOMAKSU_CHECK })
public void markPaid(Bill bill, Calendar when) {
if (bill.getAccountEvent() != null || bill.getPaidDate() != null)
......@@ -220,9 +223,12 @@ public class BillBean implements BillBeanLocal {
for (BillLine bl : bill.getBillLines()) {
Product prod = bl.getLineProduct();
if (prod != null) {
if (prod.isPrepaidInstant()) {
if (prod.getProductFlags().contains(ProductFlag.PREPAID_INSTANT_CREATE)) {
logger.debug("Creating Bill prepaidInstant product {}, {}", prod.getName(), bl.getQuantity());
if (prod.getPlaces().size() > 0) {
if (prod.getProductFlags().contains(ProductFlag.RESERVE_PLACE_WHEN_BOUGHT)
|| prod.getProductFlags().contains(ProductFlag.CREATE_NEW_PLACE_WHEN_BOUGHT))
{
placebean.lockPlaceProduct(bill.getUser(), prod, bl.getQuantity());
}
......@@ -256,7 +262,7 @@ public class BillBean implements BillBeanLocal {
@Override
@RolesAllowed({ BillPermission.S_VIEW_OWN, BillPermission.S_READ_ALL })
public List<Bill> find(IUser user) {
public List<Bill> find(EventUser user) {
if (!permbean.isCurrentUser(user) && !permbean.hasPermission(BillPermission.READ_ALL)) {
loggingBean.logMessage(SecurityLogType.permissionDenied, permbean.getCurrentUser(), "Not enought rights to get bill list for user ");
throw new EJBAccessException("Could not list bills for another user");
......
package fi.insomnia.bortal.beans;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.security.DeclareRoles;
import javax.annotation.security.RolesAllowed;
import javax.ejb.EJB;
import javax.ejb.LocalBean;
......@@ -13,14 +15,18 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.clientutils.BortalLocalContextHolder;
import fi.insomnia.bortal.enums.apps.EventPermission;
import fi.insomnia.bortal.enums.apps.SpecialPermission;
import fi.insomnia.bortal.facade.EventFacade;
import fi.insomnia.bortal.facade.EventOrganiserFacade;
import fi.insomnia.bortal.facade.LanEventDomainFacade;
import fi.insomnia.bortal.facade.LanEventPrivatePropertyFacade;
import fi.insomnia.bortal.facade.LanEventPropertyFacade;
import fi.insomnia.bortal.model.EventOrganiser;
import fi.insomnia.bortal.model.LanEvent;
import fi.insomnia.bortal.model.LanEventDomain;
import fi.insomnia.bortal.model.LanEventPrivateProperty;
import fi.insomnia.bortal.model.LanEventPrivatePropertyKey;
import fi.insomnia.bortal.model.LanEventProperty;
import fi.insomnia.bortal.model.LanEventPropertyKey;
......@@ -29,6 +35,11 @@ import fi.insomnia.bortal.model.LanEventPropertyKey;
*/
@Stateless
@LocalBean
@DeclareRoles({ EventPermission.S_MANAGE_PRIVATE_PROPERTIES,
EventPermission.S_MANAGE_PROPERTIES,
SpecialPermission.S_ORGANISATION_ADMIN,
SpecialPermission.S_SUPERADMIN,
})
public class EventBean implements EventBeanLocal {
private static final String DEFAULT_EVENT_NAME = "Default event";
......@@ -51,6 +62,8 @@ public class EventBean implements EventBeanLocal {
private LanEventDomainFacade domainfacade;
@EJB
private LanEventPropertyFacade eventPropertyFacade;
@EJB
private LanEventPrivatePropertyFacade eventPrivatePropertyFacade;
@Override
public LanEvent getEventByHostname(String hostname) {
......@@ -143,6 +156,32 @@ public class EventBean implements EventBeanLocal {
}
@Override
@RolesAllowed({ EventPermission.S_MANAGE_PRIVATE_PROPERTIES, SpecialPermission.S_ORGANISATION_ADMIN })
public List<LanEventPrivateProperty> getPrivateProperties()
{
return eventPrivatePropertyFacade.findAllForEvent();
}
// This method should not be overridden!
// Private properties should not be viewable outside EJB layer
// without MANAGE_PRIVATE_PROPERTIES role
public LanEventPrivateProperty getPrivateProperty(LanEventPrivatePropertyKey property) {
logger.info("Returning property {} from {}", property, eventPrivatePropertyFacade);
return eventPrivatePropertyFacade.getPropertyForEvent(property);
}
public String getPrivatePropertyString(LanEventPrivatePropertyKey property) {
LanEventPrivateProperty retProp = eventPrivatePropertyFacade.getPropertyForEvent(property);
String ret = null;
if (retProp == null) {
ret = property.getDefaultvalue();
} else {
ret = retProp.getTextvalue();
}
return ret;
}
@Override
public LanEventProperty getProperty(LanEventPropertyKey property) {
return eventPropertyFacade.find(getCurrentEvent(), property);
}
......@@ -185,4 +224,28 @@ public class EventBean implements EventBeanLocal {
return ret;
}
@Override
@RolesAllowed({ SpecialPermission.S_SUPERADMIN, SpecialPermission.S_ORGANISATION_ADMIN })
public EventOrganiser mergeChanges(EventOrganiser eventorg) {
return eventOrganiserFacade.merge(eventorg);
}
@Override
@RolesAllowed({ EventPermission.S_MANAGE_PRIVATE_PROPERTIES, SpecialPermission.S_ORGANISATION_ADMIN })
public LanEventPrivateProperty saveOrCreatePrivateProperty(LanEventPrivateProperty privateProperty) {
LanEventPrivateProperty ret = null;
logger.info("Saving property {}, eventorg {}, key {}", new Object[] { privateProperty.getEvent(), privateProperty.getEventorg(), privateProperty.getKey() });
if (privateProperty.getId() == null)
{
ret = privateProperty;
// eventPropertyFacade.create(property);
eventPrivatePropertyFacade.create(privateProperty);
} else {
ret = eventPrivatePropertyFacade.merge(privateProperty);
}
return ret;
}
}
......@@ -9,6 +9,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.enums.apps.MapPermission;
import fi.insomnia.bortal.facade.EventFacade;
import fi.insomnia.bortal.facade.EventMapFacade;
import fi.insomnia.bortal.model.EventMap;
import fi.insomnia.bortal.model.LanEvent;
......@@ -25,6 +26,8 @@ public class EventMapBean implements EventMapBeanLocal {
@EJB
private EventBeanLocal eventbean;
@EJB
private EventFacade eventfacade;
private static final Logger logger = LoggerFactory.getLogger(EventMapBean.class);
......@@ -63,4 +66,13 @@ public class EventMapBean implements EventMapBeanLocal {
public EventMap find(Integer mapId) {
return eventmapfacade.find(mapId);
}
@Override
@RolesAllowed(MapPermission.S_MANAGE_MAPS)
public EventMap clearPlaces(EventMap map) {
EventMap leMap = eventmapfacade.reload(map);
leMap.getPlaces().clear();
return leMap;
}
}
......@@ -11,8 +11,8 @@ import fi.insomnia.bortal.enums.apps.SpecialPermission;
import fi.insomnia.bortal.facade.EventFacade;
import fi.insomnia.bortal.facade.EventOrganiserFacade;
import fi.insomnia.bortal.model.EventOrganiser;
import fi.insomnia.bortal.model.IUser;
import fi.insomnia.bortal.model.LanEvent;
import fi.insomnia.bortal.model.User;
/**
* Session Bean implementation class EventOrganiserBean
......@@ -76,7 +76,7 @@ public class EventOrganiserBean implements EventOrganiserBeanLocal {
// }
@Override
public List<EventOrganiser> getOrganisations(IUser user) {
public List<EventOrganiser> getOrganisations(User user) {
// TODO: korjaa!!!
return null;
}
......
......@@ -30,13 +30,13 @@ import fi.insomnia.bortal.model.User;
public class JaasBean implements JaasBeanLocal, JaasBeanRemote {
private static final Logger logger = LoggerFactory.getLogger(JaasBean.class);
@EJB
private UserFacade userfacade;
@EJB
private EventUserFacade eventUserFacade;
@EJB
private LoggingBeanLocal secubean;
......@@ -54,13 +54,13 @@ public class JaasBean implements JaasBeanLocal, JaasBeanRemote {
// Might not have EventUser
if (eventUser == null) {
User user = userfacade.findByLogin(username.trim());
if (user != null) {
eventUser = new EventUser(user, eventbean.getCurrentEvent());
eventUserFacade.merge(eventUser);
}
}
EventUser ret = null;
if (eventUser != null) {
if (eventUser.isAnonymous()) {
......@@ -72,7 +72,7 @@ public class JaasBean implements JaasBeanLocal, JaasBeanRemote {
secubean.logMessage(SecurityLogType.permissionDenied, eventUser.getUser(), "Login failed: wrong password for username ", username);
}
} else {
secubean.logMessage(SecurityLogType.permissionDenied, (User)null, "Login failed: Username not found: ", username);
secubean.logMessage(SecurityLogType.permissionDenied, (User) null, "Login failed: Username not found: ", username);
}
......@@ -93,15 +93,20 @@ public class JaasBean implements JaasBeanLocal, JaasBeanRemote {
roleset.add(UserPermission.ANYUSER.getFullName());
if (usr == null) {
if (SpecialPermission.VERKKOMAKSU_CHECKER.name().equals(user)) {
roleset.add(SpecialPermission.VERKKOMAKSU_CHECKER.name());
}
usr = permbean.getAnonEventUser();
roleset.add(SpecialPermission.ANONYMOUS.name());
}
if (usr != null && !usr.isAnonymous()) {
if (!usr.isAnonymous()) {
roleset.add(SpecialPermission.USER.name());
}
// TODO: EI NÄIN!!!!! Superadmin ei saa kaikkia oikkia!!
if (usr != null && usr.isSuperadmin()) {
if (usr.isSuperadmin()) {
for (BortalApplication app : BortalApplication.values()) {
for (IAppPermission perm : app.getPermissions()) {
roleset.add(perm.getFullName());
......
......@@ -76,6 +76,10 @@ public class Menubean implements MenubeanLocal {
frontTopnavi.addPage(menuitemfacade.findOrCreate("/auth/loginError"), null).setVisible(false);
frontTopnavi.addPage(menuitemfacade.findOrCreate("/auth/logout"), null).setVisible(false);
frontTopnavi.addPage(menuitemfacade.findOrCreate("/auth/logoutResponse"), null).setVisible(false);
frontTopnavi.addPage(menuitemfacade.findOrCreate("/auth/resetPassword"), null).setVisible(false);
frontTopnavi.addPage(menuitemfacade.findOrCreate("/auth/resetMailSent"), null).setVisible(false);
frontTopnavi.addPage(menuitemfacade.findOrCreate("/auth/passwordChanged"), null).setVisible(false);
frontTopnavi.addPage(menuitemfacade.findOrCreate("/auth/notauthorized"), null).setVisible(false);
MenuNavigation userTopnavi = usernavi.addPage(null, null);
userTopnavi.setKey("topnavi.user");
......@@ -94,7 +98,12 @@ public class Menubean implements MenubeanLocal {
shopTopmenu.addPage(menuitemfacade.findOrCreate("/shop/createBill"), BillPermission.CREATE_BILL);
shopTopmenu.addPage(menuitemfacade.findOrCreate("/bill/list"), BillPermission.VIEW_OWN);
shopTopmenu.addPage(menuitemfacade.findOrCreate("/bill/edit"), null).setVisible(false);
shopTopmenu.addPage(menuitemfacade.findOrCreate("/bill/showBill"), null).setVisible(false);
shopTopmenu.addPage(menuitemfacade.findOrCreate("/shop/assocToUser"), null).setVisible(false);
shopTopmenu.addPage(menuitemfacade.findOrCreate("/svm/failure"), null).setVisible(false);
shopTopmenu.addPage(menuitemfacade.findOrCreate("/svm/notification"), null).setVisible(false);
shopTopmenu.addPage(menuitemfacade.findOrCreate("/svm/pending"), null).setVisible(false);
shopTopmenu.addPage(menuitemfacade.findOrCreate("/svm/success"), null).setVisible(false);
MenuNavigation pollTopmenu = usernavi.addPage(null, null);
pollTopmenu.setKey("topnavi.poll");
......@@ -156,11 +165,13 @@ public class Menubean implements MenubeanLocal {
prodnavi.addPage(menuitemfacade.findOrCreate("/product/list"), ShopPermission.LIST_ALL_PRODUCTS);
prodnavi.addPage(menuitemfacade.findOrCreate("/product/create"), ShopPermission.MANAGE_PRODUCTS);
prodnavi.addPage(menuitemfacade.findOrCreate("/product/createDiscount"), null).setVisible(false);
prodnavi.addPage(menuitemfacade.findOrCreate("/product/edit"), null).setVisible(false);
MenuNavigation contentnavi = adminnavi.addPage(null, null);
contentnavi.setKey("topnavi.contents");
contentnavi.addPage(menuitemfacade.findOrCreate("/pages/list"), ContentPermission.MANAGE_PAGES);
contentnavi.addPage(menuitemfacade.findOrCreate("/pages/create"), ContentPermission.MANAGE_PAGES);
contentnavi.addPage(menuitemfacade.findOrCreate("/pages/edit"), null).setVisible(false);
}
......
......@@ -15,6 +15,7 @@ import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.enums.apps.BillPermission;
import fi.insomnia.bortal.enums.apps.CompoPermission;
import fi.insomnia.bortal.enums.apps.ContentPermission;
import fi.insomnia.bortal.enums.apps.EventPermission;
import fi.insomnia.bortal.enums.apps.IAppPermission;
import fi.insomnia.bortal.enums.apps.MapPermission;
import fi.insomnia.bortal.enums.apps.PollPermission;
......@@ -84,6 +85,9 @@ import fi.insomnia.bortal.model.User;
CompoPermission.S_SUBMIT_ENTRY,
CompoPermission.S_VIEW_COMPOS,
EventPermission.S_MANAGE_PRIVATE_PROPERTIES,
EventPermission.S_MANAGE_PROPERTIES,
})
public class PermissionBean implements PermissionBeanLocal {
......
......@@ -20,6 +20,7 @@ import javax.annotation.security.DeclareRoles;
import javax.annotation.security.RolesAllowed;
import javax.ejb.EJB;
import javax.ejb.EJBAccessException;
import javax.ejb.EJBException;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.ejb.Timeout;
......@@ -45,6 +46,7 @@ import fi.insomnia.bortal.model.LanEvent;
import fi.insomnia.bortal.model.Place;
import fi.insomnia.bortal.model.PlaceGroup;
import fi.insomnia.bortal.model.Product;
import fi.insomnia.bortal.model.ProductFlag;
/**
*
......@@ -53,7 +55,9 @@ import fi.insomnia.bortal.model.Product;
@Stateless
@LocalBean
@DeclareRoles({ MapPermission.S_BUY_PLACES,
MapPermission.S_MANAGE_MAPS })
MapPermission.S_MANAGE_MAPS,
MapPermission.S_VIEW,
})
public class PlaceBean implements PlaceBeanLocal {
private static final String PLACE_RESERVE_TIMEOUTER = "Map reserve timeouter";
private static final Logger logger = LoggerFactory.getLogger(PlaceBean.class);
......@@ -163,12 +167,10 @@ public class PlaceBean implements PlaceBeanLocal {
}
// TODO: Kantakysely tähän!
@Override
@RolesAllowed(MapPermission.S_VIEW)
public Place findPlace(EventMap e, int x, int y) {
return placeFacade.find(e, x, y);
}
/**
......@@ -176,7 +178,9 @@ public class PlaceBean implements PlaceBeanLocal {
* buy() method should be called after this when buying place;
*
* @param place
* place to be reserved
* @param user
* User for whom the place should be reserved.
* @return true when successfull. On any error false.
*/
@Override
......@@ -280,47 +284,58 @@ public class PlaceBean implements PlaceBeanLocal {
}
// This method should not be available in the local bean client
void lockPlaceProduct(EventUser user, Product prod, BigDecimal quantity) {
public void lockPlaceProduct(EventUser user, Product prod, BigDecimal quantity) {
int loop = quantity.intValue();
// BigDecimal loop = BigDecimal.ZERO;
LanEvent event = eventBean.getCurrentEvent();
PlaceGroup pg = new PlaceGroup(event, Calendar.getInstance(),
Calendar.getInstance(), true);
PlaceGroup pg = new PlaceGroup(event, Calendar.getInstance(), Calendar.getInstance(), true);
pg.setCreator(user);
pgfacade.create(pg);
boolean associatedToPlace = false;
// If user is not yet associated to this type of product, find it out...
for (GroupMembership gm : user.getGroupMemberships()) {
if (prod.equals(gm.getPlaceReservation().getProduct())) {
associatedToPlace = true;
break;
}
}
for (Place p : prod.getPlaces()) {
if (!p.isTaken()) {
buy(p, pg, user);
--loop;
// if (quantity.equals(BigDecimal.ONE)) {
// boolean gmassoc = false;
// for (GroupMembership gm : user.getGroupMemberships()) {
// if (gm.getId().getEventId().equals(event.getId())) {
// gmassoc = true;
// break;
// }
//
// }
// if (!gmassoc) {
// logger.debug("Group membership not found. Associating user {} to place {}",
// user.getNick(), currgm.getPlaceReservation().getName());
// user.getGroupMemberships().add(currgm);
// currgm.setUser(user);
// }
// }
if (loop <= 0) {
break;
for (int i = 0; i < quantity.intValue(); ++i)
{
Place freePlace = null;
if (prod.getProductFlags().contains(ProductFlag.CREATE_NEW_PLACE_WHEN_BOUGHT))
{
freePlace = new Place();
freePlace.setProduct(prod);
freePlace.setProvidesRole(prod.getProvides());
placeFacade.create(freePlace);
} else if (prod.getPlaces() != null)
{
for (Place p : prod.getPlaces()) {
if (!p.isTaken()) {
freePlace = p;
break;
}
}
}
if (freePlace == null) {
throw new EJBException("Could find a place to be reserved....");
}
GroupMembership gm = buy(freePlace, pg, user);
if (!associatedToPlace)
{
associatedToPlace = true;
gm.setUser(user);
}
}
// user.getPlaceGroups().add(pg);
pgfacade.create(pg);
}
private void buy(Place p, PlaceGroup pg, IUser user) {
private GroupMembership buy(Place p, PlaceGroup pg, IUser user) {
p.setGroup(pg);
p.setReleaseTime(null);
// Current user temporarily used at place reservation. When buying
......@@ -329,6 +344,7 @@ public class PlaceBean implements PlaceBeanLocal {
GroupMembership membership = new GroupMembership(pg, p, gmemfacade.createInviteToken());
pg.getMembers().add(membership);
p.setPlaceReserver(membership);
return membership;
}
......@@ -336,7 +352,6 @@ public class PlaceBean implements PlaceBeanLocal {
@RolesAllowed(MapPermission.S_MANAGE_MAPS)
public int setBuyable(EventMap map, String like, boolean b) {
return placeFacade.setBuyable(map, like, b);
}
// @Override
......
......@@ -70,7 +70,7 @@ public class ProductBean implements ProductBeanLocal {
@Override
@RolesAllowed(ShopPermission.S_LIST_USERPRODUCTS)
public List<Product> listUserShoppableProducts() {
return productFacade.findPrepaidProducts();
return productFacade.findProductsByFlag(ProductFlag.USER_SHOPPABLE);
}
@Override
......@@ -182,9 +182,9 @@ public class ProductBean implements ProductBeanLocal {
public List<Product> findForStaffshop() {
return productFacade.findAll();
}
@RolesAllowed(ShopPermission.S_MANAGE_PRODUCTS)
public List<Product> findProductsByFlag(ProductFlag ... productFlags) {
public List<Product> findProductsByFlag(ProductFlag... productFlags) {
return productFacade.findProductsByFlag(productFlags);
}
......
......@@ -197,7 +197,9 @@ public class UserBean implements UserBeanLocal {
throw new EJBAccessException("No permission to upload image as another user");
}
UserImage userimage = new UserImage(user.getUser());
UserImage userimage = null;
userimage = new UserImage(user.getUser());
userimage.setMimeType(contentType);
userimage.setImageData(image);
userimage.setName(filename);
......@@ -281,12 +283,13 @@ public class UserBean implements UserBeanLocal {
User user = userFacade.findByLogin(username);
String hash = PasswordFunctions.generateRandomString(25);
logger.info("Initializing password sending: {}, hash: {}", user, hash);
String path = MessageFormat.format(url, new Object[] { user.getId().toString(), hash });
if (hash == null || hash.length() < 20 || user == null || user.getEmail() == null || user.getEmail().length() <= 5) {
logger.info("Not sending email with params {} {}", new Object[] { user, hash });
return false;
}
String path = MessageFormat.format(url, new Object[] { user.getId().toString(), hash });
MailMessage msg = new MailMessage();
msg.setTo(user);
msg.setSubject(I18n.get("passwordreset.mailSubject"));
......@@ -357,6 +360,30 @@ public class UserBean implements UserBeanLocal {
eventUserFacade.create(user);
}
// private void jaiCrop()
// {
// SeekableStream seekableStream =
// SeekableStream.wrapInputStream(naamastream, false);
// PlanarImage naamaimage = JAI.create("Stream", seekableStream);
//
// // Origin point where you want to start cropping
// Point p = new Point(150, 150);
// // The size of the area that you want to crop
// Dimension d = new Dimension(90, 70);
// Rectangle r = new Rectangle(p, d);
//
// ParameterBlock pb = new ParameterBlock();
// pb.addSource(naamaimage);
//
// pb.add((float) r.getX());
// pb.add((float) r.getY());
// pb.add((float) r.getWidth());
// pb.add((float) r.getHeight());
//
// // Creates the cropped area
// RenderedOp image = JAI.create("crop", pb);
// }
@Override
public UserImage saveCroppedImage(UserImage currimage, int left, int top, int width, int height) throws IOException {
currimage = imagefacade.find(currimage.getId());
......@@ -364,23 +391,21 @@ public class UserBean implements UserBeanLocal {
logger.info("Current image {}, current user {}", currimage, user);
user = userFacade.find(user.getId());
ByteArrayInputStream naamastream = new
ByteArrayInputStream(currimage.getImageData());
BufferedImage face;
face = ImageIO.read(naamastream);
BufferedImage newFace = face.getSubimage(left, top, width, height);
ByteArrayInputStream naamastream = new ByteArrayInputStream(currimage.getImageData());
BufferedImage face = ImageIO.read(naamastream);
BufferedImage newface = face.getSubimage(left, top, width, height);
ByteArrayOutputStream naamaout = new ByteArrayOutputStream();
ImageIO.write(newFace, "jpeg", naamaout);
UserImage ret = new UserImage(user);
ret.setMimeType(currimage.getMimeType());
// JPG rikkoo asioita jos lähde ei ole JPG, tai muuten tunnettu
// ilmeisesti alpha rikkoo asioita...
ImageIO.write(newface, "png", naamaout);
UserImage ret = new UserImage(user);
ret.setMimeType("image/png");
User curruser = permbean.getCurrentUser().getUser();
ret.setDescription("Cropped by: [" + curruser.getId() + "] " + curruser.getWholeName() + " from image: " + currimage.getId());
ret.setImageData(naamaout.toByteArray());
ret.setMimeType(currimage.getMimeType());
// ret.setMimeType("image/jpeg");
if (user.getUserImageList() == null)
{
user.setUserImageList(new ArrayList<UserImage>());
......
......@@ -41,9 +41,10 @@ import org.xml.sax.SAXException;
import fi.insomnia.bortal.beanutil.DecimalXMLAdapter;
import fi.insomnia.bortal.clientutils.BortalLocalContextHolder;
import fi.insomnia.bortal.enums.apps.BillPermission;
import fi.insomnia.bortal.facade.BillFacade;
import fi.insomnia.bortal.model.Bill;
import fi.insomnia.bortal.model.LanEventProperty;
import fi.insomnia.bortal.model.LanEventPropertyKey;
import fi.insomnia.bortal.model.LanEventPrivateProperty;
import fi.insomnia.bortal.model.LanEventPrivatePropertyKey;
import fi.insomnia.bortal.util.SvmReturnType;
import fi.insomnia.bortal.util.VerkkomaksutReturnEntry;
import fi.insomnia.bortal.verkkomaksutfi.PaymentEntry;
......@@ -59,20 +60,23 @@ public class VerkkomaksutFiBean implements VerkkomaksutFiBeanLocal {
private static final Logger logger = LoggerFactory.getLogger(VerkkomaksutFiBean.class);
private static final char CHECKSUM_SEP = '|';
@EJB
private EventBean lanbean;
private EventBean eventbean;
@EJB
private BillBean billBean;
private PermissionBeanLocal permbean;
@EJB
private VerkkomaksuRunner vmrunner;
@EJB
private LoggingBeanLocal logbean;
@EJB
private PermissionBeanLocal permbean;
private BillFacade billFacade;
@Override
public boolean isSvmEnabled()
{
LanEventProperty expire = lanbean.getProperty(LanEventPropertyKey.VERKKOMAKSU_KEY_EXPIRE);
String merchantid = lanbean.getPropertyString(LanEventPropertyKey.VERKKOMAKSU_MERCHANT_ID);
String merchantPassword = lanbean.getPropertyString(LanEventPropertyKey.VERKKOMAKSU_MERCHANT_PASSWORD);
LanEventPrivateProperty expire = eventbean.getPrivateProperty(LanEventPrivatePropertyKey.VERKKOMAKSU_KEY_EXPIRE);
String merchantid = eventbean.getPrivatePropertyString(LanEventPrivatePropertyKey.VERKKOMAKSU_MERCHANT_ID);
String merchantPassword = eventbean.getPrivatePropertyString(LanEventPrivatePropertyKey.VERKKOMAKSU_MERCHANT_PASSWORD);
return !((expire != null && new Date().after(expire.getDateValue()))
|| merchantid == null || merchantid.isEmpty()
|| merchantPassword == null || merchantPassword.isEmpty());
......@@ -81,7 +85,12 @@ public class VerkkomaksutFiBean implements VerkkomaksutFiBeanLocal {
@Override
public boolean validateReturn(SvmReturnType type, String orderNumber, String timestamp, String paid, String method, String authcode)
{
String merchantPassword = lanbean.getPropertyString(LanEventPropertyKey.VERKKOMAKSU_MERCHANT_PASSWORD);
if (authcode == null || authcode.isEmpty() || orderNumber == null || orderNumber.isEmpty() || timestamp == null || timestamp.isEmpty())
{
return false;
}
String merchantPassword = eventbean.getPrivatePropertyString(LanEventPrivatePropertyKey.VERKKOMAKSU_MERCHANT_PASSWORD);
StringBuilder sumSource = new StringBuilder().append(orderNumber).append(CHECKSUM_SEP)
.append(timestamp).append(CHECKSUM_SEP)
......@@ -96,7 +105,7 @@ public class VerkkomaksutFiBean implements VerkkomaksutFiBeanLocal {
final String calculatedHash = new String(Hex.encodeHex(resultByte));
logger.info("calculated checksum for svv message: {}, comparing to {}", calculatedHash, authcode);
if (authcode.toUpperCase().equals(calculatedHash.toUpperCase())) {
Bill bill = billBean.findById(Integer.parseInt(orderNumber));
Bill bill = billFacade.find(Integer.parseInt(orderNumber));
if (bill != null)
{
// If bill is unpaid, mark it paid...
......@@ -105,7 +114,7 @@ public class VerkkomaksutFiBean implements VerkkomaksutFiBeanLocal {
} else if (bill.getAccountEvent() == null
&& bill.getPaidDate() == null
&& (SvmReturnType.NOTIFICATION.equals(type) || SvmReturnType.SUCCESS.equals(type))) {
billBean.markPaid(bill, Calendar.getInstance());
vmrunner.markPaid(bill, Calendar.getInstance());
logbean.logMessage(SecurityLogType.verkkomaksu, permbean.getCurrentUser(), "Validated order number ", orderNumber, " bill ", bill == null ? "null" : bill.toString(), " with authcode: ", authcode);
ret = true;
} else {
......@@ -130,9 +139,9 @@ public class VerkkomaksutFiBean implements VerkkomaksutFiBeanLocal {
public VerkkomaksutReturnEntry getSvmToken(Bill bill)
{
LanEventProperty expire = lanbean.getProperty(LanEventPropertyKey.VERKKOMAKSU_KEY_EXPIRE);
String merchantid = lanbean.getPropertyString(LanEventPropertyKey.VERKKOMAKSU_MERCHANT_ID);
String merchantPassword = lanbean.getPropertyString(LanEventPropertyKey.VERKKOMAKSU_MERCHANT_PASSWORD);
LanEventPrivateProperty expire = eventbean.getPrivateProperty(LanEventPrivatePropertyKey.VERKKOMAKSU_KEY_EXPIRE);
String merchantid = eventbean.getPrivatePropertyString(LanEventPrivatePropertyKey.VERKKOMAKSU_MERCHANT_ID);
String merchantPassword = eventbean.getPrivatePropertyString(LanEventPrivatePropertyKey.VERKKOMAKSU_MERCHANT_PASSWORD);
if ((expire != null && new Date().after(expire.getDateValue()))
|| merchantid == null || merchantid.isEmpty()
|| merchantPassword == null || merchantPassword.isEmpty())
......@@ -144,17 +153,18 @@ public class VerkkomaksutFiBean implements VerkkomaksutFiBeanLocal {
PaymentEntry message = new PaymentEntry(returnUrl);
message.setOrderNumber(bill.getId().toString());
message.setReferenceNumber(bill.getReferenceNumber());
message.setPrice(bill.totalPrice());
// message.setDescription();
VerkkomaksutReturnEntry ret = sendMessage(message, merchantid, merchantPassword);
if (ret.isError()) {
logbean.logMessage(SecurityLogType.verkkomaksu, permbean.getCurrentUser(), "User trieed to create new token for bill: ", bill.toString(), " but received error: ", ret.getErrorCode(), " message ", ret.getErrorMessage());
} else {
logbean.logMessage(SecurityLogType.verkkomaksu, permbean.getCurrentUser(), "User crated new token for bill: ", bill.toString(), " Got: ", ret.getOrderNumber(), " token ", ret.getToken());
if (ret != null)
if (ret.isError()) {
logbean.logMessage(SecurityLogType.verkkomaksu, permbean.getCurrentUser(), "User trieed to create new token for bill: ", bill.toString(), " but received error: ", ret.getErrorCode(), " message ", ret.getErrorMessage());
} else {
logbean.logMessage(SecurityLogType.verkkomaksu, permbean.getCurrentUser(), "User crated new token for bill: ", bill.toString(), " Got: ", ret.getOrderNumber(), " token ", ret.getToken());
}
}
return ret;
}
......
......@@ -12,7 +12,7 @@ import javax.persistence.criteria.Root;
import fi.insomnia.bortal.beans.EventBeanLocal;
import fi.insomnia.bortal.model.AccountEvent;
import fi.insomnia.bortal.model.AccountEvent_;
import fi.insomnia.bortal.model.IUser;
import fi.insomnia.bortal.model.EventUser;
import fi.insomnia.bortal.model.LanEvent;
import fi.insomnia.bortal.model.Product_;
import fi.insomnia.bortal.model.Role;
......@@ -29,7 +29,7 @@ public class AccountEventFacade extends IntegerPkGenericFacade<AccountEvent> {
@EJB
private EventBeanLocal eventbean;
public List<Role> findProvidedRoles(LanEvent event, IUser u) {
public List<Role> findProvidedRoles(LanEvent event, EventUser u) {
CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<Role> cq = cb.createQuery(Role.class);
......@@ -48,7 +48,7 @@ public class AccountEventFacade extends IntegerPkGenericFacade<AccountEvent> {
return getEm().createQuery(cq).getResultList();
}
public List<AccountEvent> getAccountEvents(IUser user) {
public List<AccountEvent> getAccountEvents(EventUser user) {
CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<AccountEvent> cq = cb.createQuery(AccountEvent.class);
......
......@@ -12,7 +12,7 @@ import javax.persistence.criteria.Root;
import fi.insomnia.bortal.beans.EventBeanLocal;
import fi.insomnia.bortal.model.Bill;
import fi.insomnia.bortal.model.Bill_;
import fi.insomnia.bortal.model.IUser;
import fi.insomnia.bortal.model.EventUser;
@Stateless
@LocalBean
......@@ -54,7 +54,7 @@ public class BillFacade extends IntegerPkGenericFacade<Bill> {
return getEm().createQuery(cq).getResultList();
}
public List<Bill> find(IUser user) {
public List<Bill> find(EventUser user) {
CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<Bill> cq = cb.createQuery(Bill.class);
Root<Bill> root = cq.from(Bill.class);
......
......@@ -14,9 +14,9 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.beans.EventBeanLocal;
import fi.insomnia.bortal.model.EventUser;
import fi.insomnia.bortal.model.GroupMembership;
import fi.insomnia.bortal.model.GroupMembership_;
import fi.insomnia.bortal.model.IUser;
import fi.insomnia.bortal.model.PlaceGroup;
import fi.insomnia.bortal.model.PlaceGroup_;
import fi.insomnia.bortal.model.Place_;
......@@ -66,7 +66,7 @@ public class GroupMembershipFacade extends IntegerPkGenericFacade<GroupMembershi
return getSingleNullableResult(getEm().createQuery(cq));
}
public List<GroupMembership> findMemberOrCreator(IUser user) {
public List<GroupMembership> findMemberOrCreator(EventUser user) {
CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<GroupMembership> cq = cb.createQuery(GroupMembership.class);
Root<GroupMembership> root = cq.from(GroupMembership.class);
......@@ -87,7 +87,7 @@ public class GroupMembershipFacade extends IntegerPkGenericFacade<GroupMembershi
return getEm().createQuery(cq).getResultList();
}
public List<GroupMembership> findMemberships(IUser user) {
public List<GroupMembership> findMemberships(EventUser user) {
CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<GroupMembership> cq = cb.createQuery(GroupMembership.class);
Root<GroupMembership> root = cq.from(GroupMembership.class);
......
......@@ -16,7 +16,7 @@ import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.model.EventMap;
import fi.insomnia.bortal.model.EventMap_;
import fi.insomnia.bortal.model.IUser;
import fi.insomnia.bortal.model.EventUser;
import fi.insomnia.bortal.model.LanEvent;
import fi.insomnia.bortal.model.Place;
import fi.insomnia.bortal.model.Place_;
......@@ -57,7 +57,7 @@ public class PlaceFacade extends IntegerPkGenericFacade<Place> {
}
}
public List<Place> findUsersReservations(LanEvent event, IUser user) {
public List<Place> findUsersReservations(LanEvent event, EventUser user) {
CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<Place> cq = cb.createQuery(Place.class);
......
......@@ -10,7 +10,7 @@ import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;
import fi.insomnia.bortal.beans.EventBeanLocal;
import fi.insomnia.bortal.model.IUser;
import fi.insomnia.bortal.model.EventUser;
import fi.insomnia.bortal.model.PlaceGroup;
import fi.insomnia.bortal.model.PlaceGroup_;
......@@ -26,7 +26,7 @@ public class PlaceGroupFacade extends IntegerPkGenericFacade<PlaceGroup> {
super(PlaceGroup.class);
}
public List<PlaceGroup> find(IUser user) {
public List<PlaceGroup> find(EventUser user) {
CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<PlaceGroup> cq = cb.createQuery(PlaceGroup.class);
Root<PlaceGroup> root = cq.from(PlaceGroup.class);
......
......@@ -53,27 +53,17 @@ public class ProductFacade extends IntegerPkGenericFacade<Product> {
return getEm().createQuery(cq).getResultList();
}
public List<Product> findProductsByFlag(ProductFlag ... productFlags) {
CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<Product> cq = cb.createQuery(Product.class);
Root<Product> root = cq.from(Product.class);
cq.where(cb.equal(root.get(Product_.event), eventbean.getCurrentEvent()),
root.get(Product_.productFlags).in(Arrays.asList(productFlags)));
return getEm().createQuery(cq).getResultList();
}
public List<Product> findPrepaidProducts() {
public List<Product> findProductsByFlag(ProductFlag... productFlags) {
CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<Product> cq = cb.createQuery(Product.class);
Root<Product> root = cq.from(Product.class);
cq.where(cb.equal(root.get(Product_.event), eventbean.getCurrentEvent()),
cb.isTrue(root.get(Product_.prepaid)));
root.get(Product_.productFlags).in(Arrays.asList(productFlags)));
cq.orderBy(cb.asc(root.get(Product_.sort)));
return getEm().createQuery(cq).getResultList();
}
}
......@@ -14,7 +14,6 @@ import javax.persistence.criteria.Root;
import fi.insomnia.bortal.beans.EventBeanLocal;
import fi.insomnia.bortal.model.EventUser;
import fi.insomnia.bortal.model.IUser;
import fi.insomnia.bortal.model.PageContent;
import fi.insomnia.bortal.model.PageContent_;
import fi.insomnia.bortal.model.Role;
......@@ -45,7 +44,7 @@ public class SitePageFacade extends IntegerPkGenericFacade<SitePage> {
// return getSingleNullableResult(getEm().createQuery(cq));
// }
public List<SitePage> findForUser(IUser user, SitePage siteroot) {
public List<SitePage> findForUser(EventUser user, SitePage siteroot) {
CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<SitePage> cq = cb.createQuery(SitePage.class);
Root<SitePage> root = cq.from(SitePage.class);
......
package fi.insomnia.bortal.verkkomaksutfi;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
@XmlAccessorType(XmlAccessType.FIELD)
public class ContactAddressEntry {
private String street;
......
package fi.insomnia.bortal.verkkomaksutfi;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
@XmlAccessorType(XmlAccessType.FIELD)
public class ContactEntry {
private String firstName;
private String lastName;
......
......@@ -21,7 +21,7 @@ public class PaymentEntry {
private OrderDetailsEntry orderDetails;
private String orderNumber = "";
private String currency = "EUR";
private String referennceNumber;
private Integer referenceNumber;
private String description;
private AvailableLocales locale = AvailableLocales.fi_FI;
......@@ -75,14 +75,6 @@ public class PaymentEntry {
this.orderDetails = orderDetails;
}
public String getReferennceNumber() {
return referennceNumber;
}
public void setReferennceNumber(String referennceNumber) {
this.referennceNumber = referennceNumber;
}
public String getDescription() {
return description;
}
......@@ -107,4 +99,12 @@ public class PaymentEntry {
this.price = price;
}
public Integer getReferenceNumber() {
return referenceNumber;
}
public void setReferenceNumber(Integer referenceNumber) {
this.referenceNumber = referenceNumber;
}
}
......@@ -2,10 +2,13 @@ package fi.insomnia.bortal.verkkomaksutfi;
import java.math.BigDecimal;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
import fi.insomnia.bortal.beanutil.DecimalXMLAdapter;
@XmlAccessorType(XmlAccessType.FIELD)
public class ProductEntry {
private String title;
......
......@@ -3,6 +3,10 @@ package fi.insomnia.bortal.verkkomaksutfi;
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
@XmlAccessorType(XmlAccessType.FIELD)
public class ProductsListEntry {
private List<ProductEntry> product = new ArrayList<ProductEntry>();
......
package fi.insomnia.bortal.verkkomaksutfi;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
@XmlAccessorType(XmlAccessType.FIELD)
public class UrlSetEntry {
public UrlSetEntry()
......
......@@ -8,7 +8,6 @@ import javax.ejb.Local;
import fi.insomnia.bortal.model.AccountEvent;
import fi.insomnia.bortal.model.EventUser;
import fi.insomnia.bortal.model.IUser;
import fi.insomnia.bortal.model.Product;
import fi.insomnia.bortal.model.Role;
......@@ -21,9 +20,9 @@ public interface AccountEventBeanLocal {
AccountEvent find(Integer id);
List<Role> getRolesFromAccountEvents(IUser u);
void shopCash(EventUser shoppingUser, Map<Product, BigDecimal>
shopMap, boolean buyInstant);
List<Role> getRolesFromAccountEvents(EventUser u);
}
......@@ -9,7 +9,7 @@ import javax.ejb.Local;
import fi.insomnia.bortal.bortal.views.BillSummary;
import fi.insomnia.bortal.model.Bill;
import fi.insomnia.bortal.model.IUser;
import fi.insomnia.bortal.model.EventUser;
@Local
public interface BillBeanLocal {
......@@ -34,6 +34,6 @@ public interface BillBeanLocal {
Bill save(Bill bill);
List<Bill> find(IUser user);
List<Bill> find(EventUser user);
}
package fi.insomnia.bortal.beans;
import java.util.List;
import javax.ejb.Local;
import fi.insomnia.bortal.model.EventOrganiser;
import fi.insomnia.bortal.model.LanEvent;
import fi.insomnia.bortal.model.LanEventPrivateProperty;
import fi.insomnia.bortal.model.LanEventProperty;
import fi.insomnia.bortal.model.LanEventPropertyKey;
......@@ -25,4 +29,10 @@ public interface EventBeanLocal {
String getPropertyString(LanEventPropertyKey property);
LanEventProperty saveOrCreateProperty(LanEventProperty property);
EventOrganiser mergeChanges(EventOrganiser eventorg);
List<LanEventPrivateProperty> getPrivateProperties();
LanEventPrivateProperty saveOrCreatePrivateProperty(LanEventPrivateProperty privateProperty);
}
......@@ -15,4 +15,6 @@ public interface EventMapBeanLocal {
EventMap find(Integer mapId);
EventMap clearPlaces(EventMap map);
}
......@@ -5,8 +5,8 @@ import java.util.List;
import javax.ejb.Local;
import fi.insomnia.bortal.model.EventOrganiser;
import fi.insomnia.bortal.model.IUser;
import fi.insomnia.bortal.model.LanEvent;
import fi.insomnia.bortal.model.User;
@Local
public interface EventOrganiserBeanLocal {
......@@ -21,7 +21,7 @@ public interface EventOrganiserBeanLocal {
LanEvent findEvent(Integer eventid);
List<EventOrganiser> getOrganisations(IUser user);
List<EventOrganiser> getOrganisations(User user);
boolean hasOrgPermission(Integer orgId);
......
package fi.insomnia.bortal.salespoint;
import fi.insomnia.bortal.model.IUser;
import fi.insomnia.bortal.model.EventUser;
public class SalesSession {
IUser cashierUser;
IUser customerUser;
EventUser cashierUser;
EventUser customerUser;
Cart shoppingCart;
}
......@@ -29,6 +29,8 @@ import org.eclipse.persistence.annotations.OptimisticLockingType;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.utilities.BillUtils;
/**
* The system can send bills to the users. When user pays bill a AccountEvent
* row is created for product whose price is +1 and Bills paidDate is changed to
......@@ -115,6 +117,11 @@ public class Bill extends GenericEntity {
@OneToMany(mappedBy = "bill", cascade = CascadeType.ALL)
private List<BillLine> billLines;
public boolean isPaid()
{
return accountEvent != null || paidDate != null;
}
/**
* When the bill is paid this AccountEvent is created and this is a
* reference to that accountAction. if this bill
......@@ -139,6 +146,11 @@ public class Bill extends GenericEntity {
return null;
}
public Integer getReferenceNumber()
{
return BillUtils.createReferenceNumber(getReferenceNumberBase());
}
/**
* Commodity function to calculate the total price of the bill.
*
......
......@@ -7,7 +7,7 @@ import javax.persistence.metamodel.ListAttribute;
import javax.persistence.metamodel.SingularAttribute;
import javax.persistence.metamodel.StaticMetamodel;
@Generated(value="Dali", date="2012-05-16T02:51:16.302+0300")
@Generated(value="Dali", date="2012-08-21T16:13:39.892+0300")
@StaticMetamodel(Bill.class)
public class Bill_ extends GenericEntity_ {
public static volatile SingularAttribute<Bill, LanEvent> event;
......
......@@ -14,22 +14,16 @@ import javax.persistence.Table;
import org.eclipse.persistence.annotations.OptimisticLocking;
import org.eclipse.persistence.annotations.OptimisticLockingType;
import org.eclipse.persistence.annotations.PrivateOwned;
/**
*
*/
@Entity
@Table(name = "maps")
// @NamedQueries({
// @NamedQuery(name = "EventMap.findAll", query = "SELECT e FROM EventMap e"),
// @NamedQuery(name = "EventMap.findByName", query =
// "SELECT e FROM EventMap e WHERE e.name = :name") })
@OptimisticLocking(type = OptimisticLockingType.CHANGED_COLUMNS)
public class EventMap extends GenericEntity {
/**
*
*/
private static final long serialVersionUID = 3411450245513673619L;
@ManyToOne()
......@@ -52,6 +46,7 @@ public class EventMap extends GenericEntity {
@OrderBy("name")
@OneToMany(cascade = CascadeType.ALL, mappedBy = "map")
@PrivateOwned
private List<Place> places = new ArrayList<Place>();
@OneToMany(mappedBy = "eventMap")
......
......@@ -5,7 +5,7 @@ import javax.persistence.metamodel.ListAttribute;
import javax.persistence.metamodel.SingularAttribute;
import javax.persistence.metamodel.StaticMetamodel;
@Generated(value="Dali", date="2012-05-12T14:43:39.059+0300")
@Generated(value="Dali", date="2012-08-22T04:30:56.900+0300")
@StaticMetamodel(EventMap.class)
public class EventMap_ extends GenericEntity_ {
public static volatile SingularAttribute<EventMap, LanEvent> event;
......
......@@ -6,12 +6,7 @@ public enum LanEventPropertyKey {
INVITEMAIL_CONTENT(Type.TEXT, "You have been invited to Stream demoparty by {1}.\n\nYou can register to stream demparty intranet at: {0}\n\nAfter registering to the intranet you can buy a ticket to Stream demoparty reduced price and invite your friends to join the party with you. More information can be found in the intranet. Remember also to visit our website at http://www.streamparty.org and join us at #streamparty in IRCNet. If you have any questions about this mail, registering to intranet, or anything else regarding Stream demoparty, please send us email to info@streamparty.org\n\n-- \nStream organizing\ninfo@streamparty.org"),
PORTAL_EMAIL_ADDRESS(Type.TEXT, "intra@streamparty.org"),
PORTAL_EMAIL_NAME(Type.TEXT, "Streamparty intranet"),
ADMIN_MAIL(Type.TEXT, "intra@streamparty.org"),
VERKKOMAKSU_KEY_EXPIRE(Type.DATE, null),
VERKKOMAKSU_MERCHANT_ID(Type.TEXT, null),
VERKKOMAKSU_MERCHANT_PASSWORD(Type.TEXT, null),
;
ADMIN_MAIL(Type.TEXT, "intra@streamparty.org"), ;
private enum Type {
TEXT, DATE, DATA
};
......
......@@ -69,8 +69,8 @@ public class Place extends GenericEntity {
@JoinColumn(name = "provided_role_id", referencedColumnName = Role.ID_COLUMN)
private Role providesRole;
@JoinColumn(name = "map_id", referencedColumnName = EventMap.ID_COLUMN, nullable = false)
@ManyToOne(optional = false, cascade = CascadeType.ALL)
@JoinColumn(name = "map_id", referencedColumnName = EventMap.ID_COLUMN, nullable = true)
@ManyToOne(optional = true, cascade = CascadeType.ALL)
private EventMap map;
/**
* Which ticket type is this place sold as
......@@ -148,7 +148,7 @@ public class Place extends GenericEntity {
}
public void setGroup(PlaceGroup group) {
if (group != null && !group.getEvent().equals(map.getEvent())) {
if (group != null && map != null && !group.getEvent().equals(map.getEvent())) {
throw new RuntimeException("Can not set Group from different Event to Place!");
}
this.group = group;
......@@ -225,7 +225,7 @@ public class Place extends GenericEntity {
*
* @return Is the place reserved ( not bought for user)
*/
public boolean isReservedFor(IUser u) {
public boolean isReservedFor(EventUser u) {
return (u.equals(getCurrentUser()) && getGroup() == null);
}
......
......@@ -12,6 +12,7 @@ import java.util.List;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.CollectionTable;
import javax.persistence.Column;
import javax.persistence.ElementCollection;
import javax.persistence.Entity;
......@@ -37,6 +38,8 @@ import org.eclipse.persistence.annotations.PrivateOwned;
@OptimisticLocking(type = OptimisticLockingType.CHANGED_COLUMNS)
public class Product extends GenericEntity {
private static final String PRODUCTFLAG_TABLE_PRODUCTID = "product_id";
private static final String PRODUCTFLAG_TABLE_COLUMN = "productflags";
private static final long serialVersionUID = 1L;
public static final String EVENT_ID_COLUMN = "event_id";
@ManyToOne()
......@@ -57,17 +60,15 @@ public class Product extends GenericEntity {
@Column(name = "barcode")
private String barcode;
@Column(name = "prepaid")
private boolean prepaid = false;
@Enumerated(EnumType.STRING)
@PrivateOwned
@ElementCollection()
@CollectionTable(
joinColumns = @JoinColumn(name = PRODUCTFLAG_TABLE_PRODUCTID, referencedColumnName = ID_COLUMN),
uniqueConstraints = @UniqueConstraint(columnNames = { PRODUCTFLAG_TABLE_PRODUCTID, PRODUCTFLAG_TABLE_COLUMN }))
@Column(name = PRODUCTFLAG_TABLE_COLUMN)
private Set<ProductFlag> productFlags = new HashSet<ProductFlag>();
@Column(name = "instant_shop")
private boolean prepaidInstant = false;
@JoinColumn(name = "provided_role_id", referencedColumnName = Role.ID_COLUMN)
@ManyToOne
private Role provides;
......@@ -84,7 +85,7 @@ public class Product extends GenericEntity {
@JoinColumn(name = "discount_id", referencedColumnName = Discount.ID_COLUMN)
},
joinColumns = {
@JoinColumn(name = "product_id", referencedColumnName = Product.ID_COLUMN)
@JoinColumn(name = PRODUCTFLAG_TABLE_PRODUCTID, referencedColumnName = Product.ID_COLUMN)
})
private List<Discount> discounts;
......@@ -94,13 +95,13 @@ public class Product extends GenericEntity {
@ManyToMany()
@JoinTable(name = "product_foodwavetemplate",
joinColumns = {
@JoinColumn(name = "product_id", referencedColumnName = Product.ID_COLUMN),
@JoinColumn(name = PRODUCTFLAG_TABLE_PRODUCTID, referencedColumnName = Product.ID_COLUMN),
},
inverseJoinColumns = {
@JoinColumn(name = "food_wave_template_id", referencedColumnName = FoodWaveTemplate.ID_COLUMN)
},
uniqueConstraints = {
@UniqueConstraint(columnNames = { "product_id", "food_wave_template_id" })
@UniqueConstraint(columnNames = { PRODUCTFLAG_TABLE_PRODUCTID, "food_wave_template_id" })
})
private List<FoodWaveTemplate> foodWaveTemplates;
......@@ -213,21 +214,6 @@ public class Product extends GenericEntity {
return foodWaveTemplates;
}
/**
* @return the prepaid
*/
public boolean isPrepaid() {
return prepaid;
}
/**
* @param prepaid
* the prepaid to set
*/
public void setPrepaid(boolean prepaid) {
this.prepaid = prepaid;
}
public void setVat(BigDecimal vat) {
this.vat = vat;
}
......@@ -244,14 +230,6 @@ public class Product extends GenericEntity {
return unitName;
}
public void setPrepaidInstant(boolean prepaidInstant) {
this.prepaidInstant = prepaidInstant;
}
public boolean isPrepaidInstant() {
return prepaidInstant;
}
public void setProvides(Role provides) {
this.provides = provides;
}
......
......@@ -3,18 +3,21 @@ package fi.insomnia.bortal.model;
public enum ProductFlag {
FOODWAVE_ITEM,
PREPAID_CREDIT
;
PREPAID_CREDIT,
CREATE_NEW_PLACE_WHEN_BOUGHT,
RESERVE_PLACE_WHEN_BOUGHT,
PREPAID_INSTANT_CREATE, USER_SHOPPABLE;
private static final String KEY_PREFIX = "productFlag.";
private final String key;
private ProductFlag() {
key = KEY_PREFIX + name();
}
public String getI18nkey()
{
return key;
}
......
......@@ -7,7 +7,7 @@ import javax.persistence.metamodel.SetAttribute;
import javax.persistence.metamodel.SingularAttribute;
import javax.persistence.metamodel.StaticMetamodel;
@Generated(value="Dali", date="2012-08-19T19:24:42.761+0300")
@Generated(value="Dali", date="2012-08-24T01:13:32.136+0300")
@StaticMetamodel(Product.class)
public class Product_ extends GenericEntity_ {
public static volatile SingularAttribute<Product, LanEvent> event;
......@@ -16,9 +16,7 @@ public class Product_ extends GenericEntity_ {
public static volatile SingularAttribute<Product, BigDecimal> price;
public static volatile SingularAttribute<Product, Integer> sort;
public static volatile SingularAttribute<Product, String> barcode;
public static volatile SingularAttribute<Product, Boolean> prepaid;
public static volatile SetAttribute<Product, ProductFlag> productFlags;
public static volatile SingularAttribute<Product, Boolean> prepaidInstant;
public static volatile SingularAttribute<Product, Role> provides;
public static volatile ListAttribute<Product, Place> places;
public static volatile ListAttribute<Product, AccountEvent> accountEvents;
......
......@@ -8,7 +8,6 @@ import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
......@@ -104,7 +103,7 @@ public class User extends GenericEntity implements IUser {
@Column(name = "superadmin")
private boolean superadmin = false;
@OneToMany(mappedBy = "user", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@OneToMany(mappedBy = "user", cascade = CascadeType.ALL)
@OrderBy
@PrivateOwned
private List<UserImage> userImageList;
......@@ -112,73 +111,38 @@ public class User extends GenericEntity implements IUser {
@Transient
private static final Logger logger = LoggerFactory.getLogger(User.class);
/*
* (non-Javadoc)
*
* @see fi.insomnia.bortal.model.IUser#getCreated()
*/
@Override
public Calendar getCreated() {
return created;
}
/*
* (non-Javadoc)
*
* @see fi.insomnia.bortal.model.IUser#setCreated(java.util.Calendar)
*/
@Override
public void setCreated(Calendar created) {
this.created = created;
}
/*
* (non-Javadoc)
*
* @see fi.insomnia.bortal.model.IUser#getActive()
*/
@Override
public boolean getActive() {
return active;
}
/*
* (non-Javadoc)
*
* @see fi.insomnia.bortal.model.IUser#setActive(boolean)
*/
@Override
public void setActive(boolean active) {
this.active = active;
}
/*
* (non-Javadoc)
*
* @see fi.insomnia.bortal.model.IUser#getPassword()
*/
@Override
public String getPassword() {
logger.warn("Directly reading raw User password");
return password;
}
/*
* (non-Javadoc)
*
* @see fi.insomnia.bortal.model.IUser#setPassword(java.lang.String)
*/
@Override
public void setPassword(String password) {
logger.warn("Directly settings raw User password");
this.password = password;
}
/*
* (non-Javadoc)
*
* @see fi.insomnia.bortal.model.IUser#getWholeName()
*/
@Override
public String getWholeName() {
String ret = new StringBuilder().append(firstnames).append(" ").append(lastname).toString().trim();
......@@ -188,201 +152,101 @@ public class User extends GenericEntity implements IUser {
return ret;
}
/*
* (non-Javadoc)
*
* @see fi.insomnia.bortal.model.IUser#getLastname()
*/
@Override
public String getLastname() {
return lastname;
}
/*
* (non-Javadoc)
*
* @see fi.insomnia.bortal.model.IUser#setLastname(java.lang.String)
*/
@Override
public void setLastname(String lastname) {
this.lastname = lastname;
}
/*
* (non-Javadoc)
*
* @see fi.insomnia.bortal.model.IUser#getFirstnames()
*/
@Override
public String getFirstnames() {
return firstnames;
}
/*
* (non-Javadoc)
*
* @see fi.insomnia.bortal.model.IUser#setFirstnames(java.lang.String)
*/
@Override
public void setFirstnames(String firstnames) {
this.firstnames = firstnames;
}
/*
* (non-Javadoc)
*
* @see fi.insomnia.bortal.model.IUser#getBirthday()
*/
@Override
public Calendar getBirthday() {
return birthday;
}
/*
* (non-Javadoc)
*
* @see fi.insomnia.bortal.model.IUser#setBirthday(java.util.Calendar)
*/
@Override
public void setBirthday(Calendar birthday) {
this.birthday = birthday;
}
/*
* (non-Javadoc)
*
* @see fi.insomnia.bortal.model.IUser#getNick()
*/
@Override
public String getNick() {
return nick;
}
/*
* (non-Javadoc)
*
* @see fi.insomnia.bortal.model.IUser#setNick(java.lang.String)
*/
@Override
public void setNick(String nick) {
this.nick = nick;
}
/*
* (non-Javadoc)
*
* @see fi.insomnia.bortal.model.IUser#getEmail()
*/
@Override
public String getEmail() {
return email;
}
/*
* (non-Javadoc)
*
* @see fi.insomnia.bortal.model.IUser#setEmail(java.lang.String)
*/
@Override
public void setEmail(String email) {
this.email = email;
}
/*
* (non-Javadoc)
*
* @see fi.insomnia.bortal.model.IUser#getAddress()
*/
@Override
public String getAddress() {
return address;
}
/*
* (non-Javadoc)
*
* @see fi.insomnia.bortal.model.IUser#setAddress(java.lang.String)
*/
@Override
public void setAddress(String address) {
this.address = address;
}
/*
* (non-Javadoc)
*
* @see fi.insomnia.bortal.model.IUser#getZip()
*/
@Override
public String getZip() {
return zip;
}
/*
* (non-Javadoc)
*
* @see fi.insomnia.bortal.model.IUser#setZip(java.lang.String)
*/
@Override
public void setZip(String zip) {
this.zip = zip;
}
/*
* (non-Javadoc)
*
* @see fi.insomnia.bortal.model.IUser#getTown()
*/
@Override
public String getTown() {
return town;
}
/*
* (non-Javadoc)
*
* @see fi.insomnia.bortal.model.IUser#setTown(java.lang.String)
*/
@Override
public void setTown(String town) {
this.town = town;
}
/*
* (non-Javadoc)
*
* @see fi.insomnia.bortal.model.IUser#getPhone()
*/
@Override
public String getPhone() {
return phone;
}
/*
* (non-Javadoc)
*
* @see fi.insomnia.bortal.model.IUser#setPhone(java.lang.String)
*/
@Override
public void setPhone(String phone) {
this.phone = phone;
}
/*
* (non-Javadoc)
*
* @see fi.insomnia.bortal.model.IUser#getLogin()
*/
@Override
public String getLogin() {
return login;
}
/*
* (non-Javadoc)
*
* @see fi.insomnia.bortal.model.IUser#setLogin(java.lang.String)
*/
@Override
public void setLogin(String login) {
// Do not allow anonymous userchange
......@@ -396,166 +260,83 @@ public class User extends GenericEntity implements IUser {
}
/*
* (non-Javadoc)
*
* @see fi.insomnia.bortal.model.IUser#getUserImageList()
*/
@Override
public List<UserImage> getUserImageList() {
return userImageList;
}
/*
* (non-Javadoc)
*
* @see fi.insomnia.bortal.model.IUser#setUserImageList(java.util.List)
*/
@Override
public void setUserImageList(List<UserImage> userImageList) {
this.userImageList = userImageList;
}
/*
* (non-Javadoc)
*
* @see fi.insomnia.bortal.model.IUser#getConfirmHash()
*/
@Override
public String getConfirmHash() {
return confirmHash;
}
/*
* (non-Javadoc)
*
* @see fi.insomnia.bortal.model.IUser#setConfirmHash(java.lang.String)
*/
@Override
public void setConfirmHash(String confirmHash) {
this.confirmHash = confirmHash;
}
/*
* (non-Javadoc)
*
* @see fi.insomnia.bortal.model.IUser#getConfirmTime()
*/
@Override
public Calendar getConfirmTime() {
return confirmTime;
}
/*
* (non-Javadoc)
*
* @see fi.insomnia.bortal.model.IUser#setConfirmTime(java.util.Calendar)
*/
@Override
public void setConfirmTime(Calendar confirmTime) {
this.confirmTime = confirmTime;
}
/*
* (non-Javadoc)
*
* @see fi.insomnia.bortal.model.IUser#resetPassword(java.lang.String)
*/
@Override
public void resetPassword(String password) {
String newEncryptedPassword = PasswordFunctions.getEncryptedPassword(password);
this.password = newEncryptedPassword; // Bypass setter
}
/*
* (non-Javadoc)
*
* @see fi.insomnia.bortal.model.IUser#checkPassword(java.lang.String)
*/
@Override
public boolean checkPassword(String plainPassword) {
boolean matches = PasswordFunctions.checkPlainPassword(plainPassword, this.password);
return matches;
}
/*
* (non-Javadoc)
*
* @see fi.insomnia.bortal.model.IUser#setSuperadmin(boolean)
*/
@Override
public void setSuperadmin(boolean superadmin) {
this.superadmin = superadmin;
}
/*
* (non-Javadoc)
*
* @see fi.insomnia.bortal.model.IUser#isSuperadmin()
*/
@Override
public boolean isSuperadmin() {
return superadmin;
}
/*
* (non-Javadoc)
*
* @see fi.insomnia.bortal.model.IUser#setPostalTown(java.lang.String)
*/
@Override
public void setPostalTown(String postalTown) {
this.postalTown = postalTown;
}
/*
* (non-Javadoc)
*
* @see fi.insomnia.bortal.model.IUser#getPostalTown()
*/
@Override
public String getPostalTown() {
return postalTown;
}
/*
* (non-Javadoc)
*
* @see
* fi.insomnia.bortal.model.IUser#setGender(fi.insomnia.bortal.enums.Gender)
*/
@Override
public void setGender(Gender gender) {
this.gender = gender;
}
/*
* (non-Javadoc)
*
* @see fi.insomnia.bortal.model.IUser#getGender()
*/
@Override
public Gender getGender() {
return gender;
}
/*
* (non-Javadoc)
*
* @see
* fi.insomnia.bortal.model.IUser#setCurrentImage(fi.insomnia.bortal.model
* .UserImage)
*/
@Override
public void setCurrentImage(UserImage currentImage) {
this.currentImage = currentImage;
}
/*
* (non-Javadoc)
*
* @see fi.insomnia.bortal.model.IUser#getCurrentImage()
*/
@Override
public UserImage getCurrentImage() {
return currentImage;
......@@ -564,11 +345,6 @@ public class User extends GenericEntity implements IUser {
@Transient
private Boolean isAnon;
/*
* (non-Javadoc)
*
* @see fi.insomnia.bortal.model.IUser#isAnonymous()
*/
@Override
public boolean isAnonymous() {
if (isAnon == null) {
......
......@@ -4,8 +4,11 @@
*/
package fi.insomnia.bortal.model;
import static javax.persistence.FetchType.LAZY;
import java.util.Calendar;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
......@@ -25,15 +28,6 @@ import org.eclipse.persistence.annotations.OptimisticLockingType;
@Entity
@Table(name = "user_images")
@OptimisticLocking(type = OptimisticLockingType.CHANGED_COLUMNS)
// @NamedQueries({
// @NamedQuery(name = "UserImage.findAll", query = "SELECT u FROM UserImage u"),
//
// @NamedQuery(name = "UserImage.findByName", query =
// "SELECT u FROM UserImage u WHERE u.name = :name"),
// @NamedQuery(name = "UserImage.findByDescription", query =
// "SELECT u FROM UserImage u WHERE u.description = :description"),
// @NamedQuery(name = "UserImage.findByMimeType", query =
// "SELECT u FROM UserImage u WHERE u.mimeType = :mimeType") })
public class UserImage extends GenericEntity {
private static final long serialVersionUID = 1L;
......@@ -54,6 +48,7 @@ public class UserImage extends GenericEntity {
@Lob
@Column(name = "image_data")
@Basic(fetch = LAZY)
private byte[] imageData;
@JoinColumn(name = "user_id", referencedColumnName = "id")
......
......@@ -5,7 +5,7 @@ import javax.annotation.Generated;
import javax.persistence.metamodel.SingularAttribute;
import javax.persistence.metamodel.StaticMetamodel;
@Generated(value="Dali", date="2012-05-12T14:43:39.129+0300")
@Generated(value="Dali", date="2012-08-22T04:39:06.347+0300")
@StaticMetamodel(UserImage.class)
public class UserImage_ extends GenericEntity_ {
public static volatile SingularAttribute<UserImage, Calendar> uploaded;
......
......@@ -3,6 +3,7 @@ package fi.insomnia.bortal.enums;
import fi.insomnia.bortal.enums.apps.BillPermission;
import fi.insomnia.bortal.enums.apps.CompoPermission;
import fi.insomnia.bortal.enums.apps.ContentPermission;
import fi.insomnia.bortal.enums.apps.EventPermission;
import fi.insomnia.bortal.enums.apps.IAppPermission;
import fi.insomnia.bortal.enums.apps.MapPermission;
import fi.insomnia.bortal.enums.apps.PollPermission;
......@@ -21,6 +22,7 @@ public enum BortalApplication {
TERMINAL(TerminalPermission.class),
SALESPOINT(SalespointPermission.class),
COMPO(CompoPermission.class),
EVENT(EventPermission.class),
;
......
package fi.insomnia.bortal.enums.apps;
public enum SpecialPermission {
SUPERADMIN, USER, ANONYMOUS, ORGANISATION_ADMIN;
SUPERADMIN,
USER,
ANONYMOUS,
ORGANISATION_ADMIN,
VERKKOMAKSU_CHECKER
;
public static final String S_USER = "USER";
public static final String S_SUPERADMIN = "SUPERADMIN";
public static final String S_ANONYMOUS = "ANONYMOUS";
public static final String S_ORGANISATION_ADMIN = "ORGANISATION_ADMIN";
public static final String S_VERKKOMAKSU_CHECK = "VERKKOMAKSU_CHECKER";
}
......@@ -9,7 +9,8 @@
</session-config>
<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Production</param-value>
<!-- <param-value>Production</param-value> -->
<param-value>Development</param-value>
</context-param>
<context-param>
<param-name>javax.faces.FACELETS_SKIP_COMMENTS</param-name>
......
......@@ -9,6 +9,9 @@
<f:viewParam name="billid" value="#{billEditView.billid}" />
<f:event type="preRenderView" listener="#{billEditView.initView}" />
</f:metadata>
<ui:define name="title">
<h1>#{i18n['page.bill.edit.header']}</h1>
</ui:define>
<ui:define name="content">
<h:form id="billform">
......
......@@ -12,46 +12,61 @@
</f:metadata>
<ui:define name="content">
<h:form id="orgform">
<h:panelGrid columns="2">
<h:outputLabel value="#{i18n['eventorg.organisation']}:" />
<h:inputText value="#{eventorgView.eventorg.organisation}" />
<h:panelGrid columns="3">
<h:outputLabel for="id" value="#{i18n['eventorg.id']}:" />
<h:outputText id="id" value="#{eventorgView.eventorg.id}" />
<h:message for="id" />
<h:outputLabel value="#{i18n['eventorg.bundleCountry']}:" />
<h:inputText value="#{eventorgView.eventorg.bundleCountry}" />
<h:outputLabel for="org" value="#{i18n['eventorg.organisation']}:" />
<h:inputText size="50" id="org" value="#{eventorgView.eventorg.organisation}" />
<h:message for="org" />
<h:outputLabel value="#{i18n['eventorg.billAddress1']}:" />
<h:inputText value="#{eventorgView.eventorg.billAddress1}" />
<h:outputLabel for="bc" value="#{i18n['eventorg.bundleCountry']}:" />
<h:inputText size="50" id="bc" value="#{eventorgView.eventorg.bundleCountry}" />
<h:message for="bc" />
<h:outputLabel value="#{i18n['eventorg.billAddress2']}:" />
<h:inputText value="#{eventorgView.eventorg.billAddress2}" />
<h:outputLabel for="addr1" value="#{i18n['eventorg.billAddress1']}:" />
<h:inputText size="50" id="addr1" value="#{eventorgView.eventorg.billAddress1}" />
<h:message for="addr1" />
<h:outputLabel value="#{i18n['eventorg.billAddress3']}:" />
<h:inputText value="#{eventorgView.eventorg.billAddress3}" />
<h:outputLabel for="addr2" value="#{i18n['eventorg.billAddress2']}:" />
<h:inputText size="50" id="addr2" value="#{eventorgView.eventorg.billAddress2}" />
<h:message for="addr2" />
<h:outputLabel value="#{i18n['eventorg.billAddress4']}:" />
<h:inputText value="#{eventorgView.eventorg.billAddress4}" />
<h:outputLabel for="addr3" value="#{i18n['eventorg.billAddress3']}:" />
<h:inputText size="50" id="addr3" value="#{eventorgView.eventorg.billAddress3}" />
<h:message for="addr3" />
<h:outputLabel value="#{i18n['eventorg.bankNumber1']}:" />
<h:inputText value="#{eventorgView.eventorg.bankNumber1}" />
<h:outputLabel for="addr4" value="#{i18n['eventorg.billAddress4']}:" />
<h:inputText size="50" id="addr4" value="#{eventorgView.eventorg.billAddress4}" />
<h:message for="addr4" />
<h:outputLabel value="#{i18n['eventorg.bankNumber2']}:" />
<h:inputText value="#{eventorgView.eventorg.bankNumber2}" />
<h:outputLabel for="bankname1" value="#{i18n['eventorg.bankName1']}:" />
<h:inputText size="50" id="bankname1" value="#{eventorgView.eventorg.bankName1}" />
<h:message for="bankname1" />
<h:outputLabel value="#{i18n['eventorg.bankName1']}:" />
<h:inputText value="#{eventorgView.eventorg.bankName1}" />
<h:outputLabel for="bank1" value="#{i18n['eventorg.bankNumber1']}:" />
<h:inputText size="50" id="bank1" value="#{eventorgView.eventorg.bankNumber1}" />
<h:message for="bank1" />
<h:outputLabel for="bankname2" value="#{i18n['eventorg.bankName2']}:" />
<h:inputText size="50" id="bankname2" value="#{eventorgView.eventorg.bankName2}" />
<h:message for="bankname2" />
<h:outputLabel value="#{i18n['eventorg.bankName2']}:" />
<h:inputText value="#{eventorgView.eventorg.bankName2}" />
<h:outputLabel for="bank2" value="#{i18n['eventorg.bankNumber2']}:" />
<h:inputText size="50" id="bank2" value="#{eventorgView.eventorg.bankNumber2}" />
<h:message for="bank2" />
<h:commandButton id="commitbtn" action="#{eventorgView.saveEvent()}" value="#{i18n['eventorg.save']}" />
</h:panelGrid>
<h:commandButton id="commitbtn" action="#{eventorgView.saveEventorg()}" value="#{i18n['eventorg.save']}" />
</h:form>
<h2>#{i18n['eventorg.createevent']}</h2>
<h:form id="createevent">
<h:outputLabel for="createEventName" value="#{i18n['event.name']}" />
<h:inputText id="createEventName" value="#{eventorgView.eventname}" />
<h:inputText size="50" id="createEventName" value="#{eventorgView.eventname}" />
<h:commandButton action="#{eventorgView.createEvent()}" value="#{i18n['eventorg.createEvent']}" />
</h:form>
......
......@@ -6,7 +6,7 @@
<h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<f:metadata>
<f:event type="preRenderView" listener="#{pageOutputView.initView('index')}" />
<f:event type="preRenderView" listener="#{pageOutputView.initIndexView}" />
</f:metadata>
<ui:define name="content">
<h:outputLabel rendered="#{sessionHandler.isInDevelopmentMode()}">
......
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core"
xmlns:map="http://java.sun.com/jsf/composite/cditools/map" xmlns:tools="http://java.sun.com/jsf/composite/cditools"
xmlns:c="http://java.sun.com/jsp/jstl/core"
>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core"
xmlns:map="http://java.sun.com/jsf/composite/cditools/map" xmlns:tools="http://java.sun.com/jsf/composite/cditools" xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:p="http://primefaces.org/ui">
<h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<f:metadata>
......@@ -18,14 +15,19 @@
<map:setBuyable />
<img width="600" src="#{request.contextPath}/PlaceMap?mapid=#{mapView.activeMap.id}" alt="placeimage" />
<h:form>
<h:commandButton styleClass="imgcenter" id="commandbutton" image="/PlaceMap?mapid=#{mapView.activeMap.id}" actionListener="#{mapManageView.mapClick}" />
</h:form>
<map:genplaces />
<map:submitBg />
<!-- <map:listPlaces />
-->
<h:form>
<h:commandButton action="#{mapManageView.removeAllPlaces}" value="#{i18n['mapEdit.removePlaces']}" onclick="return confirm('Are you sure you want to REMOVE ALL PLACES!\nThis action is final')" />
</h:form>
<h:form enctype="multipart/form-data">
<p:fileUpload mode="simple" value="#{mapManageView.bgFile}" />
<h:commandButton action="#{mapManageView.submitBg}" value="#{i18n['map.submitMap']}" />
</h:form>
</ui:define>
</ui:composition>
</h:body>
......
......@@ -25,7 +25,7 @@
</f:facet>
<h:outputText value="#{page.name}" />
</h:column>
<h:column>
<h:column >
<f:facet name="header">
<h:outputText value="#{i18n['sitepage.roles']}" />
</f:facet>
......
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html" xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:users="http://java.sun.com/jsf/composite/cditools/user" xmlns:f="http://java.sun.com/jsf/core"
>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:users="http://java.sun.com/jsf/composite/cditools/user" xmlns:f="http://java.sun.com/jsf/core">
<h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<ui:param name="thispage" value="page.place.mygroups" />
......@@ -26,7 +24,7 @@
<h:commandButton id="commitbtn" action="#{tokenView.saveToken()}" value="#{i18n['placetoken.commit']}" />
</h:panelGrid>
</h:form>
<h2>#{i18n['placetoken.placelist']}</h2>
<p>#{i18n['placegroupview.toptext']}</p>
......@@ -46,28 +44,28 @@
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{i18n['placegroupview.reservationProduct']}" />
</f:facet>
<h:outputText value="#{member.placeReservation.product.name}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{i18n['placegroupview.token']}" />
</f:facet>
<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})" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{i18n['placegroupview.groupCreator']}" />
</f:facet>
<h:outputText
value="#{member.placeGroup.creator.firstnames} #{member.placeGroup.creator.lastname} (#{member.placeGroup.creator.nick})"
/>
<h:outputText value="#{member.placeGroup.creator.firstnames} #{member.placeGroup.creator.lastname} (#{member.placeGroup.creator.nick})" />
</h:column>
<h:column>
<h:commandButton rendered="#{placeGroupView.canModify(member) and !empty member.user}"
action="#{placeGroupView.releasePlace()}" value="#{i18n['placegroupview.releasePlace']}"
/>
<h:commandButton rendered="#{placeGroupView.canModify(member) and !empty member.user}" action="#{placeGroupView.releasePlace()}" value="#{i18n['placegroupview.releasePlace']}" />
</h:column>
</h:dataTable>
......
......@@ -54,7 +54,11 @@
<h:column>
<a href="#{request.contextPath}/PrintBill?billid=#{bill.id}" target="_blank">#{i18n['bill.printBill']}</a>
</h:column>
<h:column>
<h:link outcome="/bill/showBill" value="#{i18n['bill.show']}">
<f:param name="billid" value="#{bill.id}" />
</h:link>
</h:column>
<h:column rendered="#{billListView.canWriteBill()}">
<h:link outcome="/bill/edit" value="#{i18n['bill.edit']}">
<f:param name="billid" value="#{bill.id}" />
......
......@@ -10,50 +10,67 @@
</composite:interface>
<composite:implementation>
<h:panelGrid columns="2">
<h:outputLabel for="billnr" value="#{i18n['bill.billNumber']}:" />
<h:outputText id="billnr" value="#{cc.attrs.bill.billNumber}" />
<h:outputLabel for="addr1" value="#{i18n['bill.addr1']}:" />
<h:outputText id="addr1" value="#{cc.attrs.bill.addr1}" />
<h:outputLabel for="addr2" value="#{i18n['bill.addr2']}:" />
<h:outputText id="addr2" value="#{cc.attrs.bill.addr2}" />
<h:outputLabel for="addr3" value="#{i18n['bill.addr3']}:" />
<h:outputText id="addr3" value="#{cc.attrs.bill.addr3}" />
<h:outputLabel for="addr4" value="#{i18n['bill.addr4']}:" />
<h:outputText id="addr4" value="#{cc.attrs.bill.addr4}" />
<h:outputLabel for="addr5" value="#{i18n['bill.addr5']}:" />
<h:outputText id="addr5" value="#{cc.attrs.bill.addr5}" />
<h:outputLabel for="sentDate" value="#{i18n['bill.sentDate']}:" />
<h:outputText id="sentDate" value="#{cc.attrs.bill.sentDateTime}">
<f:convertDateTime pattern="#{sessionHandler.datetimeFormat}" timeZone="#{sessionHandler.timezone}" />
</h:outputText>
<h:outputLabel for="paymenttime" value="#{i18n['bill.paymentTime']}:" />
<h:outputText id="paymenttime" value="#{cc.attrs.bill.paymentTime}" />
<h:outputLabel for="noticetime" value="#{i18n['bill.noticetime']}:" />
<h:outputText id="noticetime" value="#{cc.attrs.bill.noticetime}" />
<h:outputLabel for="theirRef" value="#{i18n['bill.theirReference']}:" />
<h:outputText id="theirRef" value="#{cc.attrs.bill.theirReference}" />
<h:outputLabel for="ourRef" value="#{i18n['bill.ourReference']}:" />
<h:outputText id="ourRef" value="#{cc.attrs.bill.ourReference}" />
<h:outputLabel for="delivTerm" value="#{i18n['bill.deliveryTerms']}:" />
<h:outputText id="delivTerm" value="#{cc.attrs.bill.deliveryTerms}" />
<h:outputLabel for="notes" value="#{i18n['bill.notes']}:" />
<h:outputText id="notes" value="#{cc.attrs.bill.notes}" />
<h:panelGrid columns="2" columnClasses="topalign,topalign">
<h:panelGrid columns="2" columnClasses="topalign,topalign">
<h:outputLabel for="billnr" value="#{i18n['bill.billNumber']}:" />
<h:outputText id="billnr" value="#{cc.attrs.bill.billNumber}" />
<h:outputLabel for="refnr" value="#{i18n['bill.referencenumber']}" />
<h:outputText id="refnr" value="#{cc.attrs.bill.referenceNumber}" />
<h:outputLabel for="billAmount" value="#{i18n['bill.billAmount']}" />
<h:outputText id="billAmount" value="#{cc.attrs.bill.totalPrice()}">
<f:convertNumber maxFractionDigits="2" minFractionDigits="2" />
</h:outputText>
<h:outputLabel for="sentDate" value="#{i18n['bill.sentDate']}:" />
<h:outputText id="sentDate" value="#{cc.attrs.bill.sentDateTime}">
<f:convertDateTime pattern="#{sessionHandler.datetimeFormat}" timeZone="#{sessionHandler.timezone}" />
</h:outputText>
<h:outputLabel for="paymenttime" value="#{i18n['bill.paymentTime']}:" />
<h:outputText id="paymenttime" value="#{cc.attrs.bill.paymentTime eq 0 ? i18n['bill.paymentTime.now'] : cc.attrs.bill.paymentTime}" />
<h:outputLabel for="noticetime" value="#{i18n['bill.noticetime']}:" />
<h:outputText id="noticetime" value="#{cc.attrs.bill.noticetime}" />
</h:panelGrid>
<h:panelGrid columns="2" columnClasses="topalign,topalign">
<h:outputLabel for="address" value="#{i18n['bill.address']}:" />
<h:panelGroup id="address">
<h:outputText id="addr1" value="#{cc.attrs.bill.addr1}" />
<h:outputText rendered="#{!empty cc.attrs.bill.addr2}" value="&lt;br />" escape="false" />
<h:outputText id="addr2" value="#{cc.attrs.bill.addr2}" />
<h:outputText rendered="#{!empty cc.attrs.bill.addr3}" value="&lt;br />" escape="false" />
<h:outputText id="addr3" value="#{cc.attrs.bill.addr3}" />
<h:outputText rendered="#{!empty cc.attrs.bill.addr4}" value="&lt;br />" escape="false" />
<h:outputText id="addr4" value="#{cc.attrs.bill.addr4}" />
<h:outputText rendered="#{!empty cc.attrs.bill.addr5}" value="&lt;br />" escape="false" />
<h:outputText id="addr5" value="#{cc.attrs.bill.addr5}" />
</h:panelGroup>
<h:outputLabel for="receiver" value="#{i18n['bill.receiverAddress']}:" />
<h:panelGroup id="receiver">
<h:outputText id="recAddr1" value="#{cc.attrs.bill.event.organiser.billAddress1}" />
<h:outputText rendered="#{!empty cc.attrs.bill.event.organiser.billAddress2}" value="&lt;br />" escape="false" />
<h:outputText id="recAddr2" value="#{cc.attrs.bill.event.organiser.billAddress2}" />
<h:outputText rendered="#{!empty cc.attrs.bill.event.organiser.billAddress3}" value="&lt;br />" escape="false" />
<h:outputText id="recAddr3" value="#{cc.attrs.bill.event.organiser.billAddress3}" />
<h:outputText rendered="#{!empty cc.attrs.bill.event.organiser.billAddress4}" value="&lt;br />" escape="false" />
<h:outputText id="recAddr4" value="#{cc.attrs.bill.event.organiser.billAddress4}" />
</h:panelGroup>
<h:outputLabel rendered="#{!empty cc.attrs.bill.event.organiser.bankName1}" for="bankname1" value="#{i18n['eventorg.bankName1']}" />
<h:outputText rendered="#{!empty cc.attrs.bill.event.organiser.bankName1}" id="bankname1" value="#{cc.attrs.bill.event.organiser.bankName1}" />
<h:outputLabel rendered="#{!empty cc.attrs.bill.event.organiser.bankNumber1}" for="banknumber1" value="#{i18n['eventorg.bankNumber1']}" />
<h:outputText rendered="#{!empty cc.attrs.bill.event.organiser.bankNumber1}" id="banknumber1" value="#{cc.attrs.bill.event.organiser.bankNumber1}" />
<h:outputLabel rendered="#{!empty cc.attrs.bill.event.organiser.bankName2}" for="bankname2" value="#{i18n['eventorg.bankName2']}" />
<h:outputText rendered="#{!empty cc.attrs.bill.event.organiser.bankName2}" id="bankname2" value="#{cc.attrs.bill.event.organiser.bankName2}" />
<h:outputLabel rendered="#{!empty cc.attrs.bill.event.organiser.bankNumber2}" for="banknumber2" value="#{i18n['eventorg.bankNumber2']}" />
<h:outputText rendered="#{!empty cc.attrs.bill.event.organiser.bankNumber2}" id="banknumber2" value="#{cc.attrs.bill.event.organiser.bankNumber2}" />
</h:panelGrid>
</h:panelGrid>
</composite:implementation>
</html>
......@@ -17,34 +17,25 @@
action="#{placeView.buySelectedPlaces()}"
/>
<div>
<h:commandButton styleClass="imgcenter" id="commandbutton" image="/PlaceMap?mapid=#{mapView.activeMap.id}"
actionListener="#{placeView.placeSelectActionListener}"
/>
>
</h:commandButton>
</div>
<h:panelGrid styleClass="placeSelectInfotable" columns="3">
<h:panelGrid columns="2">
<div
style="border-color: black; border-style: solid; border-width: 1px; background-color: grey; width: 10px; height: 10px;"
>&nbsp;</div>
<div style="border-color: black; border-style: solid; border-width: 1px; background-color: grey; width: 10px; height: 10px;" >&nbsp;</div>
<h:outputText value="#{i18n['placeSelect.legend.grey']}" />
<div
style="border-color: black; border-style: solid; border-width: 1px; background-color: white; width: 10px; height: 10px;"
>&nbsp;</div>
<div style="border-color: black; border-style: solid; border-width: 1px; background-color: white; width: 10px; height: 10px;">&nbsp;</div>
<h:outputText value="#{i18n['placeSelect.legend.white']}" />
<div
style="border-color: black; border-style: solid; border-width: 1px; background-color: red; width: 10px; height: 10px;"
>&nbsp;</div>
<div style="border-color: black; border-style: solid; border-width: 1px; background-color: red; width: 10px; height: 10px;">&nbsp;</div>
<h:outputText value="#{i18n['placeSelect.legend.red']}" />
<div
style="border-color: black; border-style: solid; border-width: 1px; background-color: green; width: 10px; height: 10px;"
>&nbsp;</div>
<div style="border-color: black; border-style: solid; border-width: 1px; background-color: green; width: 10px; height: 10px;" >&nbsp;</div>
<h:outputText value="#{i18n['placeSelect.legend.green']}" />
<div
style="border-color: black; border-style: solid; border-width: 1px; background-color: blue; width: 10px; height: 10px;"
>&nbsp;</div>
<div style="border-color: black; border-style: solid; border-width: 1px; background-color: blue; width: 10px; height: 10px;">&nbsp;</div>
<h:outputText value="#{i18n['placeSelect.legend.blue']}" />
</h:panelGrid>
......
......@@ -21,11 +21,11 @@
<h:message for="name" />
<h:outputLabel for="roles" value="#{i18n['sitepage.roles']}" />
<h:selectManyCheckbox converter="#{roleConverter}" layout="pageDirection" id="roles" value="#{sitePageView.sitepage.allowedRoles}">
<h:outputLabel rendered="#{roleDataView.roleReadPermission}" for="roles" value="#{i18n['sitepage.roles']}" />
<h:selectManyCheckbox rendered="#{roleDataView.roleReadPermission}" converter="#{roleConverter}" layout="pageDirection" id="roles" value="#{sitePageView.sitepage.allowedRoles}">
<f:selectItems var="par" itemLabel="#{par.name}" value="#{roleDataView.roles}" />
</h:selectManyCheckbox>
<h:message for="roles" />
<h:message rendered="#{roleDataView.roleReadPermission}" for="roles" />
</h:panelGrid>
<div>
......
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core"
xmlns:composite="http://java.sun.com/jsf/composite" xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:c="http://java.sun.com/jsp/jstl/core"
>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:composite="http://java.sun.com/jsf/composite"
xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:c="http://java.sun.com/jsp/jstl/core">
<composite:interface>
......@@ -39,35 +37,23 @@
<h:outputLabel for="barcode" value="#{i18n['product.barcode']}:" />
<h:inputText id="barcode" value="#{productView.product.barcode}" />
<h:message for="barcode" />
<h:outputLabel for="color" value="#{i18n['product.color']}:" />
<h:inputText id="color" value="#{productView.product.color}" />
<h:message for="color" />
<h:outputLabel for="prepaid" value="#{i18n['product.prepaid']}" />
<h:selectBooleanCheckbox id="prepaid" value="#{productView.product.prepaid}" />
<h:message for="prepaid" />
<h:outputLabel for="instant" value="#{i18n['product.prepaidInstant']}" />
<h:selectBooleanCheckbox id="instant" value="#{productView.product.prepaidInstant}" />
<h:message for="instant" />
<h:outputLabel for="provides" value="#{i18n['product.providedRole']}" />
<h:selectOneMenu id="provides" layout="pageDirection" value="#{productView.product.provides}"
converter="#{roleConverter}"
>
<f:selectItems var="role" itemLabel="#{role.name}" value="#{roleDataView.rolesWithEmpty}"
noSelectionValue="#{roleDataView.noSelection}"
/>
<h:selectOneMenu id="provides" layout="pageDirection" value="#{productView.product.provides}" converter="#{roleConverter}">
<f:selectItems var="role" itemLabel="#{role.name}" value="#{roleDataView.rolesWithEmpty}" noSelectionValue="#{roleDataView.noSelection}" />
</h:selectOneMenu>
<h:message for="provides" />
<h:selectManyCheckbox layout="pageDirection" id="productFlags" value="#{productView.product.productFlags}" converter="#{productFlagConverter}" label="Product Flags">
<f:selectItems var="flag" itemLabel="#{i18n[flag.i18nkey]}" value="#{productView.productFlags}" />
</h:selectManyCheckbox>
<f:selectItems var="flag" itemLabel="#{i18n[flag.i18nkey]}" value="#{productView.productFlags}" />
</h:selectManyCheckbox>
<h:message for="productFlags" />
<h:commandButton id="commitbtn" action="#{cc.attrs.commitaction}" value="#{cc.attrs.commitvalue}" />
</h:panelGrid>
......@@ -77,7 +63,7 @@
</composite:implementation>
</html>
......
......@@ -27,46 +27,46 @@
<h:message rendered="#{!cc.attrs.creating}" for="viewlogin" />
<h:outputLabel rendered="#{cc.attrs.creating}" value="#{i18n['user.login']}:" for="login" />
<h:inputText rendered="#{cc.attrs.creating}" validator="#{userValidator.login}"
<h:inputText size="45" rendered="#{cc.attrs.creating}" validator="#{userValidator.login}"
disabled="#{!cc.attrs.creating and !userView.canSave()}" id="login" value="#{userView.selectedUser.login}"
/>
<h:message rendered="#{cc.attrs.creating}" for="login" />
<h:outputLabel value="#{i18n['user.nick']}:" for="nick" />
<h:inputText id="nick" disabled="#{!cc.attrs.creating and !userView.canSave()}" value="#{userView.selectedUser.nick}" />
<h:inputText size="45" id="nick" disabled="#{!cc.attrs.creating and !userView.canSave()}" value="#{userView.selectedUser.nick}" />
<h:message for="nick" />
<h:outputLabel value="#{i18n['user.email']}:" for="email" />
<h:inputText id="email" disabled="#{!cc.attrs.creating and !userView.canSave()}"
<h:inputText validator="#{userValidator.validateEmail}" size="45" id="email" disabled="#{!cc.attrs.creating and !userView.canSave()}"
value="#{userView.selectedUser.email}"
/>
<h:message for="email" />
<h:outputLabel value="#{i18n['user.firstNames']}:" for="firstnames" />
<h:inputText id="firstnames" disabled="#{!cc.attrs.creating and !userView.canSave()}"
<h:inputText size="45" id="firstnames" disabled="#{!cc.attrs.creating and !userView.canSave()}"
value="#{userView.selectedUser.firstnames}"
/>
<h:message for="firstnames" />
<h:outputLabel value="#{i18n['user.lastName']}:" for="lastname" />
<h:inputText id="lastname" disabled="#{!cc.attrs.creating and !userView.canSave()}"
<h:inputText size="45" id="lastname" disabled="#{!cc.attrs.creating and !userView.canSave()}"
value="#{userView.selectedUser.lastname}"
/>
<h:message for="lastname" />
<h:outputLabel value="#{i18n['user.address']}:" for="address" />
<h:inputText id="address" disabled="#{!cc.attrs.creating and !userView.canSave()}"
<h:inputText size="45" id="address" disabled="#{!cc.attrs.creating and !userView.canSave()}"
value="#{userView.selectedUser.address}"
/>
<h:message for="address" />
<h:outputLabel value="#{i18n['user.zipCode']}:" for="zip" />
<h:inputText id="zip" disabled="#{!cc.attrs.creating and !userView.canSave()}" value="#{userView.selectedUser.zip}" />
<h:inputText size="45" id="zip" disabled="#{!cc.attrs.creating and !userView.canSave()}" value="#{userView.selectedUser.zip}" />
<h:message for="zip" />
<h:outputLabel value="#{i18n['user.town']}:" for="town" />
<h:inputText id="town" disabled="#{!cc.attrs.creating and !userView.canSave()}" value="#{userView.selectedUser.town}" />
<h:inputText size="45" id="town" disabled="#{!cc.attrs.creating and !userView.canSave()}" value="#{userView.selectedUser.town}" />
<h:message for="town" />
......
......@@ -13,18 +13,14 @@ body,html {
margin: 0 auto;
}
td span span div.rating-cancel
{
td span span div.rating-cancel {
display: none;
}
#voteform div.rating-cancel
{
#voteform div.rating-cancel {
display: none;
}
#logo {
width: 255px;
height: 52px;
......@@ -211,4 +207,8 @@ a:hover {
td ul {
margin: 0;
}
.topalign {
vertical-align: top;
}
\ No newline at end of file
......@@ -7,19 +7,19 @@
<h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<f:event type="preRenderView" listener="#{productShopView.initBillView}" />
<ui:define name="title">
<h1>#{i18n['page.product.validateBillProducts.header']}</h1>
</ui:define>
<ui:define name="content">
<bill:showBill bill="#{billReviewView.bill}" />
<ui:fragment rendered="#{billReviewView.verkkomaksuAvailable}">
<bill:showBill bill="#{billEditView.bill}" />
<ui:fragment rendered="#{billEditView.verkkomaksuAvailable}">
<div id="svm-payment">
<a href="#{billReviewView.verkkomaksuToken.url}"> </a>
<a href="#{billEditView.verkkomaksuToken.url}"> </a>
</div>
<script type="text/javascript" src="//payment.verkkomaksut.fi/js/sv-widget.min.js"></script>
<script type="text/javascript">
SV.widget.initWithToken('svm-payment', '#{billReviewView.verkkomaksuToken.token}');
SV.widget.initWithToken('svm-payment', '#{billEditView.verkkomaksuToken.token}', {width: '800'});
</script>
</ui:fragment>
......
......@@ -15,31 +15,18 @@
<ui:define name="title">
<h1>#{i18n['sendPicture.header']}</h1>
</ui:define>
<ui:define name="headerdata">
<script type="text/javascript">
webcam
.set_api_url('#{request.contextPath}/UploadServlet?type=userimage&amp;id=#{userView.selectedUser.id}');
webcam.set_hook('onComplete', 'my_completion_handler');
webcam
.set_swf_url('#{request.contextPath}/resources/jpegcam/webcam.swf');
webcam.set_shutter_sound(true,
'#{request.contextPath}/resources/jpegcam/shutter.mp3');
function my_completion_handler(msg) {
// alert("Completition handler executed" + msg);
window.location.href = "#{request.contextPath}/user/sendPicture.jsf?userid=#{userView.user.id}";
}
</script>
</ui:define>
<ui:define name="content">
<h:outputScript library="primefaces" name="jquery/jquery.js" target="head" />
<h:outputScript target="head" library="jpegcam" name="webcam.js" />
<button onclick="$('#webcamcontainer').prepend(webcam.get_html(320, 240));$('#webcamcontainer').show();$(this).hide();">#{i18n['userimage.webcam']}</button>
<button onclick="$('#webcamcontainer').show();$(this).hide();">#{i18n['userimage.webcam']}</button>
<div id="webcamcontainer" style="display: none;"></div>
<div id="webcamcontainer" style="display: none;">
<h:form>
<p:photoCam widgetVar="pc" listener="#{userView.oncapture}" update="@all" />
<p:commandButton type="button" value="Capture" onclick="pc.capture()" />
</h:form>
</div>
......@@ -52,85 +39,101 @@
<h:form enctype="multipart/form-data">
<p:fileUpload value="#{userView.image}" mode="simple" />
<p:fileUpload id="uploadfile" required="TRUE" requiredMessage="Required!" invalidSizeMessage="#{i18n['user.imageTooBig']}" sizeLimit="1024" value="#{userView.image}" mode="simple" />
<h:message for="uploadfile" />
<h:commandButton action="#{userView.sendImage}" value="#{i18n['user.imagesubmit']}" />
</h:form>
<h2>asdasd</h2>
<h:dataTable value="#{userView.user.userImageList}" var="img">
<h:column>
<h:outputText value="#{img.name}" />
</h:column>
<h:column>
<h:outputText value="#{img.uploaded.time}">
<f:convertDateTime pattern="#{sessionHandler.datetimeFormat}" timeZone="#{sessionHandler.timezone}" />
</h:outputText>
</h:column>
<h:column>
<h:outputText value="#{(empty img.defaultImage) ? i18n['user.isNotDefaultImage'] : i18n['user.isDefaultImage']}" />
</h:column>
</h:dataTable>
<h2>#{i18n['user.thisIsCurrentImage']}</h2>
<h:outputText rendered="#{empty userView.user.currentImage}" value="#{i18n['user.noCurrentImage']}" />
<ui:fragment rendered="#{!empty userView.user.currentImage}">
<h:panelGrid columns="2">
<img width="300" src="#{request.contextPath}/dydata/userimage/#{userView.user.currentImage.id}.jpg" alt="image" />
<ui:fragment rendered="#{userView.canManage()}">
<h:form>
<p:imageCropper value="#{userView.croppedImage}" aspectRatio="0.8" image="/dydata/userimage/#{userView.user.currentImage.id}.jpg" />
<h:commandButton action="#{userView.crop}" value="#{i18n['user.cropImage']}" />
</h:form>
</ui:fragment>
</h:panelGrid>
<ui:fragment rendered="#{userView.canManage()}">
<h2>Ylläpito</h2>
<img width="300" src="#{request.contextPath}/dydata/userimage/#{userView.user.currentImage.id}.img" alt="image" />
<div>
<h:form>
<h:commandButton action="#{userView.makeCard()}" value="#{i18n['user.makeCard']}" />
<h:dataTable var="card" value="#{userCardView.printedCards}">
<h:column>
<h:outputText value="#{card.enabled}" />
</h:column>
<h:column>
<h:outputText value="#{card.enabled}" />
</h:column>
<h:column>
<a href="#{request.contextPath}/UserCard?cardid=#{card.id}">View Card</a>
<a href="#{request.contextPath}/UserCard?cardid=#{card.id}&amp;download=1">Print Card</a>
</h:column>
</h:dataTable>
<p:imageCropper value="#{userView.croppedImage}" aspectRatio="0.8" image="/dydata/userimage/#{userView.user.currentImage.id}.img" />
<h:commandButton action="#{userView.crop()}" value="#{i18n['user.cropImage']}" />
</h:form>
</div>
</ui:fragment>
<h3>RFID</h3>
<h:form rendered="#{empty readerNameContainer.readerId}">
<h:dataTable border="1" id="reader" value="#{readerListDataView.readers}" var="rr">
<h:column>
<f:facet name="header">
<h:outputText value="${i18n['reader.name']}" />
</f:facet>
<h:outputText value="#{rr}" />
</h:column>
<h:column>
<h:commandButton action="#{readerListDataView.selectReader}" />
</h:column>
</h:dataTable>
</h:form>
<shop:readerevents rendered="#{!empty readerNameContainer.readerId}" />
</ui:fragment>
<ui:fragment rendered="#{userView.canManage()}">
<h2>Ylläpito</h2>
<h:form>
<h:commandButton action="#{userView.makeCard()}" value="#{i18n['user.makeCard']}" />
<h:dataTable var="card" value="#{userCardView.printedCards}">
<h:column>
<h:outputText value="#{card.enabled}" />
</h:column>
<h:column>
<h:outputText value="#{card.enabled}" />
</h:column>
<h:column>
<a href="#{request.contextPath}/UserCard?cardid=#{card.id}">View Card</a>
<a href="#{request.contextPath}/UserCard?cardid=#{card.id}&amp;download=1">Print Card</a>
</h:column>
</h:dataTable>
</h:form>
<h3>RFID</h3>
<h:form rendered="#{empty readerNameContainer.readerId}">
<h:dataTable border="1" id="reader" value="#{readerListDataView.readers}" var="rr">
<h:column>
<f:facet name="header">
<h:outputText value="${i18n['reader.name']}" />
</f:facet>
<h:outputText value="#{rr}" />
</h:column>
<h:column>
<h:commandButton action="#{readerListDataView.selectReader}" />
</h:column>
</h:dataTable>
</h:form>
<shop:readerevents rendered="#{!empty readerNameContainer.readerId}" />
<!-- <h:dataTable var="image" value="#{userView.user.userImageList}"> -->
<!-- <h:column> -->
<!-- <h:outputText value="#{image.id}" /> -->
<!-- </h:column> -->
<!-- <h:column> -->
<!-- <h:outputText value="#{image.name}" /> -->
<!-- </h:column> -->
<!-- <h:column> -->
<!-- <h:outputText value="#{image.description}" /> -->
<!-- </h:column> -->
<!-- </h:dataTable> -->
</ui:fragment>
<!-- <h:dataTable var="image" value="#{userView.user.userImageList}"> -->
<!-- <h:column> -->
<!-- <h:outputText value="#{image.id}" /> -->
<!-- </h:column> -->
<!-- <h:column> -->
<!-- <h:outputText value="#{image.name}" /> -->
<!-- </h:column> -->
<!-- <h:column> -->
<!-- <h:outputText value="#{image.description}" /> -->
<!-- </h:column> -->
<!-- </h:dataTable> -->
</ui:define>
......
......@@ -22,7 +22,7 @@ import fi.insomnia.bortal.beans.PermissionBeanLocal;
import fi.insomnia.bortal.beans.RoleBeanLocal;
import fi.insomnia.bortal.clientutils.BortalLocalContextHolder;
import fi.insomnia.bortal.enums.apps.IAppPermission;
import fi.insomnia.bortal.model.IUser;
import fi.insomnia.bortal.model.EventUser;
/**
*
......@@ -51,7 +51,12 @@ public class SessionHandler {
public String getLocale() {
// TODO: Locale selection code missing
// return "en_ST_v7";
return "en_ST_nine";
String ret = eventbean.getCurrentEvent().getOrganiser().getBundleCountry();
if (ret == null || ret.isEmpty())
{
ret = "fi_FI";
}
return ret;
}
public String getLayout() {
......@@ -125,7 +130,7 @@ public class SessionHandler {
}
public IUser getCurrentUser() {
public EventUser getCurrentUser() {
return permbean.getCurrentUser();
}
......
......@@ -71,7 +71,7 @@ navi.auth.logout = frontpage
pagegroup.auth.login = frontpage
placegroupview.toptext = \
placegroupview.toptext = \
poll.edit = edit
......
......@@ -35,7 +35,11 @@ bill.addr2 = Address 2
bill.addr3 = Address 3
bill.addr4 = Address 4
bill.addr5 = Address 5
bill.address = Payers address
bill.billAmount = Bill amount
bill.billIsPaid = Bill is paid
bill.billNumber = Bill number
bill.billPaidDate = Paid date
bill.deliveryTerms = Delivery terms
bill.edit = edit
bill.isPaid = Paid
......@@ -47,10 +51,13 @@ bill.ourReference = Our reference
bill.paidDate = Paid date
bill.payer = Payer
bill.paymentTime = Payment time
bill.paymentTime.now = Now
bill.printBill = Print bill
bill.receiverAddress = Receiver address
bill.referenceNumberBase = Reference number base
bill.referencenumber = Reference nr.
bill.sentDate = Sent date
bill.show = Show
bill.theirReference = Clients reference
bill.totalPrice = Total
......@@ -115,7 +122,9 @@ eventdomain.domainname = Domain
eventdomain.remove = Remove
eventorg.bankName1 = Bank name 2
eventorg.bankNumber1 = Bank account nr. 2
eventorg.bankName2 = Bank name 2
eventorg.bankNumber1 = Bank account nr. 1
eventorg.bankNumber2 = Bank account nr. 2
eventorg.billAddress1 = Billing address 1
eventorg.billAddress2 = Billing address 2
eventorg.billAddress3 = Billing address 3
......@@ -192,57 +201,62 @@ org.hibernate.validator.constraints.Length.message = length must be between {m
org.hibernate.validator.constraints.NotEmpty.message = may not be empty
org.hibernate.validator.constraints.Range.message = must be between {min} and {max}
page.account.edit.header = Edit account events
page.account.list.header = Account events
page.admin.sendimage.header = Send image
page.auth.login.header = Login error
page.auth.login.loginerror.header = Kirjautumisvirhe
page.auth.login.loginerror.pagegroup = frontpage
page.auth.login.logout.header = Uloskirjautuminen
page.auth.login.logout.pagegroup = frontpage
page.auth.login.pagegroup = frontpage
page.auth.login.title = Login error
page.auth.loginerror.header = Login failed
page.auth.loginerror.pagegroup = frontpage
page.auth.logout.pagegroup = frontpage
page.auth.notauthorized.pagegroup = frontpage
page.auth.resetPassword.header = Reset password
page.bill.billSummary.header = Summary of bills
page.bill.edit.header = Edit bill
page.bill.listAll.header = Bills
page.bill.placemap.header = Place map
page.game.list.header = Insomnia Game
page.game.start.header = Insomnia Game
page.index.header = Frontpage
page.index.pagegroup = frontpage
page.permissionDenied.header = Access denied
page.place.edit.header = Edit place
page.place.insertToken.header = Insert place token
page.place.mygroups.header = My places
page.place.placemap.header = Reserve place
page.poll.answer.header = Poll
page.poll.answered.header = Thank you for your answer
page.poll.start.header = Poll
page.product.create.pagegroup = admin
page.product.createBill.header = Buy products
page.product.createBill.pagegroup = shop
page.product.edit.pagegroup = admin
page.product.list.pagegroup = admin
page.role.create.pagegroup = admin
page.role.edit.pagegroup = admin
page.role.list.pagegroup = admin
page.shop.readerevents.header = RFID shop
page.tests.placemap.pagegroup = shop
page.user.create.header = New user
page.user.create.pagegroup = user
page.user.edit.header = Edit user
page.user.edit.pagegroup = user
page.user.editself.header = My preferences
page.user.editself.pagegroup = user
page.user.list.header = Users
page.user.list.pagegroup = user
page.user.mygroups.header = My places
page.viewexpired = frontpage
page.account.edit.header = Edit account events
page.account.list.header = Account events
page.admin.sendimage.header = Send image
page.auth.login.header = Login error
page.auth.login.loginerror.header = Kirjautumisvirhe
page.auth.login.loginerror.pagegroup = frontpage
page.auth.login.logout.header = Uloskirjautuminen
page.auth.login.logout.pagegroup = frontpage
page.auth.login.pagegroup = frontpage
page.auth.login.title = Login error
page.auth.loginerror.header = Login failed
page.auth.loginerror.pagegroup = frontpage
page.auth.logout.pagegroup = frontpage
page.auth.notauthorized.pagegroup = frontpage
page.auth.resetPassword.header = Reset password
page.bill.billSummary.header = Summary of bills
page.bill.edit.header = Edit bill
page.bill.listAll.header = Bills
page.bill.placemap.header = Place map
page.bill.show.header = Bill info
page.game.list.header = Insomnia Game
page.game.start.header = Insomnia Game
page.index.header = Frontpage
page.index.pagegroup = frontpage
page.permissionDenied.header = Access denied
page.place.edit.header = Edit place
page.place.insertToken.header = Insert place token
page.place.mygroups.header = My places
page.place.placemap.header = Reserve place
page.poll.answer.header = Poll
page.poll.answered.header = Thank you for your answer
page.poll.start.header = Poll
page.product.create.pagegroup = admin
page.product.createBill.header = Buy products
page.product.createBill.pagegroup = shop
page.product.edit.pagegroup = admin
page.product.list.pagegroup = admin
page.product.validateBillProducts.header = Bill created
page.role.create.pagegroup = admin
page.role.edit.pagegroup = admin
page.role.list.pagegroup = admin
page.shop.readerevents.header = RFID shop
page.svm.failure.header = Payment error
page.svm.pending.header = Payment pending
page.svm.success.header = Payment successfull
page.tests.placemap.pagegroup = shop
page.user.create.header = New user
page.user.create.pagegroup = user
page.user.edit.header = Edit user
page.user.edit.pagegroup = user
page.user.editself.header = My preferences
page.user.editself.pagegroup = user
page.user.list.header = Users
page.user.list.pagegroup = user
page.user.mygroups.header = My places
page.viewexpired = frontpage
pagination.firstpage = First
pagination.lastpage = Last
......@@ -307,6 +321,7 @@ placegroupview.placeReleaseFailed = Releasing of place failed!
placegroupview.placeReleased = Place {0} released
placegroupview.releasePlace = Release
placegroupview.reservationName = Place
placegroupview.reservationProduct = Product
placegroupview.token = Placecode / user
placetoken.commit = Associate token
......@@ -421,9 +436,12 @@ sidebar.users = Users
sidebar.utils.flushCache = Flush Cache
sidebar.utils.testdata = Testdata
sitepage.addContent = Add content block
sitepage.create = Create
sitepage.edit = Edit
sitepage.name = Page name
sitepage.roles = Visible for roles
sitepage.save = Save
sitepagelist.header = Site pages
......@@ -433,9 +451,11 @@ submenu.auth.sendResetMail = Password reset
submenu.bill.billSummary = Bill summary
submenu.bill.list = My bills
submenu.bill.listAll = All bills
submenu.index = Front page
submenu.index = Frontpage
submenu.map.create = Create map
submenu.map.list = List maps
submenu.orgrole.create = Create organisationrole
submenu.orgrole.list = Organisation roles
submenu.pages.create = Create content
submenu.pages.list = List pages
submenu.place.insertToken = Insert placecode
......@@ -469,6 +489,13 @@ submenu.voting.myEntries = My entries
supernavi.admin = Adminview
supernavi.user = Userview
svm.failure.errorMessage = Payment error.
svm.failure.successMessage = Payment error successfull\u2026 ( Possibly already marked paid )
svm.pending.errorMessage = Unknown error! If payment was successfull email will be sent after verification.
svm.pending.successMessage = Payment pending. You will receive email after payment verification.
svm.success.errorMessage = Payment could not be verified!
svm.success.successMessage = Payment was successfull. You can now your credits in the system.
template.loggedInAs = Logged in as:
topnavi.adminshop = Adminshop
......@@ -556,6 +583,7 @@ userlist.search = Search
usertitle.managingUser = Shop
userview.header = Users
userview.invalidEmail = Invalid email address
userview.loginstringFaulty = Username has to be atleast 2 characters long!
userview.passwordTooShort = Password has to be atleast 5 characters long!
userview.passwordsChanged = Password changed
......
......@@ -35,7 +35,11 @@ bill.addr2 = Osoite 2
bill.addr3 = Osoite 3
bill.addr4 = Osoite 4
bill.addr5 = Osoite 5
bill.address = Maksajan osoite
bill.billAmount = Laskun summa
bill.billIsPaid = Lasku on maksettu
bill.billNumber = Laskun numero
bill.billPaidDate = Maksup\u00E4iv\u00E4
bill.deliveryTerms = Toimitusehdot
bill.edit = Muokkaa
bill.isPaid = Maksettu
......@@ -47,10 +51,13 @@ bill.ourReference = Myyj\u00E4n viite
bill.paidDate = Maksup\u00E4iv\u00E4
bill.payer = Maksaja
bill.paymentTime = Maksuehdot
bill.paymentTime.now = Heti
bill.printBill = Tulosta lasku
bill.receiverAddress = Kauppiaan osoite
bill.referenceNumberBase = Viitenumeropohja
bill.referencenumber = Viitenumero
bill.sentDate = P\u00E4iv\u00E4ys
bill.show = N\u00E4yt\u00E4
bill.theirReference = Asiakkaan viite
bill.totalPrice = Laskun summa
......@@ -112,8 +119,10 @@ event.startTime = Aloitusp\u00E4iv\u00E4
eventdomain.domainname = Domain
eventdomain.remove = Poista
eventorg.bankName1 = Pankin nimi 2
eventorg.bankNumber1 = Tilinumero 2
eventorg.bankName1 = Pankin nimi 1
eventorg.bankName2 = Pankin nimi 2
eventorg.bankNumber1 = Tilinumero 1
eventorg.bankNumber2 = Tilinumero 2
eventorg.billAddress1 = Laskutusosoite 1
eventorg.billAddress2 = Laskutusosoite 2
eventorg.billAddress3 = Laskutusosoite 3
......@@ -217,19 +226,23 @@ org.hibernate.validator.constraints.Length.message = length must be between {m
org.hibernate.validator.constraints.NotEmpty.message = may not be empty
org.hibernate.validator.constraints.Range.message = must be between {min} and {max}
page.account.list.header = Tilitapahtumat
page.auth.loginerror.header = kirjautuminen ep\u00E4onnistui
page.auth.logout.header = Uloskirjautuminen
page.auth.logoutsuccess.header = Logout
page.auth.resetPassword.header = Nollaa salasana
page.bill.billSummary.header = Laskujen yhteenveto
page.bill.edit.header = Laskun tiedot
page.bill.list.header = Laskut
page.place.insertToken.header = Sy\u00F6t\u00E4 paikkakoodi
page.place.mygroups.header = Paikkaryhm\u00E4t
page.place.placemap.header = Paikkakartta
page.product.createBill.header = Osta tuotteita
page.user.create.header = Luo uusi k\u00E4ytt\u00E4j\u00E4
page.account.list.header = Tilitapahtumat
page.auth.loginerror.header = kirjautuminen ep\u00E4onnistui
page.auth.logout.header = Uloskirjautuminen
page.auth.logoutsuccess.header = Logout
page.auth.resetPassword.header = Nollaa salasana
page.bill.billSummary.header = Laskujen yhteenveto
page.bill.list.header = Laskut
page.bill.show.header = Laskun tiedot
page.place.insertToken.header = Sy\u00F6t\u00E4 paikkakoodi
page.place.mygroups.header = Paikkaryhm\u00E4t
page.place.placemap.header = Paikkakartta
page.product.createBill.header = Osta tuotteita
page.product.validateBillProducts.header = Lasku luotu
page.svm.failure.header = Verkkomaksuvirhe
page.svm.pending.header = Maksukuittausta odotetaan
page.svm.success.header = Verkkomaksu onnistui
page.user.create.header = Luo uusi k\u00E4ytt\u00E4j\u00E4
pagination.firstpage = Ensimm\u00E4inen
pagination.lastpage = Viimeinen
......@@ -297,6 +310,7 @@ placegroupview.placeReleaseFailed = Paikan vapauttaminen ep\u00E4onnistui!
placegroupview.placeReleased = Paikka {0} vapautettu
placegroupview.releasePlace = Vapauta
placegroupview.reservationName = Paikka
placegroupview.reservationProduct = Tuote
placegroupview.token = Paikkakoodi / k\u00E4ytt\u00E4j\u00E4
placetoken.commit = Liit\u00E4
......@@ -408,9 +422,11 @@ sidebar.users = K\u00E4ytt\u00E4j\u00E4t
sidebar.utils.flushCache = Flush Cache
sidebar.utils.testdata = Testdata
sitepage.create = Luo uusi
sitepage.edit = Muokkaa
sitepage.name = Sivun nimi
sitepage.roles = N\u00E4ytet\u00E4\u00E4n rooleille
sitepage.save = Tallenna
sitepagelist.header = Sivuston sis\u00E4ll\u00F6t
......@@ -420,8 +436,11 @@ submenu.auth.sendResetMail = Salasanan palautus
submenu.bill.billSummary = Laskujen yhteenveto
submenu.bill.list = N\u00E4yt\u00E4 omat laskut
submenu.bill.listAll = Kaikki laskut
submenu.index = Etusivu
submenu.map.create = Uusi kartta
submenu.map.list = N\u00E4yt\u00E4 kartat
submenu.orgrole.create = Luo j\u00E4rjest\u00E4j\u00E4rooli
submenu.orgrole.list = J\u00E4rjest\u00E4j\u00E4roolit
submenu.pages.create = Luo sis\u00E4lt\u00F6\u00E4
submenu.pages.list = N\u00E4yt\u00E4 sis\u00E4ll\u00F6t
submenu.place.insertToken = Sy\u00F6t\u00E4 paikkakoodi
......@@ -458,6 +477,13 @@ submenu.voting.myEntries = Omat entryt
supernavi.admin = Yll\u00E4piton\u00E4kym\u00E4
supernavi.user = K\u00E4ytt\u00E4j\u00E4n\u00E4kym\u00E4
svm.failure.errorMessage = Verkkomaksuvirhe.
svm.failure.successMessage = Maksuvirhe onnistunut. ( Maksu mahdollisesti merkitty jo maksetuksi )
svm.pending.errorMessage = Maksukuittausta odotetaan. Kuittauksesta l\u00E4hetet\u00E4\u00E4n ilmoitus s\u00E4hk\u00F6postitse.
svm.pending.successMessage = Maksukuittausta odotetaan. Kuittauksesta l\u00E4hetet\u00E4\u00E4n ilmoitus s\u00E4hk\u00F6postitse.
svm.success.errorMessage = Verkkomaksua ei voitu verifioida! Virheest\u00E4 on raportoitu eteenp\u00E4in.
svm.success.successMessage = Verkkomaksu onnistui.
template.loggedInAs = Kirjautunut tunnuksella:
topnavi.adminshop = Kauppa
......@@ -541,6 +567,7 @@ userlist.search = Etsi
usertitle.managingUser = Kauppa
userview.invalidEmail = Virheeliinen s\u00E4hk\u00F6postiosoite
userview.loginstringFaulty = K\u00E4ytt\u00E4j\u00E4tunnus virheellinen. Pit\u00E4\u00E4 olla v\u00E4hint\u00E4\u00E4n kaksi merkki\u00E4 pitk\u00E4.
userview.passwordTooShort = Salasana liian lyhyt. Pit\u00E4\u00E4 olla v\u00E4hint\u00E4\u00E4n {0} merkki\u00E4 pitk\u00E4.
userview.passwordsChanged = Salasana vaihdettu
......
......@@ -33,7 +33,7 @@ import fi.insomnia.bortal.beans.PlaceMapBeanLocal;
import fi.insomnia.bortal.beans.SecurityLogType;
import fi.insomnia.bortal.enums.apps.MapPermission;
import fi.insomnia.bortal.model.EventMap;
import fi.insomnia.bortal.model.IUser;
import fi.insomnia.bortal.model.EventUser;
import fi.insomnia.bortal.model.Place;
/**
......@@ -149,7 +149,7 @@ public class PlaceMap extends HttpServlet {
// logger.debug("Got map object {}", map);
List<Place> places = map.getPlaces();
IUser user = permbean.getCurrentUser();
EventUser user = permbean.getCurrentUser();
// List<Place> selectedPlaces = placemapBean.findSelectedPlaces(map);
BufferedImage image = ImageIO.read(new ByteArrayInputStream(map
......@@ -241,7 +241,7 @@ public class PlaceMap extends HttpServlet {
private static final Color LOCKED_COLOR = Color.DARK_GRAY;
private static final int BORDER_WIDTH = 2;
private static void drawPlace(Place p, Graphics2D g, IUser user) {
private static void drawPlace(Place p, Graphics2D g, EventUser user) {
if (p.isDisabled()) {
return;
}
......@@ -259,15 +259,13 @@ public class PlaceMap extends HttpServlet {
color = OWNED_COLOR;
} else if (p.isTaken()) {
color = RESERVED_COLOR;
} else if (p.getProduct().getColor() != null) {
} else if (p.getProduct().getColor() != null && !p.getProduct().getColor().isEmpty()) {
try {
color = Color.decode(p.getProduct().getColor());
} catch (NumberFormatException x) {
logger.error("Cannot convert string {} to color.", p
.getProduct().getColor());
logger.error("Cannot convert string {} to color.", p.getProduct().getColor());
}
}
g.setColor(BORDER_COLOR);
......
......@@ -21,7 +21,7 @@ import fi.insomnia.bortal.beans.CardTemplateBeanLocal;
import fi.insomnia.bortal.beans.PermissionBeanLocal;
import fi.insomnia.bortal.beans.UserBeanLocal;
import fi.insomnia.bortal.enums.apps.UserPermission;
import fi.insomnia.bortal.model.IUser;
import fi.insomnia.bortal.model.EventUser;
import fi.insomnia.bortal.model.PrintedCard;
/**
......@@ -86,7 +86,7 @@ public class UserCardServlet extends GenericImageServlet {
private byte[] mkCard(PrintedCard card) throws IOException {
IUser user = card.getUser();
EventUser user = card.getUser();
BufferedImage face = ImageIO.read(new ByteArrayInputStream(user.getCurrentImage().getImageData()));
......
......@@ -6,7 +6,7 @@ import javax.inject.Inject;
import javax.inject.Named;
import fi.insomnia.bortal.beans.NewsBeanLocal;
import fi.insomnia.bortal.model.IUser;
import fi.insomnia.bortal.model.EventUser;
import fi.insomnia.bortal.web.annotations.SelectedUser;
import fi.insomnia.bortal.web.cdiview.GenericCDIView;
......@@ -19,6 +19,6 @@ public class GameView extends GenericCDIView {
@Inject
@SelectedUser
private IUser user;
private EventUser user;
}
......@@ -2,11 +2,15 @@ package fi.insomnia.bortal.web.cdiview.map;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import javax.ejb.EJB;
import javax.enterprise.context.ConversationScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.inject.Named;
import org.primefaces.model.UploadedFile;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
......@@ -17,6 +21,7 @@ import fi.insomnia.bortal.beans.ProductBeanLocal;
import fi.insomnia.bortal.beans.UserBeanLocal;
import fi.insomnia.bortal.enums.apps.MapPermission;
import fi.insomnia.bortal.model.EventMap;
import fi.insomnia.bortal.model.LanEvent;
import fi.insomnia.bortal.model.Place;
import fi.insomnia.bortal.model.Product;
import fi.insomnia.bortal.web.cdiview.GenericCDIView;
......@@ -41,6 +46,9 @@ public class MapManageView extends GenericCDIView {
@EJB
private transient ProductBeanLocal productbean;
private UploadedFile bgFile;
private List<EventMap> eventmaps;
private EventMap map;
private String mapname;
......@@ -64,6 +72,8 @@ public class MapManageView extends GenericCDIView {
private Integer mapId;
private List<Product> productlist;
private LanEvent copyEvent;
public void initCreate() {
if (super.requirePermissions(MapPermission.MANAGE_MAPS)) {
super.beginConversation();
......@@ -80,6 +90,13 @@ public class MapManageView extends GenericCDIView {
}
public String submitBg()
{
map.setMapData(bgFile.getContents());
map = eventmapBean.saveMap(map);
return null;
}
public List<EventMap> getMaps() {
if (eventmaps == null) {
eventmaps = eventBean.getCurrentEvent().getEventMaps();
......@@ -114,6 +131,22 @@ public class MapManageView extends GenericCDIView {
return "edit";
}
public void mapClick(ActionEvent e) {
FacesContext context = FacesContext.getCurrentInstance();
String clientId = e.getComponent().getClientId(context);
Map<String, String> requestParams = context.getExternalContext().getRequestParameterMap();
startX = new Integer(requestParams.get(clientId + ".x")).intValue();
startY = new Integer(requestParams.get(clientId + ".y")).intValue();
}
public String removeAllPlaces()
{
map = eventmapBean.clearPlaces(map);
return null;
}
public void generatePlaces() {
String[] tablenames = getNamebase().split(";");
List<Place> mapplaces = map.getPlaces();
......@@ -290,4 +323,20 @@ public class MapManageView extends GenericCDIView {
public List<Product> getProductlist() {
return productlist;
}
public LanEvent getCopyEvent() {
return copyEvent;
}
public void setCopyEvent(LanEvent copyEvent) {
this.copyEvent = copyEvent;
}
public UploadedFile getBgFile() {
return bgFile;
}
public void setBgFile(UploadedFile bgFile) {
this.bgFile = bgFile;
}
}
......@@ -77,7 +77,7 @@ public class PlaceView extends GenericCDIView {
String clientId = e.getComponent().getClientId(context);
Map<String, String> requestParams = context.getExternalContext().getRequestParameterMap();
logger.info("Requestmap for clientId {}: {}", clientId, requestParams);
int x = new Integer(requestParams.get(clientId + ".x")).intValue();
int y = new Integer(requestParams.get(clientId + ".y")).intValue();
logger.debug("Clicked position {} {}", x, y);
......
......@@ -12,7 +12,7 @@ import javax.inject.Named;
import fi.insomnia.bortal.beans.EventBeanLocal;
import fi.insomnia.bortal.beans.EventOrganiserBeanLocal;
import fi.insomnia.bortal.model.EventOrganiser;
import fi.insomnia.bortal.model.IUser;
import fi.insomnia.bortal.model.EventUser;
import fi.insomnia.bortal.model.LanEvent;
import fi.insomnia.bortal.model.LanEventDomain;
import fi.insomnia.bortal.web.annotations.LoggedIn;
......@@ -31,7 +31,7 @@ public class EventOrgView extends GenericCDIView {
@LoggedIn
@Inject
private IUser user;
private EventUser user;
private EventOrganiser eventorg;
private Integer orgId;
......@@ -68,6 +68,12 @@ public class EventOrgView extends GenericCDIView {
return null;
}
public String saveEventorg()
{
setEventorg(eventbean.mergeChanges(eventorg));
return null;
}
public String addDomain() {
getEvent().getDomains().add(new LanEventDomain(getEvent(), newdomain));
setEvent(eventbean.mergeChanges(getEvent()));
......@@ -92,7 +98,7 @@ public class EventOrgView extends GenericCDIView {
if (getUser().isSuperadmin()) {
setOrganisations(eventorgbean.getEventOrganisers());
} else {
setOrganisations(eventorgbean.getOrganisations(getUser()));
setOrganisations(eventorgbean.getOrganisations(getUser().getUser()));
}
}
}
......@@ -146,11 +152,11 @@ public class EventOrgView extends GenericCDIView {
return orgId;
}
public void setUser(IUser user) {
public void setUser(EventUser user) {
this.user = user;
}
public IUser getUser() {
public EventUser getUser() {
return user;
}
......
......@@ -14,6 +14,9 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.beans.EventBeanLocal;
import fi.insomnia.bortal.enums.apps.EventPermission;
import fi.insomnia.bortal.model.LanEventPrivateProperty;
import fi.insomnia.bortal.model.LanEventPrivatePropertyKey;
import fi.insomnia.bortal.model.LanEventProperty;
import fi.insomnia.bortal.model.LanEventPropertyKey;
import fi.insomnia.bortal.web.cdiview.GenericCDIView;
......@@ -25,6 +28,7 @@ public class EventPropertyView extends GenericCDIView {
private static final long serialVersionUID = 6278825570752203760L;
private LanEventPropertyKey createKey;
private LanEventPrivatePropertyKey createPrivateKey;
private LanEventProperty property;
@Inject
......@@ -34,6 +38,9 @@ public class EventPropertyView extends GenericCDIView {
private static final Logger logger = LoggerFactory.getLogger(EventPropertyView.class);
private ListDataModel<LanEventProperty> properties;
private ListDataModel<LanEventPrivateProperty> privateProperties;
private LanEventPrivateProperty privateProperty;
public List<LanEventPropertyKey> getAvailablePropertyKeys()
{
......@@ -50,6 +57,28 @@ public class EventPropertyView extends GenericCDIView {
return ret;
}
public List<LanEventPrivatePropertyKey> getAvailablePrivatePropertyKeys() {
List<LanEventPrivatePropertyKey> ret = null;
if (isPrivatePropertyPermission())
{
ret = new ArrayList<LanEventPrivatePropertyKey>(Arrays.asList(LanEventPrivatePropertyKey.values()));
if (createPrivateKey != null)
{
ret.remove(createPrivateKey);
}
if (eventorgview.getEvent() != null) {
for (LanEventPrivateProperty p : eventbean.getPrivateProperties()) {
ret.remove(p.getKey());
}
}
}
return ret;
}
public boolean isPrivatePropertyPermission() {
return super.hasPermission(EventPermission.MANAGE_PRIVATE_PROPERTIES);
}
public String editProperty()
{
property = properties.getRowData();
......@@ -57,11 +86,38 @@ public class EventPropertyView extends GenericCDIView {
return null;
}
public String editPrivateProperty()
{
privateProperty = privateProperties.getRowData();
logger.info("Editing property {}", privateProperty);
return null;
}
public String initPrivatePropertyKeyCreate()
{
logger.info("Creating new priavte key for event {}, key: {}", eventorgview.getEvent(), createPrivateKey);
privateProperty = new LanEventPrivateProperty();
// property.setEventorg(eventorgview.getEvent().getOrganiser());
privateProperty.setEvent(eventorgview.getEvent());
privateProperty.setKey(createPrivateKey);
return null;
}
public String savePrivateProperty()
{
logger.info("Saving property {}, eventorg {}, key {}", new Object[] { privateProperty.getEvent(), privateProperty.getEventorg(), privateProperty.getKey() });
privateProperty = eventbean.saveOrCreatePrivateProperty(privateProperty);
privateProperty.setEvent(privateProperty.getEvent());
privateProperties = null;
privateProperty = null;
return null;
}
public String initPropertyKeyCreate()
{
logger.info("Creating new key for event {}, key: {}", eventorgview.getEvent(), createKey);
property = new LanEventProperty();
property.setEventorg(eventorgview.getEvent().getOrganiser());
// property.setEventorg(eventorgview.getEvent().getOrganiser());
property.setEvent(eventorgview.getEvent());
property.setKey(createKey);
return null;
......@@ -109,8 +165,36 @@ public class EventPropertyView extends GenericCDIView {
return properties;
}
public ListDataModel<LanEventPrivateProperty> getPrivateProperties() {
if (privateProperties == null && eventorgview != null && eventorgview.getEvent() != null)
{
privateProperties = new ListDataModel<LanEventPrivateProperty>(eventbean.getPrivateProperties());
}
return privateProperties;
}
public void setProperties(ListDataModel<LanEventProperty> properties) {
this.properties = properties;
}
public LanEventPrivatePropertyKey getCreatePrivateKey() {
return createPrivateKey;
}
public void setCreatePrivateKey(LanEventPrivatePropertyKey createPrivateKey) {
this.createPrivateKey = createPrivateKey;
}
public LanEventPrivateProperty getPrivateProperty() {
return privateProperty;
}
public void setPrivateProperty(LanEventPrivateProperty privateProperty) {
this.privateProperty = privateProperty;
}
public void setPrivateProperties(ListDataModel<LanEventPrivateProperty> privateProperties) {
this.privateProperties = privateProperties;
}
}
......@@ -4,8 +4,13 @@ import javax.ejb.EJB;
import javax.enterprise.context.ConversationScoped;
import javax.inject.Named;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.beans.BillBeanLocal;
import fi.insomnia.bortal.beans.VerkkomaksutFiBeanLocal;
import fi.insomnia.bortal.model.Bill;
import fi.insomnia.bortal.util.VerkkomaksutReturnEntry;
import fi.insomnia.bortal.web.cdiview.GenericCDIView;
@Named
......@@ -18,22 +23,44 @@ public class BillEditView extends GenericCDIView {
private static final long serialVersionUID = -4665348757236295800L;
private int billid;
private Bill bill;
private VerkkomaksutReturnEntry vmreturn;
@EJB
private transient VerkkomaksutFiBeanLocal vmbean;
@EJB
private transient BillBeanLocal billbean;
private static final Logger logger = LoggerFactory.getLogger(BillEditView.class);
public void initView() {
if (this.requirePermissions(permbean.isLoggedIn())) {
if (billid <= 0 && bill != null) {
this.addFaceMessage("billedit.billnotfound");
navihandler.forward("/bill/list");
} else {
if (this.requirePermissions(permbean.isLoggedIn()) && bill == null) {
if (billid > 0) {
super.beginConversation();
bill = billbean.findById(billid);
}
}
if (bill == null)
{
this.addFaceMessage("billedit.billnotfound");
navihandler.forward("/bill/list");
}
}
public boolean isVerkkomaksuAvailable()
{
return vmbean.isSvmEnabled();
}
public VerkkomaksutReturnEntry getVerkkomaksuToken()
{
if (bill != null && vmreturn == null)
{
vmreturn = vmbean.getSvmToken(bill);
logger.info("Vmtoken url {}, token {}", vmreturn.getUrl(), vmreturn.getToken());
}
return vmreturn;
}
public String save()
......@@ -57,4 +84,12 @@ public class BillEditView extends GenericCDIView {
public int getBillid() {
return billid;
}
public VerkkomaksutReturnEntry getVmreturn() {
return vmreturn;
}
public void setVmreturn(VerkkomaksutReturnEntry vmreturn) {
this.vmreturn = vmreturn;
}
}
......@@ -13,7 +13,7 @@ import fi.insomnia.bortal.beans.BillBeanLocal;
import fi.insomnia.bortal.bortal.views.BillSummary;
import fi.insomnia.bortal.enums.apps.BillPermission;
import fi.insomnia.bortal.model.Bill;
import fi.insomnia.bortal.model.IUser;
import fi.insomnia.bortal.model.EventUser;
import fi.insomnia.bortal.web.annotations.SelectedUser;
import fi.insomnia.bortal.web.cdiview.GenericCDIView;
......@@ -28,7 +28,7 @@ public class BillListView extends GenericCDIView {
@Inject
@SelectedUser
private IUser user;
private EventUser user;
@EJB
private transient BillBeanLocal billbean;
......
......@@ -54,7 +54,7 @@ public class ProductShopView extends GenericCDIView {
private BillListView billListView;
@Inject
private BillReviewView billReviewView;
private BillEditView billEditView;
public void initBillView()
{
......@@ -125,7 +125,7 @@ public class ProductShopView extends GenericCDIView {
addFaceMessage("productshop.billCreated");
cash = BigDecimal.ZERO;
shoppingcart = null;
billReviewView.setBill(bill);
billEditView.setBill(bill);
return "showCreatedBill";
......
......@@ -17,7 +17,7 @@ import fi.insomnia.bortal.beans.CardTemplateBeanLocal;
import fi.insomnia.bortal.beans.EventBeanLocal;
import fi.insomnia.bortal.enums.apps.UserPermission;
import fi.insomnia.bortal.model.CardTemplate;
import fi.insomnia.bortal.model.IUser;
import fi.insomnia.bortal.model.EventUser;
import fi.insomnia.bortal.utilities.I18n;
import fi.insomnia.bortal.web.annotations.SelectedUser;
import fi.insomnia.bortal.web.cdiview.GenericCDIView;
......@@ -37,7 +37,7 @@ public class CardView extends GenericCDIView {
private EventBeanLocal eventBean;
@Inject
@SelectedUser
private IUser user;
private EventUser user;
private Integer cardid;
......@@ -114,11 +114,11 @@ public class CardView extends GenericCDIView {
return null;
}
public IUser getUser() {
public EventUser getUser() {
return user;
}
public void setUser(IUser user) {
public void setUser(EventUser user) {
this.user = user;
}
......
......@@ -10,7 +10,6 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.beans.UserBeanLocal;
import fi.insomnia.bortal.model.IUser;
import fi.insomnia.bortal.model.User;
import fi.insomnia.bortal.web.cdiview.GenericCDIView;
......@@ -116,7 +115,7 @@ public class PasswordResetView extends GenericCDIView {
this.confirm = confirm;
}
public IUser getUser() {
public User getUser() {
return user;
}
......
......@@ -11,6 +11,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.beans.RoleBeanLocal;
import fi.insomnia.bortal.enums.apps.UserPermission;
import fi.insomnia.bortal.model.Role;
import fi.insomnia.bortal.web.cdiview.GenericCDIView;
......@@ -34,6 +35,11 @@ public class RoleDataView extends GenericCDIView {
return roles;
}
public boolean isRoleReadPermission()
{
return super.hasPermission(UserPermission.READ_ROLES);
}
public Role getNoSelection()
{
return Role.EMPTY_ROLE;
......
......@@ -6,6 +6,7 @@ import javax.ejb.EJB;
import javax.enterprise.context.RequestScoped;
import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.component.UIInput;
import javax.faces.context.FacesContext;
import javax.faces.validator.ValidatorException;
import javax.inject.Named;
......@@ -30,13 +31,21 @@ public class UserValidator implements Serializable {
private transient UserBeanLocal userbean;
private static final Logger logger = LoggerFactory.getLogger(UserValidator.class);
public void validateEmail(FacesContext context, UIComponent ui, Object value) {
String email = (String) value;
if (email.indexOf('@') == -1) {
message(context, ui, "userview.invalidEmail");
}
}
public void login(FacesContext context, UIComponent ui, Object object) {
String login = object.toString().trim();
if (login.length() < 3) {
message("userview.loginstringFaulty");
message(context, ui, "userview.loginstringFaulty");
} else if (userbean.userExists(login)) {
message("userview.userExists");
message(context, ui, "userview.userExists");
}
}
......@@ -45,28 +54,38 @@ public class UserValidator implements Serializable {
logger.info("Executing pwd, firstpwd {}", firstpwd);
if (object == null) {
message("user.passwordlengthMessage");
message(context, ui, "user.passwordlengthMessage");
return;
}
if (firstpwd == null) {
firstpwd = object.toString();
if (PASSWORD_MIN_LENGTH.compareTo(firstpwd.length()) > 0) {
message("userview.passwordTooShort", PASSWORD_MIN_LENGTH);
message(context, ui, "userview.passwordTooShort", PASSWORD_MIN_LENGTH);
}
logger.info("Setting firstpwd to {} as {}", firstpwd, object.getClass());
return;
}
logger.info("Checking length");
if (!firstpwd.equals(object)) {
message("userview.passwordsDontMatch");
message(context, ui, "userview.passwordsDontMatch");
}
logger.info("Done pwd");
}
private void message(FacesContext context, UIComponent ui, String message, Object... obj) {
((UIInput) ui).setValid(false);
FacesMessage msg = new FacesMessage(I18n.get(message, obj));
context.addMessage(ui.getClientId(context), msg);
}
@Deprecated
private void message(String msg, Object... obj) {
message(new FacesMessage(I18n.get(msg, obj)));
}
@Deprecated
private void message(FacesMessage msg) {
throw new ValidatorException(msg);
......
......@@ -10,6 +10,7 @@ import javax.enterprise.inject.Produces;
import javax.inject.Inject;
import javax.inject.Named;
import org.primefaces.event.CaptureEvent;
import org.primefaces.model.CroppedImage;
import org.primefaces.model.UploadedFile;
import org.slf4j.Logger;
......@@ -80,6 +81,13 @@ public class UserView extends GenericCDIView {
return permbean.getCurrentUser();
}
public void oncapture(CaptureEvent captureEvent) {
byte[] data = captureEvent.getData();
UserImage img = userbean.uploadImage(user, "image/png", data, "userimage.png", "Uploaded image");
user = userbean.getEventUser(img.getUser());
}
@Produces
@SelectedUser
public EventUser getSelectedUser() {
......@@ -109,18 +117,27 @@ public class UserView extends GenericCDIView {
public String crop()
{
logger.info("Cropped image {}x{}", croppedImage.getLeft(), croppedImage.getTop());
// UserImage img = userbean.uploadImage(user, "image/jpg",
// croppedImage.getBytes(), "cropped" +
// croppedImage.getOriginalFilename(), "Cropped image");
// user = userbean.getEventUser(img.getUser());
// croppedImage = null;
logger.info("Cropped image {}x{}", croppedImage.getLeft(),
croppedImage.getTop());
logger.info("Cropped data bytesize {}, type {}", croppedImage.getBytes().length, croppedImage.getOriginalFilename());
UserImage newImage;
try {
newImage = userbean.saveCroppedImage(user.getCurrentImage(),
croppedImage.getLeft(), croppedImage.getTop(), croppedImage.getWidth(), croppedImage.getHeight());
UserImage newImage =
userbean.saveCroppedImage(user.getCurrentImage(),
croppedImage.getLeft(), croppedImage.getTop(),
croppedImage.getWidth(), croppedImage.getHeight());
user = userbean.getEventUser(newImage.getUser());
} catch (IOException e) {
logger.info("Error converting image", e);
super.addFaceMessage("user.errorConvertingImage");
}
return "redirToUserimage";
return null;
}
public String makeCard()
......
......@@ -3,6 +3,7 @@ package fi.insomnia.bortal.web.helper;
import java.util.MissingResourceException;
import java.util.ResourceBundle;
import javax.ejb.EJB;
import javax.enterprise.context.RequestScoped;
import javax.faces.context.FacesContext;
import javax.inject.Inject;
......@@ -12,6 +13,8 @@ import javax.servlet.http.HttpServletRequest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.beans.EventBeanLocal;
@Named
@RequestScoped
public class LayoutView {
......@@ -20,6 +23,8 @@ public class LayoutView {
private FacesContext context;
private ResourceBundle rb;
private String pagename;
@EJB
private EventBeanLocal eventbean;
private static final Logger logger = LoggerFactory.getLogger(LayoutView.class);
public void init() {
......@@ -64,7 +69,7 @@ public class LayoutView {
public String getHeader() {
return new StringBuilder().append(localize("global.eventname")).append(" - ")
return new StringBuilder().append(eventbean.getCurrentEvent().getName()).append(" - ")
.append(localize(new StringBuilder("submenu").append(getPagepath().replace('/', '.')).toString())).toString();
}
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!