Commit 69553a9e by Tuomas Riihimäki

Tapahtuma lähti käyntiin....

1 parent f704bb71
Showing with 1859 additions and 520 deletions
package fi.insomnia.bortal.beans;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.security.DeclareRoles;
import javax.annotation.security.RolesAllowed;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.imageio.ImageIO;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.enums.apps.UserPermission;
import fi.insomnia.bortal.facade.CardTemplateFacade;
import fi.insomnia.bortal.facade.PrintedCardFacade;
import fi.insomnia.bortal.facade.UserFacade;
......@@ -24,7 +31,7 @@ import fi.insomnia.bortal.util.MailMessage;
* Session Bean implementation class CardTemplateBean
*/
@Stateless
@DeclareRoles({ "USER_MANAGEMENT/WRITE", "USER_MANAGEMENT/READ" })
@DeclareRoles({ UserPermission.S_WRITE_ROLES })
public class CardTemplateBean implements CardTemplateBeanLocal {
private static final Logger logger = LoggerFactory.getLogger(CardTemplateBean.class);
......@@ -61,13 +68,20 @@ public class CardTemplateBean implements CardTemplateBeanLocal {
// }
@Override
@RolesAllowed("USER_MANAGEMENT/WRITE")
@RolesAllowed(UserPermission.S_WRITE_ROLES)
public void create(CardTemplate card) {
cdFacade.create(card);
LanEvent currEv = eventBean.getCurrentEvent();
if (currEv.getCardTemplates() == null)
{
currEv.setCardTemplates(new ArrayList<CardTemplate>());
}
card.setEvent(currEv);
currEv.getCardTemplates().add(card);
}
@Override
@RolesAllowed("USER_MANAGEMENT/READ")
@RolesAllowed(UserPermission.S_WRITE_ROLES)
public CardTemplate find(Integer id) {
return cdFacade.find(id);
}
......@@ -84,8 +98,11 @@ public class CardTemplateBean implements CardTemplateBeanLocal {
*
* @throws PermissionDeniedException
*/
@RolesAllowed(UserPermission.S_MODIFY)
@Override
public PrintedCard checkPrintedCard(User user) throws PermissionDeniedException {
logger.info("Checking printed card");
user = userfacade.find(user.getId());
LanEvent currEvent = eventBean.getCurrentEvent();
List<PrintedCard> myCards = printedcardfacade.findForUser(currEvent, user);
......@@ -93,6 +110,7 @@ public class CardTemplateBean implements CardTemplateBeanLocal {
PrintedCard biggestCard = null;
PrintedCard smallestCard = null;
for (PrintedCard card : myCards) {
logger.info("Checking card {}", card);
if (card.getEnabled()) {
if (biggestCard == null || biggestCard.getTemplate().getPower() < card.getTemplate().getPower()) {
biggestCard = card;
......@@ -127,7 +145,7 @@ public class CardTemplateBean implements CardTemplateBeanLocal {
user.getPrintedCards().add(pc);
// printedcardfacade.create(pc);
biggestCard = pc;
logger.debug("User {} has too little power old role {} New role {}", new Object[] { user.getLogin(), existingPower, newPower });
logger.info("User {} has too little power old role {} New role {}", new Object[] { user.getLogin(), existingPower, newPower });
} else if (existingPower > newPower) {
MailMessage msg = new MailMessage();
User admin = eventBean.getCurrentEvent().getOrganiser().getAdmin();
......@@ -139,21 +157,22 @@ public class CardTemplateBean implements CardTemplateBeanLocal {
msg.setSubject("User " + user.getLogin() + " has too powerful card!");
msg.setMessage("User ", user.getLogin(), "has too powerful card!\nCurrent power ", existingPower, ". Should be ", newPower, "\n\n-- \nLippukauppa");
mailbean.sendMail(msg);
logger.debug("User {} has too much power old role {} New role {}", new Object[] { user.getLogin(), existingPower, newPower });
logger.info("User {} has too much power old role {} New role {}", new Object[] { user.getLogin(), existingPower, newPower });
} else {
logger.debug("User {} has power {} and roles has power {}", new Object[] { user.getLogin(), existingPower, newPower });
logger.info("User {} has power {} and roles has power {}", new Object[] { user.getLogin(), existingPower, newPower });
}
return biggestCard;
}
@RolesAllowed(UserPermission.S_WRITE_ROLES)
public CardTemplate getUsersCardtype(User user) throws PermissionDeniedException {
List<Role> roles = userbean.findUsersRoles(user);
CardTemplate greatestTemplate = null;
for (Role listrole : roles) {
logger.info("Checking role {}", listrole);
if (greatestTemplate == null || (listrole.getCardTemplate() != null && greatestTemplate.getPower() < listrole.getCardTemplate().getPower())) {
greatestTemplate = listrole.getCardTemplate();
}
......@@ -176,8 +195,42 @@ public class CardTemplateBean implements CardTemplateBeanLocal {
}
@Override
@RolesAllowed(UserPermission.S_WRITE_ROLES)
public List<PrintedCard> findActiveCards() {
return this.printedcardfacade.findAllEnabled(eventBean.getCurrentEvent());
}
@RolesAllowed(UserPermission.S_WRITE_ROLES)
@Override
public CardTemplate save(CardTemplate card) {
return cdFacade.merge(card);
}
@Override
public PrintedCard getCard(Integer id) {
return printedcardfacade.find(id);
}
@Override
public List<PrintedCard> getCards(User user) {
return printedcardfacade.getCards(user);
}
@Override
public CardTemplate saveImage(CardTemplate cardTemplate, byte[] bytes) throws IOException {
cardTemplate = cdFacade.find(cardTemplate.getId());
BufferedImage base = ImageIO.read(new ByteArrayInputStream(bytes));
ByteArrayOutputStream ostr = new ByteArrayOutputStream();
ImageIO.write(base, "jpeg", ostr);
cardTemplate.setImage(ostr.toByteArray());
return cardTemplate;
}
@Override
public List<CardTemplate> findAll() {
return cdFacade.findAll();
}
}
package fi.insomnia.bortal.beans;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import fi.insomnia.bortal.facade.NewsGroupFacade;
import fi.insomnia.bortal.model.News;
import fi.insomnia.bortal.model.NewsGroup;
/**
* Session Bean implementation class GameBean
......@@ -30,18 +24,4 @@ public class GameBean implements GameBeanLocal {
// TODO Auto-generated constructor stub
}
@Override
public List<News> getNews() {
ArrayList<News> retlist = new ArrayList<News>();
NewsGroup ng = ngfacade.findByName(eventbean.getCurrentEvent(), "game");
for (News n : ng.getNews()) {
if ((n.getPublish() == null || n.getPublish().after(Calendar.getInstance())) && (n.getExpire() == null || n.getExpire().before(Calendar.getInstance()))) {
retlist.add(n);
}
}
return retlist;
}
}
......@@ -14,6 +14,7 @@ import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.enums.BortalApplication;
import fi.insomnia.bortal.enums.apps.IAppPermission;
import fi.insomnia.bortal.enums.apps.SpecialPermission;
import fi.insomnia.bortal.enums.apps.UserPermission;
import fi.insomnia.bortal.facade.UserFacade;
import fi.insomnia.bortal.model.ApplicationPermission;
import fi.insomnia.bortal.model.LanEvent;
......@@ -74,6 +75,8 @@ public class JaasBean implements JaasBeanLocal, JaasBeanRemote {
logger.info("Fetching groupNames for user {}", user);
User usr = userbean.getUser(user);
HashSet<String> roleset = new HashSet<String>();
roleset.add(UserPermission.ANYUSER.getFullName());
if (usr == null) {
usr = permbean.getAnonUser();
roleset.add(SpecialPermission.ANONYMOUS.name());
......
package fi.insomnia.bortal.beans;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.security.DeclareRoles;
......@@ -8,8 +9,9 @@ import javax.ejb.EJB;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import fi.insomnia.bortal.facade.NewsFacade;
import fi.insomnia.bortal.facade.NewsGroupFacade;
import fi.insomnia.bortal.model.EventPk;
import fi.insomnia.bortal.model.News;
import fi.insomnia.bortal.model.NewsGroup;
/**
......@@ -17,45 +19,70 @@ import fi.insomnia.bortal.model.NewsGroup;
*/
@Stateless
@LocalBean
@DeclareRoles({ "ROLE_MANAGEMENT/READ", "ROLE_MANAGEMENT/WRITE" })
@DeclareRoles({ "NEWS/MANAGE" })
public class NewsBean implements NewsBeanLocal {
@EJB
private NewsGroupFacade ngfacade;
@EJB
private EventBeanLocal eventbean;
@EJB
private PermissionBeanLocal permbean;
@EJB
private NewsFacade newsfacade;
@Override
public NewsGroup findByName(String groupname) {
return ngfacade.findByName(eventbean.getCurrentEvent(), groupname);
NewsGroup ret = ngfacade.findByName(groupname);
return ret;
}
@Override
@RolesAllowed("ROLE_MANAGEMENT/READ")
@RolesAllowed("NEWS/MANAGE")
public List<NewsGroup> findAll() {
return ngfacade.findAll(eventbean.getCurrentEvent());
return ngfacade.findNews();
}
@Override
@RolesAllowed("ROLE_MANAGEMENT/READ")
@RolesAllowed("NEWS/MANAGE")
public NewsGroup findById(int newsgroupid) {
return ngfacade.find(eventbean.getCurrentEvent(), newsgroupid);
return ngfacade.find(newsgroupid);
}
@Override
@RolesAllowed("ROLE_MANAGEMENT/WRITE")
@RolesAllowed("NEWS/MANAGE")
public NewsGroup merge(NewsGroup newsgroup) {
return ngfacade.merge(newsgroup);
}
@Override
@RolesAllowed("ROLE_MANAGEMENT/WRITE")
@RolesAllowed("NEWS/MANAGE")
public void createNewsgroup(NewsGroup newsgroup) {
newsgroup.setId(new EventPk(eventbean.getCurrentEvent()));
newsgroup.setEvent(eventbean.getCurrentEvent());
ngfacade.create(newsgroup);
}
@Override
public News createNews(NewsGroup newsgroup) {
newsgroup = ngfacade.find(newsgroup.getId());
if (newsgroup.getNews() == null)
{
newsgroup.setNews(new ArrayList<News>());
}
News ret = new News(newsgroup);
newsgroup.getNews().add(ret);
return ret;
}
@Override
public News saveNews(News news) {
return newsfacade.merge(news);
}
@Override
public News findNews(Integer newsid) {
return newsfacade.find(newsid);
}
}
......@@ -14,6 +14,7 @@ import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.enums.apps.BillPermission;
import fi.insomnia.bortal.enums.apps.IAppPermission;
import fi.insomnia.bortal.enums.apps.MapPermission;
import fi.insomnia.bortal.enums.apps.NewsPermission;
import fi.insomnia.bortal.enums.apps.ShopPermission;
import fi.insomnia.bortal.enums.apps.SpecialPermission;
import fi.insomnia.bortal.enums.apps.UserPermission;
......@@ -32,6 +33,7 @@ import fi.insomnia.bortal.model.User;
UserPermission.S_VIEW_SELF,
UserPermission.S_WRITE_ROLES,
UserPermission.S_READ_ROLES,
UserPermission.S_ANYUSER,
MapPermission.S_VIEW,
MapPermission.S_MANAGE_MAPS,
......@@ -49,6 +51,8 @@ import fi.insomnia.bortal.model.User;
BillPermission.S_WRITE_ALL,
BillPermission.S_VIEW_OWN,
NewsPermission.S_MANAGE,
SpecialPermission.S_SUPERADMIN,
SpecialPermission.S_USER,
SpecialPermission.S_ANONYMOUS,
......@@ -77,9 +81,9 @@ public class PermissionBean implements PermissionBeanLocal {
if (perm == null)
{
return true;
return false;
}
return perm == null || context.isCallerInRole(perm.getFullName());
return context.isCallerInRole(perm.getFullName());
}
......
......@@ -46,7 +46,7 @@ public class ReaderBean implements ReaderBeanLocal {
public ReaderEvent checkTag(String ident, String tag, String hash) {
LanEvent ev = eventbean.getCurrentEvent();
PrintedCard card = cardfacade.findByRfid(ev, tag);
PrintedCard card = cardfacade.findByRfid(tag);
ReaderEvent ret = null;
logger.debug("Found card by rfid: {}", card);
if (card != null) {
......@@ -97,7 +97,7 @@ public class ReaderBean implements ReaderBeanLocal {
}
}
}
ReaderEvent ret = new ReaderEvent(ev, Calendar.getInstance(), card, reader);
ReaderEvent ret = new ReaderEvent(Calendar.getInstance(), card, reader);
ret.setGamePoint(reader.getGamepoints());
ret.setReader(reader);
reader.getEvents().add(ret);
......
......@@ -20,6 +20,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.enums.apps.IAppPermission;
import fi.insomnia.bortal.enums.apps.UserPermission;
import fi.insomnia.bortal.facade.RoleFacade;
import fi.insomnia.bortal.model.ApplicationPermission;
import fi.insomnia.bortal.model.LanEvent;
......@@ -30,7 +31,7 @@ import fi.insomnia.bortal.model.Role;
* @author tuukka
*/
@Stateless
@DeclareRoles({ "USER/READ_ROLES", "USER/WRITE_ROLES" })
@DeclareRoles({ UserPermission.S_READ_ROLES, UserPermission.S_WRITE_ROLES })
public class RoleBean implements RoleBeanLocal {
// private static final String PUBLIC_ROLE_NAME =
......@@ -44,30 +45,30 @@ public class RoleBean implements RoleBeanLocal {
private RoleFacade roleFacade;
@Override
@RolesAllowed("USER/READ_ROLES")
@RolesAllowed(UserPermission.S_READ_ROLES)
public List<Role> listRoles() {
return listRoles(eventBean.getCurrentEvent());
}
@RolesAllowed("USER/READ_ROLES")
@RolesAllowed(UserPermission.S_READ_ROLES)
public List<Role> listRoles(LanEvent event) {
return roleFacade.findAll(event);
}
@Override
@RolesAllowed("USER/WRITE_ROLES")
@RolesAllowed(UserPermission.S_WRITE_ROLES)
public Role mergeChanges(Role role) {
return roleFacade.merge(role);
}
@Override
@RolesAllowed("USER/WRITE_ROLES")
@RolesAllowed(UserPermission.S_WRITE_ROLES)
public void create(Role role) {
roleFacade.create(role);
}
@Override
@RolesAllowed("USER/READ_ROLES")
@RolesAllowed(UserPermission.S_READ_ROLES)
public List<Role> getPossibleParents(Role role) {
List<Role> roleList = listRoles();
......@@ -138,7 +139,7 @@ public class RoleBean implements RoleBeanLocal {
}
@Override
@RolesAllowed("USER/WRITE_ROLES")
@RolesAllowed(UserPermission.S_WRITE_ROLES)
public Role setPermissions(Role role, List<IAppPermission> newPerms) {
role = roleFacade.find(role.getId());
List<ApplicationPermission> permissions = role.getPermissions();
......
package fi.insomnia.bortal.beans;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collection;
......@@ -12,6 +16,7 @@ import javax.annotation.security.RolesAllowed;
import javax.ejb.EJB;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.imageio.ImageIO;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
......@@ -75,6 +80,9 @@ public class UserBean implements UserBeanLocal {
private GroupMembershipFacade gmfacade;
@EJB
private UserImageFacade imagefacade;
@Override
@RolesAllowed(UserPermission.S_VIEW_ALL)
public List<User> getUsers() {
......@@ -180,6 +188,12 @@ public class UserBean implements UserBeanLocal {
}
@Override
public UserImage findUserimageFORCE(Integer id)
{
return userimagefacade.find(id);
}
@Override
public UserImage findUserImage(int id) throws PermissionDeniedException {
UserImage ret = null;
......@@ -305,4 +319,39 @@ public class UserBean implements UserBeanLocal {
userFacade.create(user);
}
@Override
public UserImage saveCroppedImage(UserImage currimage, int left, int top, int width, int height) throws IOException {
currimage = imagefacade.find(currimage.getId());
User user = currimage.getUser();
logger.info("Current image {}, current user {}", currimage, user);
user = userFacade.find(user.getId());
ByteArrayInputStream naamastream = new
ByteArrayInputStream(currimage.getImageData());
BufferedImage face;
face = ImageIO.read(naamastream);
BufferedImage newFace = face.getSubimage(left, top, width, height);
ByteArrayOutputStream naamaout = new ByteArrayOutputStream();
ImageIO.write(newFace, "jpeg", naamaout);
UserImage ret = new UserImage(user);
ret.setMimeType(currimage.getMimeType());
User curruser = permbean.getCurrentUser();
ret.setDescription("Cropped by: [" + curruser.getId() + "] " + curruser.getWholeName() + " from image: " + currimage.getId());
ret.setImageData(naamaout.toByteArray());
ret.setMimeType(currimage.getMimeType());
if (user.getUserImageList() == null)
{
user.setUserImageList(new ArrayList<UserImage>());
}
user.getUserImageList().add(ret);
user.setCurrentImage(ret);
return ret;
}
}
......@@ -12,7 +12,6 @@ import java.util.Date;
import javax.annotation.Resource;
import javax.annotation.security.DeclareRoles;
import javax.annotation.security.RolesAllowed;
import javax.ejb.EJB;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
......@@ -76,29 +75,34 @@ public class UtilBean implements UtilBeanLocal {
return true;
}
@Override
@RolesAllowed("SUPERADMIN")
public void checkAllUsersImages() throws PermissionDeniedException {
for (User usr : userbean.getUsers()) {
convertImage(usr);
}
}
// @Override
// @RolesAllowed("SUPERADMIN")
// public void checkAllUsersImages() throws PermissionDeniedException {
//
// for (User usr : userbean.getUsers()) {
// convertImage(usr);
// }
//
// }
@Override
public boolean convertImage(User user) throws PermissionDeniedException {
user = userbean.mergeChanges(user);
UserImage oldpic = user.getCurrentImage();
if (oldpic == null || oldpic.getMimeType() == null || oldpic.getMimeType().isEmpty()) {
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());
logger.debug("converting users image id {}, type {} to jpeg",
oldpic.getId(), oldpic.getMimeType());
ByteArrayInputStream naamastream = new ByteArrayInputStream(oldpic.getImageData());
ByteArrayInputStream naamastream = new
ByteArrayInputStream(oldpic.getImageData());
try {
BufferedImage face = ImageIO.read(naamastream);
......@@ -106,11 +110,14 @@ public class UtilBean implements UtilBeanLocal {
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);
BigDecimal scale = new BigDecimal(SCALEWIDTH).divide(new
BigDecimal(face.getWidth()), 5, RoundingMode.HALF_UP);
int height = scale.multiply(new BigDecimal(face.getHeight())).intValue();
logger.info("Imagetype: {}", face.getType());
BufferedImage scaledImage = new BufferedImage(
SCALEWIDTH, height, face.getType());
......@@ -135,8 +142,8 @@ public class UtilBean implements UtilBeanLocal {
user.setCurrentImage(img);
user.getUserImageList().add(img);
user.getUserImageList().remove(oldpic);
userbean.mergeChanges(user);
} catch (IOException e) {
logger.warn("error converting image ", e);
}
......
......@@ -4,21 +4,23 @@ import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import fi.insomnia.bortal.model.Location;
@Stateless
@LocalBean
public class LocationFacade extends EventChildGenericFacade<Location> {
public class LocationFacade extends GenericFacade<Integer, Location> {
@PersistenceContext
private EntityManager em;
@PersistenceContext
private EntityManager em;
public LocationFacade() {
super(Location.class);
}
public LocationFacade() {
super(Location.class);
}
protected EntityManager getEm() {
return em;
}
@Override
protected EntityManager getEm() {
return em;
}
}
......@@ -4,21 +4,23 @@ import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import fi.insomnia.bortal.model.News;
@Stateless
@LocalBean
public class NewsFacade extends EventChildGenericFacade<News> {
public class NewsFacade extends GenericFacade<Integer, News> {
@PersistenceContext
private EntityManager em;
@PersistenceContext
private EntityManager em;
public NewsFacade() {
super(News.class);
}
public NewsFacade() {
super(News.class);
}
protected EntityManager getEm() {
return em;
}
@Override
protected EntityManager getEm() {
return em;
}
}
package fi.insomnia.bortal.facade;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.TypedQuery;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;
import fi.insomnia.bortal.model.LanEvent;
import fi.insomnia.bortal.beans.EventBeanLocal;
import fi.insomnia.bortal.model.NewsGroup;
import fi.insomnia.bortal.model.NewsGroup_;
@Stateless
@LocalBean
public class NewsGroupFacade extends EventChildGenericFacade<NewsGroup> {
@PersistenceContext
private EntityManager em;
public NewsGroupFacade() {
super(NewsGroup.class);
}
protected EntityManager getEm() {
return em;
}
public NewsGroup findByName(LanEvent e, String name) {
TypedQuery<NewsGroup> q = em.createQuery("select ng from NewsGroup ng where ng.name = :name", NewsGroup.class);
q.setParameter("name", name);
NewsGroup ret = getSingleNullableResult(q);
if (ret == null) {
ret = new NewsGroup(e);
ret.setName(name);
this.create(ret);
}
return ret;
}
public class NewsGroupFacade extends GenericFacade<Integer, NewsGroup> {
@PersistenceContext
private EntityManager em;
public NewsGroupFacade() {
super(NewsGroup.class);
}
@Override
protected EntityManager getEm() {
return em;
}
@EJB
private EventBeanLocal eventbean;
public NewsGroup findByName(String name) {
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<NewsGroup> cq = cb.createQuery(NewsGroup.class);
Root<NewsGroup> root = cq.from(NewsGroup.class);
cq.where(cb.equal(root.get(NewsGroup_.event), eventbean.getCurrentEvent()),
cb.equal(root.get(NewsGroup_.name), name)
);
NewsGroup ret = getSingleNullableResult(em.createQuery(cq));
if (ret == null) {
ret = new NewsGroup(eventbean.getCurrentEvent());
ret.setName(name);
this.create(ret);
}
return ret;
}
public List<NewsGroup> findNews() {
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<NewsGroup> cq = cb.createQuery(NewsGroup.class);
Root<NewsGroup> root = cq.from(NewsGroup.class);
cq.where(cb.equal(root.get(NewsGroup_.event), eventbean.getCurrentEvent()));
return em.createQuery(cq).getResultList();
}
}
......@@ -3,19 +3,24 @@ package fi.insomnia.bortal.facade;
import java.util.ArrayList;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.TypedQuery;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;
import fi.insomnia.bortal.beans.EventBeanLocal;
import fi.insomnia.bortal.model.LanEvent;
import fi.insomnia.bortal.model.PrintedCard;
import fi.insomnia.bortal.model.PrintedCard_;
import fi.insomnia.bortal.model.User;
@Stateless
@LocalBean
public class PrintedCardFacade extends EventChildGenericFacade<PrintedCard> {
public class PrintedCardFacade extends GenericFacade<Integer, PrintedCard> {
@PersistenceContext
private EntityManager em;
......@@ -33,7 +38,7 @@ public class PrintedCardFacade extends EventChildGenericFacade<PrintedCard> {
ArrayList<PrintedCard> retlist = new ArrayList<PrintedCard>();
for (PrintedCard pc : user.getPrintedCards()) {
if (pc.getId().getEventId().equals(event.getId())) {
if (pc.getEvent().equals(event)) {
retlist.add(pc);
}
}
......@@ -46,17 +51,41 @@ public class PrintedCardFacade extends EventChildGenericFacade<PrintedCard> {
return retlist;
}
public PrintedCard findByRfid(LanEvent event, String uid) {
TypedQuery<PrintedCard> q = em.createQuery("select pc from PrintedCard pc where pc.rfidUid = :uid and pc.id.eventId = :eventid ", PrintedCard.class);
q.setParameter("uid", uid);
q.setParameter("eventid", event.getId());
return getSingleNullableResult(q);
@EJB
private EventBeanLocal eventbean;
public PrintedCard findByRfid(String uid) {
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<PrintedCard> cq = cb.createQuery(PrintedCard.class);
Root<PrintedCard> root = cq.from(PrintedCard.class);
cq.where(cb.equal(root.get(PrintedCard_.rfidUid), uid),
cb.equal(root.get(PrintedCard_.event), eventbean.getCurrentEvent()));
return getSingleNullableResult(em.createQuery(cq));
}
public List<PrintedCard> findAllEnabled(LanEvent currentEvent) {
TypedQuery<PrintedCard> q = em.createQuery("select pc from PrintedCard pc where pc.id.eventId = :eventid and pc.enabled = true", PrintedCard.class);
q.setParameter("eventid", currentEvent.getId());
return q.getResultList();
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<PrintedCard> cq = cb.createQuery(PrintedCard.class);
Root<PrintedCard> root = cq.from(PrintedCard.class);
cq.where(cb.isTrue(root.get(PrintedCard_.enabled)),
cb.equal(root.get(PrintedCard_.event), eventbean.getCurrentEvent()));
return em.createQuery(cq).getResultList();
}
public List<PrintedCard> getCards(User user) {
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<PrintedCard> cq = cb.createQuery(PrintedCard.class);
Root<PrintedCard> root = cq.from(PrintedCard.class);
cq.where(cb.equal(root.get(PrintedCard_.user), user),
cb.equal(root.get(PrintedCard_.event), eventbean.getCurrentEvent()));
return em.createQuery(cq).getResultList();
}
}
......@@ -4,21 +4,23 @@ import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import fi.insomnia.bortal.model.ReaderEvent;
@Stateless
@LocalBean
public class ReaderEventFacade extends EventChildGenericFacade<ReaderEvent> {
public class ReaderEventFacade extends GenericFacade<Integer, ReaderEvent> {
@PersistenceContext
private EntityManager em;
@PersistenceContext
private EntityManager em;
public ReaderEventFacade() {
super(ReaderEvent.class);
}
public ReaderEventFacade() {
super(ReaderEvent.class);
}
protected EntityManager getEm() {
return em;
}
@Override
protected EntityManager getEm() {
return em;
}
}
......@@ -15,7 +15,7 @@ import fi.insomnia.bortal.model.Reader_;
@Stateless
@LocalBean
public class ReaderFacade extends EventChildGenericFacade<Reader> {
public class ReaderFacade extends GenericFacade<Integer, Reader> {
@PersistenceContext
private EntityManager em;
......
package fi.insomnia.bortal.beans;
import java.io.IOException;
import java.util.List;
import javax.ejb.Local;
......@@ -28,4 +29,14 @@ public interface CardTemplateBeanLocal extends EntityFinderBean<CardTemplate> {
List<PrintedCard> findActiveCards();
CardTemplate save(CardTemplate card);
PrintedCard getCard(Integer idParam);
List<PrintedCard> getCards(User user);
CardTemplate saveImage(CardTemplate cardTemplate, byte[] bytes) throws IOException;
List<CardTemplate> findAll();
}
package fi.insomnia.bortal.beans;
import java.util.List;
import javax.ejb.Local;
import fi.insomnia.bortal.model.News;
@Local
public interface GameBeanLocal {
List<News> getNews();
}
......@@ -4,6 +4,7 @@ import java.util.List;
import javax.ejb.Local;
import fi.insomnia.bortal.model.News;
import fi.insomnia.bortal.model.NewsGroup;
@Local
......@@ -19,4 +20,10 @@ public interface NewsBeanLocal {
void createNewsgroup(NewsGroup newsgroup);
News createNews(NewsGroup newsgroup);
News saveNews(News news);
News findNews(Integer newsid);
}
package fi.insomnia.bortal.beans;
import java.io.IOException;
import java.util.List;
import javax.ejb.Local;
......@@ -53,4 +54,8 @@ public interface UserBeanLocal {
void createFromToken(User user, GroupMembership gm);
UserImage findUserimageFORCE(Integer id);
UserImage saveCroppedImage(UserImage currentImage, int left, int top, int width, int height) throws IOException;
}
......@@ -14,6 +14,6 @@ public interface UtilBeanLocal {
boolean convertImage(User user) throws PermissionDeniedException;
void checkAllUsersImages() throws PermissionDeniedException;
// void checkAllUsersImages() throws PermissionDeniedException;
}
......@@ -244,7 +244,7 @@
<entity>
<entity-name>fi.insomnia.bortal.model.Reader</entity-name>
<entity-width>120</entity-width>
<entity-height>30</entity-height>
<entity-height>268</entity-height>
<entity-X-Coordinate>413</entity-X-Coordinate>
<entity-Y-Coordinate>1877</entity-Y-Coordinate>
<primary-collapsed>false</primary-collapsed>
......@@ -333,8 +333,8 @@
<entity-name>fi.insomnia.bortal.model.News</entity-name>
<entity-width>120</entity-width>
<entity-height>30</entity-height>
<entity-X-Coordinate>966</entity-X-Coordinate>
<entity-Y-Coordinate>1090</entity-Y-Coordinate>
<entity-X-Coordinate>920</entity-X-Coordinate>
<entity-Y-Coordinate>1127</entity-Y-Coordinate>
<primary-collapsed>false</primary-collapsed>
<relation-collapsed>false</relation-collapsed>
<basic-collapsed>false</basic-collapsed>
......@@ -343,7 +343,7 @@
<entity>
<entity-name>fi.insomnia.bortal.model.NewsGroup</entity-name>
<entity-width>120</entity-width>
<entity-height>30</entity-height>
<entity-height>208</entity-height>
<entity-X-Coordinate>663</entity-X-Coordinate>
<entity-Y-Coordinate>1150</entity-Y-Coordinate>
<primary-collapsed>false</primary-collapsed>
......@@ -366,8 +366,8 @@
<entity-name>fi.insomnia.bortal.model.PollQuestion</entity-name>
<entity-width>120</entity-width>
<entity-height>30</entity-height>
<entity-X-Coordinate>1152</entity-X-Coordinate>
<entity-Y-Coordinate>1720</entity-Y-Coordinate>
<entity-X-Coordinate>1274</entity-X-Coordinate>
<entity-Y-Coordinate>1706</entity-Y-Coordinate>
<primary-collapsed>false</primary-collapsed>
<relation-collapsed>false</relation-collapsed>
<basic-collapsed>false</basic-collapsed>
......@@ -388,8 +388,8 @@
<entity-name>fi.insomnia.bortal.model.PollAnswer</entity-name>
<entity-width>120</entity-width>
<entity-height>30</entity-height>
<entity-X-Coordinate>1315</entity-X-Coordinate>
<entity-Y-Coordinate>1423</entity-Y-Coordinate>
<entity-X-Coordinate>1236</entity-X-Coordinate>
<entity-Y-Coordinate>1323</entity-Y-Coordinate>
<primary-collapsed>false</primary-collapsed>
<relation-collapsed>false</relation-collapsed>
<basic-collapsed>false</basic-collapsed>
......
......@@ -86,9 +86,7 @@ public class AccountEvent extends GenericEventChild {
* The product user has acquired and this this AccountEvent is a reference
* to.
*/
@JoinColumns({
@JoinColumn(name = "product_id", referencedColumnName = "id", nullable = false),
@JoinColumn(name = "event_id", referencedColumnName = "id", nullable = false, updatable = false, insertable = false) })
@JoinColumn(name = "product_id", referencedColumnName = "id", nullable = false)
@ManyToOne(optional = false)
private Product product;
......
......@@ -55,7 +55,7 @@ public class CardTemplate extends GenericEntity {
public CardTemplate(LanEvent event) {
super();
this.event = event;
this.setEvent(event);
}
public CardTemplate(LanEvent event, String templateName) {
......@@ -107,4 +107,8 @@ public class CardTemplate extends GenericEntity {
return power;
}
public void setEvent(LanEvent event) {
this.event = event;
}
}
......@@ -81,7 +81,7 @@ public class LanEvent extends GenericEntity {
@OneToMany(cascade = CascadeType.ALL, mappedBy = "event")
private List<Compo> compos;
@OneToMany(mappedBy = "event")
@OneToMany(mappedBy = "event", cascade = CascadeType.ALL)
private List<CardTemplate> cardTemplates;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "event")
......
......@@ -8,8 +8,8 @@ import java.util.List;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
......@@ -18,13 +18,18 @@ import javax.persistence.Table;
*/
@Entity
@Table(name = "locations")
@NamedQueries({
@NamedQuery(name = "Location.findAll", query = "SELECT l FROM Location l"),
@NamedQuery(name = "Location.findByLocationName", query = "SELECT l FROM Location l WHERE l.name = :name") })
public class Location extends GenericEventChild {
// @NamedQueries({
// @NamedQuery(name = "Location.findAll", query = "SELECT l FROM Location l"),
//
// @NamedQuery(name = "Location.findByLocationName", query =
// "SELECT l FROM Location l WHERE l.name = :name") })
public class Location extends GenericEntity {
private static final long serialVersionUID = 1L;
public static final String EVENT_ID_COLUMN = "event_id";
@ManyToOne()
@JoinColumn(name = EVENT_ID_COLUMN, nullable = false)
private LanEvent event;
@Column(name = "location_name", nullable = false)
private String name;
......@@ -40,11 +45,13 @@ public class Location extends GenericEventChild {
}
public Location(LanEvent event) {
super(event);
super();
this.event = event;
}
public Location(LanEvent event, String name) {
super(event);
super();
this.event = event;
this.name = name;
}
......@@ -72,4 +79,12 @@ public class Location extends GenericEventChild {
this.printedCardsAtLocation = printedCardList;
}
public LanEvent getEvent() {
return event;
}
public void setEvent(LanEvent event) {
this.event = event;
}
}
......@@ -4,16 +4,13 @@
*/
package fi.insomnia.bortal.model;
import java.util.Calendar;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.JoinColumns;
import javax.persistence.Lob;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
......@@ -24,24 +21,15 @@ import javax.persistence.TemporalType;
*/
@Entity
@Table(name = "news")
@NamedQueries({
@NamedQuery(name = "News.findAll", query = "SELECT n FROM News n"),
@NamedQuery(name = "News.findByTitle", query = "SELECT n FROM News n WHERE n.title = :title"),
@NamedQuery(name = "News.findByBody", query = "SELECT n FROM News n WHERE n.body = :body"),
@NamedQuery(name = "News.findByAbstract", query = "SELECT n FROM News n WHERE n.bodyAbstract = :bodyAbstract"),
@NamedQuery(name = "News.findByPublish", query = "SELECT n FROM News n WHERE n.publish = :publish"),
@NamedQuery(name = "News.findByExpire", query = "SELECT n FROM News n WHERE n.expire = :expire"),
@NamedQuery(name = "News.findByPriority", query = "SELECT n FROM News n WHERE n.priority = :priority") })
public class News extends GenericEventChild {
public class News extends GenericEntity {
private static final long serialVersionUID = 498925968565236275L;
@Column(name = "title", nullable = false)
@Column(name = "title")
private String title;
@Lob
@Column(name = "body", nullable = false)
@Column(name = "body")
private String body;
@Lob
......@@ -50,31 +38,51 @@ public class News extends GenericEventChild {
@Column(name = "publish")
@Temporal(TemporalType.TIMESTAMP)
private Calendar publish;
private Date publish = new Date();
@Column(name = "expire")
@Temporal(TemporalType.TIMESTAMP)
private Calendar expire;
private Date expire;
public Date getPublish() {
return publish;
}
public void setPublish(Date publish) {
this.publish = publish;
}
public Date getExpire() {
return expire;
}
public void setExpire(Date expire) {
this.expire = expire;
}
@Column(name = "priority", nullable = false)
private int priority;
private int priority = 10;
@JoinColumns({
@JoinColumn(name = "news_group_id", referencedColumnName = "id", nullable = false),
@JoinColumn(name = "event_id", referencedColumnName = "event_id", nullable = false, updatable = false, insertable = false) })
@ManyToOne(optional = false)
@JoinColumn(nullable = false, name = "group_id")
private NewsGroup group;
public News() {
super();
}
public News(LanEvent event, String title, int priority) {
super(event);
public News(NewsGroup group, String title, int priority) {
super();
this.group = group;
this.title = title;
this.priority = priority;
}
public News(NewsGroup newsgroup) {
super();
group = newsgroup;
}
public String getTitle() {
return title;
}
......@@ -99,22 +107,6 @@ public class News extends GenericEventChild {
this.bodyAbstract = abstract1;
}
public Calendar getPublish() {
return publish;
}
public void setPublish(Calendar publish) {
this.publish = publish;
}
public Calendar getExpire() {
return expire;
}
public void setExpire(Calendar expire) {
this.expire = expire;
}
public int getPriority() {
return priority;
}
......
......@@ -10,35 +10,32 @@ import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.JoinColumns;
import javax.persistence.JoinTable;
import javax.persistence.Lob;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.OrderBy;
import javax.persistence.Table;
import javax.persistence.UniqueConstraint;
import org.eclipse.persistence.annotations.PrivateOwned;
/**
*
* @author jkj
*/
@Entity
@Table(name = "news_groups", uniqueConstraints = @UniqueConstraint(columnNames = { "event_id", "group_name" }))
@NamedQueries({
@NamedQuery(name = "NewsGroup.findAll", query = "SELECT n FROM NewsGroup n"),
@NamedQuery(name = "NewsGroup.findByName", query = "SELECT n FROM NewsGroup n WHERE n.name = :name"),
@NamedQuery(name = "NewsGroup.findByDescription", query = "SELECT n FROM NewsGroup n WHERE n.description = :description"),
@NamedQuery(name = "NewsGroup.findByPriority", query = "SELECT n FROM NewsGroup n WHERE n.priority = :priority") })
public class NewsGroup extends GenericEventChild {
public class NewsGroup extends GenericEntity {
/**
*
*/
private static final long serialVersionUID = 4014463478275469802L;
public static final String EVENT_ID_COLUMN = "event_id";
@ManyToOne()
@JoinColumn(name = EVENT_ID_COLUMN, nullable = false)
private LanEvent event;
@Column(name = "group_name", nullable = false)
private String name;
......@@ -50,19 +47,15 @@ public class NewsGroup extends GenericEventChild {
@Column(name = "priority", nullable = false)
private int priority;
@ManyToOne(optional = false)
@JoinColumns({ @JoinColumn(name = "writer_role_id", referencedColumnName = Role.ID_COLUMN, nullable = false), })
@ManyToOne()
@JoinColumn(name = "writer_role_id", referencedColumnName = Role.ID_COLUMN)
private Role writerRole;
@OrderBy("priority")
@OneToMany(cascade = CascadeType.ALL, mappedBy = "group")
private List<News> news;
@ManyToMany
@JoinTable(name = "read_group_roles", joinColumns = {
@JoinColumn(name = "read_group_id", referencedColumnName = ID_COLUMN),
@JoinColumn(name = "event_id", referencedColumnName = EVENT_ID_COLUMN) }, inverseJoinColumns = {
@JoinColumn(name = "role_id", referencedColumnName = Role.ID_COLUMN) })
@ManyToMany()
private List<Role> readerRoles;
public NewsGroup() {
......@@ -70,13 +63,8 @@ public class NewsGroup extends GenericEventChild {
}
public NewsGroup(LanEvent event) {
super(event);
}
public NewsGroup(LanEvent event, String groupName, int priority) {
super(event);
this.name = groupName;
this.priority = priority;
super();
this.setEvent(event);
}
public String getName() {
......@@ -104,6 +92,8 @@ public class NewsGroup extends GenericEventChild {
}
@OrderBy("priority")
@OneToMany(mappedBy = "group", cascade = CascadeType.ALL)
@PrivateOwned
public List<News> getNews() {
return news;
}
......@@ -127,4 +117,12 @@ public class NewsGroup extends GenericEventChild {
public List<Role> getReaderRoles() {
return readerRoles;
}
public LanEvent getEvent() {
return event;
}
public void setEvent(LanEvent event) {
this.event = event;
}
}
......@@ -15,10 +15,7 @@ import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.JoinColumns;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
......@@ -33,19 +30,28 @@ import javax.persistence.UniqueConstraint;
@Table(name = "printed_cards", uniqueConstraints = {
@UniqueConstraint(columnNames = { "event_id", "rfid_uid", }),
@UniqueConstraint(columnNames = { "event_id", "barcode" }) })
@NamedQueries({
@NamedQuery(name = "PrintedCard.findAll", query = "SELECT p FROM PrintedCard p"),
@NamedQuery(name = "PrintedCard.findByPrintTime", query = "SELECT p FROM PrintedCard p WHERE p.printTime = :printTime"),
@NamedQuery(name = "PrintedCard.findByEnabled", query = "SELECT p FROM PrintedCard p WHERE p.enabled = :enabled"),
@NamedQuery(name = "PrintedCard.findByRfidUid", query = "SELECT p FROM PrintedCard p WHERE p.rfidUid = :rfidUid") })
public class PrintedCard extends GenericEventChild {
// @NamedQueries({
// @NamedQuery(name = "PrintedCard.findAll", query =
// "SELECT p FROM PrintedCard p"),
//
// @NamedQuery(name = "PrintedCard.findByPrintTime", query =
// "SELECT p FROM PrintedCard p WHERE p.printTime = :printTime"),
// @NamedQuery(name = "PrintedCard.findByEnabled", query =
// "SELECT p FROM PrintedCard p WHERE p.enabled = :enabled"),
// @NamedQuery(name = "PrintedCard.findByRfidUid", query =
// "SELECT p FROM PrintedCard p WHERE p.rfidUid = :rfidUid") })
public class PrintedCard extends GenericEntity {
/**
*
*/
private static final long serialVersionUID = 8603481931116401027L;
public static final String EVENT_ID_COLUMN = "event_id";
@ManyToOne()
@JoinColumn(name = EVENT_ID_COLUMN, nullable = false)
private LanEvent event;
@Column(name = "print_time")
@Temporal(TemporalType.TIMESTAMP)
private Calendar printTime;
......@@ -65,9 +71,7 @@ public class PrintedCard extends GenericEventChild {
@Column(name = "print_count", nullable = false)
private int printCount = 0;
@JoinColumns({
@JoinColumn(name = "current_location_id", referencedColumnName = "id"),
@JoinColumn(name = "event_id", referencedColumnName = "event_id", nullable = false, updatable = false, insertable = false) })
@JoinColumn(name = "current_location_id", referencedColumnName = "id")
@ManyToOne
private Location currentLocation;
......@@ -85,12 +89,21 @@ public class PrintedCard extends GenericEventChild {
this.enabled = cardEnabled;
}
public LanEvent getEvent() {
return event;
}
public void setEvent(LanEvent event) {
this.event = event;
}
public PrintedCard() {
super();
}
public PrintedCard(LanEvent event) {
super(event);
super();
this.event = event;
}
public Calendar getPrintTime() {
......
......@@ -10,11 +10,8 @@ import java.util.List;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.JoinColumns;
import javax.persistence.Lob;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.UniqueConstraint;
......@@ -24,12 +21,14 @@ import javax.persistence.UniqueConstraint;
*/
@Entity
@Table(name = "readers", uniqueConstraints = { @UniqueConstraint(columnNames = { "reader_ident", "event_id" }) })
@NamedQueries({
@NamedQuery(name = "Reader.findAll", query = "SELECT r FROM Reader r"),
@NamedQuery(name = "Reader.findByIdentification", query = "SELECT r FROM Reader r WHERE r.identification = :identification"),
@NamedQuery(name = "Reader.findByDescription", query = "SELECT r FROM Reader r WHERE r.description = :description") })
public class Reader extends GenericEventChild {
// @NamedQueries({
// @NamedQuery(name = "Reader.findAll", query = "SELECT r FROM Reader r"),
//
// @NamedQuery(name = "Reader.findByIdentification", query =
// "SELECT r FROM Reader r WHERE r.identification = :identification"),
// @NamedQuery(name = "Reader.findByDescription", query =
// "SELECT r FROM Reader r WHERE r.description = :description") })
public class Reader extends GenericEntity {
public Reader(LanEvent ev, String ident) {
this(ev);
......@@ -41,9 +40,15 @@ public class Reader extends GenericEventChild {
}
public Reader(LanEvent ev) {
super(ev);
super();
this.setEvent(ev);
}
public static final String EVENT_ID_COLUMN = "event_id";
@ManyToOne()
@JoinColumn(name = EVENT_ID_COLUMN, nullable = false)
private LanEvent event;
@Column(nullable = false)
private Integer gamepoints = 0;
@Column(nullable = false)
......@@ -61,9 +66,7 @@ public class Reader extends GenericEventChild {
@Column(name = "reader_description")
private String description;
@JoinColumns({
@JoinColumn(name = "location_id", referencedColumnName = "id"),
@JoinColumn(name = "event_id", referencedColumnName = "event_id", updatable = false, insertable = false) })
@JoinColumn(name = "location_id", referencedColumnName = "id")
@ManyToOne
private Location location;
......@@ -171,4 +174,12 @@ public class Reader extends GenericEventChild {
public List<ReaderEvent> getEvents() {
return events;
}
public LanEvent getEvent() {
return event;
}
public void setEvent(LanEvent event) {
this.event = event;
}
}
......@@ -11,10 +11,7 @@ import java.util.Calendar;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.JoinColumns;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
......@@ -24,12 +21,7 @@ import javax.persistence.TemporalType;
*/
@Entity
@Table(name = "reader_events")
@NamedQueries({
@NamedQuery(name = "ReaderEvent.findAll", query = "SELECT r FROM ReaderEvent r"),
@NamedQuery(name = "ReaderEvent.findByTime", query = "SELECT r FROM ReaderEvent r WHERE r.time = :time"),
@NamedQuery(name = "ReaderEvent.findByValue", query = "SELECT r FROM ReaderEvent r WHERE r.value = :value") })
public class ReaderEvent extends GenericEventChild {
public class ReaderEvent extends GenericEntity {
private static final long serialVersionUID = 1L;
......@@ -43,20 +35,15 @@ public class ReaderEvent extends GenericEventChild {
@Column(nullable = false)
private Integer gamePoint = 0;
@JoinColumns({
@JoinColumn(name = "printed_cards_id", referencedColumnName = "id", nullable = false, updatable = false),
@JoinColumn(name = "event_id", referencedColumnName = "event_id", nullable = false, updatable = false, insertable = false) })
@JoinColumn(name = "printed_cards_id", referencedColumnName = "id", nullable = false, updatable = false)
@ManyToOne(optional = false)
private PrintedCard printedCard;
@JoinColumns({
@JoinColumn(name = "readers_id", referencedColumnName = "id", nullable = false, updatable = false),
@JoinColumn(name = "event_id", referencedColumnName = "event_id", nullable = false, updatable = false, insertable = false) })
@JoinColumn(name = "readers_id", referencedColumnName = "id", nullable = false, updatable = false)
@ManyToOne(optional = false, cascade = ALL)
private Reader reader;
public ReaderEvent(LanEvent event, Calendar eventTime, PrintedCard card, Reader reader) {
this(event);
public ReaderEvent(Calendar eventTime, PrintedCard card, Reader reader) {
this.time = eventTime;
this.printedCard = card;
this.reader = reader;
......@@ -66,10 +53,6 @@ public class ReaderEvent extends GenericEventChild {
super();
}
public ReaderEvent(LanEvent event) {
super(event);
}
public Calendar getTime() {
return time;
}
......
......@@ -3,6 +3,7 @@ package fi.insomnia.bortal.enums;
import fi.insomnia.bortal.enums.apps.BillPermission;
import fi.insomnia.bortal.enums.apps.IAppPermission;
import fi.insomnia.bortal.enums.apps.MapPermission;
import fi.insomnia.bortal.enums.apps.NewsPermission;
import fi.insomnia.bortal.enums.apps.PollPermission;
import fi.insomnia.bortal.enums.apps.ShopPermission;
import fi.insomnia.bortal.enums.apps.UserPermission;
......@@ -16,7 +17,8 @@ public enum BortalApplication {
BILL("Creating, and managing bills", BillPermission.class),
POLL("Poll stuff", PollPermission.class),
MAP("Map management ", MapPermission.class),
SHOP("Product & shop management", ShopPermission.class);
SHOP("Product & shop management", ShopPermission.class),
NEWS("News and other dynamic data", NewsPermission.class);
// BILL("View all bills(r), Mark paid & modify(w), and create own bills (x)",
// BillPermission.class)
// USER_MANAGEMENT("View all users(r), modify users(w), execute actions for user(x) "),
......
......@@ -5,6 +5,8 @@ import fi.insomnia.bortal.enums.BortalApplication;
public enum NewsPermission implements IAppPermission {
MANAGE("Manage newsgroups");
public static final String S_MANAGE = "NEWS/MANAGE";
private String description;
private String fullName;
......@@ -15,7 +17,7 @@ public enum NewsPermission implements IAppPermission {
@Override
public BortalApplication getParent() {
return BortalApplication.SHOP;
return BortalApplication.NEWS;
}
@Override
......
package fi.insomnia.bortal.enums.apps;
public enum SpecialPermission {
SUPERADMIN, USER, ANONYMOUS;
public static final String S_USER = "USER";
......
......@@ -12,7 +12,12 @@ public enum UserPermission implements IAppPermission {
READ_ROLES("View all roles."),
WRITE_ROLES("Modify roles"),
VIEW_ACCOUNTEVENTS("Show other users account events"),
MODIFY_ACCOUNTEVENTS("Modify Account events");
MODIFY_ACCOUNTEVENTS("Modify Account events"),
ANYUSER("All users have this anyways"),
;
;
public static final String S_VIEW_ALL = "USER/VIEW_ALL";
public static final String S_MODIFY = "USER/MODIFY";
......@@ -24,6 +29,7 @@ public enum UserPermission implements IAppPermission {
public static final String S_WRITE_ROLES = "USER/WRITE_ROLES";
public static final String S_VIEW_ACCOUNTEVENTS = "USER/VIEW_ACCOUNTEVENTS";
public static final String S_MODIFY_ACCOUNTEVENTS = "USER/MODIFY_ACCOUNTEVENTS";
public static final String S_ANYUSER = "USER/ANYUSER";
private String description;
private String fullName;
......
<?xml version="1.0" encoding="UTF-8"?>
<pageflow:Pageflow xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:pageflow="http://www.sybase.com/suade/pageflow" id="pf13012981621060" configfile="/LanBortalWeb/WebContent/WEB-INF/faces-config.xml">
<nodes xsi:type="pageflow:PFPage" name="*" x="120" y="60" id="pf131682121330014" referenceLink="//@navigationRule.0/@fromViewId|" outlinks="pf131682121330015" path="*"/>
<nodes xsi:type="pageflow:PFPage" name="*" x="120" y="60" id="pf131682121330014" referenceLink="//@navigationRule.0/@fromViewId|" outlinks="pf131682121330015 pf13196506256640" path="*"/>
<nodes xsi:type="pageflow:PFPage" name="auth/logoutResponse" x="288" y="60" id="pf131682121330016" referenceLink="//@navigationRule.0/@navigationCase.0/@toViewId|" inlinks="pf131682121330015" path="/auth/logoutResponse"/>
<nodes xsi:type="pageflow:PFPage" name="place/placemap" x="276" y="228" id="pf13168224196920" referenceLink="//@navigationRule.1/@navigationCase.0/@toViewId|" outlinks="pf13168224196921" inlinks="pf13168224196921" path="/place/placemap"/>
<nodes xsi:type="pageflow:PFPage" name="user/sendPicture" id="pf13196506256641" referenceLink="//@navigationRule.0/@navigationCase.1/@toViewId|" inlinks="pf13196506256640" path="/user/sendPicture"/>
<links id="pf131682121330015" target="pf131682121330016" source="pf131682121330014" outcome="logoutDone" redirect="true"/>
<links id="pf13168224196921" target="pf13168224196920" source="pf13168224196920" outcome="placesReserved" redirect="true"/>
<links id="pf13196506256640" target="pf13196506256641" source="pf131682121330014" outcome="redirToUserimage" redirect="true"/>
</pageflow:Pageflow>
......@@ -44,13 +44,25 @@
<navigation-rule>
<from-view-id>*</from-view-id>
<navigation-case>
<from-outcome>logoutDone</from-outcome>
<to-view-id>/auth/logoutResponse</to-view-id>
<redirect/>
</navigation-case>
<navigation-case>
<from-outcome>redirToUserimage</from-outcome>
<to-view-id>/user/sendPicture</to-view-id>
<redirect>
<view-param>
<name>userid</name>
<value>#{userView.user.id}</value>
</view-param>
</redirect>
</navigation-case>
</navigation-rule>
<!-- </navigation-rule> -->
<!-- <navigation-rule> -->
<!-- <from-view-id>/role/edit.xhtml</from-view-id> -->
......
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">
<display-name>LanBortalWeb</display-name>
<session-config>
<session-timeout>30</session-timeout>
......@@ -42,6 +42,25 @@
<url-pattern>/Userimage</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>UserCardServlet</servlet-name>
<servlet-class>fi.insomnia.bortal.servlet.UserCardServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>UserCardServlet</servlet-name>
<url-pattern>/UserCard</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>CardTemplateServlet</servlet-name>
<servlet-class>fi.insomnia.bortal.servlet.CardTemplateServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>CardTemplateServlet</servlet-name>
<url-pattern>/CardTemplate</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>PlaceMap</servlet-name>
<servlet-class>fi.insomnia.bortal.servlet.PlaceMap</servlet-class>
</servlet>
......
<!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:products="http://java.sun.com/jsf/composite/tools/products"
xmlns:tools="http://java.sun.com/jsf/composite/tools" xmlns:f="http://java.sun.com/jsf/core"
>
<h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<ui:param name="thispage" value="page.game.list" />
<ui:define name="content">
<ui:repeat var="news" value="#{gameView.indexnews.news}">
<h:outputText escape="false" value="#{news.body}" />
</ui:repeat>
</ui:define>
</ui:composition>
</h:body>
</html>
\ No newline at end of file
......@@ -16,7 +16,7 @@
<f:facet name="header">
<h:outputText value="${i18n['printedCard.id']}" />
</f:facet>
<h:outputText value="#{card.id.id}" />
<h:outputText value="#{card.id}" />
</h:column>
<h:column>
<f:facet name="header">
......
......@@ -5,7 +5,7 @@
xmlns:c="http://java.sun.com/jsp/jstl/core"
>
<f:view contentType="text/html" locale="#{sessionHandler.locale}">
<f:view contentType="text/html" locale="#{sessionHandler.locale}">
<h:head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title><h:outputText value="#{layoutView.getHeader()}" /></title>
......@@ -35,10 +35,7 @@
<ul class="menu" jsfc="ui:repeat" var="menuitem" value="#{menuView.topmenu}">
<li><h:link outcome="#{menuitem.outcome}" value="#{menuitem.linktext}"
styleClass="#{menuitem.selected?'active':''}"
>
<f:param name="cid" value="#{menuitem.cid?userView.conversationId:null}" />
</h:link></li>
/></li>
</ul>
</div>
<div id="container" class="top" />
......@@ -58,9 +55,8 @@
/>
<li><h:link outcome="#{menuitem.outcome}" value="#{menuitem.linktext}"
styleClass="#{menuitem.selected?'active':''}"
>
<f:param name="cid" value="#{menuitem.cid?userView.conversationId:null}" />
</h:link></li>
/>
</li>
</ui:repeat>
</ul>
</div>
......
......@@ -18,7 +18,7 @@
<map:setBuyable />
<img width="600" src="#{request.contextPath}/PlaceMap?mapid=#{mapView.activeMap.id.id}" alt="placeimage" />
<img width="600" src="#{request.contextPath}/PlaceMap?mapid=#{mapView.activeMap.id}" alt="placeimage" />
<map:genplaces />
<map:submitBg />
......
<!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:news="http://java.sun.com/jsf/composite/cditools/news" xmlns:c="http://java.sun.com/jsp/jstl/core"
>
<h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<f:metadata>
<f:event type="preRenderView" listener="#{newsgroupView.initCreate}" />
</f:metadata>
<ui:param name="thispage" value="page.user.edit" />
<ui:define name="content">
<news:edit commitaction="#{newsgroupView.createNew()}" commitvalue="#{i18n['newsgroup.create']}" />
</ui:define>
</ui:composition>
</h:body>
</html>
\ No newline at end of file
......@@ -3,8 +3,7 @@
"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/cditools/user" xmlns:tools="http://java.sun.com/jsf/composite/tools"
xmlns:account="http://java.sun.com/jsf/composite/tools/account" xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:news="http://java.sun.com/jsf/composite/cditools/news" xmlns:c="http://java.sun.com/jsp/jstl/core"
>
<h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
......@@ -14,44 +13,43 @@
</f:metadata>
<ui:param name="thispage" value="page.user.edit" />
<ui:define name="content">
<h:form id="billform">
<h:panelGrid columns="3">
<h:outputLabel for="name" value="#{i18n['newsgroup.name']}:" />
<h:inputText id="name" value="#{newsgroupView.newsgroup.name}">
<f:validateRequired />
</h:inputText>
<h:message for="name" />
<h:outputLabel for="priority" value="#{i18n['newsgroup.priority']}:" />
<h:inputText id="priority" value="#{newsgroupView.newsgroup.priority}">
<f:validateLongRange minimum="1" maximum="9999999" />
</h:inputText>
<h:message for="priority" />
<news:edit commitaction="#{newsgroupView.saveNewsgroup()}" commitvalue="#{i18n['newsgroup.save']}" />
<h:outputLabel for="writerrole" value="#{i18n['newsgroup.writerrole']}:" />
<h:selectOneMenu converter="#{roleConverter}" id="writerrole"
value="#{newsgroupView.newsgroup.writerRole}"
>
<f:selectItems var="par" itemLabel="#{par.name}" value="#{roleDataView.roles}" />
</h:selectOneMenu>
<h:message for="writerrole" />
<h:outputLabel for="readroles" />
<h:selectManyCheckbox converter="#{roleConverter}" layout="pageDirection" id="readroles"
value="#{newsgroupView.newsgroup.readerRoles}"
>
<f:selectItems var="par" itemLabel="#{par.name}" value="#{roleDataView.roles}" />
</h:selectManyCheckbox>
<h:message for="readroles" />
</h:panelGrid>
<h:commandButton rendered="#{empty newsgroupView.newsgroup.id}" action="#{newsgroupView.createNew()}"
value="#{i18n['newsgroup.create']}"
/>
<h:commandButton rendered="#{!empty newsgroupView.newsgroup.id}" action="#{newsgroupView.saveNewsgroup()}"
value="#{i18n['newsgroup.save']}"
/>
<h2>#{i18n['newsgroup.contents']}</h2>
<h:form>
<h:commandButton action="#{newsgroupView.createNews}" value="#{i18n['newsgroup.createNewNews']}" />
</h:form>
<h:dataTable var="news" value="#{newsgroupView.newsgroup.news}">
<h:column>
<f:facet name="header">
<h:outputText value="#{i18n['news.title']}" />
</f:facet>
<h:outputText value="#{news.title}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{i18n['news.publish']}" />
</f:facet>
<h:outputText value="#{news.publish.time}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{i18n['news.expire']}" />
</f:facet>
<h:outputText value="#{news.expire.time}" />
</h:column>
<h:column>
<h:link outcome="/news/editNews" value="#{i18n['news.edit']}">
<f:param name="newsid" value="#{news.id}" />
</h:link>
<h:outputText value="#{news.publish.time}" />
</h:column>
</h:dataTable>
</ui:define>
</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:news="http://java.sun.com/jsf/composite/cditools/news" xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:p="http://primefaces.prime.com.tr/ui"
>
<h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<f:metadata>
<f:viewParam name="newsid" value="#{newsgroupView.newsid}" />
<f:event type="preRenderView" listener="#{newsgroupView.initNews}" />
</f:metadata>
<ui:param name="thispage" value="page.user.edit" />
<ui:define name="content">
<h:outputScript target="head" library="script" name="jquery.min.js" />
<h:outputScript target="head" library="script" name="textinputs_jquery.js" />
<h:button onclick="var sel = $('#newsform:editor').getSelection(); alert(sel.start +', ' + sel.end);" value="Click me"/>
<h:form id="newsform">
<h:panelGrid columns="3">
<h:outputLabel for="name" value="#{i18n['news.title']}:" />
<h:inputText id="name" value="#{newsgroupView.news.title}">
<f:validateRequired />
</h:inputText>
<h:message for="name" />
<h:outputLabel for="abstract" value="#{i18n['news.abstract']}:" />
<h:inputTextarea id="abstract" value="#{newsgroupView.news.bodyAbstract}" />
<h:message for="abstract" />
<h:outputLabel for="publish" value="#{i18n['news.publish']}:" />
<h:inputText id="publish" value="#{newsgroupView.news.publish}">
<f:convertDateTime pattern="#{sessionHandler.datetimeFormat}" timeZone="#{sessionHandler.timezone}" />
</h:inputText>
<h:message for="publish" />
<h:outputLabel for="expire" value="#{i18n['news.expire']}:" />
<h:inputText id="expire" value="#{newsgroupView.news.expire}">
<f:convertDateTime pattern="#{sessionHandler.datetimeFormat}" timeZone="#{sessionHandler.timezone}" />
</h:inputText>
<h:message for="expire" />
</h:panelGrid>
<p:editor id="editor" value="#{newsgroupView.news.body}" />
<h:commandButton id="commit" action="#{newsgroupView.saveNews()}" value="#{i18n['news.save']}" />
</h:form>
</ui:define>
</ui:composition>
</h:body>
</html>
\ No newline at end of file
......@@ -20,7 +20,7 @@
<f:facet name="header">
ID
</f:facet>
<h:outputText value="#{newsgroup.id.id}" />
<h:outputText value="#{newsgroup.id}" />
</h:column>
<h:column>
<f:facet name="header">
......@@ -42,7 +42,7 @@
</h:column>
<h:column>
<h:link outcome="/news/edit" value="#{i18n['newsgroup.edit']}">
<f:param name="newsgroupid" value="#{newsgroup.id.id}" />
<f:param name="newsgroupid" value="#{newsgroup.id}" />
</h:link>
</h:column>
</h:dataTable>
......
......@@ -3,26 +3,21 @@
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html" xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:users="http://java.sun.com/jsf/composite/tools/user" xmlns:f="http://java.sun.com/jsf/core"
xmlns:users="http://java.sun.com/jsf/composite/cditools/user" xmlns:f="http://java.sun.com/jsf/core"
>
<h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<ui:param name="thispage" value="page.place.insertToken" />
<f:metadata>
<f:metadata>
<f:viewParam name="userid" value="#{userView.userid}" />
<f:event type="preRenderView" listener="#{userView.initView}" />
</f:metadata>
<ui:define name="title">
<h1>#{i18n['user.accountevents']}</h1>
<users:usertabs tabId="token" />
</ui:define>
<ui:define name="content">
<h1>#{i18n['placetoken.pageHeader']}</h1>
<p>#{i18n['placetoken.topText']}</p>
<h:form id="placeTokenForm">
<h:panelGrid columns="2">
<h:outputLabel value="#{i18n['placetoken.token']}:" />
<h:inputText value="#{tokenView.token}" />
<h:commandButton id="commitbtn" action="#{tokenView.saveToken()}" value="#{i18n['placetoken.commit']}" />
</h:panelGrid>
</h:form>
</ui:define>
</ui:composition>
</h:body>
......
......@@ -3,23 +3,39 @@
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html" xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:users="http://java.sun.com/jsf/composite/tools/user" xmlns:f="http://java.sun.com/jsf/core">
xmlns:users="http://java.sun.com/jsf/composite/cditools/user" xmlns:f="http://java.sun.com/jsf/core"
>
<h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<ui:param name="thispage" value="page.place.mygroups" />
<f:metadata>
<f:metadata>
<f:viewParam name="userid" value="#{userView.userid}" />
<f:event type="preRenderView" listener="#{userView.initView}" />
</f:metadata>
<ui:define name="content">
<ui:define name="title">
<h1>#{i18n['placegroupview.header']}</h1>
<p>#{i18n['placegroupview.toptext']}</p>
<users:usertabs tabId="groups" />
</ui:define>
<ui:define name="content">
<h2>#{i18n['placetoken.pageHeader']}</h2>
<p>#{i18n['placetoken.topText']}</p>
<h:form id="placeTokenForm">
<h:panelGrid columns="2">
<h:outputLabel value="#{i18n['placetoken.token']}:" />
<h:inputText value="#{tokenView.token}" />
<h:commandButton id="commitbtn" action="#{tokenView.saveToken()}" value="#{i18n['placetoken.commit']}" />
</h:panelGrid>
</h:form>
<h:outputText rendered="#{empty placeGroupView.groupMemberships}"
value="#{i18n['placegroupview.noMemberships']}" />
<h2>#{i18n['placetoken.placelist']}</h2>
<p>#{i18n['placegroupview.toptext']}</p>
<h:outputText rendered="#{empty placeGroupView.groupMemberships}" value="#{i18n['placegroupview.noMemberships']}" />
<h:form rendered="#{!empty placeGroupView.groupMemberships}" id="placelistform">
<p><a href="#{request.contextPath}/PlaceGroupPdf">#{i18n['placegroup.printPdf']}</a></p>
<p>
<a href="#{request.contextPath}/PlaceGroupPdf">#{i18n['placegroup.printPdf']}</a>
</p>
<h:dataTable value="#{placeGroupView.groupMemberships}" var="member">
......@@ -35,7 +51,8 @@
</f:facet>
<h:outputText rendered="#{empty member.user}" value="#{member.inviteToken}" />
<h:outputText rendered="#{!empty member.user}"
value="#{member.user.firstnames} #{member.user.lastname} (#{member.user.nick})" />
value="#{member.user.firstnames} #{member.user.lastname} (#{member.user.nick})"
/>
</h:column>
<h:column>
......@@ -43,13 +60,15 @@
<h:outputText value="#{i18n['placegroupview.groupCreator']}" />
</f:facet>
<h:outputText
value="#{member.placeGroup.creator.firstnames} #{member.placeGroup.creator.lastname} (#{member.placeGroup.creator.nick})" />
value="#{member.placeGroup.creator.firstnames} #{member.placeGroup.creator.lastname} (#{member.placeGroup.creator.nick})"
/>
</h:column>
<h:column>
<h:commandButton rendered="#{placeGroupView.canModify(member) and !empty member.user}"
action="#{placeGroupView.releasePlace()}" value="#{i18n['placegroupview.releasePlace']}" />
action="#{placeGroupView.releasePlace()}" value="#{i18n['placegroupview.releasePlace']}"
/>
</h:column>
</h:dataTable>
......
......@@ -16,7 +16,7 @@
<composite:implementation>
<h:form id="productform">
<h:inputHidden value="#{mapManageView.map.id.id}" />
<h:inputHidden value="#{mapManageView.map.id}" />
<h:panelGrid columns="2">
<h:outputLabel value="#{i18n['eventmap.name']}:" />
<h:inputText value="#{mapManageView.map.name}" />
......
......@@ -19,7 +19,7 @@
<f:facet name="header">
<h:outputText value="#{i18n['map.id']}" />
</f:facet>
<h:outputText value="#{map.id.id}" />
<h:outputText value="#{map.id}" />
</h:column>
<h:column>
<f:facet name="header">
......@@ -29,7 +29,7 @@
</h:column>
<h:column>
<h:link value="#{i18n['map.edit']}" outcome="/map/edit">
<f:param name="mapid" value="#{map.id.id}" />
<f:param name="mapid" value="#{map.id}" />
</h:link>
</h:column>
</h:dataTable>
......
......@@ -13,7 +13,7 @@
<composite:implementation>
<h:form>
<p><input type="hidden" name="id" value="#{mapManageView.map.id.id}" /></p>
<p><input type="hidden" name="id" value="#{mapManageView.map.id}" /></p>
<h:panelGrid columns="2">
<h:outputLabel value="#{i18n['setBuyable.like']}" />
......
......@@ -19,7 +19,7 @@
>
<p>
<input type="hidden" name="id" value="#{mapManageView.map.id.id}" /> Lähetä kartan taustakuva
<input type="hidden" name="id" value="#{mapManageView.map.id}" /> Lähetä kartan taustakuva
</p>
<h:panelGrid columns="2">
......
<?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:attribute name="commitvalue" required="true" />
<composite:attribute name="commitaction" required="true" method-signature="java.lang.String action()" />
</composite:interface>
<composite:implementation>
<h:form id="newsform">
<h:panelGrid columns="3">
<h:outputLabel for="name" value="#{i18n['newsgroup.name']}:" />
<h:inputText id="name" value="#{newsgroupView.newsgroup.name}">
<f:validateRequired />
</h:inputText>
<h:message for="name" />
<h:outputLabel for="priority" value="#{i18n['newsgroup.priority']}:" />
<h:inputText id="priority" value="#{newsgroupView.newsgroup.priority}">
<f:validateLongRange minimum="1" maximum="9999999" />
</h:inputText>
<h:message for="priority" />
<h:outputLabel for="writerrole" value="#{i18n['newsgroup.writerRole']}:" />
<h:selectOneMenu converter="#{roleConverter}" id="writerrole" value="#{newsgroupView.newsgroup.writerRole}">
<f:selectItems var="par" itemLabel="#{par.name}" value="#{roleDataView.roles}" />
</h:selectOneMenu>
<h:message for="writerrole" />
<h:outputLabel for="readroles" value="#{i18n['newsgroup.readerRole']}" />
<h:selectManyCheckbox converter="#{roleConverter}" layout="pageDirection" id="readroles"
value="#{newsgroupView.newsgroup.readerRoles}"
>
<f:selectItems var="par" itemLabel="#{par.name}" value="#{roleDataView.roles}" />
</h:selectManyCheckbox>
<h:message for="readroles" />
</h:panelGrid>
<h:commandButton id="commitbtn" action="#{cc.attrs.commitaction}" value="#{cc.attrs.commitvalue}" />
</h:form>
</composite:implementation>
</html>
......@@ -15,7 +15,7 @@
<composite:implementation>
<h:form id="productform">
<h:inputHidden value="#{productView.product.id.id}" />
<h:inputHidden value="#{productView.product.id}" />
<h:panelGrid columns="2">
<h:outputLabel value="#{i18n['product.name']}:" />
<h:inputText value="#{productView.product.name}" />
......@@ -46,12 +46,12 @@
</h:form>
<h:commandButton rendered="#{!empty productView.product.id.id}" action="#{productView.createDiscount}"
<h:commandButton rendered="#{!empty productView.product.id}" action="#{productView.createDiscount}"
value="#{i18n['product.createDiscount']}"
/>
<h:form id="discounts" rendered="#{!empty productView.product.id.id and !empty productView.product.discounts}">
<h:form id="discounts" rendered="#{!empty productView.product.id and !empty productView.product.discounts}">
<h:dataTable border="1" id="discount" value="#{productView.product.discounts}" var="discount">
<h:column>
<f:facet name="header">
......
......@@ -29,7 +29,7 @@
<h:column>
<h:link outcome="/product/edit" value="#{i18n['product.edit']}">
<f:param name="productid" value="#{product.id.id}" />
<f:param name="productid" value="#{product.id}" />
</h:link>
</h:column>
<h:column>
......
......@@ -53,23 +53,27 @@
<h:outputText value="#{event.event.gamePoint}" />
</h:column>
<h:column>
<h:link outcome="/rfid/assocToUser" value="#{i18n['readerevent.associateToUser']}">
<h:link rendered="#{empty event.event}" outcome="/rfid/assocToUser" value="#{i18n['readerevent.associateToUser']}">
<f:param value="#{event.tag}" var="tag" />
</h:link>
<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:link rendered="#{!empty event.event}" outcome="/user/edit" value="#{i18n['user.edit']}">
<f:param value="#{event.event.printedCard.user.id}" var="userid" />
</h:link>
<!-- <h:commandButton rendered="#{!empty event.event}" action="#{readerView.editUser()}" value="#{i18n['user.edit']}" /> -->
<!-- <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:column>
<h:commandButton rendered="#{!empty event.event}" action="#{readerView.editUser()}" value="#{i18n['user.edit']}" />
</h:column>
<h:column rendered="#{sessionHandler.hasPermission('GAME','WRITE')}">
<h:commandButton action="#{readerView.editGameEvent()}" value="Game" />
</h:column>
</h:dataTable>
</h:form>
......
<?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:attribute name="tabId" type="java.lang.String" required="true" />
</composite:interface>
<composite:implementation>
<h:outputStylesheet library="style" name="tabnav.css" />
<ui:fragment rendered="#{!userView.currentUser}">
<h2>#{i18n['usertitle.managingUser']}: #{userView.user.wholeName}</h2>
</ui:fragment>
<div id="#{cc.attrs.tabId}">
<ul id="usertabnav">
<li class="edit"><h:link outcome="/user/edit" value="#{i18n['user.edit']}">
<f:param name="userid" value="#{userView.user.id}" />
</h:link></li>
<li class="chpass"><h:link outcome="/user/changePassword" value="#{i18n['submenu.user.changePassword']}">
<f:param name="userid" value="#{userView.user.id}" />
</h:link></li>
<li class="accountevents"><h:link outcome="/user/accountEvents" value="#{i18n['submenu.user.accountEvents']}">
<f:param name="userid" value="#{userView.user.id}" />
</h:link></li>
<li class="groups"><h:link outcome="/place/myGroups" value="#{i18n['submenu.place.myGroups']}">
<f:param name="userid" value="#{userView.user.id}" />
</h:link></li>
<li class="picture"><h:link outcome="/user/sendPicture" value="#{i18n['submenu.user.sendPicture']}">
<f:param name="userid" value="#{userView.user.id}" />
</h:link></li>
</ul>
</div>
</composite:implementation>
</html>
/*
Rangy Text Inputs, a cross-browser textarea and text input library plug-in for jQuery.
Part of Rangy, a cross-browser JavaScript range and selection library
http://code.google.com/p/rangy/
Depends on jQuery 1.0 or later.
Copyright 2010, Tim Down
Licensed under the MIT license.
Version: 0.1.205
Build date: 5 November 2010
*/
(function(n){function o(e,g){var a=typeof e[g];return a==="function"||!!(a=="object"&&e[g])||a=="unknown"}function p(e,g,a){if(g<0)g+=e.value.length;if(typeof a=="undefined")a=g;if(a<0)a+=e.value.length;return{start:g,end:a}}function k(){return typeof document.body=="object"&&document.body?document.body:document.getElementsByTagName("body")[0]}var i,h,q,l,r,s,t,u,m;n(document).ready(function(){function e(a,b){return function(){var c=this.jquery?this[0]:this,d=c.nodeName.toLowerCase();if(c.nodeType==
1&&(d=="textarea"||d=="input"&&c.type=="text")){c=[c].concat(Array.prototype.slice.call(arguments));c=a.apply(this,c);if(!b)return c}if(b)return this}}var g=document.createElement("textarea");k().appendChild(g);if(typeof g.selectionStart!="undefined"&&typeof g.selectionEnd!="undefined"){i=function(a){return{start:a.selectionStart,end:a.selectionEnd,length:a.selectionEnd-a.selectionStart,text:a.value.slice(a.selectionStart,a.selectionEnd)}};h=function(a,b,c){b=p(a,b,c);a.selectionStart=b.start;a.selectionEnd=
b.end};m=function(a,b){if(b)a.selectionEnd=a.selectionStart;else a.selectionStart=a.selectionEnd}}else if(o(g,"createTextRange")&&typeof document.selection=="object"&&document.selection&&o(document.selection,"createRange")){i=function(a){var b=0,c=0,d,f,j;if((j=document.selection.createRange())&&j.parentElement()==a){f=a.value.length;d=a.value.replace(/\r\n/g,"\n");c=a.createTextRange();c.moveToBookmark(j.getBookmark());j=a.createTextRange();j.collapse(false);if(c.compareEndPoints("StartToEnd",j)>
-1)b=c=f;else{b=-c.moveStart("character",-f);b+=d.slice(0,b).split("\n").length-1;if(c.compareEndPoints("EndToEnd",j)>-1)c=f;else{c=-c.moveEnd("character",-f);c+=d.slice(0,c).split("\n").length-1}}}return{start:b,end:c,length:c-b,text:a.value.slice(b,c)}};h=function(a,b,c){b=p(a,b,c);c=a.createTextRange();var d=b.start-(a.value.slice(0,b.start).split("\r\n").length-1);c.collapse(true);if(b.start==b.end)c.move("character",d);else{c.moveEnd("character",b.end-(a.value.slice(0,b.end).split("\r\n").length-
1));c.moveStart("character",d)}c.select()};m=function(a,b){var c=document.selection.createRange();c.collapse(b);c.select()}}else{k().removeChild(g);window.console&&window.console.log&&window.console.log("TextInputs module for Rangy not supported in your browser. Reason: No means of finding text input caret position");return}k().removeChild(g);l=function(a,b,c,d){var f;if(b!=c){f=a.value;a.value=f.slice(0,b)+f.slice(c)}d&&h(a,b,b)};q=function(a){var b=i(a);l(a,b.start,b.end,true)};u=function(a){var b=
i(a),c;if(b.start!=b.end){c=a.value;a.value=c.slice(0,b.start)+c.slice(b.end)}h(a,b.start,b.start);return b.text};r=function(a,b,c,d){var f=a.value;a.value=f.slice(0,c)+b+f.slice(c);if(d){b=c+b.length;h(a,b,b)}};s=function(a,b){var c=i(a),d=a.value;a.value=d.slice(0,c.start)+b+d.slice(c.end);c=c.start+b.length;h(a,c,c)};t=function(a,b,c){var d=i(a),f=a.value;a.value=f.slice(0,d.start)+b+d.text+c+f.slice(d.end);b=d.start+b.length;h(a,b,b+d.length)};n.fn.extend({getSelection:e(i,false),setSelection:e(h,
true),collapseSelection:e(m,true),deleteSelectedText:e(q,true),deleteText:e(l,true),extractSelectedText:e(u,false),insertText:e(r,true),replaceSelectedText:e(s,true),surroundSelectedText:e(t,true)})})})(jQuery);
\ No newline at end of file
/* begin css tabs */
ul#tabnav { /* general settings */
ul#usertabnav { /* general settings */
text-align: left; /* set to left, right or center */
margin: 1em 0 1em 0; /* set margins as desired */
font: bold 11px verdana, arial, sans-serif; /* set font as desired */
border-bottom: 1px solid #6c6; /* set border COLOR as desired */
border-bottom: 1px solid #7DAC0C; /* set border COLOR as desired */
list-style-type: none;
padding: 3px 10px 3px 10px; /* THIRD number must change with respect to padding-top (X) below */
padding: 3px 10px 4px 10px; /* THIRD number must change with respect to padding-top (X) below */
}
ul#tabnav li { /* do not change */
ul#usertabnav li { /* do not change */
display: inline;
}
body#tab1 li.tab1, body#tab2 li.tab2, body#tab3 li.tab3, body#tab4 li.tab4 { /* settings for selected tab */
div#edit li.edit,
div#chpass li.chpass,
div#accountevents li.accountevents,
div#groups li.groups,
div#token li.token,
div#picture li.picture
{ /* settings for selected tab */
border-bottom: 1px solid #fff; /* set border color to page background color */
background-color: #fff; /* set background color to match above border color */
}
body#tab1 li.tab1 a, body#tab2 li.tab2 a, body#tab3 li.tab3 a, body#tab4 li.tab4 a { /* settings for selected tab link */
background-color: #fff; /* set selected tab background color as desired */
div#edit li.edit a,
div#chpass li.chpass a,
div#accountevents li.accountevents a,
div#groups li.groups a,
div#token li.token a,
div#picture li.picture a{ /* settings for selected tab link */
background-color: #FFF; /* set selected tab background color as desired */
color: #000; /* set selected tab link color as desired */
position: relative;
top: 1px;
padding-top: 4px; /* must change with respect to padding (X) above and below */
}
ul#tabnav li a { /* settings for all tab links */
padding: 3px 4px; /* set padding (tab size) as desired; FIRST number must change with respect to padding-top (X) above */
border: 1px solid #6c6; /* set border COLOR as desired; usually matches border color specified in #tabnav */
background-color: #cfc; /* set unselected tab background color as desired */
color: #666; /* set unselected tab link color as desired */
ul#usertabnav li a { /* settings for all tab links */
padding: 4px 5px; /* set padding (tab size) as desired; FIRST number must change with respect to padding-top (X) above */
border: 1px solid #7DAC0C; /* set border COLOR as desired; usually matches border color specified in #usertabnav */
background-color: #37bce6; /* set unselected tab background color as desired */
color: #0f3541; /* set unselected tab link color as desired */
margin-right: 0px; /* set additional spacing between tabs as desired */
text-decoration: none;
border-bottom: none;
border-top-right-radius: 7px;
border-top-left-radius: 7px;
}
ul#tabnav a:hover { /* settings for hover effect */
background: #fff; /* set desired hover color */
ul#usertabnav a:hover { /* settings for hover effect */
background: #b8f7ff; /* set desired hover color */
}
/* end css tabs */
\ No newline at end of file
......@@ -2,7 +2,7 @@
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:users="http://java.sun.com/jsf/composite/tools/user"
xmlns:h="http://java.sun.com/jsf/html" xmlns:users="http://java.sun.com/jsf/composite/cdiqtools/user"
xmlns:f="http://java.sun.com/jsf/core" xmlns:c="http://java.sun.com/jsp/jstl/core"
>
<h:body>
......
......@@ -5,7 +5,7 @@
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:shop="http://java.sun.com/jsf/composite/tools/shop"
xmlns:shop="http://java.sun.com/jsf/composite/cditools/shop"
xmlns:c="http://java.sun.com/jsp/jstl/core">
<h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
......
......@@ -7,7 +7,7 @@
<title></title>
</h:head>
<h:body>
<ui:composition template="/layout/insomnia1/template.xhtml">
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<ui:param name="thispage" value="page.permissionDenied" />
<ui:define name="metadata">
<f:metadata>
......
......@@ -3,7 +3,7 @@
"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:shop="http://java.sun.com/jsf/composite/tools/shop" xmlns:c="http://java.sun.com/jsp/jstl/core">
xmlns:shop="http://java.sun.com/jsf/composite/cditools/shop" 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.shop.readerevents" />
......
......@@ -2,8 +2,8 @@
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:account="http://java.sun.com/jsf/composite/tools/account"
xmlns:tools="http://java.sun.com/jsf/composite/tools" xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html" xmlns:users="http://java.sun.com/jsf/composite/cditools/user"
xmlns:f="http://java.sun.com/jsf/core"
>
<h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
......@@ -12,7 +12,10 @@
<f:event type="preRenderView" listener="#{userView.initView}" />
</f:metadata>
<ui:param name="thispage" value="page.account.list" />
<ui:define name="title">
<h1>#{i18n['user.accountevents']}</h1>
<users:usertabs tabId="accountevents" />
</ui:define>
<ui:define name="content">
<h:outputLabel value="#{i18n['user.accountBalance']}: " for="accountbalance" />
<h:outputText id="accountbalance" value="#{userView.user.accountBalance}" />
......@@ -65,11 +68,11 @@
</h:column>
<!-- <h:column> -->
<!-- <h:link outcome="/user/editAccountevent" value="#{i18n['accountEvent.edit']}"> -->
<!-- <f:param name="accountid" value="#{ac.id}" /> -->
<!-- </h:link> -->
<!-- </h:column> -->
<!-- <h:column> -->
<!-- <h:link outcome="/user/editAccountevent" value="#{i18n['accountEvent.edit']}"> -->
<!-- <f:param name="accountid" value="#{ac.id}" /> -->
<!-- </h:link> -->
<!-- </h:column> -->
</h:dataTable>
</ui:define>
</ui:composition>
......
......@@ -3,7 +3,7 @@
"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:c="http://java.sun.com/jsp/jstl/core"
xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:users="http://java.sun.com/jsf/composite/cditools/user"
>
<h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
......@@ -13,16 +13,19 @@
</f:metadata>
<ui:define name="title">
<h1>#{i18n['user.changepassword.title']}</h1>
<users:usertabs tabId="edit" />
</ui:define>
<ui:define name="content">
<h2>#{i18n['user.changepassword.forUser']}: #{userView.user.wholeName}</h2>
<h:form id="userform">
<h:panelGrid columns="2">
<h:outputLabel value="#{i18n['user.password']}:" />
<h:inputSecret id="password" value="#{passwordView.password}" />
<h:outputLabel value="#{i18n['user.passwordcheck']}:" />
<h:inputSecret id="passwordcheck" value="#{passwordView.passwordcheck}" />
<h:commandButton id="createuserbtn" action="#{passwordView.changePassword()}" value="#{i18n['user.changePassword']}" />
<h:commandButton id="createuserbtn" action="#{passwordView.changePassword()}"
value="#{i18n['user.changePassword']}"
/>
</h:panelGrid>
</h:form>
</ui:define>
......
......@@ -3,19 +3,21 @@
"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:users="http://java.sun.com/jsf/composite/tools/user"
xmlns:f="http://java.sun.com/jsf/core">
xmlns:f="http://java.sun.com/jsf/core"
>
<h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<ui:param name="thispage" value="page.user.create" />
<f:metadata>
<f:event type="preRenderView" listener="#{cardView.initCardCreate}" />
</f:metadata>
<ui:define name="content">
<h:form id="cardTemplates">
#{cardView.initCard()}
<h:panelGrid columns="2">
<h:outputLabel value="#{i18n['cardTemplate.name']}:" />
<h:inputText value="#{cardView.card.name}" />
<h:inputText value="#{cardView.cardTemplate.name}" />
<h:outputLabel value="#{i18n['cardTemplate.power']}:" />
<h:inputText value="#{cardView.card.power}" size="4" />
<h:inputText value="#{cardView.cardTemplate.power}" size="4" />
</h:panelGrid>
<h:commandButton action="#{cardView.createTemplate()}" value="#{i18n['cardTemplate.create']}" />
</h:form>
......
......@@ -15,6 +15,8 @@
<!-- <ui:param name="thispage" value="page.user.edit" /> -->
<ui:define name="title">
<h1>#{i18n['user.edit.title']}</h1>
<users:usertabs tabId="edit" />
</ui:define>
<ui:define name="content">
<users:edit commitaction="#{userView.saveUser()}" commitvalue="#{i18n['user.save']}" />
......
<!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:users="http://java.sun.com/jsf/composite/tools/user"
xmlns:f="http://java.sun.com/jsf/core" xmlns:p="http://primefaces.prime.com.tr/ui"
>
<h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<f:metadata>
<f:viewParam name="templateid" value="#{cardView.templateId}" />
<f:event type="preRenderView" listener="#{cardView.initCardTemplate}" />
</f:metadata>
<ui:define name="content">
<h:form id="cardTemplates">
<h:panelGrid columns="3">
<h:outputLabel for="id" value="#{i18n['cardTemplate.id']}:" />
<h:outputText id="id" value="#{cardView.cardTemplate.id}" />
<h:message for="id" />
<h:outputLabel for="name" value="#{i18n['cardTemplate.name']}:" />
<h:inputText id="name" value="#{cardView.cardTemplate.name}" />
<h:message for="name" />
<h:outputLabel for="power" value="#{i18n['cardTemplate.power']}:" />
<h:inputText id="power" value="#{cardView.cardTemplate.power}" size="4" />
<h:message for="power" />
<h:outputLabel for="roles" value="#{i18n['cardTemplate.roles']}" />
<h:selectManyCheckbox layout="pageDirection" value="#{cardView.cardTemplate.roles}" converter="#{roleConverter}"
id="roles"
>
<f:selectItems var="role" itemLabel="#{role.name}" value="#{roleDataView.roles}" />
</h:selectManyCheckbox>
<h:message for="roles"></h:message>
</h:panelGrid>
<h:commandButton action="#{cardView.saveTemplate()}" value="#{i18n['cardTemplate.save']}" />
</h:form>
<h:form enctype="multipart/form-data">
<p:fileUpload value="#{cardView.templateImage}" mode="simple" />
<h:commandButton action="#{cardView.saveImage}" value="#{i18n['sendImage']}" />
</h:form>
<img src="#{request.contextPath}/CardTemplate?imageid=#{cardView.cardTemplate.id}" />
</ui:define>
</ui:composition>
</h:body>
</html>
\ No newline at end of file
......@@ -3,15 +3,22 @@
"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:users="http://java.sun.com/jsf/composite/tools/user"
xmlns:f="http://java.sun.com/jsf/core">
xmlns:f="http://java.sun.com/jsf/core"
>
<h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<ui:param name="thispage" value="page.user.create" />
<f:metadata>
<f:viewParam name="userid" value="#{userView.userid}" />
<f:event type="preRenderView" listener="#{userView.initView}" />
<f:event type="preRenderView" listener="#{cardView.initCardTemplatelist()}" />
</f:metadata>
<ui:define name="content">
<h:form id="cardTemplates">
#{cardView.initCardTemplates()}
<h:dataTable value="#{cardView.cardTemplates}" var="card">
<h:column>
#{card.id}
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{i18n['cardTemplate.name']}" />
</f:facet>
......@@ -34,7 +41,11 @@
</h:column>
</h:dataTable>
</h:column>
<h:column>
<h:link outcome="/user/editCardTemplate" value="#{i18n['cardTemplate.edit']}">
<f:param name="templateid" value="#{card.id}" />
</h:link>
</h:column>
</h:dataTable>
</h:form>
......
......@@ -4,6 +4,7 @@
<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:c="http://java.sun.com/jsp/jstl/core" xmlns:p="http://primefaces.prime.com.tr/ui"
xmlns:users="http://java.sun.com/jsf/composite/cditools/user"
>
<h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
......@@ -14,11 +15,12 @@
</f:metadata>
<ui:define name="title">
<h1>#{i18n['sendPicture.header']}</h1>
<users:usertabs tabId="picture" />
</ui:define>
<ui:define name="content">
<h:outputScript target="head" library="script" name="jquery.min.js" />
<h:outputScript library="primefaces" name="jquery/jquery.js" target="head" />
<h:outputScript target="head" library="jpegcam" name="webcam.js" />
<h:outputScript target="head">
webcam.set_api_url( '#{request.contextPath}/UploadServlet?type=userimage&amp;id=#{userView.selectedUser.id}' );
......@@ -58,10 +60,59 @@
<h2>#{i18n['user.thisIsCurrentImage']}</h2>
<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>
<ui:fragment rendered="#{!empty userView.user.currentImage}">
<h:panelGrid columns="2">
<img width="300"
src="#{request.contextPath}/Userimage?imageid=#{userView.user.currentImage.id}"
alt="image"
/>
<ui:fragment rendered="#{userView.canManage()}">
<h:form>
<p:imageCropper value="#{userView.croppedImage}" aspectRatio="0.8"
image="http://kauppa.insomnia.fi#{request.contextPath}/Userimage?imageid=#{userView.user.currentImage.id}"
/>
<h:commandButton action="#{userView.crop}" value="#{i18n['user.cropImage']}" />
</h:form>
</ui:fragment>
</h:panelGrid>
<ui:fragment rendered="#{userView.canManage()}">
<h2>Ylläpito</h2>
<h:form>
<h:commandButton action="#{userView.makeCard()}" value="#{i18n['user.makeCard']}" />
<h:dataTable var="card" value="#{userCardView.printedCards}">
<h:column>
<h:outputText value="#{card.enabled}" />
</h:column>
<h:column>
<h:outputText value="#{card.enabled}" />
</h:column>
<h:column>
<a href="#{request.contextPath}/UserCard?cardid=#{card.id}">View Card</a>
<a href="#{request.contextPath}/UserCard?cardid=#{card.id}&amp;download=1">Print Card</a>
</h:column>
</h:dataTable>
</h:form>
</ui:fragment>
<!-- <h:dataTable var="image" value="#{userView.user.userImageList}"> -->
<!-- <h:column> -->
<!-- <h:outputText value="#{image.id}" /> -->
<!-- </h:column> -->
<!-- <h:column> -->
<!-- <h:outputText value="#{image.name}" /> -->
<!-- </h:column> -->
<!-- <h:column> -->
<!-- <h:outputText value="#{image.description}" /> -->
<!-- </h:column> -->
<!-- </h:dataTable> -->
</ui:fragment>
......
......@@ -34,7 +34,7 @@ public class CardView {
return cardTemplates;
}
public void initCard() {
public void initCardCreate() {
card = new CardTemplate(eventBean.getCurrentEvent());
}
......
......@@ -9,6 +9,7 @@ import java.util.TimeZone;
import javax.ejb.EJB;
import javax.enterprise.context.RequestScoped;
import javax.faces.context.FacesContext;
import javax.inject.Inject;
import javax.inject.Named;
import javax.servlet.http.HttpServletRequest;
......@@ -92,6 +93,16 @@ public class SessionHandler {
// return permbean.hasPermission(perm);
// }
public String getDateFormat()
{
return "dd.MM.yyyy";
}
public String getDatetimeFormat()
{
return "dd.MM.yyyy HH:mm";
}
public boolean hasPermission(IAppPermission permission) {
if (permission == null) {
logger.warn("permission is null");
......@@ -122,4 +133,23 @@ public class SessionHandler {
}
private String preurlString;
public String getRequestPreUrl()
{
if (preurlString == null)
{
Object ext = FacesContext.getCurrentInstance().getExternalContext().getRequest();
if (ext instanceof HttpServletRequest)
{
StringBuffer url = ((HttpServletRequest) ext).getRequestURL();
preurlString = url.substring(0, url.indexOf("/", 7));
} else {
preurlString = "";
}
}
return preurlString;
}
}
......@@ -158,7 +158,8 @@ placetoken.commit=Liit\u00e4
placetoken.pageHeader=Lis\u00e4\u00e4 konepaikkakoodi
placetoken.token=Paikkakoodi
placetoken.tokenNotFound=Paikkakoodia ei l\u00f6ytynyt! Tarkista koodi.
placetoken.topText=Voit yhdist\u00e4\u00e4 ryhm\u00e4njohtajasi ostaman paikan omaan k\u00e4ytt\u00e4j\u00e4tunnukseesi sy\u00f6tt\u00e4m\u00e4ll\u00e4 paikkakoodin allaolevaan kentt\u00e4\u00e4n.
placetoken.placelist=Omat paikat
placetoken.topText=Voit yhdist\u00e4\u00e4 paikan omaan k\u00e4ytt\u00e4j\u00e4tunnukseesi sy\u00f6tt\u00e4m\u00e4ll\u00e4 paikkakoodin allaolevaan kentt\u00e4\u00e4n.
poll.answer=Vastaa kyselyyn
poll.save=L\u00e4het\u00e4 vastauksesi
product.barcode=Viivakoodi
......@@ -276,6 +277,7 @@ user.bank=Pankki
user.bankaccount=Pankkitili
user.imageUploaded=Kuva lhetetty.
user.accountevents=Tilitapahtumat
user.create=Luo k\u00e4ytt\u00e4j\u00e4
user.createdmessage=K\u00e4ytt\u00e4j\u00e4tunnus on luotu onnistuneesti. Voit nyt kirjautua sis\u00e4\u00e4n.
user.defaultImage=Oletukuva
......@@ -359,4 +361,17 @@ pagination.previouspage=Edellinen
pagination.nextpage=Seuraava
pagination.lastpage=Viimeinen
newslist.header=Uutisryhmt
newsgroup.name=Uutisryhmn nimi
newsgroup.priority=Jrjestysnumero
newsgroup.writerRole=Kirjoittajaryhm
newsgroup.edit=Muokkaa
newsgroup.readerRole=Lukijoiden roolit
news.title=Otsikko
news.abstract=Lyhennelm
news.publish=Julkaise
news.expire=Lopeta julkaisu
news.save=Tallenna
usertitle.managingUser=Hallitaan kyttj
package fi.insomnia.bortal.servlet;
import java.util.regex.Pattern;
import javax.ejb.EJB;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import fi.insomnia.bortal.beans.CardTemplateBeanLocal;
import fi.insomnia.bortal.beans.PermissionBeanLocal;
import fi.insomnia.bortal.model.CardTemplate;
/**
* Servlet implementation class UploadServlet
*/
public class CardTemplateServlet extends GenericImageServlet {
/**
*
*/
private static final long serialVersionUID = -3359999630873773508L;
@EJB
private transient CardTemplateBeanLocal ctbean;
@EJB
private transient PermissionBeanLocal permbean;
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
* response)
*/
private final Pattern lhMatcher = Pattern.compile("^127.[0-9.]*|(0:)*1%0");
@Override
protected ImageMover getImagedata() {
ImageMover ret = new ImageMover();
CardTemplate templ = ctbean.find(getIdParam("imageid"));
if (templ != null) { // &&
ret.setData(templ.getImage());
ret.setImagetype("image/jpeg");
} else
{
ret.setResponse(HttpServletResponse.SC_NOT_FOUND);
}
return ret;
}
}
package fi.insomnia.bortal.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public abstract class GenericImageServlet extends HttpServlet {
/**
*
*/
protected enum ResponseType {
OK, FORBIDDEN, NOT_FOUND,
}
private static final long serialVersionUID = -2900241580433674121L;
protected class ImageMover
{
private Integer response;
private byte[] data;
private String imagetype;
public byte[] getData() {
return data;
}
public void setData(byte[] data) {
this.data = data;
}
public String getImagetype() {
return imagetype;
}
public void setImagetype(String imagetype) {
this.imagetype = imagetype;
}
public Integer getResponse() {
return response;
}
public void setResponse(Integer response) {
this.response = response;
}
}
/**
* @see HttpServlet#HttpServlet()
*/
public GenericImageServlet() {
super();
// TODO Auto-generated constructor stub
}
private static final Logger logger = LoggerFactory.getLogger(UserImageServlet.class);
protected abstract ImageMover getImagedata();
protected HttpServletRequest request;
protected Integer getIdParam(String name)
{
Integer ret = null;
String idStr = request.getParameter(name);
if (idStr != null)
{
ret = Integer.parseInt(idStr);
}
return ret;
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.request = request;
ImageMover data = getImagedata();
if (data == null || data.getResponse() != null) {
response.setStatus(data.getResponse());
response.getWriter().append("Not Found");
} else {
response.setContentLength(data.getData().length);
if (request.getParameter("download") != null)
{
response.setContentType("application/x-unknown");
}
else {
response.setContentType(data.getImagetype());
}
response.getOutputStream().write(data.getData());
}
request = null;
}
}
package fi.insomnia.bortal.servlet;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.regex.Pattern;
import javax.ejb.EJB;
import javax.imageio.ImageIO;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.beans.CardTemplateBeanLocal;
import fi.insomnia.bortal.beans.PermissionBeanLocal;
import fi.insomnia.bortal.beans.UserBeanLocal;
import fi.insomnia.bortal.enums.apps.UserPermission;
import fi.insomnia.bortal.model.PrintedCard;
import fi.insomnia.bortal.model.User;
/**
* Servlet implementation class UploadServlet
*/
public class UserCardServlet extends GenericImageServlet {
/**
*
*/
private static final long serialVersionUID = -3359999630873773508L;
@EJB
private transient UserBeanLocal userbean;
@EJB
private transient PermissionBeanLocal permbean;
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
* response)
*/
private final Pattern lhMatcher = Pattern.compile("^127.[0-9.]*|(0:)*1%0");
@EJB
private CardTemplateBeanLocal cardbean;
private static final Logger logger = LoggerFactory.getLogger(UserCardServlet.class);
@Override
protected ImageMover getImagedata() {
ImageMover ret = new ImageMover();
Integer id = getIdParam("cardid");
PrintedCard card = cardbean.getCard(id);
logger.info("image data id {}, card {}", id, card);
if (card != null) {
if (!permbean.isCurrentUser(card.getUser())
&& !permbean.hasPermission(UserPermission.MODIFY)
&& !lhMatcher.matcher(request.getLocalAddr()).matches())
{
ret.setResponse(HttpServletResponse.SC_FORBIDDEN);
}
else
{
try {
ret.setData(mkCard(card));
ret.setImagetype("image/jpeg");
} catch (IOException e) {
ret.setResponse(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
}
}
} else
{
ret.setResponse(HttpServletResponse.SC_NOT_FOUND);
}
return ret;
}
private byte[] mkCard(PrintedCard card) throws IOException {
User user = card.getUser();
BufferedImage face = ImageIO.read(new ByteArrayInputStream(user.getCurrentImage().getImageData()));
BufferedImage base = ImageIO.read(new ByteArrayInputStream(card.getTemplate().getImage()));
BufferedImage outimage = new BufferedImage(base.getWidth(), base.getHeight(), BufferedImage.TYPE_INT_RGB);
Graphics2D g = outimage.createGraphics();
// g.drawImage(org, AffineTransform.getScaleInstance(0.31, 0.31), null);
g.drawImage(base, 0, 0, base.getWidth(), base.getHeight(), null);
// g.drawImage(face, AffineTransform.getScaleInstance(0.31, 0.31),
// null);
g.drawImage(face, 50, 320, 320, 400, null);
g.setFont(new Font("Century gothic", Font.PLAIN, 70));
// g.drawString(nick, 595 -
// g.getFontMetrics().charsWidth(nick.toCharArray(), 0, nick.length()),
// 840);
g.drawString(user.getNick(), 50, 810);
g.setFont(new Font("Century gothic", Font.BOLD, 35));
StringBuilder wholeName = new StringBuilder();
wholeName.append(user.getFirstnames()).append(" ").append(user.getLastname());
// g.setFont(new Font("Arial", Font.BOLD, 35));
// g.drawString(name, 595 -
// g.getFontMetrics().charsWidth(name.toCharArray(), 0, name.length()),
// 890);
//
// g.drawString(owner.getId().toString(), 60, 948);
g.drawString(wholeName.toString(), 60, 865);
g.drawString(card.getTemplate().getName(), 60, 915);
g.dispose();
ByteArrayOutputStream ostr = new ByteArrayOutputStream();
ImageIO.write(outimage, "jpeg", ostr);
return ostr.toByteArray();
}
}
package fi.insomnia.bortal.servlet;
import java.io.IOException;
import java.util.regex.Pattern;
import javax.ejb.EJB;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.beans.PermissionDeniedException;
import fi.insomnia.bortal.beans.PermissionBeanLocal;
import fi.insomnia.bortal.beans.UserBeanLocal;
import fi.insomnia.bortal.model.User;
import fi.insomnia.bortal.model.UserImage;
/**
* Servlet implementation class UploadServlet
*/
public class UserImageServlet extends HttpServlet {
public class UserImageServlet extends GenericImageServlet {
/**
*
*/
private static final long serialVersionUID = -3359999630873773508L;
/**
* @see HttpServlet#HttpServlet()
*/
public UserImageServlet() {
super();
// TODO Auto-generated constructor stub
}
private static final Logger logger = LoggerFactory.getLogger(UserImageServlet.class);
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
* response)
*/
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
@EJB
private transient UserBeanLocal userbean;
@EJB
private transient PermissionBeanLocal permbean;
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
* response)
*/
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
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();
}
} else {
String imageidobj = request.getParameter("imageid");
private final Pattern lhMatcher = Pattern.compile("^(10|127).[0-9.]*|(0:)*1%0");
int imageid = 0;
if (imageidobj != null) {
imageid = Integer.parseInt(imageidobj);
}
try {
image = userbean.findUserImage(imageid);
} catch (PermissionDeniedException e) {
image = null;
}
@Override
protected ImageMover getImagedata() {
ImageMover ret = new ImageMover();
UserImage image = userbean.findUserimageFORCE(super.getIdParam("imageid"));
if (image != null) { // &&
// if (permbean.isCurrentUser(image.getUser()) ||
// permbean.hasPermission(UserPermission.MODIFY) ||
// lhMatcher.matcher(request.getLocalAddr()).matches())
// {
ret.setData(image.getImageData());
ret.setImagetype(image.getMimeType());
// }
// else
// {
// ret.setResponse(HttpServletResponse.SC_FORBIDDEN);
// }
} else
{
ret.setResponse(HttpServletResponse.SC_NOT_FOUND);
}
return ret;
if (image == null) {
response.setStatus(HttpServletResponse.SC_NOT_FOUND);
response.getWriter().append("Not Found");
} else {
response.setContentType(image.getMimeType());
response.getOutputStream().write(image.getImageData());
}
}
}
package fi.insomnia.bortal.web.cdiview.game;
import javax.ejb.EJB;
import javax.enterprise.context.ConversationScoped;
import javax.inject.Named;
import fi.insomnia.bortal.beans.NewsBeanLocal;
import fi.insomnia.bortal.model.NewsGroup;
import fi.insomnia.bortal.web.cdiview.GenericCDIView;
@Named
@ConversationScoped
public class GameView extends GenericCDIView {
@EJB
private NewsBeanLocal newsbean;
public NewsGroup getIndexnews()
{
return newsbean.findByName("game-index");
}
}
......@@ -35,7 +35,4 @@ public class JsfMenuitem {
return item.getHeader();
}
public boolean isCid() {
return item.isCid();
}
}
......@@ -19,6 +19,7 @@ import javax.servlet.http.HttpServletRequest;
import fi.insomnia.bortal.beans.PermissionBeanLocal;
import fi.insomnia.bortal.enums.apps.BillPermission;
import fi.insomnia.bortal.enums.apps.IAppPermission;
import fi.insomnia.bortal.enums.apps.MapPermission;
import fi.insomnia.bortal.enums.apps.UserPermission;
@RequestScoped
......@@ -70,16 +71,16 @@ public class MenuView {
MenuGroup shop = new MenuGroup("shop");
PAGEGROUPS = Collections.unmodifiableList(Arrays.asList(frontpage, user, placemap, shop));
addPage(temppages, "/index", frontpage, null);
addPage(temppages, "/index", frontpage, UserPermission.ANYUSER);
addPage(temppages, "/user/create", frontpage, UserPermission.CREATE_NEW);
addPage(temppages, "/auth/sendResetMail", frontpage, UserPermission.LOGIN);
addPage(temppages, "/user/edit", user, UserPermission.VIEW_SELF).setHeader("submenu.user.userlinks").setCid(true);
addPage(temppages, "/user/changePassword", user, UserPermission.VIEW_SELF).setCid(true);
addPage(temppages, "/user/accountEvents", user, UserPermission.VIEW_SELF).setCid(true);
addPage(temppages, "/place/myGroups", user, UserPermission.VIEW_SELF).setCid(true);
addPage(temppages, "/place/insertToken", user, UserPermission.VIEW_SELF).setCid(true);
addPage(temppages, "/user/sendPicture", user, UserPermission.VIEW_SELF).setCid(true);
addPage(temppages, "/user/edit", user, UserPermission.VIEW_SELF).setHeader("submenu.user.userlinks");
addPage(temppages, "/user/changePassword", user, null);
addPage(temppages, "/user/accountEvents", user, null);
addPage(temppages, "/place/myGroups", user, null);
addPage(temppages, "/place/insertToken", user, null);
addPage(temppages, "/user/sendPicture", user, null);
addPage(temppages, "/user/list", user, UserPermission.VIEW_ALL).setHeader("submenu.user.manageuserlinks");
addPage(temppages, "/user/create", user, UserPermission.VIEW_ALL);
......@@ -89,10 +90,10 @@ public class MenuView {
addPage(temppages, "/user/listCardTemplates", user, UserPermission.READ_ROLES);
addPage(temppages, "/user/createCardTemplate", user, UserPermission.WRITE_ROLES);
addPage(temppages, "/place/placemap", placemap, null);
addPage(temppages, "/place/placemap", placemap, MapPermission.VIEW);
addPage(temppages, "/shop/createBill", shop, BillPermission.CREATE_BILL).setCid(true);
addPage(temppages, "/bill/list", shop, BillPermission.VIEW_OWN).setCid(true);
addPage(temppages, "/shop/createBill", shop, BillPermission.CREATE_BILL);
addPage(temppages, "/bill/list", shop, BillPermission.VIEW_OWN);
PAGES = Collections.unmodifiableMap(temppages);
}
......
......@@ -8,7 +8,6 @@ public class Menuitem {
private final MenuGroup group;
private final IAppPermission permission;
private String header;
private boolean cid = false;
public Menuitem(String url, MenuGroup group, IAppPermission perm) {
this.url = url;
......@@ -38,12 +37,4 @@ public class Menuitem {
return header;
}
public void setCid(boolean val) {
this.cid = val;
}
public boolean isCid() {
return cid;
}
}
......@@ -6,6 +6,7 @@ import javax.inject.Named;
import fi.insomnia.bortal.beans.NewsBeanLocal;
import fi.insomnia.bortal.enums.apps.NewsPermission;
import fi.insomnia.bortal.model.News;
import fi.insomnia.bortal.model.NewsGroup;
import fi.insomnia.bortal.web.cdiview.GenericCDIView;
......@@ -17,26 +18,42 @@ public class NewsgroupView extends GenericCDIView {
*
*/
private static final long serialVersionUID = 1752803732191587695L;
private int newsgroupid;
private Integer newsgroupid;
private Integer newsid;
private NewsGroup newsgroup;
private News news;
@EJB
private transient NewsBeanLocal newsbean;
private NewsGroup newsgroup;
public void initView() {
if (super.requirePermissions(permbean.hasPermission(NewsPermission.MANAGE)) && newsgroup == null) {
super.beginConversation();
newsgroup = newsbean.findById(newsgroupid);
}
}
public void initNews() {
if (super.requirePermissions(permbean.hasPermission(NewsPermission.MANAGE)) && getNews() == null) {
super.beginConversation();
news = newsbean.findNews(newsid);
}
}
public void initCreate() {
if (super.requirePermissions(permbean.hasPermission(NewsPermission.MANAGE))) {
super.beginConversation();
if (newsgroupid == 0 && newsgroup == null) {
newsgroup = new NewsGroup();
} else {
newsgroup = newsbean.findById(newsgroupid);
}
newsgroup = new NewsGroup();
newsgroup.setPriority(10);
}
}
public String createNew() {
this.addFaceMessage("newsgroup.created");
newsbean.createNewsgroup(newsgroup);
return null;
return "/news/edit.xhtml";
}
public String saveNewsgroup() {
......@@ -45,11 +62,24 @@ public class NewsgroupView extends GenericCDIView {
return null;
}
public void setNewsgroupid(int newsgroupid) {
public String createNews()
{
setNews(newsbean.createNews(newsgroup));
return "/news/editNews";
}
public String saveNews()
{
newsbean.saveNews(getNews());
newsgroup = getNews().getGroup();
return null;
}
public void setNewsgroupid(Integer newsgroupid) {
this.newsgroupid = newsgroupid;
}
public int getNewsgroupid() {
public Integer getNewsgroupid() {
return newsgroupid;
}
......@@ -60,4 +90,20 @@ public class NewsgroupView extends GenericCDIView {
public NewsGroup getNewsgroup() {
return newsgroup;
}
public Integer getNewsid() {
return newsid;
}
public void setNewsid(Integer newsid) {
this.newsid = newsid;
}
public News getNews() {
return news;
}
public void setNews(News news) {
this.news = news;
}
}
package fi.insomnia.bortal.web.cdiview.user;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.ejb.EJB;
import javax.enterprise.context.ConversationScoped;
import javax.inject.Inject;
import javax.inject.Named;
import org.primefaces.model.UploadedFile;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.beans.CardTemplateBeanLocal;
import fi.insomnia.bortal.beans.EventBeanLocal;
import fi.insomnia.bortal.enums.apps.UserPermission;
import fi.insomnia.bortal.model.CardTemplate;
import fi.insomnia.bortal.model.User;
import fi.insomnia.bortal.utilities.I18n;
import fi.insomnia.bortal.web.annotations.SelectedUser;
import fi.insomnia.bortal.web.cdiview.GenericCDIView;
@Named
@ConversationScoped
public class CardView extends GenericCDIView {
private static final long serialVersionUID = -9115983838324313414L;
private Integer templateId;
private CardTemplate cardTemplate;
@EJB
private CardTemplateBeanLocal cfbean;
@EJB
private EventBeanLocal eventBean;
@Inject
@SelectedUser
private User user;
private Integer cardid;
private List<CardTemplate> cardTemplates;
private UploadedFile templateImage;
private static final Logger logger = LoggerFactory.getLogger(CardView.class);
public void initCardCreate() {
if (super.requirePermissions(UserPermission.WRITE_ROLES))
{
setCardTemplate(new CardTemplate(eventBean.getCurrentEvent()));
super.beginConversation();
}
}
public String saveImage()
{
try {
logger.info("Templateimage: {}", getTemplateImage());
cardTemplate = cfbean.saveImage(cardTemplate, getTemplateImage().getContents());
} catch (IOException e) {
logger.info("Error converting template image", e);
super.addFaceMessage("template.uploadFailed", e.getMessage());
}
return null;
}
public List<CardTemplate> getTemplatesWithNull() {
ArrayList<CardTemplate> retlist = new ArrayList<CardTemplate>();
CardTemplate dummytempl = new CardTemplate();
dummytempl.setName(I18n.get("cardTemplate.emptyCardTemplate"));
retlist.add(dummytempl);
retlist.addAll(cfbean.findAll());
return retlist;
}
public void initCardTemplate()
{
if (super.requirePermissions(UserPermission.WRITE_ROLES))
{
setCardTemplate(cfbean.find(templateId));
super.beginConversation();
}
}
public void initCardTemplatelist()
{
if (super.requirePermissions(UserPermission.WRITE_ROLES))
{
cardTemplates = eventBean.getCurrentEvent().getCardTemplates();
}
}
public Integer getCardid() {
return cardid;
}
public void setCardid(Integer cardid) {
this.cardid = cardid;
}
public String createTemplate() {
cfbean.create(getCardTemplate());
cardTemplates = getCardTemplate().getEvent().getCardTemplates();
return "/user/listCardTemplates";
}
public String saveTemplate()
{
cardTemplate = cfbean.save(cardTemplate);
return null;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public List<CardTemplate> getCardTemplates() {
return cardTemplates;
}
public void setCardTemplates(List<CardTemplate> cardTemplates) {
this.cardTemplates = cardTemplates;
}
public Integer getTemplateId() {
return templateId;
}
public void setTemplateId(Integer templateId) {
this.templateId = templateId;
}
public CardTemplate getCardTemplate() {
return cardTemplate;
}
public void setCardTemplate(CardTemplate cardTemplate) {
this.cardTemplate = cardTemplate;
}
public UploadedFile getTemplateImage() {
return templateImage;
}
public void setTemplateImage(UploadedFile templateImage) {
this.templateImage = templateImage;
}
}
package fi.insomnia.bortal.web.cdiview.user;
import javax.ejb.EJB;
import javax.enterprise.context.ConversationScoped;
import javax.faces.model.ListDataModel;
import javax.inject.Inject;
import javax.inject.Named;
import fi.insomnia.bortal.beans.CardTemplateBeanLocal;
import fi.insomnia.bortal.model.PrintedCard;
import fi.insomnia.bortal.model.User;
import fi.insomnia.bortal.web.annotations.SelectedUser;
import fi.insomnia.bortal.web.cdiview.GenericCDIView;
@Named
@ConversationScoped
public class UserCardView extends GenericCDIView {
@EJB
private CardTemplateBeanLocal cardBean;
@Inject
@SelectedUser
private User user;
private ListDataModel<PrintedCard> printedCards;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public ListDataModel<PrintedCard> getPrintedCards() {
if (printedCards == null && user != null)
{
printedCards = new ListDataModel<PrintedCard>(cardBean.getCards(user));
}
return printedCards;
}
public void setPrintedCards(ListDataModel<PrintedCard> printedCards) {
this.printedCards = printedCards;
}
}
package fi.insomnia.bortal.web.cdiview.user;
import java.io.IOException;
import javax.ejb.EJB;
import javax.enterprise.context.Conversation;
import javax.enterprise.context.ConversationScoped;
......@@ -7,13 +9,16 @@ import javax.enterprise.inject.Produces;
import javax.inject.Inject;
import javax.inject.Named;
import org.primefaces.model.CroppedImage;
import org.primefaces.model.UploadedFile;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.beans.CardTemplateBeanLocal;
import fi.insomnia.bortal.beans.PermissionDeniedException;
import fi.insomnia.bortal.beans.UserBeanLocal;
import fi.insomnia.bortal.enums.apps.UserPermission;
import fi.insomnia.bortal.model.PrintedCard;
import fi.insomnia.bortal.model.User;
import fi.insomnia.bortal.model.UserImage;
import fi.insomnia.bortal.web.annotations.LoggedIn;
......@@ -34,6 +39,8 @@ public class UserView extends GenericCDIView {
private Integer userid;
private UploadedFile image;
private CroppedImage croppedImage;
private User user;
@Inject
private transient Conversation conversation;
......@@ -49,6 +56,8 @@ public class UserView extends GenericCDIView {
private boolean canSave = false;
private String password;
private String passwordcheck;
@EJB
private CardTemplateBeanLocal cardBean;
@Produces
@LoggedIn
......@@ -69,6 +78,37 @@ public class UserView extends GenericCDIView {
return user;
}
public String crop()
{
logger.info("Cropped image {}x{}", croppedImage.getLeft(), croppedImage.getTop());
logger.info("Cropped data bytesize {}, type {}", croppedImage.getBytes().length, croppedImage.getOriginalFilename());
UserImage newImage;
try {
newImage = userbean.saveCroppedImage(user.getCurrentImage(),
croppedImage.getLeft(), croppedImage.getTop(), croppedImage.getWidth(), croppedImage.getHeight());
user = newImage.getUser();
} catch (IOException e) {
logger.info("Error converting image", e);
super.addFaceMessage("user.errorConvertingImage");
}
return "redirToUserimage";
}
public String makeCard()
{
try {
PrintedCard card = cardBean.checkPrintedCard(user);
if (card != null)
{
user = card.getUser();
}
} catch (PermissionDeniedException e) {
logger.info("Error printing card {}", e);
}
return null;
}
public String sendImage() {
try {
......@@ -106,6 +146,11 @@ public class UserView extends GenericCDIView {
}
}
public boolean canManage()
{
return permbean.hasPermission(UserPermission.MODIFY);
}
public String saveUser() {
if (permbean.getCurrentUser().equals(user) || permbean.hasPermission(UserPermission.MODIFY)) {
this.addFaceMessage("user.successfullySaved");
......@@ -123,6 +168,11 @@ public class UserView extends GenericCDIView {
return "edit";
}
public boolean isCurrentUser()
{
return permbean.isCurrentUser(user);
}
public String createUser() {
userbean.createNewUser(user, getPassword());
return "/user/created";
......@@ -171,4 +221,12 @@ public class UserView extends GenericCDIView {
public void setImage(UploadedFile image) {
this.image = image;
}
public CroppedImage getCroppedImage() {
return croppedImage;
}
public void setCroppedImage(CroppedImage croppedImage) {
this.croppedImage = croppedImage;
}
}
package fi.insomnia.bortal.web.converter;
import javax.ejb.EJB;
import javax.enterprise.context.RequestScoped;
import javax.inject.Named;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.beans.CardTemplateBeanLocal;
import fi.insomnia.bortal.model.CardTemplate;
import fi.insomnia.bortal.utilities.jsf.EntityFinderBean;
@Named("cardTemplateConverter")
@RequestScoped
public class CardTemplateConverter extends GenericIntegerEntityConverter<CardTemplate> {
@EJB
private CardTemplateBeanLocal ctbean;
private static final Logger logger = LoggerFactory.getLogger(CardTemplateConverter.class);
@Override
protected EntityFinderBean<CardTemplate> getFinder() {
return ctbean;
protected CardTemplate find(Integer id) {
CardTemplate ret = ctbean.find(id);
logger.info("CardTemplateConverter {} with id {}", ret, id);
return ret;
}
//
......
......@@ -7,19 +7,52 @@ import javax.faces.convert.Converter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.model.GenericEntity;
import fi.insomnia.bortal.utilities.jsf.EntityFinderBean;
import fi.insomnia.bortal.utilities.jpa.ModelInterface;
public abstract class GenericIntegerEntityConverter<T extends GenericEntity> implements Converter {
public abstract class GenericIntegerEntityConverter<T extends ModelInterface<Integer>> implements Converter {
protected abstract EntityFinderBean<T> getFinder();
protected abstract T find(Integer id);
public GenericIntegerEntityConverter() {
super();
}
// private static final IMultiIdConverter<Integer> INTEGER_CONVERTER = new
// IMultiIdConverter<Integer>() {
//
// @Override
// public Integer getId(String idstring) {
// if (idstring != null && !idstring.isEmpty() && !idstring.equals("0")) {
// try {
// return Integer.parseInt(idstring);
// } catch (NumberFormatException e)
// {
// logger.info("Caught number format exception while parsing {}", idstring,
// e);
// }
// }
// return null;
//
// }
//
// @Override
// public String getString(Integer id) {
// if (id != null)
// {
// return id.toString();
// }
// return "0";
// }
//
// };
private static final Logger logger = LoggerFactory.getLogger(GenericIntegerEntityConverter.class);
// public IMultiIdConverter<Integer> getConverter() {
//
// return INTEGER_CONVERTER;
// }
@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
T ret = null;
......@@ -27,7 +60,7 @@ public abstract class GenericIntegerEntityConverter<T extends GenericEntity> imp
if (value != null) {
id = Integer.parseInt(value);
if (id != null) {
ret = getFinder().find(id);
ret = find(id);
}
}
logger.debug("Converted String {} to Integer {} became object {}", new Object[] { value, id, ret });
......@@ -38,11 +71,50 @@ public abstract class GenericIntegerEntityConverter<T extends GenericEntity> imp
public String getAsString(FacesContext context, UIComponent component, Object value) {
String ret = null;
if (value != null && value instanceof GenericEntity) {
GenericEntity entity = (GenericEntity) value;
ret = entity.getId().toString();
if (value != null && value instanceof ModelInterface) {
ModelInterface<Integer> entity = (ModelInterface<Integer>) value;
if (entity != null && entity.getId() != null)
{
ret = entity.getId().toString();
}
}
return ret;
}
//
// @Override
// public Object getAsObject(FacesContext context, UIComponent component,
// String value) {
// IntegerModelInterface ret = null;
// if (value != null && !value.isEmpty()) {
// try {
// int id = Integer.parseInt(value);
// if (id == 0) {
// ret = null;
// } else {
// ret = getFacade().find(id);
// }
// } catch (NumberFormatException ne) {
// logger.info("Error parsing value '{}' as number!");
// ret = null;
// }
// }
// return ret;
// }
//
// @Override
// public String getAsString(FacesContext context, UIComponent component,
// Object value) {
//
// String ret = "";
// if (value == null) {
// ret = "0";
// } else if (value instanceof IntegerModelInterface) {
// Integer id = ((IntegerModelInterface) value).getId();
// if (id != null) {
// ret = id.toString();
// }
// }
// return ret;
// }
}
No preview for this file type
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!