Commit b34c3a8a by Tuomas Riihimäki

Tapahtuma loppuu

1 parent 427a70b0
Showing with 1395 additions and 246 deletions
...@@ -98,7 +98,6 @@ public class CardTemplateBean implements CardTemplateBeanLocal { ...@@ -98,7 +98,6 @@ public class CardTemplateBean implements CardTemplateBeanLocal {
* *
* @throws PermissionDeniedException * @throws PermissionDeniedException
*/ */
@RolesAllowed(UserPermission.S_MODIFY)
@Override @Override
public PrintedCard checkPrintedCard(User user) throws PermissionDeniedException { public PrintedCard checkPrintedCard(User user) throws PermissionDeniedException {
logger.info("Checking printed card"); logger.info("Checking printed card");
......
package fi.insomnia.bortal.beans; package fi.insomnia.bortal.beans;
import javax.ejb.EJB; import javax.ejb.EJB;
import javax.ejb.LocalBean;
import javax.ejb.Stateless; import javax.ejb.Stateless;
import javax.persistence.EntityManager; import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext; import javax.persistence.PersistenceContext;
...@@ -19,6 +20,7 @@ import fi.insomnia.bortal.model.User; ...@@ -19,6 +20,7 @@ import fi.insomnia.bortal.model.User;
* Session Bean implementation class EventBean * Session Bean implementation class EventBean
*/ */
@Stateless @Stateless
@LocalBean
public class EventBean implements EventBeanLocal { public class EventBean implements EventBeanLocal {
private static final String DEFAULT_EVENT_NAME = "Default event"; private static final String DEFAULT_EVENT_NAME = "Default event";
......
...@@ -12,9 +12,10 @@ import org.slf4j.Logger; ...@@ -12,9 +12,10 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.enums.apps.BillPermission; 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.IAppPermission;
import fi.insomnia.bortal.enums.apps.MapPermission; import fi.insomnia.bortal.enums.apps.MapPermission;
import fi.insomnia.bortal.enums.apps.NewsPermission; import fi.insomnia.bortal.enums.apps.PollPermission;
import fi.insomnia.bortal.enums.apps.ShopPermission; import fi.insomnia.bortal.enums.apps.ShopPermission;
import fi.insomnia.bortal.enums.apps.SpecialPermission; import fi.insomnia.bortal.enums.apps.SpecialPermission;
import fi.insomnia.bortal.enums.apps.UserPermission; import fi.insomnia.bortal.enums.apps.UserPermission;
...@@ -51,7 +52,12 @@ import fi.insomnia.bortal.model.User; ...@@ -51,7 +52,12 @@ import fi.insomnia.bortal.model.User;
BillPermission.S_WRITE_ALL, BillPermission.S_WRITE_ALL,
BillPermission.S_VIEW_OWN, BillPermission.S_VIEW_OWN,
NewsPermission.S_MANAGE, ContentPermission.S_MANAGE_NEWS,
ContentPermission.S_MANAGE_PAGES,
PollPermission.S_ANSWER,
PollPermission.S_VIEW_RESULTS,
PollPermission.S_CREATE,
SpecialPermission.S_SUPERADMIN, SpecialPermission.S_SUPERADMIN,
SpecialPermission.S_USER, SpecialPermission.S_USER,
......
package fi.insomnia.bortal.beans; package fi.insomnia.bortal.beans;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Calendar;
import java.util.List; import java.util.List;
import javax.annotation.security.DeclareRoles; import javax.annotation.security.DeclareRoles;
...@@ -12,10 +11,12 @@ import javax.ejb.Stateless; ...@@ -12,10 +11,12 @@ import javax.ejb.Stateless;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.enums.apps.PollPermission;
import fi.insomnia.bortal.facade.PollAnswerFacade; import fi.insomnia.bortal.facade.PollAnswerFacade;
import fi.insomnia.bortal.facade.PollFacade; import fi.insomnia.bortal.facade.PollFacade;
import fi.insomnia.bortal.facade.PollQuestionFacade; import fi.insomnia.bortal.facade.PollQuestionFacade;
import fi.insomnia.bortal.facade.PossibleAnswerFacade; import fi.insomnia.bortal.facade.PossibleAnswerFacade;
import fi.insomnia.bortal.model.LanEvent;
import fi.insomnia.bortal.model.Poll; import fi.insomnia.bortal.model.Poll;
import fi.insomnia.bortal.model.PollAnswer; import fi.insomnia.bortal.model.PollAnswer;
import fi.insomnia.bortal.model.PollQuestion; import fi.insomnia.bortal.model.PollQuestion;
...@@ -26,7 +27,7 @@ import fi.insomnia.bortal.model.PossibleAnswer; ...@@ -26,7 +27,7 @@ import fi.insomnia.bortal.model.PossibleAnswer;
*/ */
@Stateless @Stateless
@DeclareRoles({ "POLL/ANSWER", "POLL/VIEW_RESULTS", "POLL/CREATE" }) @DeclareRoles({ PollPermission.S_ANSWER, PollPermission.S_CREATE, PollPermission.S_VIEW_RESULTS })
public class PollBean implements PollBeanLocal { public class PollBean implements PollBeanLocal {
@EJB @EJB
...@@ -57,57 +58,54 @@ public class PollBean implements PollBeanLocal { ...@@ -57,57 +58,54 @@ public class PollBean implements PollBeanLocal {
} }
@Override @Override
@RolesAllowed("POLL/ANSWER") @RolesAllowed(PollPermission.S_ANSWER)
public List<Poll> findPolls() { public List<Poll> findUsablePolls() {
List<Poll> list = new ArrayList<Poll>(); return pollFacade.findAllUsable(eventBean.getCurrentEvent());
for (Poll p : pollFacade.findAll(eventBean.getCurrentEvent())) {
if (pollIsUsable(p)) {
list.add(p);
}
logger.debug("Checked poll {}. listsize {}", p, list.size());
}
logger.debug("Returning poll");
return list;
} }
private boolean pollIsUsable(Poll poll) { @Override
Calendar now = Calendar.getInstance(); @RolesAllowed(PollPermission.S_VIEW_RESULTS)
public List<Poll> findAllPolls() {
// Already valid return pollFacade.findAll(eventBean.getCurrentEvent());
if (poll.getBegin().after(now)) {
logger.debug("Poll {} not opened yet", poll);
return false;
}
// Still valid
if (poll.getEnd().before(now)) {
logger.debug("Poll {} already closed", poll);
return false;
}
logger.debug("Poll has {} questions", poll.getQuestions());
// At least one question that is on a page
for (PollQuestion q : poll.getQuestions()) {
logger.debug("Check question {} page {}", q, q.getPage());
if (q.getPage() > 0) {
return true;
}
}
// No usable questions
return false;
} }
// private boolean pollIsUsable(Poll poll) {
// Date now = new Date();
//
// // Already valid
// if (poll.getBegin().after(now)) {
// logger.debug("Poll {} not opened yet", poll);
// return false;
// }
//
// // Still valid
// if (poll.getEnd().before(now)) {
// logger.debug("Poll {} already closed", poll);
// return false;
// }
//
// logger.debug("Poll has {} questions", poll.getQuestions());
// // At least one question that is on a page
// for (PollQuestion q : poll.getQuestions()) {
// logger.debug("Check question {} page {}", q, q.getPage());
// if (q.getPage() > 0) {
// return true;
// }
// }
//
// // No usable questions
// return false;
// }
@Override @Override
@RolesAllowed("POLL/ANSWER") @RolesAllowed(PollPermission.S_ANSWER)
public boolean createAnswers(List<PollAnswer> answers) { public boolean createAnswers(List<PollAnswer> answers) {
for (PollAnswer answer : answers) { for (PollAnswer answer : answers) {
answer.setUser(permbean.getCurrentUser()); answer.setUser(permbean.getCurrentUser());
if (answer.getId().getId() == null) { if (answer.getId() == null) {
pollAnswerFacade.create(answer); pollAnswerFacade.create(answer);
} }
} }
...@@ -116,28 +114,41 @@ public class PollBean implements PollBeanLocal { ...@@ -116,28 +114,41 @@ public class PollBean implements PollBeanLocal {
} }
@Override @Override
public PossibleAnswer findPossibleAnwerById(int id) { public PossibleAnswer findPossibleAnwerById(Integer id) {
PossibleAnswer ans = possibleAnswerFacade.find(eventBean.getCurrentEvent().getId(), Integer.valueOf(id)); PossibleAnswer ans = possibleAnswerFacade.find(id);
logger.debug("Searching from facade {} found {}", id, ans.getId().getId()); logger.info("Searching from facade {} found {}", id, ans.getId());
return ans; return ans;
} }
@Override @Override
@RolesAllowed("POLL/CREATE") @RolesAllowed(PollPermission.S_CREATE)
public void createPoll(Poll poll) { public void createPoll(Poll poll) {
pollFacade.create(poll); LanEvent ev = eventBean.getCurrentEvent();
poll.setEvent(ev);
if (ev.getPolls() == null)
{
ev.setPolls(new ArrayList<Poll>());
}
ev.getPolls().add(poll);
} }
@Override @Override
@RolesAllowed("POLL/ANSWER") @RolesAllowed(PollPermission.S_ANSWER)
public void createAnswers(PollQuestion q) { public void createAnswers(PollQuestion q) {
pqfacade.create(q); pqfacade.create(q);
} }
@Override @Override
@RolesAllowed("POLL/ANSWER") @RolesAllowed(PollPermission.S_ANSWER)
public Poll find(Integer pollId) { public Poll find(Integer pollId) {
return pollFacade.find(eventBean.getCurrentEvent(), pollId); return pollFacade.find(pollId);
} }
@Override
@RolesAllowed(PollPermission.S_CREATE)
public Poll savePoll(Poll poll) {
return pollFacade.merge(poll);
}
} }
package fi.insomnia.bortal.beans;
import java.util.ArrayList;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import fi.insomnia.bortal.facade.SitePageFacade;
import fi.insomnia.bortal.model.PageContent;
import fi.insomnia.bortal.model.SitePage;
/**
* Session Bean implementation class SitePageBean
*/
@Stateless
@LocalBean
public class SitePageBean implements SitePageBeanLocal {
/**
* Default constructor.
*/
public SitePageBean() {
// TODO Auto-generated constructor stub
}
@EJB
private SitePageFacade sitepagefacade;
@EJB
private EventBeanLocal eventbean;
@EJB
private PermissionBeanLocal permbean;
@Override
public SitePage find(String siteName) {
return sitepagefacade.find(siteName);
}
@Override
public void create(SitePage sitepage) {
sitepage.setEvent(eventbean.getCurrentEvent());
sitepagefacade.create(sitepage);
}
@Override
public SitePage save(SitePage sitepage) {
return sitepagefacade.merge(sitepage);
}
@Override
public PageContent createContent(SitePage sitepage) {
sitepage = sitepagefacade.find(sitepage.getId());
PageContent ret = new PageContent(sitepage);
if (sitepage.getContents() == null)
{
sitepage.setContents(new ArrayList<PageContent>());
}
sitepage.getContents().add(ret);
return ret;
}
@Override
public List<SitePage> getPagerootsForUser() {
return sitepagefacade.findForUser(permbean.getCurrentUser(), null);
}
@Override
public List<SitePage> getPagesForUser(SitePage site)
{
return sitepagefacade.findForUser(permbean.getCurrentUser(), site);
}
@Override
public List<SitePage> findAll() {
return sitepagefacade.findAll();
}
}
package fi.insomnia.bortal.facade;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import fi.insomnia.bortal.model.PageContent;
@Stateless
@LocalBean
public class PageContentFacade extends GenericFacade<Integer, PageContent> {
@PersistenceContext
private EntityManager em;
public PageContentFacade() {
super(PageContent.class);
}
@Override
protected EntityManager getEm() {
return em;
}
}
...@@ -9,16 +9,17 @@ import fi.insomnia.bortal.model.PollAnswer; ...@@ -9,16 +9,17 @@ import fi.insomnia.bortal.model.PollAnswer;
@Stateless @Stateless
@LocalBean @LocalBean
public class PollAnswerFacade extends EventChildGenericFacade<PollAnswer> { public class PollAnswerFacade extends GenericFacade<Integer, PollAnswer> {
@PersistenceContext @PersistenceContext
private EntityManager em; private EntityManager em;
public PollAnswerFacade() { public PollAnswerFacade() {
super(PollAnswer.class); super(PollAnswer.class);
} }
protected EntityManager getEm() { @Override
return em; protected EntityManager getEm() {
} return em;
}
} }
package fi.insomnia.bortal.facade; package fi.insomnia.bortal.facade;
import java.util.Date;
import java.util.List;
import javax.ejb.LocalBean; import javax.ejb.LocalBean;
import javax.ejb.Stateless; import javax.ejb.Stateless;
import javax.persistence.EntityManager; import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext; import javax.persistence.PersistenceContext;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;
import fi.insomnia.bortal.model.LanEvent;
import fi.insomnia.bortal.model.Poll; import fi.insomnia.bortal.model.Poll;
import fi.insomnia.bortal.model.Poll_;
@Stateless @Stateless
@LocalBean @LocalBean
public class PollFacade extends EventChildGenericFacade<Poll> { public class PollFacade extends GenericFacade<Integer, Poll> {
@PersistenceContext
private EntityManager em;
public PollFacade() {
super(Poll.class);
}
@Override
protected EntityManager getEm() {
return em;
}
// private boolean pollIsUsable(Poll poll) {
// Date now = new Date();
//
// // Already valid
// if (poll.getBegin().after(now)) {
// logger.debug("Poll {} not opened yet", poll);
// return false;
// }
//
// // Still valid
// if (poll.getEnd().before(now)) {
// logger.debug("Poll {} already closed", poll);
// return false;
// }
//
// logger.debug("Poll has {} questions", poll.getQuestions());
// // At least one question that is on a page
// for (PollQuestion q : poll.getQuestions()) {
// logger.debug("Check question {} page {}", q, q.getPage());
// if (q.getPage() > 0) {
// return true;
// }
// }
//
// // No usable questions
// return false;
// }
public List<Poll> findAllUsable(LanEvent currentEvent) {
Date now = new Date();
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Poll> cq = cb.createQuery(Poll.class);
Root<Poll> root = cq.from(Poll.class);
cq.where(cb.equal(root.get(Poll_.event), currentEvent),
cb.lessThan(root.get(Poll_.begin), now),
cb.greaterThan(root.get(Poll_.end), now)
);
return em.createQuery(cq).getResultList();
}
public List<Poll> findAll(LanEvent currentEvent) {
@PersistenceContext CriteriaBuilder cb = em.getCriteriaBuilder();
private EntityManager em; CriteriaQuery<Poll> cq = cb.createQuery(Poll.class);
Root<Poll> root = cq.from(Poll.class);
public PollFacade() { cq.where(cb.equal(root.get(Poll_.event), currentEvent));
super(Poll.class); return em.createQuery(cq).getResultList();
}
protected EntityManager getEm() { }
return em;
}
} }
...@@ -9,16 +9,17 @@ import fi.insomnia.bortal.model.PollQuestion; ...@@ -9,16 +9,17 @@ import fi.insomnia.bortal.model.PollQuestion;
@Stateless @Stateless
@LocalBean @LocalBean
public class PollQuestionFacade extends EventChildGenericFacade<PollQuestion> { public class PollQuestionFacade extends GenericFacade<Integer, PollQuestion> {
@PersistenceContext @PersistenceContext
private EntityManager em; private EntityManager em;
public PollQuestionFacade() { public PollQuestionFacade() {
super(PollQuestion.class); super(PollQuestion.class);
} }
protected EntityManager getEm() { @Override
return em; protected EntityManager getEm() {
} return em;
}
} }
...@@ -9,16 +9,17 @@ import fi.insomnia.bortal.model.PossibleAnswer; ...@@ -9,16 +9,17 @@ import fi.insomnia.bortal.model.PossibleAnswer;
@Stateless @Stateless
@LocalBean @LocalBean
public class PossibleAnswerFacade extends EventChildGenericFacade<PossibleAnswer> { public class PossibleAnswerFacade extends GenericFacade<Integer, PossibleAnswer> {
@PersistenceContext @PersistenceContext
private EntityManager em; private EntityManager em;
public PossibleAnswerFacade() { public PossibleAnswerFacade() {
super(PossibleAnswer.class); super(PossibleAnswer.class);
} }
protected EntityManager getEm() { @Override
return em; protected EntityManager getEm() {
} return em;
}
} }
package fi.insomnia.bortal.facade;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.ListJoin;
import javax.persistence.criteria.Path;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import fi.insomnia.bortal.beans.EventBeanLocal;
import fi.insomnia.bortal.model.Role;
import fi.insomnia.bortal.model.Role_;
import fi.insomnia.bortal.model.SitePage;
import fi.insomnia.bortal.model.SitePage_;
import fi.insomnia.bortal.model.User;
@Stateless
public class SitePageFacade extends GenericFacade<Integer, SitePage> {
@PersistenceContext
private EntityManager em;
@EJB
private EventBeanLocal eventbean;
public SitePageFacade() {
super(SitePage.class);
}
@Override
protected EntityManager getEm() {
return em;
}
public SitePage find(String siteName) {
CriteriaBuilder cb = em.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(em.createQuery(cq));
}
public List<SitePage> findForUser(User user, SitePage siteroot) {
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<SitePage> cq = cb.createQuery(SitePage.class);
Root<SitePage> root = cq.from(SitePage.class);
ListJoin<Role, User> usrpath = root.join(SitePage_.allowedRoles).join(Role_.users);
Path<SitePage> parentpath = root.get(SitePage_.parent);
Predicate rootpred = null;
if (parentpath == null)
{
rootpred = cb.isNull(parentpath);
}
else
{
rootpred = cb.equal(parentpath, parentpath);
}
cq.where(
cb.equal(usrpath, user),
rootpred,
cb.equal(root.get(SitePage_.event), eventbean.getCurrentEvent())
);
return em.createQuery(cq).getResultList();
}
@Override
public List<SitePage> findAll()
{
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<SitePage> cq = cb.createQuery(SitePage.class);
Root<SitePage> root = cq.from(SitePage.class);
cq.where(
cb.isNull(root.get(SitePage_.parent)),
cb.equal(root.get(SitePage_.event), eventbean.getCurrentEvent())
);
return em.createQuery(cq).getResultList();
}
}
...@@ -113,13 +113,18 @@ public class UserFacade extends GenericFacade<Integer, User> { ...@@ -113,13 +113,18 @@ public class UserFacade extends GenericFacade<Integer, User> {
public SearchResult<User> searchUser(int page, int pagesize, String sort, String search) { public SearchResult<User> searchUser(int page, int pagesize, String sort, String search) {
OrderCallback<User> orderCall = null;
if (sort == null || sort.isEmpty()) { if (sort == null || sort.isEmpty()) {
sort = "nick"; orderCall = new OrderCallback<User>(false, User_.id);
} }
else
{
orderCall = new OrderCallback<User>(false, sort);
}
return super.searcher(page, pagesize, return super.searcher(page, pagesize,
new StringSearchPredicateCreator<User>(search, SEARCHATTRS), new StringSearchPredicateCreator<User>(search, SEARCHATTRS),
new OrderCallback<User>(true, sort) orderCall
); );
// return this.search(page, pagesize, query, NAMEFIELDS, sort); // return this.search(page, pagesize, query, NAMEFIELDS, sort);
......
...@@ -4,7 +4,7 @@ import java.util.List; ...@@ -4,7 +4,7 @@ import java.util.List;
import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Expression; import javax.persistence.criteria.Path;
import javax.persistence.criteria.Predicate; import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root; import javax.persistence.criteria.Root;
import javax.persistence.metamodel.SingularAttribute; import javax.persistence.metamodel.SingularAttribute;
...@@ -32,7 +32,14 @@ public class OrderCallback<T extends ModelInterface<?>> implements FacadeCallbac ...@@ -32,7 +32,14 @@ public class OrderCallback<T extends ModelInterface<?>> implements FacadeCallbac
@Override @Override
public void exec(CriteriaBuilder cb, CriteriaQuery<?> cq, Root<T> root, List<Predicate> predicates) { public void exec(CriteriaBuilder cb, CriteriaQuery<?> cq, Root<T> root, List<Predicate> predicates) {
Expression<?> path = null; Class<?> rettype = cq.getResultType();
// Check if returntype is entity or are we for example counting results
if (!ModelInterface.class.isAssignableFrom(rettype))
{
return;
}
Path<?> path = null;
if (sort == null) { if (sort == null) {
if (sortstr == null) { if (sortstr == null) {
return; return;
...@@ -50,9 +57,9 @@ public class OrderCallback<T extends ModelInterface<?>> implements FacadeCallbac ...@@ -50,9 +57,9 @@ public class OrderCallback<T extends ModelInterface<?>> implements FacadeCallbac
} }
if (asc) { if (asc) {
cb.asc(path); cq.orderBy(cb.asc(path));
} else { } else {
cb.desc(path); cq.orderBy(cb.desc(path));
} }
} }
} }
...@@ -12,11 +12,9 @@ import fi.insomnia.bortal.model.PossibleAnswer; ...@@ -12,11 +12,9 @@ import fi.insomnia.bortal.model.PossibleAnswer;
@Local @Local
public interface PollBeanLocal { public interface PollBeanLocal {
List<Poll> findPolls();
boolean createAnswers(List<PollAnswer> answers); boolean createAnswers(List<PollAnswer> answers);
PossibleAnswer findPossibleAnwerById(int id); PossibleAnswer findPossibleAnwerById(Integer id);
void createPoll(Poll poll); void createPoll(Poll poll);
...@@ -24,4 +22,10 @@ public interface PollBeanLocal { ...@@ -24,4 +22,10 @@ public interface PollBeanLocal {
Poll find(Integer pollId); Poll find(Integer pollId);
Poll savePoll(Poll poll);
List<Poll> findAllPolls();
List<Poll> findUsablePolls();
} }
package fi.insomnia.bortal.beans;
import java.util.List;
import javax.ejb.Local;
import fi.insomnia.bortal.model.PageContent;
import fi.insomnia.bortal.model.SitePage;
@Local
public interface SitePageBeanLocal {
SitePage find(String siteName);
void create(SitePage sitepage);
SitePage save(SitePage sitepage);
PageContent createContent(SitePage sitepage);
List<SitePage> getPagerootsForUser();
List<SitePage> getPagesForUser(SitePage site);
List<SitePage> findAll();
}
...@@ -20,7 +20,7 @@ public abstract class EntityEquals { ...@@ -20,7 +20,7 @@ public abstract class EntityEquals {
protected abstract Object getId(); protected abstract Object getId();
@Override @Override
public final boolean equals(Object o) { public boolean equals(Object o) {
boolean ret = false; boolean ret = false;
if (o != null && o instanceof EntityEquals && this.getClass().getCanonicalName().equals(o.getClass().getCanonicalName())) { if (o != null && o instanceof EntityEquals && this.getClass().getCanonicalName().equals(o.getClass().getCanonicalName())) {
EntityEquals oobj = (EntityEquals) o; EntityEquals oobj = (EntityEquals) o;
......
...@@ -96,6 +96,9 @@ public class LanEvent extends GenericEntity { ...@@ -96,6 +96,9 @@ public class LanEvent extends GenericEntity {
@OneToMany(mappedBy = "event") @OneToMany(mappedBy = "event")
private List<Reader> readers; private List<Reader> readers;
@OneToMany(mappedBy = "event", cascade = CascadeType.ALL)
private List<Poll> polls;
public LanEvent() { public LanEvent() {
} }
...@@ -249,4 +252,12 @@ public class LanEvent extends GenericEntity { ...@@ -249,4 +252,12 @@ public class LanEvent extends GenericEntity {
this.eventEnabled = eventEnabled; this.eventEnabled = eventEnabled;
} }
public List<Poll> getPolls() {
return polls;
}
public void setPolls(List<Poll> polls) {
this.polls = polls;
}
} }
package fi.insomnia.bortal.model;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.Lob;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
@Entity
@Table(name = "site_page_content")
public class PageContent extends GenericEntity {
private static final long serialVersionUID = 8359021214886290522L;
@ManyToOne
@JoinColumn(nullable = false)
private SitePage sitepage;
@Column(nullable = false)
private Integer sort = 100;
@Lob
private String content;
@Temporal(TemporalType.TIMESTAMP)
private Date publish;
@Temporal(TemporalType.TIMESTAMP)
private Date expire;
public PageContent() {
super();
}
public PageContent(SitePage sitepage2) {
super();
this.sitepage = sitepage2;
}
public SitePage getSitepage() {
return sitepage;
}
public void setSitepage(SitePage sitepage) {
this.sitepage = sitepage;
}
public Integer getSort() {
return sort;
}
public void setSort(Integer sort) {
this.sort = sort;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public Date getPublish() {
return publish;
}
public void setPublish(Date publish) {
this.publish = publish;
}
public Date getExpire() {
return expire;
}
public void setExpire(Date expire) {
this.expire = expire;
}
}
...@@ -2,16 +2,17 @@ package fi.insomnia.bortal.model; ...@@ -2,16 +2,17 @@ package fi.insomnia.bortal.model;
import static javax.persistence.TemporalType.TIMESTAMP; import static javax.persistence.TemporalType.TIMESTAMP;
import java.io.Serializable;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Calendar; import java.util.Date;
import java.util.List; import java.util.List;
import javax.persistence.CascadeType; import javax.persistence.CascadeType;
import javax.persistence.Column; import javax.persistence.Column;
import javax.persistence.Entity; import javax.persistence.Entity;
import javax.persistence.FetchType; import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.Lob; import javax.persistence.Lob;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany; import javax.persistence.OneToMany;
import javax.persistence.OrderBy; import javax.persistence.OrderBy;
import javax.persistence.Table; import javax.persistence.Table;
...@@ -23,20 +24,25 @@ import javax.persistence.Temporal; ...@@ -23,20 +24,25 @@ import javax.persistence.Temporal;
*/ */
@Entity @Entity
@Table(name = "poll") @Table(name = "poll")
public class Poll extends GenericEventChild implements Serializable { public class Poll extends GenericEntity {
/** /**
* *
*/ */
private static final long serialVersionUID = -5655775315722028984L; private static final long serialVersionUID = -5655775315722028984L;
public static final String EVENT_ID_COLUMN = "event_id";
@ManyToOne()
@JoinColumn(name = EVENT_ID_COLUMN, nullable = false)
private LanEvent event;
@Temporal(TIMESTAMP) @Temporal(TIMESTAMP)
@Column(name = "opening_time", nullable = false) @Column(name = "opening_time", nullable = false)
private Calendar begin = Calendar.getInstance(); private Date begin = new Date();
@Temporal(TIMESTAMP) @Temporal(TIMESTAMP)
@Column(name = "closing_time", nullable = false) @Column(name = "closing_time", nullable = false)
private Calendar end = Calendar.getInstance(); private Date end = new Date();
@Column(name = "name", nullable = false) @Column(name = "name", nullable = false)
private String name; private String name;
...@@ -53,27 +59,6 @@ public class Poll extends GenericEventChild implements Serializable { ...@@ -53,27 +59,6 @@ public class Poll extends GenericEventChild implements Serializable {
super(); super();
} }
public Poll(LanEvent e, String name) {
super(e);
this.name = name;
}
public Calendar getBegin() {
return begin;
}
public void setBegin(Calendar begin) {
this.begin = begin;
}
public Calendar getEnd() {
return end;
}
public void setEnd(Calendar end) {
this.end = end;
}
public String getName() { public String getName() {
return name; return name;
} }
...@@ -98,4 +83,28 @@ public class Poll extends GenericEventChild implements Serializable { ...@@ -98,4 +83,28 @@ public class Poll extends GenericEventChild implements Serializable {
return questions; return questions;
} }
public Date getEnd() {
return end;
}
public void setEnd(Date end) {
this.end = end;
}
public Date getBegin() {
return begin;
}
public void setBegin(Date begin) {
this.begin = begin;
}
public LanEvent getEvent() {
return event;
}
public void setEvent(LanEvent event) {
this.event = event;
}
} }
...@@ -5,14 +5,13 @@ import java.io.Serializable; ...@@ -5,14 +5,13 @@ import java.io.Serializable;
import javax.persistence.Column; import javax.persistence.Column;
import javax.persistence.Entity; import javax.persistence.Entity;
import javax.persistence.JoinColumn; import javax.persistence.JoinColumn;
import javax.persistence.JoinColumns;
import javax.persistence.Lob; import javax.persistence.Lob;
import javax.persistence.ManyToOne; import javax.persistence.ManyToOne;
import javax.persistence.Table; import javax.persistence.Table;
@Entity @Entity
@Table(name = "poll_answer") @Table(name = "poll_answer")
public class PollAnswer extends GenericEventChild implements Serializable { public class PollAnswer extends GenericEntity implements Serializable {
/** /**
* *
...@@ -27,9 +26,7 @@ public class PollAnswer extends GenericEventChild implements Serializable { ...@@ -27,9 +26,7 @@ public class PollAnswer extends GenericEventChild implements Serializable {
private Boolean answerBoolean = false; private Boolean answerBoolean = false;
@ManyToOne @ManyToOne
@JoinColumns({ @JoinColumn(name = "possible_answer_id", referencedColumnName = "id", nullable = false)
@JoinColumn(name = "possible_answer_id", referencedColumnName = "id", nullable = false),
@JoinColumn(name = "event_id", referencedColumnName = "event_id", nullable = false, updatable = false, insertable = false) })
private PossibleAnswer choice; private PossibleAnswer choice;
@ManyToOne @ManyToOne
...@@ -40,9 +37,30 @@ public class PollAnswer extends GenericEventChild implements Serializable { ...@@ -40,9 +37,30 @@ public class PollAnswer extends GenericEventChild implements Serializable {
super(); super();
} }
public PollAnswer(PossibleAnswer a) { @Override
super(a.getId()); public boolean equals(Object o)
this.choice = a; {
boolean ret = false;
if (o instanceof PollAnswer)
{
PollAnswer objO = (PollAnswer) o;
if (super.getId() == null)
{
ret = choice.equals(objO.getChoice());
}
else
{
ret = super.equals(o);
}
}
return ret;
}
public PollAnswer(PossibleAnswer possible) {
super();
choice = possible;
} }
public void setAnswerText(String answerText) { public void setAnswerText(String answerText) {
......
...@@ -7,7 +7,6 @@ import javax.persistence.CascadeType; ...@@ -7,7 +7,6 @@ import javax.persistence.CascadeType;
import javax.persistence.Column; import javax.persistence.Column;
import javax.persistence.Entity; import javax.persistence.Entity;
import javax.persistence.JoinColumn; import javax.persistence.JoinColumn;
import javax.persistence.JoinColumns;
import javax.persistence.Lob; import javax.persistence.Lob;
import javax.persistence.ManyToOne; import javax.persistence.ManyToOne;
import javax.persistence.OneToMany; import javax.persistence.OneToMany;
...@@ -15,17 +14,14 @@ import javax.persistence.Table; ...@@ -15,17 +14,14 @@ import javax.persistence.Table;
@Entity @Entity
@Table(name = "poll_question") @Table(name = "poll_question")
public class PollQuestion extends GenericEventChild { public class PollQuestion extends GenericEntity {
public PollQuestion() { public PollQuestion() {
super(); super();
} }
public PollQuestion(Poll p, String name) { public PollQuestion(Poll p) {
super(p.getId());
this.poll = p; this.poll = p;
this.question = name;
} }
private static final long serialVersionUID = 821112669474215823L; private static final long serialVersionUID = 821112669474215823L;
...@@ -33,15 +29,16 @@ public class PollQuestion extends GenericEventChild { ...@@ -33,15 +29,16 @@ public class PollQuestion extends GenericEventChild {
private static final Integer COLS = 40; private static final Integer COLS = 40;
private Integer characters = 200; private Integer characters = 200;
@JoinColumns({
@JoinColumn(name = "poll_id", referencedColumnName = "id", nullable = false), @JoinColumn(name = "poll_id", referencedColumnName = "id", nullable = false)
@JoinColumn(name = "event_id", referencedColumnName = "event_id", nullable = false, updatable = false, insertable = false) })
@ManyToOne @ManyToOne
private Poll poll; private Poll poll;
@OneToMany(mappedBy = "question", cascade = CascadeType.ALL) @OneToMany(mappedBy = "question", cascade = CascadeType.ALL)
private List<PossibleAnswer> answers = new ArrayList<PossibleAnswer>(); private List<PossibleAnswer> answers = new ArrayList<PossibleAnswer>();
public static final String EVENT_ID_COLUMN = "event_id";
@Lob @Lob
private String question; private String question;
@Column(nullable = false) @Column(nullable = false)
...@@ -59,7 +56,6 @@ public class PollQuestion extends GenericEventChild { ...@@ -59,7 +56,6 @@ public class PollQuestion extends GenericEventChild {
return (answers.size() == 1 && answers.get(0).getTextanswer()); return (answers.size() == 1 && answers.get(0).getTextanswer());
} }
public void setQuestion(String question) { public void setQuestion(String question) {
this.question = question; this.question = question;
} }
......
...@@ -6,7 +6,6 @@ import javax.persistence.CascadeType; ...@@ -6,7 +6,6 @@ import javax.persistence.CascadeType;
import javax.persistence.Column; import javax.persistence.Column;
import javax.persistence.Entity; import javax.persistence.Entity;
import javax.persistence.JoinColumn; import javax.persistence.JoinColumn;
import javax.persistence.JoinColumns;
import javax.persistence.Lob; import javax.persistence.Lob;
import javax.persistence.ManyToOne; import javax.persistence.ManyToOne;
import javax.persistence.OneToMany; import javax.persistence.OneToMany;
...@@ -14,13 +13,7 @@ import javax.persistence.Table; ...@@ -14,13 +13,7 @@ import javax.persistence.Table;
@Entity @Entity
@Table(name = "possible_answer") @Table(name = "possible_answer")
public class PossibleAnswer extends GenericEventChild { public class PossibleAnswer extends GenericEntity {
public PossibleAnswer(PollQuestion pq, String answer) {
super(pq.getId());
this.answer = answer;
this.question = pq;
}
public PossibleAnswer() { public PossibleAnswer() {
super(); super();
...@@ -38,9 +31,7 @@ public class PossibleAnswer extends GenericEventChild { ...@@ -38,9 +31,7 @@ public class PossibleAnswer extends GenericEventChild {
@Lob @Lob
private String description; private String description;
@JoinColumns({ @JoinColumn(name = "question_id", referencedColumnName = "id", nullable = false)
@JoinColumn(name = "question_id", referencedColumnName = "id", nullable = false),
@JoinColumn(name = "event_id", referencedColumnName = "event_id", nullable = false, updatable = false, insertable = false) })
@ManyToOne @ManyToOne
private PollQuestion question; private PollQuestion question;
......
package fi.insomnia.bortal.model;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.UniqueConstraint;
import org.eclipse.persistence.annotations.PrivateOwned;
@Entity
@Table(name = "site_pages", uniqueConstraints = @UniqueConstraint(columnNames = { "event_id", "name" }))
public class SitePage extends GenericEntity {
private static final long serialVersionUID = -4333555423866132524L;
public static final String EVENT_ID_COLUMN = "event_id";
@ManyToOne()
@JoinColumn(name = EVENT_ID_COLUMN, nullable = false)
private LanEvent event;
@Column(nullable = false)
private String name;
@ManyToOne()
private SitePage parent;
@ManyToMany()
@PrivateOwned
private List<Role> allowedRoles;
@OneToMany(mappedBy = "parent", cascade = CascadeType.ALL)
private List<SitePage> children;
@PrivateOwned
@OneToMany(mappedBy = "sitepage", cascade = CascadeType.ALL)
private List<PageContent> contents;
public LanEvent getEvent() {
return event;
}
public void setEvent(LanEvent event) {
this.event = event;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public SitePage getParent() {
return parent;
}
public void setParent(SitePage parent) {
this.parent = parent;
}
public List<SitePage> getChildren() {
return children;
}
public void setChildren(List<SitePage> children) {
this.children = children;
}
public List<PageContent> getContents() {
return contents;
}
public void setContents(List<PageContent> contents) {
this.contents = contents;
}
public List<Role> getAllowedRoles() {
return allowedRoles;
}
public void setAllowedRoles(List<Role> allowedRoles) {
this.allowedRoles = allowedRoles;
}
}
package fi.insomnia.bortal.enums; package fi.insomnia.bortal.enums;
import fi.insomnia.bortal.enums.apps.BillPermission; 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.IAppPermission;
import fi.insomnia.bortal.enums.apps.MapPermission; import fi.insomnia.bortal.enums.apps.MapPermission;
import fi.insomnia.bortal.enums.apps.NewsPermission;
import fi.insomnia.bortal.enums.apps.PollPermission; import fi.insomnia.bortal.enums.apps.PollPermission;
import fi.insomnia.bortal.enums.apps.ShopPermission; import fi.insomnia.bortal.enums.apps.ShopPermission;
import fi.insomnia.bortal.enums.apps.UserPermission; import fi.insomnia.bortal.enums.apps.UserPermission;
...@@ -18,7 +18,7 @@ public enum BortalApplication { ...@@ -18,7 +18,7 @@ public enum BortalApplication {
POLL("Poll stuff", PollPermission.class), POLL("Poll stuff", PollPermission.class),
MAP("Map management ", MapPermission.class), MAP("Map management ", MapPermission.class),
SHOP("Product & shop management", ShopPermission.class), SHOP("Product & shop management", ShopPermission.class),
NEWS("News and other dynamic data", NewsPermission.class); CONTENT("News, pages and other dynamic content", ContentPermission.class), ;
// BILL("View all bills(r), Mark paid & modify(w), and create own bills (x)", // BILL("View all bills(r), Mark paid & modify(w), and create own bills (x)",
// BillPermission.class) // BillPermission.class)
// USER_MANAGEMENT("View all users(r), modify users(w), execute actions for user(x) "), // USER_MANAGEMENT("View all users(r), modify users(w), execute actions for user(x) "),
......
...@@ -2,22 +2,26 @@ package fi.insomnia.bortal.enums.apps; ...@@ -2,22 +2,26 @@ package fi.insomnia.bortal.enums.apps;
import fi.insomnia.bortal.enums.BortalApplication; import fi.insomnia.bortal.enums.BortalApplication;
public enum NewsPermission implements IAppPermission { public enum ContentPermission implements IAppPermission {
MANAGE("Manage newsgroups"); MANAGE_NEWS("Manage newsgroups"),
MANAGE_PAGES("Manage pages"),
public static final String S_MANAGE = "NEWS/MANAGE"; ;
public static final String S_MANAGE_NEWS = "CONTENT/MANAGE_NEWS";
public static final String S_MANAGE_PAGES = "CONTENT/MANAGE_PAGES";
private String description; private String description;
private String fullName; private String fullName;
private NewsPermission(String desc) { private ContentPermission(String desc) {
this.description = desc; this.description = desc;
fullName = new StringBuilder().append(getParent().toString()).append(DELIMITER).append(toString()).toString(); fullName = new StringBuilder().append(getParent().toString()).append(DELIMITER).append(toString()).toString();
} }
@Override @Override
public BortalApplication getParent() { public BortalApplication getParent() {
return BortalApplication.NEWS; return BortalApplication.CONTENT;
} }
@Override @Override
......
...@@ -8,6 +8,11 @@ public enum PollPermission implements IAppPermission { ...@@ -8,6 +8,11 @@ public enum PollPermission implements IAppPermission {
CREATE("Create and manage polls") CREATE("Create and manage polls")
; ;
public static final String S_ANSWER = "POLL/ANSWER";
public static final String S_VIEW_RESULTS = "POLL/VIEW_RESULTS";
public static final String S_CREATE = "POLL/CREATE";
private String description; private String description;
private String fullName; private String fullName;
......
...@@ -17,8 +17,6 @@ public enum UserPermission implements IAppPermission { ...@@ -17,8 +17,6 @@ public enum UserPermission implements IAppPermission {
; ;
;
public static final String S_VIEW_ALL = "USER/VIEW_ALL"; public static final String S_VIEW_ALL = "USER/VIEW_ALL";
public static final String S_MODIFY = "USER/MODIFY"; public static final String S_MODIFY = "USER/MODIFY";
public static final String S_CREATE_NEW = "USER/CREATE_NEW"; public static final String S_CREATE_NEW = "USER/CREATE_NEW";
......
...@@ -31,7 +31,7 @@ ...@@ -31,7 +31,7 @@
<br /> <br />
<h:commandButton value="Resize all images" action="#{TestDataView.convertImages()}" /> <h:commandButton value="Resize all images" action="#{TestDataView.convertImages()}" />
<br /> <br />
<h:commandButton value="Generate test poll data" action="#{TestDataView.generatePollData()}" /> <h:commandButton value="Generate test poll data" action="#{testView.generatePollData()}" />
<br /> <br />
<h:commandButton value="convert usernames" action="#{TestDataView.convertUsernames()}" /> <h:commandButton value="convert usernames" action="#{TestDataView.convertUsernames()}" />
<br /> <br />
......
<!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:pages="http://java.sun.com/jsf/composite/cditools/pages" 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="#{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']}" />
</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:f="http://java.sun.com/jsf/core"
xmlns:pages="http://java.sun.com/jsf/composite/cditools/pages" xmlns:c="http://java.sun.com/jsp/jstl/core"
>
<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:metadata>
<ui:param name="thispage" value="page.user.edit" />
<ui:define name="content">
<pages:edit commitaction="#{newsgroupView.saveNewsgroup()}" commitvalue="#{i18n['newsgroup.save']}" />
<h2>#{i18n['newsgroup.contents']}</h2>
<h:form>
<h:commandButton action="#{newsgroupView.createNews}" value="#{i18n['newsgroup.createNewNews']}" />
</h:form>
<h:dataTable var="news" value="#{newsgroupView.newsgroup.news}">
<h:column>
<f:facet name="header">
<h:outputText value="#{i18n['news.title']}" />
</f:facet>
<h:outputText value="#{news.title}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{i18n['news.publish']}" />
</f:facet>
<h:outputText value="#{news.publish.time}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{i18n['news.expire']}" />
</f:facet>
<h:outputText value="#{news.expire.time}" />
</h:column>
<h:column>
<h:link outcome="/news/editNews" value="#{i18n['news.edit']}">
<f:param name="newsid" value="#{news.id}" />
</h:link>
<h:outputText value="#{news.publish.time}" />
</h:column>
</h:dataTable>
</ui:define>
</ui:composition>
</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:f="http://java.sun.com/jsf/core"
xmlns:news="http://java.sun.com/jsf/composite/cditools/news" xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:p="http://primefaces.prime.com.tr/ui"
>
<h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<f:metadata>
<f:viewParam name="newsid" value="#{newsgroupView.newsid}" />
<f:event type="preRenderView" listener="#{newsgroupView.initNews}" />
</f:metadata>
<ui:param name="thispage" value="page.user.edit" />
<ui:define name="content">
<h:outputScript target="head" library="script" name="jquery.min.js" />
<h:outputScript target="head" library="script" name="textinputs_jquery.js" />
<h:button onclick="var sel = $('#newsform:editor').getSelection(); alert(sel.start +', ' + sel.end);" value="Click me"/>
<h:form id="newsform">
<h:panelGrid columns="3">
<h:outputLabel for="name" value="#{i18n['news.title']}:" />
<h:inputText id="name" value="#{newsgroupView.news.title}">
<f:validateRequired />
</h:inputText>
<h:message for="name" />
<h:outputLabel for="abstract" value="#{i18n['news.abstract']}:" />
<h:inputTextarea id="abstract" value="#{newsgroupView.news.bodyAbstract}" />
<h:message for="abstract" />
<h:outputLabel for="publish" value="#{i18n['news.publish']}:" />
<h:inputText id="publish" value="#{newsgroupView.news.publish}">
<f:convertDateTime pattern="#{sessionHandler.datetimeFormat}" timeZone="#{sessionHandler.timezone}" />
</h:inputText>
<h:message for="publish" />
<h:outputLabel for="expire" value="#{i18n['news.expire']}:" />
<h:inputText id="expire" value="#{newsgroupView.news.expire}">
<f:convertDateTime pattern="#{sessionHandler.datetimeFormat}" timeZone="#{sessionHandler.timezone}" />
</h:inputText>
<h:message for="expire" />
</h:panelGrid>
<p:editor id="editor" value="#{newsgroupView.news.body}" />
<h:commandButton id="commit" action="#{newsgroupView.saveNews()}" value="#{i18n['news.save']}" />
</h:form>
</ui:define>
</ui:composition>
</h:body>
</html>
\ No newline at end of file
<!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="#{siteListView.initView}" />
</f:metadata>
<ui:param name="thispage" value="page.user.create" />
<ui:define name="content">
<h1>#{i18n['newslist.header']}</h1>
<h:dataTable styleClass="bordertable" id="user" value="#{newsListView.newsgroups}" var="newsgroup">
<h:column>
<f:facet name="header">
ID
</f:facet>
<h:outputText value="#{newsgroup.id}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{i18n['newsgroup.name']}" />
</f:facet>
<h:outputText value="#{newsgroup.name}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{i18n['newsgroup.priority']}" />
</f:facet>
<h:outputText value="#{newsgroup.priority}" />
</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>
</h:column>
</h:dataTable>
</ui:define>
</ui:composition>
</h:body>
</html>
\ No newline at end of file
...@@ -3,28 +3,35 @@ ...@@ -3,28 +3,35 @@
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" <html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core"
xmlns:users="http://java.sun.com/jsf/composite/tools/user" xmlns:c="http://java.sun.com/jsp/jstl/core"> xmlns:users="http://java.sun.com/jsf/composite/tools/user" xmlns:c="http://java.sun.com/jsp/jstl/core"
>
<h:body> <h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml"> <ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<ui:param name="thispage" value="page.poll.answer" /> <f:metadata>
<ui:define name="content"> <f:viewParam name="pollid" value="#{pollView.pollId}" />
<f:event type="preRenderView" listener="#{pollView.initPoll}" />
</f:metadata>
<ui:define name="content">
<h:messages />
<h1>#{pollView.poll.name}</h1> <h1>#{pollView.poll.name}</h1>
<p>#{pollView.poll.description}</p> <p>#{pollView.poll.description}</p>
<h:form id="answerForm"> <h:form id="answerForm">
<h:dataTable border="0" id="questions" value="#{pollView.currentPage}" var="question"> <h:dataTable border="0" id="questions" value="#{pollView.currentPage}" var="question">
<h:column> <h:column>
<h:outputText escape="false" value="#{question.question.question}" />
<h:outputText value="#{question.question.question}" />
</h:column> </h:column>
<h:column> <h:column>
<h:inputText id="freecell" size="#{question.question.characters}" value="#{question.textAnswer.answerText }" <h:inputText id="freecell" size="#{question.question.characters}" value="#{question.textAnswer.answerText }"
rendered="#{question.freeText and !question.question.textfield}" /> rendered="#{question.freeText and !question.question.textfield}"
/>
<h:inputTextarea id="freecellarea" cols="#{question.question.cols}" rows="#{question.question.rows}" <h:inputTextarea id="freecellarea" cols="#{question.question.cols}" rows="#{question.question.rows}"
value="#{question.textAnswer.answerText}" rendered="#{question.freeText and question.question.textfield}" /> value="#{question.textAnswer.answerText}" rendered="#{question.freeText and question.question.textfield}"
/>
<h:selectOneRadio id="selectone" layout="pageDirection" converter="#{pollAnswerConverter}" <h:selectOneRadio id="selectone" layout="pageDirection" converter="#{pollAnswerConverter}"
rendered="#{!question.freeText and question.question.choices eq 1}" value="#{question.oneSelected}"> rendered="#{!question.freeText and question.question.choices eq 1}" value="#{question.oneSelected}"
>
<f:selectItems var="ans" itemLabel="#{ans.choice.answer}" value="#{question.answers}" /> <f:selectItems var="ans" itemLabel="#{ans.choice.answer}" value="#{question.answers}" />
</h:selectOneRadio> </h:selectOneRadio>
</h:column> </h:column>
......
<!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:poll="http://java.sun.com/jsf/composite/cditools/poll" xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:p="http://primefaces.prime.com.tr/ui"
>
<h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<f:metadata>
<f:event type="preRenderView" listener="#{pollView.initCreate}" />
</f:metadata>
<ui:param name="thispage" value="page.user.edit" />
<ui:define name="content">
<poll:edit commitaction="#{pollView.createPoll()}" commitvalue="#{i18n['poll.create']}" />
</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:f="http://java.sun.com/jsf/core"
xmlns:poll="http://java.sun.com/jsf/composite/cditools/poll" xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:p="http://primefaces.prime.com.tr/ui"
>
<h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<f:metadata>
<f:event type="preRenderView" listener="#{pollView.initCreate}" />
</f:metadata>
<ui:param name="thispage" value="page.user.edit" />
<ui:define name="content">
<poll:edit commitaction="#{pollView.savePollEntity()}" commitvalue="#{i18n['poll.save']}" />
</ui:define>
</ui:composition>
</h:body>
</html>
\ No newline at end of file
...@@ -3,26 +3,34 @@ ...@@ -3,26 +3,34 @@
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" <html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core"
xmlns:users="http://java.sun.com/jsf/composite/tools/user" xmlns:c="http://java.sun.com/jsp/jstl/core"> xmlns:users="http://java.sun.com/jsf/composite/tools/user" xmlns:c="http://java.sun.com/jsp/jstl/core"
>
<h:body> <h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml"> <ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<ui:param name="thispage" value="page.poll.start" />
<f:metadata>
<f:event type="preRenderView" listener="#{pollView.initPollList()}" />
</f:metadata>
<ui:define name="content"> <ui:define name="content">
<h1>Kyselyt</h1> <h1>Kyselyt</h1>
#{pollView.initPollList()} <h:form>
<h:form> <h:dataTable border="0" id="poll" value="#{pollView.polls}" var="poll">
<h:dataTable border="0" id="maps" value="#{pollView.polls}" var="poll">
<h:column> <h:column>
<h:outputText value="#{poll.name}" /> <h:outputText value="#{poll.name}" />
</h:column> </h:column>
<h:column> <h:column>
<h:commandButton action="#{pollView.beginPoll()}" value="#{i18n['poll.answer']}" /> <h:link outcome="/poll/answerToPoll" value="#{i18n['poll.answer']}">
<f:param name="pollid" value="#{poll.id}" />
</h:link>
</h:column> </h:column>
<h:column rendered="#{sessionHandler.hasPermission('POLL','READ')}"> <h:column rendered="#{pollView.canManage}">
<h:commandButton action="#{pollView.showPoll()}" value="#{i18n['poll.show']}" /> <h:link outcome="/poll/edit" value="#{i18n['poll.edit']}">
<f:param name="pollid" value="#{poll.id}" />
</h:link>
</h:column> </h:column>
</h:dataTable> </h:dataTable>
......
...@@ -6,7 +6,10 @@ ...@@ -6,7 +6,10 @@
xmlns:users="http://java.sun.com/jsf/composite/tools/user" xmlns:c="http://java.sun.com/jsp/jstl/core"> xmlns:users="http://java.sun.com/jsf/composite/tools/user" xmlns:c="http://java.sun.com/jsp/jstl/core">
<h:body> <h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml"> <ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<ui:param name="thispage" value="page.poll.answer" /> <f:metadata>
<f:viewParam name="pollid" value="#{pollView.pollId}" />
<f:event type="preRenderView" listener="#{pollView.initPoll}" />
</f:metadata>
<ui:define name="content"> <ui:define name="content">
<table id="pollresultstable" border="1"> <table id="pollresultstable" border="1">
......
<?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"
xmlns:p="http://primefaces.prime.com.tr/ui"
>
<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>
<h:panelGrid columns="3">
<h:outputLabel for="name" value="#{i18n['poll.name']}" />
<h:inputText id="name" value="#{pollView.poll.name}" />
<h:message for="name" />
<h:outputLabel for="begin" value="#{i18n['poll.begin']}" />
<p:calendar id="begin" value="#{pollView.poll.begin}" style="simple" pattern="#{sessionHandler.datetimeFormat}" />
<h:message for="begin" />
<h:outputLabel for="end" value="#{i18n['poll.end']}" />
<p:calendar id="end" value="#{pollView.poll.end}" style="simple" pattern="#{sessionHandler.datetimeFormat}" />
<h:message for="end" />
<h:outputLabel for="description" value="#{i18n['poll.name']}" />
<h:inputTextarea id="description" name="#{pollView.poll.name}" />
<h:message for="description" />
</h:panelGrid>
<h:commandButton id="commitbtn" action="#{cc.attrs.commitaction}" value="#{cc.attrs.commitvalue}" />
</h:form>
</composite:implementation>
</html>
...@@ -40,6 +40,11 @@ ...@@ -40,6 +40,11 @@
<h:outputLabel value="#{i18n['product.prepaidInstant']}" /> <h:outputLabel value="#{i18n['product.prepaidInstant']}" />
<h:selectBooleanCheckbox value="#{productView.product.prepaidInstant}" /> <h:selectBooleanCheckbox value="#{productView.product.prepaidInstant}" />
<h:outputLabel value="#{i18n['product.providedRole']}" />
<h:selectOneMenu layout="pageDirection" value="#{productView.product.role}" converter="#{roleConverter}" id="roles">
<f:selectItems var="role" itemLabel="#{role.name}" value="#{roleDataView.roles}" />
</h:selectOneMenu>
<h:commandButton id="commitbtn" action="#{cc.attrs.commitaction}" value="#{cc.attrs.commitvalue}" /> <h:commandButton id="commitbtn" action="#{cc.attrs.commitaction}" value="#{cc.attrs.commitvalue}" />
</h:panelGrid> </h:panelGrid>
......
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
<composite:implementation> <composite:implementation>
<h:form id="rolelist"> <h:form id="rolelist" >
<h:dataTable border="1" id="user" value="#{roleDataView.roles}" var="role"> <h:dataTable border="1" id="user" value="#{roleDataView.roles}" var="role">
<h:column> <h:column>
<f:facet name="header"> <f:facet name="header">
......
...@@ -11,7 +11,10 @@ ...@@ -11,7 +11,10 @@
</composite:interface> </composite:interface>
<composite:implementation> <composite:implementation>
<h:dataTable border="1" id="reader" value="#{rfidContainer.readers}" var="rr"> <h:dataTable border="1" id="reader" value="#{rfidContainer.readers}" var="rr">
<h:column> <h:column>
<f:facet name="header"> <f:facet name="header">
<h:outputText value="${i18n['reader.name']}" /> <h:outputText value="${i18n['reader.name']}" />
......
...@@ -38,6 +38,7 @@ ...@@ -38,6 +38,7 @@
<li class="picture"><h:link outcome="/user/sendPicture" value="#{i18n['submenu.user.sendPicture']}"> <li class="picture"><h:link outcome="/user/sendPicture" value="#{i18n['submenu.user.sendPicture']}">
<f:param name="userid" value="#{userView.user.id}" /> <f:param name="userid" value="#{userView.user.id}" />
</h:link></li> </h:link></li>
</ul> </ul>
</div> </div>
......
<?xml version='1.0' encoding='UTF-8' ?> <?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" <html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:composite="http://java.sun.com/jsf/composite" xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:composite="http://java.sun.com/jsf/composite" xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:tools="http://java.sun.com/jsf/composite/tools"
xmlns:ui="http://java.sun.com/jsf/facelets" >
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:tools="http://java.sun.com/jsf/composite/tools">
<composite:interface> <composite:interface>
<composite:attribute name="commitvalue" required="true" /> <composite:attribute name="commitvalue" required="true" />
<composite:attribute name="commitaction" required="true" <composite:attribute name="commitaction" required="true" method-signature="java.lang.String action()" />
method-signature="java.lang.String action()" />
</composite:interface> </composite:interface>
<composite:implementation> <composite:implementation>
...@@ -40,16 +37,23 @@ ...@@ -40,16 +37,23 @@
<h:outputLabel value="#{i18n['product.prepaid']}" /> <h:outputLabel value="#{i18n['product.prepaid']}" />
<h:selectBooleanCheckbox value="#{productView.product.prepaid}" /> <h:selectBooleanCheckbox value="#{productView.product.prepaid}" />
<h:outputLabel value="#{i18n['product.prepaidInstant']}" />
<h:selectBooleanCheckbox value="#{productView.product.prepaidInstant}" />
<h:outputLabel value="#{i18n['product.prepaidInstant']}" /> <h:outputLabel value="#{i18n['product.prepaidInstant']}" />
<h:selectBooleanCheckbox value="#{productView.product.prepaidInstant}" /> <h:selectBooleanCheckbox value="#{productView.product.prepaidInstant}" />
<h:commandButton id="commitbtn" action="#{cc.attrs.commitaction}" <h:outputLabel value="#{i18n['product.providedRole']}" />
value="#{cc.attrs.commitvalue}" /> <h:selectOneMenu layout="pageDirection" value="#{productView.product.role}" converter="#{roleConverter}" id="roles">
<f:selectItems var="role" itemLabel="#{role.name}" value="#{roleDataView.roles}" />
</h:selectOneMenu>
<h:commandButton id="commitbtn" action="#{cc.attrs.commitaction}" value="#{cc.attrs.commitvalue}" />
</h:panelGrid> </h:panelGrid>
</h:form> </h:form>
<tools:canWrite target="PRODUCT"> <tools:canWrite target="PRODUCT">
<h2>#{productview.discounts}</h2> <h2>#{productview.discounts}</h2>
<h:form id="creatediscount"> <h:form id="creatediscount">
...@@ -61,8 +65,7 @@ ...@@ -61,8 +65,7 @@
</h:form> </h:form>
<h:form id="discounts"> <h:form id="discounts">
<h:dataTable border="1" id="discount" value="#{productView.productDiscounts}" <h:dataTable border="1" id="discount" value="#{productView.productDiscounts}" var="discount">
var="discount">
<h:column> <h:column>
<f:facet name="header"> <f:facet name="header">
<h:outputText value="${i18n['discount.percentage']}" /> <h:outputText value="${i18n['discount.percentage']}" />
...@@ -112,8 +115,7 @@ ...@@ -112,8 +115,7 @@
<h:outputText value="#{discount.perUser}" /> <h:outputText value="#{discount.perUser}" />
</h:column> </h:column>
<h:column> <h:column>
<h:commandButton action="#{productView.editDiscount()}" <h:commandButton action="#{productView.editDiscount()}" value="#{i18n['discount.edit']}" />
value="#{i18n['discount.edit']}" />
</h:column> </h:column>
</h:dataTable> </h:dataTable>
......
...@@ -9,6 +9,8 @@ ...@@ -9,6 +9,8 @@
</composite:interface> </composite:interface>
<composite:implementation> <composite:implementation>
<h:dataTable border="1" id="user" value="#{userSearchView.users}" var="user"> <h:dataTable border="1" id="user" value="#{userSearchView.users}" var="user">
<h:column> <h:column>
<f:facet name="header"> <f:facet name="header">
......
<!DOCTYPE html <!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" <html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets"
......
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core"
xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:p="http://primefaces.prime.com.tr/ui" xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:p="http://primefaces.prime.com.tr/ui"
xmlns:users="http://java.sun.com/jsf/composite/cditools/user" xmlns:users="http://java.sun.com/jsf/composite/cditools/user"
xmlns:shop="http://java.sun.com/jsf/composite/cditools/shop"
> >
<h:body> <h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml"> <ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
...@@ -62,10 +63,7 @@ ...@@ -62,10 +63,7 @@
<h:outputText rendered="#{empty userView.user.currentImage}" value="#{i18n['user.noCurrentImage']}" /> <h:outputText rendered="#{empty userView.user.currentImage}" value="#{i18n['user.noCurrentImage']}" />
<ui:fragment rendered="#{!empty userView.user.currentImage}"> <ui:fragment rendered="#{!empty userView.user.currentImage}">
<h:panelGrid columns="2"> <h:panelGrid columns="2">
<img width="300" <img width="300" src="#{request.contextPath}/Userimage?imageid=#{userView.user.currentImage.id}" alt="image" />
src="#{request.contextPath}/Userimage?imageid=#{userView.user.currentImage.id}"
alt="image"
/>
<ui:fragment rendered="#{userView.canManage()}"> <ui:fragment rendered="#{userView.canManage()}">
<h:form> <h:form>
<p:imageCropper value="#{userView.croppedImage}" aspectRatio="0.8" <p:imageCropper value="#{userView.croppedImage}" aspectRatio="0.8"
...@@ -96,10 +94,30 @@ ...@@ -96,10 +94,30 @@
</h:dataTable> </h:dataTable>
</h:form> </h:form>
<h3>RFID</h3>
<h:form rendered="#{empty readerView.readername}">
<h:dataTable border="1" id="reader" value="#{readerListDataView.readers}" var="rr">
<h:column>
<f:facet name="header">
<h:outputText value="${i18n['reader.name']}" />
</f:facet>
<h:outputText value="#{rr}" />
</h:column>
<h:column>
<h:commandButton action="#{readerListDataView.selectReader}" />
</h:column>
</h:dataTable>
</h:form>
<shop:readerevents rendered="#{!empty readerView.readername}" />
</ui:fragment> </ui:fragment>
<!-- <h:dataTable var="image" value="#{userView.user.userImageList}"> --> <!-- <h:dataTable var="image" value="#{userView.user.userImageList}"> -->
<!-- <h:column> --> <!-- <h:column> -->
<!-- <h:outputText value="#{image.id}" /> --> <!-- <h:outputText value="#{image.id}" /> -->
......
...@@ -72,6 +72,7 @@ public class HostnameFilter implements Filter { ...@@ -72,6 +72,7 @@ public class HostnameFilter implements Filter {
if (httpRequest.getUserPrincipal() == null) { if (httpRequest.getUserPrincipal() == null) {
try { try {
httpRequest.login(User.ANONYMOUS_LOGINNAME, null); httpRequest.login(User.ANONYMOUS_LOGINNAME, null);
} catch (Throwable t) { } catch (Throwable t) {
logger.warn("Error logging in as anonymous... ignoring.. ", t); logger.warn("Error logging in as anonymous... ignoring.. ", t);
......
...@@ -144,7 +144,7 @@ public class SessionHandler { ...@@ -144,7 +144,7 @@ public class SessionHandler {
{ {
StringBuffer url = ((HttpServletRequest) ext).getRequestURL(); StringBuffer url = ((HttpServletRequest) ext).getRequestURL();
preurlString = url.substring(0, url.indexOf("/", 7)); preurlString = url.substring(0, url.indexOf("/", 8));
} else { } else {
preurlString = ""; preurlString = "";
......
...@@ -19,7 +19,7 @@ public abstract class PaginationView<T extends ModelInterface<?>> extends Generi ...@@ -19,7 +19,7 @@ public abstract class PaginationView<T extends ModelInterface<?>> extends Generi
public abstract void initView(); public abstract void initView();
public void setResult(SearchResult<T> products) { public void setResult(SearchResult<T> products) {
resultcount = products.getResultcount(); setResultcount(products.getResultcount());
results = products.getResults(); results = products.getResults();
} }
......
package fi.insomnia.bortal.web.cdiview.news; package fi.insomnia.bortal.web.cdiview.content;
import java.util.List; import java.util.List;
...@@ -7,7 +7,7 @@ import javax.enterprise.context.RequestScoped; ...@@ -7,7 +7,7 @@ import javax.enterprise.context.RequestScoped;
import javax.inject.Named; import javax.inject.Named;
import fi.insomnia.bortal.beans.NewsBeanLocal; import fi.insomnia.bortal.beans.NewsBeanLocal;
import fi.insomnia.bortal.enums.apps.NewsPermission; import fi.insomnia.bortal.enums.apps.ContentPermission;
import fi.insomnia.bortal.model.NewsGroup; import fi.insomnia.bortal.model.NewsGroup;
import fi.insomnia.bortal.web.cdiview.GenericCDIView; import fi.insomnia.bortal.web.cdiview.GenericCDIView;
...@@ -26,7 +26,7 @@ public class NewsListView extends GenericCDIView { ...@@ -26,7 +26,7 @@ public class NewsListView extends GenericCDIView {
private List<NewsGroup> newsgroups; private List<NewsGroup> newsgroups;
public void initView() { public void initView() {
if (super.requirePermissions(permbean.hasPermission(NewsPermission.MANAGE))) { if (super.requirePermissions(permbean.hasPermission(ContentPermission.MANAGE_NEWS))) {
setNewsgroups(newsbean.findAll()); setNewsgroups(newsbean.findAll());
} }
} }
......
package fi.insomnia.bortal.web.cdiview.news; package fi.insomnia.bortal.web.cdiview.content;
import javax.ejb.EJB; import javax.ejb.EJB;
import javax.inject.Named; import javax.inject.Named;
......
package fi.insomnia.bortal.web.cdiview.news; package fi.insomnia.bortal.web.cdiview.content;
import javax.ejb.EJB; import javax.ejb.EJB;
import javax.enterprise.context.ConversationScoped; import javax.enterprise.context.ConversationScoped;
import javax.inject.Named; import javax.inject.Named;
import fi.insomnia.bortal.beans.NewsBeanLocal; import fi.insomnia.bortal.beans.NewsBeanLocal;
import fi.insomnia.bortal.enums.apps.NewsPermission; import fi.insomnia.bortal.enums.apps.ContentPermission;
import fi.insomnia.bortal.model.News; import fi.insomnia.bortal.model.News;
import fi.insomnia.bortal.model.NewsGroup; import fi.insomnia.bortal.model.NewsGroup;
import fi.insomnia.bortal.web.cdiview.GenericCDIView; import fi.insomnia.bortal.web.cdiview.GenericCDIView;
...@@ -28,7 +28,7 @@ public class NewsgroupView extends GenericCDIView { ...@@ -28,7 +28,7 @@ public class NewsgroupView extends GenericCDIView {
private transient NewsBeanLocal newsbean; private transient NewsBeanLocal newsbean;
public void initView() { public void initView() {
if (super.requirePermissions(permbean.hasPermission(NewsPermission.MANAGE)) && newsgroup == null) { if (super.requirePermissions(permbean.hasPermission(ContentPermission.MANAGE_NEWS)) && newsgroup == null) {
super.beginConversation(); super.beginConversation();
newsgroup = newsbean.findById(newsgroupid); newsgroup = newsbean.findById(newsgroupid);
...@@ -36,14 +36,14 @@ public class NewsgroupView extends GenericCDIView { ...@@ -36,14 +36,14 @@ public class NewsgroupView extends GenericCDIView {
} }
public void initNews() { public void initNews() {
if (super.requirePermissions(permbean.hasPermission(NewsPermission.MANAGE)) && getNews() == null) { if (super.requirePermissions(permbean.hasPermission(ContentPermission.MANAGE_NEWS)) && getNews() == null) {
super.beginConversation(); super.beginConversation();
news = newsbean.findNews(newsid); news = newsbean.findNews(newsid);
} }
} }
public void initCreate() { public void initCreate() {
if (super.requirePermissions(permbean.hasPermission(NewsPermission.MANAGE))) { if (super.requirePermissions(permbean.hasPermission(ContentPermission.MANAGE_NEWS))) {
super.beginConversation(); super.beginConversation();
newsgroup = new NewsGroup(); newsgroup = new NewsGroup();
newsgroup.setPriority(10); newsgroup.setPriority(10);
......
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.enums.apps.ContentPermission;
import fi.insomnia.bortal.model.SitePage;
import fi.insomnia.bortal.web.cdiview.GenericCDIView;
@Named
@RequestScoped
public class SiteNewsListView extends GenericCDIView {
/**
*
*/
private static final long serialVersionUID = 1720809638296537794L;
@EJB
private transient SitePageBeanLocal sitepagebean;
private List<SitePage> pages;
public void initView() {
if (super.requirePermissions(permbean.hasPermission(ContentPermission.MANAGE_NEWS))) {
pages = sitepagebean.findAll();
}
}
public List<SitePage> getPages() {
return pages;
}
public void setPages(List<SitePage> pages) {
this.pages = pages;
}
}
package fi.insomnia.bortal.web.cdiview.content;
import javax.ejb.EJB;
import javax.enterprise.context.ConversationScoped;
import javax.inject.Named;
import fi.insomnia.bortal.beans.SitePageBeanLocal;
import fi.insomnia.bortal.enums.apps.ContentPermission;
import fi.insomnia.bortal.model.SitePage;
import fi.insomnia.bortal.web.cdiview.GenericCDIView;
@Named
@ConversationScoped
public class SitePageView extends GenericCDIView {
private static final long serialVersionUID = -513285802858190970L;
@EJB
private SitePageBeanLocal sitepagebean;
private String siteName;
private SitePage sitepage;
public void initEdit()
{
if (super.requirePermissions(ContentPermission.MANAGE_PAGES) && sitepage == null)
{
sitepage = sitepagebean.find(siteName);
super.beginConversation();
}
}
public void initCreate()
{
if (super.requirePermissions(ContentPermission.MANAGE_PAGES))
{
sitepage = new SitePage();
super.beginConversation();
}
}
public String addPageContent()
{
sitepage = sitepagebean.createContent(sitepage).getSitepage();
return null;
}
public String createSite()
{
sitepagebean.create(sitepage);
return "/pages/edit";
}
public String saveSite()
{
sitepage = sitepagebean.save(sitepage);
return null;
}
public SitePage getSitepage() {
return sitepage;
}
public void setSitepage(SitePage sitepage) {
this.sitepage = sitepage;
}
public String getSiteName() {
return siteName;
}
public void setSiteName(String siteName) {
this.siteName = siteName;
}
}
...@@ -2,10 +2,12 @@ package fi.insomnia.bortal.web.cdiview.game; ...@@ -2,10 +2,12 @@ package fi.insomnia.bortal.web.cdiview.game;
import javax.ejb.EJB; import javax.ejb.EJB;
import javax.enterprise.context.ConversationScoped; import javax.enterprise.context.ConversationScoped;
import javax.inject.Inject;
import javax.inject.Named; import javax.inject.Named;
import fi.insomnia.bortal.beans.NewsBeanLocal; import fi.insomnia.bortal.beans.NewsBeanLocal;
import fi.insomnia.bortal.model.NewsGroup; import fi.insomnia.bortal.model.User;
import fi.insomnia.bortal.web.annotations.SelectedUser;
import fi.insomnia.bortal.web.cdiview.GenericCDIView; import fi.insomnia.bortal.web.cdiview.GenericCDIView;
@Named @Named
...@@ -15,8 +17,8 @@ public class GameView extends GenericCDIView { ...@@ -15,8 +17,8 @@ public class GameView extends GenericCDIView {
@EJB @EJB
private NewsBeanLocal newsbean; private NewsBeanLocal newsbean;
public NewsGroup getIndexnews() @Inject
{ @SelectedUser
return newsbean.findByName("game-index"); private User user;
}
} }
...@@ -141,6 +141,7 @@ public class PlaceView extends GenericCDIView { ...@@ -141,6 +141,7 @@ public class PlaceView extends GenericCDIView {
} }
public String searchUser() { public String searchUser() {
super.beginConversation();
userlist = new ListDataModel<User>(userbean.getUsers(0, 0, null, searchuser).getResults()); userlist = new ListDataModel<User>(userbean.getUsers(0, 0, null, searchuser).getResults());
return null; return null;
} }
......
package fi.insomnia.bortal.web.cdiview.menu; package fi.insomnia.bortal.web.cdiview.menu;
import fi.insomnia.bortal.model.SitePage;
public class JsfMenuitem { public class JsfMenuitem {
private final Menuitem item; private final Menuitem item;
...@@ -11,6 +13,11 @@ public class JsfMenuitem { ...@@ -11,6 +13,11 @@ public class JsfMenuitem {
this.text = text; this.text = text;
} }
public JsfMenuitem(SitePage sitepage) {
item = new Menuitem("/page/?id=" + sitepage.getId(), null, null);
text = sitepage.getName();
}
public MenuGroup getGroup() { public MenuGroup getGroup() {
return item.getGroup(); return item.getGroup();
} }
......
...@@ -17,10 +17,13 @@ import javax.inject.Named; ...@@ -17,10 +17,13 @@ import javax.inject.Named;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import fi.insomnia.bortal.beans.PermissionBeanLocal; import fi.insomnia.bortal.beans.PermissionBeanLocal;
import fi.insomnia.bortal.beans.SitePageBeanLocal;
import fi.insomnia.bortal.enums.apps.BillPermission; import fi.insomnia.bortal.enums.apps.BillPermission;
import fi.insomnia.bortal.enums.apps.IAppPermission; import fi.insomnia.bortal.enums.apps.IAppPermission;
import fi.insomnia.bortal.enums.apps.MapPermission; import fi.insomnia.bortal.enums.apps.MapPermission;
import fi.insomnia.bortal.enums.apps.PollPermission;
import fi.insomnia.bortal.enums.apps.UserPermission; import fi.insomnia.bortal.enums.apps.UserPermission;
import fi.insomnia.bortal.model.SitePage;
@RequestScoped @RequestScoped
@Named @Named
...@@ -32,6 +35,10 @@ public class MenuView { ...@@ -32,6 +35,10 @@ public class MenuView {
private String pagename; private String pagename;
@EJB @EJB
private PermissionBeanLocal permbean; private PermissionBeanLocal permbean;
@EJB
private SitePageBeanLocal sitePageBean;
private ArrayList<JsfMenuitem> topmenu; private ArrayList<JsfMenuitem> topmenu;
private ArrayList<JsfMenuitem> submenu; private ArrayList<JsfMenuitem> submenu;
private ResourceBundle rb; private ResourceBundle rb;
...@@ -69,6 +76,8 @@ public class MenuView { ...@@ -69,6 +76,8 @@ public class MenuView {
MenuGroup user = new MenuGroup("user"); MenuGroup user = new MenuGroup("user");
MenuGroup placemap = new MenuGroup("placemap"); MenuGroup placemap = new MenuGroup("placemap");
MenuGroup shop = new MenuGroup("shop"); MenuGroup shop = new MenuGroup("shop");
MenuGroup poll = new MenuGroup("poll");
PAGEGROUPS = Collections.unmodifiableList(Arrays.asList(frontpage, user, placemap, shop)); PAGEGROUPS = Collections.unmodifiableList(Arrays.asList(frontpage, user, placemap, shop));
addPage(temppages, "/index", frontpage, UserPermission.ANYUSER); addPage(temppages, "/index", frontpage, UserPermission.ANYUSER);
...@@ -95,6 +104,8 @@ public class MenuView { ...@@ -95,6 +104,8 @@ public class MenuView {
addPage(temppages, "/shop/createBill", shop, BillPermission.CREATE_BILL); addPage(temppages, "/shop/createBill", shop, BillPermission.CREATE_BILL);
addPage(temppages, "/bill/list", shop, BillPermission.VIEW_OWN); addPage(temppages, "/bill/list", shop, BillPermission.VIEW_OWN);
addPage(temppages, "/poll/", shop, PollPermission.ANSWER);
PAGES = Collections.unmodifiableMap(temppages); PAGES = Collections.unmodifiableMap(temppages);
} }
...@@ -146,6 +157,11 @@ public class MenuView { ...@@ -146,6 +157,11 @@ public class MenuView {
} }
} }
} }
for (SitePage sitepage : sitePageBean.getPagerootsForUser())
{
topmenu.add(new JsfMenuitem(sitepage));
}
} }
return topmenu; return topmenu;
......
...@@ -37,18 +37,49 @@ public class PollView extends GenericCDIView { ...@@ -37,18 +37,49 @@ public class PollView extends GenericCDIView {
private Integer pollId; private Integer pollId;
private Poll poll; private Poll poll;
private boolean canManage;
private static final Logger logger = LoggerFactory.getLogger(PollView.class); private static final Logger logger = LoggerFactory.getLogger(PollView.class);
public void initCreate()
{
if (super.requirePermissions(PollPermission.CREATE))
{
poll = new Poll();
super.beginConversation();
}
}
public String savePollEntity()
{
poll = pollBean.savePoll(poll);
return null;
}
public String createPoll()
{
pollBean.createPoll(poll);
return "/poll/edit/";
}
public void initPollList() { public void initPollList() {
if (super.requirePermissions(PollPermission.ANSWER)) { if (permbean.hasPermission(PollPermission.CREATE) || permbean.hasPermission(PollPermission.VIEW_RESULTS)) {
setPolls(pollBean.findPolls()); setPolls(pollBean.findAllPolls());
canManage = true;
}
else if (super.requirePermissions(PollPermission.ANSWER)) {
setPolls(pollBean.findUsablePolls());
canManage = false;
} }
} }
public void initPoll() { public void initPoll() {
if (super.requirePermissions(PollPermission.ANSWER)) { if (super.requirePermissions(PollPermission.ANSWER) && poll == null) {
thisPage = 1;
poll = pollBean.find(pollId); poll = pollBean.find(pollId);
setPages(new HashMap<Integer, List<QuestionWrapper>>());
pages = new HashMap<Integer, List<QuestionWrapper>>();
logger.info("initializing poll {}", poll);
for (PollQuestion q : getPoll().getQuestions()) { for (PollQuestion q : getPoll().getQuestions()) {
if (!getPages().containsKey(q.getPage())) { if (!getPages().containsKey(q.getPage())) {
getPages().put(q.getPage(), new LinkedList<QuestionWrapper>()); getPages().put(q.getPage(), new LinkedList<QuestionWrapper>());
...@@ -65,14 +96,16 @@ public class PollView extends GenericCDIView { ...@@ -65,14 +96,16 @@ public class PollView extends GenericCDIView {
} }
public List<QuestionWrapper> getCurrentPage() { public List<QuestionWrapper> getCurrentPage() {
return getPages().get(thisPage); return getPages().get(thisPage);
} }
public String savePoll() { public String savePoll() {
if (validate(this)) { // if (validate(this)) {
logger.info("Trying to save poll!");
pollBean.createAnswers(createAnswers()); pollBean.createAnswers(createAnswers());
} // }
return "/poll/thankYou"; return "/poll/thankYou";
} }
...@@ -128,6 +161,14 @@ public class PollView extends GenericCDIView { ...@@ -128,6 +161,14 @@ public class PollView extends GenericCDIView {
return pages; return pages;
} }
public boolean isCanManage() {
return canManage;
}
public void setCanManage(boolean canManage) {
this.canManage = canManage;
}
public static class QuestionWrapper { public static class QuestionWrapper {
private PollQuestion question; private PollQuestion question;
...@@ -154,9 +195,10 @@ public class PollView extends GenericCDIView { ...@@ -154,9 +195,10 @@ public class PollView extends GenericCDIView {
} }
public void setOneSelected(PollAnswer ans) { public void setOneSelected(PollAnswer ans) {
logger.info("Setting one selected {}, this {}", ans, this);
if (ans != null) { if (ans != null) {
for (PollAnswer possibleAns : answers) { for (PollAnswer possibleAns : answers) {
if (possibleAns.getChoice().equals(ans.getChoice())) { if (possibleAns.equals(ans)) {
possibleAns.setAnswerBoolean(true); possibleAns.setAnswerBoolean(true);
} else { } else {
possibleAns.setAnswerBoolean(false); possibleAns.setAnswerBoolean(false);
...@@ -166,11 +208,14 @@ public class PollView extends GenericCDIView { ...@@ -166,11 +208,14 @@ public class PollView extends GenericCDIView {
} }
public PollAnswer getOneSelected() { public PollAnswer getOneSelected() {
for (PollAnswer possibleAns : answers) { for (PollAnswer possibleAns : answers) {
if (possibleAns.getAnswerBoolean()) { if (possibleAns.getAnswerBoolean()) {
logger.info("Getting one selected {} ", possibleAns);
return possibleAns; return possibleAns;
} }
} }
return null; return null;
} }
......
package fi.insomnia.bortal.web.cdiview.shop;
import javax.enterprise.context.ConversationScoped;
import javax.faces.model.ListDataModel;
import javax.inject.Inject;
import javax.inject.Named;
import fi.insomnia.bortal.web.cdiview.GenericCDIView;
@Named
@ConversationScoped
public class ReaderListDataView extends GenericCDIView {
/**
*
*/
private static final long serialVersionUID = -601822388844764143L;
private ListDataModel<String> readers;
@Inject
private ReaderView readerview;
@Inject
private transient RfidContainer container;
public ListDataModel<String> getReaders()
{
if (readers == null)
{
super.beginConversation();
readers = new ListDataModel<String>(getContainer().getReaders());
}
return readers;
}
public String selectReader()
{
readerview.setReadername(readers.getRowData());
return null;
}
public void setReaders(ListDataModel<String> readers) {
this.readers = readers;
}
public RfidContainer getContainer() {
return container;
}
public void setContainer(RfidContainer container) {
this.container = container;
}
public ReaderView getReaderview() {
return readerview;
}
public void setReaderview(ReaderView readerview) {
this.readerview = readerview;
}
}
...@@ -2,7 +2,7 @@ package fi.insomnia.bortal.web.cdiview.shop; ...@@ -2,7 +2,7 @@ package fi.insomnia.bortal.web.cdiview.shop;
import java.util.List; import java.util.List;
import javax.enterprise.context.RequestScoped; import javax.enterprise.context.SessionScoped;
import javax.inject.Inject; import javax.inject.Inject;
import javax.inject.Named; import javax.inject.Named;
...@@ -11,12 +11,9 @@ import fi.insomnia.bortal.web.cdiview.GenericCDIView; ...@@ -11,12 +11,9 @@ import fi.insomnia.bortal.web.cdiview.GenericCDIView;
import fi.insomnia.bortal.web.helpers.RfidEvent; import fi.insomnia.bortal.web.helpers.RfidEvent;
@Named @Named
@RequestScoped @SessionScoped
public class ReaderView extends GenericCDIView { public class ReaderView extends GenericCDIView {
/**
*
*/
private static final long serialVersionUID = 571747919767505523L; private static final long serialVersionUID = 571747919767505523L;
private String readername; private String readername;
......
...@@ -7,12 +7,11 @@ import javax.inject.Named; ...@@ -7,12 +7,11 @@ import javax.inject.Named;
import fi.insomnia.bortal.beans.UserBeanLocal; import fi.insomnia.bortal.beans.UserBeanLocal;
import fi.insomnia.bortal.enums.apps.UserPermission; import fi.insomnia.bortal.enums.apps.UserPermission;
import fi.insomnia.bortal.model.User; import fi.insomnia.bortal.model.User;
import fi.insomnia.bortal.web.cdiview.IPaginationView;
import fi.insomnia.bortal.web.cdiview.PaginationView; import fi.insomnia.bortal.web.cdiview.PaginationView;
@Named @Named
@RequestScoped @RequestScoped
public class UserSearchView extends PaginationView<User> implements IPaginationView { public class UserSearchView extends PaginationView<User> {
/** /**
* *
......
...@@ -7,9 +7,6 @@ import javax.faces.context.FacesContext; ...@@ -7,9 +7,6 @@ import javax.faces.context.FacesContext;
import javax.faces.convert.Converter; import javax.faces.convert.Converter;
import javax.inject.Named; import javax.inject.Named;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.beans.PollBeanLocal; import fi.insomnia.bortal.beans.PollBeanLocal;
import fi.insomnia.bortal.model.PollAnswer; import fi.insomnia.bortal.model.PollAnswer;
import fi.insomnia.bortal.model.PossibleAnswer; import fi.insomnia.bortal.model.PossibleAnswer;
...@@ -20,7 +17,6 @@ public class PollAnswerConverter implements Converter { ...@@ -20,7 +17,6 @@ public class PollAnswerConverter implements Converter {
@EJB @EJB
private PollBeanLocal pollbean; private PollBeanLocal pollbean;
private static final Logger logger = LoggerFactory.getLogger(PollAnswerConverter.class);
public PollAnswerConverter() { public PollAnswerConverter() {
} }
...@@ -31,8 +27,6 @@ public class PollAnswerConverter implements Converter { ...@@ -31,8 +27,6 @@ public class PollAnswerConverter implements Converter {
PollAnswer ret = new PollAnswer(); PollAnswer ret = new PollAnswer();
ret.setChoice(possibleAnswer); ret.setChoice(possibleAnswer);
logger.debug("Converting string {} to Poll Answer {}", value, possibleAnswer);
return ret; return ret;
} }
...@@ -41,8 +35,7 @@ public class PollAnswerConverter implements Converter { ...@@ -41,8 +35,7 @@ public class PollAnswerConverter implements Converter {
String ret = null; String ret = null;
if (value instanceof PollAnswer) { if (value instanceof PollAnswer) {
ret = ((PollAnswer) value).getChoice().getId().getId().toString(); ret = ((PollAnswer) value).getChoice().getId().toString();
logger.debug("converting object {} to string {}", ((PollAnswer) value).getChoice().getId(), ret);
} }
......
ALTER TABLE poll DROP CONSTRAINT poll_pkey;
ALTER TABLE poll ADD PRIMARY KEY (id);
ALTER TABLE poll_answer DROP CONSTRAINT fk_poll_answer_possible_answer_id;
ALTER TABLE poll_answer DROP CONSTRAINT fk_poll_answer_event_id;
ALTER TABLE poll_answer DROP CONSTRAINT poll_answer_pkey;
ALTER TABLE poll_answer DROP COLUMN event_id;
ALTER TABLE poll_answer ADD PRIMARY KEY (id);
ALTER TABLE possible_answer DROP CONSTRAINT fk_possible_answer_question_id;
ALTER TABLE possible_answer DROP CONSTRAINT fk_possible_answer_event_id;
ALTER TABLE possible_answer DROP CONSTRAINT possible_answer_pkey;
ALTER TABLE possible_answer DROP COLUMN event_id;
ALTER TABLE possible_answer ADD PRIMARY KEY (id);
ALTER TABLE poll_question DROP CONSTRAINT fk_poll_question_poll_id;
ALTER TABLE poll_question DROP CONSTRAINT fk_poll_question_event_id;
ALTER TABLE poll_question DROP CONSTRAINT poll_question_pkey;
ALTER TABLE poll_question DROP COLUMN event_id;
ALTER TABLE poll_question ADD PRIMARY KEY (id);
ALTER TABLE poll DROP CONSTRAINT poll_pkey;
ALTER TABLE poll ADD PRIMARY KEY (id);
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!