Commit 29acd855 by Juho Juopperi

Merge branch 'master' of dev.intra.insomnia.fi:/data/bortal

2 parents 7391bcfb 4dfe2049
Showing with 1288 additions and 251 deletions
package fi.insomnia.bortal.beans; package fi.insomnia.bortal.beans;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import javax.ejb.EJB; import javax.ejb.EJB;
import javax.ejb.Stateless; import javax.ejb.Stateless;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.enums.Permission; import fi.insomnia.bortal.enums.Permission;
import fi.insomnia.bortal.enums.RolePermission; import fi.insomnia.bortal.enums.RolePermission;
import fi.insomnia.bortal.facade.AccountEventFacade; import fi.insomnia.bortal.facade.AccountEventFacade;
import fi.insomnia.bortal.model.AccountEvent; import fi.insomnia.bortal.model.AccountEvent;
import fi.insomnia.bortal.model.EventPk; import fi.insomnia.bortal.model.EventPk;
import fi.insomnia.bortal.model.LanEvent;
import fi.insomnia.bortal.model.Place;
import fi.insomnia.bortal.model.Product;
import fi.insomnia.bortal.model.Role; import fi.insomnia.bortal.model.Role;
import fi.insomnia.bortal.model.User; import fi.insomnia.bortal.model.User;
...@@ -28,6 +39,12 @@ public class AccountEventBean implements AccountEventBeanLocal { ...@@ -28,6 +39,12 @@ public class AccountEventBean implements AccountEventBeanLocal {
private SecurityBeanLocal sessionbean; private SecurityBeanLocal sessionbean;
@EJB @EJB
private EventBeanLocal eventBean; private EventBeanLocal eventBean;
@EJB
private ProductBeanLocal prodbean;
@EJB
private PlaceBeanLocal placebean;
private static final Logger logger = LoggerFactory.getLogger(AccountEventBean.class);
public AccountEventBean() { public AccountEventBean() {
super(); super();
...@@ -64,4 +81,46 @@ public class AccountEventBean implements AccountEventBeanLocal { ...@@ -64,4 +81,46 @@ public class AccountEventBean implements AccountEventBeanLocal {
public List<Role> getRolesFromAccountEvents(User u) { public List<Role> getRolesFromAccountEvents(User u) {
return accountfacade.findProvidedRoles(eventBean.getCurrentEvent(), u); return accountfacade.findProvidedRoles(eventBean.getCurrentEvent(), u);
} }
@Override
public List<AccountEvent> shopCash(User shoppingUser, Map<Product, BigDecimal> shopMap, boolean buyInstant) {
logger.debug("Shoping cash. buyinstant {}", buyInstant);
userbean.fatalPermission(Permission.SHOP, RolePermission.EXECUTE, "User tried to create accountEvents via shop without SHOP:EXECUTE");
ArrayList<AccountEvent> ret = new ArrayList<AccountEvent>();
LanEvent ev = eventBean.getCurrentEvent();
User seller = userbean.getCurrentUser();
BigDecimal tot = BigDecimal.ZERO;
for (Entry<Product, BigDecimal> prodentry : shopMap.entrySet()) {
AccountEvent ac = new AccountEvent(ev, shoppingUser, prodentry.getKey(), prodentry.getKey().getPrice(), prodentry.getValue(), Calendar.getInstance());
if (buyInstant && prodentry.getKey().getPrice().compareTo(BigDecimal.ZERO) > 0) {
tot = tot.add(prodentry.getValue().multiply(prodentry.getKey().getPrice()));
}
if (prodentry.getKey().isPrepaidInstant() && prodentry.getKey().getPlaces() != null && prodentry.getKey().getPlaces().size() > 0) {
for (Place p : prodentry.getKey().getPlaces()) {
if (!p.isTaken()) {
placebean.lockPlaces(shoppingUser, p);
break;
}
}
}
ac.setSeller(seller);
shoppingUser.getAccountEvents().add(ac);
}
logger.debug("ShopCash price {}", tot);
if (buyInstant && tot.compareTo(BigDecimal.ZERO) > 0) {
logger.debug("Creating buy instant product!");
Product creditProd = prodbean.findCreditProduct();
AccountEvent ac = new AccountEvent(ev, shoppingUser, creditProd, creditProd.getPrice(), tot, Calendar.getInstance());
shoppingUser.getAccountEvents().add(ac);
}
userbean.mergeChanges(shoppingUser);
return ret;
}
} }
...@@ -23,7 +23,6 @@ import org.krysalis.barcode4j.output.bitmap.BitmapCanvasProvider; ...@@ -23,7 +23,6 @@ import org.krysalis.barcode4j.output.bitmap.BitmapCanvasProvider;
import com.pdfjet.A4; import com.pdfjet.A4;
import com.pdfjet.Image; import com.pdfjet.Image;
import com.pdfjet.ImageType; import com.pdfjet.ImageType;
import com.pdfjet.IoStream;
import com.pdfjet.PDF; import com.pdfjet.PDF;
import com.pdfjet.Page; import com.pdfjet.Page;
......
package fi.insomnia.bortal.beans; package fi.insomnia.bortal.beans;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Set;
import javax.ejb.EJB; import javax.ejb.EJB;
import javax.ejb.Stateless; import javax.ejb.Stateless;
...@@ -17,7 +13,6 @@ import fi.insomnia.bortal.enums.RolePermission; ...@@ -17,7 +13,6 @@ import fi.insomnia.bortal.enums.RolePermission;
import fi.insomnia.bortal.facade.CardTemplateFacade; import fi.insomnia.bortal.facade.CardTemplateFacade;
import fi.insomnia.bortal.facade.PrintedCardFacade; import fi.insomnia.bortal.facade.PrintedCardFacade;
import fi.insomnia.bortal.model.CardTemplate; import fi.insomnia.bortal.model.CardTemplate;
import fi.insomnia.bortal.model.GroupMembership;
import fi.insomnia.bortal.model.LanEvent; import fi.insomnia.bortal.model.LanEvent;
import fi.insomnia.bortal.model.PrintedCard; import fi.insomnia.bortal.model.PrintedCard;
import fi.insomnia.bortal.model.Role; import fi.insomnia.bortal.model.Role;
...@@ -77,7 +72,10 @@ public class CardTemplateBean implements CardTemplateBeanLocal { ...@@ -77,7 +72,10 @@ public class CardTemplateBean implements CardTemplateBeanLocal {
} }
} }
public void checkPrintedCard(User user) { /**
* Checks users printed card roles and return the biggestCard
*/
public PrintedCard checkPrintedCard(User user) {
LanEvent currEvent = eventBean.getCurrentEvent(); LanEvent currEvent = eventBean.getCurrentEvent();
List<PrintedCard> myCards = printedcardfacade.findForUser(currEvent, user); List<PrintedCard> myCards = printedcardfacade.findForUser(currEvent, user);
...@@ -117,7 +115,7 @@ public class CardTemplateBean implements CardTemplateBeanLocal { ...@@ -117,7 +115,7 @@ public class CardTemplateBean implements CardTemplateBeanLocal {
// user.getPrintedCards().add(pc); // user.getPrintedCards().add(pc);
printedcardfacade.create(pc); printedcardfacade.create(pc);
biggestCard = pc;
logger.debug("User {} has too little power old role {} New role {}", new Object[] { user.getLogin(), existingPower, newPower }); logger.debug("User {} has too little power old role {} New role {}", new Object[] { user.getLogin(), existingPower, newPower });
} else if (existingPower > newPower) { } else if (existingPower > newPower) {
MailMessage msg = new MailMessage(); MailMessage msg = new MailMessage();
...@@ -135,6 +133,7 @@ public class CardTemplateBean implements CardTemplateBeanLocal { ...@@ -135,6 +133,7 @@ public class CardTemplateBean implements CardTemplateBeanLocal {
} else { } else {
logger.debug("User {} has power {} and roles has power {}", new Object[] { user.getLogin(), existingPower, newPower }); logger.debug("User {} has power {} and roles has power {}", new Object[] { user.getLogin(), existingPower, newPower });
} }
return biggestCard;
} }
...@@ -153,4 +152,16 @@ public class CardTemplateBean implements CardTemplateBeanLocal { ...@@ -153,4 +152,16 @@ public class CardTemplateBean implements CardTemplateBeanLocal {
} }
@Override
public PrintedCard setRfidUid(String tag, User user) {
PrintedCard ct = checkPrintedCard(user);
return setRfidUid(tag, ct);
}
@Override
public PrintedCard setRfidUid(String tag, PrintedCard card) {
card.setRfidUid(tag);
return printedcardfacade.merge(card);
}
} }
...@@ -263,4 +263,40 @@ public class PlaceBean implements PlaceBeanLocal { ...@@ -263,4 +263,40 @@ public class PlaceBean implements PlaceBeanLocal {
} }
} }
@Override
public Place lockPlaces(User user, Place place) {
if (place.isTaken()) {
logger.warn("Place {} is already taken", place);
throw new PermissionDeniedException(secubean, userbean.getCurrentUser(), "NO RIGHT");
}
userbean.fatalPermission(Permission.SHOP, RolePermission.EXECUTE, "User tried to lock place without SHOP:EXECUTE");
LanEvent ev = eventBean.getCurrentEvent();
PlaceGroup pg = new PlaceGroup(ev, Calendar.getInstance(), Calendar.getInstance(), true);
pg.setCreator(user);
user.getPlaceGroups().add(pg);
place.reserve(user);
place.buy(pg);
pg.getMembers().add(new GroupMembership(ev, pg, place, gmemfacade.createInviteToken(ev)));
boolean foundGm = false;
for (GroupMembership gm : user.getGroupMemberships()) {
if (gm.getId().getEventId().equals(ev.getId())) {
foundGm = true;
break;
}
}
if (!foundGm) {
GroupMembership gm = pg.getMembers().get(0);
gm.setUser(user);
user.getGroupMemberships().add(gm);
// gmemfacade.merge(gm);
}
pgfacade.create(pg);
// userbean.mergeChanges(user);
return placeFacade.merge(place);
}
} }
...@@ -81,15 +81,14 @@ public class PlaceGroupBean implements PlaceGroupBeanLocal { ...@@ -81,15 +81,14 @@ public class PlaceGroupBean implements PlaceGroupBeanLocal {
List<GroupMembership> ret = gmemfacade.findMemberOrCreator(eventbean.getCurrentEvent(), user); List<GroupMembership> ret = gmemfacade.findMemberOrCreator(eventbean.getCurrentEvent(), user);
return ret; return ret;
} }
@Override @Override
public List<GroupMembership> getMemberships(User user) public List<GroupMembership> getMemberships(User user) {
{
userbean.fatalNotLoggedIn(); userbean.fatalNotLoggedIn();
List<GroupMembership> ret = gmemfacade.findMemberships(eventbean.getCurrentEvent(), user); List<GroupMembership> ret = gmemfacade.findMemberships(eventbean.getCurrentEvent(), user);
return ret; return ret;
} }
@Override @Override
public boolean associateToToken(User user, String token) { public boolean associateToToken(User user, String token) {
token = token.trim(); token = token.trim();
...@@ -99,6 +98,7 @@ public class PlaceGroupBean implements PlaceGroupBeanLocal { ...@@ -99,6 +98,7 @@ public class PlaceGroupBean implements PlaceGroupBeanLocal {
if (mem != null && mem.getUser() == null) { if (mem != null && mem.getUser() == null) {
mem.setUser(user); mem.setUser(user);
user.getGroupMemberships().add(mem);
gmemfacade.merge(mem); gmemfacade.merge(mem);
ret = true; ret = true;
} }
......
...@@ -70,7 +70,6 @@ public class ProductBean implements ProductBeanLocal { ...@@ -70,7 +70,6 @@ public class ProductBean implements ProductBeanLocal {
@Override @Override
public List<Product> getProducts() { public List<Product> getProducts() {
userbean.fatalPermission(Permission.PRODUCT, RolePermission.READ, "User tried to fetch all products"); userbean.fatalPermission(Permission.PRODUCT, RolePermission.READ, "User tried to fetch all products");
return productFacade.findAll(eventBean.getCurrentEvent()); return productFacade.findAll(eventBean.getCurrentEvent());
} }
...@@ -151,5 +150,10 @@ public class ProductBean implements ProductBeanLocal { ...@@ -151,5 +150,10 @@ public class ProductBean implements ProductBeanLocal {
return productFacade.find(eventBean.getCurrentEvent().getId(), id); return productFacade.find(eventBean.getCurrentEvent().getId(), id);
} }
@Override
public List<Product> findForStaffshop() {
userbean.fatalPermission(Permission.SHOP, RolePermission.EXECUTE, "user tried to get adminshoppable products from productbean without SHOP:EXECUTE");
return productFacade.findAll(eventBean.getCurrentEvent());
}
} }
...@@ -5,9 +5,12 @@ import java.util.Calendar; ...@@ -5,9 +5,12 @@ import java.util.Calendar;
import javax.ejb.EJB; import javax.ejb.EJB;
import javax.ejb.Stateless; import javax.ejb.Stateless;
import fi.insomnia.bortal.exceptions.BortalCatchableException;
import fi.insomnia.bortal.facade.GroupMembershipFacade;
import fi.insomnia.bortal.facade.PrintedCardFacade; import fi.insomnia.bortal.facade.PrintedCardFacade;
import fi.insomnia.bortal.facade.ReaderEventFacade; import fi.insomnia.bortal.facade.ReaderEventFacade;
import fi.insomnia.bortal.facade.ReaderFacade; import fi.insomnia.bortal.facade.ReaderFacade;
import fi.insomnia.bortal.model.GroupMembership;
import fi.insomnia.bortal.model.LanEvent; import fi.insomnia.bortal.model.LanEvent;
import fi.insomnia.bortal.model.PrintedCard; import fi.insomnia.bortal.model.PrintedCard;
import fi.insomnia.bortal.model.Reader; import fi.insomnia.bortal.model.Reader;
...@@ -27,18 +30,54 @@ public class ReaderBean implements ReaderBeanLocal { ...@@ -27,18 +30,54 @@ public class ReaderBean implements ReaderBeanLocal {
private PrintedCardFacade cardfacade; private PrintedCardFacade cardfacade;
@EJB @EJB
private ReaderEventFacade readerEventFacade; private ReaderEventFacade readerEventFacade;
@EJB
private GroupMembershipFacade gmfacade;
@EJB
private CardTemplateBeanLocal cardtemplatebean;
@Override @Override
public ReaderEvent checkTag(String ident, String tag, String hash) { public ReaderEvent checkTag(String ident, String tag, String hash) {
LanEvent ev = eventbean.getCurrentEvent(); LanEvent ev = eventbean.getCurrentEvent();
Reader reader = readerfacade.findByIdent(ev, ident);
PrintedCard card = cardfacade.findByRfid(ev, tag); PrintedCard card = cardfacade.findByRfid(ev, tag);
ReaderEvent ret = null; ReaderEvent ret = null;
if (reader != null && card != null) { if (card != null) {
ret = new ReaderEvent(ev, Calendar.getInstance(), card, reader); ret = createReaderEvent(ident, card);
readerEventFacade.create(ret);
} }
return ret; return ret;
} }
@Override
public ReaderEvent assocTagToPlacecode(String tag, String readerIdent, String placecode) throws BortalCatchableException {
GroupMembership gm = gmfacade.findByToken(placecode);
if (gm == null) {
throw new BortalCatchableException("Token" + placecode + " not found!", "readerbean.tokenNotFound");
}
if (gm.getUser() == null) {
throw new BortalCatchableException("Token " + placecode + "found but not assoc to user!", "readerbean.userNotAssociateToMembership");
}
PrintedCard card = cardtemplatebean.setRfidUid(tag, gm.getUser());
return createReaderEvent(readerIdent, card);
}
private ReaderEvent createReaderEvent(String readerIdent, PrintedCard card) {
LanEvent ev = eventbean.getCurrentEvent();
Reader reader = readerfacade.findOrCreateByIdent(ev, readerIdent);
ReaderEvent ret = new ReaderEvent(ev, Calendar.getInstance(), card, reader);
readerEventFacade.create(ret);
return ret;
}
@Override
public ReaderEvent assocTagToCard(String tag, String readerIdent, PrintedCard card) {
card = cardtemplatebean.setRfidUid(tag, card);
return createReaderEvent(readerIdent, card);
}
} }
...@@ -269,8 +269,12 @@ public class UserBean implements UserBeanLocal { ...@@ -269,8 +269,12 @@ public class UserBean implements UserBeanLocal {
@Override @Override
public UserImage uploadImage(Integer userid, String contentType, byte[] image, String filename, String description) { public UserImage uploadImage(Integer userid, String contentType, byte[] image, String filename, String description) {
fatalNotLoggedIn(); fatalNotLoggedIn();
User user = getCurrentUser(); User user = getCurrentUser();
logger.debug("uploading image to userid {}", userid);
if (userid == null || userid.equals(0)) {
userid = user.getId();
}
if (!getCurrentUser().getId().equals(userid)) { if (!getCurrentUser().getId().equals(userid)) {
fatalPermission(Permission.USER_MANAGEMENT, RolePermission.EXECUTE, "usert tried to save picture to userid " + userid + " without sufficient permissions!"); fatalPermission(Permission.USER_MANAGEMENT, RolePermission.EXECUTE, "usert tried to save picture to userid " + userid + " without sufficient permissions!");
user = userFacade.find(userid); user = userFacade.find(userid);
...@@ -284,7 +288,10 @@ public class UserBean implements UserBeanLocal { ...@@ -284,7 +288,10 @@ public class UserBean implements UserBeanLocal {
// setting uploaded image as the default. // setting uploaded image as the default.
user.setCurrentImage(userimage); user.setCurrentImage(userimage);
user.getUserImageList().add(userimage);
userFacade.merge(user); userFacade.merge(user);
return userimage; return userimage;
} }
...@@ -304,7 +311,7 @@ public class UserBean implements UserBeanLocal { ...@@ -304,7 +311,7 @@ public class UserBean implements UserBeanLocal {
} }
public List<User> searchName(String name) { public List<User> searchName(String name) {
return userFacade.search(name, new String[] { "nick", "login", "firstnames", "lastname" }); return userFacade.searchForName(name);
} }
@Override @Override
...@@ -360,4 +367,10 @@ public class UserBean implements UserBeanLocal { ...@@ -360,4 +367,10 @@ public class UserBean implements UserBeanLocal {
return true; return true;
} }
@Override
public User findById(Integer id) {
return userFacade.find(id);
}
} }
package fi.insomnia.bortal.beans; package fi.insomnia.bortal.beans;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Date; import java.util.Date;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.ejb.EJB;
import javax.ejb.Local; import javax.ejb.Local;
import javax.ejb.Stateless; import javax.ejb.Stateless;
import javax.imageio.ImageIO;
import javax.jms.JMSException; import javax.jms.JMSException;
import javax.jms.ObjectMessage; import javax.jms.ObjectMessage;
import javax.jms.Queue; import javax.jms.Queue;
...@@ -19,6 +30,8 @@ import javax.persistence.PersistenceUnit; ...@@ -19,6 +30,8 @@ import javax.persistence.PersistenceUnit;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.model.User;
import fi.insomnia.bortal.model.UserImage;
import fi.insomnia.bortal.util.MailMessage; import fi.insomnia.bortal.util.MailMessage;
/** /**
...@@ -30,13 +43,17 @@ public class UtilBean implements UtilBeanLocal { ...@@ -30,13 +43,17 @@ public class UtilBean implements UtilBeanLocal {
private static final Logger logger = LoggerFactory.getLogger(UtilBean.class); private static final Logger logger = LoggerFactory.getLogger(UtilBean.class);
private static final int SCALEWIDTH = 640;
@PersistenceContext @PersistenceContext
private EntityManager em; private EntityManager em;
@PersistenceUnit @PersistenceUnit
private EntityManagerFactory emf; private EntityManagerFactory emf;
@EJB
private UserBean userbean;
/** /**
* Default constructor. * Default constructor.
*/ */
...@@ -62,8 +79,71 @@ public class UtilBean implements UtilBeanLocal { ...@@ -62,8 +79,71 @@ public class UtilBean implements UtilBeanLocal {
} catch (JMSException e) { } catch (JMSException e) {
logger.debug("Got exception sending mail", e); logger.debug("Got exception sending mail", e);
} }
logger.debug("Message time {}",new Date().getTime() - d.getTime()); logger.debug("Message time {}", new Date().getTime() - d.getTime());
return true; return true;
} }
public void checkAllUsersImages() {
for (User usr : userbean.getUsers()) {
convertImage(usr);
}
}
public boolean convertImage(User user) {
UserImage oldpic = user.getCurrentImage();
if (oldpic == null || oldpic.getMimeType() == null || oldpic.getMimeType().isEmpty()) {
return false;
}
for (String imgtype : ImageIO.getReaderFormatNames()) {
logger.debug("found imgtype {}", imgtype);
}
logger.debug("converting users image id {}, type {} to jpeg", oldpic.getId(), oldpic.getMimeType());
ByteArrayInputStream naamastream = new ByteArrayInputStream(oldpic.getImageData());
try {
BufferedImage face = ImageIO.read(naamastream);
boolean isJpeg = oldpic.getMimeType().contains("jpeg");
if (face == null) {
return false;
}
if (face.getWidth() > 700) {
logger.debug("Scaling from {} {} ", face.getWidth(), face.getHeight());
BigDecimal scale = new BigDecimal(SCALEWIDTH).divide(new BigDecimal(face.getWidth()), 5, RoundingMode.HALF_UP);
int height = scale.multiply(new BigDecimal(face.getHeight())).intValue();
BufferedImage scaledImage = new BufferedImage(
SCALEWIDTH, height, face.getType());
Graphics2D graphics2D = scaledImage.createGraphics();
graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
RenderingHints.VALUE_INTERPOLATION_BILINEAR);
graphics2D.drawImage(face, 0, 0, SCALEWIDTH, height, null);
face = scaledImage;
} else if (isJpeg) {
return false;
}
ByteArrayOutputStream naamaout = new ByteArrayOutputStream();
ImageIO.write(face, "jpeg", naamaout);
UserImage img = new UserImage(user);
img.setDescription("changed imagetype from image id: " + oldpic.getId());
img.setImageData(naamaout.toByteArray());
img.setMimeType("image/jpeg");
img.setName("regenerated.jpg");
user.setCurrentImage(img);
user.getUserImageList().add(img);
userbean.mergeChanges(user);
} catch (IOException e) {
logger.warn("error converting image ", e);
}
return true;
}
} }
package fi.insomnia.bortal.facade; package fi.insomnia.bortal.facade;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import javax.persistence.EntityManager; import javax.persistence.EntityManager;
...@@ -7,7 +8,10 @@ import javax.persistence.NoResultException; ...@@ -7,7 +8,10 @@ import javax.persistence.NoResultException;
import javax.persistence.TypedQuery; import javax.persistence.TypedQuery;
import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Path;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root; import javax.persistence.criteria.Root;
import javax.persistence.metamodel.SingularAttribute;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
...@@ -57,7 +61,7 @@ public abstract class GenericFacade<PK, T extends ModelInterface> { ...@@ -57,7 +61,7 @@ public abstract class GenericFacade<PK, T extends ModelInterface> {
Root<T> root = cq.from(getEntityClass()); Root<T> root = cq.from(getEntityClass());
cq.orderBy(cb.asc(root.get("id"))); cq.orderBy(cb.asc(root.get("id")));
cq.select(cq.from(getEntityClass())); cq.select(root);
return getEm().createQuery(cq).getResultList(); return getEm().createQuery(cq).getResultList();
} }
...@@ -93,6 +97,28 @@ public abstract class GenericFacade<PK, T extends ModelInterface> { ...@@ -93,6 +97,28 @@ public abstract class GenericFacade<PK, T extends ModelInterface> {
getEm().getEntityManagerFactory().getCache().evict(getEntityClass(), entity.getId()); getEm().getEntityManagerFactory().getCache().evict(getEntityClass(), entity.getId());
} }
} }
protected List<T> search(String query, String[] fields, String orderfield) {
CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<T> cq = cb.createQuery(getEntityClass());
Root<T> root = cq.from(getEntityClass());
List<Predicate> preds = new ArrayList<Predicate>();
for (String field : fields) {
Path<String> rootfield = root.get(field);
preds.add(cb.like(rootfield, query));
}
cq.where(cb.or(preds.toArray(new Predicate[preds.size()])));
if (orderfield != null) {
cq.orderBy(cb.asc(root.get(orderfield)));
}
cq.select(root);
TypedQuery<T> q = getEm().createQuery(cq);
logger.debug("Creating search query from fields {} query: {}", fields, cq);
List<T> ret = q.getResultList();
logger.debug("resultlist size {}", ret.size());
return ret;
}
// //
// @SuppressWarnings("unchecked") // @SuppressWarnings("unchecked")
// public List<T> search(String query, String[] fields) { // public List<T> search(String query, String[] fields) {
......
...@@ -31,4 +31,21 @@ public class ReaderFacade extends EventChildGenericFacade<Reader> { ...@@ -31,4 +31,21 @@ public class ReaderFacade extends EventChildGenericFacade<Reader> {
return getSingleNullableResult(q); return getSingleNullableResult(q);
} }
public Reader findOrCreateByIdent(LanEvent ev, String ident) {
Reader ret = findByIdent(ev, ident);
if (ret == null) {
ret = createIdent(this, ev, ident);
}
return ret;
}
private static synchronized Reader createIdent(ReaderFacade rf, LanEvent ev, String ident) {
Reader ret = rf.findByIdent(ev, ident);
if (ret == null) {
ret = new Reader(ev, ident);
ret.setDescription("Automagically created");
rf.create(ret);
}
return ret;
}
} }
...@@ -40,9 +40,10 @@ public class UserFacade extends GenericFacade<Integer, User> { ...@@ -40,9 +40,10 @@ public class UserFacade extends GenericFacade<Integer, User> {
return getSingleNullableResult(q); return getSingleNullableResult(q);
} }
public List<User> search(String name, String[] fields) { private static final String[] NAMEFIELDS = { "nick", "login", "firstnames", "lastname" };
throw new RuntimeException("NOT IMPLEMENTED!!!");
//TODO: Implement search public List<User> searchForName(String name) {
return this.search(name, NAMEFIELDS, "login");
} }
} }
package fi.insomnia.bortal.beans; package fi.insomnia.bortal.beans;
import java.math.BigDecimal;
import java.util.List; import java.util.List;
import java.util.Map;
import javax.ejb.Local; import javax.ejb.Local;
import fi.insomnia.bortal.model.AccountEvent; import fi.insomnia.bortal.model.AccountEvent;
import fi.insomnia.bortal.model.EventPk; import fi.insomnia.bortal.model.EventPk;
import fi.insomnia.bortal.model.Product;
import fi.insomnia.bortal.model.Role; import fi.insomnia.bortal.model.Role;
import fi.insomnia.bortal.model.User; import fi.insomnia.bortal.model.User;
...@@ -19,4 +23,6 @@ public interface AccountEventBeanLocal { ...@@ -19,4 +23,6 @@ public interface AccountEventBeanLocal {
List<Role> getRolesFromAccountEvents(User u); List<Role> getRolesFromAccountEvents(User u);
List<AccountEvent> shopCash(User shoppingUser, Map<Product, BigDecimal> shopMap, boolean buyInstant);
} }
...@@ -5,6 +5,7 @@ import java.util.List; ...@@ -5,6 +5,7 @@ import java.util.List;
import javax.ejb.Local; import javax.ejb.Local;
import fi.insomnia.bortal.model.CardTemplate; import fi.insomnia.bortal.model.CardTemplate;
import fi.insomnia.bortal.model.PrintedCard;
import fi.insomnia.bortal.model.User; import fi.insomnia.bortal.model.User;
@Local @Local
...@@ -16,8 +17,12 @@ public interface CardTemplateBeanLocal { ...@@ -16,8 +17,12 @@ public interface CardTemplateBeanLocal {
CardTemplate findById(Integer id); CardTemplate findById(Integer id);
void checkPrintedCard(User user); PrintedCard checkPrintedCard(User user);
void checkAllUsersCardRights(); void checkAllUsersCardRights();
PrintedCard setRfidUid(String tag, User user);
PrintedCard setRfidUid(String tag, PrintedCard card);
} }
...@@ -46,4 +46,6 @@ public interface PlaceBeanLocal { ...@@ -46,4 +46,6 @@ public interface PlaceBeanLocal {
void checkMemberships(); void checkMemberships();
Place lockPlaces(User rowData, Place place);
} }
...@@ -32,4 +32,6 @@ public interface ProductBeanLocal { ...@@ -32,4 +32,6 @@ public interface ProductBeanLocal {
Product findById(int parseInt); Product findById(int parseInt);
List<Product> findForStaffshop();
} }
...@@ -2,6 +2,8 @@ package fi.insomnia.bortal.beans; ...@@ -2,6 +2,8 @@ package fi.insomnia.bortal.beans;
import javax.ejb.Local; import javax.ejb.Local;
import fi.insomnia.bortal.exceptions.BortalCatchableException;
import fi.insomnia.bortal.model.PrintedCard;
import fi.insomnia.bortal.model.ReaderEvent; import fi.insomnia.bortal.model.ReaderEvent;
@Local @Local
...@@ -9,4 +11,12 @@ public interface ReaderBeanLocal { ...@@ -9,4 +11,12 @@ public interface ReaderBeanLocal {
ReaderEvent checkTag(String reader, String tag, String hash); ReaderEvent checkTag(String reader, String tag, String hash);
ReaderEvent assocTagToPlacecode(String tag, String readerIdent, String placecode) throws BortalCatchableException;
ReaderEvent assocTagToCard(String tag, String readerIdent, PrintedCard card);
} }
...@@ -53,5 +53,8 @@ public interface UserBeanLocal { ...@@ -53,5 +53,8 @@ public interface UserBeanLocal {
List<Role> findUsersRoles(User u); List<Role> findUsersRoles(User u);
User findById(Integer integer);
} }
...@@ -9,4 +9,9 @@ public interface UtilBeanLocal { ...@@ -9,4 +9,9 @@ public interface UtilBeanLocal {
boolean sendMail(MailMessage message); boolean sendMail(MailMessage message);
boolean convertImage(User user);
void checkAllUsersImages();
} }
...@@ -2,10 +2,25 @@ package fi.insomnia.bortal.exceptions; ...@@ -2,10 +2,25 @@ package fi.insomnia.bortal.exceptions;
public class BortalCatchableException extends Exception { public class BortalCatchableException extends Exception {
private String i18nMessage;
public BortalCatchableException(String string) { public BortalCatchableException(String string) {
super(string); super(string);
} }
public BortalCatchableException(String string, String i18nMsg) {
super(string);
setI18nMessage(i18nMsg);
}
public void setI18nMessage(String i18nMessage) {
this.i18nMessage = i18nMessage;
}
public String getI18nMessage() {
return i18nMessage;
}
/** /**
* *
*/ */
......
...@@ -44,6 +44,8 @@ public class AccountEvent extends GenericEventChild { ...@@ -44,6 +44,8 @@ public class AccountEvent extends GenericEventChild {
*/ */
private static final long serialVersionUID = 2588419823225148100L; private static final long serialVersionUID = 2588419823225148100L;
@Column(name="cash", nullable=false)
private boolean cash = false;
/** /**
* What 1 unit of this product costs. * What 1 unit of this product costs.
*/ */
...@@ -224,4 +226,12 @@ public class AccountEvent extends GenericEventChild { ...@@ -224,4 +226,12 @@ public class AccountEvent extends GenericEventChild {
return quantity; return quantity;
} }
public void setCash(boolean cash) {
this.cash = cash;
}
public boolean isCash() {
return cash;
}
} }
...@@ -4,14 +4,9 @@ ...@@ -4,14 +4,9 @@
*/ */
package fi.insomnia.bortal.model; package fi.insomnia.bortal.model;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import javax.imageio.ImageIO;
import javax.persistence.CascadeType; import javax.persistence.CascadeType;
import javax.persistence.Column; import javax.persistence.Column;
import javax.persistence.EmbeddedId; import javax.persistence.EmbeddedId;
...@@ -29,8 +24,6 @@ import javax.persistence.Version; ...@@ -29,8 +24,6 @@ import javax.persistence.Version;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.utilities.apachecodec.binary.Base64;
/** /**
* *
*/ */
...@@ -66,11 +59,11 @@ public class EventMap implements EventChildInterface { ...@@ -66,11 +59,11 @@ public class EventMap implements EventChildInterface {
@Column(nullable = false) @Column(nullable = false)
private boolean active = true; private boolean active = true;
@Column(name="notes") @Column(name = "notes")
@Lob @Lob
private String notes; private String notes;
public EventMap() { public EventMap() {
} }
...@@ -170,7 +163,6 @@ public class EventMap implements EventChildInterface { ...@@ -170,7 +163,6 @@ public class EventMap implements EventChildInterface {
this.readers = readers; this.readers = readers;
} }
public LanEvent getEvent() { public LanEvent getEvent() {
return event; return event;
} }
...@@ -199,6 +191,4 @@ public class EventMap implements EventChildInterface { ...@@ -199,6 +191,4 @@ public class EventMap implements EventChildInterface {
return notes; return notes;
} }
} }
...@@ -29,6 +29,20 @@ import javax.persistence.UniqueConstraint; ...@@ -29,6 +29,20 @@ import javax.persistence.UniqueConstraint;
@NamedQuery(name = "Reader.findByDescription", query = "SELECT r FROM Reader r WHERE r.description = :description") }) @NamedQuery(name = "Reader.findByDescription", query = "SELECT r FROM Reader r WHERE r.description = :description") })
public class Reader extends GenericEventChild { public class Reader extends GenericEventChild {
public Reader() {
super();
}
public Reader(LanEvent ev, String iden) {
super(ev);
}
/**
*
*/
private static final long serialVersionUID = 616803985117256035L;
@Column(name = "reader_ident") @Column(name = "reader_ident")
private String identification; private String identification;
......
...@@ -42,6 +42,7 @@ import org.slf4j.LoggerFactory; ...@@ -42,6 +42,7 @@ import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.enums.Gender; import fi.insomnia.bortal.enums.Gender;
import fi.insomnia.bortal.utilities.PasswordFunctions; import fi.insomnia.bortal.utilities.PasswordFunctions;
/** /**
* *
*/ */
...@@ -248,7 +249,7 @@ public class User implements ModelInterface { ...@@ -248,7 +249,7 @@ public class User implements ModelInterface {
} }
public String getWholeName() { public String getWholeName() {
return new StringBuilder(firstnames).append(" ").append(lastname).toString(); return new StringBuilder().append(firstnames).append(" ").append(lastname).toString();
} }
public String getLastname() { public String getLastname() {
......
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" <html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets">
xmlns:ui="http://java.sun.com/jsf/facelets">
<head> <head>
<title><ui:insert name="title">Default title</ui:insert></title> <title><ui:insert name="title">Default title</ui:insert></title>
</head> </head>
<body> <body>
<object > <object>
<param name="foo" width="640" height="480"
value="flash/eventmap.swf?mapId=1"> <param name="foo" width="640" height="480" value="flash/Uploader.swf"><embed width="640" height="480"
<embed width="640" height="480" src="flash/Uploader.swf"> </embed></param>
src="flash/eventmap.swf?mapId=1"> </embed></param> </object>
</object>
</body> </body>
</html> </html>
...@@ -28,7 +28,11 @@ ...@@ -28,7 +28,11 @@
<br /> <br />
<h:commandButton value="Check all cards" action="#{TestDataView.checkCards()}" /> <h:commandButton value="Check all cards" action="#{TestDataView.checkCards()}" />
<br /> <br />
<h:commandButton value="Check all users images" action="#{TestDataView.checkImages()}" />
<br />
<h:commandButton value="Resize all images" action="#{TestDataView.convertImages()}" />
<br />
</h:form> </h:form>
</h:body> </h:body>
</html> </html>
......
...@@ -57,6 +57,9 @@ ...@@ -57,6 +57,9 @@
<li><h:outputText styleClass="sidebartitle" value="#{i18n['sidebar.other']}" /> <li><h:outputText styleClass="sidebartitle" value="#{i18n['sidebar.other']}" />
<ul> <ul>
<li><h:link outcome="/eventorg/list" value="#{i18n['sidebar.eventorg.list']}" /></li> <li><h:link outcome="/eventorg/list" value="#{i18n['sidebar.eventorg.list']}" /></li>
<li><h:link outcome="/utils/flushCache" value="#{i18n['sidebar.utils.flushCache']}" /></li>
<li><h:link outcome="/generateTestData" value="#{i18n['sidebar.utils.testdata']}" /></li>
</ul> </ul>
</li> </li>
</ul> </ul>
......
<!DOCTYPE html <!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html <html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:tools="http://java.sun.com/jsf/composite/tools" xmlns:c="http://java.sun.com/jsp/jstl/core">
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:tools="http://java.sun.com/jsf/composite/tools"
xmlns:c="http://java.sun.com/jsp/jstl/core">
<h:body> <h:body>
<ui:composition template="/layout/insomnia1/sidebartemplate.xhtml"> <ui:composition template="/layout/insomnia1/sidebartemplate.xhtml">
<ui:param name="rendered" value="false" /> <ui:param name="rendered" value="false" />
<ui:define name="sidebarcontent"> <ui:define name="sidebarcontent">
</ui:define> </ui:define>
</ui:composition> </ui:composition>
......
<!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:tools="http://java.sun.com/jsf/composite/tools" xmlns:c="http://java.sun.com/jsp/jstl/core">
<h:body>
<ui:composition template="/layout/insomnia1/sidebartemplate.xhtml">
<ui:param name="rendered" value="true" />
<ui:define name="sidebarcontent">
<ul>
<li><h:link outcome="/shop/listReaders" value="#{i18n['sidebar.shop.readerlist']}" /></li>
<li><h:link outcome="/shop/showReaderEvents" value="#{i18n['sidebar.shop.readerEvents']}" /></li>
</ul>
</ui:define>
</ui:composition>
</h:body>
</html>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8" ?> <?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html <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="http://www.w3.org/1999/xhtml" xmlns:tools="http://java.sun.com/jsf/composite/tools" 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:tools="http://java.sun.com/jsf/composite/tools"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:c="http://java.sun.com/jsp/jstl/core"> xmlns:c="http://java.sun.com/jsp/jstl/core">
<f:view locale="#{sessionHandler.locale}"> <f:view locale="#{sessionHandler.locale}">
<ui:insert name="metadata"/> <ui:insert name="metadata" />
<h:head> <h:head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title><h:outputText value="#{i18n['global.eventname']}" /> - <h:outputText value="#{i18n[util.concat(thispage,'.header') ] }" /></title> <title><h:outputText value="#{i18n['global.eventname']}" /> - <h:outputText
<link rel="stylesheet" type="text/css" href="#{request.contextPath}/resources/style/insomnia1/style.css" /> value="#{i18n[util.concat(thispage,'.header') ] }" /></title>
</h:head> <link rel="stylesheet" type="text/css" href="#{request.contextPath}/resources/style/insomnia1/style.css" />
<h:body> </h:head>
<tools:canRead target="USER_MANAGEMENT"> <h:body>
<div class="link#{i18n[util.concat(thispage,'.pagegroup')] == 'admin'?'a':''}"> <h:link outcome="/product/list" value="#{i18n['topmenu.adminfront']}" /></div>
</tools:canRead> <div id="wrapper">
<div id="wrapper">
<div id="navigation"> <div id="navigation">
<img id="head" src="#{request.contextPath}/resources/style/insomnia1/img/header.gif" alt="headerimage" />
<div id="topheadercontainer"><img id="head"
<div style="float: left" > src="#{request.contextPath}/resources/style/insomnia1/img/header.gif" alt="headerimage" />
<div id="headerbox"><tools:isLoggedIn>#{sessionHandler.loginname}</tools:isLoggedIn><tools:loginLogout /></div>
<div style="float: left">
<div id="headerbox"><tools:isLoggedIn>#{sessionHandler.loginname}</tools:isLoggedIn><tools:loginLogout /></div>
</div>
</div>
<div id="mainmenu"> </div>
<div class="link#{i18n[util.concat(thispage,'.pagegroup')] == 'frontpage'?'a':''}"> <h:link outcome="/index" value="#{i18n['topmenu.frontpage']}" /></div> <div id="mainmenu">
<tools:isLoggedIn> <div class="link#{i18n[util.concat(thispage,'.pagegroup')] == 'frontpage'?'a':''}"><h:link outcome="/index"
<div class="link#{i18n[util.concat(thispage,'.pagegroup')] == 'user'?'a':''}"> <h:link outcome="/user/editself" value="#{i18n['topmenu.usersPreferences']}" /></div> value="#{i18n['topmenu.frontpage']}" /></div>
<div class="link#{i18n[util.concat(thispage,'.pagegroup')] == 'shop'?'a': ''}"> <h:link outcome="/product/createBill" value="#{i18n['topmenu.shoppings']}" /></div> <tools:isLoggedIn>
<div class="link#{i18n[util.concat(thispage,'.pagegroup')] == 'user'?'a':''}"><h:link outcome="/user/editself"
</tools:isLoggedIn> value="#{i18n['topmenu.usersPreferences']}" /></div>
<div class="link#{i18n[util.concat(thispage,'.pagegroup')] == 'shop'?'a': ''}"><h:link
<div class="link#{i18n[util.concat(thispage,'.pagegroup')] == 'placemap'?'a':''}"> <h:link outcome="/place/placemap" value="#{i18n['topmenu.placemap']}" /></div> outcome="/product/createBill" value="#{i18n['topmenu.shoppings']}" /></div>
</div> </tools:isLoggedIn>
<div class="link#{i18n[util.concat(thispage,'.pagegroup')] == 'placemap'?'a':''}"><h:link
outcome="/place/placemap" value="#{i18n['topmenu.placemap']}" /></div>
<tools:canRead target="USER_MANAGEMENT">
<div class="link#{i18n[util.concat(thispage,'.pagegroup')] == 'admin'?'a':''}"><h:link outcome="/product/list"
value="#{i18n['topmenu.adminfront']}" /></div>
<div class="link#{i18n[util.concat(thispage,'.pagegroup')] == 'rfidshop'?'a':''}"><h:link
outcome="/shop/showReaderEvents" value="#{i18n['topmenu.rfidshop']}" /></div>
</tools:canRead></div>
</div> </div>
<div id="content"> <div id="content">
<div id="cwrap"> <div id="cwrap"><ui:include src="/layout/insomnia1/sidebar-#{i18n[util.concat(thispage,'.pagegroup')]}.xhtml" />
<ui:include src="/layout/insomnia1/sidebar-#{i18n[util.concat(thispage,'.pagegroup')]}.xhtml" />
<h:messages globalOnly="true" /> <ui:insert name="content" /></div>
<h:messages globalOnly="true" />
<ui:insert name="content" />
</div>
</div> </div>
<div id="footer">#{i18n['global.copyright']}</div> <div id="footer">#{i18n['global.copyright']}</div>
</div> </div>
</h:body> </h:body>
</f:view> </f:view>
</html> </html>
\ No newline at end of file
<!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:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core">
<h:head>
<title></title>
</h:head>
<h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<ui:param name="thispage" value="page.viewexpired" />
<ui:define name="content">
<param name="foo" width="640" height="480"
value="#{request.contextPath}/flash/Uploader.swf"><embed width="640"
height="480" src="#{request.contextPath}/flash/Uploader.swf"> </embed></param>
</ui:define>
</ui:composition>
</h:body>
</html>
\ No newline at end of file
<!DOCTYPE html <!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
...@@ -55,8 +56,45 @@ ...@@ -55,8 +56,45 @@
<h:commandButton id="commitbtn" action="#{placeView.save()}" value="#{i18n['place.commit']}" /> <h:commandButton id="commitbtn" action="#{placeView.save()}" value="#{i18n['place.commit']}" />
</h:form> </h:form>
<h:panelGrid columns="2" rendered="#{empty placeView.place.group}">
<h:form id="usersearchform">
<h:outputText value="#{i18n['user.searchUser']}" />
<h:inputText value="#{placeView.searchuser}" />
<h:commandButton action="#{placeView.searchUser()}" value="#{i18n['user.search']}" />
</h:form>
</h:panelGrid>
<h:form id="userReserveList" rendered="#{!empty placeView.userlist}">
<h:dataTable value="#{placeView.userlist}" var="user">
<h:column>
<f:facet name="header">
<h:outputText value="Id" />
</f:facet>
<h:outputText value="#{user.id}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{i18n['user.login']}" />
</f:facet>
<h:outputText value="#{user.login}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{i18n['user.nick']}" />
</f:facet>
<h:outputText value="#{user.nick}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{i18n['user.firstNames']}" />
</f:facet>
<h:outputText value="#{user.firstnames}" />
</h:column>
<h:column>
<h:commandButton action="#{placeView.reserveForUser()}" value="#{i18n['place.reserveForUser']}" />
</h:column>
</h:dataTable>
</h:form>
#{placeView.initGroupsPlacelist()} #{placeView.initGroupsPlacelist()}
<h:form rendered="#{!empty placeView.place.group and placeView.place.group.places.size() gt 0}"> <h:form rendered="#{!empty placeView.place.group and placeView.place.group.places.size() gt 0}">
...@@ -94,6 +132,13 @@ ...@@ -94,6 +132,13 @@
<h:column> <h:column>
<h:commandButton action="#{placeView.editPlacegroupPlace()}" value="#{i18n['place.edit']}" /> <h:commandButton action="#{placeView.editPlacegroupPlace()}" value="#{i18n['place.edit']}" />
</h:column> </h:column>
<h:column>
<h:outputText value="#{place.placeReserver.user.wholeName}" />
(<h:outputText value="#{place.placeReserver.user.nick}" />)
</h:column>
<h:column>
</h:column>
</h:dataTable> </h:dataTable>
......
<!DOCTYPE html <!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html <html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:tools="http://java.sun.com/jsf/composite/tools"
xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:products="http://java.sun.com/jsf/composite/tools/products" xmlns:f="http://java.sun.com/jsf/core">
xmlns:h="http://java.sun.com/jsf/html"
xmlns:tools="http://java.sun.com/jsf/composite/tools"
xmlns:products="http://java.sun.com/jsf/composite/tools/products"
xmlns:f="http://java.sun.com/jsf/core">
<h:body> <h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml"> <ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<ui:param name="thispage" value="page.product.createBill" /> <ui:param name="thispage" value="page.product.createBill" />
<ui:define name="content"> <ui:define name="content">
<products:shop commitaction="#{productShopView.commitBillCart()}" items="#{productShopView.billCart}" commitValue="#{i18n['productshop.commit']}" /> #{productShopView.initUsershoppable()}
<products:shop commitaction="#{productShopView.commitBillCart()}" items="#{productShopView.billCart}"
commitValue="#{i18n['productshop.commit']}" />
</ui:define> </ui:define>
</ui:composition> </ui:composition>
</h:body> </h:body>
......
...@@ -91,6 +91,7 @@ body { ...@@ -91,6 +91,7 @@ body {
text-align: right; text-align: right;
margin: 15px 30px 5px 30px; margin: 15px 30px 5px 30px;
color: #FFFFFF; color: #FFFFFF;
width: 425px;
} }
#headerbox a { #headerbox a {
......
<?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" xmlns:tools="http://java.sun.com/jsf/composite/tools">
<composite:interface>
</composite:interface>
<composite:implementation>
<h1>#{readerView.readername}</h1>
<h:form>
<h:dataTable border="1" id="event" value="#{readerView.readerEvents}" var="event">
<h:column>
<f:facet name="header">
<h:outputText value="${i18n['reader.tag']}" />
</f:facet>
<h:outputText id="tag" value="#{event.tag}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="${i18n['reader.user']}" />
</f:facet>
<h:outputText rendered="#{!empty event.event}"
value="#{event.event.printedCard.user.wholeName} (#{event.event.printedCard.user.nick})" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="${i18n['reader.tag']}" />
</f:facet>
<h:dataTable value="#{event.actions}" var="action">
<h:column>
<h:outputText value="#{action}" />
</h:column>
</h:dataTable>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="${i18n['readerevent.seenSince']}" />
</f:facet>
<h:outputText value="#{event.seenSince}" />
</h:column>
<h:column>
<h:commandButton rendered="#{empty event.event}" action="#{readerView.selectEvent()}"
value="#{i18n['readerevent.associateToUser']}" />
<h:commandButton rendered="#{!empty event.event}" action="#{readerView.selectEvent()}"
value="#{i18n['readerevent.shopToUser']}" />
</h:column>
</h:dataTable>
</h:form>
</composite:implementation>
</html>
<?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" xmlns:tools="http://java.sun.com/jsf/composite/tools">
<composite:interface>
</composite:interface>
<composite:implementation>
<h:form>
<h:dataTable border="1" id="reader" value="#{readerView.readers}" var="reader">
<h:column>
<f:facet name="header">
<h:outputText value="${i18n['reader.name']}" />
</f:facet>
<h:outputText value="#{reader}" />
</h:column>
<h:column>
<h:commandButton action="#{readerView.selectReader()}" value="#{i18n['reader.select']}" />
</h:column>
</h:dataTable>
</h:form>
</composite:implementation>
</html>
<?xml version='1.0' encoding='UTF-8' ?> <?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" <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: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:composite="http://java.sun.com/jsf/composite" xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:tools="http://java.sun.com/jsf/composite/tools">
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:tools="http://java.sun.com/jsf/composite/tools">
<composite:interface> <composite:interface>
</composite:interface> </composite:interface>
...@@ -59,8 +56,18 @@ ...@@ -59,8 +56,18 @@
</h:outputText> </h:outputText>
</h:column> </h:column>
<h:column> <h:column>
<f:facet name="header">
<h:outputText value="#{i18n['user.image']}" />
</f:facet>
<h:commandLink action="#{userView.showImage()}"
value="#{(empty user.currentImage)?i18n['user.noImage']:i18n['user.hasImage']}" />
</h:column>
<h:column>
<h:commandButton action="#{userView.edit()}" value="#{i18n['user.edit']}" /> <h:commandButton action="#{userView.edit()}" value="#{i18n['user.edit']}" />
</h:column> </h:column>
<h:column>
<h:commandButton action="#{userView.shop()}" value="#{i18n['user.shop']}" />
</h:column>
</h:dataTable> </h:dataTable>
</h:form> </h:form>
</composite:implementation> </composite:implementation>
......
...@@ -50,6 +50,8 @@ ...@@ -50,6 +50,8 @@
<h:commandButton action="#{userView.edit()}" value="#{i18n['user.edit']}" /> <h:commandButton action="#{userView.edit()}" value="#{i18n['user.edit']}" />
</h:column> </h:column>
</h:dataTable> </h:dataTable>
</h:form> </h:form>
</composite:implementation> </composite:implementation>
</html> </html>
......
<?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" xmlns:tools="http://java.sun.com/jsf/composite/tools">
<composite:interface>
</composite:interface>
<composite:implementation>
<a href="#{request.contextPath}/flash/Uploader.swf" onclick="var newwin = window.open('#{request.contextPath}/flash/Uploader.swf?userid=#{userView.user.id}', 'imagesubmitpopup', 'height=480,width=640'); this.target='imagesubmitpopup'; newwin.focus(); return false; " target="_blank">#{i18n['userimage.webcam']}</a>
<form
onsubmit="window.open('', 'imagesubmitpopup', 'height=240,width=320'); this.target='imagesubmitpopup'; return true; "
action="#{request.contextPath}/UploadServlet?type=userimage" enctype="multipart/form-data" method="post">
<p><input type="hidden" name="id" value="#{userView.user.id}" /> Voit lisätä kuvan kävijälippuasi varten. Näin
nopeutat asiointiasi tapahtumaan tullessasi.</p>
<h:panelGrid columns="2">
<h:outputLabel value="#{i18n['imagefile.file']}" />
<input type="file" name="file" />
<!-- <h:outputLabel value="#{i18n['imagefile.description']}"/><input type="text" name="description" /> -->
<h:panelGroup>
<input type="submit" name="submit" value="#{i18n['user.imagesubmit']}" />
</h:panelGroup>
</h:panelGrid></form>
<h2>#{i18n['user.thisIsCurrentImage']}</h2>
<h:form>
<h:commandButton action="#{userView.reloadUser()}" value="Päivitä kuva" />
</h:form>
<h:outputText rendered="#{empty userView.user.currentImage}" value="#{i18n['user.noCurrentImage']}" />
<h:panelGroup rendered="#{!empty userView.user.currentImage}">
<img width="300" src="#{request.contextPath}/Userimage?imageid=#{userView.user.currentImage.id}" alt="image" />
</h:panelGroup>
<tools:canWrite rendered="#{!empty userView.user.currentImage}" target="USER_MANAGEMENT">
<div><h:outputText value="Mime: #{userView.user.currentImage.mimeType}" /> <h:form id="imageconvert">
<h:commandButton action="#{userView.recheckImagetype()}" value="Check imagetype" />
</h:form></div>
</tools:canWrite>
</composite:implementation>
</html>
<!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:users="http://java.sun.com/jsf/composite/tools/user" xmlns:c="http://java.sun.com/jsp/jstl/core">
<h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<ui:param name="thispage" value="page.eventorg.list" />
<ui:define name="content">
<h:outputText rendered="#{!empty readerView.rfidevent.event}" value="#{i18n['rfidevent.empty']}" />
<h:panelGrid columns="2" rendered="#{empty readerView.rfidevent.event}">
<h:outputLabel value="#{i18n['rfidevent.reader']}:" />
<h:outputText value="#{readerView.rfidevent.reader}" />
<h:outputLabel value="#{i18n['rfidevent.tag']}:" />
<h:outputText value="#{readerView.rfidevent.tag}" />
<h:outputLabel value="#{i18n['rfidevent.insertplacecode']}" />
<h:form id="placecodeform">
<h:inputText value="#{readerView.placecode}" />
<h:commandButton value="#{i18n['readerView.assocToPlacecode']}" action="#{readerView.assocToPlacecode()}" />
</h:form>
<h:outputLabel value="#{i18n['rfidevent.searchuser']}" />
<h:form id="usersearchform">
<h:inputText value="#{readerView.usersearch}" />
<h:commandButton value="#{i18n['readerView.searchforuser']}" action="#{readerView.searchforuser()}" />
</h:form>
</h:panelGrid>
<h:form rendered="#{!empty readerView.userlist}" id="usercardclickform">
<h:dataTable border="1" id="userassoclist" value="#{readerView.userlist}" var="user">
<h:column>
<f:facet name="header">
<h:outputText value="Id" />
</f:facet>
<h:outputText value="#{user.user.id}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{i18n['user.login']}" />
</f:facet>
<h:outputText value="#{user.user.login}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{i18n['user.nick']}" />
</f:facet>
<h:outputText value="#{user.user.nick}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{i18n['user.firstNames']}" />
</f:facet>
<h:outputText value="#{user.user.firstnames}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{i18n['user.lastName']}" />
</f:facet>
<h:outputText value="#{user.user.lastname}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{i18n['user.email']}" />
</f:facet>
<h:outputText value="#{user.user.email}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{i18n['readerview.cards']}" />
</f:facet>
<h:dataTable value="#{user.cards}" var="card">
<h:column>
<h:outputText value="#{card.template.name}" />
</h:column>
<h:column>
<h:outputText value="#{card.printCount}" />
</h:column>
<h:column>
<h:commandButton action="#{readerView.assocToCard()}" value="#{i18n['reader.assocToCard']}" />
</h:column>
</h:dataTable>
</h:column>
</h:dataTable>
</h:form>
</ui:define>
</ui:composition>
</h:body>
</html>
\ No newline at end of file
...@@ -5,27 +5,13 @@ ...@@ -5,27 +5,13 @@
xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html" xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core" xmlns:f="http://java.sun.com/jsf/core"
xmlns:users="http://java.sun.com/jsf/composite/tools/user" xmlns:shop="http://java.sun.com/jsf/composite/tools/shop"
xmlns:c="http://java.sun.com/jsp/jstl/core"> xmlns:c="http://java.sun.com/jsp/jstl/core">
<h:body> <h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml"> <ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<ui:param name="thispage" value="page.eventorg.list" /> <ui:param name="thispage" value="page.eventorg.list" />
<ui:define name="content"> <ui:define name="content">
<h:form> <shop:readerlist />
<h:dataTable border="1" id="reader" value="#{readerView.readers}" var="reader">
<h:column>
<f:facet name="header">
<h:outputText value="${i18n['reader.name']}" />
</f:facet>
<h:outputText value="#{reader}" />
</h:column>
<h:column >
<h:commandButton action="#{readerView.selectReader()}" value="#{i18n['reader.select']}" />
</h:column>
</h:dataTable>
</h:form>
</ui:define> </ui:define>
</ui:composition> </ui:composition>
</h:body> </h:body>
......
<!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:products="http://java.sun.com/jsf/composite/tools/products" xmlns:c="http://java.sun.com/jsp/jstl/core">
<h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<ui:param name="thispage" value="page.eventorg.list" />
<ui:define name="content">
#{productShopView.initShoppableProducts()}
<h:panelGrid columns="2">
<h:outputLabel value="#{i18n['shop.user']}" />
<h:outputText value="#{productShopView.shoppingUser.wholeName} #{productShopView.shoppingUser.nick}" />
<h:outputLabel value="#{i18n['shop.accountBalance']}" />
<h:outputText value="#{productShopView.shoppingUser.accountBalance}">
<f:convertNumber />
</h:outputText>
<h:outputText value="#{i18n['product.shopInstant']}" />
<h:selectBooleanCheckbox value="#{productShopView.payInstant}" />
</h:panelGrid>
<products:shop commitaction="#{productShopView.commitShoppingCart()}" items="#{productShopView.billCart}"
commitValue="#{i18n['productshop.commit']}" />
</ui:define>
</ui:composition>
</h:body>
</html>
\ No newline at end of file
...@@ -3,59 +3,14 @@ ...@@ -3,59 +3,14 @@
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> "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" <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:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core"
xmlns:users="http://java.sun.com/jsf/composite/tools/user" xmlns:c="http://java.sun.com/jsp/jstl/core"> xmlns:shop="http://java.sun.com/jsf/composite/tools/shop" xmlns:c="http://java.sun.com/jsp/jstl/core">
<h:body> <h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml"> <ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<ui:param name="thispage" value="page.eventorg.list" /> <ui:param name="thispage" value="page.shop.readerevents" />
<ui:define name="content"> <ui:define name="content">
<shop:readerevents rendered="#{!empty readerView.readername}" />
<shop:readerlist rendered="#{empty readerView.readername}" />
<h1>#{readerView.readername}</h1>
<h:form>
<h:dataTable border="1" id="event" value="#{readerView.readerEvents}" var="event">
<h:column>
<f:facet name="header">
<h:outputText value="${i18n['reader.tag']}" />
</f:facet>
<h:outputText id="tag" value="#{event.tag}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="${i18n['reader.tag']}" />
</f:facet>
<h:outputText id="eventtime" value="#{event.time.time}">
<f:convertDateTime />
</h:outputText>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="${i18n['reader.tag']}" />
</f:facet>
<h:outputText rendered="#{!empty event.event}"
value="#{event.event.printedCard.user.wholeName} (#{event.event.printedCard.user.nick})" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="${i18n['reader.tag']}" />
</f:facet>
<h:dataTable value="#{event.actions}" var="action">
<h:column>
<h:outputText value="#{action}" />
</h:column>
</h:dataTable>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="${i18n['readerevent.seenSince']}" />
</f:facet>
<h:outputText value="#{event.seenSince}" />
</h:column>
<h:column>
<h:commandButton action="#{readerView.selectReader()}" value="#{i18n['reader.select']}" />
</h:column>
</h:dataTable>
</h:form>
</ui:define> </ui:define>
</ui:composition> </ui:composition>
</h:body> </h:body>
......
<!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:users="http://java.sun.com/jsf/composite/tools/user" xmlns:c="http://java.sun.com/jsp/jstl/core">
<h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<ui:param name="thispage" value="page.admin.sendimage" />
<ui:define name="content">
<h1>Sending image to</h1>
<h:panelGrid columns="2">
<h:outputText value="#{i18n['user.login']}" />
<h:outputText value="#{userView.user.login}" />
<h:outputText value="#{i18n['user.wholeName']}" />
<h:outputText value="#{userView.user.wholeName}" />
</h:panelGrid>
<users:sendImage />
<h:dataTable border="1" id="user" value="#{userView.user.userImageList}" var="img">
<h:column>
<h:outputText value="#{img.name}" />
</h:column>
<h:column>
<h:outputText value="#{img.mimeType}" />
</h:column>
</h:dataTable>
</ui:define>
</ui:composition>
</h:body>
</html>
\ No newline at end of file
...@@ -21,6 +21,8 @@ ...@@ -21,6 +21,8 @@
<tools:canWrite target="MAP"> <tools:canWrite target="MAP">
<h1>#{i18n['user.placegroups']}</h1> <h1>#{i18n['user.placegroups']}</h1>
<h:form id="placegrouplist"> <h:form id="placegrouplist">
<h:dataTable border="1" id="placegroup" value="#{userView.placegroups}" var="placegroup"> <h:dataTable border="1" id="placegroup" value="#{userView.placegroups}" var="placegroup">
......
<!DOCTYPE html <!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" <html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets"
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:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core"
xmlns:users="http://java.sun.com/jsf/composite/tools/user" xmlns:users="http://java.sun.com/jsf/composite/tools/user" xmlns:c="http://java.sun.com/jsp/jstl/core">
xmlns:c="http://java.sun.com/jsp/jstl/core">
<h:body> <h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml"> <ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<ui:param name="thispage" value="page.user.create" /> <ui:param name="thispage" value="page.user.create" />
<ui:define name="content"> <ui:define name="content">
<form <users:sendImage />
onsubmit="window.open('', 'imagesubmitpopup', 'height=200,width=400'); this.target='imagesubmitpopup'; return true; "
action="#{request.contextPath}/UploadServlet?type=userimage" enctype="multipart/form-data"
method="post">
<p> <input type="hidden" name="id" value="#{userView.user.id}" />
Voit lisätä kuvan kävijälippuasi varten. Näin nopeutat asiointiasi tapahtumaan tullessasi.</p>
<h:panelGrid columns="2">
<h:outputLabel value="#{i18n['imagefile.file']}" />
<input type="file" name="file" />
<!-- <h:outputLabel value="#{i18n['imagefile.description']}"/><input type="text" name="description" /> -->
<h:panelGroup>
<input type="submit" name="submit" value="#{i18n['user.imagesubmit']}" />
</h:panelGroup>
</h:panelGrid>
</form>
<h2>#{i18n['user.thisIsCurrentImage']}</h2>
<img width="100" src="#{request.contextPath}/Userimage" alt="" />
</ui:define> </ui:define>
</ui:composition> </ui:composition>
......
...@@ -22,6 +22,7 @@ import org.slf4j.LoggerFactory; ...@@ -22,6 +22,7 @@ import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.beans.EventMapBeanLocal; import fi.insomnia.bortal.beans.EventMapBeanLocal;
import fi.insomnia.bortal.beans.UserBeanLocal; import fi.insomnia.bortal.beans.UserBeanLocal;
import fi.insomnia.bortal.beans.UtilBeanLocal;
import fi.insomnia.bortal.model.UserImage; import fi.insomnia.bortal.model.UserImage;
/** /**
...@@ -53,6 +54,9 @@ public class UploadServlet extends HttpServlet { ...@@ -53,6 +54,9 @@ public class UploadServlet extends HttpServlet {
@EJB @EJB
private EventMapBeanLocal eventmapbean; private EventMapBeanLocal eventmapbean;
@EJB
private UtilBeanLocal utilbean;
/** /**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
* response) * response)
...@@ -73,14 +77,22 @@ public class UploadServlet extends HttpServlet { ...@@ -73,14 +77,22 @@ public class UploadServlet extends HttpServlet {
String description = ""; String description = "";
String filename = ""; String filename = "";
String idstr = request.getParameter("id");
if (idstr != null) {
destId = Integer.parseInt(idstr);
}
for (Object ti : upload.parseRequest(request)) { for (Object ti : upload.parseRequest(request)) {
if (ti instanceof FileItem) { if (ti instanceof FileItem) {
FileItem fi = (FileItem) ti; FileItem fi = (FileItem) ti;
if (fi.getFieldName().equals("id")) { if (fi.getFieldName().equals("id")) {
destId = Integer.parseInt(fi.getString()); destId = Integer.parseInt(fi.getString());
} else if (fi.getFieldName().equals("description")) { } else if (fi.getFieldName().equals("description")) {
description = fi.getString(); description = fi.getString();
} else if (fi.getFieldName().equals("file")) {
} else if (fi.getFieldName().equals("file") || fi.getFieldName().equals("Filedata")) {
imagedata = fi.get(); imagedata = fi.get();
filename = fi.getName(); filename = fi.getName();
contenttype = fi.getContentType(); contenttype = fi.getContentType();
...@@ -90,7 +102,9 @@ public class UploadServlet extends HttpServlet { ...@@ -90,7 +102,9 @@ public class UploadServlet extends HttpServlet {
} }
String type = request.getParameter("type"); String type = request.getParameter("type");
if (type.equals("userimage")) { if (type.equals("userimage")) {
userbean.uploadImage(destId, contenttype, imagedata, filename, description); logger.debug("Uploading userimage for user {}");
UserImage userimage = userbean.uploadImage(destId, contenttype, imagedata, filename, description);
utilbean.convertImage(userimage.getUser());
} else if (type.equals("mapimage")) { } else if (type.equals("mapimage")) {
eventmapbean.sendImage(destId, imagedata); eventmapbean.sendImage(destId, imagedata);
} else { } else {
......
...@@ -21,6 +21,7 @@ import org.slf4j.Logger; ...@@ -21,6 +21,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.beans.UserBeanLocal; import fi.insomnia.bortal.beans.UserBeanLocal;
import fi.insomnia.bortal.model.User;
import fi.insomnia.bortal.model.UserImage; import fi.insomnia.bortal.model.UserImage;
/** /**
...@@ -59,17 +60,31 @@ public class UserImageServlet extends HttpServlet { ...@@ -59,17 +60,31 @@ public class UserImageServlet extends HttpServlet {
* response) * response)
*/ */
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String imageidobj = request.getParameter("imageid"); String useridStr = request.getParameter("userid");
String keyhashStr = request.getParameter("hash");
UserImage image = null;
if (useridStr != null && "i-AW1Nfzk5KTi8iaLYua".equals(keyhashStr)) {
int userid = Integer.parseInt(useridStr);
User usr = userbean.findById(userid);
if (usr != null) {
image = usr.getCurrentImage();
}
int imageid = 0; } else {
if (imageidobj != null) { String imageidobj = request.getParameter("imageid");
imageid = Integer.parseInt(imageidobj);
}
UserImage image = userbean.findUserImage(imageid); int imageid = 0;
if (imageidobj != null) {
imageid = Integer.parseInt(imageidobj);
}
image = userbean.findUserImage(imageid);
}
if (image == null) { if (image == null) {
response.setStatus(HttpServletResponse.SC_NOT_FOUND); response.setStatus(HttpServletResponse.SC_NOT_FOUND);
response.getWriter().append("Not Found"); response.getWriter().append("Not Found");
} else { } else {
response.setContentType(image.getMimeType()); response.setContentType(image.getMimeType());
response.getOutputStream().write(image.getImageData()); response.getOutputStream().write(image.getImageData());
......
...@@ -12,7 +12,9 @@ import fi.insomnia.bortal.beans.PlaceBeanLocal; ...@@ -12,7 +12,9 @@ import fi.insomnia.bortal.beans.PlaceBeanLocal;
import fi.insomnia.bortal.beans.UserBeanLocal; import fi.insomnia.bortal.beans.UserBeanLocal;
import fi.insomnia.bortal.enums.Permission; import fi.insomnia.bortal.enums.Permission;
import fi.insomnia.bortal.enums.RolePermission; import fi.insomnia.bortal.enums.RolePermission;
import fi.insomnia.bortal.exceptions.BortalCatchableException;
import fi.insomnia.bortal.model.Place; import fi.insomnia.bortal.model.Place;
import fi.insomnia.bortal.model.User;
@ManagedBean(name = "placeView") @ManagedBean(name = "placeView")
@SessionScoped @SessionScoped
...@@ -26,10 +28,29 @@ public class PlaceView { ...@@ -26,10 +28,29 @@ public class PlaceView {
private PlaceBeanLocal placebean; private PlaceBeanLocal placebean;
private ListDataModel<Place> placesPlacegroup; private ListDataModel<Place> placesPlacegroup;
private String searchuser;
private ListDataModel<User> userlist;
public String editPlace(Place place) { public String editPlace(Place place) {
this.place = place; this.place = place;
logger.debug("editing place {}", place); logger.debug("editing place {}", place);
searchuser = null;
userlist = null;
return "/place/edit"; return "/place/edit";
}
public String reserveForUser() {
place = placebean.lockPlaces(userlist.getRowData(), place);
searchuser = null;
userlist = null;
return null;
}
public String searchUser() {
userlist = new ListDataModel<User>(userbean.searchName(searchuser));
return null;
} }
public Place getPlace() { public Place getPlace() {
...@@ -82,4 +103,20 @@ public class PlaceView { ...@@ -82,4 +103,20 @@ public class PlaceView {
placebean.checkMemberships(); placebean.checkMemberships();
return null; return null;
} }
public void setSearchuser(String searchuser) {
this.searchuser = searchuser;
}
public String getSearchuser() {
return searchuser;
}
public void setUserlist(ListDataModel<User> userlist) {
this.userlist = userlist;
}
public ListDataModel<User> getUserlist() {
return userlist;
}
} }
...@@ -5,7 +5,10 @@ ...@@ -5,7 +5,10 @@
package fi.insomnia.bortal.view; package fi.insomnia.bortal.view;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Iterator; import java.util.Iterator;
import java.util.List;
import java.util.Map;
import javax.ejb.EJB; import javax.ejb.EJB;
import javax.faces.application.FacesMessage; import javax.faces.application.FacesMessage;
...@@ -18,12 +21,14 @@ import javax.faces.model.ListDataModel; ...@@ -18,12 +21,14 @@ import javax.faces.model.ListDataModel;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.beans.AccountEventBeanLocal;
import fi.insomnia.bortal.beans.BillBeanLocal; import fi.insomnia.bortal.beans.BillBeanLocal;
import fi.insomnia.bortal.beans.EventBeanLocal; import fi.insomnia.bortal.beans.EventBeanLocal;
import fi.insomnia.bortal.beans.ProductBeanLocal; import fi.insomnia.bortal.beans.ProductBeanLocal;
import fi.insomnia.bortal.beans.UserBeanLocal; import fi.insomnia.bortal.beans.UserBeanLocal;
import fi.insomnia.bortal.enums.Permission; import fi.insomnia.bortal.enums.Permission;
import fi.insomnia.bortal.enums.RolePermission; import fi.insomnia.bortal.enums.RolePermission;
import fi.insomnia.bortal.model.AccountEvent;
import fi.insomnia.bortal.model.Bill; import fi.insomnia.bortal.model.Bill;
import fi.insomnia.bortal.model.Discount; import fi.insomnia.bortal.model.Discount;
import fi.insomnia.bortal.model.Product; import fi.insomnia.bortal.model.Product;
...@@ -49,29 +54,28 @@ public class ProductShopView { ...@@ -49,29 +54,28 @@ public class ProductShopView {
private User shoppingUser; private User shoppingUser;
public DataModel<Product> getUserShoppableProducts() { @EJB
ListDataModel<Product> items = new ListDataModel<Product>(productBean.listUserShoppableProducts()); private AccountEventBeanLocal accountEventBean;
logger.debug("Fetching products. Found {}", items.getRowCount());
return items;
}
public String commitBillCart() { private boolean payInstant;
userBean.fatalPermission(Permission.PRODUCT, RolePermission.EXECUTE);
logger.debug("Committing billCart"); private boolean productsInCart() {
Iterator<ProductShopItem> nullcheckIter = billCart.iterator(); Iterator<ProductShopItem> nullcheckIter = billCart.iterator();
boolean hasItems = false;
while (nullcheckIter.hasNext()) { while (nullcheckIter.hasNext()) {
if (nullcheckIter.next().getCount().compareTo(BigDecimal.ZERO) > 0) { if (nullcheckIter.next().getCount().compareTo(BigDecimal.ZERO) > 0) {
logger.debug("Found items from cart"); logger.debug("Found items from cart");
hasItems = true; return true;
break;
} }
} }
return false;
if(!hasItems) }
{
public String commitBillCart() {
userBean.fatalPermission(Permission.PRODUCT, RolePermission.EXECUTE);
logger.debug("Committing billCart");
if (!productsInCart()) {
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(I18n.get("productshop.noItemsInCart"))); FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(I18n.get("productshop.noItemsInCart")));
return "createBill"; return "createBill";
} }
...@@ -92,11 +96,48 @@ public class ProductShopView { ...@@ -92,11 +96,48 @@ public class ProductShopView {
return "success"; return "success";
} }
public DataModel<ProductShopItem> getBillCart() { public String commitShoppingCart() {
if (!productsInCart()) {
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(I18n.get("productshop.noItemsInCart")));
return null;
}
Iterator<ProductShopItem> cartIter = billCart.iterator();
Map<Product, BigDecimal> shopMap = new HashMap<Product, BigDecimal>();
while (cartIter.hasNext()) {
ProductShopItem shopitem = cartIter.next();
if (shopitem.getCount().compareTo(BigDecimal.ZERO) > 0) {
if (shopMap.containsKey(shopitem.getProduct())) {
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(I18n.get("productshop.productFoundTwice")));
return null;
}
shopMap.put(shopitem.getProduct(), shopitem.getCount());
}
}
List<AccountEvent> executed = accountEventBean.shopCash(shoppingUser, shopMap, isPayInstant());
return "success";
}
public void initUsershoppable() {
setPayInstant(true);
logger.debug("Creating new BillCart"); logger.debug("Creating new BillCart");
userBean.fatalPermission(Permission.BILL, RolePermission.EXECUTE); userBean.fatalPermission(Permission.BILL, RolePermission.EXECUTE);
billCart = new ListDataModel<ProductShopItem>(ProductShopItem.productList(productBean.listUserShoppableProducts())); billCart = new ListDataModel<ProductShopItem>(ProductShopItem.productList(productBean.listUserShoppableProducts()));
}
public void initShoppableProducts() {
setPayInstant(true);
userBean.fatalPermission(Permission.SHOP, RolePermission.EXECUTE);
billCart = new ListDataModel<ProductShopItem>(ProductShopItem.productList(productBean.getProducts()));
}
public DataModel<ProductShopItem> getBillCart() {
return billCart; return billCart;
} }
...@@ -111,4 +152,12 @@ public class ProductShopView { ...@@ -111,4 +152,12 @@ public class ProductShopView {
return shoppingUser; return shoppingUser;
} }
public void setPayInstant(boolean payInstant) {
this.payInstant = payInstant;
}
public boolean isPayInstant() {
return payInstant;
}
} }
package fi.insomnia.bortal.view; package fi.insomnia.bortal.view;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List;
import java.util.Set; import java.util.Set;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean; import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty; import javax.faces.bean.ManagedProperty;
import javax.faces.bean.RequestScoped;
import javax.faces.bean.SessionScoped; import javax.faces.bean.SessionScoped;
import javax.faces.model.ListDataModel; import javax.faces.model.ListDataModel;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.beans.EventBeanLocal;
import fi.insomnia.bortal.beans.ReaderBeanLocal;
import fi.insomnia.bortal.beans.UserBeanLocal;
import fi.insomnia.bortal.exceptions.BortalCatchableException;
import fi.insomnia.bortal.model.LanEvent;
import fi.insomnia.bortal.model.PrintedCard;
import fi.insomnia.bortal.model.ReaderEvent;
import fi.insomnia.bortal.model.User;
import fi.insomnia.bortal.view.RfidContainer.RfidEvent; import fi.insomnia.bortal.view.RfidContainer.RfidEvent;
@ManagedBean(name = "readerView") @ManagedBean(name = "readerView")
@SessionScoped @SessionScoped
public class ReaderView { public class ReaderView extends GenericView {
@ManagedProperty(value = "#{rfidContainer}") @ManagedProperty(value = "#{rfidContainer}")
private RfidContainer container; private RfidContainer container;
@ManagedProperty(value = "#{productShopView}")
private ProductShopView shopview;
private ListDataModel<String> readerlist; private ListDataModel<String> readerlist;
private String readername; private String readername;
private ListDataModel<RfidEvent> readerevents; private ListDataModel<RfidEvent> readerevents;
private RfidEvent rfidevent;
private String placecode;
private String usersearch;
@EJB
private ReaderBeanLocal readerBean;
@EJB
private UserBeanLocal userbean;
@EJB
private EventBeanLocal eventbean;
private ListDataModel<UserCardWrapper> userlist;
private static final Logger logger = LoggerFactory.getLogger(ReaderView.class);
public String searchforuser() {
setUserlist(initUserCardWrapper(userbean.searchName(usersearch + "%")));
return null;
}
public ListDataModel<String> getReaders() { public ListDataModel<String> getReaders() {
Set<String> keyset = getContainer().getReaders().keySet(); Set<String> keyset = getContainer().getReaders().keySet();
...@@ -27,11 +60,50 @@ public class ReaderView { ...@@ -27,11 +60,50 @@ public class ReaderView {
return readerlist; return readerlist;
} }
public String selectEvent() {
rfidevent = readerevents.getRowData();
String ret = null;
if (rfidevent.getEvent() == null) {
usersearch = "";
setUserlist(null);
placecode = "";
ret = "assocToUser";
} else {
getShopview().setShoppingUser(rfidevent.getEvent().getPrintedCard().getUser());
ret = "shopToUser";
}
return ret;
}
public String assocToCard() {
UserCardWrapper usr = userlist.getRowData();
PrintedCard card = usr.getCards().getRowData();
logger.debug("Associng card {} to card tag {}", card.getId(), rfidevent.getTag());
rfidevent.setEvent(readerBean.assocTagToCard(rfidevent.getTag(), readername, card));
rfidevent.addMessage("Associated to user " + usr.getUser().getNick());
getShopview().setShoppingUser(usr.getUser());
return "shopToUser";
}
public String selectReader() { public String selectReader() {
setReadername(readerlist.getRowData()); setReadername(readerlist.getRowData());
return "showReaderEvents"; return "showReaderEvents";
} }
public String assocToPlacecode() {
try {
ReaderEvent event = readerBean.assocTagToPlacecode(rfidevent.getTag(), readername, placecode);
rfidevent.setEvent(event);
rfidevent.addMessage("Associated to user " + event.getPrintedCard().getUser().getWholeName());
} catch (BortalCatchableException e) {
this.addFaceMessage(e.getI18nMessage());
}
return "";
}
public ListDataModel<RfidEvent> getReaderEvents() { public ListDataModel<RfidEvent> getReaderEvents() {
readerevents = new ListDataModel<RfidEvent>(getContainer().getReaderEvents(getReadername())); readerevents = new ListDataModel<RfidEvent>(getContainer().getReaderEvents(getReadername()));
return readerevents; return readerevents;
...@@ -52,4 +124,86 @@ public class ReaderView { ...@@ -52,4 +124,86 @@ public class ReaderView {
public String getReadername() { public String getReadername() {
return readername; return readername;
} }
public String getPlacecode() {
return placecode;
}
public void setPlacecode(String placecode) {
this.placecode = placecode;
}
public String getUsersearch() {
return usersearch;
}
public void setUsersearch(String usersearch) {
this.usersearch = usersearch;
}
public void setRfidevent(RfidEvent rfidevent) {
this.rfidevent = rfidevent;
}
public RfidEvent getRfidevent() {
return rfidevent;
}
private ListDataModel<UserCardWrapper> initUserCardWrapper(List<User> users) {
ArrayList<UserCardWrapper> ret = new ArrayList<UserCardWrapper>();
for (User usr : users) {
ret.add(new UserCardWrapper(usr));
}
return new ListDataModel<UserCardWrapper>(ret);
}
public void setUserlist(ListDataModel<UserCardWrapper> userlist) {
this.userlist = userlist;
}
public ListDataModel<UserCardWrapper> getUserlist() {
return userlist;
}
public void setShopview(ProductShopView shopview) {
this.shopview = shopview;
}
public ProductShopView getShopview() {
return shopview;
}
public class UserCardWrapper {
private User user;
private ListDataModel<PrintedCard> cards;
public UserCardWrapper(User usr) {
LanEvent event = eventbean.getCurrentEvent();
setUser(usr);
ArrayList<PrintedCard> cardlist = new ArrayList<PrintedCard>();
for (PrintedCard pc : usr.getPrintedCards()) {
if (pc.getEnabled() && event.getId().equals(pc.getId().getEventId())) {
cardlist.add(pc);
}
}
setCards(new ListDataModel<PrintedCard>(cardlist));
}
public void setCards(ListDataModel<PrintedCard> cards) {
this.cards = cards;
}
public ListDataModel<PrintedCard> getCards() {
return cards;
}
public void setUser(User user) {
this.user = user;
}
public User getUser() {
return user;
}
}
} }
...@@ -125,5 +125,10 @@ public class RfidContainer { ...@@ -125,5 +125,10 @@ public class RfidContainer {
this.actions = actions; this.actions = actions;
} }
public void addMessage(String msg) {
this.actions.add(msg);
}
} }
} }
...@@ -98,4 +98,18 @@ public class TestDataView { ...@@ -98,4 +98,18 @@ public class TestDataView {
public void checkCards() { public void checkCards() {
ctbean.checkAllUsersCardRights(); ctbean.checkAllUsersCardRights();
} }
public String checkImages() {
logger.debug("Cheking all users images");
utilbean.checkAllUsersImages();
return null;
}
public String convertImages() {
for (User u : userbean.getUsers()) {
utilbean.convertImage(u);
}
return null;
}
} }
...@@ -19,6 +19,7 @@ import fi.insomnia.bortal.beans.RoleBeanLocal; ...@@ -19,6 +19,7 @@ import fi.insomnia.bortal.beans.RoleBeanLocal;
import fi.insomnia.bortal.beans.SecurityBeanLocal; import fi.insomnia.bortal.beans.SecurityBeanLocal;
import fi.insomnia.bortal.beans.SecurityLogType; import fi.insomnia.bortal.beans.SecurityLogType;
import fi.insomnia.bortal.beans.UserBeanLocal; import fi.insomnia.bortal.beans.UserBeanLocal;
import fi.insomnia.bortal.beans.UtilBeanLocal;
import fi.insomnia.bortal.enums.Permission; import fi.insomnia.bortal.enums.Permission;
import fi.insomnia.bortal.enums.RolePermission; import fi.insomnia.bortal.enums.RolePermission;
import fi.insomnia.bortal.model.AccountEvent; import fi.insomnia.bortal.model.AccountEvent;
...@@ -41,6 +42,8 @@ public class UserView extends GenericView { ...@@ -41,6 +42,8 @@ public class UserView extends GenericView {
@ManagedProperty(value = "#{placeGroupView}") @ManagedProperty(value = "#{placeGroupView}")
private PlaceGroupView placegroupView; private PlaceGroupView placegroupView;
@ManagedProperty(value = "#{productShopView}")
private ProductShopView shopview;
private static final Logger logger = LoggerFactory.getLogger(UserView.class); private static final Logger logger = LoggerFactory.getLogger(UserView.class);
private User user; private User user;
...@@ -48,11 +51,20 @@ public class UserView extends GenericView { ...@@ -48,11 +51,20 @@ public class UserView extends GenericView {
private String password; private String password;
private String passwordcheck; private String passwordcheck;
@EJB
private UtilBeanLocal utilbean;
public void initCreateuser() { public void initCreateuser() {
user = new User(); user = new User();
} }
public String showImage() {
userBean.fatalPermission(Permission.USER_MANAGEMENT, RolePermission.READ);
setUser(items.getRowData());
return "adminSendImage";
}
public String edit() { public String edit() {
userBean.fatalPermission(Permission.USER_MANAGEMENT, RolePermission.READ); userBean.fatalPermission(Permission.USER_MANAGEMENT, RolePermission.READ);
...@@ -61,6 +73,19 @@ public class UserView extends GenericView { ...@@ -61,6 +73,19 @@ public class UserView extends GenericView {
return "userEdit"; return "userEdit";
} }
public String reloadUser() {
user = userBean.findById(user.getId());
return null;
}
public String shop() {
userBean.fatalPermission(Permission.SHOP, RolePermission.EXECUTE, "no rights to shop to user without SHOP:EXECUTE");
shopview.setShoppingUser(items.getRowData());
// shopview.setUser(items.getRowData());
return "/shop/shopToUser";
}
public ListDataModel<PlaceGroup> getPlacegroups() { public ListDataModel<PlaceGroup> getPlacegroups() {
List<PlaceGroup> retlist = new ArrayList<PlaceGroup>(); List<PlaceGroup> retlist = new ArrayList<PlaceGroup>();
retlist.addAll(user.getPlaceGroups()); retlist.addAll(user.getPlaceGroups());
...@@ -200,10 +225,9 @@ public class UserView extends GenericView { ...@@ -200,10 +225,9 @@ public class UserView extends GenericView {
return "edit"; return "edit";
} }
public String editGroup(PlaceGroup pg) public String editGroup(PlaceGroup pg) {
{
placegroupView.setGroup(pg); placegroupView.setGroup(pg);
return "/place/editGroup"; return "/place/editGroup";
} }
...@@ -214,4 +238,22 @@ public class UserView extends GenericView { ...@@ -214,4 +238,22 @@ public class UserView extends GenericView {
public PlaceGroupView getPlacegroupView() { public PlaceGroupView getPlacegroupView() {
return placegroupView; return placegroupView;
} }
public String recheckImagetype() {
utilbean.convertImage(user);
return null;
}
public String nothing() {
return null;
}
public void setShopview(ProductShopView shopview) {
this.shopview = shopview;
}
public ProductShopView getShopview() {
return shopview;
}
} }
...@@ -63,8 +63,9 @@ page.user.list.header=Kyttjt ...@@ -63,8 +63,9 @@ page.user.list.header=Kyttjt
page.user.editself.pagegroup=user page.user.editself.pagegroup=user
page.user.editself.header=Omat tiedot page.user.editself.header=Omat tiedot
page.user.mygroups.pagegroup=user page.user.mygroups.pagegroup=user
page.user.mygroups=Omat paikat page.user.mygroups.header=Omat paikat
page.admin.sendimage.pagegroup=admin
page.admin.sendimage.header=Lhet kuva
page.auth.login.loginerror.pagegroup=frontpage page.auth.login.loginerror.pagegroup=frontpage
page.auth.login.loginerror.header=Kirjautumisvirhe page.auth.login.loginerror.header=Kirjautumisvirhe
...@@ -87,4 +88,8 @@ page.bill.billSummary.header=Laskujen yhteenveto ...@@ -87,4 +88,8 @@ page.bill.billSummary.header=Laskujen yhteenveto
page.account.list.pagegroup=user page.account.list.pagegroup=user
page.account.list.header=Tilitapahtumat page.account.list.header=Tilitapahtumat
page.auth.resetPassword.pagegroup=user page.auth.resetPassword.pagegroup=user
page.auth.resetPassword.header=Salasanan resetointi page.auth.resetPassword.header=Salasanan resetointi
\ No newline at end of file
page.shop.readerevents.pagegroup=rfidshop
page.shop.readerevents.header=RFID kauppa
\ No newline at end of file
...@@ -34,6 +34,8 @@ products.save=Tallenna ...@@ -34,6 +34,8 @@ products.save=Tallenna
productshop.commit=Osta productshop.commit=Osta
product.boughtTotal=Tuotteita laskutettu product.boughtTotal=Tuotteita laskutettu
product.paid=Maksettu product.paid=Maksettu
product.prepaidInstant=Luodaan kun prepaid maksetaan
shop.accountBalance=Tilin saldo
placegroup.printPdf=Tulosta paikkakoodit placegroup.printPdf=Tulosta paikkakoodit
placegroup.name=Nimi placegroup.name=Nimi
...@@ -101,6 +103,18 @@ user.accountBalance=Tilin saldo ...@@ -101,6 +103,18 @@ user.accountBalance=Tilin saldo
userview.passwordsDontMatch=Salasanat eivt ole samat! Ole hyv ja syt salasanat uudelleen. userview.passwordsDontMatch=Salasanat eivt ole samat! Ole hyv ja syt salasanat uudelleen.
user.myGroups=Omat paikkavaraukset user.myGroups=Omat paikkavaraukset
user.insertToken=Syt paikkakoodi user.insertToken=Syt paikkakoodi
user.wholeName=Nimi
user.hasImage=Kuva
user.noImage=EI kuvaa
user.noCurrentImage=Ei kuvaa
userimage.webcam=Ota kuva webkameralla
sidebar.utils.testdata=Testdata
sidebar.utils.flushCache=Flush Cache
sidebar.shop.readerEvents=Lukijan tapahtumat
sidebar.shop.readerlist=Nyt lukijat
placetoken.token=Paikkakoodi placetoken.token=Paikkakoodi
placetoken.commit=Liit placetoken.commit=Liit
...@@ -155,6 +169,8 @@ user.successfullySaved=Tiedot tallennettu onnistuneesti ...@@ -155,6 +169,8 @@ user.successfullySaved=Tiedot tallennettu onnistuneesti
user.roles=Roolit user.roles=Roolit
user.uploadimage=Lhet kuva user.uploadimage=Lhet kuva
user.imagelist=Tallennetut kuvat user.imagelist=Tallennetut kuvat
user.shop=Osta
imagefile.file=Kuvatiedosto imagefile.file=Kuvatiedosto
imagefile.description=Kuvaus imagefile.description=Kuvaus
user.imagesubmit=Lhet kuva user.imagesubmit=Lhet kuva
...@@ -224,11 +240,21 @@ cardTemplate.name=Korttipohja ...@@ -224,11 +240,21 @@ cardTemplate.name=Korttipohja
cardTemplate.power=Teho cardTemplate.power=Teho
cardTemplate.roles=Yhdistetyt roolit cardTemplate.roles=Yhdistetyt roolit
topmenu.rfidshop=Staffshop
readerview.cards=Kortit ( tulostuslkm )
reader.assocToCard=Yhdist korttiin
reader.name=Lukijan nimi
readerevent.associateToUser=Yhdist kyttjn
readerevent.shopToUser=Osta kyttjlle
topmenu.placemap=Paikkakartta topmenu.placemap=Paikkakartta
userview.passwordsChanged=Salasana vaihdettu userview.passwordsChanged=Salasana vaihdettu
userview.passwordTooShort=Salasana liian lyhyt. Pit olla vhintn 5 merkki pitk. userview.passwordTooShort=Salasana liian lyhyt. Pit olla vhintn 5 merkki pitk.
userview.loginstringFaulty=Kyttjtunnus virheellinen. Pit olla vhintn kaksi merkki pitk. userview.loginstringFaulty=Kyttjtunnus virheellinen. Pit olla vhintn kaksi merkki pitk.
product.shopInstant=Luo kteismaksu tuotteille
productshop.noItemsInCart=Ostoskorissa ei ole tuotteita productshop.noItemsInCart=Ostoskorissa ei ole tuotteita
shop.accountBalance=Tilin saldo
shop.user=Myydn
accountevent.quantity=Lukumr accountevent.quantity=Lukumr
accountevent.productname=Tuote accountevent.productname=Tuote
...@@ -281,9 +307,12 @@ placeSelect.legend.red=Varattu paikka ...@@ -281,9 +307,12 @@ placeSelect.legend.red=Varattu paikka
placeSelect.legend.green=Oma ostettu paikka placeSelect.legend.green=Oma ostettu paikka
placeSelect.legend.blue=Oma valittu paikka placeSelect.legend.blue=Oma valittu paikka
placeSelect.legend.white=Vapaa paikka placeSelect.legend.white=Vapaa paikka
placeSelect.legend.grey=Ei vapauteta placeSelect.legend.grey=Vapautetaan tarvittaessa
placeSelect.totalPlaces=Paikkoja yhteens placeSelect.totalPlaces=Paikkoja yhteens
readerevent.seenSince=Nhty viimeksi
reader.tag=Tag
reader.user=Kyttj
# Validationmessages # Validationmessages
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!