Commit b34c3a8a by Tuomas Riihimäki

Tapahtuma loppuu

1 parent 427a70b0
Showing with 1359 additions and 210 deletions
......@@ -98,7 +98,6 @@ public class CardTemplateBean implements CardTemplateBeanLocal {
*
* @throws PermissionDeniedException
*/
@RolesAllowed(UserPermission.S_MODIFY)
@Override
public PrintedCard checkPrintedCard(User user) throws PermissionDeniedException {
logger.info("Checking printed card");
......
package fi.insomnia.bortal.beans;
import javax.ejb.EJB;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
......@@ -19,6 +20,7 @@ import fi.insomnia.bortal.model.User;
* Session Bean implementation class EventBean
*/
@Stateless
@LocalBean
public class EventBean implements EventBeanLocal {
private static final String DEFAULT_EVENT_NAME = "Default event";
......
......@@ -12,9 +12,10 @@ 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.IAppPermission;
import fi.insomnia.bortal.enums.apps.MapPermission;
import fi.insomnia.bortal.enums.apps.NewsPermission;
import fi.insomnia.bortal.enums.apps.PollPermission;
import fi.insomnia.bortal.enums.apps.ShopPermission;
import fi.insomnia.bortal.enums.apps.SpecialPermission;
import fi.insomnia.bortal.enums.apps.UserPermission;
......@@ -51,7 +52,12 @@ import fi.insomnia.bortal.model.User;
BillPermission.S_WRITE_ALL,
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_USER,
......
package fi.insomnia.bortal.beans;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import javax.annotation.security.DeclareRoles;
......@@ -12,10 +11,12 @@ import javax.ejb.Stateless;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.enums.apps.PollPermission;
import fi.insomnia.bortal.facade.PollAnswerFacade;
import fi.insomnia.bortal.facade.PollFacade;
import fi.insomnia.bortal.facade.PollQuestionFacade;
import fi.insomnia.bortal.facade.PossibleAnswerFacade;
import fi.insomnia.bortal.model.LanEvent;
import fi.insomnia.bortal.model.Poll;
import fi.insomnia.bortal.model.PollAnswer;
import fi.insomnia.bortal.model.PollQuestion;
......@@ -26,7 +27,7 @@ import fi.insomnia.bortal.model.PossibleAnswer;
*/
@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 {
@EJB
......@@ -57,57 +58,54 @@ public class PollBean implements PollBeanLocal {
}
@Override
@RolesAllowed("POLL/ANSWER")
public List<Poll> findPolls() {
List<Poll> list = new ArrayList<Poll>();
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) {
Calendar now = Calendar.getInstance();
// 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;
@RolesAllowed(PollPermission.S_ANSWER)
public List<Poll> findUsablePolls() {
return pollFacade.findAllUsable(eventBean.getCurrentEvent());
}
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
@RolesAllowed(PollPermission.S_VIEW_RESULTS)
public List<Poll> findAllPolls() {
return pollFacade.findAll(eventBean.getCurrentEvent());
}
// 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
@RolesAllowed("POLL/ANSWER")
@RolesAllowed(PollPermission.S_ANSWER)
public boolean createAnswers(List<PollAnswer> answers) {
for (PollAnswer answer : answers) {
answer.setUser(permbean.getCurrentUser());
if (answer.getId().getId() == null) {
if (answer.getId() == null) {
pollAnswerFacade.create(answer);
}
}
......@@ -116,28 +114,41 @@ public class PollBean implements PollBeanLocal {
}
@Override
public PossibleAnswer findPossibleAnwerById(int id) {
PossibleAnswer ans = possibleAnswerFacade.find(eventBean.getCurrentEvent().getId(), Integer.valueOf(id));
logger.debug("Searching from facade {} found {}", id, ans.getId().getId());
public PossibleAnswer findPossibleAnwerById(Integer id) {
PossibleAnswer ans = possibleAnswerFacade.find(id);
logger.info("Searching from facade {} found {}", id, ans.getId());
return ans;
}
@Override
@RolesAllowed("POLL/CREATE")
@RolesAllowed(PollPermission.S_CREATE)
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
@RolesAllowed("POLL/ANSWER")
@RolesAllowed(PollPermission.S_ANSWER)
public void createAnswers(PollQuestion q) {
pqfacade.create(q);
}
@Override
@RolesAllowed("POLL/ANSWER")
@RolesAllowed(PollPermission.S_ANSWER)
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,7 +9,7 @@ import fi.insomnia.bortal.model.PollAnswer;
@Stateless
@LocalBean
public class PollAnswerFacade extends EventChildGenericFacade<PollAnswer> {
public class PollAnswerFacade extends GenericFacade<Integer, PollAnswer> {
@PersistenceContext
private EntityManager em;
......@@ -18,6 +18,7 @@ public class PollAnswerFacade extends EventChildGenericFacade<PollAnswer> {
super(PollAnswer.class);
}
@Override
protected EntityManager getEm() {
return em;
}
......
package fi.insomnia.bortal.facade;
import java.util.Date;
import java.util.List;
import javax.ejb.LocalBean;
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.Root;
import fi.insomnia.bortal.model.LanEvent;
import fi.insomnia.bortal.model.Poll;
import fi.insomnia.bortal.model.Poll_;
@Stateless
@LocalBean
public class PollFacade extends EventChildGenericFacade<Poll> {
public class PollFacade extends GenericFacade<Integer, Poll> {
@PersistenceContext
private EntityManager em;
......@@ -18,7 +26,63 @@ public class PollFacade extends EventChildGenericFacade<Poll> {
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) {
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));
return em.createQuery(cq).getResultList();
}
}
......@@ -9,7 +9,7 @@ import fi.insomnia.bortal.model.PollQuestion;
@Stateless
@LocalBean
public class PollQuestionFacade extends EventChildGenericFacade<PollQuestion> {
public class PollQuestionFacade extends GenericFacade<Integer, PollQuestion> {
@PersistenceContext
private EntityManager em;
......@@ -18,6 +18,7 @@ public class PollQuestionFacade extends EventChildGenericFacade<PollQuestion> {
super(PollQuestion.class);
}
@Override
protected EntityManager getEm() {
return em;
}
......
......@@ -9,7 +9,7 @@ import fi.insomnia.bortal.model.PossibleAnswer;
@Stateless
@LocalBean
public class PossibleAnswerFacade extends EventChildGenericFacade<PossibleAnswer> {
public class PossibleAnswerFacade extends GenericFacade<Integer, PossibleAnswer> {
@PersistenceContext
private EntityManager em;
......@@ -18,6 +18,7 @@ public class PossibleAnswerFacade extends EventChildGenericFacade<PossibleAnswer
super(PossibleAnswer.class);
}
@Override
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> {
public SearchResult<User> searchUser(int page, int pagesize, String sort, String search) {
OrderCallback<User> orderCall = null;
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,
new StringSearchPredicateCreator<User>(search, SEARCHATTRS),
new OrderCallback<User>(true, sort)
orderCall
);
// return this.search(page, pagesize, query, NAMEFIELDS, sort);
......
......@@ -4,7 +4,7 @@ import java.util.List;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Expression;
import javax.persistence.criteria.Path;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import javax.persistence.metamodel.SingularAttribute;
......@@ -32,7 +32,14 @@ public class OrderCallback<T extends ModelInterface<?>> implements FacadeCallbac
@Override
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 (sortstr == null) {
return;
......@@ -50,9 +57,9 @@ public class OrderCallback<T extends ModelInterface<?>> implements FacadeCallbac
}
if (asc) {
cb.asc(path);
cq.orderBy(cb.asc(path));
} else {
cb.desc(path);
cq.orderBy(cb.desc(path));
}
}
}
......@@ -12,11 +12,9 @@ import fi.insomnia.bortal.model.PossibleAnswer;
@Local
public interface PollBeanLocal {
List<Poll> findPolls();
boolean createAnswers(List<PollAnswer> answers);
PossibleAnswer findPossibleAnwerById(int id);
PossibleAnswer findPossibleAnwerById(Integer id);
void createPoll(Poll poll);
......@@ -24,4 +22,10 @@ public interface PollBeanLocal {
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 {
protected abstract Object getId();
@Override
public final boolean equals(Object o) {
public boolean equals(Object o) {
boolean ret = false;
if (o != null && o instanceof EntityEquals && this.getClass().getCanonicalName().equals(o.getClass().getCanonicalName())) {
EntityEquals oobj = (EntityEquals) o;
......
......@@ -96,6 +96,9 @@ public class LanEvent extends GenericEntity {
@OneToMany(mappedBy = "event")
private List<Reader> readers;
@OneToMany(mappedBy = "event", cascade = CascadeType.ALL)
private List<Poll> polls;
public LanEvent() {
}
......@@ -249,4 +252,12 @@ public class LanEvent extends GenericEntity {
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;
import static javax.persistence.TemporalType.TIMESTAMP;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.Lob;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OrderBy;
import javax.persistence.Table;
......@@ -23,20 +24,25 @@ import javax.persistence.Temporal;
*/
@Entity
@Table(name = "poll")
public class Poll extends GenericEventChild implements Serializable {
public class Poll extends GenericEntity {
/**
*
*/
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)
@Column(name = "opening_time", nullable = false)
private Calendar begin = Calendar.getInstance();
private Date begin = new Date();
@Temporal(TIMESTAMP)
@Column(name = "closing_time", nullable = false)
private Calendar end = Calendar.getInstance();
private Date end = new Date();
@Column(name = "name", nullable = false)
private String name;
......@@ -53,27 +59,6 @@ public class Poll extends GenericEventChild implements Serializable {
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() {
return name;
}
......@@ -98,4 +83,28 @@ public class Poll extends GenericEventChild implements Serializable {
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;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.JoinColumns;
import javax.persistence.Lob;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
@Entity
@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 {
private Boolean answerBoolean = false;
@ManyToOne
@JoinColumns({
@JoinColumn(name = "possible_answer_id", referencedColumnName = "id", nullable = false),
@JoinColumn(name = "event_id", referencedColumnName = "event_id", nullable = false, updatable = false, insertable = false) })
@JoinColumn(name = "possible_answer_id", referencedColumnName = "id", nullable = false)
private PossibleAnswer choice;
@ManyToOne
......@@ -40,9 +37,30 @@ public class PollAnswer extends GenericEventChild implements Serializable {
super();
}
public PollAnswer(PossibleAnswer a) {
super(a.getId());
this.choice = a;
@Override
public boolean equals(Object o)
{
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) {
......
......@@ -7,7 +7,6 @@ import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.JoinColumns;
import javax.persistence.Lob;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
......@@ -15,17 +14,14 @@ import javax.persistence.Table;
@Entity
@Table(name = "poll_question")
public class PollQuestion extends GenericEventChild {
public class PollQuestion extends GenericEntity {
public PollQuestion() {
super();
}
public PollQuestion(Poll p, String name) {
super(p.getId());
public PollQuestion(Poll p) {
this.poll = p;
this.question = name;
}
private static final long serialVersionUID = 821112669474215823L;
......@@ -33,15 +29,16 @@ public class PollQuestion extends GenericEventChild {
private static final Integer COLS = 40;
private Integer characters = 200;
@JoinColumns({
@JoinColumn(name = "poll_id", referencedColumnName = "id", nullable = false),
@JoinColumn(name = "event_id", referencedColumnName = "event_id", nullable = false, updatable = false, insertable = false) })
@JoinColumn(name = "poll_id", referencedColumnName = "id", nullable = false)
@ManyToOne
private Poll poll;
@OneToMany(mappedBy = "question", cascade = CascadeType.ALL)
private List<PossibleAnswer> answers = new ArrayList<PossibleAnswer>();
public static final String EVENT_ID_COLUMN = "event_id";
@Lob
private String question;
@Column(nullable = false)
......@@ -59,7 +56,6 @@ public class PollQuestion extends GenericEventChild {
return (answers.size() == 1 && answers.get(0).getTextanswer());
}
public void setQuestion(String question) {
this.question = question;
}
......
......@@ -6,7 +6,6 @@ import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.JoinColumns;
import javax.persistence.Lob;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
......@@ -14,13 +13,7 @@ import javax.persistence.Table;
@Entity
@Table(name = "possible_answer")
public class PossibleAnswer extends GenericEventChild {
public PossibleAnswer(PollQuestion pq, String answer) {
super(pq.getId());
this.answer = answer;
this.question = pq;
}
public class PossibleAnswer extends GenericEntity {
public PossibleAnswer() {
super();
......@@ -38,9 +31,7 @@ public class PossibleAnswer extends GenericEventChild {
@Lob
private String description;
@JoinColumns({
@JoinColumn(name = "question_id", referencedColumnName = "id", nullable = false),
@JoinColumn(name = "event_id", referencedColumnName = "event_id", nullable = false, updatable = false, insertable = false) })
@JoinColumn(name = "question_id", referencedColumnName = "id", nullable = false)
@ManyToOne
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;
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.MapPermission;
import fi.insomnia.bortal.enums.apps.NewsPermission;
import fi.insomnia.bortal.enums.apps.PollPermission;
import fi.insomnia.bortal.enums.apps.ShopPermission;
import fi.insomnia.bortal.enums.apps.UserPermission;
......@@ -18,7 +18,7 @@ public enum BortalApplication {
POLL("Poll stuff", PollPermission.class),
MAP("Map management ", MapPermission.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)",
// BillPermission.class)
// USER_MANAGEMENT("View all users(r), modify users(w), execute actions for user(x) "),
......
......@@ -2,22 +2,26 @@ package fi.insomnia.bortal.enums.apps;
import fi.insomnia.bortal.enums.BortalApplication;
public enum NewsPermission implements IAppPermission {
MANAGE("Manage newsgroups");
public enum ContentPermission implements IAppPermission {
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 fullName;
private NewsPermission(String desc) {
private ContentPermission(String desc) {
this.description = desc;
fullName = new StringBuilder().append(getParent().toString()).append(DELIMITER).append(toString()).toString();
}
@Override
public BortalApplication getParent() {
return BortalApplication.NEWS;
return BortalApplication.CONTENT;
}
@Override
......
......@@ -8,6 +8,11 @@ public enum PollPermission implements IAppPermission {
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 fullName;
......
......@@ -17,8 +17,6 @@ public enum UserPermission implements IAppPermission {
;
;
public static final String S_VIEW_ALL = "USER/VIEW_ALL";
public static final String S_MODIFY = "USER/MODIFY";
public static final String S_CREATE_NEW = "USER/CREATE_NEW";
......
......@@ -31,7 +31,7 @@
<br />
<h:commandButton value="Resize all images" action="#{TestDataView.convertImages()}" />
<br />
<h:commandButton value="Generate test poll data" action="#{TestDataView.generatePollData()}" />
<h:commandButton value="Generate test poll data" action="#{testView.generatePollData()}" />
<br />
<h:commandButton value="convert usernames" action="#{TestDataView.convertUsernames()}" />
<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 @@
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core"
xmlns:users="http://java.sun.com/jsf/composite/tools/user" xmlns:c="http://java.sun.com/jsp/jstl/core">
xmlns:users="http://java.sun.com/jsf/composite/tools/user" xmlns:c="http://java.sun.com/jsp/jstl/core"
>
<h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<ui:param name="thispage" value="page.poll.answer" />
<ui:define name="content">
<f:metadata>
<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>
<p>#{pollView.poll.description}</p>
<h:form id="answerForm">
<h:dataTable border="0" id="questions" value="#{pollView.currentPage}" var="question">
<h:column>
<h:outputText value="#{question.question.question}" />
<h:outputText escape="false" value="#{question.question.question}" />
</h:column>
<h:column>
<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}"
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}"
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}" />
</h:selectOneRadio>
</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,24 +3,32 @@
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core"
xmlns:users="http://java.sun.com/jsf/composite/tools/user" xmlns:c="http://java.sun.com/jsp/jstl/core">
xmlns:users="http://java.sun.com/jsf/composite/tools/user" xmlns:c="http://java.sun.com/jsp/jstl/core"
>
<h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<ui:param name="thispage" value="page.poll.start" />
<f:metadata>
<f:event type="preRenderView" listener="#{pollView.initPollList()}" />
</f:metadata>
<ui:define name="content">
<h1>Kyselyt</h1>
#{pollView.initPollList()}
<h:form>
<h:dataTable border="0" id="maps" value="#{pollView.polls}" var="poll">
<h:dataTable border="0" id="poll" value="#{pollView.polls}" var="poll">
<h:column>
<h:outputText value="#{poll.name}" />
</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 rendered="#{sessionHandler.hasPermission('POLL','READ')}">
<h:commandButton action="#{pollView.showPoll()}" value="#{i18n['poll.show']}" />
<h:column rendered="#{pollView.canManage}">
<h:link outcome="/poll/edit" value="#{i18n['poll.edit']}">
<f:param name="pollid" value="#{poll.id}" />
</h:link>
</h:column>
......
......@@ -6,7 +6,10 @@
xmlns:users="http://java.sun.com/jsf/composite/tools/user" xmlns:c="http://java.sun.com/jsp/jstl/core">
<h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<ui:param name="thispage" value="page.poll.answer" />
<f:metadata>
<f:viewParam name="pollid" value="#{pollView.pollId}" />
<f:event type="preRenderView" listener="#{pollView.initPoll}" />
</f:metadata>
<ui:define name="content">
<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>
......@@ -41,6 +41,11 @@
<h:outputLabel value="#{i18n['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:panelGrid>
</h:form>
......
......@@ -12,7 +12,7 @@
<composite:implementation>
<h:form id="rolelist">
<h:form id="rolelist" >
<h:dataTable border="1" id="user" value="#{roleDataView.roles}" var="role">
<h:column>
<f:facet name="header">
......
......@@ -11,7 +11,10 @@
</composite:interface>
<composite:implementation>
<h:dataTable border="1" id="reader" value="#{rfidContainer.readers}" var="rr">
<h:column>
<f:facet name="header">
<h:outputText value="${i18n['reader.name']}" />
......
......@@ -38,6 +38,7 @@
<li class="picture"><h:link outcome="/user/sendPicture" value="#{i18n['submenu.user.sendPicture']}">
<f:param name="userid" value="#{userView.user.id}" />
</h:link></li>
</ul>
</div>
......
<?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:attribute name="commitvalue" required="true" />
<composite:attribute name="commitaction" required="true"
method-signature="java.lang.String action()" />
<composite:attribute name="commitaction" required="true" method-signature="java.lang.String action()" />
</composite:interface>
<composite:implementation>
......@@ -44,8 +41,15 @@
<h:outputLabel value="#{i18n['product.prepaidInstant']}" />
<h:selectBooleanCheckbox value="#{productView.product.prepaidInstant}" />
<h:commandButton id="commitbtn" action="#{cc.attrs.commitaction}"
value="#{cc.attrs.commitvalue}" />
<h:outputLabel value="#{i18n['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:panelGrid>
</h:form>
......@@ -61,8 +65,7 @@
</h:form>
<h:form id="discounts">
<h:dataTable border="1" id="discount" value="#{productView.productDiscounts}"
var="discount">
<h:dataTable border="1" id="discount" value="#{productView.productDiscounts}" var="discount">
<h:column>
<f:facet name="header">
<h:outputText value="${i18n['discount.percentage']}" />
......@@ -112,8 +115,7 @@
<h:outputText value="#{discount.perUser}" />
</h:column>
<h:column>
<h:commandButton action="#{productView.editDiscount()}"
value="#{i18n['discount.edit']}" />
<h:commandButton action="#{productView.editDiscount()}" value="#{i18n['discount.edit']}" />
</h:column>
</h:dataTable>
......
......@@ -9,6 +9,8 @@
</composite:interface>
<composite:implementation>
<h:dataTable border="1" id="user" value="#{userSearchView.users}" var="user">
<h:column>
<f:facet name="header">
......
<!DOCTYPE html
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets"
......
......@@ -5,6 +5,7 @@
xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core"
xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:p="http://primefaces.prime.com.tr/ui"
xmlns:users="http://java.sun.com/jsf/composite/cditools/user"
xmlns:shop="http://java.sun.com/jsf/composite/cditools/shop"
>
<h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
......@@ -62,10 +63,7 @@
<h:outputText rendered="#{empty userView.user.currentImage}" value="#{i18n['user.noCurrentImage']}" />
<ui:fragment rendered="#{!empty userView.user.currentImage}">
<h:panelGrid columns="2">
<img width="300"
src="#{request.contextPath}/Userimage?imageid=#{userView.user.currentImage.id}"
alt="image"
/>
<img width="300" src="#{request.contextPath}/Userimage?imageid=#{userView.user.currentImage.id}" alt="image" />
<ui:fragment rendered="#{userView.canManage()}">
<h:form>
<p:imageCropper value="#{userView.croppedImage}" aspectRatio="0.8"
......@@ -96,10 +94,30 @@
</h:dataTable>
</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>
<!-- <h:dataTable var="image" value="#{userView.user.userImageList}"> -->
<!-- <h:column> -->
<!-- <h:outputText value="#{image.id}" /> -->
......
......@@ -72,6 +72,7 @@ public class HostnameFilter implements Filter {
if (httpRequest.getUserPrincipal() == null) {
try {
httpRequest.login(User.ANONYMOUS_LOGINNAME, null);
} catch (Throwable t) {
logger.warn("Error logging in as anonymous... ignoring.. ", t);
......
......@@ -144,7 +144,7 @@ public class SessionHandler {
{
StringBuffer url = ((HttpServletRequest) ext).getRequestURL();
preurlString = url.substring(0, url.indexOf("/", 7));
preurlString = url.substring(0, url.indexOf("/", 8));
} else {
preurlString = "";
......
......@@ -19,7 +19,7 @@ public abstract class PaginationView<T extends ModelInterface<?>> extends Generi
public abstract void initView();
public void setResult(SearchResult<T> products) {
resultcount = products.getResultcount();
setResultcount(products.getResultcount());
results = products.getResults();
}
......
package fi.insomnia.bortal.web.cdiview.news;
package fi.insomnia.bortal.web.cdiview.content;
import java.util.List;
......@@ -7,7 +7,7 @@ import javax.enterprise.context.RequestScoped;
import javax.inject.Named;
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.web.cdiview.GenericCDIView;
......@@ -26,7 +26,7 @@ public class NewsListView extends GenericCDIView {
private List<NewsGroup> newsgroups;
public void initView() {
if (super.requirePermissions(permbean.hasPermission(NewsPermission.MANAGE))) {
if (super.requirePermissions(permbean.hasPermission(ContentPermission.MANAGE_NEWS))) {
setNewsgroups(newsbean.findAll());
}
}
......
package fi.insomnia.bortal.web.cdiview.news;
package fi.insomnia.bortal.web.cdiview.content;
import javax.ejb.EJB;
import javax.inject.Named;
......
package fi.insomnia.bortal.web.cdiview.news;
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.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.NewsGroup;
import fi.insomnia.bortal.web.cdiview.GenericCDIView;
......@@ -28,7 +28,7 @@ public class NewsgroupView extends GenericCDIView {
private transient NewsBeanLocal newsbean;
public void initView() {
if (super.requirePermissions(permbean.hasPermission(NewsPermission.MANAGE)) && newsgroup == null) {
if (super.requirePermissions(permbean.hasPermission(ContentPermission.MANAGE_NEWS)) && newsgroup == null) {
super.beginConversation();
newsgroup = newsbean.findById(newsgroupid);
......@@ -36,14 +36,14 @@ public class NewsgroupView extends GenericCDIView {
}
public void initNews() {
if (super.requirePermissions(permbean.hasPermission(NewsPermission.MANAGE)) && getNews() == null) {
if (super.requirePermissions(permbean.hasPermission(ContentPermission.MANAGE_NEWS)) && getNews() == null) {
super.beginConversation();
news = newsbean.findNews(newsid);
}
}
public void initCreate() {
if (super.requirePermissions(permbean.hasPermission(NewsPermission.MANAGE))) {
if (super.requirePermissions(permbean.hasPermission(ContentPermission.MANAGE_NEWS))) {
super.beginConversation();
newsgroup = new NewsGroup();
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;
import javax.ejb.EJB;
import javax.enterprise.context.ConversationScoped;
import javax.inject.Inject;
import javax.inject.Named;
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;
@Named
......@@ -15,8 +17,8 @@ public class GameView extends GenericCDIView {
@EJB
private NewsBeanLocal newsbean;
public NewsGroup getIndexnews()
{
return newsbean.findByName("game-index");
}
@Inject
@SelectedUser
private User user;
}
......@@ -141,6 +141,7 @@ public class PlaceView extends GenericCDIView {
}
public String searchUser() {
super.beginConversation();
userlist = new ListDataModel<User>(userbean.getUsers(0, 0, null, searchuser).getResults());
return null;
}
......
package fi.insomnia.bortal.web.cdiview.menu;
import fi.insomnia.bortal.model.SitePage;
public class JsfMenuitem {
private final Menuitem item;
......@@ -11,6 +13,11 @@ public class JsfMenuitem {
this.text = text;
}
public JsfMenuitem(SitePage sitepage) {
item = new Menuitem("/page/?id=" + sitepage.getId(), null, null);
text = sitepage.getName();
}
public MenuGroup getGroup() {
return item.getGroup();
}
......
......@@ -17,10 +17,13 @@ import javax.inject.Named;
import javax.servlet.http.HttpServletRequest;
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.IAppPermission;
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.model.SitePage;
@RequestScoped
@Named
......@@ -32,6 +35,10 @@ public class MenuView {
private String pagename;
@EJB
private PermissionBeanLocal permbean;
@EJB
private SitePageBeanLocal sitePageBean;
private ArrayList<JsfMenuitem> topmenu;
private ArrayList<JsfMenuitem> submenu;
private ResourceBundle rb;
......@@ -69,6 +76,8 @@ public class MenuView {
MenuGroup user = new MenuGroup("user");
MenuGroup placemap = new MenuGroup("placemap");
MenuGroup shop = new MenuGroup("shop");
MenuGroup poll = new MenuGroup("poll");
PAGEGROUPS = Collections.unmodifiableList(Arrays.asList(frontpage, user, placemap, shop));
addPage(temppages, "/index", frontpage, UserPermission.ANYUSER);
......@@ -95,6 +104,8 @@ public class MenuView {
addPage(temppages, "/shop/createBill", shop, BillPermission.CREATE_BILL);
addPage(temppages, "/bill/list", shop, BillPermission.VIEW_OWN);
addPage(temppages, "/poll/", shop, PollPermission.ANSWER);
PAGES = Collections.unmodifiableMap(temppages);
}
......@@ -146,6 +157,11 @@ public class MenuView {
}
}
}
for (SitePage sitepage : sitePageBean.getPagerootsForUser())
{
topmenu.add(new JsfMenuitem(sitepage));
}
}
return topmenu;
......
......@@ -37,18 +37,49 @@ public class PollView extends GenericCDIView {
private Integer pollId;
private Poll poll;
private boolean canManage;
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() {
if (super.requirePermissions(PollPermission.ANSWER)) {
setPolls(pollBean.findPolls());
if (permbean.hasPermission(PollPermission.CREATE) || permbean.hasPermission(PollPermission.VIEW_RESULTS)) {
setPolls(pollBean.findAllPolls());
canManage = true;
}
else if (super.requirePermissions(PollPermission.ANSWER)) {
setPolls(pollBean.findUsablePolls());
canManage = false;
}
}
public void initPoll() {
if (super.requirePermissions(PollPermission.ANSWER)) {
if (super.requirePermissions(PollPermission.ANSWER) && poll == null) {
thisPage = 1;
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()) {
if (!getPages().containsKey(q.getPage())) {
getPages().put(q.getPage(), new LinkedList<QuestionWrapper>());
......@@ -65,14 +96,16 @@ public class PollView extends GenericCDIView {
}
public List<QuestionWrapper> getCurrentPage() {
return getPages().get(thisPage);
}
public String savePoll() {
if (validate(this)) {
// if (validate(this)) {
logger.info("Trying to save poll!");
pollBean.createAnswers(createAnswers());
}
// }
return "/poll/thankYou";
}
......@@ -128,6 +161,14 @@ public class PollView extends GenericCDIView {
return pages;
}
public boolean isCanManage() {
return canManage;
}
public void setCanManage(boolean canManage) {
this.canManage = canManage;
}
public static class QuestionWrapper {
private PollQuestion question;
......@@ -154,9 +195,10 @@ public class PollView extends GenericCDIView {
}
public void setOneSelected(PollAnswer ans) {
logger.info("Setting one selected {}, this {}", ans, this);
if (ans != null) {
for (PollAnswer possibleAns : answers) {
if (possibleAns.getChoice().equals(ans.getChoice())) {
if (possibleAns.equals(ans)) {
possibleAns.setAnswerBoolean(true);
} else {
possibleAns.setAnswerBoolean(false);
......@@ -166,11 +208,14 @@ public class PollView extends GenericCDIView {
}
public PollAnswer getOneSelected() {
for (PollAnswer possibleAns : answers) {
if (possibleAns.getAnswerBoolean()) {
logger.info("Getting one selected {} ", possibleAns);
return possibleAns;
}
}
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;
import java.util.List;
import javax.enterprise.context.RequestScoped;
import javax.enterprise.context.SessionScoped;
import javax.inject.Inject;
import javax.inject.Named;
......@@ -11,12 +11,9 @@ import fi.insomnia.bortal.web.cdiview.GenericCDIView;
import fi.insomnia.bortal.web.helpers.RfidEvent;
@Named
@RequestScoped
@SessionScoped
public class ReaderView extends GenericCDIView {
/**
*
*/
private static final long serialVersionUID = 571747919767505523L;
private String readername;
......
......@@ -7,12 +7,11 @@ import javax.inject.Named;
import fi.insomnia.bortal.beans.UserBeanLocal;
import fi.insomnia.bortal.enums.apps.UserPermission;
import fi.insomnia.bortal.model.User;
import fi.insomnia.bortal.web.cdiview.IPaginationView;
import fi.insomnia.bortal.web.cdiview.PaginationView;
@Named
@RequestScoped
public class UserSearchView extends PaginationView<User> implements IPaginationView {
public class UserSearchView extends PaginationView<User> {
/**
*
......
......@@ -7,9 +7,6 @@ import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.inject.Named;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.beans.PollBeanLocal;
import fi.insomnia.bortal.model.PollAnswer;
import fi.insomnia.bortal.model.PossibleAnswer;
......@@ -20,7 +17,6 @@ public class PollAnswerConverter implements Converter {
@EJB
private PollBeanLocal pollbean;
private static final Logger logger = LoggerFactory.getLogger(PollAnswerConverter.class);
public PollAnswerConverter() {
}
......@@ -31,8 +27,6 @@ public class PollAnswerConverter implements Converter {
PollAnswer ret = new PollAnswer();
ret.setChoice(possibleAnswer);
logger.debug("Converting string {} to Poll Answer {}", value, possibleAnswer);
return ret;
}
......@@ -41,8 +35,7 @@ public class PollAnswerConverter implements Converter {
String ret = null;
if (value instanceof PollAnswer) {
ret = ((PollAnswer) value).getChoice().getId().getId().toString();
logger.debug("converting object {} to string {}", ((PollAnswer) value).getChoice().getId(), ret);
ret = ((PollAnswer) value).getChoice().getId().toString();
}
......
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!