Commit 548f4f2c by Tuomas Riihimäki Committed by Juho Juopperi

Initial stream version...

There I fixed it....
1 parent 1709bded
Showing with 1631 additions and 541 deletions
package fi.insomnia.bortal.beans;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
......@@ -10,12 +11,14 @@ import java.util.Map.Entry;
import javax.annotation.security.DeclareRoles;
import javax.annotation.security.RolesAllowed;
import javax.ejb.EJB;
import javax.ejb.EJBAccessException;
import javax.ejb.Stateless;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.enums.apps.ShopPermission;
import fi.insomnia.bortal.enums.apps.SpecialPermission;
import fi.insomnia.bortal.enums.apps.UserPermission;
import fi.insomnia.bortal.facade.AccountEventFacade;
import fi.insomnia.bortal.model.AccountEvent;
......@@ -28,7 +31,7 @@ import fi.insomnia.bortal.model.User;
* Session Bean implementation class AccountEventBean
*/
@Stateless
@DeclareRoles({ UserPermission.S_VIEW_ACCOUNTEVENTS })
@DeclareRoles({ UserPermission.S_VIEW_ACCOUNTEVENTS, SpecialPermission.S_USER })
public class AccountEventBean implements AccountEventBeanLocal {
@EJB
......@@ -132,4 +135,40 @@ public class AccountEventBean implements AccountEventBeanLocal {
return ret;
}
@Override
@RolesAllowed(SpecialPermission.S_USER)
public BigDecimal getAccountBalance(User user) {
if (user == null) {
user = permbean.getCurrentUser();
}
if (!permbean.isCurrentUser(user) && !permbean.hasPermission(UserPermission.VIEW_ACCOUNTEVENTS)) {
throw new EJBAccessException("No enough rights to view accountevents");
}
List<AccountEvent> acs = accountfacade.getAccountEvents(user);
BigDecimal ret = BigDecimal.ZERO;
if (acs != null)
{
for (AccountEvent ac : acs) {
ret = ret.add(ac.getTotal()).setScale(2, RoundingMode.HALF_UP);
}
}
return ret;
}
@Override
@RolesAllowed(SpecialPermission.S_USER)
public List<AccountEvent> getAccountEvents(User user) {
if (user == null) {
user = permbean.getCurrentUser();
}
if (!permbean.isCurrentUser(user) && !permbean.hasPermission(UserPermission.VIEW_ACCOUNTEVENTS)) {
throw new EJBAccessException("No enough rights to view accountevents");
}
return accountfacade.getAccountEvents(user);
}
}
......@@ -12,8 +12,6 @@ import javax.ejb.EJB;
import javax.ejb.EJBAccessException;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
......@@ -56,8 +54,6 @@ public class BillBean implements BillBeanLocal {
private EventBeanLocal eventbean;
@EJB
private BillLineFacade billLineFacade;
@PersistenceContext
private EntityManager em;
@EJB
private PermissionBeanLocal permbean;
......@@ -87,7 +83,6 @@ public class BillBean implements BillBeanLocal {
@Override
@RolesAllowed(BillPermission.S_VIEW_OWN)
public Bill findById(int id) {
LanEvent event = eventbean.getCurrentEvent();
if (id <= 0) {
return null;
}
......@@ -218,7 +213,7 @@ public class BillBean implements BillBeanLocal {
ac.setSeller(permbean.getCurrentUser());
bill.setAccountEvent(ac);
bill.setPaidDate(when);
bill.setPaidDate(when.getTime());
bill = billFacade.merge(bill);
......@@ -246,7 +241,7 @@ public class BillBean implements BillBeanLocal {
@Override
@RolesAllowed({ BillPermission.S_CREATE_BILL, BillPermission.S_WRITE_ALL })
public void createBill(Bill bill) {
if (!permbean.hasPermission(BillPermission.WRITE_ALL) || !permbean.isCurrentUser(bill.getUser())) {
if (!permbean.isCurrentUser(bill.getUser()) && !permbean.hasPermission(BillPermission.WRITE_ALL)) {
loggingBean.logMessage(SecurityLogType.permissionDenied, permbean.getCurrentUser(), "Not enought rights to create bill for user ");
throw new EJBAccessException("Could not create bill for another user");
}
......@@ -255,6 +250,11 @@ public class BillBean implements BillBeanLocal {
user.setBills(new ArrayList<Bill>());
}
user.getBills().add(bill);
generateBillNumber(bill);
}
@RolesAllowed({ BillPermission.S_WRITE_ALL })
public Bill save(Bill bill) {
return billFacade.merge(bill);
}
}
......@@ -103,6 +103,7 @@ public class CardTemplateBean implements CardTemplateBeanLocal {
logger.info("Checking printed card");
user = userfacade.find(user.getId());
LanEvent currEvent = eventBean.getCurrentEvent();
List<PrintedCard> myCards = printedcardfacade.findForUser(currEvent, user);
......@@ -137,7 +138,8 @@ public class CardTemplateBean implements CardTemplateBeanLocal {
biggestCard.setEnabled(false);
// biggestCard = printedcardfacade.merge(biggestCard);
}
PrintedCard pc = new PrintedCard(currEvent);
PrintedCard pc = new PrintedCard();
pc.setEvent(currEvent);
pc.setTemplate(roleCard);
pc.setUser(user);
......
......@@ -15,9 +15,12 @@ import fi.insomnia.bortal.enums.apps.SpecialPermission;
import fi.insomnia.bortal.facade.EventFacade;
import fi.insomnia.bortal.facade.EventOrganiserFacade;
import fi.insomnia.bortal.facade.LanEventDomainFacade;
import fi.insomnia.bortal.facade.LanEventPropertyFacade;
import fi.insomnia.bortal.model.EventOrganiser;
import fi.insomnia.bortal.model.LanEvent;
import fi.insomnia.bortal.model.LanEventDomain;
import fi.insomnia.bortal.model.LanEventProperty;
import fi.insomnia.bortal.model.LanEventPropertyKey;
import fi.insomnia.bortal.model.User;
/**
......@@ -45,6 +48,8 @@ public class EventBean implements EventBeanLocal {
private PermissionBeanLocal permbean;
@EJB
private LanEventDomainFacade domainfacade;
@EJB
private LanEventPropertyFacade eventPropertyFacade;
@Override
public LanEvent getEventByHostname(String hostname) {
......@@ -93,7 +98,6 @@ public class EventBean implements EventBeanLocal {
LanEvent ret = null;
if (BortalLocalContextHolder.getHostnameId() != null) {
ret = eventFacade.find(BortalLocalContextHolder.getHostnameId());
if (ret != null) {
return ret;
......@@ -105,8 +109,7 @@ public class EventBean implements EventBeanLocal {
}
LanEventDomain domain = domainfacade.findByDomain(hostname);
if (domain != null)
{
if (domain != null) {
ret = domain.getEvent();
}
......@@ -115,6 +118,7 @@ public class EventBean implements EventBeanLocal {
}
BortalLocalContextHolder.setHostnameId(ret.getId());
logger.debug("Got event {} from hostname {}", ret.getName(), hostname);
return ret;
}
......@@ -139,4 +143,22 @@ public class EventBean implements EventBeanLocal {
return eventFacade.flushCache();
}
@Override
public LanEventProperty getProperty(LanEventPropertyKey property) {
return eventPropertyFacade.find(getCurrentEvent(), property);
}
@Override
public String getPropertyString(LanEventPropertyKey property)
{
LanEventProperty retProp = eventPropertyFacade.find(getCurrentEvent(), property);
String ret = null;
if (retProp == null) {
ret = property.getDefaultvalue();
} else {
ret = retProp.getTextvalue();
}
return ret;
}
}
......@@ -64,16 +64,14 @@ public class JaasBean implements JaasBeanLocal, JaasBeanRemote {
@Override
public boolean authenticate(String username, String password) {
logger.warn("Trying to login as {}", username);
boolean ret = (tryLogin(username, password) != null);
return ret;
}
@Override
public Enumeration<String> getGroupNames(String user) {
logger.info("Fetching groupNames for user {}", user);
User usr = userbean.getUser(user);
logger.info("Fetching groupNames for user {} event {}", user, eventbean.getCurrentEvent().getName());
User usr = userfacade.findByLogin(user);
HashSet<String> roleset = new HashSet<String>();
roleset.add(UserPermission.ANYUSER.getFullName());
......
......@@ -52,14 +52,14 @@ public class MailMessageBean implements MessageListener {
logger.debug("Got message {}", mailmsg.getToName());
if (BortalLocalContextHolder.isInDevelopmentMode()) {
String dmessage = " To: "
String dmessage = " To: "
+ mailmsg.getTo() + "\n Subject: "
+ mailmsg.getSubject() + "\n Text: "
+ mailmsg.getMessage() + "\n";
logger.debug("Not sendet mail (debug -mode): {}", dmessage);
} else {
MimeMessage msg = new MimeMessage(mailSession);
msg.setSubject(mailmsg.getSubject());
msg.setFrom(mailmsg.getFrom());
......@@ -70,15 +70,11 @@ public class MailMessageBean implements MessageListener {
}
} catch (JMSException e) {
logger.debug("Error receiving jms for {}", mailmsg, e);
logger.warn("Error receiving jms for {}", mailmsg, e);
} catch (MessagingException e) {
logger.debug(
"Unsupported encoding exception while sending mail to {}",
mailmsg, e);
logger.warn("Messaging Exception exception while sending mail to " + mailmsg, e);
} catch (UnsupportedEncodingException e) {
logger.debug(
"Unsupported encoding exception while sending mail to {}",
mailmsg, e);
logger.warn("Unsupported encoding exception while sending mail to {}" + mailmsg, e);
}
}
......
......@@ -12,6 +12,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.enums.apps.BillPermission;
import fi.insomnia.bortal.enums.apps.ContentPermission;
import fi.insomnia.bortal.enums.apps.MapPermission;
import fi.insomnia.bortal.enums.apps.PollPermission;
import fi.insomnia.bortal.enums.apps.ShopPermission;
......@@ -68,6 +69,12 @@ public class Menubean implements MenubeanLocal {
frontTopnavi.addPage(menuitemfacade.findOrCreate("/index"), UserPermission.ANYUSER);
frontTopnavi.addPage(menuitemfacade.findOrCreate("/user/create"), UserPermission.CREATE_NEW);
frontTopnavi.addPage(menuitemfacade.findOrCreate("/auth/sendResetMail"), UserPermission.LOGIN);
frontTopnavi.addPage(menuitemfacade.findOrCreate("/user/invite"), UserPermission.INVITE_USERS);
frontTopnavi.addPage(menuitemfacade.findOrCreate("/permissionDenied"), null).setVisible(false);
frontTopnavi.addPage(menuitemfacade.findOrCreate("/auth/login"), null).setVisible(false);
frontTopnavi.addPage(menuitemfacade.findOrCreate("/auth/loginError"), null).setVisible(false);
frontTopnavi.addPage(menuitemfacade.findOrCreate("/auth/logout"), null).setVisible(false);
frontTopnavi.addPage(menuitemfacade.findOrCreate("/auth/logoutResponse"), null).setVisible(false);
MenuNavigation userTopnavi = usernavi.addPage(null, null);
userTopnavi.setKey("topnavi.user");
......@@ -93,7 +100,7 @@ public class Menubean implements MenubeanLocal {
MenuNavigation adminnavi = new MenuNavigation(ev, "supernavi.admin");
navifacade.create(adminnavi);
MenuNavigation adminuser = adminnavi.addPage(null, null);
adminuser.setKey("topnavi.usermgmt");
adminuser.addPage(menuitemfacade.findOrCreate("/useradmin/list"), UserPermission.VIEW_ALL).setHeader("submenu.user.manageuserlinks");
adminuser.addPage(menuitemfacade.findOrCreate("/useradmin/create"), UserPermission.VIEW_ALL);
adminuser.addPage(menuitemfacade.findOrCreate("/role/list"), UserPermission.READ_ROLES).setHeader("submenu.user.rolelinks");
......@@ -124,6 +131,12 @@ public class Menubean implements MenubeanLocal {
prodnavi.addPage(menuitemfacade.findOrCreate("/product/list"), ShopPermission.LIST_ALL_PRODUCTS);
prodnavi.addPage(menuitemfacade.findOrCreate("/product/create"), ShopPermission.MANAGE_PRODUCTS);
prodnavi.addPage(menuitemfacade.findOrCreate("/product/createDiscount"), null).setVisible(false);
MenuNavigation contentnavi = adminnavi.addPage(null, null);
contentnavi.setKey("topnavi.contents");
contentnavi.addPage(menuitemfacade.findOrCreate("/pages/list"), ContentPermission.MANAGE_PAGES);
contentnavi.addPage(menuitemfacade.findOrCreate("/pages/create"), ContentPermission.MANAGE_PAGES);
}
@Override
......
......@@ -15,6 +15,7 @@ import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.enums.apps.BillPermission;
import fi.insomnia.bortal.enums.apps.ContentPermission;
import fi.insomnia.bortal.enums.apps.IAppPermission;
import fi.insomnia.bortal.enums.apps.LayoutPermission;
import fi.insomnia.bortal.enums.apps.MapPermission;
import fi.insomnia.bortal.enums.apps.PollPermission;
import fi.insomnia.bortal.enums.apps.ShopPermission;
......@@ -38,6 +39,7 @@ import fi.insomnia.bortal.model.User;
UserPermission.S_READ_ROLES,
UserPermission.S_ANYUSER,
UserPermission.S_MANAGE_HTTP_SESSION,
UserPermission.S_INVITE_USERS,
MapPermission.S_VIEW,
MapPermission.S_MANAGE_MAPS,
......@@ -70,7 +72,10 @@ import fi.insomnia.bortal.model.User;
TerminalPermission.S_TERMINAL,
TerminalPermission.S_CASHIER_TERMINAL,
TerminalPermission.S_CUSTOMER_TERMINAL,
TerminalPermission.S_SELFHELP_TERMINAL
TerminalPermission.S_SELFHELP_TERMINAL,
LayoutPermission.S_MANAGE_MENU,
})
public class PermissionBean implements PermissionBeanLocal {
......
......@@ -78,6 +78,8 @@ public class PlaceBean implements PlaceBeanLocal {
private UserFacade userfacade;
@EJB
private LoggingBeanLocal loggerbean;
@EJB
private AccountEventBeanLocal acbean;
@Override
@RolesAllowed(MapPermission.S_MANAGE_MAPS)
......@@ -236,9 +238,10 @@ public class PlaceBean implements PlaceBeanLocal {
// PlaceGroup pg = pgbean.createPlaceGroup(user);
BigDecimal totalprice = addAndCalcPrice(user, null);
BigDecimal balance = user.getAccountBalance();
BigDecimal balance = acbean.getAccountBalance(user);
if (balance.compareTo(totalprice) < 0) {
logger.info("User {} Could not buy things because account balance {} is too low for purchase {}", new Object[] { user, balance, totalprice });
}
for (Entry<Product, Integer> line : getPlaceProductcount(places).entrySet()) {
......
......@@ -66,7 +66,7 @@ public class ProductBean implements ProductBeanLocal {
@Override
@RolesAllowed(ShopPermission.S_LIST_USERPRODUCTS)
public List<Product> listUserShoppableProducts() {
return productFacade.findPrepaidProducts(eventBean.getCurrentEvent());
return productFacade.findPrepaidProducts();
}
@Override
......
package fi.insomnia.bortal.beans;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.annotation.security.DeclareRoles;
import javax.annotation.security.PermitAll;
import javax.annotation.security.RolesAllowed;
import javax.ejb.EJB;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.enums.apps.ContentPermission;
import fi.insomnia.bortal.facade.SitePageFacade;
import fi.insomnia.bortal.model.PageContent;
import fi.insomnia.bortal.model.Role;
import fi.insomnia.bortal.model.SitePage;
/**
......@@ -16,6 +25,12 @@ import fi.insomnia.bortal.model.SitePage;
*/
@Stateless
@LocalBean
@DeclareRoles({
ContentPermission.S_MANAGE_PAGES,
ContentPermission.S_MANAGE_NEWS,
ContentPermission.S_MANAGE_ACTIONLOG,
})
public class SitePageBean implements SitePageBeanLocal {
/**
......@@ -33,24 +48,26 @@ public class SitePageBean implements SitePageBeanLocal {
@EJB
private PermissionBeanLocal permbean;
@EJB
private UserBean userbean;
@Override
public SitePage find(String siteName) {
return sitepagefacade.find(siteName);
}
private Logger logger = LoggerFactory.getLogger(SitePageBean.class);
@Override
@RolesAllowed(ContentPermission.S_MANAGE_PAGES)
public void create(SitePage sitepage) {
sitepage.setEvent(eventbean.getCurrentEvent());
sitepagefacade.create(sitepage);
}
@Override
@RolesAllowed(ContentPermission.S_MANAGE_PAGES)
public SitePage save(SitePage sitepage) {
return sitepagefacade.merge(sitepage);
}
@Override
@RolesAllowed(ContentPermission.S_MANAGE_PAGES)
public PageContent createContent(SitePage sitepage) {
sitepage = sitepagefacade.find(sitepage.getId());
PageContent ret = new PageContent(sitepage);
......@@ -75,8 +92,45 @@ public class SitePageBean implements SitePageBeanLocal {
}
@Override
@RolesAllowed(ContentPermission.S_MANAGE_PAGES)
public List<SitePage> findAll() {
return sitepagefacade.findAll();
}
@Override
@RolesAllowed(ContentPermission.S_MANAGE_PAGES)
public SitePage find(Integer id) {
return sitepagefacade.find(id);
}
@Override
@PermitAll
public List<PageContent> findContentsForUser(Integer id) {
return getContentsForPage(sitepagefacade.find(id));
}
private List<PageContent> getContentsForPage(SitePage page)
{
List<Role> roles = userbean.localFindUsersRoles(permbean.getCurrentUser());
logger.info("Got userroles {}", roles);
List<PageContent> ret = null;
if (page != null && page.getAllowedRoles() != null)
{
for (Role r : page.getAllowedRoles()) {
if (roles.contains(r)) {
ret = sitepagefacade.findContents(page, new Date());
break;
}
}
}
return ret;
}
@Override
public List<PageContent> findContentsForUser(String name) {
SitePage page = sitepagefacade.find(name);
logger.info("Trying to fetch contents for page {}, {}", name, page);
return getContentsForPage(page);
}
}
......@@ -4,6 +4,7 @@ import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collection;
......@@ -12,6 +13,7 @@ import java.util.List;
import java.util.Set;
import javax.annotation.security.DeclareRoles;
import javax.annotation.security.PermitAll;
import javax.annotation.security.RolesAllowed;
import javax.ejb.EJB;
import javax.ejb.EJBAccessException;
......@@ -27,10 +29,12 @@ import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.enums.apps.SpecialPermission;
import fi.insomnia.bortal.enums.apps.UserPermission;
import fi.insomnia.bortal.facade.GroupMembershipFacade;
import fi.insomnia.bortal.facade.RoleFacade;
import fi.insomnia.bortal.facade.UserFacade;
import fi.insomnia.bortal.facade.UserImageFacade;
import fi.insomnia.bortal.model.GroupMembership;
import fi.insomnia.bortal.model.LanEvent;
import fi.insomnia.bortal.model.LanEventPropertyKey;
import fi.insomnia.bortal.model.PlaceGroup;
import fi.insomnia.bortal.model.Role;
import fi.insomnia.bortal.model.User;
......@@ -45,7 +49,13 @@ import fi.insomnia.bortal.utilities.SearchResult;
*/
@LocalBean
@Stateless
@DeclareRoles({ UserPermission.S_VIEW_ALL, SpecialPermission.S_USER })
@DeclareRoles({
UserPermission.S_VIEW_ALL,
UserPermission.S_CREATE_NEW,
UserPermission.S_INVITE_USERS,
UserPermission.S_MODIFY,
SpecialPermission.S_USER,
})
public class UserBean implements UserBeanLocal {
private static final Logger logger = LoggerFactory.getLogger(UserBean.class);
......@@ -87,6 +97,9 @@ public class UserBean implements UserBeanLocal {
@EJB
private LoggingBeanLocal loggerbean;
@EJB
private RoleFacade rolefacade;
@Override
@RolesAllowed(UserPermission.S_VIEW_ALL)
public List<User> getUsers() {
......@@ -104,17 +117,12 @@ public class UserBean implements UserBeanLocal {
}
User ret = userFacade.merge(user);
ctbean.checkPrintedCard(user);
ctbean.checkPrintedCard(ret);
return ret;
}
@Override
public User getUser(String nick) {
return userFacade.findByLogin(nick);
}
@Override
public List<Role> findUsersRoles(User u) {
User currusr = permbean.getCurrentUser();
if (!currusr.equals(u) && !permbean.hasPermission(UserPermission.MODIFY)) {
......@@ -130,7 +138,7 @@ public class UserBean implements UserBeanLocal {
Set<Role> checkedRoles = new HashSet<Role>();
if (u != null)
{
addRecursive(checkedRoles, u.getRoles());
addRecursive(checkedRoles, rolefacade.findForUser(u));
if (permbean.isLoggedIn()) {
......@@ -150,13 +158,13 @@ public class UserBean implements UserBeanLocal {
return new ArrayList<Role>(checkedRoles);
}
private void addRecursive(Set<Role> checkedRoles, Collection<Role> roles) {
private static void addRecursive(Set<Role> checkedRoles, Collection<Role> roles) {
for (Role r : roles) {
addRecursive(checkedRoles, r);
}
}
private void addRecursive(Set<Role> checkedRoles, Role role) {
private static void addRecursive(Set<Role> checkedRoles, Role role) {
if (role == null || checkedRoles.contains(role)) {
return;
}
......@@ -223,6 +231,7 @@ public class UserBean implements UserBeanLocal {
// }
@Override
@RolesAllowed(UserPermission.S_CREATE_NEW)
public User createNewUser(User user, String password) {
user.resetPassword(password);
......@@ -258,32 +267,36 @@ public class UserBean implements UserBeanLocal {
}
@Override
public User initPasswordReset(User user, String hash, String mailpath) {
public boolean initPasswordReset(String username, String url) {
User user = userFacade.findByLogin(username);
String hash = PasswordFunctions.generateRandomString(25);
logger.info("Initializing password sending: {}, hash: {}", user, hash);
String path = MessageFormat.format(url, new Object[] { user.getId(), hash });
if (hash == null || hash.length() < 20 || user == null || user.getEmail() == null || user.getEmail().length() <= 5) {
logger.info("Not sending email with params {} {}", new Object[] { user, hash });
return null;
return false;
}
logger.info("sending mail! user {} hash {} path {}", new Object[] { user, hash, mailpath });
MailMessage msg = new MailMessage();
msg.setTo(user);
msg.setSubject(I18n.get("passwordreset.mailSubject"));
msg.setMessage(I18n.get("passwordreset.mailBody", mailpath));
msg.setMessage(I18n.get("passwordreset.mailBody", path));
logger.info("sending mail! user {} hash {} path {}", new Object[] { user, hash, mailpath });
logger.info("sending mail! user {} hash {} path {}", new Object[] { user, hash, path });
utilbean.sendMail(msg);
user = userFacade.find(user.getId());
user.setConfirmHash(hash);
return user;
return true;
}
@Override
@RolesAllowed(UserPermission.S_VIEW_ALL)
public User findById(Integer id) {
return userFacade.find(id);
}
@Override
@RolesAllowed(UserPermission.S_VIEW_ALL)
public SearchResult<User> getUsers(int page, int pagesize, String sort, String search) {
return userFacade.searchUser(page, pagesize, sort, search);
}
......@@ -294,8 +307,8 @@ public class UserBean implements UserBeanLocal {
// }
@Override
@RolesAllowed("USER/EXECUTE")
public boolean invite(String invitemail) {
@RolesAllowed(UserPermission.S_INVITE_USERS)
public boolean invite(String invitemail, String url) {
List<User> usercheck = userFacade.findByEmail(invitemail.trim());
if (usercheck.size() > 0) {
......@@ -310,21 +323,34 @@ public class UserBean implements UserBeanLocal {
pg.getMembers().add(new GroupMembership(pg, null, token));
creator.getPlaceGroups().add(pg);
MailMessage msg = new MailMessage();
msg.setSubject(eventBean.getPropertyString(LanEventPropertyKey.INVITEMAIL_SUBJECT));
msg.setMessage(MessageFormat.format(eventBean.getPropertyString(LanEventPropertyKey.INVITEMAIL_CONTENT), MessageFormat.format(url, token), creator.getWholeName()));
msg.setToAddress(invitemail);
utilbean.sendMail(msg);
return true;
}
@Override
@PermitAll
public GroupMembership findToken(String token) {
return gmfacade.findByToken(token);
}
@Override
public void createFromToken(User user, GroupMembership gm) {
gm = gmfacade.merge(gm);
@PermitAll
public void createFromToken(User user, String token) {
GroupMembership gm = findToken(token);
gm.setUser(user);
gm.setInviteAccepted(Calendar.getInstance());
if (user.getGroupMemberships() == null) {
user.setGroupMemberships(new ArrayList<GroupMembership>());
}
if (!user.getGroupMemberships().contains(gm)) {
user.getGroupMemberships().add(gm);
}
userFacade.create(user);
}
......@@ -363,4 +389,16 @@ public class UserBean implements UserBeanLocal {
}
@Override
@RolesAllowed(UserPermission.S_CREATE_NEW)
public void createNewUser(User usr) {
userFacade.create(usr);
}
@Override
public boolean userExists(String login) {
User usr = userFacade.findByLogin(login);
return usr != null;
}
}
......@@ -27,6 +27,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.enums.apps.SpecialPermission;
import fi.insomnia.bortal.model.LanEventPropertyKey;
import fi.insomnia.bortal.model.User;
import fi.insomnia.bortal.model.UserImage;
import fi.insomnia.bortal.util.MailMessage;
......@@ -45,12 +46,10 @@ public class UtilBean implements UtilBeanLocal {
@EJB
private UserBean userbean;
@EJB
private EventBeanLocal eventbean;
/**
* Default constructor.
*/
public UtilBean() {
// TODO Auto-generated constructor stub
}
@Resource(name = "jmsQueue", mappedName = "jms/mailque")
......@@ -61,6 +60,13 @@ public class UtilBean implements UtilBeanLocal {
@Override
public boolean sendMail(MailMessage message) {
logger.info("Sending mail message {} ", message);
if (message.getFromAddress() == null || message.getFromAddress().isEmpty()) {
message.setFromAddress(eventbean.getPropertyString(LanEventPropertyKey.PORTAL_EMAIL_ADDRESS));
}
if (message.getFromName() == null || message.getFromName().isEmpty()) {
message.setFromName(eventbean.getPropertyString(LanEventPropertyKey.PORTAL_EMAIL_NAME));
}
Date d = new Date();
try {
QueueConnection conn = mailQuefactory.createQueueConnection();
......
......@@ -2,12 +2,14 @@ package fi.insomnia.bortal.facade;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
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.AccountEvent;
import fi.insomnia.bortal.model.AccountEvent_;
import fi.insomnia.bortal.model.LanEvent;
......@@ -24,6 +26,9 @@ public class AccountEventFacade extends IntegerPkGenericFacade<AccountEvent> {
super(AccountEvent.class);
}
@EJB
private EventBeanLocal eventbean;
public List<Role> findProvidedRoles(LanEvent event, User u) {
CriteriaBuilder cb = getEm().getCriteriaBuilder();
......@@ -42,4 +47,16 @@ public class AccountEventFacade extends IntegerPkGenericFacade<AccountEvent> {
// q.setParameter("user", u);
return getEm().createQuery(cq).getResultList();
}
public List<AccountEvent> getAccountEvents(User user) {
CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<AccountEvent> cq = cb.createQuery(AccountEvent.class);
Root<AccountEvent> root = cq.from(AccountEvent.class);
cq.where(cb.equal(root.get(AccountEvent_.user), user),
cb.equal(root.get(AccountEvent_.product).get(Product_.event), eventbean.getCurrentEvent())
);
return getEm().createQuery(cq).getResultList();
}
}
package fi.insomnia.bortal.facade;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
......@@ -21,7 +20,7 @@ import fi.insomnia.bortal.facade.callbacks.FacadeCallback;
import fi.insomnia.bortal.utilities.SearchResult;
import fi.insomnia.bortal.utilities.jpa.ModelInterface;
public abstract class GenericFacade<I extends Serializable, C extends ModelInterface<I>> {
public abstract class GenericFacade<C extends ModelInterface> {
private final Class<C> entClass;
private static final Logger logger = LoggerFactory.getLogger(GenericFacade.class);
......@@ -54,7 +53,7 @@ public abstract class GenericFacade<I extends Serializable, C extends ModelInter
getEm().refresh(usr);
}
public C find(I id) {
public C find(Integer id) {
if (id == null) {
return null;
}
......@@ -181,8 +180,6 @@ public abstract class GenericFacade<I extends Serializable, C extends ModelInter
ArrayList<Predicate> predicates = new ArrayList<Predicate>();
for (FacadeCallback<C> fc : list) {
logger.debug("Executing {}, predsize: {}", fc, predicates.size());
fc.exec(cb, cq, root, predicates);
}
if (!predicates.isEmpty()) {
......
......@@ -8,7 +8,7 @@ import fi.insomnia.bortal.utilities.jpa.ModelInterface;
/**
* Session Bean implementation class GenericFacade
*/
public abstract class IntegerPkGenericFacade<T extends ModelInterface<Integer>> extends GenericFacade<Integer, T> {
public abstract class IntegerPkGenericFacade<T extends ModelInterface> extends GenericFacade<T> {
@PersistenceContext
private EntityManager em;
......
package fi.insomnia.bortal.facade;
import javax.ejb.EJB;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
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.LanEventProperty;
import fi.insomnia.bortal.model.LanEventPropertyKey;
import fi.insomnia.bortal.model.LanEventProperty_;
@Stateless
@LocalBean
public class LanEventPropertyFacade extends IntegerPkGenericFacade<LanEventProperty> {
public LanEventPropertyFacade() {
super(LanEventProperty.class);
}
@EJB
private EventBeanLocal eventbean;
public LanEventProperty find(LanEvent currentEvent, LanEventPropertyKey property) {
CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<LanEventProperty> cq = cb.createQuery(LanEventProperty.class);
Root<LanEventProperty> root = cq.from(LanEventProperty.class);
CriteriaQuery<LanEventProperty> q = cq.where(cb.equal(root.get(LanEventProperty_.event), eventbean.getCurrentEvent()),
cb.equal(root.get(LanEventProperty_.key), property)
);
return getSingleNullableResult(getEm().createQuery(q));
}
}
......@@ -11,7 +11,6 @@ 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.Product;
import fi.insomnia.bortal.model.Product_;
......@@ -52,7 +51,7 @@ public class ProductFacade extends IntegerPkGenericFacade<Product> {
return getEm().createQuery(cq).getResultList();
}
public List<Product> findPrepaidProducts(LanEvent e) {
public List<Product> findPrepaidProducts() {
CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<Product> cq = cb.createQuery(Product.class);
Root<Product> root = cq.from(Product.class);
......
......@@ -2,12 +2,14 @@ package fi.insomnia.bortal.facade;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
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.Role;
import fi.insomnia.bortal.model.Role_;
......@@ -17,6 +19,9 @@ import fi.insomnia.bortal.model.User;
@LocalBean
public class RoleFacade extends IntegerPkGenericFacade<Role> {
@EJB
private EventBeanLocal eventbean;
public RoleFacade() {
super(Role.class);
......@@ -30,11 +35,11 @@ public class RoleFacade extends IntegerPkGenericFacade<Role> {
// return getSingleNullableResult(q);
// }
public List<Role> findForUser(User user, LanEvent event) {
public List<Role> findForUser(User user) {
CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<Role> cq = cb.createQuery(Role.class);
Root<Role> root = cq.from(Role.class);
cq.where(cb.equal(root.get(Role_.event), event), cb.isMember(user, root.get(Role_.users)));
cq.where(cb.equal(root.get(Role_.event), eventbean.getCurrentEvent()), cb.isMember(user, root.get(Role_.users)));
return getEm().createQuery(cq).getResultList();
}
......
package fi.insomnia.bortal.facade;
import java.util.Date;
import java.util.List;
import javax.ejb.EJB;
......@@ -12,6 +13,8 @@ import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import fi.insomnia.bortal.beans.EventBeanLocal;
import fi.insomnia.bortal.model.PageContent;
import fi.insomnia.bortal.model.PageContent_;
import fi.insomnia.bortal.model.Role;
import fi.insomnia.bortal.model.Role_;
import fi.insomnia.bortal.model.SitePage;
......@@ -29,17 +32,17 @@ public class SitePageFacade extends IntegerPkGenericFacade<SitePage> {
super(SitePage.class);
}
public SitePage find(String siteName) {
CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<SitePage> cq = cb.createQuery(SitePage.class);
Root<SitePage> root = cq.from(SitePage.class);
cq.where(cb.equal(root.get(SitePage_.name), siteName),
cb.equal(root.get(SitePage_.event), eventbean.getCurrentEvent())
);
return getSingleNullableResult(getEm().createQuery(cq));
}
// public SitePage find(String siteName) {
// CriteriaBuilder cb = getEm().getCriteriaBuilder();
// CriteriaQuery<SitePage> cq = cb.createQuery(SitePage.class);
// Root<SitePage> root = cq.from(SitePage.class);
//
// cq.where(cb.equal(root.get(SitePage_.name), siteName),
// cb.equal(root.get(SitePage_.event), eventbean.getCurrentEvent())
//
// );
// return getSingleNullableResult(getEm().createQuery(cq));
// }
public List<SitePage> findForUser(User user, SitePage siteroot) {
CriteriaBuilder cb = getEm().getCriteriaBuilder();
......@@ -84,4 +87,46 @@ public class SitePageFacade extends IntegerPkGenericFacade<SitePage> {
return getEm().createQuery(cq).getResultList();
}
public SitePage find(Integer id, List<Role> require) {
CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<SitePage> cq = cb.createQuery(SitePage.class);
Root<SitePage> root = cq.from(SitePage.class);
cq.where(
cb.equal(root.get(SitePage_.id), id),
root.get(SitePage_.allowedRoles).in(require)
);
return getSingleNullableResult(getEm().createQuery(cq));
}
public List<PageContent> findContents(SitePage page, Date now) {
CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<PageContent> cq = cb.createQuery(PageContent.class);
Root<PageContent> root = cq.from(PageContent.class);
Path<SitePage> sitepath = root.get(PageContent_.sitepage);
Path<Date> expirepath = root.get(PageContent_.expire);
Path<Date> publishpath = root.get(PageContent_.publish);
cq.where(
cb.equal(sitepath, page),
cb.or(cb.isNull(publishpath), cb.greaterThan(publishpath, now)),
cb.or(cb.isNull(expirepath), cb.lessThan(expirepath, now))
);
return getEm().createQuery(cq).getResultList();
}
public SitePage find(String name) {
CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<SitePage> cq = cb.createQuery(SitePage.class);
Root<SitePage> root = cq.from(SitePage.class);
cq.where(cb.equal(root.get(SitePage_.event), eventbean.getCurrentEvent()),
cb.equal(root.get(SitePage_.name), name)
);
return super.getSingleNullableResult(getEm().createQuery(cq));
}
}
......@@ -104,12 +104,6 @@ public class UserFacade extends IntegerPkGenericFacade<User> {
}
for (SingularAttribute<User, String> attr : getAttrlist())
{
logger.info("Looping attrs: {}", attr);
}
return super.searcher(page, pagesize,
new StringSearchPredicateCreator<User>(search, getAttrlist()),
orderCall
......
......@@ -11,7 +11,7 @@ import javax.persistence.metamodel.SingularAttribute;
import fi.insomnia.bortal.utilities.jpa.ModelInterface;
public class AndPredicateCreator<A, T extends ModelInterface<?>> implements FacadeCallback<T> {
public class AndPredicateCreator<A, T extends ModelInterface> implements FacadeCallback<T> {
private final A searchval;
private final List<SingularAttribute<T, A>> attributes;
......
......@@ -9,7 +9,7 @@ import javax.persistence.criteria.Root;
import fi.insomnia.bortal.utilities.jpa.ModelInterface;
public interface FacadeCallback<C extends ModelInterface<?>> {
public interface FacadeCallback<C extends ModelInterface> {
void exec(CriteriaBuilder cb, CriteriaQuery<?> cq, Root<C> root, List<Predicate> predicates);
}
......@@ -13,7 +13,7 @@ import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.utilities.jpa.ModelInterface;
public class OrPredicateCreator<A, T extends ModelInterface<?>> implements FacadeCallback<T> {
public class OrPredicateCreator<A, T extends ModelInterface> implements FacadeCallback<T> {
private final A searchstr;
private final List<SingularAttribute<T, A>> attributes;
private static final Logger logger = LoggerFactory.getLogger(OrPredicateCreator.class);
......
......@@ -11,7 +11,7 @@ import javax.persistence.metamodel.SingularAttribute;
import fi.insomnia.bortal.utilities.jpa.ModelInterface;
public class OrderCallback<T extends ModelInterface<?>> implements FacadeCallback<T> {
public class OrderCallback<T extends ModelInterface> implements FacadeCallback<T> {
private final SingularAttribute<? super T, ?> sort;
private final boolean asc;
......
......@@ -4,7 +4,7 @@ import javax.persistence.metamodel.SingularAttribute;
import fi.insomnia.bortal.utilities.jpa.ModelInterface;
public interface StringPredicateField<T extends ModelInterface<?>> {
public interface StringPredicateField<T extends ModelInterface> {
SingularAttribute<T, String> getField();
......
......@@ -9,16 +9,12 @@ import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import javax.persistence.metamodel.SingularAttribute;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.utilities.jpa.ModelInterface;
public class StringSearchPredicateCreator<T extends ModelInterface<?>> implements FacadeCallback<T> {
public class StringSearchPredicateCreator<T extends ModelInterface> implements FacadeCallback<T> {
private static final String WILDCARD = "%";
private String searchstr = null;
private List<SingularAttribute<T, String>> attributes = null;
private static final Logger logger = LoggerFactory.getLogger(StringSearchPredicateCreator.class);
public StringSearchPredicateCreator(String search, List<SingularAttribute<T, String>> attrs) {
if (addSearch(search)) {
......@@ -58,9 +54,7 @@ public class StringSearchPredicateCreator<T extends ModelInterface<?>> implement
int i = 0;
for (SingularAttribute<T, String> attr : attributes) {
logger.info("Equalling {} to {}", attr.getName(), splitSearch);
preds[i++] = cb.like(cb.lower(root.get(attr)), splitSearch);
}
predicates.add(cb.or(preds));
}
......
......@@ -25,4 +25,8 @@ public interface AccountEventBeanLocal {
List<AccountEvent> shopCash(User shoppingUser, Map<Product, BigDecimal>
shopMap, boolean buyInstant);
BigDecimal getAccountBalance(User user);
List<AccountEvent> getAccountEvents(User user);
}
......@@ -31,4 +31,6 @@ public interface BillBeanLocal {
void createBill(Bill bill);
Bill save(Bill bill);
}
......@@ -3,10 +3,12 @@ package fi.insomnia.bortal.beans;
import javax.ejb.Local;
import fi.insomnia.bortal.model.LanEvent;
import fi.insomnia.bortal.model.LanEventProperty;
import fi.insomnia.bortal.model.LanEventPropertyKey;
@Local
public interface EventBeanLocal {
static final String HTTP_URL_HOSTNAME = "HTTP_URL_HOSTNAME";
// static final String HTTP_URL_HOSTNAME = "HTTP_URL_HOSTNAME";
LanEvent getEventByHostname(String hostname);
......@@ -17,4 +19,8 @@ public interface EventBeanLocal {
void create(LanEvent event);
String flushCache();
LanEventProperty getProperty(LanEventPropertyKey property);
String getPropertyString(LanEventPropertyKey property);
}
......@@ -10,8 +10,6 @@ import fi.insomnia.bortal.model.SitePage;
@Local
public interface SitePageBeanLocal {
SitePage find(String siteName);
void create(SitePage sitepage);
SitePage save(SitePage sitepage);
......@@ -24,4 +22,10 @@ public interface SitePageBeanLocal {
List<SitePage> findAll();
SitePage find(Integer id);
List<PageContent> findContentsForUser(Integer id);
List<PageContent> findContentsForUser(String name);
}
......@@ -18,44 +18,36 @@ public interface UserBeanLocal {
SearchResult<User> getUsers(int page, int pagesize, String sort, String search);
User getUser(String login);
User mergeChanges(User currentUser);
// boolean hasCurrentUserPermission(Permission userManagement,
// RolePermission execute);
// void fatalPermission(Permission target, RolePermission permission,
// Object... failmessage);
// void fatalNotLoggedIn();
UserImage uploadImage(User user, String contentType, byte[] image, String filename, String description);
UserImage findUserImage(int id);
// List<User> searchName(String name);
User createNewUser(User user, String password);
User findPasswordResetUser(Integer id, String hash);
boolean resetPassword(User user, String password, String hash);
User initPasswordReset(User user, String hash, String mailpath);
boolean initPasswordReset(String user, String mailpath);
List<Role> findUsersRoles(User u);
User findById(Integer integer);
boolean invite(String invitemail);
GroupMembership findToken(String token);
void createFromToken(User user, GroupMembership gm);
void createFromToken(User user, String token);
UserImage findUserimageFORCE(Integer id);
UserImage saveCroppedImage(UserImage currentImage, int left, int top, int width, int height) throws IOException;
void createNewUser(User usr);
boolean userExists(String login);
boolean invite(String invitemail, String url);
}
......@@ -13,11 +13,11 @@ public class MailMessage implements Serializable {
*/
private static final long serialVersionUID = -4769468394850407107L;
private static final String DEFAULT_MAIL_CHARSET = "iso-8859-1";
private static final String DEFAULT_MAIL_CHARSET = "ISO-8859-1";
private String subject;
private String fromName = "Insomnia lippukauppa";
private String fromAddress = "info@insomnia.fi";
private String fromName;
private String fromAddress;
private String toName;
private String toAddress;
private String message;
......
......@@ -14,5 +14,6 @@
<property name="eclipselink.target-database"
value="fi.insomnia.bortal.database.LanBortalPostgresqlPlatform" />
</properties>
</persistence-unit>
</persistence>
......@@ -9,6 +9,7 @@ import static javax.persistence.TemporalType.DATE;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import javax.persistence.CascadeType;
......@@ -63,7 +64,7 @@ public class Bill extends GenericEntity {
*/
@Column(name = "paid_date")
@Temporal(TemporalType.TIMESTAMP)
private Calendar paidDate;
private Date paidDate;
/**
* The bill number from which the reference number will be generated
......@@ -85,7 +86,7 @@ public class Bill extends GenericEntity {
@Column(nullable = false, name = "sent_time")
@Temporal(DATE)
private Calendar sentDate = Calendar.getInstance();
private Date sentDate = new Date();
@Column(name = "payment_time", nullable = false)
private Integer paymentTime = 0;
......@@ -202,14 +203,6 @@ public class Bill extends GenericEntity {
return dueDate;
}
public Calendar getPaidDate() {
return paidDate;
}
public void setPaidDate(Calendar paidDate) {
this.paidDate = paidDate;
}
public String getNotes() {
return notes;
}
......@@ -286,14 +279,6 @@ public class Bill extends GenericEntity {
this.addr5 = addr5;
}
public Calendar getSentDate() {
return sentDate;
}
public void setSentDate(Calendar sentDate) {
this.sentDate = sentDate;
}
public String getNoticetime() {
return noticetime;
}
......@@ -373,4 +358,21 @@ public class Bill extends GenericEntity {
public void setEvent(LanEvent event) {
this.event = event;
}
public Date getPaidDate() {
return paidDate;
}
public void setPaidDate(Date paidDate) {
this.paidDate = paidDate;
}
public Date getSentDate() {
return sentDate;
}
public void setSentDate(Date sentDate) {
this.sentDate = sentDate;
}
}
......@@ -5,14 +5,11 @@ import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.MappedSuperclass;
import javax.persistence.Version;
import org.eclipse.persistence.annotations.ReturnInsert;
import fi.insomnia.bortal.utilities.jpa.ModelInterface;
@MappedSuperclass
public class GenericEntity extends EntityEquals implements ModelInterface<Integer> {
public class GenericEntity extends EntityEquals implements ModelInterface {
private static final long serialVersionUID = -9041737052951021560L;
public static final String ID_COLUMN = "id";
......
......@@ -27,16 +27,6 @@ import org.eclipse.persistence.annotations.OptimisticLockingType;
@Entity
@Table(name = "group_memberships", uniqueConstraints = { @UniqueConstraint(columnNames = {
"user_id", "group_id" }) })
// @NamedQueries({
// @NamedQuery(name = "GroupMembership.findAll", query =
// "SELECT g FROM GroupMembership g"),
//
// @NamedQuery(name = "GroupMembership.findByInviteAccepted", query =
// "SELECT g FROM GroupMembership g WHERE g.inviteAccepted = :inviteAccepted"),
// @NamedQuery(name = "GroupMembership.findByInviteEmail", query =
// "SELECT g FROM GroupMembership g WHERE g.inviteEmail = :inviteEmail"),
// @NamedQuery(name = "GroupMembership.findByInviteName", query =
// "SELECT g FROM GroupMembership g WHERE g.inviteName = :inviteName") })
@OptimisticLocking(type = OptimisticLockingType.CHANGED_COLUMNS)
public class GroupMembership extends GenericEntity {
......@@ -60,7 +50,7 @@ public class GroupMembership extends GenericEntity {
private PlaceGroup placeGroup;
@OneToOne(optional = false)
@JoinColumn(name = "place_reservation_id", referencedColumnName = "id", nullable = false)
@JoinColumn(name = "place_reservation_id", referencedColumnName = "id", nullable = true)
private Place placeReservation;
@JoinColumn(name = "user_id", referencedColumnName = "id")
......
......@@ -45,9 +45,6 @@ public class LanEvent extends GenericEntity {
@Column(name = "name", nullable = false, unique = true)
private String name;
@Column(name = "referer", unique = true, nullable = true)
private String referer;
@Column(nullable = false, name = "event_enabled")
private boolean eventEnabled = false;
......@@ -102,6 +99,10 @@ public class LanEvent extends GenericEntity {
@PrivateOwned
private List<LanEventDomain> domains = new ArrayList<LanEventDomain>();
@PrivateOwned
@OneToMany(mappedBy = "event", cascade = CascadeType.ALL)
private List<LanEventProperty> properties = new ArrayList<LanEventProperty>();
public LanEvent() {
}
......@@ -130,14 +131,6 @@ public class LanEvent extends GenericEntity {
this.name = name;
}
public String getReferer() {
return referer;
}
public void setReferer(String referer) {
this.referer = referer;
}
public EventStatus getStatus() {
return status;
}
......@@ -280,4 +273,12 @@ public class LanEvent extends GenericEntity {
this.domains = domains;
}
public List<LanEventProperty> getProperties() {
return properties;
}
public void setProperties(List<LanEventProperty> properties) {
this.properties = properties;
}
}
package fi.insomnia.bortal.model;
import java.math.BigDecimal;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.JoinColumn;
import javax.persistence.Lob;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.UniqueConstraint;
@Entity
@Table(name = "event_properties", uniqueConstraints = {
@UniqueConstraint(columnNames = { LanEventProperty.EVENT_ID_COLUMN, LanEventProperty.KEY_COLUMN }),
@UniqueConstraint(columnNames = { LanEventProperty.EVENTORG_ID_COLUMN, LanEventProperty.KEY_COLUMN }),
})
public class LanEventProperty extends GenericEntity {
/**
*
*/
private static final long serialVersionUID = 1L;
protected static final String KEY_COLUMN = "key";
protected static final String EVENT_ID_COLUMN = "event_id";
protected static final String EVENTORG_ID_COLUMN = "organisation_id";
@ManyToOne()
@JoinColumn(name = EVENTORG_ID_COLUMN, nullable = true)
private EventOrganiser eventorg;
@ManyToOne()
@JoinColumn(name = EVENT_ID_COLUMN, nullable = true)
private LanEvent event;
@Column(name = KEY_COLUMN, nullable = false)
@Enumerated(EnumType.STRING)
private LanEventPropertyKey key;
@Lob
@Column(name = "description")
private String description;
@Column(name = "boolean_value")
private boolean booleanValue;
@Column(name = "text_value")
@Lob
private String textvalue;
@Column(precision = 30, scale = 8, name = "decimal_value")
private BigDecimal decimalValue;
@Column(name = "long_value")
private Long longValue;
@Column(name = "byte_mime")
private String byteMime;
@Column(name = "byte_value")
@Lob
private byte[] byteValue;
@Column(name = "date_value")
@Temporal(TemporalType.TIMESTAMP)
private Date dateValue;
public LanEvent getEvent() {
return event;
}
public void setEvent(LanEvent event) {
this.event = event;
}
public LanEventPropertyKey getKey() {
return key;
}
public void setKey(LanEventPropertyKey key) {
this.key = key;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public boolean isBooleanValue() {
return booleanValue;
}
public void setBooleanValue(boolean booleanValue) {
this.booleanValue = booleanValue;
}
public String getTextvalue() {
return textvalue;
}
public void setTextvalue(String textvalue) {
this.textvalue = textvalue;
}
public BigDecimal getDecimalValue() {
return decimalValue;
}
public void setDecimalValue(BigDecimal decimalValue) {
this.decimalValue = decimalValue;
}
public Long getLongValue() {
return longValue;
}
public void setLongValue(Long longValue) {
this.longValue = longValue;
}
public String getByteMime() {
return byteMime;
}
public void setByteMime(String byteMime) {
this.byteMime = byteMime;
}
public byte[] getByteValue() {
return byteValue;
}
public void setByteValue(byte[] byteValue) {
this.byteValue = byteValue;
}
public Date getDateValue() {
return dateValue;
}
public void setDateValue(Date dateValue) {
this.dateValue = dateValue;
}
public EventOrganiser getEventorg() {
return eventorg;
}
public void setEventorg(EventOrganiser eventorg) {
this.eventorg = eventorg;
}
}
package fi.insomnia.bortal.model;
public enum LanEventPropertyKey {
EVENT_LOGO(Type.DATA, null),
INVITEMAIL_SUBJECT(Type.TEXT, "Invite from Eventportal"),
INVITEMAIL_CONTENT(Type.TEXT, "You have been invited to a Event by {1}. You can register to event intranet at {0}"),
PORTAL_EMAIL_ADDRESS(Type.TEXT, "portal@tuhto.fi"),
PORTAL_EMAIL_NAME(Type.TEXT, "Event portal"), ;
private enum Type {
TEXT, DATE, DATA
};
private final String defaultvalue;
private final Type type;
private LanEventPropertyKey(Type t, String def)
{
this.type = t;
defaultvalue = def;
}
public String getDefaultvalue() {
return defaultvalue;
}
public Type getType() {
return type;
}
}
......@@ -217,4 +217,12 @@ public class MenuNavigation extends GenericEntity implements Comparable<MenuNavi
this.event = event;
}
public Integer getSort() {
return sort;
}
public void setSort(Integer sort) {
this.sort = sort;
}
}
......@@ -36,9 +36,6 @@ import org.eclipse.persistence.annotations.OptimisticLockingType;
@OptimisticLocking(type = OptimisticLockingType.CHANGED_COLUMNS)
public class PrintedCard extends GenericEntity {
/**
*
*/
private static final long serialVersionUID = 8603481931116401027L;
public static final String EVENT_ID_COLUMN = "event_id";
......@@ -77,12 +74,20 @@ public class PrintedCard extends GenericEntity {
@ManyToOne(optional = false)
private CardTemplate template;
public PrintedCard(LanEvent event, Calendar printTime, boolean cardEnabled) {
this(event);
public PrintedCard(User usr, CardTemplate templ, Calendar printTime, boolean cardEnabled) {
super();
this.event = templ.getEvent();
this.template = templ;
this.user = usr;
this.printTime = printTime;
this.enabled = cardEnabled;
}
public PrintedCard()
{
super();
}
public LanEvent getEvent() {
return event;
}
......@@ -91,15 +96,6 @@ public class PrintedCard extends GenericEntity {
this.event = event;
}
public PrintedCard() {
super();
}
public PrintedCard(LanEvent event) {
super();
this.event = event;
}
public Calendar getPrintTime() {
return printTime;
}
......
......@@ -93,9 +93,4 @@ public class SitePage extends GenericEntity {
this.allowedRoles = allowedRoles;
}
public String getUrl()
{
return new StringBuilder("/page/?id=").append(getId()).toString();
}
}
......@@ -2,8 +2,6 @@ package fi.insomnia.bortal.model;
import static javax.persistence.CascadeType.ALL;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
......@@ -111,6 +109,9 @@ public class User extends GenericEntity {
@OneToMany(mappedBy = "voter", cascade = CascadeType.ALL)
private List<Vote> votes;
@OneToMany(mappedBy = "user", cascade = CascadeType.ALL)
private List<UserNote> notes;
@ManyToMany()
@JoinTable(name = "role_memberships", inverseJoinColumns = {
@JoinColumn(name = "role_id", referencedColumnName = Role.ID_COLUMN) },
......@@ -169,14 +170,6 @@ public class User extends GenericEntity {
@Transient
private static final Logger logger = LoggerFactory.getLogger(User.class);
public BigDecimal getAccountBalance() {
BigDecimal ret = BigDecimal.ZERO;
for (AccountEvent ac : getAccountEvents()) {
ret = ret.add(ac.getTotal()).setScale(2, RoundingMode.HALF_UP);
}
return ret;
}
public List<Vote> getVotes() {
return votes;
}
......@@ -509,4 +502,12 @@ public class User extends GenericEntity {
}
return isAnon;
}
public List<UserNote> getNotes() {
return notes;
}
public void setNotes(List<UserNote> notes) {
this.notes = notes;
}
}
package fi.insomnia.bortal.model;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.JoinColumn;
import javax.persistence.Lob;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
@Entity
@Table(name = "user_notes")
public class UserNote extends GenericEntity {
private static final long serialVersionUID = 6128095532481826770L;
@ManyToOne
@JoinColumn(nullable = false)
private User user;
@ManyToOne
@JoinColumn(nullable = false)
private LanEvent event;
@Lob
private String content;
@Lob
@JoinColumn(nullable = false)
@Enumerated(EnumType.STRING)
private UserNoteType notetype;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public LanEvent getEvent() {
return event;
}
public void setEvent(LanEvent event) {
this.event = event;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public UserNoteType getNotetype() {
return notetype;
}
public void setNotetype(UserNoteType notetype) {
this.notetype = notetype;
}
}
package fi.insomnia.bortal.model;
public enum UserNoteType {
ORGALERT, ORGNOTE, USERNOTE, BANKACCOUNT, BANK,
}
......@@ -3,34 +3,24 @@ package fi.insomnia.bortal.enums;
import fi.insomnia.bortal.enums.apps.BillPermission;
import fi.insomnia.bortal.enums.apps.ContentPermission;
import fi.insomnia.bortal.enums.apps.IAppPermission;
import fi.insomnia.bortal.enums.apps.LayoutPermission;
import fi.insomnia.bortal.enums.apps.MapPermission;
import fi.insomnia.bortal.enums.apps.PollPermission;
import fi.insomnia.bortal.enums.apps.TerminalPermission;
import fi.insomnia.bortal.enums.apps.ShopPermission;
import fi.insomnia.bortal.enums.apps.TerminalPermission;
import fi.insomnia.bortal.enums.apps.UserPermission;
public enum BortalApplication {
// NOTE. add conversion Value to RoleRight
// PERMISSION("Description"),
// LOGIN("Login related permissions", LoginPermission.class),
USER("User management related", UserPermission.class),
// s ROLE("Role management", RolePermission.class),
BILL("Creating, and managing bills", BillPermission.class),
POLL("Poll stuff", PollPermission.class),
MAP("Map management ", MapPermission.class),
SHOP("Product & shop management", ShopPermission.class),
CONTENT("News, pages and other dynamic content", ContentPermission.class),
TERMINAL("Sales and self help terminal roles", TerminalPermission.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) "),
// ACCOUNT_MANAGEMENT("Manage others account events. view(r), modify(w) and create (shop)(x)"),
// MAP("view maps(r), Modify(w), reserve places from maps(x)"),
// ROLE_MANAGEMENT("User has right to view(r), modify(w) and assign(x) roles"),
// PRODUCT("View(r), modify(w), and shop(x) products"),
// SHOP("View own shopped events(r), Modify own AccountEvents() and Shop(x)"),
// GAME("View(r) own, modify(w), view all(X)"),
// POLL("View answers(r), create polls (w), answer to polls(x)");
TERMINAL("Sales and self help terminal roles", TerminalPermission.class),
LAYOUT("Layoutstuff", LayoutPermission.class),
;
private final String description;
private final Class<? extends IAppPermission> permissions;
......
package fi.insomnia.bortal.enums.apps;
import fi.insomnia.bortal.enums.BortalApplication;
public enum LayoutPermission implements IAppPermission {
MANAGE_MENU("Manage menus")
;
public static final String S_MANAGE_MENU = "LAYOUT/MANAGE_MENU";
private final String description;
private final String fullName;
private LayoutPermission(String desc) {
description = desc;
fullName = new StringBuilder().append(getParent().toString()).append(DELIMITER).append(toString()).toString();
}
@Override
public BortalApplication getParent() {
return BortalApplication.LAYOUT;
}
@Override
public String getDescription() {
return this.description;
}
@Override
public String getFullName() {
return fullName;
}
}
......@@ -14,7 +14,8 @@ public enum UserPermission implements IAppPermission {
VIEW_ACCOUNTEVENTS("Show other users account events"),
MODIFY_ACCOUNTEVENTS("Modify Account events"),
ANYUSER("All users have this anyways"),
MANAGE_HTTP_SESSION("Manage http sessions"), ;
MANAGE_HTTP_SESSION("Manage http sessions"),
INVITE_USERS("Invite users"), ;
public static final String S_VIEW_ALL = "USER/VIEW_ALL";
public static final String S_MODIFY = "USER/MODIFY";
......@@ -28,6 +29,7 @@ public enum UserPermission implements IAppPermission {
public static final String S_MODIFY_ACCOUNTEVENTS = "USER/MODIFY_ACCOUNTEVENTS";
public static final String S_ANYUSER = "USER/ANYUSER";
public static final String S_MANAGE_HTTP_SESSION = "USER/MANAGE_HTTP_SESSION";
public static final String S_INVITE_USERS = "USER/INVITE_USERS";
private String description;
private String fullName;
......
......@@ -5,7 +5,7 @@ import java.util.List;
import fi.insomnia.bortal.utilities.jpa.ModelInterface;
public class SearchResult<T extends ModelInterface<?>> implements Serializable {
public class SearchResult<T extends ModelInterface> implements Serializable {
/**
*
......
......@@ -2,9 +2,9 @@ package fi.insomnia.bortal.utilities.jpa;
import java.io.Serializable;
public interface ModelInterface<T extends Serializable> extends Serializable {
public interface ModelInterface extends Serializable {
T getId();
Integer getId();
void setId(T id);
void setId(Integer id);
}
......@@ -2,7 +2,7 @@ package fi.insomnia.bortal.utilities.jsf;
import fi.insomnia.bortal.utilities.jpa.ModelInterface;
public interface EntityFinderBean<E extends ModelInterface<Integer>> {
public interface EntityFinderBean<E extends ModelInterface> {
public E find(Integer id);
......
package fi.insomnia.bortal.utilities.jsf;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import fi.insomnia.bortal.utilities.jpa.ModelInterface;
public abstract class GenericIntegerEntityConverter<T extends ModelInterface> implements Converter {
protected abstract T find(Integer id);
public GenericIntegerEntityConverter() {
super();
}
@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
T ret = null;
Integer id = null;
if (value != null) {
id = Integer.parseInt(value);
if (id != null && id > 0) {
ret = find(id);
}
}
return ret;
}
@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
String ret = "0";
if (value != null && value instanceof ModelInterface) {
ModelInterface entity = (ModelInterface) value;
if (entity.getId() != null) {
ret = entity.getId().toString();
}
}
return ret;
}
}
......@@ -17,6 +17,7 @@
<default-locale>fi_FI</default-locale>
<supported-locale>fi_fi_XII</supported-locale>
<supported-locale>en_ST_v7</supported-locale>
<supported-locale>en_ST_nine</supported-locale>
</locale-config>
</application>
......
......@@ -9,8 +9,8 @@
</session-config>
<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Development</param-value>
<!--param-value>Production</param-value-->
<!--<param-value>Development</param-value> -->
<param-value>Production</param-value>
</context-param>
<context-param>
<param-name>javax.faces.FACELETS_SKIP_COMMENTS</param-name>
......@@ -72,6 +72,7 @@
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.jsf</url-pattern>
<url-pattern>*.wtf</url-pattern>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>
......@@ -148,6 +149,6 @@
<url-pattern>/PlaceGroupPdf</url-pattern>
</servlet-mapping>
</web-app>
\ No newline at end of file
......@@ -14,10 +14,9 @@
<ui:define name="content">
<h:form id="billform">
<h:inputHidden value="#{billEditView.bill.id}" />
<h:panelGrid columns="2">
<h:outputLabel for="paidDate" value="#{i18n['bill.paidDate']}:" />
<h:inputText id="paidDate" value="#{billEditView.bill.paidDate.time}">
<h:inputText id="paidDate" value="#{billEditView.bill.paidDate}">
<f:convertDateTime />
</h:inputText>
<h:outputLabel value="#{i18n['bill.billNumber']}:" />
......@@ -39,7 +38,7 @@
<h:inputText value="#{billEditView.bill.addr5}" />
<h:outputLabel for="sentDate" value="#{i18n['bill.sentDate']}:" />
<h:inputText id="sentDate" value="#{billEditView.bill.sentDate.time}">
<h:inputText id="sentDate" value="#{billEditView.bill.sentDate}">
<f:convertDateTime />
</h:inputText>
......@@ -70,7 +69,6 @@
<f:facet name="header">
<h:outputText value="#{i18n[billine.name]}" />
</f:facet>
<h:inputHidden value="#{billine.id}" />
<h:inputText value="#{billine.name}" />
</h:column>
<h:column>
......
......@@ -43,7 +43,7 @@
<h:outputLabel value="#{i18n['eventorg.bankName2']}:" />
<h:inputText value="#{eventorgView.eventorg.bankName2}" />
<h:commandButton id="commitbtn" action="#{eventorgView.save()}" value="#{i18n['eventorg.save']}" />
<h:commandButton id="commitbtn" action="#{eventorgView.saveEvent()}" value="#{i18n['eventorg.save']}" />
</h:panelGrid>
</h:form>
......
......@@ -15,9 +15,6 @@
<h:outputLabel value="#{i18n['event.name']}:" />
<h:inputText value="#{eventorgView.event.name}" />
<h:outputLabel value="#{i18n['event.referer']}:" />
<h:inputText value="#{eventorgView.event.referer}" />
<h:outputLabel value="#{i18n['event.referenceNumberBase']}:" />
<h:inputText value="#{eventorgView.event.referenceNumberBase}" />
......@@ -44,7 +41,7 @@
</h:form>
<h:form>
<h:inputText value="#{eventorgView.newdomain}" />
<h:commandButton action="#{eventorgView.addDomain()}" value="#{eventdomain.add}"/>
<h:commandButton action="#{eventorgView.addDomain()}" value="#{i18n['eventdomain.add']}" />
<h:dataTable var="domain" value="#{eventorgView.eventdomains}">
<h:column>
<f:facet name="header">
......@@ -53,7 +50,7 @@
<h:outputText value="#{domain.domain}" />
</h:column>
<h:column>
<h:commandButton action="#{eventorgView.removeDomain()}" value="#{i18n['eventdomain.remove']}"/>
<h:commandButton action="#{eventorgView.removeDomain()}" value="#{i18n['eventdomain.remove']}" />
</h:column>
</h:dataTable>
......
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core"
>
<h:head>
<title></title>
</h:head>
<h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<ui:define name="content">
<h:outputLabel rendered="#{sessionHandler.isInDevelopmentMode()}">
Development-tilassa.
Vaihda web.xml-tiedostosta ohjelman tila (javax.faces.PROJECT_STAGE) Productioniksi ennen kuin julkaiset ohjelman tuotantoon.
</h:outputLabel>
<h1>Insomnia lippukauppa</h1>
<h3>Lippujen hinnat</h3>
<ul>
<li>1-4 konepaikkaa 30e/paikka</li>
<li>5-8 konepaikkaa 28e/paikka</li>
<li>9 tai useampi konepaikkaa 26e/paikka</li>
<li>Konepaikat ovelta 32e/paikka</li>
<li>PRO-paikka 45e/paikka</li>
<li>Vierailijalippu 10e/lippu</li>
</ul>
<h3>Rekisteröityminen ja lippujen tilaaminen</h3>
<p>Tilataksesi konepaikkoja sinun tulee rekisteröityä Insomnian lippukauppaan. Rekisteröitymisvaiheessa teet
käyttäjätunnuksen ja tilaat haluamasi määrän konepaikkoja.</p>
<h3>Maksaminen</h3>
<p>
Lippukauppaan ilmestyy lasku tilaamiesi konepaikkojen ja lippujen mukaisesti. Laskusta löydät kaikki maksamiseen
tarvittavat tiedot.<br /> <br /> <b>Muista käyttää viitenumeroa laskua maksaessasi!</b> Huomioithan myös
pankkiviiveet maksaessasi muusta pankista kuin Osuuspankista. Maksut tarkastetaan pari kertaa päivässä. Maksuja ei
palauteta ilman erittäin hyvää syytä (esimerkiksi sairaustapauksissa lääkärintodistusta vastaan).
</p>
<h3>Paikkojen varaaminen</h3>
<p>Kun olet maksanut saamasi laskun ja olemme kirjanneet maksusi, saat sähköpostiisi ilmoituksen kun voit varata
paikkoja. Tällöin voit varata paikkakartalta tilaamasi määrän konepaikkoja.</p>
<h3>Lippujen lunastaminen tapahtuman yhteydessä</h3>
<p>Kun olet täyttänyt tietosi järjestelmään, tulosta tilauksesi mukaiset viivakoodit ja jaa ne ryhmäsi jäsenille.
Viivakoodin avulla nopeutat lippujen lunastusta huomattavasti.</p>
<h3>Tavalliset konepaikat ja pro-konepaikat</h3>
<p>
Tapahtumassa on tarjolla sekä tavallisia 80cm leveitä konepaikkoja että myös rajattu määrä normaaleista
konepaikoista poikkeavia pro-konepaikkoja.<br /> <br /> Pro-konepaikoilla pääsee nauttimaan suuremmasta tilasta,
sillä konepaikan leveys on 100cm ja lisäksi paikat on jaoteltu viiden konepaikan riveihin. Pro-konepaikkojen
käytävävälit ovat myös leveämmät.
</p>
<h3>Kysymykset</h3>
<p>Mikäli mieltäsi askarruttaa jokin liittyen tapahtuman konepaikkoihin tai lippukauppaan, ota rohkeasti yhteyttä
sähköpostilla osoitteeseen info [at] insomnia.fi.</p>
</ui:define>
</ui:composition>
</h:body>
</html>
\ No newline at end of file
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core"
>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core">
<h:head>
<title></title>
</h:head>
......@@ -9,56 +7,11 @@
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<ui:define name="content">
<h:outputLabel rendered="#{sessionHandler.isInDevelopmentMode()}">
Development-tilassa.
Vaihda web.xml-tiedostosta ohjelman tila (javax.faces.PROJECT_STAGE) Productioniksi ennen kuin julkaiset ohjelman tuotantoon.
</h:outputLabel>
<h1>Insomnia lippukauppa</h1>
<h3>Lippujen hinnat</h3>
<ul>
<li>1-4 konepaikkaa 30e/paikka</li>
<li>5-8 konepaikkaa 28e/paikka</li>
<li>9 tai useampi konepaikkaa 26e/paikka</li>
<li>Konepaikat ovelta 32e/paikka</li>
<li>PRO-paikka 45e/paikka</li>
<li>Vierailijalippu 10e/lippu</li>
</ul>
<h3>Rekisteröityminen ja lippujen tilaaminen</h3>
<p>Tilataksesi konepaikkoja sinun tulee rekisteröityä Insomnian lippukauppaan. Rekisteröitymisvaiheessa teet
käyttäjätunnuksen ja tilaat haluamasi määrän konepaikkoja.</p>
<h3>Maksaminen</h3>
<p>
Lippukauppaan ilmestyy lasku tilaamiesi konepaikkojen ja lippujen mukaisesti. Laskusta löydät kaikki maksamiseen
tarvittavat tiedot.<br /> <br /> <b>Muista käyttää viitenumeroa laskua maksaessasi!</b> Huomioithan myös
pankkiviiveet maksaessasi muusta pankista kuin Osuuspankista. Maksut tarkastetaan pari kertaa päivässä. Maksuja ei
palauteta ilman erittäin hyvää syytä (esimerkiksi sairaustapauksissa lääkärintodistusta vastaan).
</p>
<h3>Paikkojen varaaminen</h3>
<p>Kun olet maksanut saamasi laskun ja olemme kirjanneet maksusi, saat sähköpostiisi ilmoituksen kun voit varata
paikkoja. Tällöin voit varata paikkakartalta tilaamasi määrän konepaikkoja.</p>
<h3>Lippujen lunastaminen tapahtuman yhteydessä</h3>
<p>Kun olet täyttänyt tietosi järjestelmään, tulosta tilauksesi mukaiset viivakoodit ja jaa ne ryhmäsi jäsenille.
Viivakoodin avulla nopeutat lippujen lunastusta huomattavasti.</p>
<h3>Tavalliset konepaikat ja pro-konepaikat</h3>
<p>
Tapahtumassa on tarjolla sekä tavallisia 80cm leveitä konepaikkoja että myös rajattu määrä normaaleista
konepaikoista poikkeavia pro-konepaikkoja.<br /> <br /> Pro-konepaikoilla pääsee nauttimaan suuremmasta tilasta,
sillä konepaikan leveys on 100cm ja lisäksi paikat on jaoteltu viiden konepaikan riveihin. Pro-konepaikkojen
käytävävälit ovat myös leveämmät.
</p>
<h3>Kysymykset</h3>
<p>Mikäli mieltäsi askarruttaa jokin liittyen tapahtuman konepaikkoihin tai lippukauppaan, ota rohkeasti yhteyttä
sähköpostilla osoitteeseen info [at] insomnia.fi.</p>
</ui:define>
</ui:composition>
</h:body>
......
......@@ -23,7 +23,8 @@
<img src="#{request.contextPath}/resources/style/insomnia2/img/devel_logo.png" />
</c:when>
<c:otherwise>
<img src="#{request.contextPath}/resources/style/insomnia2/img/logo.png" />
<!-- <img src="#{request.contextPath}/resources/style/insomnia2/img/logo.png" /> -->
<h1>STREAM INTRA</h1>
</c:otherwise>
</c:choose>
</h:link>
......@@ -32,9 +33,10 @@
</div>
<div id="login">
<h:outputText rendered="#{sessionHandler.loggedIn}" value="Olet kirjautunut käyttäjällä: #{sessionHandler.currentUser.nick}" />
<tools:loginLogout />
<h:outputText rendered="#{sessionHandler.loggedIn}" value="#{i18n['template.loggedInAs']} #{sessionHandler.currentUser.nick}" />
<div>
<tools:loginLogout />
</div>
</div>
<ui:fragment rendered="#{menuView.getMenu(0).size() > 1}">
<ul id="topmenu">
......@@ -67,7 +69,13 @@
<div id="left">
<ui:insert name="title" />
<h:messages globalOnly="true" />
<ui:repeat var="cont1" value="#{menuView.getPagecontent('top')}">
<h:outputText value="#{cont1.content}" escape="false" />
</ui:repeat>
<ui:insert name="content" />
<ui:repeat var="cont1" value="#{menuView.getPagecontent('bottom')}">
<h:outputText value="#{cont1.content}" escape="false" />
</ui:repeat>
</div>
</div>
......
<!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/cditools/user"
xmlns:tools="http://java.sun.com/jsf/composite/cditools" xmlns:f="http://java.sun.com/jsf/core">
<h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<f:metadata>
<f:event type="preRenderView" listener="#{menuListView.initList}" />
</f:metadata>
<ui:define name="content">
<h1>#{i18n['menulist.header']}</h1>
<h:dataTable styleClass="bordertable" id="menulist" value="#{menuListView.menus}" var="menu">
<h:column>
<f:facet name="header">
#
</f:facet>
<h:outputText value="#{menu.id}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{i18n['menu.name']}" />
</f:facet>
<h:outputText value="#{menu.key}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{i18n['menu.sort']}" />
</f:facet>
<h:outputText value="#{menu.sort}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{i18n['menu.item']}" />
</f:facet>
<h:outputText value="#{menu.item}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{i18n['menu.sort']}" />
</f:facet>
<h:outputText value="#{menu.sort}" />
</h:column>
<h:column>
<h:commandButton action="#{menuListView.selectMenu}" value="#{i18n['menu.select']}" />
</h:column>
</h:dataTable>
</ui:define>
</ui:composition>
</h:body>
</html>
\ No newline at end of file
<!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/cditools/user"
xmlns:tools="http://java.sun.com/jsf/composite/cditools" xmlns:f="http://java.sun.com/jsf/core">
<h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<f:metadata>
<f:event type="preRenderView" listener="#{menuListView.initList}" />
</f:metadata>
<ui:define name="content">
<h1>#{i18n['menulist.header']}</h1>
<h:dataTable styleClass="bordertable" id="menulist" value="#{menuListView.menus}" var="menu">
<h:column>
<f:facet name="header">
#
</f:facet>
<h:outputText value="#{menu.id}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{i18n['menu.name']}" />
</f:facet>
<h:outputText value="#{menu.key}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{i18n['menu.sort']}" />
</f:facet>
<h:outputText value="#{menu.sort}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{i18n['menu.item']}" />
</f:facet>
<h:outputText value="#{menu.item}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{i18n['menu.sort']}" />
</f:facet>
<h:outputText value="#{menu.sort}" />
</h:column>
<h:column>
<h:commandButton action="#{menuListView.selectMenu}" value="#{i18n['menu.select']}" />
</h:column>
</h:dataTable>
</ui:define>
</ui:composition>
</h:body>
</html>
\ No newline at end of file
......@@ -11,7 +11,6 @@
<f:viewParam name="newsgroupid" value="#{newsgroupView.newsgroupid}" />
<f:event type="preRenderView" listener="#{newsgroupView.initView}" />
</f:metadata>
<ui:param name="thispage" value="page.user.edit" />
<ui:define name="content">
<news:edit commitaction="#{newsgroupView.saveNewsgroup()}" commitvalue="#{i18n['newsgroup.save']}" />
......
......@@ -10,7 +10,6 @@
<f:metadata>
<f:event type="preRenderView" listener="#{sitePageView.initCreate}" />
</f:metadata>
<ui:param name="thispage" value="page.user.edit" />
<ui:define name="content">
<pages:edit commitaction="#{sitePageView.createSite()}" commitvalue="#{i18n['sitepage.create']}" />
......
......@@ -8,48 +8,15 @@
<h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<f:metadata>
<f:viewParam name="newsgroupid" value="#{newsgroupView.newsgroupid}" />
<f:event type="preRenderView" listener="#{newsgroupView.initView}" />
<f:viewParam name="id" value="#{sitePageView.id}" />
<f:event type="preRenderView" listener="#{sitePageView.initEdit}" />
</f:metadata>
<ui:param name="thispage" value="page.user.edit" />
<ui:define name="content">
<pages:edit commitaction="#{newsgroupView.saveNewsgroup()}" commitvalue="#{i18n['newsgroup.save']}" />
<ui:define name="content">
<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>
<pages:edit commitaction="#{sitePageView.saveSite()}" commitvalue="#{i18n['sitepage.save']}" />
<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/pages" xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:p="http://primefaces.org/ui">
<h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<f:metadata>
<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
<!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/cditools/user"
xmlns:tools="http://java.sun.com/jsf/composite/cditools" xmlns:f="http://java.sun.com/jsf/core">
<h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<f:metadata>
<f:viewParam name="id" value="#{pageOutputView.id}" />
<f:event type="preRenderView" listener="#{pageOutputView.initView}" />
</f:metadata>
<ui:define name="content">
<ui:repeat var="cont" value="#{pageOutputView.contents}">
<h:outputText value="#{cont.content}" escape="false" />
</ui:repeat>
</ui:define>
</ui:composition>
</h:body>
</html>
\ No newline at end of file
......@@ -6,41 +6,38 @@
<h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<f:metadata>
<f:event type="preRenderView" listener="#{newsListView.initView}" />
<f:event type="preRenderView" listener="#{sitePageView.initListView}" />
</f:metadata>
<ui:param name="thispage" value="page.user.create" />
<ui:define name="content">
<h1>#{i18n['newslist.header']}</h1>
<h1>#{i18n['sitepagelist.header']}</h1>
<h:dataTable styleClass="bordertable" id="user" value="#{newsListView.newsgroups}" var="newsgroup">
<h:dataTable styleClass="bordertable" id="user" value="#{sitePageView.pages}" var="page">
<h:column>
<f:facet name="header">
#
</f:facet>
<h:outputText value="#{newsgroup.id}" />
<h:outputText value="#{page.id}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{i18n['newsgroup.name']}" />
<h:outputText value="#{i18n['sitepage.name']}" />
</f:facet>
<h:outputText value="#{newsgroup.name}" />
<h:outputText value="#{page.name}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{i18n['newsgroup.priority']}" />
<h:outputText value="#{i18n['sitepage.roles']}" />
</f:facet>
<h:outputText value="#{newsgroup.priority}" />
<ul>
<ui:repeat var="r" value="#{page.allowedRoles}">
<li><h:outputText value="#{r.name}" /></li>
</ui:repeat>
</ul>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{i18n['newsgroup.writerRole']}" />
</f:facet>
<h:outputText value="#{newsgroup.writerRole.name}" />
</h:column>
<h:column>
<h:link outcome="/news/edit" value="#{i18n['newsgroup.edit']}">
<f:param name="newsgroupid" value="#{newsgroup.id}" />
<h:link outcome="/pages/edit" value="#{i18n['sitepage.edit']}">
<f:param name="id" value="#{page.id}" />
</h:link>
</h:column>
</h:dataTable>
......
......@@ -19,7 +19,6 @@
<h1>edit:</h1>
<h:form id="placeEdit">
<h:inputHidden value="#{placeView.place.id}" />
<h:panelGrid columns="2">
<h:outputLabel value="#{i18n['place.name']}:" />
<h:inputText value="#{placeView.place.name}" />
......
......@@ -11,7 +11,6 @@
<h1>#{i18n['editplacegroup.header']}</h1>
<h:form id="placegroupform">
<h:inputHidden value="#{placegroupView.group.id}" />
<h:panelGrid columns="2">
<h:outputLabel value="#{i18n['placegroup.name']}:" />
......@@ -67,7 +66,6 @@
<h:panelGroup rendered="#{!empty placegroupView.place}">
<h2>#{i18n['placegroupView.editplace']}</h2>
<h:form id="placeEdit">
<h:inputHidden value="#{placegroupView.place.id}" />
<h:panelGrid columns="2">
<h:outputLabel value="#{i18n['place.name']}:" />
<h:inputText value="#{placegroupView.place.name}" />
......
......@@ -15,7 +15,7 @@
<h:panelGrid columns="2">
<h:outputText value="#{i18n['placemanagement.placeNameLike']}" /><h:inputText value="#{place}" />
<h:outputLabel for="paidDate" value="#{i18n['bill.paidDate']}:" />
<h:inputText id="paidDate" value="#{billManageView.bill.paidDate.time}">
<h:inputText id="paidDate" value="#{billManageView.bill.paidDate}">
<f:convertDateTime />
</h:inputText>
<h:outputLabel value="#{i18n['bill.billNumber']}:" />
......
......@@ -10,7 +10,6 @@
<f:metadata>
<f:event type="preRenderView" listener="#{productListView.initView}" />
</f:metadata>
<ui:param name="thispage" value="page.product.list" />
<ui:define name="content">
<products:list />
</ui:define>
......
......@@ -16,7 +16,6 @@
<composite:implementation>
<h:form id="productform">
<h:inputHidden value="#{mapManageView.map.id}" />
<h:panelGrid columns="2">
<h:outputLabel value="#{i18n['eventmap.name']}:" />
<h:inputText value="#{mapManageView.map.name}" />
......
......@@ -57,7 +57,7 @@
<h:outputText value="#{mapView.placesLeftToSelect}" />
<h:outputLabel rendered="#{mapView.canUserBuy()}" value="#{i18n['user.accountBalance']}:" />
<h:outputText rendered="#{mapView.canUserBuy()}" value="#{mapView.user.accountBalance}">
<h:outputText rendered="#{mapView.canUserBuy()}" value="#{mapView.accountBalance}">
<f:convertNumber maxFractionDigits="2" minFractionDigits="2" />
</h:outputText>
......
<?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>
<?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"
>
<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:p="http://primefaces.org/ui" xmlns:tools="http://java.sun.com/jsf/composite/tools">
<composite:interface>
......@@ -16,34 +14,35 @@
<h:form id="newsform">
<h:panelGrid columns="3">
<h:outputLabel for="name" value="#{i18n['newsgroup.name']}:" />
<h:inputText id="name" value="#{newsgroupView.newsgroup.name}">
<h:outputLabel for="name" value="#{i18n['sitepage.name']}:" />
<h:inputText id="name" value="#{sitePageView.sitepage.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}"
>
<h:outputLabel for="roles" value="#{i18n['sitepage.roles']}" />
<h:selectManyCheckbox converter="#{roleConverter}" layout="pageDirection" id="roles" value="#{sitePageView.sitepage.allowedRoles}">
<f:selectItems var="par" itemLabel="#{par.name}" value="#{roleDataView.roles}" />
</h:selectManyCheckbox>
<h:message for="readroles" />
<h:message for="roles" />
</h:panelGrid>
<h:commandButton id="commitbtn" action="#{cc.attrs.commitaction}" value="#{cc.attrs.commitvalue}" />
<div>
<h:commandButton id="commitbtn" action="#{cc.attrs.commitaction}" value="#{cc.attrs.commitvalue}" />
</div>
<ui:fragment rendered="#{!empty sitePageView.sitepage.id}">
<div>
<h:commandButton action="#{sitePageView.addPageContent()}" value="#{i18n['sitepage.addContent']}" />
</div>
</ui:fragment>
<ui:repeat rendered="#{!empty sitePageView.sitepage.contents}" value="#{sitePageView.sitepage.contents}" var="cont">
<div>
<p:editor value="#{cont.content}" />
</div>
</ui:repeat>
</h:form>
......
......@@ -13,7 +13,7 @@
<composite:implementation>
<h:form>
<h:dataTable border="1" id="product" value="#{productListView.products}" var="product">
<h:dataTable border="1" id="product" value="#{productListView.results}" var="product">
<h:column>
<f:facet name="header">
<h:outputText value="${i18n['product.name']}" />
......
......@@ -49,15 +49,15 @@
<h:commandButton action="#{productShopView.add(-1)}" value="#{i18n['productshop.minusOne']}">
<f:ajax render="@form" />
</h:commandButton>
<h:inputText size="4" id="cartcount" value="#{cart.count}" />
<h:commandButton action="#{productShopView.add(1)}" value="#{i18n['productshop.plusOne']}">
<f:ajax render="@form" />
</h:commandButton>
<h:commandButton action="#{productShopView.add(10)}" value="#{i18n['productshop.plusTen']}">
<f:ajax render="@form" />
</h:commandButton>
<h:inputHidden value="#{cart.id}" />
<h:inputText size="4" id="cartcount" value="#{cart.count}">
<f:ajax render="@form" event="valueChange"/>
</h:inputText>
<h:commandButton action="#{productShopView.add(1)}" value="#{i18n['productshop.plusOne']}">
<f:ajax render="@form" />
</h:commandButton>
<h:commandButton action="#{productShopView.add(10)}" value="#{i18n['productshop.plusTen']}">
<f:ajax render="@form" />
</h:commandButton>
</h:column>
<h:column>
<h:dataTable border="0" var="disc" value="#{cart.discounts}">
......
......@@ -15,7 +15,6 @@
<p>
<h:form id="roleform">
<h:inputHidden id="id" value="roleView.role.id" />
<f:facet name="errorMessage">
<h:outputText value="#{i18n['nasty.user']}" />
......
<?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"
>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:composite="http://java.sun.com/jsf/composite"
xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:tools="http://java.sun.com/jsf/composite/tools">
<composite:interface>
</composite:interface>
......@@ -68,7 +66,7 @@
</f:facet>
<h:outputText value="#{user.email}" />
</h:column>
<h:column>
<!-- <h:column>
<f:facet name="header">
<h:outputText value="#{i18n['user.accountBalance']}" />
</f:facet>
......@@ -76,7 +74,7 @@
<f:convertNumber />
</h:outputText>
</h:column>
<!-- <h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{i18n['user.image']}" />
</f:facet>
......
......@@ -19,12 +19,29 @@ body,html {
float: left;
}
#logo h1 {
margin: 5px;
color: white:
}
#logo a {
text-decoration: none;
color: white;
}
#login {
width: 400px;
height: 23px;
float: right;
margin-top: 15px;
margin-top: 10px;
color: #fff;
font-size: 14px;
text-align: right;
}
#login a {
color: white;
}
.form {
......@@ -171,8 +188,8 @@ a:hover {
#topmenu a {
color: #fff;
text-decoration:none;
display:block;
text-decoration: none;
display: block;
}
#topmenu li {
......
<!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/cditools/user"
xmlns:f="http://java.sun.com/jsf/core" xmlns:c="http://java.sun.com/jsp/jstl/core"
>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:users="http://java.sun.com/jsf/composite/cditools/user"
xmlns:f="http://java.sun.com/jsf/core" 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="#{inviteAcceptView.initView}" />
<f:viewParam name="token" value="#{inviteAcceptView.token}" />
</f:metadata>
<ui:param name="thispage" value="page.user.acceptinvite" />
<ui:define name="content">
<users:edit creating="true" commitaction="#{inviteAcceptView.createUser()}" commitvalue="#{i18n['user.create']}" />
</ui:define>
</ui:composition>
</h:body>
......
......@@ -17,8 +17,8 @@
</ui:define>
<ui:define name="content">
<h:outputLabel value="#{i18n['user.accountBalance']}: " for="accountbalance" />
<h:outputText id="accountbalance" value="#{userView.user.accountBalance}" />
<h:dataTable border="1" id="ac" value="#{userView.user.accountEvents}" var="ac">
<h:outputText id="accountbalance" value="#{userView.accountBalance}" />
<h:dataTable border="1" id="ac" value="#{userView.accountEvents}" var="ac">
<h:column>
<f:facet name="header">
<h:outputText value="#{i18n['accountEvent.productname']}" />
......
<!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/cditools/user"
xmlns:f="http://java.sun.com/jsf/core" xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:p="http://primefaces.org/ui">
<h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<ui:define name="content">
<h:form id="wrapform">
<h:dataTable id="tbl" border="1" value="#{importView.wrapper}" var="wra">
<h:column>
<h:selectBooleanCheckbox id="skip" value="#{wra.skip}" />
</h:column>
<h:column>
<h:outputText value="#{wra.user.login}" />
</h:column>
<h:column>
<h:outputText value="#{wra.user.firstnames}" />
</h:column>
<h:column>
<h:outputText value="#{wra.user.lastname}" />
</h:column>
<h:column>
<h:outputText value="#{wra.user.email}" />
</h:column>
<h:column>
<h:outputText value="#{wra.user.accountBalance}" />
</h:column>
<h:column>
<h:selectOneRadio id="selected" value="#{wra.selected}" layout="pageDirection" converter="#{userConverter}">
<f:selectItems var="pot" value="#{wra.potential}" itemLabel="#{pot.id}/#{pot.login}/#{pot.firstnames}/#{pot.lastname}" />
</h:selectOneRadio>
</h:column>
</h:dataTable>
<h:commandButton action="#{importView.commitImport}" value="#{i18n['userImport.commit']}" />
</h:form>
</ui:define>
</ui:composition>
</h:body>
</html>
\ No newline at end of file
<!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/cditools/user"
xmlns:f="http://java.sun.com/jsf/core" xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:p="http://primefaces.org/ui">
<h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<f:metadata>
<f:event type="preRenderView" listener="#{importView.initImport}" />
</f:metadata>
<ui:define name="content">
<h:form enctype="multipart/form-data">
<h:panelGrid columns="3">
<h:outputLabel for="templ" value="#{i18n['importuser.template']}" />
<h:selectOneMenu id="templ" value="#{importView.template}" converter="#{cardTemplateConverter}">
<f:selectItems value="#{importView.templates}" var="templ" itemLabel="#{templ.name}" />
</h:selectOneMenu>
<h:message for="templ" />
<h:outputLabel for="file" value="#{i18n['importuser.file']}"/>
<p:fileUpload id="file" value="#{importView.file}" mode="simple" />
<h:message for="file" />
</h:panelGrid>
<h:commandButton action="#{importView.parse()}" value="Parse" />
</h:form>
</ui:define>
</ui:composition>
</h:body>
</html>
\ No newline at end of file
<!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:c="http://java.sun.com/jsp/jstl/core"
>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:users="http://java.sun.com/jsf/composite/tools/user"
xmlns:f="http://java.sun.com/jsf/core" 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.user.create" />
<ui:define name="content">
<ui:define name="title">
<h1>#{i18n['user.page.invite']}</h1>
</ui:define>
<ui:define name="content">
<h:form>
<h:panelGrid columns="3">
<h:outputLabel for="invite" />
<h:inputText id="invite" value="#{inviteView.invitemail}" />
<h:outputLabel for="invite" value="#{i18n['user.invitemail']}" />
<h:inputText id="invite" value="#{inviteView.invitemail}" required="true" />
<h:message for="invite" />
</h:panelGrid>
<h:commandButton action="#{inviteView.invite()}" value="#{i18n['user.invite']}" />
......
......@@ -42,7 +42,7 @@
</h:dataTable>
</h:column>
<h:column>
<h:link outcome="/user/editCardTemplate" value="#{i18n['cardTemplate.edit']}">
<h:link outcome="/useradmin/editCardTemplate" value="#{i18n['cardTemplate.edit']}">
<f:param name="templateid" value="#{card.id}" />
</h:link>
</h:column>
......
......@@ -11,12 +11,10 @@ import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.beans.EventBeanLocal;
import fi.insomnia.bortal.beans.SessionMgmtBeanLocal;
import fi.insomnia.bortal.clientutils.BortalLocalContextHolder;
import fi.insomnia.bortal.model.User;
......@@ -29,6 +27,7 @@ public class HostnameFilter implements Filter {
private static final Logger logger = LoggerFactory
.getLogger(HostnameFilter.class);
private boolean developmentMode = false;
private static final String HTTP_HOSTNAME_ID = "hostname_session_id";
@EJB
private SessionMgmtBeanLocal sessionmgmt;
......@@ -59,29 +58,47 @@ public class HostnameFilter implements Filter {
if (request != null && request instanceof HttpServletRequest) {
httpRequest = ((HttpServletRequest) request);
StringBuffer url = httpRequest.getRequestURL();
// logger.info("Original hostname {}", url);
// Subject subj = Subject.getSubject(AccessController.getContext());
// int beginindex = 8; // Let's skip http://
int beginindex = 7; // Let's skip http://
int beginindex = url.indexOf("//", 0);
if (beginindex < 0)
{
beginindex = 0;
} else {
beginindex = beginindex + 2;
}
int slashindex = url.indexOf("/", beginindex);
// Find the first / from URL after http://
int slashindex = url.indexOf("/", beginindex);
int colonindex = url.indexOf(":", beginindex);
int lastindex = slashindex;
if (slashindex > colonindex) {
if (colonindex >= 0 && slashindex > colonindex) {
lastindex = colonindex;
}
if (lastindex < 0) {
lastindex = url.length() - 1;
}
String hostname = url.substring(beginindex, lastindex);
httpRequest.getSession().setAttribute(
EventBeanLocal.HTTP_URL_HOSTNAME, hostname);
// httpRequest.getSession().setAttribute(EventBeanLocal.HTTP_URL_HOSTNAME,
// hostname);
BortalLocalContextHolder.setHostname(hostname);
BortalLocalContextHolder.setInDevelopmentMode(developmentMode);
Object hostname_session_id = httpRequest.getSession().getAttribute(HTTP_HOSTNAME_ID);
if (hostname_session_id != null && hostname_session_id instanceof Integer) {
BortalLocalContextHolder.setHostnameId((Integer) hostname_session_id);
} else {
BortalLocalContextHolder.setHostnameId(null);
}
if (httpRequest.getUserPrincipal() == null) {
try {
......@@ -90,7 +107,8 @@ public class HostnameFilter implements Filter {
logger.warn("Error logging in as anonymous... ignoring.. ",
t);
}
} else if (!httpRequest.getUserPrincipal().getName().equals(User.ANONYMOUS_LOGINNAME))
}
else if (!httpRequest.getUserPrincipal().getName().equals(User.ANONYMOUS_LOGINNAME))
{
sessionmgmt.updateSessionUser(httpRequest.getSession().getId(), httpRequest.getUserPrincipal().getName());
}
......@@ -121,15 +139,15 @@ public class HostnameFilter implements Filter {
}
public static String getCurrentHostname(HttpSession sess) {
String ret = null;
if (sess != null) {
Object retObj = sess.getAttribute(EventBeanLocal.HTTP_URL_HOSTNAME);
if (retObj != null) {
ret = retObj.toString();
}
}
return ret;
}
// public static String getCurrentHostname(HttpSession sess) {
// String ret = null;
// if (sess != null) {
// Object retObj = sess.getAttribute(EventBeanLocal.HTTP_URL_HOSTNAME);
// if (retObj != null) {
// ret = retObj.toString();
// }
// }
// return ret;
// }
}
......@@ -51,7 +51,7 @@ public class SessionHandler {
public String getLocale() {
// TODO: Locale selection code missing
// return "en_ST_v7";
return "fi_IN_XIII";
return "en_ST_nine";
}
public String getLayout() {
......
cardTemplate.emptyCardTemplate = ----
global.copyright = Verkkopeliyhdistys Insomnia ry
global.productname = Omnia
......
......@@ -65,6 +65,7 @@ billine.vat = VAT
bills.noBills = No bills
cardTemplate.edit = Edit
cardTemplate.name = Card template
cardTemplate.power = Card power
cardTemplate.roles = Associated roles
......@@ -88,11 +89,36 @@ editplace.header = Edit place
editplacegroup.header = Placegroup information
event.defaultRole = Default user role
event.edit = Edit
event.endTime = End time
event.name = Event name
event.nextBillNumber = Initial bill number
event.referenceNumberBase = Reference number base
event.save = Save
event.startTime = Start time
eventdomain.domainname = Domain
eventdomain.remove = Remove
eventorg.bankName1 = Bank name 2
eventorg.bankNumber1 = Bank account nr. 2
eventorg.billAddress1 = Billing address 1
eventorg.billAddress2 = Billing address 2
eventorg.billAddress3 = Billing address 3
eventorg.billAddress4 = Billing address 4
eventorg.bundleCountry = Country bundle
eventorg.createEvent = Create event
eventorg.createevent = Create new event
eventorg.edit = Edit
eventorg.events = Event of the organisation
eventorg.organisation = Organisation name
eventorg.save = Save
eventorgView.eventname = Name of event
eventorganiser.name = Eventorganiser
game.gamepoints = Game points
global.cancel = Cancel
......@@ -104,6 +130,8 @@ global.save = Save
imagefile.description = Description
imagefile.file = Imagefile
invite.successfull = Invite sent successfully
javax.validation.constraints.AssertFalse.message = must be false
javax.validation.constraints.AssertTrue.message = must be true
javax.validation.constraints.DecimalMax.message = must be less than or equal to {value}
......@@ -301,6 +329,7 @@ product.vat = VAT
products.save = Save
productshop.billCreated = Bill created
productshop.commit = Buy
productshop.noItemsInCart = There are no products in shopping cart
productshop.total = Total
......@@ -316,22 +345,24 @@ readerevent.shopToUser = Buy to user
readerview.cards = Card ( printcount )
resetMail.body = You can change a forgotten password by inserting your username to the field below. A link where you can change the password will be sent to the email address associated to that user.resetMail.header=Unohtuneen salasanan vaihto
resetMail.body = You can change a forgotten password by inserting your username to the field below. A link where you can change the password will be sent to the email address associated to that.
resetMail.header = Reset lost password
resetMail.send = Send email
resetMail.username = Username
resetmailSent.body = Email has been sent containing a link where you can change the password.
resetmailSent.header = Email sent
role.create = Create role
role.description = Description
role.edit = Edit
role.edit.save = Save
role.execute = (X)
role.name = Name
role.parents = Parents
role.read = (R)
role.write = (W)
role.cardtemplate = Cardtemplate
role.create = Create role
role.description = Description
role.edit = Edit
role.edit.save = Save
role.execute = (X)
role.name = Name
role.parents = Parents
role.read = (R)
role.write = (W)
shop.accountBalance = Balance
shop.user = Selling to
......@@ -364,37 +395,73 @@ sidebar.users = Users
sidebar.utils.flushCache = Flush Cache
sidebar.utils.testdata = Testdata
submenu.bill.billSummary = Bill summary
submenu.bill.list = My bills
submenu.bill.listAll = All bills
submenu.map.create = Create map
submenu.map.list = List maps
submenu.product.create = Create product
submenu.product.list = List products
sitepage.edit = Edit
sitepage.name = Page name
sitepage.roles = Visible for roles
sitepagelist.header = Site pages
submenu.auth.sendResetMail = Password reset
submenu.bill.billSummary = Bill summary
submenu.bill.list = My bills
submenu.bill.listAll = All bills
submenu.index = Front page
submenu.map.create = Create map
submenu.map.list = List maps
submenu.pages.create = Create content
submenu.pages.list = List pages
submenu.place.insertToken = Insert placecode
submenu.place.myGroups = Place reservations
submenu.poll.index = Polls
submenu.product.create = Create product
submenu.product.list = List products
submenu.role.create = Create role
submenu.role.list = Roles
submenu.shop.createBill = Shop
submenu.user.accountEvents = Account events
submenu.user.changePassword = Change password
submenu.user.create = Create new user
submenu.user.edit = User information
submenu.user.invite = Invite friends
submenu.user.manageuserlinks = Manage users
submenu.user.rolelinks = Manage roles
submenu.user.sendPicture = Send picture
submenu.user.userlinks = User information
submenu.useradmin.create = Create user
submenu.useradmin.createCardTemplate = Create cardtemplate
submenu.useradmin.list = List users
submenu.useradmin.listCardTemplates = Card templates
supernavi.admin = Adminview
supernavi.user = Userview
template.loggedInAs = Logged in as:
topnavi.billing = Billing
topnavi.frontpage = Frontpage
topnavi.contents = Site contents
topnavi.frontpage = Front page
topnavi.maps = Maps
topnavi.placemap = Map
topnavi.poll = Polls
topnavi.products = Products
topnavi.shop = Shop
topnavi.user = My properties
topnavi.usermgmt = Users
user.accountBalance = Account balance
user.accountEventHeader = Account events
user.accountEvents = Account events
user.accountevents = Account events
user.address = Address
user.bank = Bank
user.bankaccount = Bank number
user.changePassword = Change password
user.changepassword.forUser = For user
user.changepassword.title = Change password
user.create = Create user
user.createdmessage = User has been created successfully. You can now login.
user.defaultImage = Default picture
user.edit = Edit
user.edit.title = My information
user.email = Email
user.firstNames = Firstname
user.hasImage = Image
......@@ -402,6 +469,8 @@ user.image = Image
user.imagelist = Saved images
user.imagesubmit = Send image
user.insertToken = Insert token
user.invite = Invite
user.invitemail = Email address
user.lastName = Lastname
user.login = Login
user.myGroups = My place reservations
......@@ -409,6 +478,7 @@ user.nick = Nick
user.noAccountevents = No account events
user.noCurrentImage = No image
user.noImage = No image
user.page.invite = Invite friends
user.password = Password
user.passwordcheck = Password ( again )
user.passwordlengthMessage = Password is too short!
......
......@@ -64,6 +64,7 @@ billine.vat = ALV
bills.noBills = Ei laskuja
cardTemplate.edit = Muokkaa
cardTemplate.name = Korttipohja
cardTemplate.power = Teho
cardTemplate.roles = Yhdistetyt roolit
......@@ -87,11 +88,35 @@ editplace.header = Muokkaa paikkaa
editplacegroup.header = Paikkaryhm\u00E4n tiedot
event.defaultRole = K\u00E4ytt\u00E4jien oletusrooli
event.edit = Muokkaa
event.endTime = Lopetusp\u00E4iv\u00E4
event.name = Tapahtuman nimi
event.nextBillNumber = Seuraavan laskun numero
event.referenceNumberBase = Viitenumeron pohja
event.save = Tallenna
event.startTime = Aloitusp\u00E4iv\u00E4
eventdomain.domainname = Domain
eventdomain.remove = Poista
eventorg.bankName1 = Pankin nimi 2
eventorg.bankNumber1 = Tilinumero 2
eventorg.billAddress1 = Laskutusosoite 1
eventorg.billAddress2 = Laskutusosoite 2
eventorg.billAddress3 = Laskutusosoite 3
eventorg.billAddress4 = Laskutusosoite 4
eventorg.bundleCountry = Kieli-bundle
eventorg.createEvent = Luo tapahtuma
eventorg.createevent = Luo uusi tapahtuma
eventorg.events = Organisaation tapahtumat
eventorg.organisation = Organisaation nimi
eventorg.save = Tallenna
eventorgView.eventname = Tapahtuman nimi
eventorganiser.name = Tapahtumaj\u00E4rjest\u00E4j\u00E4
game.gamepoints = Insomnia Game pisteet:
global.cancel = Peruuta
......@@ -113,6 +138,8 @@ imagefile.file = Kuvatiedosto
index.title = Etusivu
invite.successfull = Kutsu l\u00E4hetetty
javax.validation.constraints.AssertFalse.message = must be false
javax.validation.constraints.AssertTrue.message = must be true
javax.validation.constraints.DecimalMax.message = must be less than or equal to {value}
......@@ -359,36 +386,52 @@ sidebar.users = K\u00E4ytt\u00E4j\u00E4t
sidebar.utils.flushCache = Flush Cache
sidebar.utils.testdata = Testdata
submenu.auth.sendResetMail = Salasanan palautus
submenu.bill.billSummary = Laskujen yhteenveto
submenu.bill.list = N\u00E4yt\u00E4 omat laskut
submenu.bill.listAll = Kaikki laskut
submenu.index = Etusivu
submenu.map.create = Uusi kartta
submenu.map.list = N\u00E4yt\u00E4 kartat
submenu.place.insertToken = Sy\u00F6t\u00E4 paikkakoodi
submenu.place.myGroups = Omat paikkavaraukset
submenu.product.create = Uusi tuote
submenu.product.list = Listaa tuotteet
submenu.role.create = Luo rooli
submenu.role.list = Roolit
submenu.shop.createBill = Luo lasku
submenu.user.accountEvents = Tilitapahtumat
submenu.user.changePassword = Vaihda salasana
submenu.user.create = Luo k\u00E4ytt\u00E4j\u00E4
submenu.user.createCardTemplate = Luo korttiryhm\u00E4
submenu.user.edit = K\u00E4ytt\u00E4j\u00E4n tiedot
submenu.user.list = Kaikki k\u00E4ytt\u00E4j\u00E4t
submenu.user.listCardTemplates = Korttiryhm\u00E4t
submenu.user.manageuserlinks = Hallitse k\u00E4ytt\u00E4ji\u00E4
submenu.user.rolelinks = Hallitse rooleja
submenu.user.sendPicture = L\u00E4het\u00E4 kuva
submenu.user.userlinks = Muokkaa tietoja
sitepage.edit = Muokkaa
sitepage.name = Sivun nimi
sitepage.roles = N\u00E4ytet\u00E4\u00E4n rooleille
sitepagelist.header = Sivuston sis\u00E4ll\u00F6t
submenu.auth.sendResetMail = Salasanan palautus
submenu.bill.billSummary = Laskujen yhteenveto
submenu.bill.list = N\u00E4yt\u00E4 omat laskut
submenu.bill.listAll = Kaikki laskut
submenu.map.create = Uusi kartta
submenu.map.list = N\u00E4yt\u00E4 kartat
submenu.pages.create = Luo sis\u00E4lt\u00F6\u00E4
submenu.pages.list = N\u00E4yt\u00E4 sis\u00E4ll\u00F6t
submenu.place.insertToken = Sy\u00F6t\u00E4 paikkakoodi
submenu.place.myGroups = Omat paikkavaraukset
submenu.poll.index = Kyselyt
submenu.product.create = Uusi tuote
submenu.product.list = Listaa tuotteet
submenu.role.create = Luo rooli
submenu.role.list = Roolit
submenu.shop.createBill = Luo lasku
submenu.user.accountEvents = Tilitapahtumat
submenu.user.changePassword = Vaihda salasana
submenu.user.create = Luo k\u00E4ytt\u00E4j\u00E4
submenu.user.createCardTemplate = Luo korttiryhm\u00E4
submenu.user.edit = K\u00E4ytt\u00E4j\u00E4n tiedot
submenu.user.invite = Kutsu yst\u00E4vi\u00E4
submenu.user.list = Kaikki k\u00E4ytt\u00E4j\u00E4t
submenu.user.listCardTemplates = Korttiryhm\u00E4t
submenu.user.manageuserlinks = Hallitse k\u00E4ytt\u00E4ji\u00E4
submenu.user.rolelinks = Hallitse rooleja
submenu.user.sendPicture = L\u00E4het\u00E4 kuva
submenu.user.userlinks = Muokkaa tietoja
submenu.useradmin.create = Luo uusi k\u00E4ytt\u00E4j\u00E4
submenu.useradmin.createCardTemplate = Luo uusi korttipohja
submenu.useradmin.list = Listaa k\u00E4ytt\u00E4j\u00E4t
submenu.useradmin.listCardTemplates = Listaa korttipohjat
supernavi.admin = Yll\u00E4piton\u00E4kym\u00E4
supernavi.user = K\u00E4ytt\u00E4j\u00E4n\u00E4kym\u00E4
template.loggedInAs = Kirjautunut tunnuksella:
topnavi.billing = Laskutus
topnavi.contents = Sivuston sis\u00E4lt\u00F6
topnavi.frontpage = Etusivu
topnavi.maps = Kartat
topnavi.placemap = Paikkakartta
......@@ -396,6 +439,7 @@ topnavi.poll = Kyselyt
topnavi.products = Tuotteet
topnavi.shop = Kauppa
topnavi.user = Omat tiedot
topnavi.usermgmt = K\u00E4ytt\u00E4j\u00E4t
user.accountBalance = Tilin saldo
user.accountEventHeader = Tilitapahtumat
......@@ -410,19 +454,22 @@ 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
user.edit = Muokkaa
user.edit.title = K\u00E4ytt\u00E4j\u00E4n tiedot
user.edit.title = Omat tiedot
user.email = S\u00E4hk\u00F6posti
user.firstNames = Etunimi
user.hasImage = Kuva
user.imageUploaded = Kuva l\u00E4hetetty.
user.imagelist = Tallennetut kuvat
user.imagesubmit = L\u00E4het\u00E4 kuva
user.invite = Kutsu
user.invitemail = S\u00E4hk\u00F6postiosoite
user.lastName = Sukunimi
user.login = K\u00E4ytt\u00E4j\u00E4tunnus
user.nick = Nick
user.noAccountevents = Ei tilitapahtumia
user.noCurrentImage = Ei kuvaa
user.noImage = EI kuvaa
user.page.invite = Kutsu yst\u00E4vi\u00E4
user.password = Salasana
user.passwordcheck = Salasana ( uudelleen )
user.passwordlengthMessage = Salasana liian lyhyt
......
......@@ -5,5 +5,7 @@
bill.billMarkedPaidMail.message = Laskusi numero {0} on merkitty maksetuksi. Voit nyt siirty\u00E4 lippukauppaan varamaamaan haluamasi paikat. \nTervetuloa tapahtumaan!\n\nTerveisin,\nInsomnia lippupalvelu\nwww.insomnia.fi
bill.billMarkedPaidMail.subject = [INSOMNIA] Lasku merkitty maksetuksi
eventorg.edit = Muokkaa
global.infomail = info@insomnia.fi
global.webpage = http://www.insomnia.fi
......@@ -19,14 +19,14 @@ public class BortalHttpSessionListener implements HttpSessionListener {
@Override
public void sessionCreated(HttpSessionEvent se) {
logger.info("SessionCreated (web) se");
logger.debug("SessionCreated (web) se");
sessbean.sessionCreated(se.getSession());
}
@Override
public void sessionDestroyed(HttpSessionEvent se) {
logger.info("Session destroyed (web) se");
logger.debug("Session destroyed (web) se");
sessbean.sessionDestroyed(se.getSession());
}
......
package fi.insomnia.bortal.servlet;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.ejb.EJB;
import javax.servlet.annotation.WebServlet;
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.EventBeanLocal;
import fi.insomnia.bortal.beans.PermissionBeanLocal;
import fi.insomnia.bortal.model.LanEventProperty;
import fi.insomnia.bortal.model.LanEventPropertyKey;
/**
* Servlet implementation class UploadServlet
*/
@WebServlet(urlPatterns = { "/dydata/*" })
public class FileDownloadServlet extends GenericImageServlet {
/**
*
*/
private static final long serialVersionUID = -3359999630873773508L;
@EJB
private transient PermissionBeanLocal permbean;
@EJB
private EventBeanLocal orgbean;
private static final Logger logger = LoggerFactory.getLogger(FileDownloadServlet.class);
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
* response)
*/
private static final Pattern URLPATTERN = Pattern.compile("([^./]+)");
@Override
protected ImageMover getImagedata() {
ImageMover ret = new ImageMover();
logger.info("Matching {}", super.request);
logger.info("URL {}", super.request.getPathInfo());
Matcher matcher = URLPATTERN.matcher(super.request.getPathInfo());
List<String> urlparts = new ArrayList<String>();
while (matcher.find()) {
urlparts.add(matcher.group());
}
if (urlparts.isEmpty()) {
ret.setResponse(HttpServletResponse.SC_NOT_FOUND);
} else if (urlparts.get(0).equals("logo")) {
LanEventProperty logo = orgbean.getProperty(LanEventPropertyKey.EVENT_LOGO);
if (logo != null) {
ret.setData(logo.getByteValue());
ret.setImagetype(logo.getByteMime());
}
} else {
ret.setResponse(HttpServletResponse.SC_NOT_FOUND);
}
return ret;
}
}
......@@ -10,9 +10,9 @@ import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.utilities.SearchResult;
import fi.insomnia.bortal.utilities.jpa.ModelInterface;
public abstract class PaginationView<T extends ModelInterface<?>> extends GenericCDIView implements IPaginationView {
public abstract class PaginationView<T extends ModelInterface> extends GenericCDIView implements IPaginationView {
private static long serialVersionUID = -673649175435129349L;
private static final long serialVersionUID = -1226554409762987631L;
protected Integer page = 0;
protected Integer pagesize = 20;
protected Long resultcount = 0L;
......
package fi.insomnia.bortal.web.cdiview.content;
import java.util.List;
import javax.ejb.EJB;
import javax.enterprise.context.RequestScoped;
import javax.inject.Named;
import fi.insomnia.bortal.beans.SitePageBeanLocal;
import fi.insomnia.bortal.model.PageContent;
import fi.insomnia.bortal.web.cdiview.GenericCDIView;
@Named
@RequestScoped
public class PageOutputView extends GenericCDIView {
private static final long serialVersionUID = 1384298744925823293L;
@EJB
private SitePageBeanLocal pagebean;
private Integer id;
private String name;
private List<PageContent> contents;
public void initIndexView()
{
name = "index";
initView();
}
public void initView() {
if (name == null || name.isEmpty()) {
setContents(pagebean.findContentsForUser(id));
} else {
setContents(pagebean.findContentsForUser(name));
}
if (!requirePermissions(contents != null && !contents.isEmpty()))
{
contents = null;
}
}
public Integer getId() {
return id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void setId(Integer id) {
this.id = id;
}
public List<PageContent> getContents() {
return contents;
}
public void setContents(List<PageContent> contents) {
this.contents = contents;
}
}
package fi.insomnia.bortal.web.cdiview.content;
import java.util.List;
import javax.ejb.EJB;
import javax.enterprise.context.ConversationScoped;
import javax.inject.Named;
......@@ -16,14 +18,15 @@ public class SitePageView extends GenericCDIView {
private static final long serialVersionUID = -513285802858190970L;
@EJB
private SitePageBeanLocal sitepagebean;
private String siteName;
private Integer id;
private SitePage sitepage;
private List<SitePage> pages;
public void initEdit()
{
if (super.requirePermissions(ContentPermission.MANAGE_PAGES) && sitepage == null)
{
sitepage = sitepagebean.find(siteName);
sitepage = sitepagebean.find(id);
super.beginConversation();
}
}
......@@ -38,6 +41,14 @@ public class SitePageView extends GenericCDIView {
}
public void initListView()
{
if (requirePermissions(ContentPermission.MANAGE_PAGES))
{
pages = sitepagebean.findAll();
}
}
public String addPageContent()
{
sitepage = sitepagebean.createContent(sitepage).getSitepage();
......@@ -64,12 +75,20 @@ public class SitePageView extends GenericCDIView {
this.sitepage = sitepage;
}
public String getSiteName() {
return siteName;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public List<SitePage> getPages() {
return pages;
}
public void setSiteName(String siteName) {
this.siteName = siteName;
public void setPages(List<SitePage> pages) {
this.pages = pages;
}
}
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!