Commit cf983633 by Tuomas Riihimäki

Merge branch 'lectures' into 'master'

Lectures

Kurssit ja luennot, tuki niille, eka versio.

Tämä tulee todennäköisesti confligtamaan tuomarin version kanssa -> kun tuomari on mergetetty niin tulen mergettvmään masterin tähän ja päivittää tän requestin, mut loin jo valmiiksi previewiä varten.
2 parents 8a452fa5 e5ec612a
Showing with 1589 additions and 63 deletions
...@@ -80,7 +80,6 @@ public class BootstrapBean implements BootstrapBeanLocal { ...@@ -80,7 +80,6 @@ public class BootstrapBean implements BootstrapBeanLocal {
"alter table compos add hidden boolean default false not null" "alter table compos add hidden boolean default false not null"
}); });
dbUpdates.add(alterTables("ADD COLUMN meta json", dbUpdates.add(alterTables("ADD COLUMN meta json",
"account_events", "account_events",
"actionlog_message_responses", "actionlog_message_responses",
...@@ -152,6 +151,7 @@ public class BootstrapBean implements BootstrapBeanLocal { ...@@ -152,6 +151,7 @@ public class BootstrapBean implements BootstrapBeanLocal {
"user_notes", "user_notes",
"users")); "users"));
dbUpdates.add(new String[]{"CREATE TABLE network_associations (id SERIAL NOT NULL, create_time TIMESTAMPTZ NOT NULL, ip TEXT, mac TEXT, meta TEXT, modify_time TIMESTAMPTZ NOT NULL, status TEXT NOT NULL, event INTEGER, event_user INTEGER, place INTEGER, PRIMARY KEY (id))"}); dbUpdates.add(new String[]{"CREATE TABLE network_associations (id SERIAL NOT NULL, create_time TIMESTAMPTZ NOT NULL, ip TEXT, mac TEXT, meta TEXT, modify_time TIMESTAMPTZ NOT NULL, status TEXT NOT NULL, event INTEGER, event_user INTEGER, place INTEGER, PRIMARY KEY (id))"});
dbUpdates.add(new String[] { dbUpdates.add(new String[] {
...@@ -183,12 +183,26 @@ public class BootstrapBean implements BootstrapBeanLocal { ...@@ -183,12 +183,26 @@ public class BootstrapBean implements BootstrapBeanLocal {
"ALTER TABLE card_text_data DROP COLUMN font_style;", "ALTER TABLE card_text_data DROP COLUMN font_style;",
"ALTER TABLE card_text_data ADD COLUMN font_style TEXT NOT NULL DEFAULT 'PLAIN';" "ALTER TABLE card_text_data ADD COLUMN font_style TEXT NOT NULL DEFAULT 'PLAIN';"
}); });
dbUpdates.add(new String[] { dbUpdates.add(new String[] {
"ALTER TABLE event_log RENAME log_id TO id;" "ALTER TABLE event_log RENAME log_id TO id;"
}); });
dbUpdates.add(new String[] { dbUpdates.add(new String[] {
"ALTER TABLE network_associations ALTER COLUMN meta TYPE json USING (meta::json);" "ALTER TABLE network_associations ALTER COLUMN meta TYPE json USING (meta::json);"
}); });
dbUpdates.add(new String[] {"CREATE TABLE lecture_groups (id SERIAL NOT NULL, event_id integer NOT NULL, description TEXT, name TEXT, select_count INTEGER, meta json, PRIMARY KEY (id))",
"CREATE TABLE lectures (id SERIAL NOT NULL, description TEXT, hours numeric(10,2), max_participants_count INTEGER, name TEXT, start_time TIMESTAMPTZ, lecture_group_id INTEGER, meta json, PRIMARY KEY (id))",
"CREATE TABLE lecture_roles (role_id INTEGER NOT NULL, lecture_id INTEGER NOT NULL, PRIMARY KEY (role_id, lecture_id))",
"CREATE TABLE lecture_participants (eventuser_id INTEGER NOT NULL, lecture_id INTEGER NOT NULL, PRIMARY KEY (eventuser_id, lecture_id))",
"ALTER TABLE lectures ADD CONSTRAINT FK_lectures_lecture_group_id FOREIGN KEY (lecture_group_id) REFERENCES lecture_groups (id)",
"ALTER TABLE lecture_roles ADD CONSTRAINT FK_lecture_roles_lecture_id FOREIGN KEY (lecture_id) REFERENCES lectures (id)",
"ALTER TABLE lecture_roles ADD CONSTRAINT FK_lecture_roles_role_id FOREIGN KEY (role_id) REFERENCES roles (id)",
"ALTER TABLE lecture_participants ADD CONSTRAINT FK_lecture_participants_eventuser_id FOREIGN KEY (eventuser_id) REFERENCES event_users (id)",
"ALTER TABLE lecture_participants ADD CONSTRAINT FK_lecture_participants_lecture_id FOREIGN KEY (lecture_id) REFERENCES lectures (id)"});
} }
@EJB @EJB
......
package fi.codecrew.moya.beans;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.security.DeclareRoles;
import javax.annotation.security.RolesAllowed;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import fi.codecrew.moya.enums.apps.LecturePermission;
import fi.codecrew.moya.facade.EventUserFacade;
import fi.codecrew.moya.facade.LectureFacade;
import fi.codecrew.moya.facade.LectureGroupFacade;
import fi.codecrew.moya.model.EventUser;
import fi.codecrew.moya.model.Lecture;
import fi.codecrew.moya.model.LectureGroup;
import fi.codecrew.moya.model.Role;
/**
* Session Bean implementation class FoodWaveBean
*/
@Stateless
@DeclareRoles({ LecturePermission.S_VIEW, LecturePermission.S_MANAGE })
public class LectureBean implements LectureBeanLocal {
@EJB
LectureFacade lectureFacade;
@EJB
LectureGroupFacade lectureGroupFacade;
@EJB
EventUserFacade eventUserFacade;
@EJB
EventBean eventBean;
@EJB
UserBeanLocal userBean;
@Override
public List<Lecture> getLecturesByLectureGroup(LectureGroup group) {
LectureGroup sourceGroup = lectureGroupFacade.reload(group);
return sourceGroup.getLectures();
}
@Override
public List<LectureGroup> getLectureGroups() {
return lectureGroupFacade.getLectureGroups();
}
@Override
@RolesAllowed(LecturePermission.S_MANAGE)
public LectureGroup saveLectureGroup(LectureGroup group) {
if (group.getId() == null)
{
if (group.getEvent() == null)
group.setEvent(eventBean.getCurrentEvent());
lectureGroupFacade.create(group);
} else {
group = lectureGroupFacade.merge(group);
}
return group;
}
@Override
@RolesAllowed({LecturePermission.S_VIEW, LecturePermission.S_MANAGE})
public LectureGroup findLectureGroup(Integer id) {
return lectureGroupFacade.find(id);
}
@Override
@RolesAllowed(LecturePermission.S_MANAGE)
public Lecture saveLecture(Lecture lecture) {
if (lecture == null || lecture.getLectureGroup() == null) {
throw new NullPointerException("Lecture must be in some lecturegroup!");
}
// let's try this, some weird cache problem
LectureGroup group = lectureGroupFacade.reload(lecture.getLectureGroup());
lecture.setLectureGroup(group);
if (lecture.getId() == null) {
lectureFacade.create(lecture);
if (!lecture.getLectureGroup().getLectures().contains(lecture))
lecture.getLectureGroup().getLectures().add(lecture);
} else {
lecture = lectureFacade.merge(lecture);
}
return lecture;
}
@Override
@RolesAllowed({LecturePermission.S_VIEW, LecturePermission.S_MANAGE})
public List<Lecture> findAvailableLectures(LectureGroup group, EventUser user) {
LectureGroup lectureGroup = lectureGroupFacade.reload(group);
List<Role> userRoles = userBean.findUsersRoles(user);
List<Lecture> lectures = new ArrayList<Lecture>();
lectureloop: for (Lecture l : lectureGroup.getLectures()) {
for (Role r : l.getOpenForRoles()) {
if (userRoles.contains(r)) {
lectures.add(l);
continue lectureloop;
}
}
}
return lectures;
}
@Override
@RolesAllowed({LecturePermission.S_VIEW, LecturePermission.S_MANAGE})
public List<Lecture> getParticipatedLectures(EventUser user) {
return eventUserFacade.reload(user).getLectures();
}
@Override
@RolesAllowed({LecturePermission.S_VIEW, LecturePermission.S_MANAGE})
public Lecture participate(EventUser user, Lecture lecture) {
if(userLectureSelectsLeft(lecture.getLectureGroup(), user) <= 0)
return lecture;
EventUser targetUser = eventUserFacade.reload(user);
lecture.getParticipants().add(targetUser);
lecture = lectureFacade.merge(lecture);
targetUser.getLectures().add(lecture);
return lecture;
}
@Override
@RolesAllowed({LecturePermission.S_VIEW, LecturePermission.S_MANAGE})
public Lecture unparticipate(EventUser user, Lecture lecture) {
EventUser targetUser = eventUserFacade.reload(user);
lecture.getParticipants().remove(targetUser);
targetUser.getLectures().remove(lecture);
lecture = lectureFacade.merge(lecture);
return lecture;
}
@Override
@RolesAllowed({LecturePermission.S_VIEW, LecturePermission.S_MANAGE})
public int userLectureSelects(LectureGroup group, EventUser user) {
EventUser updatedUser = eventUserFacade.reload(user);
int count = 0;
for(Lecture l : updatedUser.getLectures()) {
if(l.getLectureGroup().equals(group)) {
count++;
}
}
return count;
}
@Override
@RolesAllowed({LecturePermission.S_VIEW, LecturePermission.S_MANAGE})
public int userLectureSelectsLeft(LectureGroup group, EventUser user) {
LectureGroup updatedGroup = lectureGroupFacade.reload(group);
int maxCount = updatedGroup.getSelectCount();
if(maxCount <= 0)
return 99;
return maxCount - userLectureSelects(group, user);
}
}
...@@ -15,6 +15,7 @@ import fi.codecrew.moya.enums.apps.BillPermission; ...@@ -15,6 +15,7 @@ import fi.codecrew.moya.enums.apps.BillPermission;
import fi.codecrew.moya.enums.apps.CompoPermission; import fi.codecrew.moya.enums.apps.CompoPermission;
import fi.codecrew.moya.enums.apps.ContentPermission; import fi.codecrew.moya.enums.apps.ContentPermission;
import fi.codecrew.moya.enums.apps.EventPermission; import fi.codecrew.moya.enums.apps.EventPermission;
import fi.codecrew.moya.enums.apps.LecturePermission;
import fi.codecrew.moya.enums.apps.LicensePermission; import fi.codecrew.moya.enums.apps.LicensePermission;
import fi.codecrew.moya.enums.apps.MapPermission; import fi.codecrew.moya.enums.apps.MapPermission;
import fi.codecrew.moya.enums.apps.NetworkAssociationPermission; import fi.codecrew.moya.enums.apps.NetworkAssociationPermission;
...@@ -157,6 +158,10 @@ public class MenuBean implements MenuBeanLocal { ...@@ -157,6 +158,10 @@ public class MenuBean implements MenuBeanLocal {
MenuNavigation createuser = usermenu.addPage(null, null); MenuNavigation createuser = usermenu.addPage(null, null);
createuser.setKey("topnavi.createuser"); createuser.setKey("topnavi.createuser");
createuser.addPage(menuitemfacade.findOrCreate("/user/create"), UserPermission.CREATE_NEW).setVisible(false); createuser.addPage(menuitemfacade.findOrCreate("/user/create"), UserPermission.CREATE_NEW).setVisible(false);
MenuNavigation userlectures = usermenu.addPage(null, null);
userlectures.setKey("topnavi.userlectures");
userlectures.addPage(menuitemfacade.findOrCreate("/lectures/viewLectures"), LecturePermission.VIEW);
navifacade.create(usermenu); navifacade.create(usermenu);
...@@ -287,10 +292,18 @@ public class MenuBean implements MenuBeanLocal { ...@@ -287,10 +292,18 @@ public class MenuBean implements MenuBeanLocal {
tournamentsadm.addPage(menuitemfacade.findOrCreate("/tournaments/admin/delete"), TournamentPermission.MANAGE_ALL).setVisible(false); tournamentsadm.addPage(menuitemfacade.findOrCreate("/tournaments/admin/delete"), TournamentPermission.MANAGE_ALL).setVisible(false);
tournamentsadm.addPage(menuitemfacade.findOrCreate("/tournaments/admin/editrules"), TournamentPermission.MANAGE_ALL).setVisible(false); tournamentsadm.addPage(menuitemfacade.findOrCreate("/tournaments/admin/editrules"), TournamentPermission.MANAGE_ALL).setVisible(false);
MenuNavigation adminlectures = adminmenu.addPage(null, null);
adminlectures.setKey("topnavi.adminlectures");
adminlectures.addPage(menuitemfacade.findOrCreate("/lectureadmin/manageLectureGroups"), LecturePermission.MANAGE);
MenuNavigation infoviews = adminmenu.addPage(null, null); MenuNavigation infoviews = adminmenu.addPage(null, null);
infoviews.setKey("topnavi.infoviews"); infoviews.setKey("topnavi.infoviews");
infoviews.addPage(menuitemfacade.findOrCreate("/admin/adduser/index"), TerminalPermission.INFO); infoviews.addPage(menuitemfacade.findOrCreate("/admin/adduser/index"), TerminalPermission.INFO);
MenuNavigation infonavi = infoviews.addPage(null, null); MenuNavigation infonavi = infoviews.addPage(null, null);
infonavi.setKey("subnavi.info"); infonavi.setKey("subnavi.info");
infonavi.addPage(menuitemfacade.findOrCreate("/info/index"), TerminalPermission.INFO); infonavi.addPage(menuitemfacade.findOrCreate("/info/index"), TerminalPermission.INFO);
......
...@@ -261,7 +261,7 @@ public class NetworkAssociationBean implements NetworkAssociationBeanLocal { ...@@ -261,7 +261,7 @@ public class NetworkAssociationBean implements NetworkAssociationBeanLocal {
} }
// Finally persist the association and return // Finally persist the association and return
na = networkAssociationFacade.create(na); networkAssociationFacade.create(na);
return na; return na;
} }
......
...@@ -173,7 +173,7 @@ public class ReaderBean implements ReaderBeanLocal { ...@@ -173,7 +173,7 @@ public class ReaderBean implements ReaderBeanLocal {
@Override @Override
public ReaderEvent assocCodeToCard(ReaderEvent readerEvent, PrintedCard card) { public ReaderEvent assocCodeToCard(ReaderEvent readerEvent, PrintedCard card) {
CardCode code = new CardCode(card, readerEvent.getReader().getType(), readerEvent.getValue()); CardCode code = new CardCode(card, readerEvent.getReader().getType(), readerEvent.getValue(), eventbean.getCurrentEvent());
cardCodeFacade.create(code); cardCodeFacade.create(code);
......
package fi.codecrew.moya.facade;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import fi.codecrew.moya.model.EventUser;
import fi.codecrew.moya.model.Lecture;
@Stateless
@LocalBean
public class LectureFacade extends IntegerPkGenericFacade<Lecture> {
public LectureFacade() {
super(Lecture.class);
}
}
package fi.codecrew.moya.facade;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;
import fi.codecrew.moya.beans.EventBeanLocal;
import fi.codecrew.moya.model.LectureGroup;
import fi.codecrew.moya.model.LectureGroup_;
@Stateless
@LocalBean
public class LectureGroupFacade extends IntegerPkGenericFacade<LectureGroup> {
public LectureGroupFacade() {
super(LectureGroup.class);
}
@EJB
EventBeanLocal eventBean;
public List<LectureGroup> getLectureGroups() {
CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<LectureGroup> cq = cb.createQuery(LectureGroup.class);
Root<LectureGroup> root = cq.from(LectureGroup.class);
cq.where(cb.equal(root.get(LectureGroup_.event), eventBean.getCurrentEvent() ) );
return getEm().createQuery(cq).getResultList();
}
}
package fi.codecrew.moya.beans;
import java.util.List;
import javax.ejb.Local;
import javax.faces.model.ListDataModel;
import fi.codecrew.moya.model.EventUser;
import fi.codecrew.moya.model.Lecture;
import fi.codecrew.moya.model.LectureGroup;
@Local
public interface LectureBeanLocal {
public List<Lecture> getLecturesByLectureGroup(LectureGroup group);
public List<LectureGroup> getLectureGroups();
public LectureGroup saveLectureGroup(LectureGroup group);
public LectureGroup findLectureGroup(Integer id);
public Lecture saveLecture(Lecture lecture);
public List<Lecture> findAvailableLectures(LectureGroup group, EventUser user);
public List<Lecture> getParticipatedLectures(EventUser user);
public Lecture participate(EventUser user, Lecture lecture);
public Lecture unparticipate(EventUser user, Lecture lecture);
public int userLectureSelectsLeft(LectureGroup group, EventUser user);
public int userLectureSelects(LectureGroup group, EventUser user);
}
...@@ -103,6 +103,10 @@ public class EventUser extends GenericEntity { ...@@ -103,6 +103,10 @@ public class EventUser extends GenericEntity {
@OneToMany(mappedBy = "eventUser") @OneToMany(mappedBy = "eventUser")
private List<GameID> gameIDs; private List<GameID> gameIDs;
@ManyToMany(mappedBy = "participants")
private List<Lecture> lectures = new ArrayList<Lecture>();
public List<GameID> getGameIDs() { public List<GameID> getGameIDs() {
return gameIDs; return gameIDs;
...@@ -467,4 +471,15 @@ public class EventUser extends GenericEntity { ...@@ -467,4 +471,15 @@ public class EventUser extends GenericEntity {
} }
accountEvents.add(accountevent); accountEvents.add(accountevent);
} }
public List<Lecture> getLectures() {
if(lectures == null)
lectures = new ArrayList<Lecture>();
return lectures;
}
public void setLectures(List<Lecture> lectures) {
this.lectures = lectures;
}
} }
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package fi.codecrew.moya.model;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.Lob;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;
import org.eclipse.persistence.annotations.OptimisticLocking;
import org.eclipse.persistence.annotations.OptimisticLockingType;
/**
* Group for lectures, so you can set limits how many of these the user can
* choose
*/
@Entity
@Table(name = "lectures")
@OptimisticLocking(type = OptimisticLockingType.CHANGED_COLUMNS)
public class Lecture extends GenericEntity {
private static final long serialVersionUID = 3L;
@Column(name = "name")
private String name;
@Lob
@Column(name = "description")
private String description;
@ManyToOne
@JoinColumn(name = "lecture_group_id", referencedColumnName = LectureGroup.ID_COLUMN)
private LectureGroup lectureGroup;
@ManyToMany()
@JoinTable(name = "lecture_participants",
joinColumns = { @JoinColumn(name = "lecture_id", referencedColumnName = Lecture.ID_COLUMN) },
inverseJoinColumns = { @JoinColumn(name = "eventuser_id", referencedColumnName = EventUser.ID_COLUMN) })
private List<EventUser> participants;
@ManyToMany()
@JoinTable(name = "lecture_roles",
joinColumns = { @JoinColumn(name = "lecture_id", referencedColumnName = Lecture.ID_COLUMN) },
inverseJoinColumns = { @JoinColumn(name = "role_id", referencedColumnName = Role.ID_COLUMN) })
private List<Role> openForRoles;
@Column(name = "max_participants_count")
private Integer maxParticipantsCount;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "start_time")
private Calendar startTime;
@Column(name = "hours", precision = 10, scale = 2)
private BigDecimal hours;
public Lecture() {
super();
}
public Lecture(LectureGroup group) {
this();
setLectureGroup(group);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public LectureGroup getLectureGroup() {
return lectureGroup;
}
public void setLectureGroup(LectureGroup lectureGroup) {
this.lectureGroup = lectureGroup;
}
public List<EventUser> getParticipants() {
if (participants == null)
participants = new ArrayList<EventUser>();
return participants;
}
public void setParticipants(List<EventUser> participants) {
this.participants = participants;
}
public List<Role> getOpenForRoles() {
if (openForRoles == null)
openForRoles = new ArrayList<Role>();
return openForRoles;
}
public void setOpenForRoles(List<Role> openForRoles) {
this.openForRoles = openForRoles;
}
public Integer getMaxParticipantsCount() {
return maxParticipantsCount;
}
public void setMaxParticipantsCount(Integer maxParticipantsCount) {
this.maxParticipantsCount = maxParticipantsCount;
}
public Calendar getStartTime() {
if (startTime == null) {
startTime = Calendar.getInstance();
}
return startTime;
}
public void setStartTime(Calendar startTime) {
this.startTime = startTime;
}
public Calendar getEndTime() {
if (getStartTime() == null || getHours() == null)
return getStartTime();
Calendar endTime = (Calendar) getStartTime().clone();
endTime.add(Calendar.MINUTE, getHours().multiply(new BigDecimal(60)).intValue());
return endTime;
}
public void setEndTime(Calendar endTime) {
if (endTime == null || getStartTime() == null) {
hours = BigDecimal.ZERO;
}
setHours(new BigDecimal((int) endTime.compareTo(getStartTime()) / 1000 / 60 / 60));
}
public BigDecimal getHours() {
return hours;
}
public void setHours(BigDecimal hours) {
this.hours = hours;
}
/**
* Clones lecture -object withoud database id and partisipants
*/
@Override
public Object clone() {
Lecture newLecture = new Lecture(this.getLectureGroup());
newLecture.setDescription(getDescription());
newLecture.setName(getName());
newLecture.setHours(getHours());
newLecture.setMaxParticipantsCount(getMaxParticipantsCount());
newLecture.setStartTime(getStartTime());
newLecture.setOpenForRoles(getOpenForRoles());
return newLecture;
}
@Transient
public boolean isFull() {
if (getMaxParticipantsCount() <= 0) {
return false;
}
return (getParticipants().size() >= getMaxParticipantsCount());
}
@Transient
public int getParticipantsCount() {
return getParticipants().size();
}
}
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package fi.codecrew.moya.model;
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.Table;
import org.eclipse.persistence.annotations.OptimisticLocking;
import org.eclipse.persistence.annotations.OptimisticLockingType;
/**
* Group for lectures, so you can set limits how many of these the user can
* choose
*/
@Entity
@Table(name = "lecture_groups")
@OptimisticLocking(type = OptimisticLockingType.CHANGED_COLUMNS)
public class LectureGroup extends GenericEntity {
private static final long serialVersionUID = 4L;
@ManyToOne()
@JoinColumn(name = "event_id", nullable = false)
private LanEvent event;
@Column(name = "select_count")
private Integer selectCount;
@Column(name = "name")
private String name;
@Lob
@Column(name = "description")
private String description;
@OneToMany(mappedBy = "lectureGroup", cascade = CascadeType.ALL)
private List<Lecture> lectures;
public LectureGroup() {
super();
}
public LectureGroup(LanEvent event) {
this();
this.event = event;
}
public Integer getSelectCount() {
return selectCount;
}
public void setSelectCount(Integer selectCount) {
this.selectCount = selectCount;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public LanEvent getEvent() {
return event;
}
public void setEvent(LanEvent event) {
this.event = event;
}
public List<Lecture> getLectures() {
return lectures;
}
public void setLectures(List<Lecture> lectures) {
this.lectures = lectures;
}
}
...@@ -79,6 +79,11 @@ public class Role extends GenericEntity { ...@@ -79,6 +79,11 @@ public class Role extends GenericEntity {
joinColumns = { @JoinColumn(name = "role_id", referencedColumnName = Role.ID_COLUMN) }, joinColumns = { @JoinColumn(name = "role_id", referencedColumnName = Role.ID_COLUMN) },
inverseJoinColumns = { @JoinColumn(name = "org_role_id", referencedColumnName = OrgRole.ID_COLUMN) }) inverseJoinColumns = { @JoinColumn(name = "org_role_id", referencedColumnName = OrgRole.ID_COLUMN) })
private List<OrgRole> orgRoles; private List<OrgRole> orgRoles;
@ManyToMany(mappedBy = "openForRoles")
private List<Lecture> lectures = new ArrayList<Lecture>();
public Role() { public Role() {
super(); super();
...@@ -203,4 +208,12 @@ public class Role extends GenericEntity { ...@@ -203,4 +208,12 @@ public class Role extends GenericEntity {
this.orgRoles = orgRoles; this.orgRoles = orgRoles;
} }
public List<Lecture> getLectures() {
return lectures;
}
public void setLectures(List<Lecture> lectures) {
this.lectures = lectures;
}
} }
...@@ -4,8 +4,9 @@ import fi.codecrew.moya.enums.apps.BillPermission; ...@@ -4,8 +4,9 @@ import fi.codecrew.moya.enums.apps.BillPermission;
import fi.codecrew.moya.enums.apps.CompoPermission; import fi.codecrew.moya.enums.apps.CompoPermission;
import fi.codecrew.moya.enums.apps.ContentPermission; import fi.codecrew.moya.enums.apps.ContentPermission;
import fi.codecrew.moya.enums.apps.EventPermission; import fi.codecrew.moya.enums.apps.EventPermission;
import fi.codecrew.moya.enums.apps.LicensePermission;
import fi.codecrew.moya.enums.apps.IAppPermission; import fi.codecrew.moya.enums.apps.IAppPermission;
import fi.codecrew.moya.enums.apps.LecturePermission;
import fi.codecrew.moya.enums.apps.LicensePermission;
import fi.codecrew.moya.enums.apps.MapPermission; import fi.codecrew.moya.enums.apps.MapPermission;
import fi.codecrew.moya.enums.apps.NetworkAssociationPermission; import fi.codecrew.moya.enums.apps.NetworkAssociationPermission;
import fi.codecrew.moya.enums.apps.PollPermission; import fi.codecrew.moya.enums.apps.PollPermission;
...@@ -25,6 +26,7 @@ public enum BortalApplication { ...@@ -25,6 +26,7 @@ public enum BortalApplication {
TERMINAL(TerminalPermission.class), TERMINAL(TerminalPermission.class),
SALESPOINT(SalespointPermission.class), SALESPOINT(SalespointPermission.class),
COMPO(CompoPermission.class), COMPO(CompoPermission.class),
LECTURE(LecturePermission.class),
EVENT(EventPermission.class), EVENT(EventPermission.class),
LICENSE(LicensePermission.class), LICENSE(LicensePermission.class),
TOURNAMENT(TournamentPermission.class), TOURNAMENT(TournamentPermission.class),
......
package fi.codecrew.moya.enums.apps;
import fi.codecrew.moya.enums.BortalApplication;
public enum LecturePermission implements IAppPermission {
VIEW,
MANAGE,
;
public static final String S_VIEW = "LECTURE/VIEW";
public static final String S_MANAGE = "LECTURE/MANAGE";
private final String fullName;
private final String key;
private static final String I18N_HEADER = "bortalApplication.lecture.";
private LecturePermission() {
key = I18N_HEADER + name();
fullName = new StringBuilder().append(getParent().toString()).append(DELIMITER).append(toString()).toString();
}
@Override
public BortalApplication getParent() {
return BortalApplication.LECTURE;
}
@Override
public String getFullName() {
return fullName;
}
@Override
public String getI18nKey() {
return key;
}
}
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:products="http://java.sun.com/jsf/composite/cditools/products" xmlns:users="http://java.sun.com/jsf/composite/cditools/user" xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:p="http://primefaces.org/ui">
<h:body>
<ui:composition template="#{sessionHandler.template}">
<f:metadata>
<f:event type="preRenderView" listener="#{lectureGroupView.initView()}" />
</f:metadata>
<ui:define name="title">
<h1>#{i18n['lecturegroup.list.title']}</h1>
</ui:define>
<ui:define name="content">
<h:form id="managelecturegroups">
<p:dataTable id="lecturegroups" var="lectureGroup" value="#{lectureGroupView.lectureGroups}">
<p:column headerText="#{i18n['lectureGroup.name']}">
<h:outputText value="#{lectureGroup.name}" />
</p:column>
<p:column headerText="#{i18n['lectureGroup.selectCount']}">
<h:outputText value="#{lectureGroup.selectCount}" />
</p:column>
<p:column headerText="#{i18n['lectureGroup.description']}">
<h:outputText value="#{lectureGroup.description}" />
</p:column>
<p:column>
<p:commandButton value="#{i18n['edit']}" actionListener="#{lectureGroupView.editCurrent}" update=":managelecturegroups:editcreate" />
</p:column>
<p:column>
<h:link outcome="/lectureadmin/manageLectures" value="#{i18n['lectureGroup.manageLectures']}">
<f:param name="lecturegroupid" value="#{lectureGroup.id}" />
</h:link>
</p:column>
</p:dataTable>
<p:commandButton value="#{i18n['lectureGroup.createNew']}" actionListener="#{lectureGroupView.createNew}" update=":managelecturegroups:editcreate" />
<br />
<br />
<br />
<p:fieldset legend="#{lectureGroupView.editPanelTitle}" id="editcreate">
<p:panelGrid columns="2">
<p:outputLabel value="#{i18n['lectureGroup.name']}" />
<p:inputText value="#{lectureGroupView.currentLectureGroup.name}" />
<p:outputLabel value="#{i18n['lectureGroup.selectCount']}" />
<p:inputText value="#{lectureGroupView.currentLectureGroup.selectCount}" />
<p:outputLabel value="#{i18n['lectureGroup.description']}" />
<p:inputTextarea value="#{lectureGroupView.currentLectureGroup.description}" />
<p:commandButton rendered="#{!lectureGroupView.creatingLectureGroup}" actionListener="#{lectureGroupView.saveLectureGroup}" value="#{i18n['save']}" update=":managelecturegroups:lecturegroups" />
<p:commandButton rendered="#{lectureGroupView.creatingLectureGroup}" actionListener="#{lectureGroupView.saveLectureGroup}" value="#{i18n['create']}" update=":managelecturegroups:lecturegroups" />
</p:panelGrid>
</p:fieldset>
</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:f="http://java.sun.com/jsf/core" xmlns:products="http://java.sun.com/jsf/composite/cditools/products" xmlns:users="http://java.sun.com/jsf/composite/cditools/user" xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:p="http://primefaces.org/ui">
<h:body>
<ui:composition template="#{sessionHandler.template}">
<f:metadata>
<f:viewParam name="lecturegroupid" value="#{lectureView.lectureGroupId}" />
<f:event type="preRenderView" listener="#{lectureView.initView()}" />
</f:metadata>
<ui:define name="title">
<h1>#{i18n['lecturegroup.list.title']}</h1>
</ui:define>
<ui:define name="content">
<h:form id="managelectures">
<p:fieldset legend="#{lectureView.currentLectureGroup.name}" id="lectures">
<p:dataTable var="lecture" value="#{lectureView.lectures}">
<p:column headerText="#{i18n['lecture.name']}">
<h:outputText value="#{lecture.name}" />
</p:column>
<p:column headerText="#{i18n['lecture.description']}">
<h:outputText value="#{lecture.description}" />
</p:column>
<p:column headerText="#{i18n['lecture.maxParticipantsCount']}">
<h:outputText value="#{lecture.maxParticipantsCount}" />
</p:column>
<p:column headerText="#{i18n['lecture.hours']}">
<h:outputText value="#{lecture.hours}" />
</p:column>
<p:column headerText="#{i18n['lecture.startTime']}">
<h:outputText value="#{lecture.startTime.time}">
<f:convertDateTime pattern="#{sessionHandler.datetimeFormat}" timeZone="#{sessionHandler.timezone}" />
</h:outputText>
</p:column>
<p:column>
<p:commandButton value="#{i18n['edit']}" actionListener="#{lectureView.editCurrent}" update=":managelectures:editcreate" />
</p:column>
</p:dataTable>
</p:fieldset>
<p:commandButton value="#{i18n['lecture.createNew']}" actionListener="#{lectureView.createNew}" update=":managelectures:editcreate" />
<p:outputLabel value="#{i18n['lecture.multicreate']}" /> <p:selectBooleanButton value="#{lectureView.multicreate}" offLabel="#{i18n['off']}" onLabel="#{i18n['on']}" onIcon="ui-icon-check" offIcon="ui-icon-close" />
<br />
<br />
<br />
<p:fieldset legend="#{lectureView.editPanelTitle}" id="editcreate">
<p:panelGrid columns="2">
<p:outputLabel value="#{i18n['lecture.name']}" />
<p:inputText value="#{lectureView.currentLecture.name}" />
<p:outputLabel value="#{i18n['lecture.description']}" />
<p:inputTextarea value="#{lectureView.currentLecture.description}" />
<p:outputLabel value="#{i18n['lecture.maxParticipantsCount']}" />
<p:inputText value="#{lectureView.currentLecture.maxParticipantsCount}" />
<p:outputLabel value="#{i18n['lecture.startTime']}" />
<p:calendar value="#{lectureView.currentLecture.startTime.time}" pattern="#{sessionHandler.datetimeFormat}" showOn="button" />
<p:outputLabel value="#{i18n['lecture.hours']}" />
<p:inputText value="#{lectureView.currentLecture.hours}" />
<p:outputLabel value="#{i18n['lecture.roles']}" />
<h:selectManyCheckbox converter="#{roleConverter}" layout="pageDirection" id="roles" value="#{lectureView.currentLecture.openForRoles}">
<f:selectItems var="roleitem" itemLabel="#{roleitem.name}" value="#{roleDataView.roles}" />
</h:selectManyCheckbox>
<p:commandButton rendered="#{!lectureView.creatingLecture}" actionListener="#{lectureView.saveLecture}" value="#{i18n['save']}" update="editcreate :managelectures:lectures" />
<p:commandButton rendered="#{lectureView.creatingLecture}" actionListener="#{lectureView.saveLecture}" value="#{i18n['create']}" update="editcreate :managelectures:lectures" />
</p:panelGrid>
</p:fieldset>
</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:f="http://java.sun.com/jsf/core" xmlns:products="http://java.sun.com/jsf/composite/cditools/products" xmlns:users="http://java.sun.com/jsf/composite/cditools/user" xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:p="http://primefaces.org/ui">
<h:body>
<ui:composition template="#{sessionHandler.template}">
<f:metadata>
<f:viewParam name="lecturegroupid" value="#{lectureView.lectureGroupId}" />
<f:event type="preRenderView" listener="#{lectureUserView.initView()}" />
</f:metadata>
<ui:define name="title">
<h1>#{i18n['viewlectures.title']}</h1>
</ui:define>
<ui:define name="content">
<h:form id="viewlecturesform">
<p:fieldset id="lectureGroups" legend="#{i18n['lecture.selectgroup']}">
<p:dataTable value="#{lectureUserView.lectureGroups}" var="lectureGroup">
<p:column headerText="#{i18n['lectureGroup.name']}">
<h:outputText value="#{lectureGroup.name}" />
</p:column>
<p:column headerText="#{i18n['lectureGroup.description']}">
<h:outputText value="#{lectureGroup.description}" />
</p:column>
<p:column headerText="#{i18n['lectureGroup.selectCountUserInfo']}">
<h:outputText value="#{lectureGroup.selectCount}" />
</p:column>
<p:column>
<p:commandButton value="#{i18n['lectureGroup.view']}" actionListener="#{lectureUserView.selectCurrentLectureGroup}" update=":viewlecturesform:participatedLectures :viewlecturesform:availableLectures :viewlecturesform:title" onerror="location.reload(true)" />
</p:column>
</p:dataTable>
</p:fieldset>
<h1>
<h:outputText id="title" value="#{lectureUserView.currentLectureGroup.name}" />
</h1>
<p:fieldset id="participatedLectures" legend="#{i18n['lecture.participatedLectures']} #{lectureUserView.currentGroupParticipateCount} / #{lectureUserView.currentLectureGroup.selectCount}">
<p:dataTable value="#{lectureUserView.participatedLectures}" var="lecture">
<p:column headerText="#{i18n['lecture.name']}">
<h:outputText value="#{lecture.name}" />
</p:column>
<p:column headerText="#{i18n['lecture.description']}">
<h:outputText value="#{lecture.description}" />
</p:column>
<p:column headerText="#{i18n['lecture.hours']}">
<h:outputText value="#{lecture.hours}" />
</p:column>
<p:column headerText="#{i18n['lecture.startTime']}">
<h:outputText value="#{lecture.startTime.time}">
<f:convertDateTime pattern="#{sessionHandler.datetimeFormat}" timeZone="#{sessionHandler.timezone}" />
</h:outputText>
</p:column>
<p:column headerText="#{i18n['lecture.participants']}">
<h:outputText value="#{lecture.participantsCount}" /> / <h:outputText value="#{lecture.maxParticipantsCount}" />
</p:column>
<p:column>
<p:commandButton value="#{i18n['lecture.unparticipate']}" actionListener="#{lectureUserView.unParticipateCurrent}" update=":viewlecturesform:availableLectures :viewlecturesform:participatedLectures" onerror="location.reload(true)" />
</p:column>
</p:dataTable>
</p:fieldset>
<br /><br />
<p:fieldset id="availableLectures" legend="#{i18n['lecture.availableLectures']}">
<p:dataTable value="#{lectureUserView.lectures}" var="lecture">
<p:column headerText="#{i18n['lecture.name']}">
<h:outputText value="#{lecture.name}" />
</p:column>
<p:column headerText="#{i18n['lecture.description']}">
<h:outputText value="#{lecture.description}" />
</p:column>
<p:column headerText="#{i18n['lecture.hours']}">
<h:outputText value="#{lecture.hours}" />
</p:column>
<p:column headerText="#{i18n['lecture.startTime']}">
<h:outputText value="#{lecture.startTime.time}">
<f:convertDateTime pattern="#{sessionHandler.datetimeFormat}" timeZone="#{sessionHandler.timezone}" />
</h:outputText>
</p:column>
<p:column headerText="#{i18n['lecture.participants']}">
<h:outputText value="#{lecture.participantsCount}" /> / <h:outputText value="#{lecture.maxParticipantsCount}" />
</p:column>
<p:column>
<p:commandButton value="#{i18n['lecture.participate']}" rendered="#{!lectureUserView.currentGroupFull and !lecture.full}" actionListener="#{lectureUserView.participateCurrent}" update=":viewlecturesform:availableLectures :viewlecturesform:participatedLectures" onerror="location.reload(true)" />
<h:outputText value="#{i18n['lecture.full']}" rendered="#{lecture.full}" />
<h:outputText value="#{i18n['lecture.groupFull']}" rendered="#{lectureUserView.currentGroupFull}" />
</p:column>
</p:dataTable>
</p:fieldset>
</h:form>
</ui:define>
</ui:composition>
</h:body>
</html>
\ No newline at end of file
...@@ -116,8 +116,17 @@ cardTemplate.emptyCardTemplate = ---- ...@@ -116,8 +116,17 @@ cardTemplate.emptyCardTemplate = ----
code.inputfield = Sy\u00F6t\u00E4 viivakoodi code.inputfield = Sy\u00F6t\u00E4 viivakoodi
delete = Poista delete = Poista
create = Luo
edit = Muokkaa
error = Virhe
error.contact = If this happens again, contact Info with the following code: error.contact = If this happens again, contact Info with the following code:
error.error = You have encountered an error. error.error = You have encountered an error.
...@@ -195,6 +204,38 @@ lanEventProperty.defaultValue = Default value ...@@ -195,6 +204,38 @@ lanEventProperty.defaultValue = Default value
lanEventProperty.save = Save lanEventProperty.save = Save
lanEventProperty.textValue = Text value lanEventProperty.textValue = Text value
lecture.availableLectures = Aihealueen kurssit ja luennot
lecture.createLecture = Uuden tiedot
lecture.createNew = Luo uusi
lecture.description = Kuvaus
lecture.groupFull = Kiinti\u00F6 t\u00E4ynn\u00E4
lecture.hours = Kesto, tunteja
lecture.maxParticipantsCount = Max. osallistujia
lecture.multicreate = Luo monta putkeen
lecture.name = Nimi
lecture.participants = Osallistujia
lecture.participate = Ilmoittaudu
lecture.participatedLectures = Kurssi-ilmoittautumisesi
lecture.roles = Roolit
lecture.saveLecture = Muokkaa
lecture.selectgroup = Valitse aihealue
lecture.startTime = Aloitusaika
lecture.unparticipate = Poista ilmoittautuminen
lectureGroup.createLectureGroup = Luo kurssikokonaisuus
lectureGroup.createNew = Luo uusi
lectureGroup.description = Kuvaus
lectureGroup.manageLectures = Hallitse luentoja
lectureGroup.name = Nimi
lectureGroup.saveLectureGroup = Muokkaa kurssikokonaisuutta
lectureGroup.selectCount = Montako kurssia saa valita
lectureGroup.selectCountUserInfo = Yhden osallistujan kiinti\u00F6
lectureGroup.view = Tarkastele
lecturegroup.create.success = Kurssiryhm\u00E4 luotu onnistuneesti.
lecturegroup.list.title = Luennot
lecturegroup.save.success = Kurssiryhm\u00E4 tallennettu onnistuneesti.
login.login = Login login.login = Login
login.logout = Logout login.logout = Logout
login.logoutmessage = You have logged out of the system login.logoutmessage = You have logged out of the system
...@@ -212,7 +253,8 @@ navi.auth.login = frontpage ...@@ -212,7 +253,8 @@ navi.auth.login = frontpage
navi.auth.loginerror = frontpage navi.auth.loginerror = frontpage
navi.auth.logout = frontpage navi.auth.logout = frontpage
off = Pois
off = Poissa
on = P\u00E4\u00E4ll\u00E4 on = P\u00E4\u00E4ll\u00E4
...@@ -260,18 +302,39 @@ resetMail.username = Username ...@@ -260,18 +302,39 @@ resetMail.username = Username
resetmailSent.body = Email has been sent containing a link where you can change the password. resetmailSent.body = Email has been sent containing a link where you can change the password.
resetmailSent.header = Email sent resetmailSent.header = Email sent
save = Tallenna
submenu.NotImplementedYet = Not implemented submenu.NotImplementedYet = Not implemented
submenu.admin.adduser = K\u00E4ytt\u00E4j\u00E4nlis\u00E4ys submenu.admin.adduser = K\u00E4ytt\u00E4j\u00E4nlis\u00E4ys
submenu.admin.adduser.index = K\u00E4ytt\u00E4j\u00E4nlis\u00E4ys submenu.admin.adduser.index = K\u00E4ytt\u00E4j\u00E4nlis\u00E4ys
submenu.frontpage = Frontpage submenu.frontpage = Frontpage
submenu.info.incoming = Sis\u00E4\u00E4ntulo submenu.info.incoming = Sis\u00E4\u00E4ntulo
submenu.info.index = Infon\u00E4kym\u00E4 submenu.info.index = Infon\u00E4kym\u00E4
submenu.info.shop = Kauppa submenu.info.shop = Kauppa
submenu.info.index = Infon\u00E4kym\u00E4
= Infon\u00E4kym\u00E4
submenu.lectureadmin.manageLectureGroups = Hallinnoi
submenu.lectures.viewLectures = Ilmoittaudu
subnavi.cards = \u0009\u0009 subnavi.cards = \u0009\u0009
subnavi.info = Info subnavi.info = Info
topnavi.license = Lisenssikoodit
success = Onnistui
topnavi.adminlectures = Kurssit ja luennot
topnavi.license = Lisenssikoodit
topnavi.userlectures = Kurssit ja luennot
user.cropImage = Crop user.cropImage = Crop
user.imageUpload.imageNotFound = Select image to upload user.imageUpload.imageNotFound = Select image to upload
...@@ -279,3 +342,5 @@ user.unauthenticated = Kirjautumaton ...@@ -279,3 +342,5 @@ user.unauthenticated = Kirjautumaton
usercart.downloadCsv = CSV usercart.downloadCsv = CSV
usercart.showoverview = Vie tarkastusn\u00E4kym\u00E4\u00E4n usercart.showoverview = Vie tarkastusn\u00E4kym\u00E4\u00E4n
viewlectures.title = Kurssit ja luennot
...@@ -284,8 +284,12 @@ compofile.uploadTime = Upload time ...@@ -284,8 +284,12 @@ compofile.uploadTime = Upload time
content.showContentEditLinks = Show content edit links content.showContentEditLinks = Show content edit links
delete = Delete delete = Delete
create = Create
discount.active = Active discount.active = Active
discount.amountMax = Max amount discount.amountMax = Max amount
discount.amountMin = Min amount discount.amountMin = Min amount
...@@ -303,6 +307,8 @@ discount.shortdesc = Description ...@@ -303,6 +307,8 @@ discount.shortdesc = Description
discount.validFrom = Valid from discount.validFrom = Valid from
discount.validTo = Valid to discount.validTo = Valid to
edit = Edit
editplace.header = Edit place editplace.header = Edit place
editplace.placegroup.title = Placegroup editplace.placegroup.title = Placegroup
...@@ -310,6 +316,8 @@ editplacegroup.header = Placegroup information ...@@ -310,6 +316,8 @@ editplacegroup.header = Placegroup information
entry.edit = Edit entry entry.edit = Edit entry
error = Error
error.contact = If this happens again, contact Info with the following code: error.contact = If this happens again, contact Info with the following code:
error.error = You have encountered an error. error.error = You have encountered an error.
...@@ -547,6 +555,38 @@ layout.editBottom = Edit bottom content ...@@ -547,6 +555,38 @@ layout.editBottom = Edit bottom content
layout.editContent = Edit center layout.editContent = Edit center
layout.editTop = Edit topcontent layout.editTop = Edit topcontent
lecture.availableLectures = available lectures
lecture.createLecture = New lecture
lecture.createNew = Create new
lecture.description = Description
lecture.groupFull = Limit reached
lecture.hours = Duration hours
lecture.maxParticipantsCount = Max participants
lecture.multicreate = Create multible in row
lecture.name = Name
lecture.participants = Participants
lecture.participate = Participate
lecture.participatedLectures = Your lectures
lecture.roles = Roles
lecture.saveLecture = Edit
lecture.selectgroup = Select lecturegroup
lecture.startTime = Start time
lecture.unparticipate = Remove participation
lectureGroup.createLectureGroup = Create lecturegroup
lectureGroup.createNew = Create new
lectureGroup.description = Description
lectureGroup.manageLectures = Manage lectures
lectureGroup.name = Name
lectureGroup.saveLectureGroup = Edit lecturegroup
lectureGroup.selectCount = Max lecture select count
lectureGroup.selectCountUserInfo = Quota for one participant
lectureGroup.view = View
lecturegroup.create.success = Lecturegroup created successfully.
lecturegroup.list.title = Lectures
lecturegroup.save.success = Lecturegroup saved succesfully.
license.active = Active license.active = Active
license.description = Description license.description = Description
license.name = Name license.name = Name
...@@ -945,6 +985,8 @@ salespoint.edit = Edit ...@@ -945,6 +985,8 @@ salespoint.edit = Edit
salespoint.name = Name salespoint.name = Name
salespoint.noSalesPoints = Amount salespoint.noSalesPoints = Amount
save = Save
sendPicture.header = S sendPicture.header = S
shop.accountBalance = Credits shop.accountBalance = Credits
...@@ -1016,6 +1058,7 @@ sitepage.save = Save ...@@ -1016,6 +1058,7 @@ sitepage.save = Save
sitepagelist.header = Site pages sitepagelist.header = Site pages
submenu.NotImplementedYet = Not implemented submenu.NotImplementedYet = Not implemented
submenu.actionlog.messagelist = ActionLog submenu.actionlog.messagelist = ActionLog
submenu.actionlog.taskview = View tasks submenu.actionlog.taskview = View tasks
...@@ -1107,6 +1150,11 @@ submenu.voting.create = Create new compo ...@@ -1107,6 +1150,11 @@ submenu.voting.create = Create new compo
submenu.voting.myEntries = My entries submenu.voting.myEntries = My entries
submenu.voting.submitEntry = Submit entry submenu.voting.submitEntry = Submit entry
submenu.lectureadmin.manageLectureGroups = Management
submenu.lectures.viewLectures = Participate
subnavi.billing = Billing subnavi.billing = Billing
subnavi.cards = Cards subnavi.cards = Cards
subnavi.info = Info subnavi.info = Info
...@@ -1114,6 +1162,8 @@ subnavi.products = Products ...@@ -1114,6 +1162,8 @@ subnavi.products = Products
subnavi.readers = Readers subnavi.readers = Readers
subnavi.roles = Roles subnavi.roles = Roles
success = Success
supernavi.admin = Adminview supernavi.admin = Adminview
supernavi.user = Userview supernavi.user = Userview
...@@ -1132,33 +1182,35 @@ topmenu.admin = Admin View ...@@ -1132,33 +1182,35 @@ topmenu.admin = Admin View
topmenu.helpdesk = Helpdesk topmenu.helpdesk = Helpdesk
topmenu.user = User View topmenu.user = User View
topnavi.adminassoc = Net Associations topnavi.adminassoc = Net Associations
topnavi.adminshop = Adminshop topnavi.adminlectures = Lectures and courses
topnavi.billing = Billing topnavi.adminshop = Adminshop
topnavi.competitions = Competitions topnavi.billing = Billing
topnavi.compos = Compos topnavi.competitions = Competitions
topnavi.contents = Site contents topnavi.compos = Compos
topnavi.createuser = Create user topnavi.contents = Site contents
topnavi.event = Event topnavi.createuser = Create user
topnavi.foodwave = Food topnavi.event = Event
topnavi.frontpage = Front page topnavi.foodwave = Food
topnavi.game = Gamecodes topnavi.frontpage = Front page
topnavi.infoviews = Infoviews topnavi.game = Gamecodes
topnavi.license = Licensecodes topnavi.infoviews = Infoviews
topnavi.log = Log topnavi.license = Licensecodes
topnavi.login = Login topnavi.log = Log
topnavi.maps = Maps topnavi.login = Login
topnavi.placemap = Map topnavi.maps = Maps
topnavi.poll = Polls topnavi.placemap = Map
topnavi.products = Products topnavi.poll = Polls
topnavi.profile = Profile topnavi.products = Products
topnavi.shop = Shop topnavi.profile = Profile
topnavi.user = My properties topnavi.shop = Shop
topnavi.userevent = Event topnavi.user = My properties
topnavi.userinit = User auth topnavi.userevent = Event
topnavi.usermgmt = Users topnavi.userinit = User auth
topnavi.userplaces = Computer Places topnavi.userlectures = Lectures and courses
topnavi.usershop = Shop topnavi.usermgmt = Users
topnavi.userplaces = Computer Places
topnavi.usershop = Shop
tournament.admin.back_to_index = Back to tournament administration tournament.admin.back_to_index = Back to tournament administration
tournament.admin.control = Control tournament.admin.control = Control
...@@ -1401,6 +1453,8 @@ userview.userExists = Username already exists! You may already have an a ...@@ -1401,6 +1453,8 @@ userview.userExists = Username already exists! You may already have an a
viewexpired.body = Please login again. viewexpired.body = Please login again.
viewexpired.title = Login expired. Please login again. viewexpired.title = Login expired. Please login again.
viewlectures.title = Courses and lectures
voting.allcompos.curEntries = # of entries voting.allcompos.curEntries = # of entries
voting.allcompos.descri = Description voting.allcompos.descri = Description
voting.allcompos.description = List of all compos and theirs information. voting.allcompos.description = List of all compos and theirs information.
......
...@@ -197,6 +197,7 @@ card.massprint.title = Tulosta kaikki ...@@ -197,6 +197,7 @@ card.massprint.title = Tulosta kaikki
cardCode.code = Koodi cardCode.code = Koodi
cardCode.type = Tyyppi cardCode.type = Tyyppi
cardObjectData.create = Liit\u00E4 kuvia cardObjectData.create = Liit\u00E4 kuvia
cardObjectData.edit = Muokkaa cardObjectData.edit = Muokkaa
cardObjectData.save = Tallenna cardObjectData.save = Tallenna
...@@ -285,8 +286,12 @@ compofile.uploadTime = Tallennusaika ...@@ -285,8 +286,12 @@ compofile.uploadTime = Tallennusaika
content.showContentEditLinks = N\u00E4yt\u00E4 sis\u00E4ll\u00F6nmuokkauslinkit content.showContentEditLinks = N\u00E4yt\u00E4 sis\u00E4ll\u00F6nmuokkauslinkit
delete = Poista delete = Poista
create = Luo
discount.active = Aktiivinen discount.active = Aktiivinen
discount.amountMax = Enimm\u00E4ism\u00E4\u00E4r\u00E4 discount.amountMax = Enimm\u00E4ism\u00E4\u00E4r\u00E4
discount.amountMin = V\u00E4himm\u00E4ism\u00E4\u00E4r\u00E4 discount.amountMin = V\u00E4himm\u00E4ism\u00E4\u00E4r\u00E4
...@@ -304,6 +309,8 @@ discount.shortdesc = Kuvaus ...@@ -304,6 +309,8 @@ discount.shortdesc = Kuvaus
discount.validFrom = Voimassa alkaen discount.validFrom = Voimassa alkaen
discount.validTo = Voimassa asti discount.validTo = Voimassa asti
edit = Muokkaa
editplace.header = Muokkaa paikkaa editplace.header = Muokkaa paikkaa
editplace.placegroup.title = Paikkaryhm\u00E4 editplace.placegroup.title = Paikkaryhm\u00E4
...@@ -311,6 +318,8 @@ editplacegroup.header = Paikkaryhm\u00E4n tiedot ...@@ -311,6 +318,8 @@ editplacegroup.header = Paikkaryhm\u00E4n tiedot
entry.edit = Muokkaa entry.edit = Muokkaa
error = Virhe
error.contact = Jos t\u00E4m\u00E4 toistuu, ota seuraava koodi talteen ja ota yhteys Infoon: error.contact = Jos t\u00E4m\u00E4 toistuu, ota seuraava koodi talteen ja ota yhteys Infoon:
error.error = Olet kohdannut virheen. error.error = Olet kohdannut virheen.
...@@ -557,6 +566,38 @@ layout.editBottom = Muokkaa alasis\u00E4lt\u00F6\u00E4 ...@@ -557,6 +566,38 @@ layout.editBottom = Muokkaa alasis\u00E4lt\u00F6\u00E4
layout.editContent = Muokkaa sis\u00E4lt\u00F6\u00E4 layout.editContent = Muokkaa sis\u00E4lt\u00F6\u00E4
layout.editTop = Muokkaa yl\u00E4sis\u00E4lt\u00F6\u00E4 layout.editTop = Muokkaa yl\u00E4sis\u00E4lt\u00F6\u00E4
lecture.availableLectures = Aihealueen kurssit ja luennot
lecture.createLecture = Uuden tiedot
lecture.createNew = Luo uusi
lecture.description = Kuvaus
lecture.groupFull = Kiinti\u00F6 t\u00E4ynn\u00E4
lecture.hours = Kesto tunteina
lecture.maxParticipantsCount = Osallistujia enint.
lecture.multicreate = Luo monta putkeen
lecture.name = Nimi
lecture.participants = Osallistujia
lecture.participate = Ilmoittaudu
lecture.participatedLectures = Ilmoittautumisesi
lecture.roles = Roolit
lecture.saveLecture = Muokkaa
lecture.selectgroup = Valitse aihealue
lecture.startTime = Aloitusaika
lecture.unparticipate = Poista ilmoittautuminen
lectureGroup.createLectureGroup = Luo kurssikokonaisuus
lectureGroup.createNew = Luo uusi
lectureGroup.description = Kuvaus
lectureGroup.manageLectures = Hallitse luentoja
lectureGroup.name = Nimi
lectureGroup.saveLectureGroup = Muokkaa kurssikokonaisuutta
lectureGroup.selectCount = Monellekko saa osallistua
lectureGroup.selectCountUserInfo = Yhden henkil\u00F6n kiinti\u00F6
lectureGroup.view = Tarkastele kursseja
lecturegroup.create.success = Kurssiryhm\u00E4 luotu onnistuneesti.
lecturegroup.list.title = Luennot
lecturegroup.save.success = Kurssiryhm\u00E4 tallennettu onnistuneesti.
license.active = Aktiivinen license.active = Aktiivinen
license.description = Kuvaus license.description = Kuvaus
license.name = Nimi license.name = Nimi
...@@ -655,7 +696,9 @@ newsgroup.writerRole = Kirjoittajaryhm\u00E4 ...@@ -655,7 +696,9 @@ newsgroup.writerRole = Kirjoittajaryhm\u00E4
newslist.header = Uutisryhm\u00E4t newslist.header = Uutisryhm\u00E4t
off = Pois
off = Poissa
on = P\u00E4\u00E4ll\u00E4 on = P\u00E4\u00E4ll\u00E4
...@@ -927,6 +970,8 @@ salespoint.edit = Muokkaa ...@@ -927,6 +970,8 @@ salespoint.edit = Muokkaa
salespoint.name = Nimi salespoint.name = Nimi
salespoint.noSalesPoints = M\u00E4\u00E4r\u00E4 salespoint.noSalesPoints = M\u00E4\u00E4r\u00E4
save = Tallenna
sendPicture.header = L\u00E4het\u00E4 kuva sendPicture.header = L\u00E4het\u00E4 kuva
shop.accountBalance = Credits shop.accountBalance = Credits
...@@ -996,6 +1041,7 @@ sitepage.save = Tallenna ...@@ -996,6 +1041,7 @@ sitepage.save = Tallenna
sitepagelist.header = Sivuston sis\u00E4ll\u00F6t sitepagelist.header = Sivuston sis\u00E4ll\u00F6t
submenu.NotImplementedYet = Toteuttamatta submenu.NotImplementedYet = Toteuttamatta
submenu.actionlog.messagelist = ActionLog submenu.actionlog.messagelist = ActionLog
submenu.actionlog.taskview = N\u00E4yt\u00E4 toiminnat submenu.actionlog.taskview = N\u00E4yt\u00E4 toiminnat
...@@ -1090,6 +1136,11 @@ submenu.voting.create = Uusi kilpailu ...@@ -1090,6 +1136,11 @@ submenu.voting.create = Uusi kilpailu
submenu.voting.myEntries = Omat entryt submenu.voting.myEntries = Omat entryt
submenu.voting.submitEntry = L\u00E4het\u00E4 entry submenu.voting.submitEntry = L\u00E4het\u00E4 entry
submenu.lectureadmin.manageLectureGroups = Hallinnoi
submenu.lectures.viewLectures = Ilmoittaudu
subnavi.billing = Laskutus subnavi.billing = Laskutus
subnavi.cards = Kortit subnavi.cards = Kortit
subnavi.info = Info subnavi.info = Info
...@@ -1097,6 +1148,8 @@ subnavi.products = Tuotteet ...@@ -1097,6 +1148,8 @@ subnavi.products = Tuotteet
subnavi.readers = Lukijat subnavi.readers = Lukijat
subnavi.roles = Roolit subnavi.roles = Roolit
success = Onnistui
supernavi.admin = Yll\u00E4piton\u00E4kym\u00E4 supernavi.admin = Yll\u00E4piton\u00E4kym\u00E4
supernavi.user = K\u00E4ytt\u00E4j\u00E4n\u00E4kym\u00E4 supernavi.user = K\u00E4ytt\u00E4j\u00E4n\u00E4kym\u00E4
...@@ -1115,33 +1168,35 @@ topmenu.admin = Yll\u00E4piton\u00E4kym\u00E4 ...@@ -1115,33 +1168,35 @@ topmenu.admin = Yll\u00E4piton\u00E4kym\u00E4
topmenu.helpdesk = Helpdesk topmenu.helpdesk = Helpdesk
topmenu.user = K\u00E4ytt\u00E4j\u00E4n\u00E4kym\u00E4 topmenu.user = K\u00E4ytt\u00E4j\u00E4n\u00E4kym\u00E4
topnavi.adminassoc = Verkkoassosioinnit topnavi.adminassoc = Verkkoassosioinnit
topnavi.adminshop = Kauppa topnavi.adminlectures = Kurssit ja luennot
topnavi.billing = Laskutus topnavi.adminshop = Kauppa
topnavi.competitions = Kilpailut topnavi.billing = Laskutus
topnavi.compos = Kilpailut topnavi.competitions = Kilpailut
topnavi.contents = Sivuston sis\u00E4lt\u00F6 topnavi.compos = Kilpailut
topnavi.createuser = Luo k\u00E4ytt\u00E4j\u00E4 topnavi.contents = Sivuston sis\u00E4lt\u00F6
topnavi.event = Tapahtuma topnavi.createuser = Luo k\u00E4ytt\u00E4j\u00E4
topnavi.foodwave = Ruokatilaus topnavi.event = Tapahtuma
topnavi.frontpage = Etusivu topnavi.foodwave = Ruokatilaus
topnavi.game = Pelikoodit topnavi.frontpage = Etusivu
topnavi.infoviews = Infon\u00E4kym\u00E4t topnavi.game = Pelikoodit
topnavi.license = Lisenssikoodit topnavi.infoviews = Infon\u00E4kym\u00E4t
topnavi.log = Logi topnavi.license = Lisenssikoodit
topnavi.login = Kirjaudu sis\u00E4\u00E4n topnavi.log = Logi
topnavi.maps = Kartat topnavi.login = Kirjaudu sis\u00E4\u00E4n
topnavi.placemap = Paikkakartta topnavi.maps = Kartat
topnavi.poll = Kyselyt topnavi.placemap = Paikkakartta
topnavi.products = Tuotteet topnavi.poll = Kyselyt
topnavi.profile = Profiili topnavi.products = Tuotteet
topnavi.shop = Kauppa topnavi.profile = Profiili
topnavi.user = Omat tiedot topnavi.shop = Kauppa
topnavi.userevent = Tapahtuma topnavi.user = Omat tiedot
topnavi.userinit = K\u00E4ytt\u00E4j\u00E4n tunnistus topnavi.userevent = Tapahtuma
topnavi.usermgmt = K\u00E4ytt\u00E4j\u00E4t topnavi.userinit = K\u00E4ytt\u00E4j\u00E4n tunnistus
topnavi.userplaces = Konepaikat topnavi.userlectures = Kurssit ja luennot
topnavi.usershop = Kauppa topnavi.usermgmt = K\u00E4ytt\u00E4j\u00E4t
topnavi.userplaces = Konepaikat
topnavi.usershop = Kauppa
tournament.admin.back_to_index = Takaisin turnauksen yll\u00E4pitosivulle tournament.admin.back_to_index = Takaisin turnauksen yll\u00E4pitosivulle
tournament.admin.control = Hallitse tournament.admin.control = Hallitse
...@@ -1381,6 +1436,8 @@ userview.userExists = K\u00E4ytt\u00E4j\u00E4tunnus on jo olemassa. Sinu ...@@ -1381,6 +1436,8 @@ userview.userExists = K\u00E4ytt\u00E4j\u00E4tunnus on jo olemassa. Sinu
viewexpired.body = Ole hyv\u00E4 ja kirjaudu sis\u00E4\u00E4n uudelleen. viewexpired.body = Ole hyv\u00E4 ja kirjaudu sis\u00E4\u00E4n uudelleen.
viewexpired.title = N\u00E4kym\u00E4 on vanhentunut viewexpired.title = N\u00E4kym\u00E4 on vanhentunut
viewlectures.title = Kurssit ja luennot
voting.allcompos.curEntries = Entryja voting.allcompos.curEntries = Entryja
voting.allcompos.descri = Kuvaus voting.allcompos.descri = Kuvaus
voting.allcompos.description = Compojen informaatiot. voting.allcompos.description = Compojen informaatiot.
......
...@@ -177,7 +177,7 @@ public class UserView extends GenericCDIView { ...@@ -177,7 +177,7 @@ public class UserView extends GenericCDIView {
public String saveRoles() public String saveRoles()
{ {
rolebean.saveRoles(user, usersRoles); rolebean.saveRoles(user, usersRoles);
usersRoles = null; usersRoles = null;
return null; return null;
} }
...@@ -190,6 +190,8 @@ public class UserView extends GenericCDIView { ...@@ -190,6 +190,8 @@ public class UserView extends GenericCDIView {
return usersRoles; return usersRoles;
} }
public String crop() public String crop()
{ {
......
package fi.codecrew.moya.web.lecture;
import javax.ejb.EJB;
import javax.enterprise.context.ConversationScoped;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.model.ListDataModel;
import javax.inject.Named;
import fi.codecrew.moya.beans.EventBeanLocal;
import fi.codecrew.moya.beans.LectureBeanLocal;
import fi.codecrew.moya.enums.apps.LecturePermission;
import fi.codecrew.moya.enums.apps.UserPermission;
import fi.codecrew.moya.model.LectureGroup;
import fi.codecrew.moya.utilities.I18n;
import fi.codecrew.moya.web.cdiview.GenericCDIView;
@Named
@ConversationScoped
public class LectureGroupView extends GenericCDIView {
private static final long serialVersionUID = 1L;
@EJB
LectureBeanLocal lectureBean;
@EJB
EventBeanLocal eventBean;
private LectureGroup currentLectureGroup;
private boolean creatingLectureGroup = true;
private ListDataModel<LectureGroup> lectureGroupModel = null;
public void initView() {
if (super.requirePermissions(LecturePermission.MANAGE)) {
super.beginConversation();
}
}
public void saveLectureGroup() {
FacesContext context = FacesContext.getCurrentInstance();
if (currentLectureGroup == null) {
// this should never happen, so no internatiolazion here.
context.addMessage(null, new FacesMessage(I18n.get("error"), "There was some internal error when saving lecture group, basicly there was no lecturegroup to save."));
return;
}
currentLectureGroup = lectureBean.saveLectureGroup(currentLectureGroup);
if (creatingLectureGroup)
context.addMessage(null, new FacesMessage(I18n.get("success"), I18n.get("lecturegroup.create.success")));
else
context.addMessage(null, new FacesMessage(I18n.get("success"), I18n.get("lecturegroup.save.success")));
this.creatingLectureGroup = false;
lectureGroupModel = null;
}
public void editCurrent() {
if (lectureGroupModel != null && lectureGroupModel.isRowAvailable()) {
this.creatingLectureGroup = false;
currentLectureGroup = lectureGroupModel.getRowData();
}
}
public void createNew() {
currentLectureGroup = null;
setCreatingLectureGroup(true);
}
public ListDataModel<LectureGroup> getLectureGroups() {
if (lectureGroupModel == null) {
lectureGroupModel = new ListDataModel<LectureGroup>(lectureBean.getLectureGroups());
}
return lectureGroupModel;
}
public boolean isCreatingLectureGroup() {
return creatingLectureGroup;
}
public void setCreatingLectureGroup(boolean creatingLectureGroup) {
this.creatingLectureGroup = creatingLectureGroup;
}
public LectureGroup getCurrentLectureGroup() {
if (currentLectureGroup == null) {
currentLectureGroup = new LectureGroup(eventBean.getCurrentEvent());
}
return currentLectureGroup;
}
public void setCurrentLectureGroup(LectureGroup currentLectureGroup) {
this.currentLectureGroup = currentLectureGroup;
this.creatingLectureGroup = false;
}
public String getEditPanelTitle() {
if (isCreatingLectureGroup()) {
return I18n.get("lectureGroup.createLectureGroup");
} else {
return I18n.get("lectureGroup.saveLectureGroup");
}
}
}
package fi.codecrew.moya.web.lecture;
import java.util.List;
import javax.ejb.EJB;
import javax.enterprise.context.ConversationScoped;
import javax.faces.model.ListDataModel;
import javax.inject.Inject;
import javax.inject.Named;
import fi.codecrew.moya.beans.EventBeanLocal;
import fi.codecrew.moya.beans.LectureBeanLocal;
import fi.codecrew.moya.enums.apps.LecturePermission;
import fi.codecrew.moya.model.Lecture;
import fi.codecrew.moya.model.LectureGroup;
import fi.codecrew.moya.web.cdiview.GenericCDIView;
import fi.codecrew.moya.web.cdiview.user.UserView;
@Named
@ConversationScoped
public class LectureUserView extends GenericCDIView {
private static final long serialVersionUID = 1L;
@Inject
UserView userView;
@EJB
LectureBeanLocal lectureBean;
@EJB
EventBeanLocal eventBean;
ListDataModel<LectureGroup> lectureGroups = null;
ListDataModel<Lecture> lectures = null;
ListDataModel<Lecture> participatedLectures = null;
LectureGroup currentLectureGroup;
public void initView() {
if (super.requirePermissions(LecturePermission.VIEW)) {
super.beginConversation();
}
}
public ListDataModel<LectureGroup> getLectureGroups() {
lectureGroups = new ListDataModel<LectureGroup>(lectureBean.getLectureGroups());
return lectureGroups;
}
public void selectCurrentLectureGroup() {
if (lectureGroups != null && lectureGroups.isRowAvailable()) {
currentLectureGroup = lectureGroups.getRowData();
lectures = null;
}
}
public LectureGroup getCurrentLectureGroup() {
List<LectureGroup> groups = lectureBean.getLectureGroups();
if (currentLectureGroup == null && groups.size() > 0) {
currentLectureGroup = groups.get(0);
}
return currentLectureGroup;
}
public ListDataModel<Lecture> getLectures() {
if (currentLectureGroup == null)
return new ListDataModel<Lecture>();
lectures = new ListDataModel<Lecture>(lectureBean.findAvailableLectures(getCurrentLectureGroup(), userView.getCurrentUser()));
return lectures;
}
public ListDataModel<Lecture> getParticipatedLectures() {
participatedLectures = new ListDataModel<Lecture>(lectureBean.getParticipatedLectures(userView.getCurrentUser()));
return participatedLectures;
}
public void participateCurrent() {
if (lectures != null && lectures.isRowAvailable()) {
Lecture lecture = lectures.getRowData();
lectureBean.participate(userView.getCurrentUser(), lecture);
super.addFaceMessage("lecture.participated");
this.lectures = null;
}
}
public void unParticipateCurrent() {
if (participatedLectures != null && participatedLectures.isRowAvailable()) {
Lecture lecture = participatedLectures.getRowData();
lectureBean.unparticipate(userView.getCurrentUser(), lecture);
super.addFaceMessage("lecture.unparticipated");
this.lectures = null;
}
}
public boolean isCurrentGroupFull() {
return (lectureBean.userLectureSelectsLeft(getCurrentLectureGroup(), userView.getCurrentUser()) <= 0);
}
public int getCurrentGroupParticipateCount() {
return lectureBean.userLectureSelects(getCurrentLectureGroup(), userView.getCurrentUser());
}
}
package fi.codecrew.moya.web.lecture;
import javax.ejb.EJB;
import javax.enterprise.context.ConversationScoped;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.model.ListDataModel;
import javax.inject.Named;
import fi.codecrew.moya.beans.EventBeanLocal;
import fi.codecrew.moya.beans.LectureBeanLocal;
import fi.codecrew.moya.enums.apps.LecturePermission;
import fi.codecrew.moya.model.Lecture;
import fi.codecrew.moya.model.LectureGroup;
import fi.codecrew.moya.utilities.I18n;
import fi.codecrew.moya.web.cdiview.GenericCDIView;
@Named
@ConversationScoped
public class LectureView extends GenericCDIView {
private static final long serialVersionUID = 1L;
@EJB
LectureBeanLocal lectureBean;
@EJB
EventBeanLocal eventBean;
private LectureGroup currentLectureGroup;
private Lecture currentLecture;
private boolean creatingLecture = true;
private boolean multicreate = false;
private ListDataModel<Lecture> lectures;
private Integer lecturegroupId = null;
public void initView() {
if (super.requirePermissions(LecturePermission.MANAGE)) {
super.beginConversation();
}
}
public void saveLecture() {
FacesContext context = FacesContext.getCurrentInstance();
if (currentLecture == null) {
// this should never happen, so no internatiolazion here.
context.addMessage(null, new FacesMessage(I18n.get("error"), "There was some internal error when saving lecture group, basicly there was no lecturegroup to save."));
return;
}
currentLecture = lectureBean.saveLecture(currentLecture);
currentLectureGroup = currentLecture.getLectureGroup();
if (creatingLecture)
context.addMessage(null, new FacesMessage(I18n.get("success"), I18n.get("lecturegroup.create.success")));
else
context.addMessage(null, new FacesMessage(I18n.get("success"), I18n.get("lecturegroup.save.success")));
this.creatingLecture = false;
lectures = null;
if (isMulticreate()) {
currentLecture = (Lecture) currentLecture.clone();
currentLecture.setName("");
currentLecture.setDescription("");
} else {
currentLecture = null;
}
}
public void editCurrent() {
if (lectures != null && lectures.isRowAvailable()) {
this.creatingLecture = false;
currentLecture = lectures.getRowData();
}
}
public void createNew() {
creatingLecture = true;
currentLecture = null;
}
public Integer getLectureGroupId() {
return lecturegroupId;
}
public void setLectureGroupId(Integer lectureGroupId) {
this.lecturegroupId = lectureGroupId;
}
public ListDataModel<Lecture> getLectures() {
if (lectures == null && getCurrentLectureGroup() != null) {
lectures = new ListDataModel<Lecture>(getCurrentLectureGroup().getLectures());
}
return lectures;
}
public void setLectures(ListDataModel<Lecture> lectures) {
this.lectures = lectures;
}
public boolean isMulticreate() {
return multicreate;
}
public void setMulticreate(boolean multicreate) {
this.multicreate = multicreate;
}
public Lecture getCurrentLecture() {
if (currentLecture == null) {
currentLecture = new Lecture(getCurrentLectureGroup());
}
return currentLecture;
}
public void setCurrentLecture(Lecture currentLecture) {
this.currentLecture = currentLecture;
}
public LectureGroup getCurrentLectureGroup() {
if (currentLectureGroup == null) {
currentLectureGroup = lectureBean.findLectureGroup(lecturegroupId);
}
return currentLectureGroup;
}
public String getEditPanelTitle() {
if (isCreatingLecture()) {
return I18n.get("lecture.createLecture");
} else {
return I18n.get("lecture.saveLecture");
}
}
public boolean isCreatingLecture() {
return creatingLecture;
}
}
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!